抽样分布实践

import pandas as pd
import numpy as np
from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

data = pd.read_excel('./Desktop/data.xlsx')
data.describe()

out:
ID	Age	Fare
count	712.000000	712.000000	712.000000
mean	356.500000	29.642093	34.567251
std	205.680983	14.492933	52.938648
min	1.000000	0.420000	0.000000
25%	178.750000	20.000000	8.050000
50%	356.500000	28.000000	15.645850
75%	534.250000	38.000000	33.000000
max	712.000000	80.000000	512.329200

#验证是否服从正态分布
#分别用kstest、shapiro、normaltest来验证分布系数
ks_test = stats.kstest(data['Age'], 'norm')
shapiro_test = stats.shapiro(data['Age'])
normaltest_test = stats.normaltest(data['Age'],axis=0) 
print('ks_test:',ks_test)
print('shapiro_test:',shapiro_test)
print('normaltest_test:',normaltest_test)

out:
ks_test: KstestResult(statistic=0.9649422367998306, pvalue=0.0)
shapiro_test: (0.9815102219581604, 7.906476895414016e-08)
normaltest_test: NormaltestResult(statistic=18.12938011101228, pvalue=0.00011567916063448067)
plt.figure()
data['Age'].plot(kind = 'kde')   
#原始数据的正态分布 
M_S = stats.norm.fit(data['Age'])  
#正态分布拟合的平均值loc,标准差 scale
normalDistribution = stats.norm(M_S[0], M_S[1])  
# 绘制拟合的正态分布图
x = np.linspace(normalDistribution.ppf(0.01), normalDistribution.ppf(0.99), 100)
plt.plot(x, normalDistribution.pdf(x), c='orange')
plt.xlabel('Age about Titanic')
plt.title('Age on NormalDistribution', size=20)
plt.legend(['age', 'NormDistribution'])

# 2、验证是否服从T分布
np.random.seed(1)  
ks = stats.t.fit(data['Age'])
df = ks[0]
loc = ks[1]
scale = ks[2]
ks2 = stats.t.rvs(df=df, loc=loc, scale=scale, size=len(age))
stats.ks_2samp(data['Age'], ks2)

out:
Ks_2sampResult(statistic=0.08286516853932585, pvalue=0.014103597072570409)
# 绘制拟合的T分布图
plt.figure()
data['Age'].plot(kind = 'kde')
TDistribution = stats.t(ks[0], ks[1],ks[2]) 
x = np.linspace(TDistribution.ppf(0.01), TDistribution.ppf(0.99), 100)
plt.plot(x, TDistribution.pdf(x), c='orange')
plt.xlabel('age about Titanic')
plt.title('age on TDistribution', size=20)
plt.legend(['age', 'TDistribution'])

#验证是否符合卡方分布
np.random.seed(1)
chi_S = stats.chi2.fit(data['Age'])
df_chi = chi_S[0]
loc_chi = chi_S[1]
scale_chi = chi_S[2]
chi2 = stats.chi2.rvs(df=df_chi, loc=loc_chi, scale=scale_chi, size=len(data['Age']))
stats.ks_2samp(data['Age'], chi2)

out:
Ks_2sampResult(statistic=0.0660112359550562, pvalue=0.08620902774082345)
# 对数据进行卡方拟合
plt.figure()
age.plot(kind = 'kde')
chiDistribution = stats.chi2(chi_S[0], chi_S[1],chi_S[2])  
# 绘制拟合的正态分布图
x = np.linspace(chiDistribution.ppf(0.01), chiDistribution.ppf(0.99), 100)
plt.plot(x, chiDistribution.pdf(x), c='orange')
plt.xlabel('age about Titanic')
plt.title('age on chi-square_Distribution', size=20)
plt.legend(['age', 'chi-square_Distribution'])

发布了33 篇原创文章 · 获赞 30 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/d345389812/article/details/103652360