基于Python數(shù)據(jù)分析之pandas統(tǒng)計(jì)分析
pandas模塊為我們提供了非常多的描述性統(tǒng)計(jì)分析的指標(biāo)函數(shù),如總和、均值、最小值、最大值等,我們來具體看看這些函數(shù):
1、隨機(jī)生成三組數(shù)據(jù)
import numpy as np import pandas as pd np.random.seed(1234) d1 = pd.Series(2*np.random.normal(size = 100)+3) d2 = np.random.f(2,4,size = 100) d3 = np.random.randint(1,100,size = 100)
2、統(tǒng)計(jì)分析用到的函數(shù)
d1.count() #非空元素計(jì)算 d1.min() #最小值 d1.max() #最大值 d1.idxmin() #最小值的位置,類似于R中的which.min函數(shù) d1.idxmax() #最大值的位置,類似于R中的which.max函數(shù) d1.quantile(0.1) #10%分位數(shù) d1.sum() #求和 d1.mean() #均值 d1.median() #中位數(shù) d1.mode() #眾數(shù) d1.var() #方差 d1.std() #標(biāo)準(zhǔn)差 d1.mad() #平均絕對(duì)偏差 d1.skew() #偏度 d1.kurt() #峰度 d1.describe() #一次性輸出多個(gè)描述性統(tǒng)計(jì)指標(biāo)
必須注意的是,descirbe方法只能針對(duì)序列或數(shù)據(jù)框,一維數(shù)組是沒有這個(gè)方法的
自定義一個(gè)函數(shù),將這些統(tǒng)計(jì)指標(biāo)匯總在一起:
def status(x) : return pd.Series([x.count(),x.min(),x.idxmin(),x.quantile(.25),x.median(), x.quantile(.75),x.mean(),x.max(),x.idxmax(),x.mad(),x.var(), x.std(),x.skew(),x.kurt()],index=['總數(shù)','最小值','最小值位置','25%分位數(shù)', '中位數(shù)','75%分位數(shù)','均值','最大值','最大值位數(shù)','平均絕對(duì)偏差','方差','標(biāo)準(zhǔn)差','偏度','峰度'])
執(zhí)行該函數(shù),查看一下d1數(shù)據(jù)集的這些統(tǒng)計(jì)函數(shù)值:
df = pd.DataFrame(status(d1))
df
結(jié)果:
在實(shí)際的工作中,我們可能需要處理的是一系列的數(shù)值型數(shù)據(jù)框,如何將這個(gè)函數(shù)應(yīng)用到數(shù)據(jù)框中的每一列呢?可以使用apply函數(shù),這個(gè)非常類似于R中的apply的應(yīng)用方法。
將之前創(chuàng)建的d1,d2,d3數(shù)據(jù)構(gòu)建數(shù)據(jù)框:
df = pd.DataFrame(np.array([d1,d2,d3]).T, columns=['x1','x2','x3']) df.head() df.apply(status)
結(jié)果:
3、加載CSV數(shù)據(jù)
import numpy as np import pandas as pd bank = pd.read_csv("D://bank/bank-additional-train.csv") bank.head() #查看前5行
描述性統(tǒng)計(jì)1:describe()
result = bank['age'].describe()
pd.DataFrame(result ) #格式化成DataFrame
描述性統(tǒng)計(jì)2:describe(include=[‘number'])
include中填寫的是數(shù)據(jù)類型,若想查看所有數(shù)據(jù)的統(tǒng)計(jì)數(shù)據(jù),則可填寫object,即include=['object'];若想查看float類型的數(shù)據(jù),則為include=['float']。
result = bank.describe(include=['object'])
含義:
count:指定字段的非空總數(shù)。
unique:該字段中保存的值類型數(shù)量,比如性別列保存了男、女兩種值,則unique值則為2。
top:數(shù)量最多的值。
freq:數(shù)量最多的值的總數(shù)。
bank.describe(include=['number'])
連續(xù)變量的相關(guān)系數(shù)(corr)
bank.corr()
協(xié)方差矩陣(cov)
bank.cov()
刪除列
bank.drop('job', axis=1) #刪除年齡列,axis=1必不可少
排序
bank.sort_values(by=['job','age']) #根據(jù)工作、年齡升序排序
bank.sort_values(by=['job','age'], ascending=False) #根據(jù)工作、年齡降序排序
多表連接
準(zhǔn)備數(shù)據(jù):
import numpy as np import pandas as pd student = {'Name':['Bob','Alice','Carol','Henry','Judy','Robert','William'], 'Age':[12,16,13,11,14,15,24], 'Sex':['M','F','M','M','F','M','F']} score = {'Name':['Bob','Alice','Carol','Henry','William'], 'Score':[75,35,87,86,57]} df_student = pd.DataFrame(student) df_student df_score = pd.DataFrame(score) df_score
student:
score:
內(nèi)連接
stu_score1 = pd.merge(df_student, df_score, on='Name')
stu_score1
注意,默認(rèn)情況下,merge函數(shù)實(shí)現(xiàn)的是兩個(gè)表之間的內(nèi)連接,即返回兩張表中共同部分的數(shù)據(jù)。可以通過how參數(shù)設(shè)置連接的方式,left為左連接;right為右連接;outer為外連接。
左連接
stu_score2 = pd.merge(df_student, df_score, on='Name',how='left')
stu_score2
左連接中,沒有Score的學(xué)生Score為NaN
缺失值處理
現(xiàn)實(shí)生活中的數(shù)據(jù)是非常雜亂的,其中缺失值也是非常常見的,對(duì)于缺失值的存在可能會(huì)影響到后期的數(shù)據(jù)分析或挖掘工作,那么我們?cè)撊绾翁幚磉@些缺失值呢?常用的有三大類方法,即刪除法、填補(bǔ)法和插值法。
刪除法
當(dāng)數(shù)據(jù)中的某個(gè)變量大部分值都是缺失值,可以考慮刪除改變量;當(dāng)缺失值是隨機(jī)分布的,且缺失的數(shù)量并不是很多是,也可以刪除這些缺失的觀測(cè)。
替補(bǔ)法
對(duì)于連續(xù)型變量,如果變量的分布近似或就是正態(tài)分布的話,可以用均值替代那些缺失值;如果變量是有偏的,可以使用中位數(shù)來代替那些缺失值;對(duì)于離散型變量,我們一般用眾數(shù)去替換那些存在缺失的觀測(cè)。
插補(bǔ)法
插補(bǔ)法是基于蒙特卡洛模擬法,結(jié)合線性模型、廣義線性模型、決策樹等方法計(jì)算出來的預(yù)測(cè)值替換缺失值。
此處測(cè)試使用上面學(xué)生成績(jī)數(shù)據(jù)進(jìn)行處理
查詢某一字段數(shù)據(jù)為空的數(shù)量
sum(pd.isnull(stu_score2['Score']))
結(jié)果:2
直接刪除缺失值
stu_score2.dropna()
刪除前:
刪除后:
默認(rèn)情況下,dropna會(huì)刪除任何含有缺失值的行
刪除所有行為缺失值的數(shù)據(jù)
import numpy as np import pandas as pd df = pd.DataFrame([[1,2,3],[3,4,np.nan], [12,23,43],[55,np.nan,10], [np.nan,np.nan,np.nan],[np.nan,1,2]], columns=['a1','a2','a3'])
df.dropna() #該操作會(huì)刪除所有有缺失值的行數(shù)據(jù)
df.dropna(how='all') #該操作僅會(huì)刪除所有列均為缺失值的行數(shù)據(jù)
填充數(shù)據(jù)
使用一個(gè)常量來填補(bǔ)缺失值,可以使用fillna函數(shù)實(shí)現(xiàn)簡(jiǎn)單的填補(bǔ)工作:
1、用0填補(bǔ)所有缺失值
df.fillna(0)
2、采用前項(xiàng)填充或后向填充
df.fillna(method='ffill') #用前一個(gè)值填充
df.fillna(method='bfill') #用后一個(gè)值填充
3、使用常量填充不同的列
df.fillna({'a1':100,'a2':200,'a3':300})
4、用均值或中位數(shù)填充各自的列
a1_median = df['a1'].median() #計(jì)算a1列的中位數(shù) a1_median=7.5 a2_mean = df['a2'].mean() #計(jì)算a2列的均值 a2_mean = 7.5 a3_mean = df['a3'].mean() #計(jì)算a3列的均值 a3_mean = 14.5 df.fillna({'a1':a1_median,'a2':a2_mean,'a3':a3_mean}) #填充值
很顯然,在使用填充法時(shí),相對(duì)于常數(shù)填充或前項(xiàng)、后項(xiàng)填充,使用各列的眾數(shù)、均值或中位數(shù)填充要更加合理一點(diǎn),這也是工作中常用的一個(gè)快捷手段。
數(shù)據(jù)打亂(shuffle)
實(shí)際工作中,經(jīng)常會(huì)碰到多個(gè)DataFrame合并后希望將數(shù)據(jù)進(jìn)行打亂。在pandas中有sample函數(shù)可以實(shí)現(xiàn)這個(gè)操作。
df = df.sample(frac=1)
這樣對(duì)可以對(duì)df進(jìn)行shuffle。其中參數(shù)frac是要返回的比例,比如df中有10行數(shù)據(jù),我只想返回其中的30%,那么frac=0.3。
有時(shí)候,我們可能需要打混后數(shù)據(jù)集的index(索引)還是按照正常的排序。我們只需要這樣操作
df = df.sample(frac=1).reset_index(drop=True)
以上這篇基于Python數(shù)據(jù)分析之pandas統(tǒng)計(jì)分析就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python Pandas數(shù)據(jù)分析之iloc和loc的用法詳解
- Python數(shù)據(jù)分析:手把手教你用Pandas生成可視化圖表的教程
- Python數(shù)據(jù)分析Pandas?Dataframe排序操作
- Python數(shù)據(jù)分析模塊pandas用法詳解
- Python數(shù)據(jù)分析庫(kù)pandas高級(jí)接口dt的使用詳解
- Python數(shù)據(jù)分析之pandas比較操作
- Python數(shù)據(jù)分析庫(kù)pandas基本操作方法
- Python數(shù)據(jù)分析之如何利用pandas查詢數(shù)據(jù)示例代碼
- Python數(shù)據(jù)分析pandas模塊用法實(shí)例詳解
- Python?第三方庫(kù)?Pandas?數(shù)據(jù)分析教程
相關(guān)文章
將tensorflow.Variable中的某些元素取出組成一個(gè)新的矩陣示例
今天小編就為大家分享一篇將tensorflow.Variable中的某些元素取出組成一個(gè)新的矩陣示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python基于DFA算法實(shí)現(xiàn)內(nèi)容敏感詞過濾
DFA?算法是通過提前構(gòu)造出一個(gè)?樹狀查找結(jié)構(gòu),之后根據(jù)輸入在該樹狀結(jié)構(gòu)中就可以進(jìn)行非常高效的查找。本文將利用改算法實(shí)現(xiàn)敏感詞過濾,需要的可以參考一下2022-04-04Python confluent kafka客戶端配置kerberos認(rèn)證流程詳解
這篇文章主要介紹了Python confluent kafka客戶端配置kerberos認(rèn)證流程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Python使用pymysql模塊操作mysql增刪改查實(shí)例分析
這篇文章主要介紹了Python使用pymsql模塊操作mysql增刪改查,結(jié)合實(shí)例形式分析了Python使用pymsql模塊針對(duì)mysql進(jìn)行增刪改查操作的相關(guān)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2019-12-12python目標(biāo)檢測(cè)yolo2詳解及預(yù)測(cè)代碼復(fù)現(xiàn)
這篇文章主要為大家介紹了python目標(biāo)檢測(cè)yolo2詳解及其預(yù)測(cè)代碼復(fù)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05