# -*- coding: utf-8 -*- #1,基本統計分析 ================== 常用統計函數: size:計數,不需要括號 sum():求和 mean():均值 var():方差 std():標准差 ================== import pandas as pd df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3') print(df.數分.describe()) print(df.describe()) print(df.解幾.size) print(df.解幾.sum()) print(df.解幾.var()) import numpy as np print(np.average(df['數分'])) #用numpy的ave函數求均值 print(df.mode()) #計算眾數 #2,分組分析 ================== 根據分組字段將分析對象划分成不同的部分,以對比分析各組之間差異性。 df.groupby(by=['分類1','分類2',...])['被統計的列'].agg({列名1:統計函數1, 列名2:統計函數2,...}) by表示按列進行分組,常用統計函數有size計數,sum求和,mean求均值 ================== import numpy as np from pandas import read_excel df = read_excel(r'd:\rz.xlsx',sheet_name='Sheet3') #英語、體育、軍訓列的分數必須為int,否則結果會空 print(df.groupby(by='班級')['英語','體育','軍訓'].mean()) print(df.groupby(by=['班級','性別'])['軍訓'].agg( {'總分':np.sum, '人數':np.size, '平均值':np.mean, '方差':np.var, '標准差':np.std, '最高分':np.max, '最低分':np.min})) #3,分布分析 #根據分析的目的,將數據進行等距或不等距分組,研究各組分布規律。 import pandas as pd import numpy df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3') df['總分']=df.英語+df.體育+df.軍訓+df.數分+df.高代+df.解幾 #將數據分為3段 bins=[min(df.總分)-1,400,450,max(df.總分)+1] #給3段數據貼標簽 labels=['400以下','400到450','450以上'] df['總分分層']=pd.cut(df.總分,bins,labels=labels) print(df) #4,交叉分析 ================== 分析兩個或以上分組變量之間的關系,以交叉表形式進行變量間關系的對比分析。 pivot_table(values,index,columns,aggfunc,fill_value),將數據列透視為新表。 values表示透視新表中的值,可選參數 index透視表中的索引,必選參數 columns透視表中的列,用來分割數據,可選參數 aggfunc統計函數,可選參數 fill_value表示NA值的統一替換,可選參數 ================== #接上面代碼 #按index進行分組,透視所有int列 print(df.pivot_table(index=['班級','姓名'])) #透視指定列 print(df.pivot_table(['軍訓','英語','體育'],index=['班級','姓名'])) #按index進行分組,透視values列,列名按性別分開顯示 print(df.pivot_table(values=['總分'], index=['總分分層'], columns=['性別'], aggfunc=[numpy.size,numpy.mean])) #5,結構分析 #在分組分析及交叉分析的基礎之上,計算各組成部分所占的比重。 df_pt=df.pivot_table(values=['總分'], index=['班級'], columns=['性別'], aggfunc=[numpy.sum]) print(df_pt) print("!!!!",df_pt.sum()) #默認按行合計 print("@@@@",df_pt.sum(axis=1)) #按列合計 print("####",df_pt.div(df_pt.sum(axis=1),axis=0)) #按列占比 print("$$$$",df_pt.div(df_pt.sum(axis=0),axis=1)) #按行占比 #6,相關分析 ================== 研究現象之間是否存在某種依賴關系,並對具有依賴關系的現象探討相關方向和程度 DataFrame.corr() 計算每列兩兩之間的相似度,返回DataFrame Series.corr() 計算該序列與傳入的序列之間的相關度,返回一個數值型,大小為相關度 ================== import pandas as pd import numpy as np df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3') print(df['高代'].corr(df['數分'])) print(df.loc[:,['英語','體育','軍訓','解幾','數分','高代']].corr())