婚恋配对模拟规则
- 按照一定规则生成了1万男性+1万女性样本:
- 在配对实验中,这2万个样本具有各自不同的个人属性(财富、内涵、外貌),每项属性都有一个得分
- 财富值符合指数分布,内涵和颜值符合正态分布
- 三项的平均值都为60分,标准差都为15分
- 模拟实验。基于现实世界的提炼及适度简化,我们概括了三个最主流的择偶策略:
- 择偶策略1:门当户对,要求双方三项指标加和的总分接近,差值不超过20分
- 择偶策略2:男才女貌,男性要求女性的外貌分比自己高出至少10分,女性要求男性的财富分比自己高出至少10分
- 择偶策略3:志趣相投、适度引领,要求对方的内涵得分在比自己低10分~高10分的区间内,且外貌和财富两项与自己的得分差值都在5分以内
- 每一轮实验中,我们将三种策略随机平分给所有样本(即采用每种策略的男性有3333个样本)
- 我们为每位单身男女随机选择一个对象,若双方互相符合要求就算配对成功,配对失败的男女则进入下一轮配对
样本数据处理
内容:
- 按照一定规则生成了1万男性+1万女性样本
- 在配对实验中,这2万个样本具有各自不同的个人属性(财富、内涵、外貌),每项属性都有一个得分
- 财富值符合指数分布,内涵和颜值符合正态分布
-
要求:
构建函数实现样本数据生成模型,函数参数之一为“样本数量”,并用该模型生成1万男性+1万女性数据样本
- 包括三个指标:财富、内涵、外貌
-
提示:
正态分布:np.random.normal(loc=60, scale=15, size=n)
- 指数分布:np.random.exponential(scale=15, size=n) + 45
导入库
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport osimport time#导入时间模块import warningswarnings.filterwarnings('ignore')#不发出警告from bokeh.plotting import figure, show, output_filefrom bokeh.models import ColumnDataSource#导入boekh绘图模块
创建数据
在这里首先,使用Pandas库创建“正态分布”的数据和“指数分布”的数据,然后绘制成柱状图观察一下数据的变化趋势,代码和结果如下:
'''(1)创建数据'''data_norm = pd.DataFrame({'正态分布': np.random.normal(loc = 60, scale = 15, size = 10000)})data_exp = pd.DataFrame({'指数分布': np.random.exponential(scale =15, size = 10000) + 45})fig, axes = plt.subplots(2, 1, figsize = (10, 4))data_norm.hist(bins = 50)data_exp.hist(bins = 50)
构建函数,生成样本数据
'''(2)构建一个函数,生成样本数据'''def create_sample(n, gender):sample_data = pd.DataFrame({'fortune':np.random.exponential(scale = 15, size = n) + 45,'apperance': np.random.normal(loc = 60, scale = 15, size = n),'character': np.random.normal(loc = 60, scale = 15, size = n)},index = [gender + str(i) for i in range(1, n+1)])sample_data.index.name = 'id'sample_data['score'] = sample_data.sum(axis = 1)/3return sample_datasample_m = create_sample(10000, 'm') #男性样本数据sample_f = create_sample(10000, 'f') #女性样本数据
生成堆叠柱状图
fig, axes = plt.subplots(2, 1, figsize = (12, 8))sample_m[['fortune', 'apperance', 'character']].iloc[:30].plot(kind = 'bar',colormap = 'Blues_r', stacked = True, grid = True, ax = axes[0])sample_f[['fortune', 'apperance', 'character']].iloc[:30].plot(kind = 'bar',colormap = 'Reds_r', stacked = True, grid = True, ax = axes[1 ])#绘制堆叠柱状图


