本記事ではPythonのグラフライブラリとして使えるplotlyによる「ヒストグラム」の作成について紹介します。
plotlyチュートリアルのヒストグラムから例題を抜粋しながら解説していきます。
プログラミングをこれから初める方向けに簡単なグラフを6種選びました。
①シンプルなヒストグラム
②カテゴリーデータ(グループ)を使ったヒストグラム
③区間・階級を指定したヒストグラム
④棒グラフとしてヒストグラムを書く
⑤2系列のヒストグラム
今回紹介する例題もグラフの元データを容易する必要がなく、下記プログラムを完コピすればグラフを作成することができます。
まずは実際に手を動かしてコードを書いて見てください。
Anacondaのインストールがまだの方はこちらの記事を参考に準備してください。
Jupyter notebookの起動と使い方まで紹介しています。
導入から基本的な使い方まで紹介しています。
今回も前回同様plotly_expressを使用するので、まずはインポートします。
import plotly.express as px
import plotly.io as pio
そして本文を書いていきます。
元データはplotly_expressで用意されているdata.tipsを使用します。
1行目がデータを準備するコードです。
dfという変数にtipsのデータを読み出して使う準備をします。
tipsの中には合計消費量(totall_bill)(チップを除く)、チップ量(tip)、顧客の性別(sex)、消費した曜日(day)、消費期間(time)、食事回数(size)を含む7つのフィールドが含まれています。
2行目がグラフを作成するコードです。
fig=px.bar()がplotly_express(px)でヒストグラム(histgram)を使いますよという意味です。
figはただの変数なので何でも大丈夫です。figure=図を意味しているので良く使われる表現です。
x=の後に対象のデータを定義します。
今回はx軸に「totall_bill=合計消費量」を選択します。
※x=totall_billの後に,title=”〇〇”とすると図に題目が作成されます。
文字を入力するときはダブルクォーテーション””やシングルクォーテーション’’で囲みます。
3行目はJupyter上にグラフを表示するコードです。
先ほど作った変数figに図のデータが入っているので表示する命令であるshow()で表示されます。
4行目は保存するコードです。(保存場所はJupyterの階層と同じ場所になります)
これはなくても大丈夫です。
htmlで保存すると、開いてグラフを動かすことが可能です。
また、マウスをグラフに当てた時に右上に表示されるカメラマークを押すとpngで保存できます。
さらに、グラフのクリック&ドロップでグラフ範囲の拡大縮小ができます。
元のサイズに戻したい場合はグラフ内のどこかでダブルクリックし、戻すことができます。
軸の範囲は軸の周辺になるとカーソルが変わるので、左右に水平(垂直)移動させ範囲の幅を好きに変更することができます。
また、軸の端にカーソルを合わせると最大値、最小値も変更することができます。
fig = px.histogram(df, x="total_bill")
fig.show()
pio.write_html(fig,file="./3-1.html")
次はday=消費した曜日をx指定してヒストグラムを作成します。
曜日は数値ではなくカテゴリーデータと呼ばれるグループの情報が入っているのでヒストグラムでは連続値ではなく離散値(間隔を空けた状態)で表示されます。
棒グラフと似ていますが、y軸に頻度がなるところが棒グラフとの違いです。
※データに頻度の情報を示す列を追加すれば棒グラフでも同じグラフは作成可能です。
fig = px.histogram(df, x="day")
fig.show()
pio.write_html(fig,file="./3-2.html")
①のパターンにnbins=20が追加されています。
nbinsはnumber of binsの略だと解釈できます。
数字を増やせば区間・階級の数が増え、棒の幅が狭まると同時に一つの棒に対するcount数も少なくなります。
つまり細かく分類されたグラフを作成できたり、粗く分類できたり調整することができます。
fig = px.histogram(df, x="total_bill", nbins=20)
fig.show()
pio.write_html(fig,file="./3-3.html")
1行目はnumpyと呼ばれる便利なライブラリをインポートします。(Pythonでは良く使うライブラリなので使いこなせるようになりましょう)
2行目が難しい表現ですが、countsにdfのtotall_billを、binsに範囲を最小0〜最大60まで5刻みで指定したものを変数として定義しています。
bins=0.5 * (bins[:-1] + bins[1:])
bins=0.5、つまり最小値と最大値を足して半分にした値とすることでx軸の値を範囲ではなく中心値とすることができる小技です。
lables=の部分はホバー(カーソルを合わせた時に表示される)データにtotal_billとcountが表示されるようにしています。
import numpy as np
counts, bins = np.histogram(df.total_bill, bins=range(0, 60, 5))
bins = 0.5 * (bins[:-1] + bins[1:])
fig = px.bar(x=bins, y=counts, labels={'x':'total_bill', 'y':'count'})
fig.show()
pio.write_html(fig,file="./3-4.html")
fig = px.histogram(df, x="total_bill", histnorm='probability density')
fig.show()
pio.write_html(fig,file="./3-5.html")
colorを使用することでカテゴリーごとのヒストグラムが表示されます。
選択したカテゴリーはsex=性別です。
グラフにカーソルを合わせると性別(系列名)、total_bill(x)、count(y)のデータがホバーされて確認することができます。
また、右にある系列名をクリックすると選択された系列がグラフから一時的に消えます。もう一度クリックで再度表示されます。
個別にpngなどの画像で保存したい時やプレゼンテーションで使える機能です。
fig = px.histogram(df, x="total_bill", color="sex")
fig.show()
pio.write_html(fig,file="./3-6.html")
以上でヒストグラムのチュートリアル紹介は終わりです。
↓Plotlyについて学べる数少ない参考書です。