最終投稿日:2022年6月18日
目次
○ ライブラリ(Matplotlib)
様々なグラフをご紹介
○ ライブラリ(numpy)
配列を操ろう
○ ライブラリ(urllib)
[urllib][requests]
○ ライブラリ(BeautifulSoup)
[スクレイピングによる解析ライブラリ][セレクタ表]
○ ライブラリ(selenium)
[インストール(環境構築)][画面キャプチャをとる(サンプル)][selenium を使って Headless Chrome を操作する]
○ ライブラリ(Pandas)
[Pandas ライブラリ][色々なデータを操作][早見表]
○ ライブラリ(scikit learn)
[機械学習][学習させ、テストする]
○ ライブラリ(Mecab)
[Mecabとは][Mecabのインストール][MeCab-ipadic-NEologdの導入][PythonにMeCabを取り込む(バインド)]
ライブラリ(Matplotlib)
[Matplotlib]グラフ生成ライブラリ
○ 日本語対応の手順
※Anaconda をインストールしていれば標準ライブラリに含まれています
Matplotlib は日本語対応されていません。
以下の手順で日本語を設定する。
以下の手順で日本語を設定する。
1.現在読み込んでいる設定ファイルの位置を確認します
import matplotlib
matplotlib.matplotlib_fname() 上記コードで設定ファイルのパスを確認する
例)
matplotlib.matplotlib_fname() 上記コードで設定ファイルのパスを確認する
例)
C:\Users\hoge\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
※「matplotlibrc」が設定ファイルです。
※「matplotlibrc」が設定ファイルです。
2.この設定ファイルを「~/.matplotlib」以下にコピーします
例)
C:\Users\xxxx\.matplotlib\matplotlibrc ※コピーした後のフルパス
C:\Users\xxxx\.matplotlib\matplotlibrc ※コピーした後のフルパス
3.以下の2行を追記する
例)
font.serif : HGMaruGothicMPRO
font.sans-serif : HGMaruGothicMPRO
※使用できるフォントは「fontList.json」に記述されています。
font.sans-serif : HGMaruGothicMPRO
※使用できるフォントは「fontList.json」に記述されています。
○ 画像の保存
カレントディレクトリに画像を保存します。
注意する点は、必ず show メソッドの前に呼び出す事!
※表示する必要がなければ show メソッドは不要です。
例)
plt.savefig('hoge.jpg')
plt.savefig('hoge.png')
注意する点は、必ず show メソッドの前に呼び出す事!
※表示する必要がなければ show メソッドは不要です。
例)
plt.savefig('hoge.jpg')
plt.savefig('hoge.png')
折れ線グラフ
matplotlib.pyplot モジュールをインポートする ※plt の別名にするのが一般的
X軸、Y軸両方にデータを反映されたい場合は plt.plot(X軸,Y軸)の書式となる
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
data = [2.,2.3,4.1,2.4,5.3,3.2,4.6]
plt.plot(data)
plt.show()
引数が1つの場合は、X軸はリストのインデックスとなる。matplotlib.use('Agg')
import matplotlib.pyplot as plt
data = [2.,2.3,4.1,2.4,5.3,3.2,4.6]
plt.plot(data)
plt.show()
X軸、Y軸両方にデータを反映されたい場合は plt.plot(X軸,Y軸)の書式となる
● タイトルとラベルを設定する
plt.title(タイトル)
plt.xlabel(X軸のラベル名)
plt.ylabel(Y軸のラベル名)
plt.xlabel(X軸のラベル名)
plt.ylabel(Y軸のラベル名)
● グリッドとマーカーを設定する
plt.grid(True)
plt.plot(price,count,marker='o')
plt.plot(price,count,marker='o')
【メモ】
マーカーには以下の種類がある
・marker='.' ・marker='1'
・marker=',' ・marker='2'
・marker='o' ・marker='3'
・marker='v' ・marker='4'
・marker='^' ・marker='8'
・marker='<' ・marker='s'
・marker='>' ・marker='p'
・marker='P' ・marker='*'
・marker='h' ・marker='H'
・marker='+' ・marker='x'
・marker='X' ・marker='D'
・marker='d' ・marker='|'
・marker='_'
・marker='.' ・marker='1'
・marker=',' ・marker='2'
・marker='o' ・marker='3'
・marker='v' ・marker='4'
・marker='^' ・marker='8'
・marker='<' ・marker='s'
・marker='>' ・marker='p'
・marker='P' ・marker='*'
・marker='h' ・marker='H'
・marker='+' ・marker='x'
・marker='X' ・marker='D'
・marker='d' ・marker='|'
・marker='_'
● 線の色
色は、データを設定する plt.plot(data) の部分に名前付き引数 color で設定する。
例)
例)
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
data = [2.,2.3,4.1,2.4,5.3,3.2,4.6]
plt.plot(data,color='red')
plt.show()
【メモ】
matplotlib.use('Agg')
import matplotlib.pyplot as plt
data = [2.,2.3,4.1,2.4,5.3,3.2,4.6]
plt.plot(data,color='red')
plt.show()
色は「red」や「green」の様な指定は「#FFFFFF」の様なRGB指定もできる。
また、以下の様に短縮した名前も設定できます。
また、以下の様に短縮した名前も設定できます。
・'green' ⇒ 'g'
・'red' ⇒ 'r'
・'cyan' ⇒ 'c'
・'magenta' ⇒ 'm'
・'yellow' ⇒ 'y'
・'blue' ⇒ 'b'
・'white' ⇒ 'w'
・'red' ⇒ 'r'
・'cyan' ⇒ 'c'
・'magenta' ⇒ 'm'
・'yellow' ⇒ 'y'
・'blue' ⇒ 'b'
・'white' ⇒ 'w'
● 線の種類
線は、データを設定する plt.plot(data) の部分に名前付き引数 linestyle で設定する。
例)
例)
・plt.plot(data,linestyle='-')
・plt.plot(data,linestyle='--')
・plt.plot(data,linestyle='-.')
・plt.plot(data,linestyle=':')
・plt.plot(data,linestyle='--')
・plt.plot(data,linestyle='-.')
・plt.plot(data,linestyle=':')
○ 凡例を設定する
各データを設定する plt.plot(data) の部分に名前付き引数 label を設定し、
全体の凡例を legend メソッドの名前付き引数 loc で設定します。
例)
全体の凡例を legend メソッドの名前付き引数 loc で設定します。
例)
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt x = [100,200,300,400,500]
y1 = [40,65,80,100,90]
y2 = [34,56,75,91,79]
y3 = [25,47,68,76,73]
plt.plot(x,y1,marker='o',label='y1')
plt.plot(x,y2,marker='v',label='y2')
plt.plot(x,y3,marker='^',label='y3')
plt.legend(loc='upper left')
plt.show()
【メモ】
matplotlib.use('Agg')
import matplotlib.pyplot as plt x = [100,200,300,400,500]
y1 = [40,65,80,100,90]
y2 = [34,56,75,91,79]
y3 = [25,47,68,76,73]
plt.plot(x,y1,marker='o',label='y1')
plt.plot(x,y2,marker='v',label='y2')
plt.plot(x,y3,marker='^',label='y3')
plt.legend(loc='upper left')
plt.show()
凡例の位置は以下の設定があります。 ※数値でも設定できる
・'best' ⇒ 0
・'upper right' ⇒ 1
・'upper left' ⇒ 2
・'lower left' ⇒ 3
・'lower right' ⇒ 4
・'right' ⇒ 5
・'center left' ⇒ 6
・'center right' ⇒ 7
・'lower center' ⇒ 8
・'upper center' ⇒ 9
・'center' ⇒ 10
・'upper right' ⇒ 1
・'upper left' ⇒ 2
・'lower left' ⇒ 3
・'lower right' ⇒ 4
・'right' ⇒ 5
・'center left' ⇒ 6
・'center right' ⇒ 7
・'lower center' ⇒ 8
・'upper center' ⇒ 9
・'center' ⇒ 10
曲線グラフ
曲線グラフは単純に直線グラフの座標が細かいだけでコードは同じです。
例)
例)
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import math x = range(0,360)
y = [math.sin(math.radians(d)) for d in x]
plt.plot(x,y)
plt.show()
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import math x = range(0,360)
y = [math.sin(math.radians(d)) for d in x]
plt.plot(x,y)
plt.show()
棒グラフ
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt labels = ['A','B','C','D','E','F','G','H','I','J']
x = range(0,10)
y = [91,45,17,88,47,87,49,56,67,77]
plt.bar(x,y,tick_label=labels)
plt.show() ※棒グラフは bar メソッドを使う
名前付き引数 tick_label を指定しないと、X軸はインデックスとなる 【横棒グラフ】
matplotlib.use('Agg')
import matplotlib.pyplot as plt labels = ['A','B','C','D','E','F','G','H','I','J']
x = range(0,10)
y = [91,45,17,88,47,87,49,56,67,77]
plt.bar(x,y,tick_label=labels)
plt.show() ※棒グラフは bar メソッドを使う
名前付き引数 tick_label を指定しないと、X軸はインデックスとなる 【横棒グラフ】
メソッド barh を使う。
基本的な使い方は棒グラフと同じだが、軸の指定順序が「Y」「X」となる。
なので、メソッド bar を barh に変更するだけで綺麗に表示できる。
基本的な使い方は棒グラフと同じだが、軸の指定順序が「Y」「X」となる。
なので、メソッド bar を barh に変更するだけで綺麗に表示できる。
積み上げ棒グラフ
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt labels = ['A','B','C','D','E','F']
x = range(0,6)
a = [34,46,54,45,56,37]
b = [17,47,55,67,38,49]
bar1 = plt.bar(x,a,color='green') bar2 = plt.bar(x,b,color='blue',bottom=a)
※グラフ a の上に積み上げる
plt.xticks(x,labels,rotation='vertical')
plt.legend((bar1,bar2),('man','woman'),loc=2) ※凡例。バーとラベルを対応させる
plt.show()
matplotlib.use('Agg')
import matplotlib.pyplot as plt labels = ['A','B','C','D','E','F']
x = range(0,6)
a = [34,46,54,45,56,37]
b = [17,47,55,67,38,49]
bar1 = plt.bar(x,a,color='green') bar2 = plt.bar(x,b,color='blue',bottom=a)
※グラフ a の上に積み上げる
plt.xticks(x,labels,rotation='vertical')
plt.legend((bar1,bar2),('man','woman'),loc=2) ※凡例。バーとラベルを対応させる
plt.show()
散布図
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt x = [91,45,17,88,47,87,49,56,67,23,86,20,60,67,30,41,91,55,37,14]
y = [39,17,45,32,20,14,11,48,41,13,21,40,13,14,11,40,21,18,50,25]
plt.scatter(x,y,marker='o',s=500,alpha=0.5,linewidth=2,edgecolors='red')
plt.show()
マーカーのサイズは例えば s=変数、s=関数等にして動的にサイズを変更できる
matplotlib.use('Agg')
import matplotlib.pyplot as plt x = [91,45,17,88,47,87,49,56,67,23,86,20,60,67,30,41,91,55,37,14]
y = [39,17,45,32,20,14,11,48,41,13,21,40,13,14,11,40,21,18,50,25]
plt.scatter(x,y,marker='o',s=500,alpha=0.5,linewidth=2,edgecolors='red')
plt.show()
s ⇒ マーカーのサイズ
color ⇒ マーカーの色
alpha ⇒ マーカーの透明度
linewidth ⇒ マーカーの淵の太さ
edgecolors ⇒ マーカーの淵の色
【メモ】color ⇒ マーカーの色
alpha ⇒ マーカーの透明度
linewidth ⇒ マーカーの淵の太さ
edgecolors ⇒ マーカーの淵の色
マーカーのサイズは例えば s=変数、s=関数等にして動的にサイズを変更できる
円グラフ
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt labels = ['E','D','C','B','A']
v = [17,25,47,68,91]
ex = [0,0,0.1,0,0]
plt.pie(v,explode=ex,labels=labels,autopct='%1.1f%%',startangle=90,counterclock=False)
plt.show()
matplotlib.use('Agg')
import matplotlib.pyplot as plt labels = ['E','D','C','B','A']
v = [17,25,47,68,91]
ex = [0,0,0.1,0,0]
plt.pie(v,explode=ex,labels=labels,autopct='%1.1f%%',startangle=90,counterclock=False)
plt.show()
ex ⇒ 円から少し切り離して表示する距離
counterclock ⇒ False で時計回りにグラフを作成する
startangle ⇒ 90で12時の位置からグラフをスタートする
autopct ⇒ 各値の割合の小数点の桁
counterclock ⇒ False で時計回りにグラフを作成する
startangle ⇒ 90で12時の位置からグラフをスタートする
autopct ⇒ 各値の割合の小数点の桁
複数のグラフを表示する
複数のグラフを作成する場合、1つの領域にn個のグラフを作成するか、
n個の領域にn個のグラフを作成するかでコードが変わります。
n個の領域にn個のグラフを作成するかでコードが変わります。
● 1つの領域にn個のグラフを作成
上下に1個づつグラフを作成するには以下
変則的なレイアウトの場合
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt y1 = [61,45,27,88,47]
y2 = [17,39,46,40,27]
labels = ['A','B','C','D','E']
plt.figure() ※領域に対して1つ実行する
plt.subplot(2,1,1) ※領域に対してグラフの位置を指定する。2行、1列の領域に対して1番目を指定している
plt.bar(range(0,5),y1,color='b',tick_label=labels) ※通常のグラフを定義
plt.subplot(2,1,2) ※2番目のグラフの位置をしていする
plt.bar(range(0,5),y2,color='g',tick_label=labels) ※通常のグラフを定義
plt.show() ※通常に表示する
【メモ】matplotlib.use('Agg')
import matplotlib.pyplot as plt y1 = [61,45,27,88,47]
y2 = [17,39,46,40,27]
labels = ['A','B','C','D','E']
plt.figure() ※領域に対して1つ実行する
plt.subplot(2,1,1) ※領域に対してグラフの位置を指定する。2行、1列の領域に対して1番目を指定している
plt.bar(range(0,5),y1,color='b',tick_label=labels) ※通常のグラフを定義
plt.subplot(2,1,2) ※2番目のグラフの位置をしていする
plt.bar(range(0,5),y2,color='g',tick_label=labels) ※通常のグラフを定義
plt.show() ※通常に表示する
変則的なレイアウトの場合
+---------+
| ① |
+----+----+
| ② | ③ |
+----+----+
| ① |
+----+----+
| ② | ③ |
+----+----+
① plt.subplot(2,1,1) 2行、1列、1番目
② plt.subplot(2,2,3) 2行、2列、3番目 ※①はマージされているだけで、本来は1番・2番の領域となるため
③ plt.subplot(2,2,4) 2行、2列、4番目
② plt.subplot(2,2,3) 2行、2列、3番目 ※①はマージされているだけで、本来は1番・2番の領域となるため
③ plt.subplot(2,2,4) 2行、2列、4番目
● nつの領域にn個のグラフを作成
2つの領域に各1個のグラフを作成するには以下
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt y1 = [61,45,27,88,47]
y2 = [17,39,46,40,27]
labels = ['A','B','C','D','E']
plt.figure() ※1つ目の領域として実行する
plt.bar(range(0,5),y1,color='b',tick_label=labels) ※通常のグラフを定義
plt.figure() ※2つ目の領域として実行する
plt.bar(range(0,5),y2,color='g',tick_label=labels) ※通常のグラフを定義
plt.show()
matplotlib.use('Agg')
import matplotlib.pyplot as plt y1 = [61,45,27,88,47]
y2 = [17,39,46,40,27]
labels = ['A','B','C','D','E']
plt.figure() ※1つ目の領域として実行する
plt.bar(range(0,5),y1,color='b',tick_label=labels) ※通常のグラフを定義
plt.figure() ※2つ目の領域として実行する
plt.bar(range(0,5),y2,color='g',tick_label=labels) ※通常のグラフを定義
plt.show()
その他の便利な機能
● 領域の余白を調節する
plt.subplots_adjust(left=0, right=1, bottom=0, top=1)




