南大《探索数据的奥秘》课件示例代码笔记09

简介: 南大《探索数据的奥秘》课件示例代码笔记09

Chp6-2

In [2]: import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
from scipy.stats import t
np.random.seed(1234)
my_data1=stats.poisson.rvs(loc=10,mu=60,size=3000) # 生成一个规定均值的泊松分布
#pd.Series(my_data1).hist().get_figure().show
#print(' 第一个分布的均值是: 70,\t 统计平均是: ',my_data1.mean())
my_data2=stats.poisson.rvs(loc=10,mu=15,size=6000)
#pd.Series(my_data2).hist().get_figure().show
#print(' 第二个分布的均值是: 25,统计平均是: ',my_data2.mean())
my_data=np.concatenate((my_data1,my_data2))
# 一个典型的 bi-model 分布,我们以这 9000 个数作为总体
#print(' 总体的均值为: ',my_data.mean()) # 假装我们不知道
# 现在根据样本,验证 H0: 总体的均值是 47.5
# 这是单样本双边 t 检验, one-sample t-test
print('空假设 H0 是:总体的均值是 47.5 \n')
sample_data=np.random.choice(a=my_data,size=100) # 从中随机抽取 100 个做样本
t_statistic,p_value=stats.ttest_1samp(a=sample_data,popmean=47.5)
print('从样本构造的 t 统计量 = ',t_statistic)
#t 的绝对值越大, p 值越小,可参见下面的 t-分布图
print('单样本双边检验的 p = ',p_value)
# 画一下样本容量为 100 时的 t 分布曲线
df=100-1
x = np.linspace(stats.t.ppf(0.00000001,df),stats.t.ppf(0.99999999,df),100)
#ppf 函数是 CDF 的逆函数,用来求分位点
plt.plot(x, t.pdf(x, df)) #pdf 生成概率密度函数表
plt.plot((t_statistic,t_statistic),(-0.01,0.4),'-.r')
str_legend=('t distribution','calculated t')
plt.legend(str_legend)
plt.show()
空假设 H0 是:总体的均值是 47.5
从样本构造的 t 统计量 = -3.7405281096559153
单样本双边检验的 p = 0.00030786517310847877

20210607111309662.png

In [3]: x = np.linspace(stats.t.ppf(0.00000001,df),stats.t.ppf(0.99999999,df),100)
#ppf 函数是 CDF 的逆函数,用来求分位点
plt.plot(x, t.pdf(x, df)) #pdf 生成概率密度函数表
plt.plot((t_statistic,t_statistic),(-0.01,0.4),'-.r')
str_legend=('t distribution','calculated t')
plt.legend(str_legend)
x_025=stats.t.ppf(0.025,df)
# 注意:同样选取 alpha=0.5,做双边 test 时要给左、右两侧各分配 0.25
plt.plot((x_025,x_025),(-0.01,0.4),'--g') # 这根线是双边检验的左阈值
x_975=stats.t.ppf(0.975,df)
plt.plot((x_975,x_975),(-0.01,0.4),'--g') # 这根线是双边检验的右阈值
#print(x_975)
rect1=plt.Rectangle((x_025,0),x_975*2,0.5,color='g',alpha=0.25)
plt.gca().add_patch(rect1)
rect2=plt.Rectangle((x_975,0),5,0.5,color='r',alpha=0.25)
plt.gca().add_patch(rect2)
rect3=plt.Rectangle((x_025,0),-5,0.5,color='r',alpha=0.25)
plt.gca().add_patch(rect3)
#plt.ylim(-0.02,0.5)
plt.text(x_025,0.4,'accept region') # 图片上不支持中文
#plt.savefig('111.png') # 不支持中文文件名
plt.show()

20210607111638419.png

In [36]: print('p = ',p_value,'\n')
alpha=0.05
if p_value>=0.05:
print('\033[1;31m 接受 \033[0m H0')
else:
print('\033[1;31m 拒绝
\033[0m H0, 即总体的均值不等于 47.5,此时错误拒绝 H0 的概率为
',p_value,'小于显著性水平')
p = 0.00030786517310847877
拒绝 H0, 即总体的均值不等于 47.5,此时错误拒绝 H0 的概率为 0.00030786517310847877
小于显著性水平
In [18]: import numpy as np
import pandas as pd
from scipy import stats
from scipy.stats import t
import matplotlib.pyplot as plt
str_legend=('t distribution','alpha=0.05 threshod','alpha=0.025 threshold',\
'alpha=0.975 threshold','real t')
# 画一下样本容量为 100 时的 t 分布曲线
df=100-1
#a=0.05 # 自定义的显著性水平
x = np.linspace(stats.t.ppf(0.00000001,df),stats.t.ppf(0.99999999,df),100)
#ppf 函数是 CDF 的逆函数,用来求分位点
plt.plot(x, t.pdf(x, df), alpha=1)
# 注意此 alpha 是 plot 方法中的透明度参数,不是显著性参数
x_05=stats.t.ppf(0.05,df) #p(t<x_05)=0.05
#print(x_05)
plt.plot((x_05,x_05),(-0.01,0.4),'--') # 这根线是单边检验的阈值
x_025=stats.t.ppf(0.025,df)
# 注意:同样选取 alpha=0.5,做双边 test 时要给左、右两侧各分配 0.25
plt.plot((x_025,x_025),(-0.01,0.4),'--g') # 这根线是双边检验的左阈值
x_975=stats.t.ppf(0.975,df)
plt.plot((x_975,x_975),(-0.01,0.4),'--g') # 这根线是双边检验的右阈值
t_real=stats.t.ppf(p_value/2,df)
# 上一个 cell 中我们做的是双边 t-test,因此这里找分位点时, p 值要除以 2
print('从样本获得的 t 统计量是',t_real)
plt.plot((x_real,x_real),(-0.01,0.4),'-.r')
# 各阈值截断的曲线下面积对应 I 型错误率
plt.legend(str_legend)
plt.show()
从样本获得的 t 统计量是 -3.740528109655912

2021061009004469.png

In [58]: np.random.seed(1234)
my_data1=stats.poisson.rvs(loc=10,mu=60,size=3000) # 生成一个规定均值的泊松分布
#pd.Series(my_data1).hist().get_figure().show
#print(' 第一个分布的均值是: 70,\t 统计平均是: ',my_data1.mean())
my_data2=stats.poisson.rvs(loc=10,mu=15,size=6000)
#pd.Series(my_data2).hist().get_figure().show
#print(' 第二个分布的均值是: 25,统计平均是: ',my_data2.mean())
my_data=np.concatenate((my_data1,my_data2))
# 一个典型的 bi-model 分布,我们以这 9000 个数作为总体
my_sample={}
for n in range(2):
my_sample[n]=np.random.choice(a=my_data,size=100) # 从中随机抽取 100 个做样本
print('第',n,'组样本的均值为',my_sample[n].mean())
print('根据样本均值,能否下结论说两组样本来源的总体其均值不相等呢? ')
# 需进行 two sample t-test
#H0: 两样本均值相等
第 0 组样本的均值为 39.3
第 1 组样本的均值为 41.14
根据样本均值,能否下结论说两组样本来源的总体均值不相等呢?
In [59]: # 能否下结论说两组样本来源的总体其均值不相等呢?
# 需进行 two sample t-test
#H0: 两样本均值相等
alpha=0.01 # 设置显著性水平
t_statistic,p_value=stats.ttest_rel(a=my_sample[0],b=my_sample[1])
#sample size 相等的双样本均值比较
print('t = ',t_statistic)
print('p = ',p_value)
if p_value<=alpha:
print('\033[1;31m 拒绝 \033[0m H0:两样本来源的总体均值相等 ')
else:
print('\033[1;31m 接受 \033[0m the H0: 两样本来源的总体均值相等')
t = -0.5797156447793128
p = 0.5634233550606108
接受 the H0: 两样本来源的总体均值相等
In [1]: #Titanic 数据存活人的类别分析
# 探究性别与存活是否为关联事件
# 如果性别与存活与否无关,则存活人群中的性别比应与全体人的一致,全体是什么?
# 是船上所有人,还是所有人(即 0.5:0.5)
import pandas as pd
import numpy as np
from scipy import stats
from scipy.stats import chi2
from matplotlib import pyplot as plt
titanic = pd.read_csv("C:\Python\Scripts\my_data\Titanic.csv")
# 对全体做性别统计
mask1=titanic['Sex']=='male'
mask2=titanic['Sex']=='female'
p=np.array([sum(mask1)/(sum(mask1)+sum(mask2)),sum(mask2)/(sum(mask1)+sum(mask2))])
print(p)
mask_survived=titanic['Survived']==0
# 如果反过来做,活着的人中,性别比满足 p 吗?请同学们验证
my_population=titanic.loc[mask_survived,'Sex']
print(type(my_population))
pop_size=my_population.count()
print('总体大小是 ',pop_size)
sample=my_population
E=pop_size*p
print( '预期的男、女个数是 ',E)
mask1=sample=='male'
mask2=sample=='female'
my_set1=sample[mask1]
my_set2=sample[mask2]
O=np.array([len(my_set1),len(my_set2)])
print('实际的男女个数是 ',O)
chi_squard,p_value=stats.chisquare(f_obs=O,f_exp=E)
print(chi_squard,p_value)
a=0.05
df=1 # 只有两个类别,因此自由度是 2-1=1
if p_value<=a:
print('我们 \033[1;31m 拒绝 \033[0m 男性女性具有相同死亡率的假设.')
else:
print('我们 \033[1;31m 接受 \033[0m 男性女性具有相同死亡率的假设')
# 请同学们尝试分析仓位等级、登船码头与存活率之间是否有关联
[0.64758698 0.35241302]
<class 'pandas.core.series.Series'>
总体大小是 549
预期的男、女个数是 [355.52525253 193.47474747]
实际的男女个数是 [468 81]
100.96890721903955 9.343874013954211e-24
我们 拒绝 男性女性具有相同死亡率的假设.
目录
相关文章
|
7月前
|
存储 算法 C++
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(上)
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(上)
32 0
|
7月前
|
存储 算法 搜索推荐
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(下)
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(下)
39 0
|
12月前
南大《探索数据的奥秘》课件示例代码笔记04
南大《探索数据的奥秘》课件示例代码笔记04
95 0
|
12月前
南大《探索数据的奥秘》课件示例代码笔记06
南大《探索数据的奥秘》课件示例代码笔记06
61 0
|
12月前
南大《探索数据的奥秘》课件示例代码笔记07
南大《探索数据的奥秘》课件示例代码笔记07
56 0
|
12月前
南大《探索数据的奥秘》课件示例代码笔记14
南大《探索数据的奥秘》课件示例代码笔记14
57 0
|
12月前
南大《探索数据的奥秘》课件示例代码笔记02
南大《探索数据的奥秘》课件示例代码笔记02
54 0
|
12月前
南大《探索数据的奥秘》课件示例代码笔记16
南大《探索数据的奥秘》课件示例代码笔记16
45 0
|
12月前
南大《探索数据的奥秘》课件示例代码笔记08
南大《探索数据的奥秘》课件示例代码笔记08
46 0
|
12月前
南大《探索数据的奥秘》课件示例代码笔记11
南大《探索数据的奥秘》课件示例代码笔记11
67 0