1.基本統計分析:一般統計最小值,第一四分位值,中值,第三四分位置。最大值
常用統計指標:計數,求和,平均值,方差,標準差
描述性統計分析函數:describe()
常用的統計函數
import pandas
data=pandas.read_csv('D:\BaiduNetdiskDownload\8\8.1\data.csv')
print(data)
print(data.score.describe())
#count 13.000000
#mean 121.076923
#std 12.446295
#min 96.000000
#25% 115.000000
#50% 120.000000
#75% 131.000000
#max 140.000000
#如果要分統計也行
print(data.score.size)
#13
2.分組統計
分組統計函數:groupby(by=[分組1,分組2.。。】)
【統計列1,統計列2】
.agg({統計列別名1:統計函數1.。。。})
解釋
by:用於分組的列
中括號:用於統計的列
agg:統計別名顯示統計值的名稱
import pandas,numpy
data=pandas.read_csv('D:\BaiduNetdiskDownload\8\8.1\data.csv')
data['score2']=data['score']*data['score']
data.groupby(by=['class'])['score'].agg({
'總分':numpy.sum,
'人數':numpy.size,
'平均值':numpy.mean,
'方差':numpy.var,
'標準差':numpy.std,
}
)
# 總分 人數 平均值 方差 標準差
#class
#一班 635 5 127.00 71.000000 8.426150
#三班 484 4 121.00 104.666667 10.230673
#二班 455 4 113.75 290.250000 17.036725
a=data.groupby(by=['class','name'])['score','score2'].agg({
numpy.sum,
numpy.size
}
)
這樣拿班級和姓名分組得到這個:
score score2
sum size sum size
class name
一班 朱 122 1 14884 1
朱志 120 1 14400 1
許 122 1 14884 1
鄭麗 140 1 19600 1
郭傑 131 1 17161 1
三班 莊藝 119 1 14161 1
方偉 136 1 18496 1
方小 114 1 12996 1
陳 115 1 13225 1
二班 林良 135 1 18225 1
林 96 1 9216 1
鄭 119 1 14161 1
黃志 105 1 11025 1
res=data.groupby(by=['class'])['score'].agg({
'總分':numpy.sum,
'人數':numpy.size,
'平均值':numpy.mean,
'方差':numpy.var,
'標準差':numpy.std,
}
)
print(res.index)
#Index(['一班', '三班', '二班'], dtype='object', name='class')
print(res.columns)
#Index(['總分', '人數', '平均值', '方差', '標準差'], dtype='object')
print(res['平均值'])
class
一班 127.00
三班 121.00
二班 113.75
各種引用還是看具體需求
3.分佈分析:根據分析目的,將數據等距或者不等距的分組,進行研究各分組顧慮的一種分析方法。
import pandas,numpy
data=pandas.read_csv('D:\BaiduNetdiskDownload\8\8.3\data.csv')
bins=[min(data.年齡)-1,20,30,40,max(data.年齡)+1]
labels=['20歲以下','20到30歲','30到40歲','40歲以上']
age=pandas.cut(data.年齡,bins,labels=labels)
data['年齡分層']=age
print(data.groupby(by=['年齡分層'])['年齡'].agg({'人數':numpy.size}))
人數
年齡分層
20歲以下 2061
20到30歲 46858
30到40歲 8729
40歲以上 1453
4.交叉分析:通常用於分析兩個或兩個以上分組變量之間的關係,以交叉表形式進行變量間關係的對比分析;
pivot_table(values,index,colums,aggfunc,fill_value)
value:數據透視表中的值
index:數據透視表中的行
columns:數據透視表中的列
aggfunc:統計函數
fill_value:NA值的統一替換
返回的是數據透視import pandas,numpy
data=pandas.read_csv('D:\BaiduNetdiskDownload\8\8.4\data.csv')
bins=[min(data.年齡)-1,20,30,40,max(data.年齡)+1]
labels=['20歲以下','20到30歲','30到40歲','40歲以上']
age=pandas.cut(data.年齡,bins,labels=labels)
data['年齡分層']=age
r1=data.pivot_table(
values=['年齡'],
index=['年齡分層'],
columns=['性別'],
aggfunc=[numpy.size,numpy.mean]
)
下面得到數據透視表
size mean
年齡 年齡
性別 女 男 女 男
年齡分層
20歲以下 111 1950 18.972973 19.321026
20到30歲 2903 43955 25.954874 25.746149
30到40歲 735 7994 33.213605 33.084939
40歲以上 567 886 51.691358 49.943567
表的結果如果有兩個數據透視表a,b可以用a.join(b)合併,必須ivalues,ndex和columns一樣
5.結構分析:在分組的基礎上,計算各組成部分所佔的比重,進而分析總體的內部特徵的一種分析方法。
axis參數說明:0是按列計算,1是按行計算。
運算(數據框的外運算函數) 註釋
運算(數據框的內運算函數) 註釋
import pandas,numpy
data=pandas.read_csv('D:\BaiduNetdiskDownload\8\8.5\data.csv')
data2=data.pivot_table(
values=['月流量(M)'],
index=['省份'],
columns=['通信品牌'],
aggfunc=[numpy.sum]
)
print(data2,data2.sum())
sum
月流量(M)
通信品牌 全球通 動感地帶 神州行
省份
上海 19468.8 356637.9 584389.2
......
青海 29473.6 395802.3 508992.0
通信品牌
sum 月流量(M) 全球通 1216533.6
動感地帶 11825462.3
神州行 18385315.7
dtype: float64
print(data2.sum(axis=1),data2.sum(axis=0))
按行運算和按列運算。默認爲0.
省份
上海 960495.9
雲南 946952.9
.......
寧夏 923295.9
黑龍江 910761.4
dtype: float64 通信品牌
sum 月流量(M) 全球通 1216533.6
動感地帶 11825462.3
神州行 18385315.7
dtype: float64
print(data2.div(data2.sum(axis=1),axis=0))
sum
月流量(M)
通信品牌 全球通 動感地帶 神州行
省份
上海 0.020270 0.371306 0.608424
雲南 0.044443 0.407948 0.547609
內蒙古 0.033975 0.367371 0.598654
北京 0.035174 0.388562 0.576265
按行求和爲1
import pandas,numpy
data=pandas.read_csv('D:\BaiduNetdiskDownload\8\8.5\data.csv')
data2=data.pivot_table(
values=['月流量(M)'],
index=['省份'],
columns=['通信品牌'],
aggfunc=[numpy.sum]
)
print(data2.div(data2.sum(axis=0),axis=1))
sum
月流量(M)
通信品牌 全球通 動感地帶 神州行
省份
上海 0.016004 0.030158 0.031786
雲南 0.034595 0.032667 0.028205
內蒙古 0.025725 0.028616 0.029993
北京 0.027877 0.031680 0.030220
.。。。。
臺灣 0.030006 0.030187 0.029591
吉林 0.020698 0.030346 0.030499
按列求和爲1
6.相關分析:是研究現象之間是否存在某種依存關係,並對具體有依存關係的現象探討其相關方向及相關程度,是研究隨機變量之間的相關關係的一種統計方法。
相關係數:可以描述定量變量之間的關係:
0<=|r|<0.3 低度相關
0.3<=|r|<0.8 中度相關
0.8<=|r|<1 高度相關
相關分析函數:
DataFrame.corr()
Series.corr(other)
如果數據框調用corr方法,那麼將會計算每個列兩兩之間的相似度
如果是序列調用,那麼只是計算該序列與傳入序列之間的相關度
import pandas,numpy
data=pandas.read_csv('D:\BaiduNetdiskDownload\8\8.6\data.csv')
print(data)
print(data['人口'].corr(data['文盲率']))
#0.10762237339473261擬合程度不高啊
print(data.loc[:,['網上購物率','文盲率','人口']].corr())
網上購物率 文盲率 人口
網上購物率 1.000000 -0.702975 -0.343643
文盲率 -0.702975 1.000000 0.107622
人口 -0.343643 0.107622 1.000000