Rを使用したデータサイエンスの限られた時間から、不良データのクリーニングは分析用データの準備の非常に重要な部分であることに気付きました。
データを処理する前にクリーニングするためのベストプラクティスやプロセスはありますか?その場合、これらのベストプラクティスの一部を実装する自動化ツールまたは半自動化ツールはありますか?
Rを使用したデータサイエンスの限られた時間から、不良データのクリーニングは分析用データの準備の非常に重要な部分であることに気付きました。
データを処理する前にクリーニングするためのベストプラクティスやプロセスはありますか?その場合、これらのベストプラクティスの一部を実装する自動化ツールまたは半自動化ツールはありますか?
回答:
Rは、いくつか含まれている標準の中、データクリーニングのために使用することができるデータ操作のための機能をベース(パッケージgsub
、transform
等、等)、ならびに様々なサードパーティ製のパッケージにstringr、変形 / reshape2、及びplyr / dplyr。例およびこれらのパッケージとその機能の使用のベストプラクティスは、次の論文に記載されている:http://vita.had.co.nz/papers/tidy-data.pdf。
さらに、Rは、データのクリーニングと変換に特化したパッケージをいくつか提供しています。
包括的かつコヒーレントなアプローチクリーニングデータの例および使用を含むRに、editrulesとdeducorrectパッケージ、並びにの説明ワークフロー(フレームワーク Rで洗浄データの)は、私は非常にお勧めしており、以下の論文に提示されている:HTTP ://cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf。
dplyr
、特定のplyr
ツールの最適化された言い換えでdata.table
あり、データを操作するためのまったく異なるアプローチであるを追加します。両方ともハドリー・ウィッカムによる。
dplyr
パッケージの作成者ですが、作成者ではありませんdata.table
。
私の観点からは、この質問は2段階の回答に適しています。最初の部分は、ソフト前処理と呼びましょう。さまざまなデータマイニングアルゴリズムを使用して、さらなる分析に適した方法でデータを前処理します。目標が1回のショットで対処できるほど単純な場合、これは分析そのものである可能性があることに注意してください。
2番目の部分であるハード前処理は、実際には他のプロセスよりも前に行われ、単純なツールまたはスクリプトを使用してデータをクリーンアップし、処理する特定のコンテンツを選択するものと見なされます。この問題に対して、POSIXは、簡潔で非常に強力な前処理スクリプトを作成するために使用できる素晴らしい一連の魔法のツールを提供します。
たとえば、ソーシャルWebサイト(twitter、facebookなど)からのデータを処理するユーザーの場合、データ検索では通常、非常に特定の形式のファイルが生成されますが、欠落しているフィールドが含まれている可能性があるため、必ずしもうまく構造化されているわけではありません。これらの場合、単純なawk
スクリプトでデータをクリーンアップし、後で処理するための有効な入力ファイルを作成できます。魔法のセットから、1も指摘がありgrep
、sed
、cut
、join
、paste
、sort
、およびその他のツールの全体の多数。
単純な場合、ソースファイルの核心が多すぎる場合、データをクリーンアップするためのメソッドのバンドルを作成する必要もあります。そのような場合、通常、Python、Ruby、Perlなどのスクリプト言語(シェル言語以外)を使用することをお勧めします。これにより、APIを構築して特定のデータを非常に簡単で再利用可能な方法で選択できます。このようなAPIは、IMDbPYやStack Exchange APIなど、多くのライターによって公開されることがあります。
だから、質問に答える:ベストプラクティスはありますか?通常はタスクに依存します。常に同じデータ形式を扱う場合は、一般的に、前処理するために組織化されたスクリプトを記述するのが最善です。一方、いくつかのデータセットを単純かつ高速にクリーンアップする必要がある場合は、Pythonスクリプトなどよりもはるかに高速に実行できる簡潔なシェルスクリプトをPOSIXツールに期待してください。以来、クリーンアップがデータセットにし、あなたの目的の両方に依存、それはすべてがすでに行っているのは難しいです。それでも、問題を途中でやめる多くのAPIがあります。
grep
デフォルトでPOSIX基本正規表現を使用し、として実行する場合は拡張POSIX正規表現を、としてgrep -E
実行する場合はPCRE を許可しますgrep -P
。
データクリーニングが完全に自動化されることはめったにない理由の1つは、特定の問題、方法、および目標を考えると、「クリーン」が何を意味するかを定義するために非常に多くの判断が必要だからです。
欠落データの値を代入するのと同じくらい単純な場合もあれば、以前の自動化プロセス(コーディング、検閲、変換など)からのデータ入力エラーまたはデータ変換エラーの診断と同じくらい複雑な場合もあります。これらの最後の2つのケースでは、データは外見では良く見えますが、実際は間違っています。このような診断には、多くの場合、手動の分析と検査、および使用したデータソースと方法に関する情報などの帯域外情報も必要です。
また、一部のデータ分析方法は、誤ったデータや欠落したデータが代入またはデフォルト値を与えられるよりも空白(またはN / A)のままになっていると、より適切に機能します。これは、Dempster-Shafer Belief関数など、不確実性と無知の明示的な表現がある場合に当てはまります。
最後に、クリーニングプロセスの特定の診断と測定基準があると便利です。欠損値または誤った値がランダムに分布しているか、分析の結果に影響を及ぼす可能性のある何らかの方法で集中している。代替のクリーニング戦略またはアルゴリズムの効果をテストして、それらが最終結果に影響するかどうかを確認すると便利です。
これらの懸念を考えると、表面的、無頓着、または完全に自動化された方法でデータクリーニングを処理する方法やプロセスは非常に疑わしいです。これらの詳細には多くの悪魔が隠れており、真剣な注意を払うことは有益です。
自動クリーニングについて:エラーの数とエラーの定義は多くの場合データに依存するため、データを自動的にクリーニングすることはできません。たとえば、列「Income」に負の値が含まれている可能性がありますが、これはエラーです。ケースについて何かしなければなりません。一方、「月間貯蓄」列には負の値が合理的に含まれている可能性があります。
このようなエラーはドメインに大きく依存しているため、エラーを見つけるには、ドメインの知識、つまり人間が得意とするもの、自動化されたプロセスはそれほど必要ではありません。
自動化できる場所と自動化する場所は、プロジェクトの繰り返しです。たとえば、毎月作成する必要があるレポート。エラーを発見した場合は、自動化されたプロセスを配置する必要があります。自動化されたプロセスにより、その後の数か月でこの種のエラーを発見でき、時間を節約できます。
実際の研究を行う前に、データを「クリーニング」するための普遍的な手法はないと思います。一方、私は可能な限り再現可能な研究を行うことを目指しています。再現可能な研究を行うことにより、バグや貧弱なパラメータ/仮定を使用してクリーニング技術を使用した場合、他の人がそれを見つけることができます。
再現性のある研究に大いに役立つ素晴らしいRパッケージknitrがあります。
もちろん、すべての研究を完全に再現できるわけではありません(たとえば、Twitterのライブデータ)が、少なくとも、クリーニング、フォーマット、および前処理の手順を簡単に文書化できます。
CourseraのReproducible Researchコースに準備された私の評価を確認できます。
OpenRefine(以前のGoogle Refine)は、データのクリーンアップと変換をインタラクティブに実行できる優れたツールです。最終出力は、さまざまな標準形式(json、csv)または任意のカスタム形式(例:wiki)にエクスポートできます。
「ブランクダウン」機能を使用してソートすることにより、OpenRefineで正確な重複を処理できます。また、会社名や住所などの似たような重複をグループ化できる近似文字列(ファジー)クラスタリング機能も備えています。この機能だけでも素晴らしいです。
Courseraにはこれに専念するコース全体があります。あなたが彼らが言及する技術を調べたいと思うかもしれません、そして、重要な部分は何をいつ使うべきかを知ることです。
https://www.coursera.org/learn/data-cleaning
各データセットには独自の問題があり、すべての手順がすべてのデータセットに適用できるわけではないため、自動化するよりも手動で行う方が常に良い方法です。