データを整理するための組織化されたプロセス


34

Rを使用したデータサイエンスの限られた時間から、不良データのクリーニングは分析用データの準備の非常に重要な部分であることに気付きました。

データを処理する前にクリーニングするためのベストプラクティスやプロセスはありますか?その場合、これらのベストプラクティスの一部を実装する自動化ツールまたは半自動化ツールはありますか?


1
おそらくそれはあなたが下に何を意味するか、ビットをクリアすることをお勧めしますデータのクリーニング、少しは私の意見を混乱に見える
MolbOrg

2
クリーニングデータの意味をさらに説明すると役立ちます。私が働いている文脈では、クリーニングはフォーマットとは関係ありません-単にその解析/インポートと呼びます-しかし、むしろノイズの多いユーザーデータを話し、一貫性を確認することを意味します。使用する手法は、特にデータがまばらな場合、単純な統計ルールからファジーアルゴリズムまで、データセット固有です。
AdrianBR

回答:


21

Rは、いくつか含まれている標準の中、データクリーニングのために使用することができるデータ操作のための機能をベース(パッケージgsubtransform等、等)、ならびに様々なサードパーティ製のパッケージにstringr変形 / reshape2、及びplyr / dplyr。例およびこれらのパッケージとその機能の使用のベストプラクティスは、次の論文に記載されている:http://vita.had.co.nz/papers/tidy-data.pdf

さらに、Rは、データのクリーニングと変換に特化したパッケージをいくつか提供しています。

包括的かつコヒーレントなアプローチクリーニングデータの例および使用を含むRに、editrulesdeducorrectパッケージ、並びにの説明ワークフローフレームワーク Rで洗浄データの)は、私は非常にお勧めしており、以下の論文に提示されている:HTTP ://cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf


2
またdplyr、特定のplyrツールの最適化された言い換えでdata.tableあり、データを操作するためのまったく異なるアプローチであるを追加します。両方ともハドリー・ウィッカムによる。
シャドウトーカー14

@ssdecontrol:同意します-答えを更新しました。Hadleyはdplyrパッケージの作成者ですが、作成者ではありませんdata.table
アレクサンドルブレフ14

16

私の観点からは、この質問は2段階の回答に適しています。最初の部分は、ソフト前処理と呼びましょう。さまざまなデータマイニングアルゴリズムを使用して、さらなる分析に適した方法でデータを前処理します。目標が1回のショットで対処できるほど単純な場合、これは分析そのものである可能性があることに注意してください。

2番目の部分であるハード前処理は、実際には他のプロセスよりも前に行われ、単純なツールまたはスクリプトを使用してデータをクリーンアップし、処理する特定のコンテンツを選択するものと見なされます。この問題に対して、POSIXは、簡潔で非常に強力な前処理スクリプトを作成するために使用できる素晴らしい一連の魔法のツールを提供します。

たとえば、ソーシャルWebサイト(twitter、facebookなど)からのデータを処理するユーザーの場合、データ検索では通常、非常に特定の形式のファイルが生成されますが、欠落しているフィールドが含まれている可能性があるため、必ずしもうまく構造化されているわけではありません。これらの場合、単純なawkスクリプトでデータをクリーンアップし、後で処理するための有効な入力ファイルを作成できます。魔法のセットから、1も指摘がありgrepsedcutjoinpastesort、およびその他のツールの全体の多数。

単純な場合、ソースファイルの核心が多すぎる場合、データをクリーンアップするためのメソッドのバンドルを作成する必要もあります。そのような場合、通常、Python、Ruby、Perlなどのスクリプト言語(シェル言語以外)を使用することをお勧めします。これにより、APIを構築して特定のデータを非常に簡単で再利用可能な方法で選択できます。このようなAPIは、IMDbPYStack Exchange APIなど、多くのライターによって公開されることがあります

だから、質問に答える:ベストプラクティスはありますか?通常はタスクに依存します。常に同じデータ形式を扱う場合は、一般的に、前処理するために組織化されたスクリプトを記述するのが最善です。一方、いくつかのデータセットを単純かつ高速にクリーンアップする必要がある場合は、Pythonスクリプトなどよりもはるかに高速に実行できる簡潔なシェルスクリプトをPOSIXツールに期待してください。以来、クリーンアップがデータセットにし、あなたの目的の両方に依存、それはすべてがすでに行っているのは難しいです。それでも、問題を途中でやめる多くのAPIがあります。


hm-データを取得し、データをフォーマットし(awk sed grepなど)、最初のステップとしてノイズを除去してから、さらに深くします。そうis't ハード前処理まず、使用もしあなたサームで来る
MolbOrg

@MolbOrgはい、それは私が意味したことです。私はと呼ばれる前処理ハードスクリプティング側を、そして前処理ソフト、一般的に減らし、データ・マイニング・アルゴリズムの使用サイズの問題(データベースクリーンアップ)のを。また、2番目の部分であるハード前処理は、実際には他のプロセスの前に来ることに注意しました。そのような用語があまり明確でない場合は、答えを改善するための他の提案を喜んで検討します。
ルーベンス

1
ああ、はい、十分な注意を払っていない、生データの前処理。テストされたatm-はい、perl onelinerは、300MBの3.5kk文字列ではgrepの3倍遅く、perlでは1.1秒、grep 0.31秒でした。perlの正規表現が実際よりもずっと遅いという記事を見ました(grepにも
当てはまると思い

@MolbOrg素敵なリファレンス!AFAIKは、grepデフォルトでPOSIX基本正規表現を使用し、として実行する場合は拡張POSIX正規表現を、としてgrep -E実行する場合はPCRE を許可しますgrep -P
ルーベンス

1
これは非常に良い投稿です。Rはデータ操作には優れていますが、文字列操作の冗長な構文と、データ構造のリストとマトリックスへのかなり厳格な準拠のため、データクリーニングではかなり面倒です。
シャドウトーカー14

11

データクリーニングが完全に自動化されることはめったにない理由の1つは、特定の問題、方法、および目標を考えると、「クリーン」が何を意味するかを定義するために非常に多くの判断が必要だからです。

欠落データの値を代入するのと同じくらい単純な場合もあれば、以前の自動化プロセス(コーディング、検閲、変換など)からのデータ入力エラーまたはデータ変換エラーの診断と同じくらい複雑な場合もあります。これらの最後の2つのケースでは、データは外見では良く見えますが、実際は間違っています。このような診断には、多くの場合、手動の分析と検査、および使用したデータソースと方法に関する情報などの帯域外情報も必要です。

また、一部のデータ分析方法は、誤ったデータや欠落したデータが代入またはデフォルト値を与えられるよりも空白(またはN / A)のままになっていると、より適切に機能します。これは、Dempster-Shafer Belief関数など、不確実性と無知の明示的な表現がある場合に当てはまります。

最後に、クリーニングプロセスの特定の診断と測定基準があると便利です。欠損値または誤った値がランダムに分布しているか、分析の結果に影響を及ぼす可能性のある何らかの方法で集中している。代替のクリーニング戦略またはアルゴリズムの効果をテストして、それらが最終結果に影響するかどうかを確認すると便利です。

これらの懸念を考えると、表面的、無頓着、または完全に自動化された方法でデータクリーニングを処理する方法やプロセスは非常に疑わしいです。これらの詳細には多くの悪魔が隠れており、真剣な注意を払うことは有益です。


1
副次的なコメントとして:パイプラインのさらに進んだ何らかの問題に起因する誤ったデータを見つけることは、ゴールドスキルだと思います。私の分析がなぜ奇妙な結果を生み出し、パイプラインを見たときに何らかのエラーを見つけた理由を何度も疑問に思いました。例:私のデータがすべて高価格に大きく偏っているのはなぜだろう-私のメンタルモデルから外れている。私は周りに尋ねられたとき、私は...いくつかの下請けがブリーフィングを誤解し、私たちは混合データをwhantedながら、高所得層のためのデータを提供することを見出し
クリスチャン・ザウアー

はい!データエラーは、プロセスの問題の兆候であることがよくあります。プロセスのどこでエラーが発生したか、またメカニズムを知ることは、クリーニングプロセスに大いに役立ちます。ただし、プロセスの問題を修正して、クリーンな(またはクリーンな)データを生成することをお勧めします。
MrMeritology 14

5

自動クリーニングについて:エラーの数とエラーの定義は多くの場合データに依存するため、データを自動的にクリーニングすることはできません。たとえば、列「Income」に負の値が含まれている可能性がありますが、これはエラーです。ケースについて何かしなければなりません。一方、「月間貯蓄」列には負の値が合理的に含まれている可能性があります。

このようなエラーはドメインに大きく依存しているため、エラーを見つけるには、ドメインの知識、つまり人間が得意とするもの、自動化されたプロセスはそれほど必要ではありません。

自動化できる場所と自動化する場所は、プロジェクトの繰り返しです。たとえば、毎月作成する必要があるレポート。エラーを発見した場合は、自動化されたプロセスを配置する必要があります。自動化されたプロセスにより、その後の数か月でこの種のエラーを発見でき、時間を節約できます。


5

実際の研究を行う前に、データを「クリーニング」するための普遍的な手法はないと思います。一方、私は可能な限り再現可能な研究を行うことを目指しています。再現可能な研究を行うことにより、バグや貧弱なパラメータ/仮定を使用してクリーニング技術を使用した場合、他の人がそれを見つけることができます。

再現性のある研究に大いに役立つ素晴らしいRパッケージknitrがあります。

もちろん、すべての研究を完全に再現できるわけではありません(たとえば、Twitterのライブデータ)が、少なくとも、クリーニング、フォーマット、および前処理の手順を簡単に文書化できます。

CourseraのReproducible Researchコースに準備された私の評価を確認できます。


3

OpenRefine(以前のGoogle Refine)は、データのクリーンアップと変換をインタラクティブに実行できる優れたツールです。最終出力は、さまざまな標準形式(json、csv)または任意のカスタム形式(例:wiki)にエクスポートできます。

「ブランクダウン」機能を使用してソートすることにより、OpenRefineで正確な重複を処理できます。また、会社名や住所などの似たような重複をグループ化できる近似文字列(ファジー)クラスタリング機能も備えています。この機能だけでも素晴らしいです。


1
これは素晴らしい、過少報告されているツールです。
thanks_in_advance

2

Courseraにはこれに専念するコース全体があります。あなたが彼らが言及する技術を調べたいと思うかもしれません、そして、重要な部分は何をいつ使うべきかを知ることです。

https://www.coursera.org/learn/data-cleaning

各データセットには独自の問題があり、すべての手順がすべてのデータセットに適用できるわけではないため、自動化するよりも手動で行う方が常に良い方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.