データの集計は、ExcelよりPython使ったほうが100倍早い(pandas-profiling, pixiedust)


Pythonのpandas-profilingと、pixiedustの2つのライブラリを使うと、データの集計・グラフの作成が、感動的なほど早く終わることを実感したので共有します。

Excelでデータ集計・グラフ作成した場合と比較すると、体感で100倍くらい早く終わります(誇張ではなく)

Pythonで爆速でデータ集計する方法(体感所要時間:5分)

前提:

以下の環境が整備されていることは、前提とします。

  • Pythonのインストール(約30分)
  • データ分析に必要な各種ライブラリのインストール(約30分)  →numpy, matplotlib, pandas, jupyter など  →Anacondaをインストールすれば、Pythonと各種ライブラリは同時にインストールされます。

また、集計対象である、テーブル形式のcsvデータは既に用意されているものとします。

↓Excelで表示すると、こんな感じのデータのことです。

手順:

①pandas-profilingと、pixiedustをインストールする(約2分)

pipでインストールできます。
特に面倒な感じはなく、一発で入りました。

pip install pandas-profiling
pip install pixiedust

②jupyter notebookを開く(約1分)

csvファイルがあるディレクトリにコマンドラインで移動して、
jupyter notebookを開きます。
※ちなみに、jupyter notebookを使うか否かでも、体感所要時間は3倍くらい違う

cd (移動先ディレクトリ)
jupyter notebook

jupyter notebookを開くと、こんな感じです↓

個人的には、以下の機能が通常のpythonと比較して、特に便利だなと感じます。

  • ブロック毎に処理を実行できる
    • 通常のpythonだと、実行するたびにデータを読み込むことになり、時間がかかる
  • グラフの描画結果などが残る
    • 描画したグラフなどが、notebook上で残るので、分析の流れを忘れにくい
  • Markdownでメモが書ける
    • 考察など書いておくと、後で見返しやすい
  • HTML、PDFなどで容易に共有できる
    • jupyterをインストールしていない人にも、簡単に結果共有できる

③数行スクリプトを書く → 実行(約2分)

以下のコードを書いて実行すると、結果が出力されます。

import pandas as pd
import pandas_profiling as pp
import pixiedust as px

df = pd.read_csv('hoge.csv')
pp.ProfileReport(df)
px.display(df)

信じられない人もいるかもしれませんが、これでお終いです。
これだけで、研究室での発表、顧客との商談、社内での対策会議を行うのに十分な情報を準備できます。

この手順を踏むだけで、以下の集計結果が得られます。

結果:

pandas_profilingにより得られる結果

①Overview(概要)

データの素性に関する概要情報が得られます。
以下のように出力されます。

■Dataset info

項目名 内容
Number of variables 変数の数
Number of observations サンプル数
Total Missing(%) 欠損率?(詳細不明)
Total size in memory データサイズ
Average record size in memory 1レコードあたりのデータサイズ

「Variables types」には、自動判定された各変数の型が出力されます。

また、入力データによって、以下のようなWarningが出るケースがあります。(手元で確認したケースのみ)
・A1列とA2列は、相関係数が非常に高い(≒相関係数1)
・A3列は、全体の3%のデータが欠損である
・A4列は、記載が多岐に渡る(105のユニークな値が存在する)

②Variables(変数ごとの統計量)

以下のように、クラス数、平均値、頻度分布などが集計されます。

③Correlations(変数ごとの相関関係)

以下のように、変数の相関関係が可視化されます。対角線は自己相関なので、赤(=1)となります。

④Sample(変数ごとの相関関係)

以下のように、5件のサンプルデータの実際の入力値が出力されます。

pixiedustにより得られる結果

①Sheme(変数型)とTable(データテーブル)

以下のように、各変数の型と、データテーブルが初期では表示されます。

②棒グラフ

グラフアイコンで、Bar Chartを選択し、Optionsで集計したい変数を選択すると、棒グラフを作成できます。

例えば、以下のような操作が可能です。

  • グラフのダウンロード
  • 他の変数でのフィルタリング
  • グラフ領域の大きさのコントロール(Chart size)
  • 他の変数でのグルーピング(Cluster by)
  • グラフ表示方向(Orientation)
  • 凡例有無
  • 昇順、降順の指定(Sort by)

この操作の組み合わせにより、以下のようなグラフも作成可能です。

③折れ線グラフ

グラフアイコンで、Line Chartを選択し、Optionsで集計したい変数を選択すると、折れ線グラフを作成できます。
※今回用意した仮のデータセットでは、折れ線グラフで表示すべき変数が無いため、例示は割愛します。

④円グラフ

グラフアイコンで、Pie Chartを選択し、Optionsで集計したい変数を選択すると、円グラフを作成できます。

⑤散布図

グラフアイコンで、Scatter Plotを選択し、Optionsで集計したい変数を2つ選択すると、散布図を作成できます。

通常の散布図だけでなく、上記のような点の密度を考慮した散布図も容易に作成可能です。

⑥ヒストグラム

グラフアイコンで、Histgramを選択し、Optionsで集計したい連続値の変数を選択すると、ヒストグラムを作成できます。
※今回用意した仮のデータセットでは、ヒストグラムで表示すべき変数が無いため、例示は割愛します。

⑦地図上へのプロット

グラフアイコンで、Mapを選択し、Optionsで集計したい変数を選択すると、マップ上にデータをプロットできます。
※この機能については、未検証です。

以上、爆速でデータ集計できました!
但し、ケース・バイ・ケースで他の方法が良いこともあるので、この方法以外も紹介し、感覚的なメリット・デメリットを共有したいと思います。

Pythonで地道にデータ集計する方法(体感所要時間:3時間)

前提:

以下の環境が整備されていることは、やはり前提となります。

  • Pythonのインストール
  • データ分析に必要な各種ライブラリのインストール

手順:

①jupyter notebookを開く(約1分)

説明は割愛

②pandas等で、データを読み込み、各変数それぞれでグラフ描画(1変数あたり約5分)

ここでは、df["hoge"] ~ のように1変数ずつ取り出して、
value_counts()関数とか、matplotlibとか使って可視化していきます。

メリット:

  • グラフの描画に、こだわりたい場合には向いている

デメリット:

  • データの変数が多い場合、確認がとても面倒。

BIツールでデータ集計する方法(体感所要時間:30分 ※但し有料)

前提:

  • BIツールを利用できる環境にあること
    • 無料試用版は2週間~2ヶ月程度で、その後は有料版に移行するケースが多い
    • まあまあ高価な場合が多い(年間10万円以上)

手順:

①BIツールで、データを読み込む(約1分)

経験上、サクッとできます。

②BIツールでグラフ描画・集計(1変数あたり約1分)

このあたりも、直感的に操作できるUIが備わっているので、割とサクッとできます。
但し、1変数ずつ自分でグラフ描画・集計する必要がある場合が多いです。

メリット:

  • 割と簡単に集計・可視化ができて、グラフの見映えの調整も比較的容易
  • 集計・可視化結果を組織内で共有したい場合などには、非常に便利

デメリット:

  • BIツールは便利に使えるレベルのものは大体有料
  • BIツールに慣れていないと操作に意外と手こずる

Excelでデータ集計する方法(体感所要時間:10時間)

手順:

①シートにデータを貼り付ける(約1分)

説明は割愛

②集計用のテーブルを作成し、数式群を書く(1変数あたり約10分)

VLOOKUPとかSUMIFとかCOUNTIFとか。。
ザ・職人芸

③集計用のテーブルより、グラフを作成する(1変数あたり約10分)

値の選択、凡例の指定、色調整など、操作が妙に複雑。
ヒストグラムや散布図が絶望的に作りにくい。
苦行。。

メリット:

  • 官公庁系では、Excelグラフの需要が高い
  • 見映えに相当こだわりたい時に、カスタマイズが比較的容易(?)
  • ピボットテーブルや、VBAを使いこなせれば多少楽(?)

デメリット:

多いので割愛

まとめ

Pythonライブラリのpandas-profiling, pixiedustを使った集計・可視化を是非試してみてください!