matplotlib seaborn bokeh import matplotlib pyplot as plt
可視化モジュール matplotlib, seaborn, bokeh
準備 • import matplotlib. pyplot as plt • import numpy as np matplotlib使用の準備 • %matplotlib inline pp. 67 -68
準備 • import matplotlib. pyplot as plt • import numpy as np matplotlibを用いるには matplotlib. pyplotをimport • %matplotlib inline pp. 67 -68
準備 • import matplotlib. pyplot as plt • import numpy as np 本稿の説明で使うため numpy も import • %matplotlib inline pp. 67 -68
準備 • import matplotlib. pyplot as plt • import numpy as np Jupyterで図をセルごとに 表示したいときに使用する コマンド(インライン表示) • %matplotlib inline pp. 67 -68
numpyの復習 • np. linspace(start, stop, num=50, … ) start から stop までの数値を num(default: 50) 個に等分した配列を得る • Ex) • np. linspace(-5, 5, 5) • np. linspace(0, np. pi)
numpyの復習 • np. linspace(start, stop, num=50, … ) start から stop までの数値を num(default: 50) 個に等分した配列を得る • Ex) np. linspace(-5, 5, 5) array([ -5. , -2. 5, 0. , 2. 5, 5. ])
numpyの復習 • np. linspace(start, stop, num=50, … ) start から stop までの数値を num(default: 50) 個に等分した配列を得る • Ex) np. linspace(0, np. pi) *array([ 0. , 0. 06, 0. 13, 0. 19, 0. 26, 0. 32, 0. 38, 0. 45, 0. 51, 0. 58, � 2. 89, 2. 95, 3. 01, 3. 08, 3. 14 ]) * 見やすさのため四捨五入してある 50 個
引数指定 x = np. linspace(0, np. pi * 2) y = np. sin(x) plt. subplot(131) plt. plot(x, y, ‘ro’) plt. subplot(132) plt. plot(x, y, ‘g. D-’) plt. subplot(133) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’) plt. plot(x, np. cos(x), c=(1. 0, 0. 0)); pp. 69
引数指定 x = np. linspace(0, np. pi * 2) y = np. sin(x) plt. subplot(131)で 1行3列の格子中、左を選択 plt. plot(x, y, ‘ro’) ‘ro’で赤(r)丸(o)点で描画 plt. subplot(132) plt. plot(x, y, ‘g. D-’) plt. subplot(133) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’) plt. plot(x, np. cos(x), c=(1. 0, 0. 0)); pp. 69
引数指定 x = np. linspace(0, np. pi * 2) y = np. sin(x) plt. subplot(131) subplot(132)で 1行3列の格子中、中心を選択 plt. plot(x, y, ‘ro’) ‘g. D-’で緑(g)ひし形(D)点で実線付きで描画 plt. subplot(132) plt. plot(x, y, ‘g. D-’) plt. subplot(133) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’) plt. plot(x, np. cos(x), c=(1. 0, 0. 0)); pp. 69
subplot(133)で 1行3列の格子中、右を選択 引数指定 色や線種を個別に指定 x = np. linspace(0, np. pi * 2) y = np. sin(x) plt. subplot(131) plt. plot(x, y, ‘ro’) plt. subplot(132) plt. plot(x, y, ‘g. D-’) plt. subplot(133) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’) plt. plot(x, np. cos(x), c=(1. 0, 0. 0)); pp. 69
タイトルや軸ラベルや凡例 x = np. linspace(0, np. pi * 2) plt. title(‘Sin curve’) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’, label = ‘sin’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’, label = ‘-sin’) plt. plot(x, np. cos(x), c=(1. 0, 0. 0), label = ‘cos’) plt. xlabel(‘x value’) plt. ylabel(‘y value’, size = 15) plt. xlim((0, 2*np. pi)) plt. xticks(np. linspace(0, 2*np. pi, 5), [‘ 0’, ‘pi/2’, ‘pi’, ‘ 3 pi/2’, ‘ 2 pi’]) plt. legend(loc=‘upper right’, shadow=True) pp. 70
タイトルや軸ラベルや凡例 x = np. linspace(0, np. pi * 2) plt. title(‘Sin curve’) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’, label = ‘sin’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’, label = ‘-sin’) タイトルを挿入 plt. plot(x, np. cos(x), c=(1. 0, 0. 0), label = ‘cos’) plt. xlabel(‘x value’) plt. ylabel(‘y value’, size = 15) plt. xlim((0, 2*np. pi)) plt. xticks(np. linspace(0, 2*np. pi, 5), 軸ラベルを挿入 [‘’ 0, ‘pi/2’, ‘pi’, ‘ 3 pi/2’, ‘ 2 pi’]) plt. legend(loc=‘upper right’, shadow=True) pp. 70
タイトルや軸ラベルや凡例 x = np. linspace(0, np. pi * 2) plt. title(‘Sin curve’) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’, label = ‘sin’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’, label = ‘-sin’) plt. plot(x, np. cos(x), c=(1. 0, 0. 0), label = ‘cos’) plt. xlabel(‘x value’) plt. ylabel(‘y value’, size = 15) plt. xlim((0, 2*np. pi)) plt. xticks(np. linspace(0, 2*np. pi, 5), 軸の表示範囲 [‘’ 0, ‘pi/2’, ‘pi’, ‘ 3 pi/2’, ‘ 2 pi’]) xlim((a, b))で横軸を a から b まで表示 plt. legend(loc=‘upper right’, shadow=True) (c. f. ylim) pp. 70
タイトルや軸ラベルや凡例 x = np. linspace(0, np. pi * 2) plt. title(‘Sin curve’) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’, label = ‘sin’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’, label = ‘-sin’) plt. plot(x, np. cos(x), c=(1. 0, 0. 0), label = ‘cos’) plt. xlabel(‘x value’) plt. ylabel(‘y value’, size = 15) plt. xlim((0, 2*np. pi)) plt. xticks(np. linspace(0, 2*np. pi, 5), [‘’ 0, ‘pi/2’, ‘pi’, ‘ 3 pi/2’, ‘ 2 pi’]) 軸の値毎のラベル plt. legend(loc=‘upper right’, shadow=True) 軸の値と値毎のラベル配列で渡す (c. f. yticks) pp. 70
タイトルや軸ラベルや凡例 x = np. linspace(0, np. pi * 2) plt. title(‘Sin curve’) plt. plot(x, np. sin(x), c=‘navy’, marker=‘*’, label = ‘sin’) plt. plot(x, np. sin(-x), c=‘#9400 D 3’, linestyle=‘--’, label = ‘-sin’) plt. plot(x, np. cos(x), c=(1. 0, 0. 0), label = ‘cos’) plt. xlabel(‘x value’) plt. ylabel(‘y value’, size = 15) 凡例を表示する plt. xlim((0, 2*np. pi)) plt. plotごとにラベルを指定しておく plt. xticks(np. linspace(0, 2*np. pi, 5), [‘’ 0, ‘pi/2’, ‘pi’, ‘ 3 pi/2’, ‘ 2 pi’]) plt. legend(loc=‘upper right’, shadow=True) pp. 70
と線 x = np. linspace(0, np. pi * 2) plt. plot(x, 40 / (x + 1), label=r‘需要$=frac{40}{x+1}$’) plt. plot(x, x**2, label=‘供給$=x^2$’) plt. legend() plt. xlabel(‘価格’) plt. ylabel(‘人数’) plt. xlim((0, 6)) plt. ylim((1, 1000)) plt. yscale(‘log’) plt. hlines(10, 0, 6, linestyles=‘dashed’) plt. vlines([3, 3. 14, 3. 28], 1, 1000, linestyles=‘dotted’); pp. 72
と線 x = np. linspace(0, np. pi * 2) plt. plot(x, 40 / (x + 1), label=r‘需要$=frac{40}{x+1}$’) plt. plot(x, x**2, label=‘供給$=x^2$’) plt. legend() plt. xlabel(‘価格’) ラベルは で plt. ylabel(‘人数’) 記述可能 plt. xlim((0, 6)) plt. ylim((1, 1000)) plt. yscale(‘log’) plt. hlines(10, 0, 6, linestyles=‘dashed’) yscale(‘log’)で対数軸 plt. vlines([3, 3. 14, 3. 28], 1, 1000, linestyles=‘dotted’); (c. f. xscale) pp. 72
と線 x = np. linspace(0, np. pi * 2) plt. plot(x, 40 / (x + 1), label=r‘需要$=frac{40}{x+1}$’) plt. plot(x, x**2, label=‘供給$=x^2$’) plt. legend() plt. xlabel(‘価格’) hlinesで横線 plt. ylabel(‘人数’) vlinesで縦線を挿入 plt. xlim((0, 6)) 一度に複数本ひける plt. ylim((1, 1000)) plt. yscale(‘log’) plt. hlines(10, 0, 6, linestyles=‘dashed’) plt. vlines([3, 3. 14, 3. 28], 1, 1000, linestyles=‘dotted’); pp. 72
seaborn import seaborn as sns x = np. random. normal(size=100) sns. set_style(‘dark’) sns. distplot(x, kde=False, rug=True) pp. 78
seaborn import seaborn as sns seabornをimport x = np. random. normal(size=100) sns. set_style(‘dark’) グラフの統一的なテーマ sns. distplot(x) を簡単に指定できる sns. distplot(x, kde=False, rug=True) pp. 78
seaborn import seaborn as sns x = np. random. normal(size=100) distplotでヒストグラムが描ける sns. set_style(‘dark’) カーネル密度推定も描画される sns. distplot(x) sns. distplot(x, kde=False, rug=True) 引数 rug で データの位置がわかる pp. 78
seaborn • Facet. Gridクラス g = sns. Facet. Grid( row=‘sex’, col=‘time’, hue=‘smoker’, hue_kws={‘marker’: [‘x’, ‘o’]}, data=tips ) g. map(sns. regplot, ‘total_bill’, ‘tip’) pp. 80
seaborn • Facet. Gridクラス g = sns. Facet. Grid( row=‘sex’, col=‘time’, hue=‘smoker’, 先に生成した描画領域に 対してグラフを描画する hue_kws={‘marker’: [‘x’, ‘o’]}, data=tips sns. regplotで回帰分析 ) g. map(sns. regplot, ‘total_bill’, ‘tip’) pp. 80
seaborn • violinplotメソッド sns. violinplot(x=‘day’, y=‘tip’, hue=‘sex’, split=False, data=tips) pp. 80 -81
seaborn • violinplotメソッド sns. violinplot(x=‘day’, y=‘tip’, hue=‘smoker’, split=True, data=tips) pp. 80 -81
問題4 • 米国ボストン市郊外における地域別住宅価格のデータセットの分 析をおこなう • データの読み込み方法は以下の通り import pandas as pd from sklearn. datasets import load_boston dataset = load_boston() boston = pd. Data. Frame(dataset. data, columns=dataset. feature_names) boston["PRICE"] = dataset. target
関連モジュール • bokeh • webブラウザで対話形式で操作できる描画を出力するパッケージ • 詳細はhttp: //bokeh. pydata. org/ • パッケージの読み込みと準備 from bokeh. io import output_notebook, show output_notebook() • Irisデータの読み込み from bokeh. sampledata. iris import flowers. head() pp. 85
bokeh • charts. Scatterメソッド • 散布図を描画する • 拡大や保存など、対話式に操作できる from bokeh. charts import Scatter p = Scatter(flowers, x=‘petal length’ y=‘petal_width’, color=‘species’ legend=‘top_left’) show(p) pp. 85 -86
bokeh • webブラウザでの表示 • Jupyter以外では output_fileメソッド from bokeh. plotting import figure, output_file, show output_file(‘sample. html’) p = figure() p. line([1, 2, 3], [2, 1, 3]) show(p) pp. 86
- Slides: 68