2022/04/30 インタラクティブ表示やhtml出力に対応した記述を追加
~手元データの要約、視覚化を超簡単に実現して、探索的データ解析(EDA)しよう(AutoViz編)~
はじめに
「おい、悪いが”すぐに”このデータまとめてくれ」
緊急!となれば、そりゃ”すぐに”取りかかるが、”すぐに”まとめることができるかは別の話・・・これはデータ項目が多いときほど悩ましいものです。
じつは、Pythonは、このようなデータセットでも”すぐに”まとめることができる。
前回は pandas-profiling を記事にしました。
今回は Autoviz というライブラリで同じことをやってみたという記事です。
私は、見た目、コードもシンプルで簡単に思えた Autoviz の方が気に入りました。
「Pythonで相関係数行列グラフとか描けるのは知ってるけど、チマチマやってる時間ないんです」
といった方にとっても、まとめを頼んだ上司にとっても、これらによるアウトプットはまちがいなくありがたいと喜んでくれるはず。
この記事は、私の備忘含め、 Autoviz が誰でも簡単に実行できるように記録するものです。
実行条件など
・Google colabで実行
・ボストン住宅価格のデータセットで実行
※手元データを読込んで実行する場合も記載していますので、簡単にできるはずです。
ボストン住宅価格のデータセットについて
以下サイト(Kaggle)の「Boston.csv」を使わせていただいた。
データ数:506, 項目数:14のデータセットで、住宅価格を示す「MEDV」という項目と、住宅価格に関連するであろう項目が「CRIM:犯罪率」「RM:部屋数」「B:町の黒人割合」「RAD:高速のアクセス性」・・・等、13項目で構成されたデータとなっています。
これだけ項目があると、データ傾向を掴むだけでも、なかなか骨が折れるだろうと想像できますね。
ボストン住宅価格データの項目と内容
|項目|内容|
|:-----------|:------------------|
|CRIM|町ごとの一人当たり犯罪率|
|ZN|25,000平方フィート以上の住宅地の割合|
|INDUS|町ごとの非小売業の面積の割合|
|CHAS|チャールズ川のダミー変数(川に接している場合は1、そうでない場合は0)|
|NOX|窒素酸化物濃度(1,000万分の1)|
|RM|1住戸あたりの平均部屋数|
|AGE|1940年以前に建てられた持ち家の割合|
|DIS|ボストンの5つの雇用中心地までの距離の加重平均|
|RAD|高速道路(放射状)へのアクセス性を示す指標|
|TAX|10,000ドルあたりの固定資産税の税率|
|PTRATIO|町ごとの生徒数と教師数の比率|
|B|町ごとの黒人の割合|
|LSTAT|人口の下層階級の比率|
|MEDV|住宅価格の中央値(1000㌦単位)|
プロファイリング(Autoviz)してみよう!
ライブラリのインストールおよびインポート
!pip install autoviz
# 必要なライブラリーのインポート
import pandas as pd
import numpy as np
from autoviz.AutoViz_Class import AutoViz_Class
データの読み込み(これはスキップしてもいいです)
※手元データを読込む場合は、読み込むファイル名を変更してください。
※Excelファイルを読込む場合は、pd.read_excel('ファイル名.xlsx')となります。
# データセットの読込み
df = pd.read_csv("Boston.csv",index_col=0)
df.head()
**プロファイルを出力
autoviz = AutoViz_Class().AutoViz('Boston.csv')
出力イメージ
プロファイルから読み取った概要に、HTML出力結果にをアタッチして報告すれば、きっと喜んでいただけるでしょう。
2022/4/30追記
インタラクティブ表示、html出力
!pip install autoviz
import pandas as pd
%matplotlib inline
df = pd.read_csv("Boston.csv",index_col=0)
df.head()
df = pd.read_csv(filename,sep=sep,index_col=None)
target = df.columns[-1]
from autoviz.AutoViz_Class import AutoViz_Class
%matplotlib inline
AV = AutoViz_Class()
#インタラクティブグラフ表示
filename = ""
sep = ','
dft = AV.AutoViz(filename, sep=sep, depVar=target, dfte=df, header=0, verbose=2,
lowess=False,chart_format='bokeh',max_rows_analyzed=150000,max_cols_analyzed=30)
#html出力
dft = AV.AutoViz(filename, sep=sep, depVar=target, dfte=df, header=0, verbose=2,
lowess=False,chart_format='html',max_rows_analyzed=150000,max_cols_analyzed=30)
AutoViz API設定
上記のコードでは、df(dataframe)を指定していますので、filenameは指定せず、dfte=df としています。あと、depVar=targetのようにターゲット変数を指定しないと表示されないグラフがありました。verboseはよくわかっていませんが、私の環境では2でbokeh、htmlともに問題なく動作しました。
- filename - csv等のfile名を入力、dataframeを使用する時は("")を指定。(dataframeを使用する時は、dfteにdataframe名を指定)
- sep - ファイル内の区切り文字。カンマ、セミコロン、タブ、またはファイル内で各列を区切る任意の値を指定できる。
- depVar - データセットのターゲット変数。データ中にターゲット変数がない場合は空文字列のままでよい。
- dfte - dataframeを読み込んでグラフを作成する場合に指定する。(この場合、filenameは空文字列のままにする)
- header - ヘッダー行の行番号。最初の行がヘッダー行であれば0。
- verbose - 0を指定すると、情報を制限したすべてのグラフを表示。1を指定すると、フル情報のすべてのグラフを表示。2を指定すると、ローカルのカレント・ディレクトリのAutoViz_Plotsディレクトリの下に保存。
- lowess - このオプションは、ターゲット変数に対する連続変数の各ペアの回帰線を見ることができる小さなデータセットに非常に適してるとある。大きなデータセット(100,000行以上)には、このオプションを使わないでください。
- chart_format - 'svg', 'png', 'jpg', 'bokeh', 'server', 'html' のいずれか。
- max_rows_analyzed - チャート表示に使用される最大行数。数百万行の非常に大きなデータセットを持っている場合、このオプションを使って、チャートの生成にかかる時間を制限する。
- max_cols_analyzed - 分析可能な連続列数の制限。
-save_plot_dir - プロットを保存するディレクトリ。デフォルトはNoneで、カレントディレクトリの下にAutoViz_Plotsという名前のサブフォルダに保存される。
最後に
Pythonには「こんなことまでできるのか」と驚かされることがいろいろある。
この Autoviz もそのひとつ。使わない手はない。
参考サイト