チャレンジ #262: 日付フォーマットをマスターする
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- ミュート
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
こんにちは、Maveryx!
先週のチャレンジの回答はこちらで見つけることができます。
今週のチャレンジは、コミュニティメンバーAntoBennetsha Jabamalai (@AntobennetshaJ)によって提供されました。データ準備スキルを磨きましょう!Antoさんに感謝します!
ほとんどの方は、日常の業務の中で様々な形式の日付データを扱う作業に遭遇していると思いますが、正直にいうと、プロセスを合理化する前に日付形式を定期的にチェックする人はいないと思います。
このチャレンジでは、調査データセットの一連の日付をクリーニングするタスクに直面します。この日付は文字列型のフィールドに収集されています。これは、調査の回答者がさまざまな形式で日付を入力している、という意味です。その結果、日付に異なる区切り文字や追加の不要な情報が含まれることになりました。調査データを実際に分析するためには、すべての日付を一貫したフォーマット(YYYY-MM-DD)に標準化し、古いものから新しいものまで整理することが重要です。
もう少し手助けが必要ですか? アカデミーにあるインタラクティブレッスン「データを列や行に分割する」では、スラッシュやハイフン、ドットなどの複数の区切り文字やその他の余分の文字を含むデータセット内の値の処理に関しての洞察が得られます。
健闘を祈ります!
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
回答します。
入力データの日付フォーマットの区切り文字が実際の日付データと合っていないものがあるので
すべて"-"に変換してから処理しました。
Workflow
日付識別子への変換テーブル (conversion to Specifier)
from | to |
dd | %d |
mm | %m |
yyyy | %Y |
Dynamic Replace Tool入力用の式 (Expression for Dynamic Replace)
exp | BoolExpression | New Field |
DateTimeParse([Date1],[Date2]) | -1 | Date1 |
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
出来ました。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
ツールゴルフです。並び順さえ気にしなければ、それほど複雑じゃないフォーミュラーツール一発でいけます
②①の位置にオフセット-11をすると、探したい数字の文字の位置になる
③Substringで②の場所の文字を見つけて、連結
SubString([Date Field],FindString([Date Field], "yyyy")-11,4)
+"-"
+SubString([Date Field],FindString([Date Field], "mm")-11,2)
+"-"
+SubString([Date Field],FindString([Date Field], "dd")-11,2)
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
できました!これは、、、いろいろなやり方がありそうですね!
フォーミュラが手っ取り早いですが、こういうのってクロスタブとか使って作りたくなっちゃいます(結局、3パターン作ってみました)。
GetPartパターン
IF GetPart([2], "./-", 0)="yyyy" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="yyyy" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF
+"-"+
IF GetPart([2], "./-", 0)="mm" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="mm" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF
+"-"+
IF GetPart([2], "./-", 0)="dd" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="dd" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF
ひたすらReplaceして、DateTimeParseにぶちこむパターン
DateTimeParse(ReplaceChar([1], "./", "-"),ReplaceChar(Replace(Replace(Replace([2], "dd", "%d"),"mm","%m"),"yyyy","%Y"),"./","-"))
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
似通ってますが3パターン作ってみました。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
フォーミュラーでのみ頑張りたくなりがちです