利用python進行數據分析之pandas彙總和計算描述統計、相關係數與協方差、唯一值、值計數、成員資格

1、描述性統計分析

(1)跟對應的NumPy相比,t他們都是基於沒有缺失數據的假設而構建的。

df = DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index = ['a','b','c','d'],
               columns=['one','two'])
df
Out[53]: 
    one  two
a  1.40  NaN
b  7.10 -4.5
c   NaN  NaN
d  0.75 -1.3

調用DataFrame的sum方法將會返回一個含有列小計的Series:

df.sum()   #默認爲axis=0,傳入axis=1會按行進行求和計算
Out[54]: 
one    9.25
two   -5.80
dtype: float64

(2)NA值會自動被排除,除非整個切片(這裏是指行或列)都是NA,通過skipna選項可以禁用該功能:

df.mean(axis=1,skipna=False)
Out[55]: 
a      NaN
b    1.300
c      NaN
d   -0.275
dtype: float64

(3)約簡方法的選項

axis 約簡的軸。DataFrame的行用0,列用1
skipna 排除缺失值,默認值爲True
level 如果軸是層次化索引的(即MultiIndex),則根據level分組約簡

(4)間接統計

idxmin、idxmax:返回達到最小值或最大值的索引

df.idxmax()
Out[56]: 
one    b
two    d
dtype: object

(5)累計型

df.cumsum()
Out[57]: 
    one  two
a  1.40  NaN
b  8.50 -4.5
c   NaN  NaN
d  9.25 -5.8

(6)一次性產生多個彙總統計

df.describe()
Out[58]: 
            one       two
count  3.000000  2.000000
mean   3.083333 -2.900000
std    3.493685  2.262742
min    0.750000 -4.500000
25%    1.075000 -3.700000
50%    1.400000 -2.900000
75%    4.250000 -2.100000
max    7.100000 -1.300000

obj = Series(['a','a','b','c']*4)
obj
Out[60]: 
0     a
1     a
2     b
3     c
4     a
5     a
6     b
7     c
8     a
……

obj.describe()
Out[61]: 
count     16
unique     3
top        a
freq       8
dtype: object
描述和彙總統計
count 非NA值的數量
describe 針對Series或各DataFrame列計算彙總統計
min、max 計算最小值和最大值
argmin、argmax 計算能夠獲得到最小值和最大值的索引位置(整數)
idxmin、idxmax 計算能夠獲取到最小值和最大值的索引值
quantile 計算樣本的分位數(0到1)
sum 值的總和
mean 值的平均值
median 值得算術中位數(50%分位數)
mad 根據平均值計算平均絕對離差
var 樣本值得方差
std 樣本值的標準差
skew 樣本值的偏度(三階矩)
kurt 樣本值的峯度(四階矩)
cumsum 樣本值的累計和
cummin、cummax 樣本值的累計最大值和累計最小值
cumprod 樣本值的累計積
diff 計算一階差分(對時間序列很有用)
pct_change 計算百分數變化

2、相關係數與協方差

(1)Series的corr方法用於計算兩個Series中重疊的、非NA的、按索引對齊的值的相關係數。cov用於計算協方差

(2)DataFrame的corr和cov方法將以DataFrame的形式返回完整的相關係數或協方差矩陣:

(3)利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關係數。傳入一個Series將會返回一個相關係數值Series(針對各列進行計算)

(4)傳入一個DataFrame則會計算按列名配對的相關係數

3、唯一值、值計數、成員資格

isin 計算一個表示“Series各值是否包含於傳入的值序列中”的布爾型數組
unique 計算Series中的唯一值數組,按發現的順序返回
value_counts 返回一個Series,其索引爲唯一值,其值爲頻率,按計數值降序排列

(1)unique

得到唯一值。返回的唯一值是未排序的,對結果再次進行排序可用.sort()

(2)value_counts()

用於計算一個Series中各值出現的頻率,爲了方便查看,結果是按值頻率降序排列的。

value_counts還是一個頂級pandas方法,可用於任何數組或序列:

pd.value_counts(obj.values,sort=False)

(3)isin

用於判斷矢量化集合的成員資格,可用於選取Series中或DataFrame列中數據的子集:

obj = Series(['c','a','d','a','a','b','b','c','c'])
mask = obj.isin(['b','c'])
mask
Out[64]: 
0     True
1    False
2    False
3    False
4    False
5     True
6     True
7     True
8     True
dtype: bool

obj[mask]
Out[65]: 
0    c
5    b
6    b
7    c
8    c
dtype: object

(4)得到DataFrame中多個相關列的一張柱狀圖

data = DataFrame({'Q1':[1,3,4,3,4],
                  'Q2':[2,3,1,2,3],
                  'Q3':[1,5,2,4,4]})

data
Out[12]: 
   Q1  Q2  Q3
0   1   2   1
1   3   3   5
2   4   1   2
3   3   2   4
4   4   3   4

result = data.apply(pd.value_counts).fillna(0)

result
Out[14]: 
    Q1   Q2   Q3
1  1.0  1.0  1.0
2  0.0  2.0  1.0
3  2.0  2.0  0.0
4  2.0  0.0  2.0
5  0.0  0.0  1.0

 

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章