Matplotlib
今回の講義も外部ライブラリです。
Matplotlib というデータの可視化に特化したライブラリです。
円グラフ、棒グラフ、折れ線グラフといった様々なグラフを表現できます。
まずはインポートからです。
このへんはお決まり文句みたいな感じらしいのですが、
matplotlibは普通にそのままimportしません。
import matplotlib.pyplot as pltとします。
import matplotlib.pyplot as plt
import pandas as pd
今回もデータを操作するので
sampleデータを読み込みます。
読み込むにあたって予めGoogle Driveの中にサンプルデータが
ありますので、そちらを活用します。
Google Drive内のデータを扱うためにはマウントして
Google Colaboratory と Google Drive をつなげる必要があります。
詳しいやり方は以前の講義で学習した
をご参照ください。
で実際にサンプルデータを読み込みます。
df = pd.read_csv('/content/sample_data/california_housing_test.csv')
scatter 散布図
読み込んだデータを元に
scatter という機能を使って'散布図'を確認することができます。
例として latitude longitude のデータを使用します。
plt.scatter(df['latitude'],df['longitude'])
<matplotlib.collections.PathCollection at 0x7f7f7bf09908>
この図形は横軸の値が大きくなるほど
縦軸の値が減少しているので
「負の相関」というらしいです。
散布図ではデータの関係性を確認できるらしいです。
hist ヒストグラム
hist でヒストグラムを確認することができます。
plt.hist(df['latitude'])
(array([ 259., 1300., 108., 72., 202., 678., 245., 75., 51.,
10.]),
array([32.56 , 33.496, 34.432, 35.368, 36.304, 37.24 , 38.176, 39.112,
40.048, 40.984, 41.92 ]),
<a list of 10 Patch objects>)
値ごとにどれくらいの量があるかを可視化します。
ヒストグラムはデータの散らばりを確認することができます。
plt.hist(df['latitude'],bins=20)
(array([201., 58., 562., 738., 63., 45., 40., 32., 101., 101., 321.,
357., 155., 90., 50., 25., 20., 31., 6., 4.]),
array([32.56 , 33.028, 33.496, 33.964, 34.432, 34.9 , 35.368, 35.836,
36.304, 36.772, 37.24 , 37.708, 38.176, 38.644, 39.112, 39.58 ,
40.048, 40.516, 40.984, 41.452, 41.92 ]),
<a list of 20 Patch objects>)
bins=
として数値を入力するとグラフの幅を変えてもう少し細かくしたり、太くしたりできます。
折れ線グラフ
次は折れ線グラフです。
ここではNumpyをつかうようです。
Numpyをつかってグラフを表示するようの数字のリストをつくります。
ちなみにグラフを表示することを
plot(プロット)
というそうです。
1から100までの数値のリストをつくりxに代入
そのxに2を掛けた数値のリストをyに代入。
そのxとyのリストをつかってグラフをプロットします。
x=np.linspace(1,100,100)
x
array([ 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., 32., 33.,
34., 35., 36., 37., 38., 39., 40., 41., 42., 43., 44.,
45., 46., 47., 48., 49., 50., 51., 52., 53., 54., 55.,
56., 57., 58., 59., 60., 61., 62., 63., 64., 65., 66.,
67., 68., 69., 70., 71., 72., 73., 74., 75., 76., 77.,
78., 79., 80., 81., 82., 83., 84., 85., 86., 87., 88.,
89., 90., 91., 92., 93., 94., 95., 96., 97., 98., 99.,
100.])
y = 2*x
y
array([ 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22.,
24., 26., 28., 30., 32., 34., 36., 38., 40., 42., 44.,
46., 48., 50., 52., 54., 56., 58., 60., 62., 64., 66.,
68., 70., 72., 74., 76., 78., 80., 82., 84., 86., 88.,
90., 92., 94., 96., 98., 100., 102., 104., 106., 108., 110.,
112., 114., 116., 118., 120., 122., 124., 126., 128., 130., 132.,
134., 136., 138., 140., 142., 144., 146., 148., 150., 152., 154.,
156., 158., 160., 162., 164., 166., 168., 170., 172., 174., 176.,
178., 180., 182., 184., 186., 188., 190., 192., 194., 196., 198.,
200.])
plt.plot(x,y)
[<matplotlib.lines.Line2D at 0x7f262420a6d8>]
つぎは反比例のグラフを作ります。
y = 1/x として数字のリストをつくり、x y をいれてプロットします。
y = 1/x
y
array([1. , 0.5 , 0.33333333, 0.25 , 0.2 ,
0.16666667, 0.14285714, 0.125 , 0.11111111, 0.1 ,
0.09090909, 0.08333333, 0.07692308, 0.07142857, 0.06666667,
0.0625 , 0.05882353, 0.05555556, 0.05263158, 0.05 ,
0.04761905, 0.04545455, 0.04347826, 0.04166667, 0.04 ,
0.03846154, 0.03703704, 0.03571429, 0.03448276, 0.03333333,
0.03225806, 0.03125 , 0.03030303, 0.02941176, 0.02857143,
0.02777778, 0.02702703, 0.02631579, 0.02564103, 0.025 ,
0.02439024, 0.02380952, 0.02325581, 0.02272727, 0.02222222,
0.02173913, 0.0212766 , 0.02083333, 0.02040816, 0.02 ,
0.01960784, 0.01923077, 0.01886792, 0.01851852, 0.01818182,
0.01785714, 0.01754386, 0.01724138, 0.01694915, 0.01666667,
0.01639344, 0.01612903, 0.01587302, 0.015625 , 0.01538462,
0.01515152, 0.01492537, 0.01470588, 0.01449275, 0.01428571,
0.01408451, 0.01388889, 0.01369863, 0.01351351, 0.01333333,
0.01315789, 0.01298701, 0.01282051, 0.01265823, 0.0125 ,
0.01234568, 0.01219512, 0.01204819, 0.01190476, 0.01176471,
0.01162791, 0.01149425, 0.01136364, 0.01123596, 0.01111111,
0.01098901, 0.01086957, 0.01075269, 0.0106383 , 0.01052632,
0.01041667, 0.01030928, 0.01020408, 0.01010101, 0.01 ])
plt.plot(x,y)
[<matplotlib.lines.Line2D at 0x7f26241f5cf8>]
こうすると反比例のグラフをプロットすることができます。
最後は二次関数のグラフです。
y = 5*x*x
y
array([5.0000e+00, 2.0000e+01, 4.5000e+01, 8.0000e+01, 1.2500e+02,
1.8000e+02, 2.4500e+02, 3.2000e+02, 4.0500e+02, 5.0000e+02,
6.0500e+02, 7.2000e+02, 8.4500e+02, 9.8000e+02, 1.1250e+03,
1.2800e+03, 1.4450e+03, 1.6200e+03, 1.8050e+03, 2.0000e+03,
2.2050e+03, 2.4200e+03, 2.6450e+03, 2.8800e+03, 3.1250e+03,
3.3800e+03, 3.6450e+03, 3.9200e+03, 4.2050e+03, 4.5000e+03,
4.8050e+03, 5.1200e+03, 5.4450e+03, 5.7800e+03, 6.1250e+03,
6.4800e+03, 6.8450e+03, 7.2200e+03, 7.6050e+03, 8.0000e+03,
8.4050e+03, 8.8200e+03, 9.2450e+03, 9.6800e+03, 1.0125e+04,
1.0580e+04, 1.1045e+04, 1.1520e+04, 1.2005e+04, 1.2500e+04,
1.3005e+04, 1.3520e+04, 1.4045e+04, 1.4580e+04, 1.5125e+04,
1.5680e+04, 1.6245e+04, 1.6820e+04, 1.7405e+04, 1.8000e+04,
1.8605e+04, 1.9220e+04, 1.9845e+04, 2.0480e+04, 2.1125e+04,
2.1780e+04, 2.2445e+04, 2.3120e+04, 2.3805e+04, 2.4500e+04,
2.5205e+04, 2.5920e+04, 2.6645e+04, 2.7380e+04, 2.8125e+04,
2.8880e+04, 2.9645e+04, 3.0420e+04, 3.1205e+04, 3.2000e+04,
3.2805e+04, 3.3620e+04, 3.4445e+04, 3.5280e+04, 3.6125e+04,
3.6980e+04, 3.7845e+04, 3.8720e+04, 3.9605e+04, 4.0500e+04,
4.1405e+04, 4.2320e+04, 4.3245e+04, 4.4180e+04, 4.5125e+04,
4.6080e+04, 4.7045e+04, 4.8020e+04, 4.9005e+04, 5.0000e+04])
plt.plot(x,y)
[<matplotlib.lines.Line2D at 0x7f2624166390>]
とこうすると二次関数のグラフを描くことができます。
ざっとグラフのプロットの仕方は理解したのですが、
数学的なところがとっても記憶があやしい(笑)
二次関数なんてサラッと言われても全然思い出せませんでした。
コメント