Pythonによるデータ準備とデータ統合

BigGorilla

“インタビューと専門家の推定によると、データサイエンティストはデータから有用な情報を探すために、無秩序なデータの収集および準備という退屈な仕事に50~80%の時間を費やしている”

— Steve Lohr, Aug 17, 2014, New York Times (For Big-Data Scientists, ‘Janitor Work’ Is Key Hurdle to Insights)

BigGorillaは、データサイエンティストがデータ統合およびデータ分析を行うためのオープンソースのデータ統合およびデータ準備エコシステムです(Pythonライブラリで構成されています)。BigGorillaは、様々なデータソースから得られたデータを1つのデータベースにまとめてデータ分析を行うためにデータサイエンティストがよく用いるそれぞれのステップを整理して、ドキュメント化しています。各ステップについて、既存技術だけでなく、開発されるであろう技術についても言及しています。

BigGorillaを構成する各コンポーネントは無料でダウンロードおよび使用することができます。BigGorillaはデータサイエンティストによるコード、データセット、または事例の提供を奨励しています。また、野心的なデータサイエンティスト向けに開発方法やドキュメンテーション、およびツールに対する教育およびトレーニングを促進しています。
まずはチュートリアルから始めましょう

概要

BigGorillaのさまざまなコンポーネント (ページ下参照) を使用する場合の一例として、ひとつのシナリオを紹介します。ある会社が、自社製品と競合他社の製品に関する既存顧客と潜在顧客の評判分析をしたいと考えています。このようなプロジェクトのゴールは、関連ツイートやブログ、ニュース記事からデータを取得・準備して、これらに対して好みの評判分析アルゴリズムを適用することです。以下に、評判分析アルゴリズムを実行する前に行う、データ準備ステップの例を図示しています。

まずデータをさまざまな情報源から収集 (acquire)します(この例では関連ツイートやブログ、ニュースフィードから取得)。収集ステップではCSVファイルやJSONファイルが生成されます。続けて2つのデータ抽出アルゴリズムを用いて、以下の情報を抽出 (extract)します:(1) JSON形式の tweet(会社名, 製品、 {ツイート文, ツイートID, 日付})、ここでツイート内容、ツイートID、日付が会社と製品ごとにグループ化されています。(2) CSV形式の about(会社名, 製品, 口コミ, ブログURL, 日付)。この後、データ変換 (transform) ステップを通じて、会社名と製品でツイート文、ツイートID、日付の階層構造を解消してJSONファイルをCSVファイルに変換します。次のステップでは、あらかじめユーザによって設計された最終スキーマ final(会社名, 製品, 発言内容, データソース, 日付) で2つのスキーマをマッチング (match schemas) します。スキーママッピング (map schemas) コンポーネントは、マッチングされた結果を使い、2つの情報を組み合わせることによって最終スキーマに適合するデータを作成するスクリプトを生成します。最後のステップであるデータマッチング (match data) では、会社名と製品の各組み合わせに対応するすべての発言内容を特定します。各ステップは手動で連係させることも、ワークフロー管理 (workflow management) ツールを通じて連係させることもできます。

データ収集
DATA ACQUISITION

外部のソース(webページ、RDBMSのテーブル、EメールサーバからのExcelおよびPDFファイルなど)からデータを収集したり、センシティブなデータを人工的に生成したいときにこのコンポーネントを使用します。

データ抽出
DATA EXTRACTION

部分的に構造化されたテキスト、または自然言語で記述されたテキストから構造化されたデータを抽出したいとき (たとえば、テキストから製品に関する属性・値ペアを抽出したいとき、人名または組織名を抽出するとき) にこのコンポーネントを使用します。

スキーママッチングとマージング
SCHEMA MATCHING & MERGING

2つのスキーマ間で異なる属性をマッチングしたいとき (たとえば、片方のスキーマに”address”があり、もう一方のスキーマに”location”があるとき)、または2つのスキーマを1つにマージする際に、このコンポーネントを使用します。

データマッチングとマージング
DATA MATCHING & MERGING

2つのエンティティが同じエンティティであることを特定するとき、たとえば、2つのタプル (David Smith, JHU, 35) と (Dave Smith, John Hopkins, 37) が現実世界において同じエンティティであるかを判定したいとき、または様々のソースからデータを組み合わせるときに、このコンポーネントを使用します。このような処理には、値の衝突を解消する必要がある場合もあります。

データ変換
DATA TRANSFORMATION

データ形式を変換したいとき(たとえばCSVからJSON)、またはデータを好みの形に再構築もしくは整理したいときにこのコンポーネントを使用します。

スキーママッピング
SCHEMA MAPPING

異なるソースからのデータをひとつのスキーマに適合するデータに組み合わせるスクリプトを、スキーママッチングから生成したいときに、このコンポーネントを使用します。

ワークフロー管理
WORKFLOW MANAGEMENT

データ統合およびデータ準備のタスクのパイプラインを作成し、パイプラインを自動化し、入出力データ、エラーなどを処理したいときに、このコンポーネントを使用します。