在具體談及騷操作之前先捋一遍基本的統計特征函數
方法名 | 函數功能 | 所屬庫 |
sum() | 計算數據樣本的綜合(按照列計算) | pandas |
mean() | 計算數據樣本的算術平均數 | pandas |
var() | 計算樣本的方差 | pandas |
std() | 計算樣本的標准差 | pandas |
sample() | 計算樣本的Spearman(Person)相關系數矩陣 | pandas |
cov() | 計算樣本的協方差矩陣 | pandas |
skew | 樣本值的偏度;偏度系數 | pandas |
describe() | 給出樣本的基本描述(比如均值、標准差等) | pandas |
kurt() | 樣本值的峰度;峰度系數 | pandas |
median() | 樣本值的中位數 | pandas |
quantile() | 樣本4分位數 |
import pandas as pd df = pd.read_csv(r"C:\Users\lenovo\Desktop\HR.csv") >>> satisfaction_level last_evaluation ... department salary 0 0.38 0.53 ... sales low 1 0.80 0.86 ... sales medium 2 0.11 0.88 ... sales medium 3 0.72 0.87 ... sales low 4 0.37 0.52 ... sales low 5 0.41 0.50 ... sales low 6 0.10 0.77 ... sales low 7 0.92 0.85 ... sales low 8 0.89 1.00 ... sales low 9 0.42 0.53 ... sales low 10 0.45 0.54 ... sales low 11 0.11 0.81 ... sales low 12 0.84 0.92 ... sales low 13 0.41 0.55 ... sales low 14 0.36 0.56 ... sales low
首先是df.mean()
satisfaction_level 0.612839 last_evaluation 67.373732 number_project 3.802693 average_monthly_hours 201.041728 time_spend_company 3.498067 Work_accident 0.144581 left 0.238235 promotion_last_5years 0.021264 dtype: float64
df["satisfaction_level"].mean()
0.6128393333333333
df.quantile(q=0.25)
satisfaction_level 0.44 last_evaluation 0.56 number_project 3.00 average_monthly_hours 156.00 time_spend_company 3.00 Work_accident 0.00 left 0.00 promotion_last_5years 0.00 Name: 0.25, dtype: float64
df["satisfaction_level"].skew() # 偏態系數 Out[9]: -0.47643761717258093
df["satisfaction_level"].kurt() # 峰態系數 Out[10]: -0.6706959323886252
df.sample(n=10) # 給df進行抽樣10個 Out[11]: satisfaction_level last_evaluation ... department salary 12624 0.38 0.50 ... sales low 12343 0.41 0.56 ... technical medium 12214 0.40 0.53 ... IT low 3607 0.64 0.66 ... sales medium 11808 0.69 0.90 ... product_mng low 6604 0.19 0.85 ... technical low 6471 0.60 0.82 ... IT low 6447 0.52 0.51 ... technical high 535 0.37 0.56 ... sales medium 10989 0.17 0.55 ... RandD low
df.sample(frac=0.01) # 給df進行抽樣率為0.01 Out[12]: satisfaction_level last_evaluation ... department salary 223 0.87 0.90 ... IT low 9683 0.56 0.83 ... IT medium 5586 0.81 0.99 ... sales medium 12269 0.38 0.86 ... technical medium 208 0.44 0.50 ... support low 1412 0.46 0.46 ... technical low 11713 0.63 0.98 ... management high 10660 0.83 0.74 ... support medium 1757 0.36 0.51 ... sales low 14994 0.40 0.57 ... support low 1238 0.66 1.00 ... sales medium
基本方法就先演示這幾個
騷操作一:
shift方法:
首先通過df.shift?方法來了解一下
Examples -------- df = pd.DataFrame({'Col1': [10, 20, 15, 30, 45], 'Col2': [13, 23, 18, 33, 48], 'Col3': [17, 27, 22, 37, 52]}) df.shift(periods=3) Col1 Col2 Col3 0 NaN NaN NaN 1 NaN NaN NaN 2 NaN NaN NaN 3 10.0 13.0 17.0 4 20.0 23.0 27.0 df.shift(periods=1, axis='columns') Col1 Col2 Col3 0 NaN 10.0 13.0 1 NaN 20.0 23.0 2 NaN 15.0 18.0 3 NaN 30.0 33.0 4 NaN 45.0 48.0 df.shift(periods=3, fill_value=0) Col1 Col2 Col3 0 0 0 0 1 0 0 0 2 0 0 0 3 10 13 17 4 20 23 27 File: c:\users\lenovo\appdata\roaming\python\python36\site-packages\pandas\core\frame.py Type: method
可以知道periods參數是用來控制移動的距離;axis是用來控制列移動還是行移動,fill_value是用來控制因為移動數據產生的NAN用什么來進行填充
可以看到數據是集體向下移動的
加上fill_value參數就會變成0了
如果需要用到隔行相減的情況就派上用場了
除了shift還有累計計算(cum)和滾動計算(pd.rolling)
方法名 | 函數功能 | 所屬庫 |
cumsum() | 依次給出前1,2,3……n個數的和 | pandas |
cumprod() | 依次給出前1,2,3……n個數的積 | pandas |
cummax() | 依次給出前1,2,3……n個數的最大 | pandas |
cummin() | 依次給出前1,2,3……n個數的最小 | pandas |
方法名 | 函數功能 | 所屬庫 |
rolling_sum() | 計算數據樣本的總和(按列計算) | Pandas |
rolling_mean() | 數據樣本的算術平均數 | Pandas |
rolling_var() | 計算數據樣本的方差 | Pandas |
rolling_std() | 計算數據樣本的標准差 | Pandas |
rolling_corr() | 計算數據樣本的Spearman(Pearson)相關系數矩陣 | Pandas |
rolling_cov() | 計算數據樣本的協方差矩陣 | Pandas |
rolling_skew() | 樣本值的偏度 | Pandas |
rolling_kurt() | 樣本值得峰度 | Pandas |
其中,cum系列函數是作為DataFrame或者是Series對象的方法而出現的,因此命令格式為D.cumsum(),但是rolling系列是pandas的函數,並不是DataFrame或者Series對象的方法,因此他們的使用格式為pd.rolling_mean(D,k),意思為每K列計算一次平均值,滾動計算。