Pythonでグラフを描く④棒グラフの作成
ここでは、シリーズ①で作成したデータセットで棒グラフを作成する。
↑が以前作成したデータセット。平均50、標準偏差20で正規分布しているデータセット。
まずはおなじみのpythonのコード。
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')#グラフの背景を白くする
%matplotlib inline
次にデータの読み込み。
df2=pd.read_csv('sample.csv')
棒グラフの作成の前に、データの統計量を確認しておく。使用するコードはdescribe()。
df2.describe()

このコード一つで、データの個数、平均値、標準偏差、最大値、最小値などが確認できる。各Socreの平均値(mean)をみると約50で標準偏差(std)は約20となっている。
とりあえず、棒グラフを作成する。棒グラフはseabornの機能を使って、sns.barplot()のコードで作成できる。
sns.barplot(data=df2)

なんか目盛りの文字が小さい。グラフを大きくして、目盛りの文字も大きくする。ついでに、グラフタイトル(mean)とy軸のラベル(Score)もつける。
plt.figure(figsize=(10,10))#グラフを大きくする
sns.barplot(data=df2)
plt.title("mean", size=50)#タイトルをつける
plt.ylabel("score", size=50)#y軸ラベルをつける。
plt.tick_params(labelsize = 30)#目盛りの文字を大きくする
plt.savefig("bar_graph2.png")#グラフをbar_graph2.pngという名前で保存する

青いバーの異様にでかいグラフはidだったのか。。。idが邪魔。。。色がダサい。。。y軸ラベルが切れている。。。課題はたくさん。。。
まずは、idを消す。データフレームの名前をdf2からdf_meanに変える。
df_mean=df2.drop("id", axis=1)
色をシックなグレイにする。palette="Greys"で設定する。グラフを保存するときに使用するコードplt.savefig()のカッコにbbox_inches="tight"を入れる。加えて、エラーバーを標準偏差に設定する。sns.barplot()のなかにci="sd"を加える。
plt.figure(figsize=(10,10))
sns.barplot(data=df_mean, palette="Greys",ci='sd')
plt.title("mean", size=50)
plt.ylabel("score", size=50)
plt.tick_params(labelsize = 30)
plt.savefig("bar_graph3.png",bbox_inches="tight")

改善されてカッコよくなった。
ん。でもまでカッコ悪い。。。グリッド線が邪魔なので消しておく。グリッド線を消すためにsns.set_style('ticks')を入れる。
plt.figure(figsize=(10,10))
sns.barplot(data=df_mean, palette="Greys",ci='sd')
plt.title("mean", size=50)
plt.ylabel("score", size=50)
plt.tick_params(labelsize = 30)
sns.set_style('ticks')
plt.savefig("bar_graph4.png",bbox_inches="tight")

うん。これならプレゼンやレポートなどに添付したときにカッコいい。最後に一応確認しておく。descrieb()で算出した統計量と一致しているかみてみる。グラフの平均値はだいたい50、、、OK!標準偏差もだいたい20、、、OK!グラフ作成では、つい間違った変量などをいれてしまいがちなので、確認を怠らないようにするクセをつける。
棒グラフの作成のために参考にしたwebページ
・Seaborn で件数や平均値を棒グラフで可視化する
https://pythondatascience.plavox.info/seaborn/%E6%A3%92%E3%82%B0%E3%83%A9%E3%83%95
・Matplotlib 超入門(3)文字の大きさ,グリッド幅
http://iatlex.com/python/matplotlib_intro3
・seaborn.barplot
https://seaborn.pydata.org/generated/seaborn.barplot.html#seaborn-barplot
・matplotlib.pyplot.savefig
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.savefig.html
・seabornでMatplotlibの見た目を良くする
https://note.nkmk.me/python-matplotlib-seaborn-basic/
と今日はこんな感じ。