[Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)
歡迎大家來到“Python從零到壹”,在這里我將分享約200篇Python系列文章,帶大家一起去學習和玩耍,看看Python這個有趣的世界。所有文章都將結合案例、代碼和作者的經驗講解,真心想把自己近十年的編程經驗分享給大家,希望對您有所幫助,文章中不足之處也請海涵。Python系列整體框架包括基礎語法10篇、網絡爬蟲30篇、可視化分析10篇、機器學習20篇、大數據分析20篇、圖像識別30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的關注、點贊和轉發就是對秀璋最大的支持,知識無價人有情,希望我們都能在人生路上開心快樂、共同成長。
前一篇文章講述了Selenium基礎技術,通過三個基于Selenium技術的爬蟲,爬取Wikipedia、百度百科和互動百科消息盒的例子,從實際應用出發來學習網絡爬蟲。本文將進入數據分析部分,主要普及網絡數據分析的基本概念,講述數據分析流程和相關技術,同時詳細講解Python提供的若干第三方數據分析庫,包括Numpy、Pandas、Matplotlib、Sklearn等。基礎文章,希望對您有所幫助。
Web數據分析是一門多學科融合的學科,它涉及統計學、數據挖掘、機器學習、數據科學、知識圖譜等領域。數據分析是指用適當的統計方法對所收集數據進行分析,通過可視化手段或某種模型對其進行理解分析,從而最大化挖掘數據的價值,形成有效的結論。
文章目錄
- 一.數據分析
- 二.常用庫
- 三.Numpy
- 1.Array用法
- 2.二維數組操作
- 3.NumPy思維導圖
- 四.Pandas
- 1.基礎用法
- 2.讀寫文件
- 3.Series
- 4.DataFrame
- 5.Pandas思維導圖
- 五.Matplotlib
- 1.基礎用法
- 2.繪圖簡單示例
- 3.Matplotlib思維導圖
- 六.Scikit-Learn
- 1.基礎介紹
- 2.Sklearn思維導圖
- 七.本章小結
下載地址:
- https://github.com/eastmountyxz/Python-zero2one
前文賞析:
第一部分 基礎語法
- [Python從零到壹] 一.為什么我們要學Python及基礎語法詳解
- [Python從零到壹] 二.語法基礎之條件語句、循環語句和函數
- [Python從零到壹] 三.語法基礎之文件操作、CSV文件讀寫及面向對象
第二部分 網絡爬蟲
- [Python從零到壹] 四.網絡爬蟲之入門基礎及正則表達式抓取博客案例
- [Python從零到壹] 五.網絡爬蟲之BeautifulSoup基礎語法萬字詳解
- [Python從零到壹] 六.網絡爬蟲之BeautifulSoup爬取豆瓣TOP250電影詳解
- [Python從零到壹] 七.網絡爬蟲之Requests爬取豆瓣電影TOP250及CSV存儲
- [Python從零到壹] 八.數據庫之MySQL基礎知識及操作萬字詳解
- [Python從零到壹] 九.網絡爬蟲之Selenium基礎技術萬字詳解(定位元素、常用方法、鍵盤鼠標操作)
- [Python從零到壹] 十.網絡爬蟲之Selenium爬取在線百科知識萬字詳解(NLP語料構造必備技能)
第三部分 數據分析
- [Python從零到壹] 十一.數據分析之Numpy、Pandas、Matplotlib和Sklearn入門知識萬字詳解(1)
作者新開的“娜璋AI安全之家”將專注于Python和安全技術,主要分享Web滲透、系統安全、人工智能、大數據分析、圖像識別、惡意代碼檢測、CVE復現、威脅情報分析等文章。雖然作者是一名技術小白,但會保證每一篇文章都會很用心地撰寫,希望這些基礎性文章對你有所幫助,在Python和安全路上與大家一起進步。
一.數據分析
什么是數據分析?
網絡數據分析(Web Data Analysis)是指采用合適的統計分析方法,建立正確的分析模型,對Web網絡數據進行分析,提取有價值的信息和結論,挖掘出數據的價值,從而造福社會和人類。數據分析可以幫助人們做出預測和提前判斷,以便采取適當行動解決問題。
數據分析的目的是從海量數據或無規則數據集中把有價值的信息挖掘出來,把隱藏的信息提煉出來,并總結出所研究數據的內在規律,從而幫助用戶進行決策、預測和判斷。數據分析通常包括前期準備、數據爬取、數據預處理、數據分析、可視化繪圖及分析評估六個步驟,如圖1所示。
- 前期準備。在獲取數據之前,先要決定本次數據分析的目標,這些目標需要進行大量的數據收集和前期準備,判斷整個實驗是否能向著正確的方向前進。
- 數據爬取。讀者可以利用Python爬取所需的數據集,定義相關的特征,采用前文講述的爬蟲知識進行爬取。也可以針對常見的數據集進行簡單的數據分析。
- 數據預處理。如果想要提高數據質量,糾正錯誤數據或處理缺失值,就需要進行數據預處理操作,包括數據清洗、數據轉化、數據提取、數據計算等。注意,文本語料比較特殊,需要經過中文分詞、數據清洗、特征提取、權重計算,將文本內容轉換為向量的形式預處理操作,才能進行后面的數據分析。
- 數據分析。讀者根據所研究的內容,構建合理的算法模型,訓練模型并預測業務結構。數據科學家需要擁有良好的數學、機器學習、編程背景知識,常見數據分析的方法包括回歸分析、聚類分析、分類分析、關聯規則挖掘、主題模型等。
- 可視化繪圖。經過數據分析后的數據通常需要進行可視化繪圖操作,包括繪制散點圖、擬合圖形等,通過可視化操作讓用戶直觀的感受數據分析的結果。
- 分析評估。最后需要對模型實驗的結果進行評估,同時需要優化算法、優化結果,重復以前業務流程,從而更好利用數據的價值,造福整個社會。
Python數據分析的核心流程是什么?
下圖是數據分析的核心模型,主要劃分為訓練和預測兩部分內容。
- 訓練。輸入歷史數據進行訓練,得到分析模型。
- 預測。輸入新數據集,采用訓練得模型進行預測操作,并繪制相關圖形和評估結果。
選擇Python作為數據分析的編程語言,主要原因有以下四個方面:
- Python簡單易學,容易上手。不像其他語言需要掌握大量的數據結構和語法知識才能進行實例操作,并且Python可以通過極少的代碼實現一些數據分析案例,提升開發人員的學習興趣,破解新手的心理障礙。
- Python語言支持開源。豐富強大的第三方庫讓我們做數據分析更得心應手,科學計算、數據預處理、數據讀取、數據分析、數據可視化、深度學習等各個領域都有對應的庫支撐,并且各個庫可以相互調用,常見數據分析庫包括Numpy、Pandas、Matplotlib、Sklearn等。
- Python是一門腳本語言,可以進行快速開發。開發時間效率相對較高,比如第一部分介紹的Python數據爬取內容,通過Java代碼去實現,就需要大量的代碼,而Python的代碼量更小,寫代碼和學習效率更高。
- Python語言隨著深度學習、人工智能的浪潮,也在不斷變強、擁有更豐富的擴展包。而在學習深度學習知識之前,我們需要了解Python數據分析及機器學習的基礎知識。
同時,在開始Python數據分析之前,我們需要提到另一個與它緊密相關的概念,即數據挖掘。那它們之間究竟存在什么區別呢?
- 數據分析和數據挖掘的側重點不同,數據分析主要側重于通過對歷史數據進行統計分析,從而挖掘出深層次的價值,并將結果的有效信息呈現出來;
- 數據挖掘是從數據中發現知識規則,并對未知數據進行預測分析的過程。
- 數據分析和數據挖掘兩者是緊密關聯的,數據分析結果需要進一步數據挖掘才能指導決策,而數據挖掘進行價值評估過程也需要調整先驗約束而再次進行數據分析。但相同的地方是二者都需要有數據作為支撐,都需要掌握相關的統計學、計算科學、機器學習、可視化繪圖工具等知識,都需要挖掘出數據的價值供用戶、社會使用,提出正確的解決方案并進行預測決策,因此數據分析師和數據挖掘師并沒有明顯的界限。
二.常用庫
在使用Python做數據分析時,常常需要用到各種擴展包,常見的包括Numpy、Scipy、Pandas、Sklearn、Matplotlib、Networkx、Gensim等,如下所示。
- NumPy
提供數值計算的擴展包,擁有高效的處理函數和數值編程工具,用于數組、矩陣和矢量化等科學計算操作。很多擴展包都依賴于它。
- SciPy
SciPy是一個開源的數學、科學和工程計算包,提供矩陣支持,以及矩陣相關的數值計算模塊。它是一款方便、易于使用、專為科學和工程設計的Python工具包,包括統計、優化、整合、線性代數模塊、傅里葉變換、信號和圖像處理、常微分方程求解器等。
- Pandas
它是Python強大的數據分析和探索數據的工具包,旨在簡單直觀地處理“標記”和“關系”數據。它設計用于快速簡便的數據處理,聚合和可視化,支持類似于SQL語句的模型,支持時間序列分析,能夠靈活的處理分析數據。
- SKlearn
Scikit-Learn為常見的機器學習算法提供了一個簡潔而規范的分析流程,包含多種機器學習算法。該庫結合了高質量的代碼和良好的文檔,使用起來非常方便,并且代碼性能很好,其實就是用Python進行機器學習的行業標準。
- Matplotlib
它是Python強大的數據可視化工具、2D繪圖庫,可以輕松生成簡單而強大的可視化圖形,可以繪制散點圖、折線圖、餅狀圖等圖形。但其庫本身過于復雜,繪制的圖需要大量的調整才能變精致。
- Seaborn
Seaborn是由斯坦福大學提供的一個python繪圖庫,繪制的圖表更加賞心悅目,它更關注統計模型的可視化,如熱圖。Seaborn能理解Pandas的DataFrame類型,所以它們一起可以很好地工作。
- Networkx
NetworkX是一個用來創建、操作、研究復雜網絡結構、動態和功能的Python擴展包。NetworkX庫支持圖的快速創建,可以生成經典圖、隨機圖和綜合網絡,其節點和邊都能存儲數據、權重,是一個非常實用的、支持圖算法的復雜網絡庫。
- Gensim
Gensim是一個從非結構的文本中挖掘文檔語義結構的擴展包,它無監督地學習到文本隱層的主題向量表達。Gensim實現了潛在語義分析(LSA)、LDA模型、TF-IDF、Word2vec等在內的多種主題模型算法,并提供了諸如相似度計算等API接口。
- NLTK
NLTK是自然語言工具包(Natural Language Toolkit),用于符號和統計自然語言處理的常見任務。 旨在促進自然語言處理及其相關領域的教學和研究。常見功能包括文本標記、實體識別、提取詞干、語義推理等。
- Statsmodels
Statsmodels是一個包含統計模型、統計測試和統計數據挖掘的Python模塊,用戶通過它的各種統計模型估計方法來進行統計分析,包括線性回歸模型、廣義線性模型、時間序列分析模型、各種估計量等算法。
- TensorFlow
TensorFlow是一個開源的數據流圖計算庫,是Google公司2015年11月開源的第二代深度學習框架。它使用數據流圖進行數值分析,TensorFlow使用有向圖表示一個計算任務,圖的節點表示對數據的處理,圖的邊Flow描述數據的流向,tensor(意為張量)表示數據,它的多層節點系統可以在大型數據集上快速訓練人工神經網絡。其他常見的深度學習框架或庫是Theano、Keras。
接下來作者將對其中比較重要常用的四個擴展包(Numpy、Pandas、Matplotlib、Sklearn)進行簡單的介紹,這些包更多的實例應用將在后面章節實例中講解。
注意:本文數據分析部分推薦讀者使用Anaconda或PyCharm中的集成環境,它已經集成安裝了所使用的數據分析擴展包,安裝后可以直接調用。
三.Numpy
NumPy(Numeric Python)是Python提供的數值計算擴展包,擁有高效的處理函數和數值編程工具,專為進行嚴格的數字處理而產生,用于科學計算。比如:矩陣數據類型、線性代數、矢量處理等。這個庫的前身是1995年就開始開發的一個用于數組運算的庫,經過長時間的發展,基本成了絕大部分Python科學計算的基礎包,當然也包括提供給Python接口的深度學習框架。
由于Python沒有提供數組,列表(List)可以完成數組操作,但不是真正意義上的數組,當數據量增大時,其速度很慢,所以提供了Numpy擴展包完成數組操作,很多高級擴展包也依賴于它,比如Scipy、Matplotlib、Pandas等。
1.Array用法
Array是數組,它是Numpy庫中最基礎的數據結構,Numpy可以很方便地創建各種不同類型的多維數組,并且執行一些基礎操作。一維數組常見操作代碼如下所示。
#coding=utf-8 #By:Eastmount CSDN 2021-06-28#導入包并重命名np import numpy as np#定義一維數組 a = np.array([2, 0, 1, 5, 8, 3]) print('原始數據:', a)#輸出最大、最小值及形狀 print('最小值:', a.min()) print('最大值:', a.max()) print('形狀', a.shape)輸出如下所示:
代碼通過np.array定義了一個數組[2, 0, 1, 5, 8, 3],其中min計算最小值,max計算最大值,shape表示數組的形狀,因為是一維數組,故行為為6L(6個數字)。
同時,Numpy庫最重要的一個知識點是數組的切片操作。數據分析過程中,通常會對數據集進行劃分,比如將訓練集和測試集分割為“80%-20%”或“70%-30%”的比例,通常采用的方法就是切片。
#coding=utf-8 #By:Eastmount CSDN 2021-06-28#導入包并重命名np import numpy as np#定義一維數組 a = np.array([2, 0, 1, 5, 8, 3]) print('原始數據:', a)#輸出最大、最小值及形狀 print('最小值:', a.min()) print('最大值:', a.max()) print('形狀', a.shape)#數據切片 print('切片操作:') print(a[:-2]) print(a[-2:]) print(a[:1])輸出結果如下圖所示:
- a[:-2]表示從頭開始獲取,“-2”表示后面兩個值不取,結果:[2 0 1 5]。
- a[-2:]表示起始位置從后往前數兩個數字,獲取數字至結尾,即獲取最后兩個值[8 3]。
- a[:1]表示從頭開始獲取,獲取1個數字,即[2]。
下面輸出Array數組的類型,即numpy.ndarray,并調用sort()函數排序,代碼如下:
#coding=utf-8 #By:Eastmount CSDN 2021-06-28#導入包并重命名np import numpy as np#定義一維數組 a = np.array([2, 0, 1, 5, 8, 3]) print('原始數據:', a)#輸出最大、最小值及形狀 print('最小值:', a.min()) print('最大值:', a.max()) print('形狀', a.shape)#數據切片 print('切片操作:') print(a[:-2]) print(a[-2:]) print(a[:1])#排序 print(type(a)) a.sort() print('排序后:', a) # <type 'numpy.ndarray'> # 排序后: [0 1 2 3 5 8]輸出結果如下圖所示:
2.二維數組操作
Array定義二維數組如[[1,2,3],[4,5,6]],下圖表示二維數組的常見操作,定義了數組6*6的矩陣。
- a[0, 3:5]表示獲取第1行,第4和5列的兩個值,即[3, 4]。注意數組下標a[0]表示獲取第一個值,同樣,a[3]是獲取第4個值。
- a[4:, 4:]表示從第5行開始,獲取后面所有行,同時列也是從第5列開始,獲取到后面所有列的數據,輸出結果為[[44,45],[54,55]]。
- a[2::2,::2]表示從第3行開始獲取,每次空一行,則獲取第3、5行數據,列從頭開始獲取,也是各一列獲取一個值,則獲取第1、3、5列,結果為:[[20,22,24],[40,42,44]]。
基礎代碼如下:
#coding=utf-8 #By:Eastmount CSDN 2021-06-28#定義二維數組 import numpy as np c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])print('形狀:', c.shape) print('獲取值:', c[1][0]) print('獲取某行:') print(c[1][:]) print('獲取某行并切片:') print(c[0][:-1]) print(c[0][-1:])輸出結果如下:
獲取某個值c[1][0],其結果為第2行,第一列,即為4;獲取某一行的所有值,則為c[1][:],其結果為[4,5,6,7];獲取某行并進行切片操作,c[0][:-1]獲取第一行,從第一列到倒數第一列,結果為[1,2,3];c[0][-1:]獲取第一行,從倒數第一列到結束,即為4。
同時如果想獲取矩陣中的某一列數據怎么實現呢?因為在進行數據分析時,通常需要獲取某一列特征進行分析,或者作為可視化繪圖的x或y軸數據。
[[1, 2, 3, 4],[4, 5, 6, 7],[7, 8, 9,10]]比如需要獲取第3列數據[3, 6, 9],代碼如下:
#獲取具體某列值 print('獲取第3列:') print(c[:,np.newaxis, 2]) # 獲取第3列: # [[3] # [6] # [9]]其他操作,包括調用函數,定義數組等。
#coding=utf-8 #By:Eastmount CSDN 2021-06-28 import numpy as np #調用sin函數和2的3次方 print(np.sin(np.pi/6)) print(type(np.sin(0.5))) f = np.power(2, 3) print(f)#范圍定義 print(np.arange(0,4)) print(type(np.arange(0,4)))#調用求和函數、平均值函數、標準差函數 print(np.sum([1, 2, 3, 4])) print(np.mean([4, 5, 6, 7])) print(np.std([1, 2, 3, 2, 1, 3, 2, 0]))輸出如下所示:
0.49999999999999994 <class 'numpy.float64'> 8 [0 1 2 3] <class 'numpy.ndarray'> 10 5.5 0.9682458365518543同時,Numpy擴展包的線性代數模塊(Linalg)和隨機模塊(Random)也是非常重要的模塊,后續的數據分析主要利用數組和矩陣進行,也推薦讀者自行閱讀了解。
3.NumPy思維導圖
熟悉作者的讀者都知道,2021年初我和CSDN許老師完成了一份《Python成長路線圖》,這里也給出NumPy的思維導圖。許老師是非常謙遜又有才華的前輩,值得我們每個人學習。很愉快的一次合作,同時感謝CSDN和周老師,也歡迎大家繼續補充和指正,后續文章會詳細介紹NumPy應用。
- https://codechina.gitcode.host/developer-roadmap/python/intro/
-
科學計算基礎軟件包NumPy
NumPy概述、安裝配置、創建數組、操作數組、常用函數、掩碼數組、矩陣對象、隨機抽樣子模塊 -
NumPy概述
NumPy的前世今生、NumPy數組 vs Python列表、NumPy數組類型和屬性、維軸秩、廣播和矢量化 -
安裝配置
-
創建數組
- 操作數組
索引、切片、改變數組結構、合并和拆分、復制、排序、查找、篩選、數組IO
- 常用函數
np.nan和np.inf、函數命名空間、數學函數、統計函數、插值函數、多項式擬合函數、自定義廣播函數
- 掩碼數組
創建掩碼數組、訪問掩碼數組
- 矩陣對象
創建矩陣、矩陣特有屬性、矩陣乘法
- 隨機抽樣子模塊
隨機數、隨機抽樣、正態分布、偽隨機數的深度思考
四.Pandas
Pandas是面板數據(Panel Data)的簡寫。它是Python最強大的數據分析和探索工具之一,因金融數據分析工具而開發,支持類似于SQL語句的模型,可以對數據進行增刪改查等操作,支持時間序列分析,也能夠靈活的處理缺失的數據。首先聲明該擴展包的功能非常強大,作者只是講述了它的基礎部分內容,后面隨著學習深入會講述更多它的用法,同時也建議讀者自行學習。下一篇文章將詳細介紹Pandas可視化繪圖方法。
1.基礎用法
Pandas可以進行統計特征函數計算,包括均值、方差、標準差、分位數、相關系數和協方差等,這些統計特征能反映出數據的整體分布。
- sum():該函數用于計算數據樣本的總和
- mean():該函數用于計算數據樣本的算數平均值
- std():該函數用于計算數據樣本的標準差
- Cov():該函數用于計算數據樣本的協方差矩陣
- var():該函數用于計算數據樣本的方差
- describe():該函數用于描述數據樣本的基本情況,包括均值、標準差等
Pandas最重要的是Series和DataFrame子類,其導入方法如下:
from pandas import Series, DataFrame import pandas as pd下面從讀寫文件、Series和DataFrame的用法分別講解,其中利用Pandas讀寫CSV、Excel文件是數據分析非常重要的基礎手段。
2.讀寫文件
讀寫文件常用的方法如下,包括讀寫Excel文件、CSV文件和HDF5文件等。
#將數據寫入excel文件,文件名為foo.xlsx df.to_excel('foo.xlsx', sheet_name='Sheet1') #從excel文件中讀取數據 pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA']) #將數據寫入csv文件,文件名為foo.csv df.to_csv('foo.csv') #從csv文件中讀取數據 pd.read_csv('foo.csv') #將數據寫入HDF5文件存儲 df.to_hdf('foo.h5','df') #從HDF5存儲中讀取數據 pd.read_hdf('foo.h5','df')下面通過一個具體的實例數據來講解Pandas的用法,數據集共包含3列數據,分別是用戶A、用戶B、用戶C的消費數據,共10行,對應十天的消費情況,并且包含缺失值。
Pandas讀取數據的簡易代碼如下:
#coding=utf-8 #By:Eastmount CSDN 2021-06-28 import pandas as pd#讀取數據,其中參數header設置Excel無標題頭 data = pd.read_excel("data.xls", header=None) print(data)#計算數據長度 print('行數', len(data))#計算用戶A\B\C消費求和 print(data.sum())#計算用戶A\B\C消費算術平均數 mm = data.sum() print(mm)#輸出預覽前5行數據 print('預覽前5行數據') print(data.head())調用Pandas擴展包的read_excel()函數讀取“test15.xls”表格文件,參數Header=None表示不讀取標題頭,然后輸出data數據。data.sum()表示對三個用戶的消費數據求和,data.head()表示預覽輸出前5行數據。輸出數據如下,NaN表示空值(Not a Number)。
同時,Pandas提供了describe()函數輸出數據的基本信息,包括count()、mean()、std()、min()、max()等函數。
#輸出數據基本統計量 print('輸出數據基本統計量') print(data.describe())輸出數據基本統計量0 1 2 3 count 10.00000 9.000000 9.000000 8.000000 mean 5.50000 237.167778 335.235556 493.886875 std 3.02765 1.021161 65.198685 28.565643 min 1.00000 235.830000 206.430000 435.350000 25% 3.25000 236.270000 324.030000 484.147500 50% 5.50000 237.410000 328.080000 501.282500 75% 7.75000 238.030000 388.020000 515.645000 max 10.00000 238.650000 404.040000 517.090000 >>>更多Pandas可視化畫圖操作參考下一篇文章。
3.Series
Series是一維標記數組,可以存儲任意數據類型,包括整型、字符串、浮點型和Python對象等,軸標一般指索引。
首先,通過傳遞一個List對象來創建一個Series,其默認創建整型索引。
#coding=utf-8 #By:Eastmount CSDN 2021-06-28 from pandas import Series, DataFramea = Series([4, 7, -5, 3]) print('創建Series:') print(a)輸出如下,默認為0-4的整型索引。
創建Series: 0 4 1 7 2 -5 3 3 dtype: int64然后,創建一個帶有索引的Series,從而確定每個數據點的Series。Series的一個重要功能是在算術運算中它會自動對齊不同索引的數據。
b = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c']) print('創建帶有索引的Series:') print(b)輸出如下所示:
創建帶有索引的Series: d 4 b 7 a -5 c 3 dtype: int64如果你有一些數據在一個Python字典中,你可以通過傳遞字典來創建一個Series。
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} c = Series(sdata) print('通過傳遞字典創建Series:') print(c) states = ['California', 'Ohio', 'Oregon', 'Texas'] d = Series(sdata, index=states) print('California沒有字典為空:') print(d)輸出數據如下:
通過傳遞字典創建Series: Ohio 35000 Oregon 16000 Texas 71000 Utah 5000 dtype: int64 California沒有字典為空: California NaN Ohio 35000.0 Oregon 16000.0 Texas 71000.0 dtype: float64注意:Series、Numpy中的一維數組(Array)和Python基礎數據結構List的區別是:List中的元素可以是不同的數據類型,而Array和Series中則只允許存儲相同的數據類型,這樣可以更有效的使用內存,提高運算效率。
4.DataFrame
DataFrame是二維標記數據結構,列可以是不同的數據類型。它是常用的Pandas對象,和Series一樣可以接收多種輸入,包括Lists、Dicts、Series和DataFrame等。初始化對象時,除了數據還可以傳index和columns這兩個參數。
下面簡單講解DataFrame常用的三種使用方法。
- (1)在Pandas中用函數 isnull 和 notnull 來檢測數據丟失,如pd.isnull(a)、pd.notnull(b)。Series也提供了這些函數的實例方法,如a.isnull()。
- (2)Pandas提供了大量的方法能夠輕松的對Series,DataFrame和Panel對象進行各種符合各種邏輯關系的合并操作。如:Concat、Merge(類似于SQL類型的合并)、Append (將一行連接到一個DataFrame上)。
- (3)DataFrame中常常會出現重復行,DataFrame提供的Duplicated方法返回一個布爾型Series,表示各行是否是重復行;還有一個drop_duplicated方法,它返回一個移除了重復行的DataFrame。
總之,Pandas是非常強大的一個數據分析包,很多功能都需要我們自己去慢慢摸索。
5.Pandas思維導圖
-
結構化數據分析工具Pandas
Pandas概覽、數據結構、基本操作、高級應用 -
Pandas概述
Pandas的特點、安裝和使用
- 數據結構
索引數組index、帶標簽的一維同構數組Series、帶標簽的二維異構表格DataFrame
- 基本操作
數據預覽、數據選擇、改變數據結構、改變數據類型、廣播與矢量化運算、行列級廣播函數
- 高級應用
分組、聚合、層次化索引、表級廣播函數、日期時間索引對象、透視表、數據可視化、數據IO
五.Matplotlib
Matplotlib是Python強大的數據可視化工具、2D繪圖庫(2D plotting library),可以方便的創建海量類型的2D圖表和一些基本的3D圖表,類似于MATLAB和R語言。Matplotlib提供了一整套和Matlab相似的命令API,十分適合交互式地進行制圖,而且也可以方便地將它作為繪圖控件,嵌入GUI應用程序中。
Matplotlib是一名神經生物學家John D. Hunter博士于2007年創建,函數設計上參考了Matlab,現在在Python的各個科學計算領域都得到了廣泛應用。Matplotlib官網地址為:
- http://matplotlib.org/
1.基礎用法
Matplotlib作圖庫常用的函數如下:
- Plot():用于繪制二維圖、折線圖,其格式為plt.plot(X,Y,S)。其中X為橫軸,Y為縱軸,參數S為指定繪圖的類型、樣式和顏色,詳見表15.3所示。
- Pie():用于繪制餅狀圖(Pie Plot)。
- Bar():用于繪制條形圖(Bar Plot)。
- Hist():用于繪制二維條形直方圖。
- Scatter():用于繪制散點圖。
下表繪圖常見樣式和顏色。
舉例如下,該代碼表示繪制散點圖(Scatter),橫軸為x,縱軸為y,c=y_pred對聚類的預測結果畫出散點圖,marker='o’表示用圓圈(Circle)繪圖,s表示設置尺寸大小(Size)。
plt.scatter(x, y, c=y_pred, marker='o', s=200)2.繪圖簡單示例
下列代碼是調用Matplotlib繪制柱狀圖的源代碼,該代碼結合Pandas擴展包讀取前文表15.2的用戶消費數據,分別是用戶A、用戶B、用戶C十天的消費數據。
Matplotlib繪圖主要包括以下幾個步驟:
- 導入Matplotlib擴展包及其子類。
- 設置繪圖的數據及參數,數據通常是經過Sklearn機器學習包分析后的結果。
- 調用Matplotlib.pyplot子類的Plot()、Pie()、Bar()、Hist()、Scatter()等函數進行繪圖。
- 設置繪圖的X軸坐標、Y軸坐標、標題、網格線、圖例等內容。
- 最后調用show()函數顯示已繪制的圖形。
示例完整代碼如下:
#coding=utf-8 #By:Eastmount CSDN 2021-06-28 import pandas as pd import numpy as np import matplotlib.pyplot as pltdata = pd.read_csv("data.csv", header=None) print(data) mm = data.sum() #求和 print(mm[1:]) #第一列為序號,取后面三列值ind = np.arange(3) #3個用戶 0 1 2 width = 0.35 #設置寬度 x = [u'用戶A', u'用戶B', u'用戶C'] plt.rc('font', family='SimHei', size=13) #中文字體顯示 #繪圖 plt.bar(ind, mm[1:], width, color='r', label='sum num') plt.xlabel(u"用戶") plt.ylabel(u"消費數據") plt.title(u"用戶消費數據對比柱狀圖") plt.legend() #設置底部名稱 plt.xticks(ind+width/2, x, rotation=40) #旋轉40度 plt.show()下面詳細講解這部分的核心代碼:
-
data = pd.read_csv(“data.csv”, header=None)
調用Pandas擴展包的read_cvs()讀取test15_03.csv文件,將數據存儲至data變量中。 -
mm = data.sum()
然后調用data.sum()函數求和,返回值為[55, 2134.510, 3017.120, 3951.095],對應三個用戶的消費金額總額,第一列為十行數據序號求和。 -
import matplotlib.pyplot as plt
導入matplotlib.pyplot擴展包,pyplot是用來畫圖的方法,重命名為plt變量方便調用,比如顯示圖形時調用plt.show()函數即可,而不用調用matplotlib.pyplot.show()函數。 -
plt.bar(ind, mm[1:], width, color=‘r’, label=‘sum num’)
plt.bar()函數用于繪制條形圖(Bar Plot)。參數ind值為[0,1,2],表示三個用戶的序號;mm[1:]對應柱狀圖的高度,其值獲取三個用戶消費額總和(從第2個值開始獲取);width表示柱狀圖之間間隔,即0.35;color表示設置柱狀圖的顏色,r表示紅色;label是設置右上角的圖形標注,自定義賦值為“sum num”。 -
plt.title(“用戶消費數據對比柱狀圖”)
設置繪制圖形的標題為“用戶消費數據對比柱狀圖”。 -
plt.xlabel(“用戶”)
表示繪制圖形的X軸坐標標題,即為“用戶”。 -
plt.ylabel(“消費數據”)
表示繪制圖形的Y軸坐標標題,即為“消費數據”。 -
plt.legend()
表示設置右腳上的圖例。 -
plt.grid()
表示繪制圖形的背景網格線顯示。 -
plt.show()
表示調用pyplot.show()將填充數據的圖形顯示出來。
輸出如圖所示:
注意:Matplotlib圖顯示中文通常為亂碼,如果想在圖表中能夠顯示中文字符和負號等,則需要增加下面這段代碼進行設置。
import matplotlib.pyplot as plt plt.rcParams['font.sas-serig']=['SimHei'] #用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號3.Matplotlib思維導圖
-
繪圖庫Matplotlib
安裝配置、Matplotlib快速入門、圖形繪制、風格和樣式、Matplotlib擴展 -
Matplotlib快速入門
畫布、子圖與子圖布局、坐標軸與刻度的名稱、圖例和文本標注、顯示和保存
- 圖形繪制
曲線圖、散點圖、直方圖、餅圖、箱線圖、繪制圖像、極坐標繪圖
- 風格和樣式
畫布設置、子圖布局、顏色、線條和點的樣式、坐標軸、刻度、文本、圖例、網格設置
- Matplotlib擴展
使用BaseMap繪制地圖、3D繪圖工具包
六.Scikit-Learn
1.基礎介紹
學習Python數據分析或機器學習,你就不得不知道Scikit-Learn擴展包。它是用于Python數據挖掘和數據分析的經典、實用擴展包,通常縮寫為Sklearn。Scikit-Learn中的機器學習模型是非常豐富的,包括線性回歸、決策樹、SVM、KMeans、KNN、PCA等等,用戶可以根據具體分析問題的類型選擇該擴展包的合適模型,從而進行數據分析。
本系列后續數據分析的絕大部分內容都是基于該擴展包的,同時推薦大家學習官網的模型用法和實例文檔。
Scikit-learn的基本功能主要被分為六個部分:
- 回歸(Regression)
- 分類(Classification)
- 聚類(Clustering)
- 數據降維(Dimensionality Reduction)
- 模型選擇(Model Selection)
- 數據預處理(Preprocessing)
例如下面代碼對數據x、y數組進行簡單聚類分析,代碼如下:
#coding=utf-8 #By:Eastmount CSDN 2021-06-28 from sklearn.cluster import KMeansX = [[1],[2],[3],[4],[5]] y = [4,2,6,1,3] clf = KMeans(n_clusters=2) clf.fit(X,y) print(clf) print(clf.labels_)調用Sklearn.cluster聚類包中KMeans()函數進行聚類,并且類簇數設置為2,即n_clusters=2。輸出如下類標簽為:[1 1 0 0 0],表示前2個點(1, 4)、(2, 2)為第1類,后三個點(3, 6)、(4, 1)、(5, 3)為第0類。更多聚類知識見后面文章。
2.Sklearn思維導圖
-
機器學習工具包Scikit-learn
Scikit-learn概覽、安裝配置、數據集、數據預處理(Preprocessing)、分類(Classification)、回歸(Regression)、聚類(Clustering)、成分分解與降維、模型評估與參數調優 -
數據集
Sklearn自帶的數據集、樣本生成器、加載其他數據集
- 數據預處理
標準化、歸一化、正則化、離散化、特征編碼、缺失值補全
- 分類
K近鄰分類、貝葉斯分類、決策樹分類、SVM分類、隨機森林分類、集成學習(Bagging/Boosting)、神經網絡模型
- 回歸
線性回歸、Lasso回歸、支持向量機回歸、K近鄰回歸、決策樹回歸、隨機森林回歸、邏輯回歸
- 聚類
K-Means聚類、均值漂移聚類、基于密度的空間聚類、譜聚類、層次聚類
- 成分分解與降維
主成分分析、因子分析、截斷奇異值分解、ICA
- 模型評估與參數調優
估計器得分、交叉驗證、評價指標、參數調優、模型持久化
七.本章小結
Python被廣泛應用于數據分析或人工智能等領域,一部分原因就是因為其支持開源,擁有強大的第三方擴展包,比如Numpy、Scipy、Pandas、Matplotlib、Gensim、Statsmodels、Scikit-learn、Tensorflow等。本系列常用的數據分析包中,NumPy包用于數值計算;Scipy包用于數學、矩陣、科學和工程包計算;Pandas包用于數據分析和數據探索、可視化處理;Matplotlib包用于數據可視化、常用2D繪圖領域;Sklearn包擁有眾多的機器學習和數據分析算法。希望讀者能認真學習本文講解的各擴展包案例,后續文章也將圍繞這些擴展包走進數據分析的世界。
該系列所有代碼下載地址:
- https://github.com/eastmountyxz/Python-zero2one
感謝在求學路上的同行者,不負遇見,勿忘初心。這周的留言感慨~
(By:娜璋之家 Eastmount 2021-06-28 夜于武漢 https://blog.csdn.net/Eastmount )
參考文獻:
- [1] 楊秀璋. 專欄:知識圖譜、web數據挖掘及NLP - CSDN博客[EB/OL]. (2016-09-19)[2017-11-07]. http://blog.csdn.net/column/details/eastmount-kgdmnlp.html.
- [2] matplotlib. Matplotlib官網[EB/OL]. (2002-2017)[2017-11-10]. http://matplotlib.org.
- [3] scikit-learn. Scikit-Learn官網[EB/OL]. (2017)[2017-11-10].http://scikit-learn.org/
stable/. - [4] pandas. Pandas官網[EB/OL]. (2017)[2017-11-10]. http://pandas.pydata.org/.
- [5] 楊秀璋.[Python數據挖掘課程] 一.安裝Python及爬蟲入門介紹 - CSDN博客[EB/OL].(2016-09-19)[2017-11-15]. http://blog.csdn.net/eastmount/article/details/52577215.
- [6] 楊秀璋.[Python數據挖掘課程] 六.Numpy、Pandas和Matplotlib包基礎知識[EB/OL] . (2016-11-14)[2017-11-15]. http://blog.csdn.net/eastmount/article/details/53144633.
- [7] 達聞西. 給深度學習入門者的Python快速教程 - numpy和Matplotlib篇[EB/OL]. (2017)[2017-11-14]. https://zhuanlan.zhihu.com/p/24309547.
- [8] 張良均,王路,譚立云,蘇劍林. Python數據分析與挖掘實戰[M]. 北京:機械工業出版社,2016.
- [9] (美)Wes McKinney著. 唐學韜等譯. 利用Python進行數據分析[M]. 北京:機械工業出版社,2013.
總結
以上是生活随笔為你收集整理的[Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [系统安全] 三十一.恶意代码检测(1)
- 下一篇: [Python从零到壹] 十二.机器学习