はじめに
仕事でデータまとめをする機会があり、あわてて統計を勉強しています。座学だけだとつまらないので、Pythonでグラフを作成しながら勉強することにしました。毎回コードの書き方を調べるのが面倒なので、基礎的な使い方をまとめました。内容は追加していくかもしれません。実行環境はPython 3.7.4、Jupyter Notebook 6.0.1、matplotlib 3.1.1です。
準備
グラフのデータとなる乱数を生成する
今回はグラフを描くことが目的なのでデータは何でもいいです。データセットを用意するのが面倒なので、Nampyで生成した乱数を用いてグラフを描きます。下記コードでは平均(loc) 50、標準偏差(scale) 10の正規分布の乱数を3つ(size)生成します。
import numpy as np rand = np.random.normal(50, 10, 3) #平均50,標準偏差10,サイズ3 print(rand) # 出力結果:[61.28109899 37.59654054 61.0125996 ]
Jupyter Notebookのおまじない
Jupyter Notebook上でグラフを表示させるには、下記のいずれかをコードの最初に書く必要があります。
%matplotlib inline #グラフ固定の場合
%matplotlib notebook #Jupyter上で移動、拡大、縮小したい場合
グラフを描く
折れ線グラフ
import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = list(range(10)) #10個の連続値 y = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 # グラフの描画 plt.plot(x, y) plt.show()
棒グラフ
import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = list(range(10)) #10個の連続値 y = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 # グラフの描写 plt.bar(x, y) plt.show()
散布図
import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = np.random.normal(50, 10, 1000) #平均50,標準偏差10,サイズ1000 y = np.random.normal(50, 10, 1000) #平均50,標準偏差10,サイズ1000 # 散布図を表示 plt.scatter(x, y) plt.show()
ヒストグラム
import numpy as np import matplotlib.pyplot as plt # 乱数を作成 x = np.random.normal(50, 10, 1000) #平均50,標準偏差10,サイズ1000 # ヒストグラムを表示 plt.hist(x, bins=10) #10でビニング plt.show()
箱ひげ図
import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 # グラフの描写 plt.boxplot(x) plt.show()
円グラフ
import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 # 円グラフの描画 plt.pie(x) plt.show()
グラフの設定
グラフを画像として保存する
import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = list(range(10)) #10個の連続値 y = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 # グラフの保存 plt.plot(x, y) plt.savefig("sample.png") plt.show()
複数のデータをプロットする
import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = list(range(10)) #10個の連続値 y1 = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 y2 = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 # グラフの描画 plt.plot(x, y1) plt.plot(x, y2) plt.show()
複数のグラフを分割して表示
import numpy as np import matplotlib.pyplot as plt # 乱数を生成 x = list(range(10)) #10個の連続値 y1 = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 y2 = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10 # グラフの描画 fig = plt.figure() ax = fig.add_subplot(2, 1, 1) #nrows=2,ncols=1,index=1 ax.plot(x, y1) ax = fig.add_subplot(2, 1, 2) #nrows=2,ncols=1,index=2 ax.plot(x, y2) plt.show()
subplotの引数は、nrowsとncolsで分割する数を決めます。indexは格子の左上から順に1,2,…となります。