Task2:數理統計與描述性分析

思維導圖

在這裏插入圖片描述

常用統計量

描述型統計學常用統計量與數學符號
在這裏插入圖片描述

python實現

1、基本統計量的python實現

#導入包
import pandas as pd
import numpy as np
from scipy import stats  
import  math

"""
Scipy是一個高級的科學計算庫,Scipy一般都是操控Numpy數組來進行科學計算,
Scipy包含的功能有最優化、線性代數、積分、插值、擬合、特殊函數、快速傅里葉變換、
信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。
"""

a = [1,2,4,5,3,12,12,23,43,52,11,22,22,22]
a_mean = np.mean(a)  #均值
a_med = np.median(a)  #中位數
print("a的平均數:",a_mean)
print("a的中位數:",a_med)

#Scipy庫計算衆數
a_m1 =stats.mode(a)[0][0]
print("a的衆數:",a_m1)

#將一維數組轉成Pandas的Series,然後調用Pandas的mode()方法
ser = pd.Series(a)
a_m2 = ser.mode() #得到的是Series
print("a的衆數:",a_m2.iloc[0])

# 轉成pandas的數據框,返回df數據框
# 包含 計數、均值、標準差、最大最小值,中位數,1/4分位數 ,3/4分位數 
a_des=pd.DataFrame(a).describe()
print(a_des)


"""
變異係數是刻畫數據相對分散性的一種度量。
變異係數只在平均值不爲零時有定義,而且一般適用於平均值大於零的情況。變異係數也被稱爲標準離差率或單位風險。
當需要比較兩組數據離散程度大小的時候,如果兩組數據的測量尺度相差太大,或者數據量綱的不同,變異係數可以消除測量尺度和量綱的影響。
"""

a_var = np.var(a)  #方差
a_std1 = np.sqrt(a_var) #標準差
a_std2 = np.std(a) #標準差
a_mean = np.mean(a)  #均值
a_cv =  a_std2 /a_mean #變異係數
print("a的方差:",a_var)
print("a的標準差:",a_std1)
print("a的標準差:",a_std2)
print("a的均值:",a_mean)
print("a的變異係數:",a_cv)

在這裏插入圖片描述
在這裏插入圖片描述

2、頻率分佈表

案例題目:
在這裏插入圖片描述
在這裏插入圖片描述

data=pd.read_excel("Return.xlsx",sheet_name=1)
#data.groupby('Country').agg('mean')

data.head()

print(data.describe())
return_min=data['ArithmeticMean(%)'].min()
return_max=data['ArithmeticMean(%)'].max()

# 組距 = (最大值-最小值)/組數
# math.ceil向上取整   math.floor向下取整
int_val=(math.ceil(return_max)-math.floor(return_min))/5
print("最大回報:",return_min)
print("最小回報:",return_max)
print("組距:",int_val)

#構造頻率分佈表
l1=[i for i in range(math.floor(return_min),math.ceil(return_max)+1,int(int_val))]
fre_dis= pd.DataFrame(['%s to %s'%( l1[l1.index(j)-1],j) for j in l1[1:]],columns=['Interval'])

fre_dis.index=fre_dis.Interval
fre_dis['MIN']=fre_dis.Interval.str.split('to').str[0].str.strip().astype(int)
fre_dis['MAX']=fre_dis.Interval.str.split('to').str[1].str.strip().astype(int)
bins=fre_dis.MIN.tolist()
bins.append(max(bins)+1)
group_names=fre_dis.index.tolist()
#分組打標
group=pd.cut(data['ArithmeticMean(%)'].values,bins,labels=group_names,right=False)

#標籤——可以定義傳入labels,
#傳入series時labels有效,傳入list,labels默認0,1,2,3目前沒找到原因
print(group.codes)

#分組區間,長度1
print(group.categories)

#series,區間——個數
_freq=group.value_counts()

#
print(_freq.index)

# 頻率分佈直方圖
import matplotlib.pyplot as plt
_freq.plot(kind='bar',figsize=(10,6))


#頻率分佈表
data1=data.copy()
Inteval=pd.cut(data['ArithmeticMean(%)'],bins,right=False)
data1['區間']=Inteval.values
data1.groupby('區間').median()
data1.groupby('區間').mean()#每個區間平均數
 
_freq_df=pd.DataFrame(_freq,columns=['頻數'])
_freq_df['頻率%']=_freq_df / _freq_df['頻數'].sum()
_freq_df['頻率%']=_freq_df['頻率%'].map(lambda x:'%.2f%%'%(x*100))
 
_freq_df['累計頻數']=_freq_df['頻數'].cumsum()
_freq_df['累計頻率%']=_freq_df['累計頻數'].map(lambda x: x/ _freq_df['頻數'].sum())
_freq_df['累計頻率%']=_freq_df['累計頻率%'].map(lambda x:'%.2f%%'%(x*100))

_freq_df

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

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