Python資料分析之 pandas彙總和計算描述統計
1. 聚合計算
pandas物件擁有一組常用的數學和統計方法。它們大部分都屬於約簡和彙總 統計,用於從Series中提取單個值(如sum或mean)或從DataFrame的行或 列中提取一個Series。跟對應的NumPy陣列方法相比,它們都是基於沒有缺 失資料的假設而構建的。看一個簡單的DataFrame:
df = pd.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

呼叫DataFrame的sum方法將會返回一個含有列的和的Series:
df.sum() #預設axis=0/'index'

傳入axis='columns'或axis=1將會按行進行求和運算:
df.sum(axis='columns') #axis=1

NA值會自動被排除,除非整個切片(這裡指的是行或列)都是NA。透過skipna選項可以禁用該功能:
print(df)
print("-----")
print(df.mean(axis='columns', skipna=False)) #axis=1
print("-----")
print(df.mean(axis='columns')) #axis=1 自動跳過na
下表列出了這些約簡方法的常用選項:
有些方法(如idxmin和idxmax)返回的是間接統計(比如達到最小值或最大 值的索引):
print(df)
print("-------")
df.idxmax() #axis=0

另一些方法則是累計型的:
print(df)
print("-------")
df.cumsum() #axis=0

還有一種方法,它既不是約簡型也不是累計型。describe就是一個例子,它 用於一次性產生多個彙總統計:
df.describe() #預設忽略空值
對於非數值型資料,describe會產生另外一種彙總統計:
obj = pd.Series(['a', 'a', 'b', 'c'] * 4)
obj.describe()

下表列出了所有與描述統計相關的方法。

2. 相關係數與協方差
有些彙總統計(如相關係數和協方差)是透過引數對計算出來的。我們來看 幾個DataFrame,它們的資料來自Yahoo!Finance的股票價格和成交量,使 用的是pandas-datareader包(可以用conda或pip安裝):
pip install pandas-datareader
我使用pandas_datareader模組下載了一些股票資料:
import pandas_datareader.data as web
all_data = {ticker: web.get_data_yahoo(ticker) for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']}
price = pd.DataFrame({ticker: data['Adj Close'] for ticker, data in all_data.items()})
volume = pd.DataFrame({ticker: data['Volume'] for ticker, data in all_data.items()})
print(price.head())
print(volume.head())

現在計算價格的百分數變化,時間序列的操作後續會介紹:
returns = price.pct_change()
returns.tail()
Series的corr方法用於計算兩個Series中重疊的、非NA的、按索引對齊的值 的相關係數。與此類似,cov用於計算協方差:
print(returns['MSFT'].corr(returns['IBM']))
print(returns['MSFT'].cov(returns['IBM']))

因為MSTF是一個合理的Python屬性,我們還可以用更簡潔的語法選擇列:
returns.MSFT.corr(returns.IBM)
另一方面,DataFrame的corr和cov方法將以DataFrame的形式分別返回完整 的相關係數或協方差矩陣:
print(returns.corr())
print("-----------")
print(returns.cov())

利用DataFrame的corrwith方法,你可以計算其列或行跟另一個Series或DataFrame之間的相關係數。傳入一個Series將會返回一個相關係數值Series(針對各列進行計算)
returns.corrwith(returns.IBM)
無錫婦科檢查醫院

傳入一個DataFrame則會計算按列名配對的相關係數。這裡,我計算百分比 變化與成交量的相關係數:
print(returns.head())
print(volume.head())
returns.corrwith(volume) #按列配對

傳入axis='columns'/1即可按行進行計算。無論如何,在計算相關係數之前,所 有的資料項都會按標籤對齊。
3. 唯一值、值計數以及成員資格
還有一類方法可以從一維Series的值中抽取資訊。看下面的例子:
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
obj

第一個函式是unique,它可以得到Series中的唯一值陣列:
uniques = obj.unique()
uniques

返回的唯一值是未排序的,如果需要的話,可以對結果再次進行排序 (uniques.sort())。相似的,value_counts用於計算一個Series中各值出現 的頻率:
obj.value_counts()

為了便於檢視,結果Series是按值頻率降序排列的。value_counts還是一個 頂級pandas方法,可用於任何陣列或序列:
pd.value_counts(obj.values, sort=False)

isin用於判斷向量化集合的成員資格,可用於過濾Series中或DataFrame列中 資料的子集:
print(obj)
print("-----------")
mask = obj.isin(['b', 'c'])
print(mask)
print("-----------")
obj[mask]
與isin類似的是Index.get_indexer方法,它可以給你一個索引陣列,從可能包 含重複值的陣列到另一個不同值的陣列:
to_match = pd.Series(['c', 'a', 'b', 'b', 'c', 'a'])
unique_vals = pd.Series(['c', 'b', 'a'])
pd.Index(unique_vals).get_indexer(to_match)

下表給出了這幾個方法的一些參考資訊:
有時,你可能希望得到DataFrame中多個相關列的一張柱狀圖。例如:
data = pd.DataFrame({'Qu1': [1, 3, 4, 3, 4],
'Qu2': [2, 3, 1, 2, 3],
'Qu3': [1, 5, 2, 4, 4]})
data

將pandas.value_counts傳給該DataFrame的apply函式,就會出現:
result = data.apply(pd.value_counts).fillna(0)
result
這裡,結果中的行標籤是所有列的唯一值。後面的頻率值是每個列中這些值的相應計數。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2658849/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 隱私計算資料彙總
- Python資料分析之pandasPython
- Lesson6——Pandas Pandas描述性統計
- Python資料分析之Pandas篇Python
- 資料統計指令碼(彙總)指令碼
- 【計算機二級Python】考試攻略及資料彙總計算機Python
- pandas 處理資料和crc16計算
- 《Python專案——描述性統計分析》Python
- Python - pandas 資料分析Python
- [譯] 使用 Pandas 對 Kaggle 資料集進行統計資料分析
- python資料統計之禪道bug統計Python
- 資料分析利器之Pandas
- 大資料計算生態之資料計算(二)大資料
- 大資料計算生態之資料計算(一)大資料
- [python][科學計算][pandas]使用指南Python
- Python 資料科學之 PandasPython資料科學
- Oracle 統計資訊相關命令彙總Oracle
- 資料分析-pandas資料處理清洗常用總結
- Python利用pandas處理資料與分析Python
- 用 Python 進行資料分析 pandas (一)Python
- Python入門教程—資料分析工具PandasPython
- Python資料分析庫之pandas,你該這麼學!No.1Python
- python基本資料型別計算Python資料型別
- CATIA 橋樑正向設計資料文章彙總
- WaveMetrics Igor Pro 9 科學計算和資料分析工具Go
- 實時計算無線資料分析
- pandas包 問題彙總
- python-資料分析-Pandas-1、Series物件Python物件
- 大量STATSPACK資料統計分析
- 入門設計模式之彙總篇設計模式
- python-資料分析-Pandas-3、DataFrame-資料重塑Python
- 資料分析與資料探勘 - 04科學計算
- 多元統計之因子分析模型及Python分析示例模型Python
- element table只計算最後一列資料總和
- 科學計算:Python 分析資料找問題,並圖形化Python
- PostgreSQL11preview-平行計算增強彙總SQLView
- 常用【描述性統計指標】含義(by python)指標Python
- 用Python和Pandas以及爬蟲技術統計歷史天氣Python爬蟲