データ型変換¶
Data Prepのデータ変換機能は異種データ型をサポートします。異種データ型とは、データセットをData Prepライブラリにインポートするときに、セルレベルでデータ型が自動的に識別されることを意味します。Data Prepプロジェクトの同じ列内で異種データ型をサポートする能力は強力です。この能力により、あらゆるデータをプロジェクトに取り込むことができるからです。その結果、データ品質の課題がつきまとう混在データ型も、以下の「ベストプラクティス」セクションで説明するように、Data Prepでは同質化と調停を容易に実行できます。異種データをサポートしない、強力な型指定を行う他のアプリケーションの場合、データ準備作業を始める前に、別のツールを使用してソースデータを同質化する必要があります。
この記事の目的は、セルと列に対してData Prepがいつどのようにデータ型を特定するかを説明するとともに、Data Prepプロジェクト内で異種データを操作するためのベストプラクティスを説明することです。
Data Prepはデータタイプをどのように識別するのでしょうか。¶
ユーザーがデータセットを Data Prepライブラリにインポートするときに、すべてのセル内にあるすべてのデータは、インポートプロセスの一環として以下のデータ型のいずれかを自動的に特定されます。
-
数値
-
ブーリアン
-
String(文字型)またはText(テキスト型)
-
Date Time(日付時刻型)(以下で説明する条件の場合)
Data Prepは、以下のルールに従うアルゴリズムを使用してこの作業を実行します。
-
値がnullの場合、その値を無視します。
-
値が文字通り、“true”(真実)または “false”(偽)である場合、その値を Boolean(論理型)として扱います。
-
プログラムにより値を数値として読み取ることが可能な場合、その値をNumeric(数値型)として扱います。
-
その他のすべての値はデフォルトでString(文字型)になります。
たとえば、10列のデータセットと100万行のデータが含まれます。これは、合計1000万個のセルに変換されます。この場合、Data Prepは上記のアルゴリズムのルールに従って、1,000万個のセルのそれぞれに対してデータ型を特定します。
次に、1つの列の各セル内に存在している主要なデータ型に基づいて、列ごとにキャスト(データ型変換)を実行します。
日付時刻の値¶
1 つのルールとして、日付と時刻の多様な形式の分析と解決を実行するには複雑な処理が必要なので、Data Prepはフラットファイル内にある date time(日付時刻型)の値を識別しません。ただし、このルールにもいくつかの例外が存在します。以下の条件下でセルのデータをインポートするときに、セルのデータはdate time(日付時刻型)として認識されます。
-
データベーステーブル(JDBC、Hiveなど)およびデータベースがスキーマを提供している
-
ParquetファイルおよびParquet形式がスキーマを提供している
-
Microsoft ExcelファイルおよびExcel形式が各セルのデータ型を指定している
異種データ¶
同じ列内にある異種データに対して、Data Prepはどのように列の型を決定しますか?100万のデータ行が存在している上記の例に戻ると、かなりの確率で同じ列の中には別のデータ型に属すデータが存在しています。たとえば、string(文字型)の値とnumeric(数値型)の値が同じ列の中に混在している可能性があります。 この場合、Data Prepには列のデータ型をキャスト(データ型変換)する方法を特定する別のロジックがあります。このロジックについて説明するために、非常に簡潔な別の例を使用しましょう。
ここに、1行につき1列、全部で15行のデータがあります。最初の9行はNumeric(数値型)として識別され、残る6個の値はString(文字型)として識別されています。この列の型が、以下のようにNumeric(数値型)としてキャストされたことに注意してください。
インポートプロセスの際に、アルゴリズムの計算が自動的に実行され、60%の値がNumeric(数値型)、40%がStrings(文字型)であると検出されました。この列内の主要なデータ型に基づいて、Data Prepが列の型をキャストする方法が特定されます。この場合、この列はNumeric(数値型)としてキャストされます。
1 つの列内で複数のデータ型が同値(同じ割合)である場合はどうなりますか?¶
同値、たとえば列の 50% の値が特定の型で、残りの 50% が別の型である場合、この同値を裁定するために、計算ロジックは以下の付加的なルールを提供しています。
列データの組み合わせ | 裁定結果 |
---|---|
50%のブール値と50%の日付 | ブーリアン |
50%のブール値と50%の数値 | ブーリアン |
50%のブール値と50%の文字列 | ブーリアン |
50%の日付と50%の数値 | 数値 |
50%の日付と50%の文字列 | 文字列 |
50%の数値と50%の文字列 | 文字列 |
要約すると、優先度の順に並べる場合、同数の場合は以下のように裁定されます。
- ブーリアン
- 文字列
- 数値
- 日付
データの追加の効果¶
Data Prepライブラリまたは既存のプロジェクトに対してユーザーが新しいデータを取り込んだ結果、1 つの列内にある主要なデータ型が変化した場合はどうなりますか?カラムの型の推論と、それに伴うキャストが発生するのは、Data Prepライブラリへのインポート プロセスのときだけです。
データ型が、1つの列内にある主要なデータ型を高い精度で反映しない可能性がある2種類のシナリオは、以下のとおりです。
-
Data Prepライブラリへのインポートの際に、列の型を推論する目的で最初の1,000行のデータを使用します。一般的に、Data Prepはデータセットの列の型を高精度で推定してキャストを行ううえで、1,000行のデータで十分であるという結論を下しました。なお、この行数はユーザーが設定することも可能です。これら最初の 1,000 行には、「プレビュー」状態という非公式な呼び名があります。これは、最初のロードの場合、または既存のデータセットに対応する更新済みのバージョンをロードする場合のどちらかで、データセットをロードしている間にアプリケーション内でユーザーが目にする状態です。
中には、最初の1,000行を過ぎた後、特定の列の主要なデータ型が変化するという、通常とは異なる状況もあり得ます。この場合、この列はそれら最初の1,000行を使用して引き続きキャストが行われます。プレビューの行数を設定するには、オプションペインのスキーマ用に処理する行のフィールドの値を変更します。行数はインポート中に設定できますが、Data Prepのベストプラクティスでは、Filtergramsを使用してデータ品質の問題を特定して対処することを推奨します。詳細については、ベストプラクティスを参照してください。
-
既存のプロジェクト内で参照または追加の操作を実行した後、その操作の結果として列に流入したデータに基づいて、列の主要な型が変化する可能性があります。列の型に関する推論が発生するのはインポートプロセスのときだけなので、当初キャストに使用された列の型は、新しい主要な型にかかわらず、不変のままです。ただしData Prepのベストプラクティスは、データ品質の課題を識別および解決するために、複数のソースから取得したデータをアンサンブルした後、標準的なデータ調停プラクティスの一部として、ユーザーが常にFiltergramsを使用することを推奨しています。
ベストプラクティス¶
自分のデータ内でデータ型の課題を突き止めて修復する目的で、Data Prepをどのように使用すればよいでしょうか?¶
Data Prepはごく初期の段階から、データ品質に関係するこの種の課題を突き止めて解決することを目的として構築されています。通常、データセットをライブラリにインポートした直後、またはデータセットをプロジェクトに追加した直後に推奨される次のステップは、データ品質が強化される方法でデータ型を裁定することです。データの調停とは、データ準備のうち重要な要素の1つであり、ユーザーが調停を実行できるように、Data Prepは視覚的なインジケーターとFiltergramsのようなツールを提供しています。
例¶
既存のプロジェクトへの追加を行った後、この列の主要なデータ型が"numeric"(数値型)から"string"(文字型)に変化したとします。インポートプロセスの際に、この列は当初numeric(数値型)として識別され、正しくキャストが行われ、このプロジェクト内で引き続き使用されています。追加操作の後、主要な型は現在はnumeric(数値型)であるにもかかわらず、列の型がstring(文字型)にとどまっていることに注意してください。ただし、視覚的なインジケーターは、numeric(数値型)の値が右寄せで表示される状態を示しており、この列で型の不一致が発生していることを容易に認識できます。
この列に対応するFiltergramを開くと、この列内に存在する値のうち、この列の型に取って「有効」でない値をすぐに特定できます:
フィルターグラムの赤いバーは、不適合なデータ型があることを示しています。無効リンクをクリックして、適合しない値のみを表示します。
「有効ではない」データ型、つまり主要な型とは異なる他のすべての型を識別して、それら有効でない値のみを表示するようにフィルター処理を行った後、プロジェクト内でレンズを作成し、それら不適合の値のみを示す1つのAnswerSetを生成することができます。その後、そのAnswerSetを使用して、それらの値に関する修復プロセスを支援することができます。「無効な」型を確認した後、その列の型を別のデータ型に変換することを考えるはずです。次のように列メニューを使用して、この操作を実行できます。