今日はPythonで分析データをGUIツールのように可視化できるpandas-profiling, pixiedustの存在を知ったので自分への保存用に使い方をまとめていきます。
Contents
前準備
#ライブラリのインストール !pip install pandas-profiling !pip install pixiedust
# ライブラリの読み込み from sklearn.datasets import load_iris import pandas as pd import pandas_profiling as pp import pixiedust as px # pandasとScilit-Learnでサンプルデータを用意する iris = load_iris() iris=pd.DataFrame(iris.data, columns=iris.feature_names)
データの可視化
# 各変数データの概要を把握する pp.ProfileReport(iris)
実行するとデータの素性に関する概要情報が得られます。
以下のように出力されます。
・Overviews
項目名 | 内容 |
---|---|
Number of variables | 変数の個数 |
Number of observations | サンプルデータ数 |
Total Missing(%) | 欠損値の割合 |
Total size in memory | データサイズ |
Average record size in memory | 1レコードあたりのデータサイズ |
アヤメのデータセットの変数は4つで3つが数値型と判定され一つがRejectedになっています。どうやら内部で相関計算をして異常に相関関係のある変数は勝手に省くようです。
・Variables
そして、その下のVariables(変数)は以下のように各変数ごとのなっています。
・correlations
correlationsが表示されない場合は簡単なバグなので、こちらから手直しすると解決します。まずはpip showでインストール場所を確認してください。
# インストール場所を確認 !pip show pandas-profiling ~ Location: /home/XXXX/.pyenv/versions/3.6.6/lib/python3.6/site-packages ~
確認出来たらその中にあるpandas_profiling\templates\base.htmlの229行目の229 -{{ correlation_html }}
の部分を{{ correlations_html }}
に変更してください。これで表示されると思います。
原因はjinja2というPythonの動的テンプレートエンジン使って、pyファイルで処理したデータをhtmlで渡す際に変数名にsが抜けていて、pyファイルでプロットした相関データがhtmlにちゃんと渡せていないという超しょーもないバグですね・・・。(こんだけ凄いことライブラリ作ってんだからそれくらいめんどくさがらずに直そうよ・・・という感じ)
・Sample
df.head()と同じ出力を表示。
普通に分析データの先頭5行を表示します。
pixiedustにより得られる結果
px.display()
でエクセルのピポットテーブルみたいな操作が行えます。
# pixiedustでデータを可視化 px.display(iris)
以下のような操作が可能です。
- グラフのダウンロード
- 他の変数でのフィルタリング
- グラフ領域の大きさのコントロール(Chart size)
- 他の変数でのグルーピング(Cluster by)
- グラフ表示方向(Orientation)
- 凡例有無
- 昇順、降順の指定(Sort by)
この操作の組み合わせにより、以下のようなグラフも作成可能です。
終わり
以上がPandas-ProfilingとPixiedustの簡単な使い方です。今回使ったのは変数が4つのデータ数が150の行列だったので、サクッと可視化できましたが、恐らくデータ数や変数が数万とかになると時間が掛かってまともに使えないような気がしますが、まあ簡単なデータ処理ならこいつで一発です。
このコードもほとんど要らないのでお手軽過ぎます。pandasはほかにもdatareaderで株価データも一行でスクレピングできますし、Pythonでのデータ処理には欠かせませんね。Pythonはデータ分析に必要なものは何でも用意されていて、かつ日々新しいものが出てくるので、使ってて楽しいです。
コメント
[…] 関連記事:【Python】Pandas-ProfilingとPixiedustでデータをGUIみたいに可視化する […]