版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiaoyangdetian/article/details/81665161
import numpy as np
# 场景问题:一个公司中有2500个新员工,他们入职后3个月内有一部分人参加了公司的培训,现有数据为2500个员工的薪资,以及是否参加培训的状态,
# 但因为公司的数据权限,不能给出所有2500个用户的数据,但可以给出50个员工的数据,现需要推断新员工的平均薪资,以及参加培训的比例
# 知识点:
# 有限总体的简单随机抽样:在上边的例子中,新员工的总体个数是有限的,它是个有限总体,在2500个员工中,任意抽取50个员工作为抽样的样本,这50
# 个员工都是以等可能性,即等概率的方式被抽取
salary_all = np.random.randint(low=3000, high=6000, size=2500) # 2500个员工的薪资随机生成,
training_all = np.random.randint(low=100, high=200, size=2500)
training_all = training_all % 2 # 0 未参加过培训 1 参加过培训
class SamplingDistribution(object):
def __init__(self):
return
def PointEstimation(self): # 点估计
# 简单随机抽样,抽取50个样本
salary_sample = np.random.choice(salary_all, size=50) # 样本薪资
training_sample = np.random.choice(training_all, size=50) # 样本是否参训
salary_mean = np.mean(salary_sample) # 点估计量,均值
print('salary_mean=', salary_mean) # 通过点估计值,可以推断2500个新员工的平均薪资为:salary_mean= 4443.46
training_p = np.sum(training_sample == 1) / len(training_sample) # 点估计量,概率值
print('training_p=', training_p) # 通过样本的点估计值,推断新员工中参加培训人员的比例为:training_p= 0.44
return salary_mean, training_p
def SamplingDistributionSpace(self): # 抽样分布
salary = list([]) # 每次抽样得到的薪资点估计值
training = list([]) # 每次抽样得到的是否参训比例的点估计值
n = 30 # 进行抽样30次
root_n = 0
while root_n < n:
s, t = self.PointEstimation()
salary.append(s)
training.append(t)
root_n = root_n + 1
# 每次抽样后的结果
print('salary=', salary)
print('training=', training)
# 每个抽样后得到的点估计值,可以看作一个样本,它服从正太分布,则可以求它的:均值,方差,标准差,协方差等值
result_s = np.mean(salary)
result_t = np.mean(training)
print('result_s=', result_s)
print('result_t=', result_t)
return
SampleWork = SamplingDistribution()
SampleWork.SamplingDistributionSpace()