一、統計分析
統計分析是對定量數據進行統計描述,常從集中趨勢和離中趨勢兩個方面分析。
集中趨勢:指一組數據向某一中心靠攏的傾向,核心在于尋找數據的代表值或中心值-統計平均數(算數平均數和位置平均數)
算術平均數:簡單算術平均數和權重算術平均數
位置平均數:中位數和眾數
離中趨勢:
極差和分位差
標準差和方差
?
二、集中趨勢
隨機生成整數和總和為1的百分占比
df = pd.DataFrame({'value':np.random.randint(1,100,100),'f':np.random.rand(100)}) df['f'] = df['f']/df['f'].sum()
?
算術平均數
mean = df['value'].mean() mean_f = (df['value'] * df['f']).sum()/df['f'].sum() print('簡單算術平均數:%.2f'%mean) print('權重算術平均數:%2.f'%mean_f) # 簡單算術平均數:48.34 # 權重算術平均數:51
?
位置平均數
m = df['value'].mode().tolist() #Seris數據類型可通過tolist()或to_list()轉化為列表 med = df['value'].median() print('眾數為:',m) print('中位數為:',med) # 眾數為: [85] # 中位數為: 48.0
?
集中趨勢密度圖
df['value'].plot(kind = 'kde')plt.axvline(mean,linestyle='--',color = 'r') plt.text(mean+5,0.002,'簡單算術平均數',color = 'r')plt.axvline(mean_f,linestyle='--',color = 'y') plt.text(mean_f+5,0.004,'加權算術平均數',color = 'y')plt.axvline(med,linestyle='--',color = 'g') plt.text(med - 30,0.006,'中位數',color = 'g')
?
三、離中趨勢
隨機生成DataFrame,表示對應日期的銷量
df = pd.DataFrame({'A_sale':np.random.rand(30)*1000,'B_sale':np.random.rand(30)*1000},index = pd.date_range('2019/6/1','2019/6/30'))
?
極差和分位差
a_jc = df['A_sale'].max() - df['A_sale'].min() b_jc = df['B_sale'].max() - df['B_sale'].min() print('產品A銷售額極差為%.2f,產品B銷售額極差為%.2f'%(a_jc,b_jc))a_des = df['A_sale'].describe() b_des = df['B_sale'].describe() a_iqr = a_des['75%'] - a_des['25%'] b_iqr = b_des['75%'] - b_des['25%'] print('產品A銷售額分位差為%.2f,產品B銷售額分位差為%.2f'%(a_iqr,b_iqr)) # 產品A銷售額極差為968.05,產品B銷售額極差為946.94 # 產品A銷售額分位差為550.63,產品B銷售額分位差為479.76
?
箱型圖展示離散關系
df.boxplot(vert = False)
?
假設有n個樣本,x1、x2...xn,算術平均數為x
方差:( (x1-x)^2 + (x2-x)^2 + ...+ (xn-x)^2 )/n
標準差:方差的平方根
a_std = df['A_sale'].std() a_var = df['A_sale'].var() b_std = df['B_sale'].std() b_var = df['B_sale'].var() print('產品A銷售額標準差為%.2f,方差為%.2f'%(a_std,a_var)) print('產品B銷售額標準差為%.2f,方差為%.2f'%(b_std,b_var)) # 產品A銷售額標準差為304.25,方差為92565.69 # 產品B銷售額標準差為297.36,方差為88424.61
?
密度圖展示中位數、方差
fig = plt.figure(figsize = (12,5)) ax1 = fig.add_subplot(1,2,1) df['A_sale'].plot(kind = 'kde') plt.axvline(a_des['50%'] - a_std,linestyle = '--',color = 'r') plt.axvline(a_des['50%'],linestyle = '--') plt.axvline(a_des['50%'] + a_std,linestyle = '--',color = 'y')ax2 = fig.add_subplot(1,2,2) df['B_sale'].plot(kind = 'kde') plt.axvline(b_des['50%'] - b_std,linestyle = '--',color = 'r') plt.axvline(b_des['50%'],linestyle = '--') plt.axvline(b_des['50%'] + b_std,linestyle = '--',color = 'y')
?