日々学び、感謝し、成長する

データとハートを活かす人事を目指した成長奮闘記(?)です

Plotly Expressを用いてグラフを可視化

 f:id:millebon:20210704091206p:plain

Pythonの可視化で何を使うか?

データ分析を行うにあたって、重要なことの一つがデータのグラフ化するということです。

 

データを分析するにあたってすぐ分析ツールを使いたくなるのですが、そもそもどんなデータなのか、それを理解するには、なかなか表では理解が難しい場合がありますよね。

 

グラフにすることで一目で「こういう傾向があるんだ」ということがわかり、例えばどの変数を分析対象にするかや加工が必要なのかがわかったりします。

 

Pythonでグラフの描画として一般的なのはMatplotlibというライブラリです。

 

ですが、あまりMatplotlibを使うのが得意ではなく毎回ググったり本を見ながら試行錯誤をしていました。。

 

ある講座で「Plotly」をお勧めされたので、こちらを今回の取り組みでは使ってみようと決めました。

 

実は、今回はAIHRで参考ページとして挙げられていたページを参考にTurnover analysis(離職リスク分析)を行おうとしています。

 

www.hranalytics101.com

分析に行うにあたってのデータもついており、練習するにはいいのですが、説明がRを使った説明になっているのでこちらをPythonでやってみようと思います。

 

Plotlyの情報は少ない。。

インストール方法を含めPythonでPlotlyを利用する情報はこちらを見ていただいたらいいかと思います。

plotly.com

ただ、何故か最初はうまくいかなかったのですが、いろいろググって以下を入れることで解決しました!

 from plotly.offline import download_plotlyjs,init_notebook_mode

 init_notebook_mode(connected=True)

 

ちなみに私はAnacondaからJupyter Notebookを利用してPythonを使っています。

 

Plotlyはやはりマイナーなのか、特に日本語での情報は少ないです。。なので、今回のまとめもむしろ自分の備忘録を兼ねてまとめようと思いました。

 

Plotly Express で描画してみる!

Jupyter Notebookで描画するにあたり、できるだけシンプルにコードを書きたかったので何となく楽そうな?”Plotly Express”を今回は用いました。

 

いくつかグラフを書いてみましたが、パターンが簡単なので使いやすかったです。

ただ、色を変えたりはできないような気がしますが。。

 

ヒストグラム
>|python|
import plotly.express as px
graph1=px.histogram(df, x="perf",title='Distribution of Performance Rating')
graph1.update_xaxes(title_text="performance")
graph1.update_yaxes(title_text="# employees")
graph1.update_layout(bargap=0.2)
graph1.show()
||<

 

結果はこんな感じです。

f:id:millebon:20210704170819p:plain

パフォーマンスの評価分布(Plotly Expressで描画)

graph1=px.histogram(df, x="perf",title='Distribution of Performance Rating')

  • pxの後に描画したいグラフの種類(今回はヒストグラム
  • ()の中は1)データの変数名、2)X軸に入るdataframeの列名、3)タイトル名

graph1.update_xaxes(title_text="performance")
graph1.update_yaxes(title_text="# employees")

  • X軸と、Y軸の名称を更新(そのままDataframeの列名を作るなら不要)

graph1.update_layout(bargap=0.2)

今回はこれが肝でした。。デフォルトだと以下のようにもっさりとしたグラフになります。。特にパフォーマンスは1と2と3しかないのに1.5や2.5にも値がありそうな誤解を生みますよね。

f:id:millebon:20210704171609p:plain

graph1.update_layout(bargap=0.2)がない場合のレイアウト

graph1.show()

グラフの表示

 

一見するとPlotlyのメリットはわかりにくいのですが、以下のようにそのグラフにカーソルを置くとそのデータ情報を見ることができます。

グラフで情報量が多いとこういうインタラクティブさはとてもいいですよね。

f:id:millebon:20210704171858p:plain

Plotlyだとそのグラフの詳細を見ることができる!
横並び棒グラフ

「どんなグラフ??」て思われたかもしれないのでまずは完成形から。

f:id:millebon:20210704172436p:plain

横並び棒グラフ(Plotlyで)

カテゴリーごとで(今回の場合は性別)棒グラフを横並びにしたいというものですね。

 

こちらはこんな感じです。。(plotly expressはImportされているので省略されています)

>|Python|
graph5=px.bar(pro_leave_ba_sex, x="area", y=0, color="sex",barmode="group",title='Voluntary Termination Rate by Business Area')
graph5.update_xaxes(title_text="Business Area")
graph5.update_yaxes(title_text="Proportion Leaving")
graph5.show()
||<

graph5=px.bar(pro_leave_ba_sex, x="area", y=0, color="sex",barmode="group",title='Voluntary Termination Rate by Business Area')

  • px.bar(棒グラフなので今回はbarになっています)
  • yはgroupbyしたnumpy arrayをDataframe化した結果、元の列名が0になっているからです。。見苦しくてすみません。
  • color: 横並びで表示したいDataframeの列名です。今回は性別なので”sex”を選んでいます。
  • barmode="group": このグラフではここに苦労しました!これがないと横並びでなく積み上げ棒グラフになります。このグラフでは意味がないですよね。。

    f:id:millebon:20210704173217p:plain

    barmode="group"がない場合は積み上げグラフになる
箱ひげ図

こちらはそんなに難しくないですね。pxの後をboxにすると簡単に描けます。

>|python|
graph7=px.box(df, x="role", y="age",title=)
graph7.update_xaxes(title_text="role")
graph7.update_yaxes(title_text="age")
graph7.show()
||<

 

f:id:millebon:20210704173551p:plain

箱ひげ図(plotlyで)

またはPlotlyで箱ひげ図を書くと、四分位数や最小値、最大値などもマウスを動かすだけで見れるのはいいですね。matplotlibではこうはいきません。

f:id:millebon:20210704173835p:plain

箱ひげ図ではPlotlyではいろんな情報が見れる

にしても使わないとすぐ忘れるので、ちょこちょこ使っていくことが重要ですね。。