Plotly Expressによる描画
今回はPlotly Expressによる描画をPythonを使って紹介していきたいと思います。
Plotly ExpressはPlotly社が開発した描画ライブラリPlotlyのラッパーでPythonやR、JavaScriptでも使うことができます。
特徴はインタラクティブ(マウスでグリグリ動かすことができる)な可視化です。
今まではPythonユーザですとMatplotlibを使う方が多かったと思いますが、あれだと静的で動かないので、インタラクティブな動作が可能なグラフは見る側としてとてもgoodですよね。
ということで今回はPlotly Expressでどんな可視化ができるのかというのを紹介します。
ちなみに別記事でPlotlyによる可視化設定(Figure, Trace, Layout)の記事も書いており、こちらも読むことでどのようにタイトルをつけたり軸名を変えたりなどカスタマイズができるようになりますから、ぜひ一緒に読んでもらえるとよいかと思います。
-
【Python】Plotlyの描画手法まとめ(Figure, Trace, Layout)
今回はPlotlyという描画ライブラリのPythonでの描画手法について紹介したいと思います! PlotlyはPlotly社が提供しているライブラリで、Python以外にもRやJavaScriptなど ...
また、ぼくはこちらの書籍も参考にしました。
興味がある方は見てみてください!
Plotly Expressのインストール
まずはPlotly expressをインストールしましょう!
簡単にpipでインストールできます。
command
pip install plotly_express
pip以外にもcondaでもできます。condaではplotly経由でインストールします。
command
conda install -c plotly plotly_express
-
データサイエンティストとして3年間で3社経験した僕の転職体験談まとめ
こんにちわ、サトシです。33歳です。 今回は、データサイエンティストの3年間に3社で働いた僕が、データサイエンティストとしての転職活動についてまとめて書きたいと思います。 これまでSE→博士研究員→ポ ...
使用するデータ
まずはこの記事で使っていくデータを紹介しておきます。
データはGapMinderというデータを使います。
こちらは世界中の国が年々どのように人口や経済力などが変化していったかをまとめたデータで、plotly expressでダウンロードができます。
1 2 3 4 5 |
import plotly.express as px df = px.data.gapminder() df <img class="aligncenter size-large wp-image-3157" src="https://satoblo.com/wp-content/uploads/2021/08/f600a799a6cd8de4b6b9c96695890fde-1024x635.png" alt="" width="920" height="571" /> |
データフレームに格納すると上記のようになっていますね。
国名がありますので、どんな国があるか確認しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
df['country'].unique() #Out: array(['Afghanistan', 'Albania', 'Algeria', 'Angola', 'Argentina', 'Australia', 'Austria', 'Bahrain', 'Bangladesh', 'Belgium', 'Benin', 'Bolivia', 'Bosnia and Herzegovina', 'Botswana', 'Brazil', 'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia', 'Cameroon', 'Canada', 'Central African Republic', 'Chad', 'Chile', 'China', 'Colombia', 'Comoros', 'Congo, Dem. Rep.', 'Congo, Rep.', 'Costa Rica', "Cote d'Ivoire", 'Croatia', 'Cuba', 'Czech Republic', 'Denmark', 'Djibouti', 'Dominican Republic', 'Ecuador', 'Egypt', 'El Salvador', 'Equatorial Guinea', 'Eritrea', 'Ethiopia', 'Finland', 'France', 'Gabon', 'Gambia', 'Germany', 'Ghana', 'Greece', 'Guatemala', 'Guinea', 'Guinea-Bissau', 'Haiti', 'Honduras', 'Hong Kong, China', 'Hungary', 'Iceland', 'India', 'Indonesia', 'Iran', 'Iraq', 'Ireland', 'Israel', 'Italy', 'Jamaica', 'Japan', 'Jordan', 'Kenya', 'Korea, Dem. Rep.', 'Korea, Rep.', 'Kuwait', 'Lebanon', 'Lesotho', 'Liberia', 'Libya', 'Madagascar', 'Malawi', 'Malaysia', 'Mali', 'Mauritania', 'Mauritius', 'Mexico', 'Mongolia', 'Montenegro', 'Morocco', 'Mozambique', 'Myanmar', 'Namibia', 'Nepal', 'Netherlands', 'New Zealand', 'Nicaragua', 'Niger', 'Nigeria', 'Norway', 'Oman', 'Pakistan', 'Panama', 'Paraguay', 'Peru', 'Philippines', 'Poland', 'Portugal', 'Puerto Rico', 'Reunion', 'Romania', 'Rwanda', 'Sao Tome and Principe', 'Saudi Arabia', 'Senegal', 'Serbia', 'Sierra Leone', 'Singapore', 'Slovak Republic', 'Slovenia', 'Somalia', 'South Africa', 'Spain', 'Sri Lanka', 'Sudan', 'Swaziland', 'Sweden', 'Switzerland', 'Syria', 'Taiwan', 'Tanzania', 'Thailand', 'Togo', 'Trinidad and Tobago', 'Tunisia', 'Turkey', 'Uganda', 'United Kingdom', 'United States', 'Uruguay', 'Venezuela', 'Vietnam', 'West Bank and Gaza', 'Yemen, Rep.', 'Zambia', 'Zimbabwe'], dtype=object) |
たくさんありますね!
では、次は大陸です。
1 2 3 |
df['continent'].unique() #Out: array(['Asia', 'Europe', 'Africa', 'Americas', 'Oceania'], dtype=object) |
こちらはシンプルに5大陸あります。
年はどうでしょうか?
1 2 3 4 |
df['year'].unique() #Out: array([1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, 2002, 2007]) |
1952年から2007年までのデータがあります。
割愛しますが、各年で全ての国のデータが格納されています。
では大陸別の国数はどうでしょうか?
1 2 3 4 5 6 7 8 |
for name in df['continent'].unique(): print(name, len(df.groupby('continent')['country'].unique()[name])) #Out: Asia 33 Europe 30 Africa 52 Americas 25 Oceania 2 |
このようにアフリカが52カ国と多く、オセアニアは2カ国しかありません。
大陸ごとに国の数が異なるのは確認しておいてよかったですね
Plotly Expressによる描画手法
散布図
まずは散布図からいきましょう!
plotly expressをimportしたのち、px.scatterで簡単に散布図を描くことができます。
1 |
px.scatter(df,x='gdpPercap', y='lifeExp', log_x=True, color='continent') |
色で大陸を表したり、ログスケールにしたりいろいろな情報をつけることができます。
(情報を付け加えることは簡単にできますが、調子に乗るとわけわからなくなるので、ほどほどにするのがいいと思います)
グラフ設定〜タイトル・軸・フォント
一旦グラフ(散布図)を描くことができましたが、まだタイトルや軸の設定などができていませんね。
タイトルや軸などの情報は例ですが、次のようにupdate_layoutを使って付け加えることができます。
1 2 3 4 5 6 7 8 9 10 |
fig = px.scatter(df,x='gdpPercap', y='lifeExp', log_x=True, color='continent') fig.update_layout( title_text='Scatter plot', title_x=0.5, xaxis_title_text='GDP per capita', yaxis_title_text='Life Expectancy', title_font_size=30, title_font_family='Times New Roman', title_font_color='black' ) |
layout設定などは別の記事でもう少し詳しく説明しているので、こちらを読んでみてください!
-
【Python】Plotlyの描画手法まとめ(Figure, Trace, Layout)
今回はPlotlyという描画ライブラリのPythonでの描画手法について紹介したいと思います! PlotlyはPlotly社が提供しているライブラリで、Python以外にもRやJavaScriptなど ...
ラインプロット
ラインプロット(折れ線グラフ)はLineという関数で一発です。
折れ線グラフで大陸別に平均寿命をプロットしています。
1 2 |
df2 = df.groupby(['year','continent'])["lifeExp"].mean().reset_index() px.line(df2, x='year', y=['lifeExp'], title='LifeExp', color='continent').show() |
棒グラフ
棒グラフは日本の年別の人口にしました。
1 |
px.bar(df[df['country']=='Japan'], x='year', y='pop', title='Japan pop') |
箱ひげ図
こちらでは大陸別に国ごとの平均寿命を箱ひげ図で示しています。
年は2007年にしており、アフリカやアジアはバラつきが大きいのがわかりますね。
1 |
px.box(df[df['year']==2007], x='continent', y='lifeExp') |
バイオリン図
バイオリン図は上の箱ひげ図と同様のプロットをしています。
箱ひげ図よりも分布がわかるので、分布がみたい方はこちらのほうがいいですね。
1 |
px.violin(df[df['year']==2007], x='continent', y='lifeExp') |
ヒストグラム
2007年の各国の寿命をヒストグラムで書きました。
ピークは70-80歳ですが、40歳くらいまでも少ないながら伸びていますね。
1 |
px.histogram(df[df['year']==2007], x='lifeExp') |
円グラフ
ちょっと適切ではないですが、年ごとの平均寿命を強引に円グラフにしています。
とりあえず円グラフの描き方ということで。。。
1 |
px.pie(df, names='year', values='lifeExp') |
階級区分図(コロプレス図)
あまり馴染みがないかもしれませんが、階級区分図(コロプレス図とも呼ばれる)です。
地図上にある変数を色でマッピングして表す図になっています。
今は、2007年の1人あたりGDPを色で表現しています。
国ごとの違いがわかりやすいですね!
1 |
px.choropleth(df[df['year']==2007], locations='iso_alpha',color='gdpPercap').show() |
複数パネルのプロット
複数枚パネルのプロットです。
plotly expressでは変数のカテゴリによって、複数のパネルを作ることができます。
ここではfacet_colにcontinentを指定することで、大陸ごとに横にグラフを5つ作っています。
他にもplotlyのsubplotを使って複数枚パネルを作ることもできます。
1 2 3 |
fig=px.line(df.groupby(['continent','year']).mean().reset_index(), x='year', y='pop' , facet_col='continent') fig.show() |
アニメーション付きのグラフ
Plotly Expressではアニメーションもつけることができます。
animation_frameという引数にyearを指定することで、年ごとの1人あたりGDPの変化をアニメーションで表せます。
下の「アニメーションプロット」というリンクのHTMLを開いて見てみてください!
1 |
px.choropleth(df, locations='iso_alpha', color='gdpPercap', animation_frame='year').show() |
最後に
今回はPlotly Expressによる描画を紹介しました。
データフレームができていれば、数行でかなりイケてるグラフが描けることがわかったのではないでしょうか。
軸やタイトル設定などは慣れないと少し難しいかもですが、全体としては十分簡単だと思います。
ぜひPlotly Expressを使ってグリグリ動くグラフを作りましょう!
もっと詳しく知りたい方は、Udemyにも動画があるので見てみるとよいかと思います。
【Udemy】Python/Dash/Plotlyで簡単に機械学習WEBアプリを開発しよう
最後まで読んでいただき、ありがとうございました!
-
データサイエンティスト経験3年の僕がフリーランスとして独立するまでの体験談
こんにちわ、サトシです。 今回は、企業でデータサイエンティストとして働いていた僕が、フリーランスとしてどのような手順で独立していったかについて書いていきたいと思います。 僕はSIer SE→博士過程→ ...