數據分析與展示——Pandas數據特徵分析

Pandas數據特徵分析

數據的排序

將一組數據通過摘要(有損地提取數據特徵的過程)的方式,可以獲得基本統計(含排序)、分佈/累計統計、數據特徵(相關性、週期性等)、數據挖掘(形成知識)。

  • .sort_index()方法在指定軸上根據索引進行排序,默認升序
  • .sort_index(axis=0, ascending=True)
In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: b = pd.DataFrame(np.arange(20).reshape(4,5), index=['c','a','d','b'])

In [4]: b
Out[4]: 
    0   1   2   3   4
c   0   1   2   3   4
a   5   6   7   8   9
d  10  11  12  13  14
b  15  16  17  18  19

In [5]: b.sort_index()
Out[5]: 
    0   1   2   3   4
a   5   6   7   8   9
b  15  16  17  18  19
c   0   1   2   3   4
d  10  11  12  13  14

In [6]: b.sort_index(ascending=False)
Out[6]: 
    0   1   2   3   4
d  10  11  12  13  14
c   0   1   2   3   4
b  15  16  17  18  19
a   5   6   7   8   9

In [7]: c = b.sort_index(axis=1, ascending=False)

In [8]: c
Out[8]: 
    4   3   2   1   0
c   4   3   2   1   0
a   9   8   7   6   5
d  14  13  12  11  10
b  19  18  17  16  15

In [9]: c = c.sort_index()

In [10]: c
Out[10]: 
    4   3   2   1   0
a   9   8   7   6   5
b  19  18  17  16  15
c   4   3   2   1   0
d  14  13  12  11  10
  • .sort_values()方法在指定軸上根據數值進行排序,默認升序
Series.sort_values(axis=0, ascending=True)
DataFrame.sort_values(by, axis=0, ascending=True)     # by:axis軸上的某個索引或索引列表
In [11]: c = b.sort_values(2,ascending=False)

In [12]: c
Out[12]: 
    0   1   2   3   4
b  15  16  17  18  19
d  10  11  12  13  14
a   5   6   7   8   9
c   0   1   2   3   4

In [13]: c = c.sort_values('a',axis=1,ascending=False)

In [14]: c
Out[14]: 
    4   3   2   1   0
b  19  18  17  16  15
d  14  13  12  11  10
a   9   8   7   6   5
c   4   3   2   1   0

Nan統一放到排序末尾

In [15]: a = pd.DataFrame(np.arange(12).reshape(3,4), index=['a','b','c'])

In [16]: a
Out[16]: 
   0  1   2   3
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11

In [17]: c = a + b

In [18]: c
Out[18]: 
      0     1     2     3   4
a   5.0   7.0   9.0  11.0 NaN
b  19.0  21.0  23.0  25.0 NaN
c   8.0  10.0  12.0  14.0 NaN
d   NaN   NaN   NaN   NaN NaN

In [19]: c.sort_values(2,ascending=False)
Out[19]: 
      0     1     2     3   4
b  19.0  21.0  23.0  25.0 NaN
c   8.0  10.0  12.0  14.0 NaN
a   5.0   7.0   9.0  11.0 NaN
d   NaN   NaN   NaN   NaN NaN

In [20]: c.sort_values(2,ascending=True)
Out[20]: 
      0     1     2     3   4
a   5.0   7.0   9.0  11.0 NaN
c   8.0  10.0  12.0  14.0 NaN
b  19.0  21.0  23.0  25.0 NaN
d   NaN   NaN   NaN   NaN NaN

數據的基本統計分析

基本的統計分析函數

適用於Series和DataFrame類型

方法說明
.sum() 計算數據的總和,按0軸計算,下同
.count() 非Nan值得數量
.mean() .median() 計算數據的算術平均值、算術中位數
.var() .std() 計算數據的方差、標準差
.min() .max() 計算數據的最小值、最大值

適用於Series類型

方法說明
.argmin() .argmax() 計算數據最大值、最小值所在位置的索引位置(自動索引)
.idxmin() .idxmax() 計算數據最大值、最小值所在位置的索引(自定義索引)

適用於Series和DataFrame類型

 方法說明 
.describe() 針對0軸(各列)的統計彙總

 

In [21]: a = pd.Series([9,8,7,6], index=['a','b','c','d'])

In [22]: a
Out[22]: 
a    9
b    8
c    7
d    6
dtype: int64

In [23]: a.describe()
Out[23]: 
count    4.000000
mean     7.500000
std      1.290994
min      6.000000
25%      6.750000
50%      7.500000
75%      8.250000
max      9.000000
dtype: float64

In [24]: type(a.describe())
Out[24]: pandas.core.series.Series

In [25]: a.describe()['count']
Out[25]: 4.0

In [26]: a.describe()['max']
Out[26]: 9.0

In [27]: b.describe()
Out[27]: 
               0          1          2          3          4
count   4.000000   4.000000   4.000000   4.000000   4.000000
mean    7.500000   8.500000   9.500000  10.500000  11.500000
std     6.454972   6.454972   6.454972   6.454972   6.454972
min     0.000000   1.000000   2.000000   3.000000   4.000000
25%     3.750000   4.750000   5.750000   6.750000   7.750000
50%     7.500000   8.500000   9.500000  10.500000  11.500000
75%    11.250000  12.250000  13.250000  14.250000  15.250000
max    15.000000  16.000000  17.000000  18.000000  19.000000


In [28]: type(b.describe())
Out[28]: pandas.core.frame.DataFrame

In [29]: 

In [30]: b.describe().ix['max']
__main__:1: DeprecationWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
Out[30]: 
0    15.0
1    16.0
2    17.0
3    18.0
4    19.0
Name: max, dtype: float64

In [31]: b.describe()[2]
Out[31]: 
count     4.000000
mean      9.500000
std       6.454972
min       2.000000
25%       5.750000
50%       9.500000
75%      13.250000
max      17.000000
Name: 2, dtype: float64

數據的累計統計分析

累計統計分析函數

適用於Series和DataFrame類型,累計計算

方法說明
.cumsum() 依次給出前1、2、… 、n個數的和
.cumprod() 依次給出前1、2、… 、n個數的積
.cummax() 依次給出前1、2、… 、n個數的最大值
.cummin() 依次給出前1、2、… 、n個數的最小值

 

In [32]: b.cumsum()
Out[32]: 
    0   1   2   3   4
c   0   1   2   3   4
a   5   7   9  11  13
d  15  18  21  24  27
b  30  34  38  42  46

In [33]: b.cumprod()
Out[33]: 
   0     1     2     3     4
c  0     1     2     3     4
a  0     6    14    24    36
d  0    66   168   312   504
b  0  1056  2856  5616  9576

In [34]: b.cummin()
Out[34]: 
   0  1  2  3  4
c  0  1  2  3  4
a  0  1  2  3  4
d  0  1  2  3  4
b  0  1  2  3  4

In [35]: b.cummax()
Out[35]: 
    0   1   2   3   4
c   0   1   2   3   4
a   5   6   7   8   9
d  10  11  12  13  14
b  15  16  17  18  19

適用於Series和DataFrame類型,滾動計算(窗口計算)

方法說明
.rolling(w).sum() 依次計算相鄰w個元素的和
.rolling(w).mean() 依次計算相鄰w個元素的算術平均值
.rolling(w).var() 依次計算相鄰w個元素的方差
.rolling(w).std() 依次計算相鄰w個元素的標準差
.rolling(w).min() .max() 依次計算相鄰w個元素的最小值和最大值

 

In [36]: b.rolling(2).sum()
Out[36]: 
      0     1     2     3     4
c   NaN   NaN   NaN   NaN   NaN
a   5.0   7.0   9.0  11.0  13.0
d  15.0  17.0  19.0  21.0  23.0
b  25.0  27.0  29.0  31.0  33.0

In [37]: b.rolling(3).sum()
Out[37]: 
      0     1     2     3     4
c   NaN   NaN   NaN   NaN   NaN
a   NaN   NaN   NaN   NaN   NaN
d  15.0  18.0  21.0  24.0  27.0
b  30.0  33.0  36.0  39.0  42.0

數據的相關分析

兩個事物,表示爲X和Y,如何判斷它們之間的存在相關性?

相關性

  • X增大,Y增大,兩個變量正相關
  • X增大,Y減小,兩個變量負相關
  • X增大,Y無視,兩個變量不相關

協方差

  • 協方差>0, X和Y正相關
  • 協方差<0, X和Y負相關
  • 協方差=0, X和Y獨立無關

Pearson相關係數

r取值範圍[-1, 1]

  • 0.8 - 1.0 極強相關
  • 0.6 - 0.8 強相關
  • 0.4 - 0.6 中等程度相關
  • 0.2 - 0.4 弱相關
  • 0.0 - 0.2 極弱相關或無相關

適用於Series和DataFrame類型

方法說明
.cov() 計算協方差矩陣
.corr() 計算相關係數矩陣,Pearson、Spearman、Kendall等係數

 

In [38]: import pandas as pd

In [39]: hprice = pd.Series([3.04, 22.93, 12.75, 22.6, 12.33], index=['2008', '2009', '2010', '2011', '2012'])

In [40]: m2 = pd.Series([8.18, 18.38, 9.13, 7.82, 6.69], index=['2008', '2009', '2010','2011', '2012'])

In [41]: hprice.corr(m2)
Out[41]: 0.5239439145220387

 

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