こんにちは、すのくろです。
今回は、csvのような表データから、平均値と標準偏差を計算して簡単に棒グラフにする方法について記載します。
Pythonでかっこいい棒グラフを作っていく形です。
以下のイメージです。
参考になれば幸いです!
必要なモジュールのインポート
はじめに、データの操作・計算やグラフ描画をしていくために、必要なモジュール(関数を使うためのパックみたいなもの)をインポートします。
この辺はお作法みたいなものなので、コピペでOK。
import pandas as pd
# import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
データファイルの読み込みと統計量の算出
続いて、扱いたいデータを読み込みます。
今回は「csv_data.csv」という6個の指標が10個ずつ(n=10)あるようなものです。以下のものです。
このファイルを扱うプログラムと同じ場所(ディレクトリ)に入れておきます。
一個の解析用のフォルダを作って、その中にcsvデータやプログラムを作っておくと、シンプルでわかりやすいかなと思います。
それでは、解析用のデータを読み込んでみましょう。
csvファイルの読み込みは「pd.read_csv」という関数を用いた以下のコードです。
ファイルの読み込みには色々方法がありますが、今回はpandasを用いてます。
pandasについては、今後詳しく掘り下げていく予定です。
「df」という変数として読み込み、以下のセルを実行すると表データが表示されるかと思います。
以下コードをセルに貼り付けて、実行(Shift+Enter)してください。
df = pd.read_csv('csv_data.csv')
df
続いて、各列の統計量を簡単に算出しておきましょう。
下記の「.describe()」を先ほどの「df」に付けるだけでOKです!
以下コードをセルに貼り付けて、実行(Shift+Enter)してください。
これで各列の平均値、標準偏差、最大値、最小値など一気に取得できます。
こういうところもPythonがExcelより優れている点かなと思います。
# 各種代表値(統計量の取得)
values = df.describe()
values
その後は、今回必要な平均値と標準偏差だけ抜き出しておきます。
一応、print()で出力して確かめておきます。
以下コードをセルに貼り付けて、実行(Shift+Enter)してください。
# 統計量から平均値と標準偏差の行を抜き出してみる
means = values.iloc[1, :]
stds = values.iloc[2, :]
print(means)
print()
print(stds)
出力で、平均値の列と、標準偏差の列が出てくると思います。
この辺の仕組みについてはpandasの記事の方で詳しく解説していきます。
とりあえず今はわからなくてもOKです。
棒グラフの作成①
それでは、必要なデータが読み込めた所で、棒グラフを作っていきましょう。
使うのは、「plt.bar()」という関数です。
()内に、x軸(棒の数)、y(棒グラフの高さ)を入力するだけで棒グラフが作れます!
今回は平均値が入っている変数「means」を使うので、meansの個数(6個)とmeansをそれぞれx, yに入れる感じです。
コードは下記です。
x = np.arange(1, 7) #項目の羅列を作る(1, 2, 3, 4, 5, 6)
plt.bar(x, means) #棒グラフの表示
実行すると、下のようなグラフが出るかと思います。
とりあえず、棒グラフの超基本はこんな感じです。
装飾の追加
plt.bar()に値を入れただけだと、ちょっとグラフとして物足りないので、もう少し情報を追加しておきましょう。
例えば、下記のようなコードです。
# それぞれの棒にラベルをつける
label = values.columns #平均値の列名を取得
plt.bar(x, means, tick_label=label, align="center") #項目名を中央揃えで配置
# 以下は装飾(タイトルや軸名)
plt.title("Bar")
plt.ylabel("Score [-]")
plt.xlabel("Type")
軸名など入れることで、だいぶ分かりやすいグラフになってきました。
エラーバーの追加
次に、標準偏差をエラーバーとして追加します。
エラーバーがあることで、データの分散が視覚的に分かり、項目毎の差が検討しやすくなります。
具体的な方法としては、「yerr=**」を()内に追加するだけです。
**部分は上で作っておいた標準偏差のデータを取りだした変数である「stds」を入れてあります。
# エラーバーの追加
plt.bar(x, means, yerr=stds, tick_label=label, align="center")
# 以下は装飾
plt.title("Bar")
plt.ylabel("Score [-]")
plt.xlabel("Type")
これで各棒に、エラーバーがつきました。
棒グラフの最終形態(整った形)
最後に、説明は割愛しますが色々と装飾を行い、グラフをビシッと決まる形に(ただの主観です)にしてみました。
グラフの装飾に関しては、本当にたくさんあるため、色々調べてみてください!
# もう少しデザインをお好みに整える
plt.subplots(figsize=(6, 4), dpi=300) #図の大きさ、画質の解像度
plt.bar(x, means, yerr=stds, ecolor="black", tick_label=label, align="center", edgecolor="k", capsize=4)
# 以下は装飾
plt.title("Bar")
plt.ylabel("Score [-]")
plt.xlabel("Type")
まとめ
以上から、色々と情報を付け加えていくことでグラフが見やすく分かりやすいものになることが実感できたかと思います。
初めてプログラムを書いていくときは、「やることが多くて面倒じゃん!」と思うことがあると思います。
しかし、一度自分の型(コード)を作ってしまえば、何度でも使えます。
しかも「for文」などのループ処理を行うことで、一気に好きな数のグラフを表示することができます。
pythonをはじめに労力をかけて学ぶと、後々のデータ分析、グラフ作成が数分で全部終わり有意義なことに時間が使えるかと思います。
Pythonを中心としたプログラミングをより体系的に学びたいと言う方向けに、おすすめのオンラインスクールを2つ厳選して紹介していますので、こちらもよければご覧ください!
以上、ここまでお読みいただき、ありがとうございました!
コメント