偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

手把手教你用Matplotlib進(jìn)行數(shù)據(jù)可視化

大數(shù)據(jù) 數(shù)據(jù)可視化
Matplotlib是建立在NumPy數(shù)組上的一個(gè)多平臺(tái)數(shù)據(jù)可視化庫(kù)。在2002年,約翰·亨特(John Hunter)提出Matplotlib,最初的構(gòu)思是設(shè)計(jì)為IPython的一個(gè)補(bǔ)丁,以便能夠從命令行啟用交互式MATLAB樣式繪圖。

 01 導(dǎo)入Matplotlib

如果你安裝了完整的Python Anaconda,那么你已經(jīng)安裝了Matplotlib,可以開始了。否則,你可能要訪問官網(wǎng)獲取安裝說明。

http://matplotlib.org

就像我們用縮寫np來(lái)表示NumPy一樣,我們也會(huì)用一些標(biāo)準(zhǔn)的縮寫來(lái)表示Matplotlib導(dǎo)入:

  1. import matplotlib as mpl  
  1. import matplotlib.pyplot as plt 

plt是我們最常用的一個(gè)接口。

02 生成一個(gè)簡(jiǎn)單的圖形

言歸正傳,讓我們創(chuàng)建第一個(gè)圖形。

假設(shè)我們要繪制正弦函數(shù)sin(x)的一個(gè)簡(jiǎn)單線圖。我們希望函數(shù)求x軸(0≤x≤10)上的所有值。我們將使用NumPy的linspace函數(shù)在x軸上創(chuàng)建一個(gè)線性空間,x值從0到10,共100個(gè)樣本點(diǎn):

  1. import numpy as np 
  1. x = np.linspace(0, 10, 100) 

我們可以使用NumPy的sin函數(shù)求sin函數(shù)的所有x值,并通過調(diào)用plt的plot函數(shù)可視化結(jié)果: 

  1. plt.plot(x, np.sin(x)) 

你親自試過了嗎?發(fā)生什么了?有什么發(fā)現(xiàn)嗎?

問題是,這取決于你在何處運(yùn)行這個(gè)腳本,你可能什么都看不到。以下是可以考慮的可能性:

1. 從.py腳本繪圖

如果你正從一個(gè)腳本運(yùn)行matplotlib,那么你只需要調(diào)用plt,如下所示: 

  1. plt.show() 

調(diào)用后,圖形就會(huì)顯示出來(lái)!

2. 從IPython shell繪圖

這實(shí)際上是以交互方式運(yùn)行matplotlib的最便捷的方式之一。要顯示繪圖,你需要在啟動(dòng)IPython之后,調(diào)用%matplotlib魔術(shù)命令: 

  1. %matplotlib  
  2. Using matplotlib backend: Qt5Agg  
  1. import matplotlib.pyplot as plt 

然后,所有圖都會(huì)自動(dòng)顯示出來(lái),不必每次都調(diào)用plt.show()。

3. 從Jupyter Notebook繪圖

如果你從基于瀏覽器的Jupyter Notebook上查看這段代碼,你需要使用同樣的%matplotlib魔術(shù)命令。可是,你還可以選擇將圖形直接嵌入notebook中,這有兩種可能的結(jié)果:

  •  %matplotlib notebook將生成的交互式圖嵌入notebook中。
  •  %matplotlib inline將生成的靜態(tài)圖嵌入notebook中。

我們通常會(huì)選擇內(nèi)聯(lián)選項(xiàng): 

  1. %matplotlib inline 

現(xiàn)在,讓我們?cè)僭囈淮危?nbsp;

  1. plt.plot(x, np.sin(x)) 

上述命令給出的輸出如圖2-4所示。

▲圖2-4 應(yīng)用內(nèi)聯(lián)選項(xiàng)生成的圖

稍后,如果你想保存圖表,可以直接從IPython或Jupyter Notebook的選項(xiàng)中保存: 

  1. plt.savefig('figures/02.03-sine.png') 

只要保證使用所支持的文件后綴即可,例如.jpg、.png、.tif、.svg、.eps或者.pdf。

在導(dǎo)入matplotlib之后,運(yùn)行plt.style.use(style_name),你可以更改繪圖的樣式。在plt.style.available中列出了所有可用的樣式。例如,試試plt.style.use('fivethirtyeight')、plt.style.use('ggplot')或者plt.style.use('seaborn-dark')。為了增加樂趣,可以運(yùn)行plt.xkcd(),再嘗試?yán)L制其他內(nèi)容。

03 可視化外部數(shù)據(jù)集的數(shù)據(jù)

作為本文的最后一個(gè)測(cè)試,讓我們可視化一些來(lái)自外部數(shù)據(jù)集的數(shù)據(jù),例如scikit-learn的digits數(shù)據(jù)集。

具體來(lái)說,我們將需要3個(gè)可視化工具:

  •  用于實(shí)際數(shù)據(jù)的scikit-learn
  •  用于數(shù)據(jù)處理的NumPy
  •  Matplotlib

首先,讓我們導(dǎo)入所有這些可視化工具: 

  1. import numpy as np  
  2. from sklearn import datasets  
  3. import matplotlib.pyplot as plt  
  4. %matplotlib inline 

第一步是實(shí)際加載數(shù)據(jù): 

  1. digits = datasets.load_digits() 

如果我們沒有記錯(cuò)的話,digits應(yīng)該有2個(gè)不同的字段:一個(gè)是data字段,包含實(shí)際的圖像數(shù)據(jù);另一個(gè)是target字段,包含圖像標(biāo)簽。

與其相信我們的記憶,不如讓我們研究一下digits對(duì)象。這通過輸入字段名稱、添加句點(diǎn)、再按下Tab鍵—digits.<TAB>來(lái)實(shí)現(xiàn)。這會(huì)顯示出digits對(duì)象還包含了一些其他字段,例如一個(gè)名為images的字段。images和data這2個(gè)字段似乎只是形狀不同: 

  1. print(digits.data.shape)  
  2. print(digits.images.shape) 

輸出結(jié)果: 

  1. (1797, 64)  
  2. (1797, 8, 8) 

在這兩個(gè)例子中,第一維都對(duì)應(yīng)于數(shù)據(jù)集中的圖像數(shù)。但是data將所有像素排列在一個(gè)大的向量中,而images則保留了每個(gè)圖像的8×8空間排列。

因此,如果我們想繪制單張圖像,images字段可能更合適。首先,使用NumPy的數(shù)組切割,從數(shù)據(jù)集中抓取一張圖像: 

  1. img = digits.images[0, :, :] 

這里,我們說想要抓取長(zhǎng)為1797項(xiàng)的數(shù)組中的第一行,以及所有對(duì)應(yīng)的8×8=64個(gè)像素。然后,我們可以使用plt的imshow函數(shù)繪制圖像: 

  1. plt.imshow(img, cmap='gray' 
  2. plt.savefig('figures/02.04-digit0.png') 

上述命令給出的輸出如圖2-5所示。請(qǐng)注意,圖像是模糊的,因?yàn)槲覀儗⒃搱D像調(diào)整到了更大的尺寸。原始圖像的大小只有8×8。

▲圖2-5 生成單張圖像的示例結(jié)果

此外,我們還可以使用cmap參數(shù)指定一個(gè)彩圖。在默認(rèn)情況下,Matplotlib使用MATLAB的默認(rèn)彩圖jet??墒?,對(duì)于灰度圖像,gray彩圖更有意義。

最后,我們可以利用plt的subplot函數(shù)繪制一組數(shù)字樣本。subplot函數(shù)與在MATLAB中一樣,我們指定行數(shù)、列數(shù)以及當(dāng)前子圖的索引(從1開始)。我們將使用一個(gè)for循環(huán)遍歷數(shù)據(jù)集中的前10個(gè)圖像,每個(gè)圖像都有自己的子圖: 

  1. plt.figure(figsize=(14, 4))  
  2. for image_index in range(10):  
  3.     # images are 0-indexed, subplots are 1-indexed  
  4.     subplot_index = image_index + 1  
  5.     plt.subplot(2, 5, subplot_index)  
  6.     plt.imshow(digits.images[image_index, :, :], cmap='gray'

生成的輸出如圖2-6所示。

▲圖2-6 生成包含10個(gè)數(shù)字的一組子圖

對(duì)于各種數(shù)據(jù)集,另一個(gè)很好的資源是本書作者邁克爾·貝耶勒的母校加州大學(xué)歐文分校的機(jī)器學(xué)習(xí)資源庫(kù):

http://archive.ics.uci.edu/ml/index.php

關(guān)于作者:阿迪蒂亞·夏爾馬(Aditya Sharma),羅伯特·博世(Robert Bosch)公司的一名高級(jí)工程師,致力于解決真實(shí)世界的自動(dòng)計(jì)算機(jī)視覺問題。曾獲得羅伯特·博世公司2019年人工智能編程馬拉松的首名。

維什韋什·拉維·什里馬利(Vishwesh Ravi Shrimali),于2018年畢業(yè)于彼拉尼博拉理工學(xué)院(BITS Pilani)機(jī)械工程專業(yè)。此后一直在BigVision LLC從事深度學(xué)習(xí)和計(jì)算機(jī)視覺方面的工作,還參與了官方OpenCV課程的創(chuàng)建。

邁克爾·貝耶勒(Michael Beyeler),是華盛頓大學(xué)神經(jīng)工程和數(shù)據(jù)科學(xué)的博士后研究員,致力于仿生視覺的計(jì)算模型研究,以為盲人植入人工視網(wǎng)膜(仿生眼睛),改善盲人的感知體驗(yàn)。他的工作屬于神經(jīng)科學(xué)、計(jì)算機(jī)工程、計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的交叉領(lǐng)域。

本文摘編自《機(jī)器學(xué)習(xí):使用OpenCV、Python和scikit-learn進(jìn)行智能圖像處理(原書第2版)》,經(jīng)出版方授權(quán)發(fā)布。 

 

責(zé)任編輯:龐桂玉 來(lái)源: 大數(shù)據(jù)DT
相關(guān)推薦

2021-08-26 09:00:48

PyechartsPython可視化

2021-07-14 09:00:36

Python數(shù)據(jù)Python基礎(chǔ)

2022-07-24 21:43:48

數(shù)據(jù)可視化大數(shù)據(jù)

2021-08-09 13:31:25

PythonExcel代碼

2022-10-19 14:30:59

2021-05-10 06:48:11

Python騰訊招聘

2020-03-08 22:06:16

Python數(shù)據(jù)IP

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2021-02-06 14:55:05

大數(shù)據(jù)pandas數(shù)據(jù)分析

2022-08-04 10:39:23

Jenkins集成CD

2009-04-22 09:17:19

LINQSQL基礎(chǔ)

2023-02-01 10:16:50

Python可視化

2021-01-21 09:10:29

ECharts柱狀圖大數(shù)據(jù)

2021-01-08 10:32:24

Charts折線圖數(shù)據(jù)可視化

2012-01-11 13:40:35

移動(dòng)應(yīng)用云服務(wù)

2021-08-02 23:15:20

Pandas數(shù)據(jù)采集

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python

2021-12-11 20:20:19

Python算法線性

2020-11-08 14:13:31

Python帕累托分析開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)