官术网_书友最值得收藏!

1.4 Python基礎庫入門實戰

對Python的基礎內容有了一定的認識后,本節將主要介紹Python中的常用第三方庫。這些庫都是實現了各種計算功能的開源庫,它們極大地豐富了Python的應用場景和計算能力,這里主要介紹NumPy、pandas和Matplotlib三個庫的基礎使用。其中NumPy是Python用來進行矩陣運算、高維度數組運算的數學計算庫;pandas是Python用來進行數據預處理、數據操作和數據分析的庫;Matplotlib是簡單易用的數據可視化庫,包含了豐富的數據可視化功能。接下將會逐個介紹這些庫的簡單應用。

1.4.1 NumPy庫應用入門

NumPy庫提供了很多高效的數值運算工具,在矩陣運算等方面提供了很多高效的函數,尤其是N維數組,在數據科學等計算方面應用廣泛。接下來將簡單介紹NumPy庫的相關使用。

為了使用方便,導入NumPy庫時可使用別名np代替,本書中的NumPy庫均使用np作為別名。

導入NumPy庫之后,針對該庫的入門使用,將會分為數組生成、數組中的索引與數組中的一些運算函數三個部分進行介紹。

1.數組生成

利用NumPy庫生成數組有多種方式,例如,可使用array()函數生成一個數組。

上面的程序中,使用np.array()函數將列表生成數組,并且可以利用數組A的shape屬性查看其形狀,使用ndim屬性查看數組的維度。

在NumPy庫中可以使用np.zeros()函數生成指定形狀的全0數組,使用np.ones()函數生成指定形狀的全1數組,np.eye()函數生成指定形狀的單位矩陣(對角線的元素為1)。

使用np.array()函數生成數組的時候,可以使用dtype參數指定其數據類型,例如使用np.float64指定數據為64位浮點型,使用np.float32指定數據為32位浮點型,使用np.int32指定數據為32位整型。同時也可以使用數組的astype()方法,修改數據類型。相關示例如下:

2.數組中的索引

數組中的元素,可以利用切片索引來獲取,其中索引可以是獲取一個元素的基本索引,也可以是獲取多個元素的切片索引,以及根據布爾值獲取元素的布爾索引。使用切片獲取元素的相關程序如下:

在NumPy庫中還可以使用np.where找到符合條件的值函數,找到符合條件值的位置,如輸出滿足條件的行索引和列索引,并且也可以指定滿足條件時輸出的內容,與不滿足條件時輸出的內容。相關程序示例如下:

針對獲得的數組可以使用*.T方法獲取其轉置,同時針對數組的軸可使用transpose()函數對數組的軸進行變換,如將3×4×2的數組轉化為2×4×3的數組,相關程序如下:

3.數組中的一些運算函數

在NumPy庫中已經準備了很多進行數組運算的函數,如計算數組的均值可以使用mean()函數,計算數組的和可以使用sum()函數,計算累加和可以使用cumsum()函數,相關程序如下:

數組的標準差和方差在一定程度上反映了數據的離散程度,可以通過std()函數計算標準差,使用var()函數計算方差。同時最大值可以使用max()函數,最小值可以使用min()函數進行計算。

隨機數是機器學習中經常使用的內容,所以NumPy庫提供了很多生成各類隨機數的方法,其中設置隨機數種子,可以使用np.random.seed()函數,它可以保證在使用隨機數函數生成隨機數時,隨機數是可重復出現的。

生成服從正態分布的隨機數可以使用np.random.randn()函數,生成0~n整數的隨機排序可以使用np.random.permutation(n)函數,生成服從均勻分布的隨機數可以使用np.random.rand()函數。在指定的范圍生成隨機整數可以使用np.random.randint()函數。這些函數的使用示例如下:

NumPy中還提供了保存和導入數據的函數np.save()和np.load(),其中np.save()通常是將一個數組保存為.npy文件,若要保存多個數組,可以使用np.savez()函數,并且可以為每個數組指定名稱,方便導入數組后對數據的獲取,相關程序如下:

1.4.2 pandas庫應用入門

pandas庫在數據分析中是非常重要和常用的庫,它利用數據框讓數據的處理和操作變得簡單和快捷,在數據預處理、缺失值填補、時間序列、可視化等方面都有應用。接下來簡單介紹pandas的使用方法,包括如何生成序列和數據表格、數據聚合與分組運算及數據可視化功能等。pandas庫在導入后經常使用pd來代替。

1.序列和數據表

pandas庫中的序列(Series)是一維標簽數組,能夠容納任何類型的數據。可以使用pd.Series( data, index,…)生成序列,其中data指定序列中的數據,通常使用數組或者列表,index通常指定序列中的索引,例如使用下面的程序可以生成序列s1,并且可以通過s1.values和s1.index獲取序列的數值和索引。

針對生成的序列可以通過切片和索引獲取序列中的對應值,也可以對獲得的數值重新賦值。相關示例如下:

通過字典也可以生成序列,其中字典的鍵將會作為序列的索引,字典的值將會作為序列的值,下面的s2就是利用字典生成的序列。針對序列可以使用value_counts()方法,計算序列中每個取值出現的次數。

數據表是pandas庫提供的一種二維數據結構,數據按行和列的表格方式排列,是數據分析經常使用的數據展示方式。數據表的生成通常使用pd.DataFrame(data,index,columns,…)方式。其中data可以使用字典、數組等內容,index用于指定數據表的索引,columns用于指定數據表的列名。

使用字典生成數據表時,字典的鍵將會作為數據表格的列名,值將會作為對應列的內容。同時可以使用df1["列名"]的形式為數據表格df1添加新的列,或者獲取對應列的內容。df1.columns屬性則可以輸出數據表格的列名。

針對數據表格df可以使用df.loc獲取指定的數據,使用方式為df.loc[index_name,col_name],選擇指定位置的數據。相關使用方法如下:

數據表格的df.iloc方法是基于位置的索引來獲取對應的內容,相關使用方法如下:

2.數據聚合與分組運算

pandas庫提供了強大的數據聚合和分組運算能力,如可以通過apply方法,將指定的函數作用于數據的行或列,而groupby方法可以對數據進行分組統計,這些功能對數據表的變換、分析和計算都非常有用。下面使用鳶尾花數據集介紹如何使用apply方法將函數應用于數據計算。

通過上面的程序可以發現利用apply方法可以使函數的應用變得簡單,從而方便對數據進行更多的認識和分析。數據表的groupby方法則可進行分組統計,其在應用上比apply方法更加廣泛,如根據數據的不同類型,計算數據的一些統計性質,獲得數據透視表。相關使用示例如下:

數據表的聚合運算可以通過agg方法,并且該方法可以和groupby方法結合使用,從而完成更復雜的數據描述和分析工作,如可以計算不同數據特征的不同統計性質等。相關使用示例如下:

3.數據可視化函數

pandas庫提供了針對數據表和序列的簡單可視化方式,其可視化是基于Matplotlib庫進行的。對pandas的數據表進行數據可視化時,只需要使用數據表的plot()方法,該方法包含散點圖、折線圖、箱線圖、條形圖等。下面使用數據演示一些pandas庫的數據可視化方法,獲得數據可視化圖像。

上面的程序是使用數據表的boxplot()方法獲得箱線圖,同時在可視化時,可視化兩列數據SepalLengthCm和SepalWidthCm變量的箱線圖,再針對每個變量使用類別特征Species進行分組,最終可視化結果如圖1-11所示。

圖1-11 數據箱線圖可視化

使用df.plot()方法對數據表進行可視化時,通常會使用kind參數指定數據可視化圖像的類型,參數x指定橫坐標軸使用的變量,參數y指定縱坐標軸使用的變量,其他參數調整數據的可視化結果。例如針對散點圖,可以使用參數s指定點的大小,使用參數c指定點的顏色等。利用數據表獲得散點圖的程序如下,程序運行后的結果如圖1-12所示。

圖1-12 數據散點圖可視化

使用df.plot()方法時,指定參數kind="hexbin"可以使用六邊形熱力圖,對數據進行可視化,例如針對鳶尾花數據中的SepalLengthCm變量和SepalWidthCm變量的六邊形熱力圖,可使用下面的程序進行可視化,獲得如圖1-13所示的結果。

圖1-13 數據六邊形熱力圖

可視化時指定參數kind="line",可以使用折線圖對數據進行可視化,例如針對鳶尾花數據中的4個變量的變化情況,可使用下面的程序進行拆線圖可視化,程序運行后的結果如圖1-14所示。

圖1-14 數據折線圖可視化

pandas的入門內容先介紹到這里,更多內容可以參考官方文檔進行探索和學習。下面介紹如何使用Matplotlib。

1.4.3 Matplotlib庫應用入門

Matplotlib是Python的繪圖庫,其具有豐富的繪圖功能,pyplot是其中的一個模塊,它提供了類似MATLAB的繪圖接口,能夠繪制2D、3D等豐富圖像,是數據可視化的好幫手,接下來簡單介紹其使用方法。

首先利用Matplotlib庫進行繪圖的一些準備工作。

上面的程序中首先導入Matplotlib中的pyplot模塊,并命名為plt,為了在Jupyter Notebook中顯示圖像,需要使用%matplotlib inline命令;為了繪制3D圖像,需要引入三維坐標系Axes3D。由于Matplotlib庫默認不支持中文文本在圖像中的顯示,為解決這個問題,可以使用matplotlib.rcParams['axes.unicode_minus']=False語句,同時導入seaborn數據可視化庫,使用其set()方法可以設置可視化圖像時的基礎部分,例如font="Kaiti"參數指定圖中文本使用的字體,參數style="ticks"設置坐標系的樣式,參數font_scale設置字體的顯示比例等。

1.二維可視化圖像

在介紹Matplotlib庫的二維數據可視化之前,先展示一個簡單的曲線可視化示例,程序如下:

上面的程序中,首先生成X、Y坐標數據,然后使用plt.figure()定義一個圖像窗口,并使用figsize=(10,6)參數指定圖像的寬和高;plt.plot()繪制圖像對應的坐標為X和Y,其中第三個參數“r-*”代表繪制紅色曲線星形圖,plt.xlabel()定義X坐標軸的標簽名稱,plt.ylabel()定義Y坐標軸的標簽名稱,plt.title()指定圖像的名稱,plt.grid()代表在圖像中顯示網格線,最后使用plt.show()查看圖像。得到的圖像如圖1-15所示。

圖1-15 簡單的曲線圖可視化

Matplotlib庫還可以在一個圖像上繪制多個子圖,從多方面、多角度對數據進行觀察。下面展示如何可視化出一個圖像中包含3個子圖的示例,程序如下:

在這個例子中,分別繪制了曲線圖、直方圖、階梯圖3個子圖。plt.subplot(2,2,1)表示將當前圖形窗口分成2×2=4個區域,并在第1個區域上進行繪圖。在第一幅子圖中指定X軸名稱時,使用plt.xlabel(r"$\alpha$")來顯示,其中 "$\alpha$" 表示LaTeX公式。plt.subplot(2,2,2)表示開始在第2個區域上繪制圖像,plt.hist(histdata, 10)表示將數據histdata分成10份來繪制直方圖。而在可視化第三個子圖時,使用plt.subplot(2,1,2)表示將圖形區域重新劃分為2×1=2個窗口,并且指定在第2個窗口上作圖,這樣原始的2×2的4個子圖的第3個和第4個子圖,組合為一個新的子圖窗口。plt.step(X,Y,c="r",label="sin(x)",linewidth=3)為繪制階梯圖,并且指定線的顏色為紅色,線寬為3;plt.legend(loc="lower right",fontsize=16)可以為圖像在指定的位置添加圖例,字體大小為16;plt.xticks(xtick,xticklabel,rotation=45)是通過plt.xticks()來指定坐標軸X軸的刻度所顯示的內容,并且可通過rotation=45將其逆時針旋轉45°;plt.subplots_adjust(hspace=0.35)為調整子圖之間的水平間距,讓子圖之間沒有遮擋,最終的數據可視化結果如圖1-16所示。

圖1-16 多個子圖窗口可視化

2.三維可視化圖像

Matplotlib庫還可以繪制三維圖像,下面給出繪制三維圖像曲面圖和空間散點圖的例子,程序如下:

上面的可視化程序中,先使用np.meshgrid()函數準備數據可視化需要的網格數據,然后針對圖像窗口使用fig.add_subplot(111, projection= "3d")初始化一個3D坐標系ax1,接著使用ax1.plot_surface()函數繪制曲面圖,使用ax1.contour()函數為圖像添加等高線,最后設置了各個坐標軸的標簽和可視化范圍,可視化結果如圖1-17所示。

圖1-17 3D曲面和等高線圖可視化

同樣在一副圖像中可以繪制多個3D圖像,可視化3D曲線圖和3D散點圖的程序如下:

上面的程序在可視化3D圖像時使用的是3個一維向量數據,分別指定x、y和z軸的坐標位置,然后可視化3D曲線圖和3D散點圖,程序運行后的結果如圖1-18所示。

圖1-18 3D曲面圖與3D散點圖

3.可視化圖片

針對圖像數據,可以使用plt.imshow()函數進行可視化,同時針對灰度圖像,可以使用參數cmap=plt.cm.gray定義圖像的顏色映射,針對一張圖片可視化RGB圖像和灰度圖像的程序如下:

運行上面的程序后結果如圖1-19所示,分別是RGB圖像和繪圖圖像的可視化。

圖1-19 可視化圖片數據

Matplotlib庫中,包含很多的數據可視化內容,上面的內容只是其中的一小部分,更多的可視化方法會在后面的章節中介紹,也可以參看官方的幫助文檔進行學習。

主站蜘蛛池模板: 兴安盟| 博客| 桐梓县| 全南县| 阿图什市| 永城市| 乐亭县| 汉阴县| 鄢陵县| 陇南市| 平乐县| 安多县| 肇源县| 墨脱县| 谢通门县| 汉沽区| 大方县| 万全县| 仙游县| 苍南县| 汉沽区| 巨野县| 正阳县| 五指山市| 鄂托克前旗| 孙吴县| 沙坪坝区| 思茅市| 临漳县| 宁安市| 友谊县| 象州县| 延安市| 嘉祥县| 辽阳市| 孟州市| 遵化市| 墨脱县| 保亭| 满城县| 沛县|