
以äžã¯ãæžè©ãšæç²ããã¹ãã°ã©ã ãééã®å èš³ãããã³å¯åºŠãã§ãã
ãã®æ¬ã¯èª°ã®ããã§ããïŒ
ãPythonãã©ã®çšåºŠæ£ç¢ºã«åŠç¿ããå¿ èŠããããŸããïŒãããŸããŸãªæè¡äŒè°ãäŒè°ã§ç§ïŒèè ïŒã«ããå¯ãããã質åã®1ã€ã§ãã æè¡ã«èå³ã®ããåŠçãéçºè ããŸãã¯ç 究è ã¯ãå€ãã®å Žåãã³ãŒããèšè¿°ããèšç®ããŒã«ãããžã¿ã«ããŒã«ã䜿çšããããªãã®çµéšãããããããããæ±ããŸãã ãããã®ã»ãšãã©ã¯ãPythonããã°ã©ãã³ã°èšèªããã®æãçŽç²ãªåœ¢ã§å¿ èŠãšããŸãã;圌ãã¯ã倧éã®ããŒã¿ãåŠçããèšç®ãå¿ èŠãšããåé¡ã解決ããããã®ããŒã«ãšããŠããã䜿çšããããã«ãããå匷ããããšæããŸãã
ãã®æ¬ã¯ãPythonèšèªãŸãã¯ããã°ã©ãã³ã°å šè¬ã®å ¥éæžã§ã¯ãããŸããã èªè ã¯ãé¢æ°ã®èª¬æãå€æ°ã®å²ãåœãŠããªããžã§ã¯ãã¡ãœããã®åŒã³åºããããã°ã©ã ã®ãããŒã®å¶åŸ¡ããã®ä»ã®ç°¡åãªã¿ã¹ã¯ã®è§£æ±ºãªã©ãPythonèšèªã«ç²ŸéããŠãããšæããŸãã PythonãŠãŒã¶ãŒãPythonããŒã¿ãã€ãã³ã°ããŒã«ã®ã¹ã¿ãã¯ïŒIPythonãNumPyãPandasãMatplotlibãScikit-Learnãããã³é¢é£ããŒã«ãªã©ã®ã©ã€ãã©ãªïŒã䜿çšããŠããŒã¿ãå¹ççã«ä¿åãæäœãããã³ç解ããæ¹æ³ãåŠç¿ããã®ã«åœ¹ç«ã€ã¯ãã§ãã
æ¬ã®äžè¬çãªæ§é
æ¬ã®åç« ã¯ãPythonããŒã¿ãã€ãã³ã°ããŒã«ã®éèŠãªéšåã圢æããç¹å®ã®ããã±ãŒãžãŸãã¯ããŒã«ã«çŠç¹ãåœãŠãŠããŸãã
- IPythonãšJupyterïŒç¬¬1ç« ïŒ-å€ãã®PythonããŒã¿ç 究è ãåãã³ã³ãã¥ãŒãã£ã³ã°ç°å¢ãæäŸããŸãã
- NumPyïŒç¬¬2ç« ïŒ-å¹ççãªã¹ãã¬ãŒãžã®ããã®ndarrayãªããžã§ã¯ããæäŸããPythonã§é«å¯åºŠã®ããŒã¿é åãåŠçããŸãã
- PandasïŒç¬¬3ç« ïŒ-Pythonã§ååä»ã/åããŒã¿ãå¹ççã«ä¿åããã³åŠçããããã®DataFrameãªããžã§ã¯ããæäŸããŸãã
- MatplotlibïŒç¬¬4ç« ïŒ-Pythonã®å€çšéã§æè»ãªããŒã¿èŠèŠåæ©èœãæäŸããŸãã
- Scikit-LearnïŒç¬¬5ç« ïŒ-æãéèŠã§æåãªæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ã®å¹ççãªPythonå®è£ ãæäŸããŸãã
PyDataã®äžçã¯æ瀺ãããŠããããã±ãŒãžãããã¯ããã«åºããæ¥ã æé·ããŠããŸãã ããã念é ã«çœ®ããŠãç§ïŒèè ïŒã¯æ¬ã®ããããæ©äŒãå©çšããŠãPythonã§ã§ããããšã®éçãåºããä»ã®èå³æ·±ãäœåããããžã§ã¯ããããã±ãŒãžãåç §ããŸãã ãã ããä»æ¥ããããã®5ã€ã®ããã±ãŒãžã¯ãPythonããã°ã©ãã³ã°èšèªãããŒã¿ãã€ãã³ã°ã«é©çšããããã«ã§ããããšã®å€ãã®åºæ¬ã§ãã åšå²ã®çæ ç³»ãæé·ããŠãã圌ãã¯ãã®äŸ¡å€ãç¶æãããšä¿¡ããŠããŸãã
æç² ãã¹ãã°ã©ã ãã€ã³ã¿ãŒãã«ãã¬ãŒã¯ãããã³å¯åºŠ
åçŽãªãã¹ãã°ã©ã ã¯ãããŒã¿ã»ããã®åæåæã«ãããŠéåžžã«æçã§ãã å ã»ã©ãMatplotlibã©ã€ãã©ãªã®é¢æ°ïŒç¬¬2ç« ã®ãæ¯èŒããã¹ã¯ãããã³ããŒã«è«çãã»ã¯ã·ã§ã³ãåç §ïŒã䜿çšããŠãéåžžã®ã€ã³ããŒãããã¹ãŠå®äºããåŸã1è¡ã§åçŽãªãã¹ãã°ã©ã ãäœæããäŸãèŠãŠããŸããïŒå³4.35ïŒïŒ
In[1]: %matplotlib inline import numpy as np import matplotlib.pyplot as plt plt.style.use('seaborn-white') data = np.random.randn(1000) In[2]: plt.hist(data);

histïŒïŒé¢æ°ã«ã¯ãèšç®ãšè¡šç€ºã®äž¡æ¹ã調æŽããããã®å€ãã®ãã©ã¡ãŒã¿ãŒããããŸãã 詳现ãªãŠãŒã¶ãŒèšå®ãå«ããã¹ãã°ã©ã ã®äŸã次ã«ç€ºããŸãïŒå³4.36ïŒã
In[3]: plt.hist(data, bins=30, normed=True, alpha=0.5, histtype='stepfilled', color='steelblue', edgecolor='none');

plt.histé¢æ°ã®docstringã«ã¯ãå©çšå¯èœãªä»ã®ã«ã¹ã¿ãã€ãºãªãã·ã§ã³ã«é¢ãã詳现æ å ±ãå«ãŸããŠããŸãã histtââype = 'stepfilled'ãªãã·ã§ã³ãšæå®ãããã¢ã«ãã¡éæ床ã®çµã¿åããã¯ãããã€ãã®ååžã®ãã¹ãã°ã©ã ãæ¯èŒããã®ã«éåžžã«äŸ¿å©ãªããã§ãïŒå³4.37ïŒã
In[4]: x1 = np.random.normal(0, 0.8, 1000) x2 = np.random.normal(-2, 1, 1000) x3 = np.random.normal(3, 2, 1000) kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40) plt.hist(x1, **kwargs) plt.hist(x2, **kwargs) plt.hist(x3, **kwargs);

ãã¹ãã°ã©ã ãèšç®ããïŒã€ãŸããç¹å®ã®ééå ã®ãã€ã³ãæ°ãã«ãŠã³ãããïŒå¿ èŠããªãã衚瀺ããªãå Žåãnp.histogramïŒïŒé¢æ°ããµãŒãã¹ã«ãããŸãã
In[5]: counts, bin_edges = np.histogram(data, bins=5) print(counts) [ 12 190 468 301 29]
äºæ¬¡å ãã¹ãã°ã©ã ãšåºéå èš³
æ°å€ã®ã·ãŒã±ã³ã¹ãééã«åå²ãã1次å ãã¹ãã°ã©ã ã®äœææ¹æ³ãšåæ§ã«ã2次å ãã¹ãã°ã©ã ãäœæããŠã2次å ééã§ãã€ã³ããååžãããããšãã§ããŸãã ããã€ãã®å®è¡æ¹æ³ãæ€èšããŠãã ããã å€æ¬¡å ã¬ãŠã¹ååžããååŸããããŒã¿é åxããã³yã®èª¬æããå§ããŸãããã
In[6]: mean = [0, 0] cov = [[1, 1], [1, 2]] x, y = np.random.multivariate_normal(mean, cov, 10000).T
Plt.hist2dé¢æ°ïŒ2次å ãã¹ãã°ã©ã
2次å ãã¹ãã°ã©ã ãæç»ããæãç°¡åãªæ¹æ³ã®1ã€ã¯ãMatplotlibã©ã€ãã©ãªã®plt.hist2dé¢æ°ã䜿çšããããšã§ãïŒå³4.38ïŒã
In[12]: plt.hist2d(x, y, bins=30, cmap='Blues') cb = plt.colorbar() cb.set_label('counts in bin') #

plt.hist2dé¢æ°ã¯ãplt.histé¢æ°ãšåæ§ã«ãã°ã©ãã埮調æŽããééã§é€ç®ããããã®è¿œå ãã©ã¡ãŒã¿ãŒãå€æ°ãããŸãã詳现ã«ã€ããŠã¯ããã®docstringã§èª¬æããŠããŸãã plt.histé¢æ°ãnp.histogramãšåçã§ããããã«ãplt.hist2dé¢æ°ã¯np.histogram2dãšåçã§ããã次ã®ããã«äœ¿çšãããŸãã
In[8]: counts, xedges, yedges = np.histogram2d(x, y, bins=30)
2ãè¶ ãã枬å®æ°ã«ãããã¹ãã°ã©ã ã®åºéå èš³ãèŠçŽããã«ã¯ãnp.histogramddé¢æ°ãåç §ããŠãã ããã
Plt.hexbiné¢æ°ïŒå è§åœ¢ã®éé
2次å ãã¹ãã°ã©ã ã¯ã座æšè»žã«æ²¿ã£ãæ£æ¹åœ¢ã®ã¢ã¶ã€ã¯è¡šçŸãäœæããŸãã åæ§ã®ã¢ã¶ã€ã¯è¡šçŸã®å¥ã®å¹ŸäœåŠçå³åœ¢ã¯ãæ£å è§åœ¢ã§ãã ãããã®ç®çã®ããã«ãMatplotlibã©ã€ãã©ãªã¯plt.hexbiné¢æ°ãæäŸããŸã-å è§åœ¢ã®ã°ãªããäžã§ééã«åå²ããã2次å ããŒã¿ã»ããïŒå³4.39ïŒïŒ
In[9]: plt.hexbin(x, y, gridsize=30, cmap='Blues') cb = plt.colorbar(label='count in bin') #

plt.hexbiné¢æ°ã«ã¯ãåãã€ã³ãã®éã¿ãèšå®ããåééã®è¡šç€ºå€ãNumPyã©ã€ãã©ãªã®ãµããªãŒã€ã³ãžã±ãŒã¿ãŒã«å€æŽããæ©èœïŒéã¿ã®å¹³åå€ãéã¿ã®æšæºåå·®ãªã©ïŒãªã©ãå€ãã®èå³æ·±ããã©ã¡ãŒã¿ãŒããããŸãã
æ žå¯åºŠæšå®
å€æ¬¡å 空éã®å¯åºŠãæšå®ããããã«äžè¬çã«äœ¿çšããããã1ã€ã®æ¹æ³ã¯ãã«ãŒãã«å¯åºŠæšå®ïŒKDEïŒã§ãã ããã«ã€ããŠã¯ã第5ç« ã®ã詳ããèŠãŠã¿ãŸãããïŒååžå¯åºŠã®æ žæšå®ãã»ã¯ã·ã§ã³ã§è©³ãã調ã¹ãŸãããä»ã®ãšãããKDEã¯ç©ºéã®ç¹ããå¡ãä»ããŠãçµæãè¿œå ããŠæ»ãããªé¢æ°ãåŸãæ¹æ³ãšããŠè¡šçŸã§ããããšã«æ³šæããŠãã ããã scipy.statsããã±ãŒãžã«ã¯ãéåžžã«é«éã§ç°¡åãªKDEå®è£ ããããŸãã äžèšã®ããŒã¿ã§KDEã䜿çšããçãäŸã次ã«ç€ºããŸãïŒå³4.40ïŒïŒ
In[10]: from scipy.stats import gaussian_kde # [Ndim, Nsamples] data = np.vstack([x, y]) kde = gaussian_kde(data) # xgrid = np.linspace(-3.5, 3.5, 40) ygrid = np.linspace(-6, 6, 40) Xgrid, Ygrid = np.meshgrid(xgrid, ygrid) Z = kde.evaluate(np.vstack([Xgrid.ravel(), Ygrid.ravel()])) # plt.imshow(Z.reshape(Xgrid.shape), origin='lower', aspect='auto', extent=[-3.5, 3.5, -6, 6], cmap='Blues') cb = plt.colorbar() cb.set_label("density") #

KDEã¡ãœããã®ã¹ã ãŒãžã³ã°ã®é·ãã«ãããã¹ã ãŒãºããšãã£ããŒã«ã®éã®ãã¬ãŒããªããå¹æçã«éžæã§ããŸãïŒå€äœãšåæ£ã®éã®ãŠããã¿ã¹ãªãã¬ãŒããªãã®äžäŸïŒã é©åãªå¹³æ»åã®é·ãã®éžæã«é¢ããåºç¯ãªæç®ããããŸããgaussian_kdeé¢æ°ã¯ãçµéšåã䜿çšããŠå ¥åããŒã¿ã®æºæé©ãªå¹³æ»åã®é·ããèŠã€ããŸãã
SciPyãšã³ã·ã¹ãã ã«ã¯ä»ã«ãKDEã¡ãœããã®å®è£ ããããããããç¬èªã®é·æãšçæããããŸããããšãã°ãsklearn.neighbors.KernelDensityããã³statsmodels.nonparametric.kernel_density.KDEMultivariateã¡ãœããã§ãã KDEããŒã¹ã®èŠèŠåã«Matplotlibã©ã€ãã©ãªã䜿çšããã«ã¯ãåé·ã³ãŒããèšè¿°ããå¿ èŠããããŸãã ãã®ç« ã®ãSeabornã©ã€ãã©ãªã䜿çšããèŠèŠåãã»ã¯ã·ã§ã³ã§èª¬æããSeabornã©ã€ãã©ãªã¯ããã®ãããªèŠèŠåãäœæããããã®ã¯ããã«ç°¡æœãªæ§æãæã€APIãæäŸããŸãã
ãã£ãŒãäžã®ã«ã¹ã¿ã å¡äŸ
ã°ã©ãã®ããŸããŸãªèŠçŽ ã«ã©ãã«ãèšå®ããããšã«ãããã°ã©ããããæ確ã«ãªããŸãã 以åãåçŽãªå¡äŸãäœæããããšãæ€èšããŸããããããã§ã¯Matplotlibã§å¡äŸã®å Žæãšå€èŠ³ãã«ã¹ã¿ãã€ãºããå¯èœæ§ã瀺ããŸãã
plt.legendïŒïŒã³ãã³ãã䜿çšãããšãããŒã¯ãããã°ã©ãèŠçŽ ã®æãåçŽãªå¡äŸãèªåçã«äœæã§ããŸãïŒå³4.41ïŒã
In[1]: import matplotlib.pyplot as plt plt.style.use('classic') In[2]: %matplotlib inline import numpy as np In[3]: x = np.linspace(0, 10, 1000) fig, ax = plt.subplots() ax.plot(x, np.sin(x), '-b', label='Sine') # ax.plot(x, np.cos(x), '--r', label='Cosine') # ax.axis('equal') leg = ax.legend();

ãã®ãããªã¹ã±ãžã¥ãŒã«ã«ã¯å€ãã®ã«ã¹ã¿ã ãªãã·ã§ã³ãå¿ èŠã«ãªãå ŽåããããŸãã ããšãã°ãå¡äŸã®å Žæãèšå®ãããã¬ãŒã ãç¡å¹ã«ããããšãã§ããŸãïŒå³4.42ïŒïŒ
In[4]: ax.legend(loc='upper left', frameon=False) fig

ncolã³ãã³ãã䜿çšããŠãå¡äŸã®åæ°ãèšå®ããããšãã§ããŸãïŒå³4.43ïŒïŒ
In[5]: ax.legend(frameon=False, loc='lower center', ncol=2) fig

å¡äŸã«äžžãé·æ¹åœ¢ã®ãã¬ãŒã ïŒãã¡ã³ã·ãŒããã¯ã¹ïŒã䜿çšãããã圱ãè¿œå ãããããã¬ãŒã ãŸãã¯ããã¹ãã®è¿ãã®ãã£ãŒã«ãã®éæ床ïŒã¢ã«ãã¡ãã¡ã¯ã¿ãŒïŒãå€æŽãããã§ããŸãïŒå³4.44ïŒã
In[6]: ax.legend(fancybox=True, framealpha=1, shadow=True, borderpad=1) fig

å¡äŸã®æ¢åã®èšå®ã®è©³çŽ°ã«ã€ããŠã¯ãplt.legendé¢æ°ã®docstringãåç §ããŠãã ããã
å¡äŸã®èŠçŽ ãéžæãã
ããã©ã«ãã§ã¯ãå¡äŸã«ã¯ããŒã¯ããããã¹ãŠã®ã¢ã€ãã ãå«ãŸããŸãã ãããäžèŠãªå Žåã¯ãã°ã©ãäœæã³ãã³ãã§è¿ããããªããžã§ã¯ãã䜿çšããŠãå¡äŸã«ã©ã®èŠçŽ ãšã©ãã«ã衚瀺ããããæå®ã§ããŸãã plt.plotïŒïŒã³ãã³ãã¯ã1åã®åŒã³åºãã§è€æ°ã®ç·ãæç»ããäœæãããç·ã€ã³ã¹ã¿ã³ã¹ã®ãªã¹ããè¿ãããšãã§ããŸãã 䜿çšããèŠçŽ ã瀺ãã«ã¯ãæå®ãããã©ãã«ãšãšãã«ãããã®ãããããplt.legendïŒïŒé¢æ°ã«æž¡ãã ãã§ååã§ãïŒå³4.45ïŒã
In[7]: y = np.sin(x[:, np.newaxis] + np.pi * np.arange(0, 2, 0.5)) lines = plt.plot(x, y) # lines plt.Line2D plt.legend(lines[:2], ['first', 'second']); # ,

éåžžãå®éã«ã¯æåã®æ¹æ³ã䜿çšããŠãå¡äŸã«è¡šç€ºããå¿ èŠã®ããèŠçŽ ã®ã©ãã«ãçŽæ¥ç€ºãæ¹ã䟿å©ã§ãïŒå³4.46ïŒã
In[8]: plt.plot(x, y[:, 0], label='first') plt.plot(x, y[:, 1], label='second') plt.plot(x, y[:, 2:]) plt.legend(framealpha=1, frameon=True);

ããã©ã«ãã§ã¯ãã©ãã«å±æ§ãèšå®ãããŠããªããã¹ãŠã®èŠçŽ ãå¡äŸã§ç¡èŠãããããšã«æ³šæããŠãã ããã
ããŸããŸãªãµã€ãºã®ãã€ã³ãã®å¡äŸãå®çŸ©ãã
ããã©ã«ãã®å¡äŸæ©èœã§ã¯ãã¹ã±ãžã¥ãŒã«ãååã§ãªãå ŽåããããŸãã ããŸããŸãªãµã€ãºã®ãããã䜿çšããŠããŒã¿ã®ç¹å®ã®å åãèŠèŠåãããããåæ ããå¡äŸãäœæãããšããŸãã ããã«ããããã®ãµã€ãºã䜿çšããŠã«ãªãã©ã«ãã¢ã®éœåžã®äººå£ãåæ ããäŸããããŸãã ãã€ã³ããµã€ãºã¹ã±ãŒã«ã®å¡äŸãå¿ èŠã§ããã©ãã«èªäœã䜿çšããã«ãã©ãã«ä»ãããŒã¿ãã°ã©ãã«è¡šç€ºããŠäœæããŸãïŒå³4.47ïŒã
In[9]: import pandas as pd cities = pd.read_csv('data/california_cities.csv') # lat, lon = cities['latd'], cities['longd'] population, area = cities['population_total'], cities['area_total_km2'] # , # , plt.scatter(lon, lat, label=None, c=np.log10(population), cmap='viridis', s=area, linewidth=0, alpha=0.5) plt.axis(aspect='equal') plt.xlabel('longitude') plt.ylabel('latitude') plt.colorbar(label='log$_{10}$(population)') plt.clim(3, 7) # : # for area in [100, 300, 500]: plt.scatter([], [], c='k', alpha=0.3, s=area, label=str(area) + ' km$^2$') plt.legend(scatterpoints=1, frameon=False, labelspacing=1, title='City Area') # plt.title('California Cities: Area and Population'); # :

å¡äŸã¯åžžã«ãã£ãŒãäžã«ãããªããžã§ã¯ããåç §ãããããç¹å®ã®ã¿ã€ãã®ãªããžã§ã¯ãã衚瀺ããå¿ èŠãããå Žåã¯ããŸããã£ãŒãäžã«æç»ããå¿ èŠããããŸãã ãã®å Žåãå¿ èŠãªãªããžã§ã¯ãïŒç°è²ã®åïŒã¯ãã£ãŒãäžã«ãªããããããªãã¯ã«é²ã¿ã空ã®ãªã¹ãããã£ãŒãã«è¡šç€ºããŸãã å¡äŸã«ã¯ãã©ãã«ãæå®ãããŠãããã£ãŒãèŠçŽ ã®ã¿ããªã¹ããããŠããããšã«æ³šæããŠãã ããã
空ã®ãªã¹ããããããããŠã©ãã«ä»ããªããžã§ã¯ããäœæãããããå¡äŸã«ãŸãšããŸãã å¡äŸã¯æçšãªæ å ±ãæäŸããŸãã ãã®æŠç¥ã䜿çšããŠãããè€éãªèŠèŠåãäœæã§ããŸãã
ãã®ãããªå°çããŒã¿ã®å Žåãå·ã®å¢çç·ããã®ä»ã®å°å³èŠçŽ ã衚瀺ãããšãã°ã©ããããæ確ã«ãªãããšã«æ³šæããŠãã ããã ãã®ç®çã«æé©ãªããŒã«ã¯ãMatplotlibã©ã€ãã©ãªçšã®ãªãã·ã§ã³ã®BasemapãŠãŒãã£ãªãã£ã»ããã§ããããã«ã€ããŠã¯ããã®ç« ã®ãããŒã¹ãããã䜿çšããå°çããŒã¿ã®è¡šç€ºãã»ã¯ã·ã§ã³ã§èª¬æããŸãã
ããã€ãã®å¡äŸã®è¡šç€º
ãããããããšãã«ãåã座æšç³»ã«å¯ŸããŠããã€ãã®å¡äŸãè¿œå ããå¿ èŠãããå ŽåããããŸãã æ®å¿µãªãããMatplotlibã©ã€ãã©ãªã¯ãã®ã¿ã¹ã¯ãå€§å¹ ã«ç°¡çŽ åãããã®ã§ã¯ãããŸãããæšæºã®å¡äŸã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšããã£ãŒãå šäœã«å¯ŸããŠ1ã€ã®å¡äŸããäœæã§ããŸããã plt.legendïŒïŒããã³ax.legendïŒïŒé¢æ°ã䜿çšããŠ2çªç®ã®å¡äŸãäœæããããšãããšãåçŽã«æåã®å¡äŸãäžæžãããŸãã ãã®åé¡ã解決ããã«ã¯ãæåã«å¡äŸã®æ°ãããã€ã³ã¿ïŒã¢ãŒãã£ã¹ãïŒãäœæãã次ã«äœã¬ãã«ã®ax.add_artistïŒïŒã¡ãœããã䜿çšããŠ2çªç®ã®ãã€ã³ã¿ãæåã§ãã£ãŒãã«è¿œå ããŸãïŒå³4.48ïŒïŒ
In[10]: fig, ax = plt.subplots() lines = [] styles = ['-', '--', '-.', ':'] x = np.linspace(0, 10, 1000) for i in range(4): lines += ax.plot(x, np.sin(x - i * np.pi / 2), styles[i], color='black') ax.axis('equal') # ax.legend(lines[:2], ['line A', 'line B'], # , B loc='upper right', frameon=False) # from matplotlib.legend import Legend leg = Legend(ax, lines[2:], ['line C', 'line D'], # , D loc='lower right', frameon=False) ax.add_artist(leg);

Matplotlibã©ã€ãã©ãªã®ãã£ãŒããæ§æããäœã¬ãã«ã®æç»ãªããžã§ã¯ããç°¡åã«èª¿ã¹ãŸããã ax.legendïŒïŒã¡ãœããã®ãœãŒã¹ã³ãŒããèŠããšïŒããã¯ãlegend ??ã³ãã³ãã䜿çšããŠIPythonã·ã§ã«ã®ã¡ã¢åž³ã§å®è¡ã§ããããšãæãåºããŠãã ããïŒããã®é¢æ°ã¯ãé©åãªLegendããã¯ãŒãäœæããããžãã¯ããæãç«ã£ãŠããããšãããããŸãã legend_ããã³ã°ã©ãã®æç»æã«å³é¢ã«è¿œå ãããŸãã
ã«ã¹ã¿ã ã«ã©ãŒã¹ã±ãŒã«èšå®
ã°ã©ãã®å¡äŸã¯ãé¢æ£ç¹ã«å¯Ÿå¿ããé¢æ£ã©ãã«ãè¡šããŸãã ããããç·ããŸãã¯é åã®è²ã«åºã¥ããé£ç¶ã©ãã«ã«ã¯ãã«ã©ãŒã¹ã±ãŒã«ã®ãããªããŒã«ãæé©ã§ãã Matplotlibã©ã€ãã©ãªã§ã¯ãã«ã©ãŒã¹ã±ãŒã«ã¯ããã£ãŒãäžã®è²ã®æå³ãžã®ããŒãæäŸããç¬ç«ãã座æšç³»ã§ãã ãã®æ¬ã¯çœé»ã§å°å·ãããŠããããããã®ã»ã¯ã·ã§ã³ã§ã¯ããªãªãžãã«ã®ã°ã©ãã£ãã¯ãã«ã©ãŒã§èŠãããšãã§ããè¿œå ã®ãªã³ã©ã€ã³ã¢ããªã±ãŒã·ã§ã³ããããŸãïŒhttps://github.com/jakevdp/PythonDataScienceHandbookïŒã ãŸããã¡ã¢åž³ãã»ããã¢ããããŠã°ã©ããäœæããå¿ èŠãªæ©èœãã€ã³ããŒãããŸãã
In[1]: import matplotlib.pyplot as plt plt.style.use('classic') In[2]: %matplotlib inline import numpy as np
æãåçŽãªã«ã©ãŒã¹ã±ãŒã«ã¯ãplt.colorbaré¢æ°ã䜿çšããŠäœæã§ããŸãïŒå³4.49ïŒã
In[3]: x = np.linspace(0, 10, 1000) I = np.sin(x) * np.cos(x[:, np.newaxis]) plt.imshow(I) plt.colorbar();

次ã«ãã«ã©ãŒã¹ã±ãŒã«ãã«ã¹ã¿ãã€ãºããããŸããŸãªç¶æ³ã§å¹æçã«äœ¿çšããããã®ããã€ãã®ã¢ã€ãã¢ãèŠãŠãããŸãã èŠèŠåäœæé¢æ°ã®cmapåŒæ°ã䜿çšããŠãã«ã©ãŒããããæå®ã§ããŸãïŒå³4.50ïŒã
In[4]: plt.imshow(I, cmap='gray');
䜿çšå¯èœãªãã¹ãŠã®ã«ã©ãŒãããã¯ãplt.cmåå空éã«å«ãŸããŠããŸãã IPythonã·ã§ã«ã®TABèªåè£å®ã䜿çšããŠãçµã¿èŸŒã¿ãªãã·ã§ã³ã®å®å šãªãªã¹ããååŸã§ããŸãã
plt.cm.<TAB>
ããããã«ã©ãŒã«ãŒããéžæããæ©èœã¯æåã®ã¹ãããã«éããã䜿çšå¯èœãªãªãã·ã§ã³ã®äžããéžæããããšãéåžžã«éèŠã§ãïŒ éžæã¯ãäºæ³ãããã¯ããã«åŸ®åŠã§ãã

ã«ã©ãŒã«ãŒãã®éžæ
èŠèŠåã«ãããè²ã®éžæã«é¢ããå æ¬çãªè°è«ã¯ããã®æ¬ã®ç¯å²ãè¶ ããŠããŸããããã®ããŒãã«ã€ããŠã¯ãèšäºãããè¯ãæ°åã®ããã®10ã®ç°¡åãªã«ãŒã«ã ïŒ ããã¿ãŒã³ãæ¹åããããã®10ã®ç°¡åãªã«ãŒã«ã ïŒãèªãã§ãã ãã Matplotlibã©ã€ãã©ãªã®ãªã³ã©ã€ã³ããã¥ã¡ã³ãã«ã¯ãã«ã©ãŒãããã®éžæã«é¢ããèå³æ·±ãæ å ±ãå«ãŸããŠããŸãã
ã«ã©ãŒã«ãŒãã«ã¯3ã€ã®ç°ãªãã«ããŽãªãããããšã«æ³šæããŠãã ããã
- é£ç¶ããè²ã®ã«ãŒãã 1ã€ã®é£ç¶ããè²ã®ã·ãŒã±ã³ã¹ã§æ§æãããŸãïŒããšãã°ããã€ããªãŸãã¯ããªãã£ã¹ïŒã
- çºæ£è²ã«ãŒãã éåžžã¯ãå¹³åããã®æ£ãšè² ã®åå·®ãåæ ãã2ã€ã®ç°ãªãè²ïŒRdBuãŸãã¯PuOrãªã©ïŒãå«ãŸããŸãã
- é«å質ã®ã«ã©ãŒã«ãŒãã ãããã®è²ã¯æ確ãªé åºãªãã«æ··ãããŸãïŒäŸïŒè¹ããžã§ããïŒã
ããŒãžã§ã³2.0以åã®Matplotlibã©ã€ãã©ãªã§ããã©ã«ãã§äœ¿çšãããŠãããžã§ããã«ã©ãŒãããã¯ãé«å質ã®ã«ã©ãŒãããã®äŸã§ãã é«å質ã®ã«ã©ãŒãããã¯éçããŒã¿ãåæ ããã®ã«ã¯ããŸãé©ããŠããªããããããã©ã«ãã®ã«ã©ãŒããããšããŠã®åœŒå¥³ã®éžæã¯éåžžã«å€±æããŸãããéåžžãã¹ã±ãŒã«ã«æ²¿ã£ãŠç§»åãããšãã®èŒåºŠã®åäžãªå¢å ã¯åæ ãããŸããã
ããã¯ããžã§ããã«ã©ãŒã¹ã±ãŒã«ãçœé»è¡šçŸã«å€æããããšã§å®èšŒã§ããŸãïŒå³4.51ïŒã
In[5]: from matplotlib.colors import LinearSegmentedColormap def grayscale_cmap(cmap): """ """ cmap = plt.cm.get_cmap(cmap) colors = cmap(np.arange(cmap.N)) # RGBA # . http://alienryderflex.com/hsp.html RGB_weight = [0.299, 0.587, 0.114] luminance = np.sqrt(np.dot(colors[:, :3] ** 2, RGB_weight)) colors[:, :3] = luminance[:, np.newaxis] return LinearSegmentedColormap.from_list(cmap.name + "_gray", colors, cmap.N) def view_colormap(cmap): """ """ cmap = plt.cm.get_cmap(cmap) colors = cmap(np.arange(cmap.N)) cmap = grayscale_cmap(cmap) grayscale = cmap(np.arange(cmap.N)) fig, ax = plt.subplots(2, figsize=(6, 2), subplot_kw=dict(xticks=[], yticks=[])) ax[0].imshow([colors], extent=[0, 10, 0, 1]) ax[1].imshow([grayscale], extent=[0, 10, 0, 1]) In[6]: view_colormap('jet')

ç¡åœ©è²ç»åã®æããçžã«æ³šæããŠãã ããã ãã«ã«ã©ãŒã§ãã£ãŠãããã®äžåäžãªæããã¯ãè²ç¯å²ã®ç¹å®ã®éšåã泚ç®ãéããããšãæå³ããæœåšçã«éæ¬è³ªçãªã¢ã¯ã»ã³ãã«ã€ãªããå¯èœæ§ããããŸã
ããŒã¿ã»ããã®äžéšã ç¹å®ã®ç¯å²ã§èŒåºŠãåäžã«å€æŽããããã«ç¹å¥ã«èšèšãããviridisïŒããã©ã«ãã§äœ¿çšãããMatplotlibã©ã€ãã©ãªã®ããŒãžã§ã³2.0以éã§äœ¿çšïŒãªã©ã®ã«ã©ãŒãããã䜿çšããããšããå§ãããŸãã ãããã£ãŠããããã¯ç§ãã¡ã®è²ç¥èŠãšäžèŽããŠããã ãã§ãªããã°ã¬ãŒã®æ¿æ·¡ã§å°å·ç®çã®ããã«å€æãããŸãïŒå³4.52ïŒïŒ
In[7]: view_colormap('viridis')

ã¬ã€ã³ããŒã«ã©ãŒã¹ããŒã ã奜ãå Žåãé£ç¶ããŒã¿ã«ã¯ãã¥ãŒãããªãã¯ã¹ã«ã©ãŒããããé©ããŠããŸãïŒå³4.53ïŒã
In[8]: view_colormap('cubehelix')

ä»ã®å Žåãããšãã°ãå¹³åå€ããã®æ£ããã³è² ã®åå·®ã衚瀺ããã«ã¯ãRdBuïŒèµ€-é-ãèµ€-éãã®ç¥ïŒãªã©ã®ã«ã©ãŒã¹ã±ãŒã«ã®2è²ãããã䟿å©ãªå ŽåããããŸãã ãã ããå³ã§ãããããã«ã 4.54ãã°ã¬ãŒã®æ¿æ·¡ã«åãæ¿ãããšããã®ãããªæ å ±ã¯å€±ãããŸãïŒ
In[9]: view_colormap('RdBu')

次ã«ããããã®ã«ã©ãŒãããã®ããã€ãã®äœ¿çšäŸãèŠãŠãããŸãã
Matplotlibã©ã€ãã©ãªã«ã¯å€ãã®ã«ã©ãŒããããããããããã®ãªã¹ãã衚瀺ããã«ã¯ãIPythonã·ã§ã«ã䜿çšããŠplt.cmãµãã¢ãžã¥ãŒã«ã®å 容ã衚瀺ã§ããŸãã Pythonã§è²ã䜿çšããããã®ããåºæ¬çãªã¢ãããŒãã¯ãSeabornã©ã€ãã©ãªã®ããŒã«ãšããã¥ã¡ã³ãã«ãããŸãïŒãã®ç« ã®ãSeabornã©ã€ãã©ãªã䜿çšããèŠèŠåãã»ã¯ã·ã§ã³ãåç §ïŒã
»ãã®æžç±ã®è©³çŽ°ã«ã€ããŠã¯ãåºç瀟ã®ãŠã§ããµã€ããã芧ãã ãã
» ã³ã³ãã³ã
» æç²
ããŒã«ãŒã®20ïŒ å²åŒã¯ãŒãã³-Python