日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【Python數(shù)據(jù)分析】第二篇

 highoo 2019-03-20

分組計算:

  Group By : split – apply – combine

    split: 很具某些條件對數(shù)據(jù)進(jìn)行分組

    apply:對每一個group獨(dú)立的應(yīng)用函數(shù)

    combine:將結(jié)果數(shù)據(jù)組合到某種數(shù)據(jù)結(jié)構(gòu)中

1
2
3
4
5
pokemon = pd.read_csv('Pokemon.csv')    #讀文件
pokemon['Type 1'].value_counts()   
# 分組 groupby
grouped1 = pokemon.groupby('Type 1')

計算:

1.求平均 .mean()

1
grouped1.mean()

2.單個求平均 

1
grouped1['HP'].mean()

3.求和

1
grouped1.sum()

4.求中位數(shù)

1
grouped1.median()

 

分組:方法二:多個

1
grouped2 = pokemon.groupby(['Type 1', 'Type 2'])

計算中,應(yīng)用多個函數(shù)

1
grouped2.aggregate(np.mean)

1
grouped2.aggregate([np.mean,np.median])

針對不同的列:

1
grouped2.aggregate([np.mean,np.median,np.sum])['HP']

不同的列:用不同函數(shù)

1
2
3
grouped2.agg({'HP':np.mean,'Attack':np.median})
grouped2.agg({'HP':np.mean,'Attack':[np.median,np.sum]})

 

查看大小:

1
grouped2.size()

 

查看具體分組:

1
grouped2.groups

 

獲得某一組:

1
grouped2.get_group(('Normal', 'Ground'))    #填寫元組

  

計算每個組大小:

1
2
3
for name,group in grouped2:
    print(name)
    print(group.shape)

 

對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化:(防止數(shù)值過大)

  數(shù)值型: 該列,每一個減去平均數(shù) 除以 該列標(biāo)準(zhǔn)差

1
2
3
zscore = lambda s : ( s - s.mean() ) / s.std()
grouped1.transform(zscore)

 

過濾:

  某些組別樣本數(shù)過大!,需要剔除

1
2
3
4
5
# 假設(shè)要求每個組別樣本小于10
cond1 = lambda s : len(s)<10
grouped2.filter(cond1).shape

 

前情:設(shè)置索引:

1
pok1 = pokemon.set_index(['Type 1', 'Type 2'])

 

按索引進(jìn)行分組:

1
2
3
4
pok1.groupby(level=[0])
pok1.groupby(level=[0,1])
pok1.groupby(level=['Type 1', 'Type 2'])

 

多表操作:

View Code

數(shù)據(jù)表操作:組合

1
pd.concat([df1,df2])

1
pd.concat([df1,df2],axis=1# axis  =1 設(shè)置軸根據(jù)索引組合   =0按列名

類似方法

1
df1.append(df2)  # append只能填一個參數(shù)!

 

主角,主鍵講解:

View Code
1
2
3
4
5
# how 組合方式      默認(rèn)inner     outer = 相等連接
# on = 左右兩邊 用什么key連接
# 根據(jù)key1 設(shè)置join組合
pd.merge(left,right,on='key1',how='inner')

1
pd.merge(left,right,on=['key1','key2'])

1
pd.merge(left,right,on=['key1','key2'],how='left')

 

重命名:

1
right1 = right.rename(columns={'key1':'new_key1','key2':'new_key2'})

 

主鍵名字不一樣的組合:

1
pd.merge(left,right1,left_on=['key1','key2'],right_on=['new_key1','new_key2'],how='left')

 

索引位與列的組合:

前提設(shè)置
1
2
3
# left_index,right_index默認(rèn)False, 改為True 表示左邊數(shù)據(jù)集使用索引位
pd.merge(left_Index,right1,left_index=True,right_on=['new_key1','new_key2'],how='left')   

 

csv文件中,沒有列名.需要自己定義!

1
user_info = pd.read_csv('user_info_train.txt',header = None , names = ['id','sex','job','education','marriage','hukou'])    # 注意names

 

查看唯一值:

1
2
3
id = user_info['id']
id.unique()
len(id.unique())

 

行變列顯示:

1
2
3
4
5
a = grouped3['amountOfTrans'].sum()
a.unstack()
# stack() 與unstack()  逆操作!!
# a.stack()   a.unstack()

 

rename:

1
a.rename(columns = {a.columns[0]:'shouru',a.columns[1]:'zhichu'},inplace=True)

直接運(yùn)算:

1
a['diff'] = a['shouru'] - a['zhichu']

 

透視表:

1
2
3
pd.pivot_table(data = pokemon , index= 'Type 1', columns= 'Type 2' , values=['HP' ,'Total'],aggfunc=[np.sum])
pd.pivot_table(data = pokemon , index= 'Type 1', columns= 'Type 2' , values=['HP' ,'Total'],aggfunc=[np.sum,np.mean])

 

交互表:

計算頻率:

1
2
3
pd.crosstab(index = pokemon['Type 1'],columns= pokemon['Type 2'] )
pd.crosstab(index = pokemon['Type 1'],columns= pokemon['Type 2'] ,margins=True)    # margins 顯示總頻率

 

dummy variables

沒有意義的類別,不需要比較的數(shù)據(jù)

1
2
3
4
#在Type1的類別中,有且唯有一個 1
pd.get_dummies(data=pokemon,columns=['Type 1'])
pd.get_dummies(data=pokemon,columns=['Type 1','Type 2'])

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多