Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

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

前提:

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

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

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

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

image.png

手順:

①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を開くと、こんな感じです↓

image.png

個人的には、以下の機能が通常の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(概要)

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

image.png

■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(変数ごとの統計量)

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

image.png

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

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

image.png

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

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

image.png

pixiedustにより得られる結果

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

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

image.png

②棒グラフ

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

image.png

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

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

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

image.png

③折れ線グラフ

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

④円グラフ

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

⑤散布図

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

image.png

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

⑥ヒストグラム

グラフアイコンで、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を使った集計・可視化を是非試してみてください!

pocket_kyoto
投稿は、テキストマイニング系中心。 興味ある分野は、機械学習全般、NLP、人流データ解析、転移学習、メカニズムデザイン など
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした