1、样本数据处理**按照一定规则生成了1万男性+1万女性样本:**在配对实验中,这2万个样本具有各自不同的个人属性(财富、内涵、外貌),每项属性都有一个得分**财富值符合指数分布,内涵和颜值符合正态分布**三项的平均值都为60分,标准差都为15分要求:①构建函数实现样本数据生成模型,函数参数之一为“样本数量”,并用该模型生成1万男性+1万女性数据样本**包括三个指标:财富、内涵、外貌②绘制柱状图来查看每个人的属性分值情况提示:①正态分布:np.random.normal(loc=60,scale=15,size=n)②指数分布:np.random.exponential(scale=15,size=n)+45
#这里先生成99个男性、99个女性样本数据sample_m_test=create_sample(99,'m')sample_f_test=create_sample(99,'f')#设置好样本数据sample_m_test['strategy']=np.random.choice([1,2,3],99)#给男性赋值策略选择#1→择偶策略1#2→择偶策略2#3→择偶策略3
3、以99男+99女的样本数据,绘制匹配折线图要求:①生成样本数据,模拟匹配实验②生成绘制数据表格③bokhe制图**这里设置图例,并且可交互(消隐模式)提示:①bokeh制图时,y轴为男性,x轴为女性②绘制数据表格中,需要把男女性的数字编号提取出来,这样图表横纵轴好识别③bokhe绘制折线图示意:p.line([0,女性数字编号,女性数字编号],[男性数字编号,男性数字编号,0])
#生成绘制数据表格frombokeh.palettesimportbrewer#导入调色模块#设置调色盘graphdata1=match_success2.copy()graphdata1=pd.merge(graphdata1,sample_m2,left_on='m',right_index=True)graphdata1=pd.merge(graphdata1,sample_f2,left_on='f',right_index=True)#合并数据,得到成功配对的男女各项分值graphdata1['x']='0,'+graphdata1['f'].str[1:]+','+graphdata1['f'].str[1:]graphdata1['x']=graphdata1['x'].str.split(',')graphdata1['y']=graphdata1['m'].str[1:]+','+graphdata1['m'].str[1:]+',0'graphdata1['y']=graphdata1['y'].str.split(',')#筛选出id的数字编号,制作x,y字段round_num=graphdata1['round_n'].max()color=brewer['Blues'][round_num+1]#这里+1是为了得到一个色带更宽的调色盘,避免最后一个颜色太浅graphdata1['color']=''forrningraphdata1['round_n'].value_counts().index:graphdata1['color'][graphdata1['round_n']==rn]=color[rn-1]#设置颜色graphdata1=graphdata1[['m','f','strategy_type','round_n','score_x','score_y','x','y','color']]#筛选字段graphdata1.head()
#bokeh绘图p=figure(plot_width=500,plot_height=500,title="配对实验过程模拟示意",tools='reset,wheel_zoom,pan')#构建绘图空间fordataiingraphdata1.values:p.line(datai[-3],datai[-2],line_width=1,line_alpha=0.8,line_color=datai[-1],line_dash=[10,4],legend='round%i'%datai[3])#绘制折线p.circle(datai[-3],datai[-2],size=3,color=datai[-1],legend='round%i'%datai[3])#绘制点p.ygrid.grid_line_dash=[6,4]p.xgrid.grid_line_dash=[6,4]p.legend.location="top_right"p.legend.click_policy="hide"#设置其他参数show(p)
4、生成“不同类型男女配对成功率”矩阵图要求:①以之前1万男+1万女实验的结果为数据②按照财富值、内涵值、外貌值分别给三个区间,以区间来评判“男女类型”**高分(70-100分),中分(50-70分),低分(0-50分)**按照此类分布,男性女性都可以分为27中类型:财高品高颜高、财高品中颜高、财高品低颜高、...(财→财富,品→内涵,颜→外貌)③bokhe制图**散点图**27行*27列,散点的颜色深浅代表匹配成功率提示:①注意绘图的数据结构②这里散点图通过xy轴定位数据,然后通过设置颜色的透明度来表示匹配成功率③alpha字段为每种类型匹配成功率标准化之后的结果,再乘以一个参数→data['alpha']=(data['chance']-data['chance'].min())/(data['chance'].max()-data['chance'].min())*8
#匹配成功率计算success_n=len(graphdata2)success_chance=graphdata2.groupby(['type_m','type_f']).count().reset_index()success_chance['chance']=success_chance['m']/success_nsuccess_chance['alpha']=(success_chance['chance']-success_chance['chance'].min())/(success_chance['chance'].max()-success_chance['chance'].min())*8#设置alpha参数success_chance.head()
#bokeh绘图mlst=success_chance['type_m'].value_counts().index.tolist()flst=success_chance['type_f'].value_counts().index.tolist()source=ColumnDataSource(success_chance)#创建数据hover=HoverTool(tooltips=[("男性类别","@type_m"),("女性类别","@type_f"),("匹配成功率","@chance")])#设置标签显示内容p=figure(plot_width=800,plot_height=800,x_range=mlst,y_range=flst,title="不同类型男女配对成功率",x_axis_label='男',y_axis_label='女',#X,Y轴labeltools=[hover,'reset,wheel_zoom,pan,lasso_select'])#构建绘图空间p.square_cross(x='type_m',y='type_f',source=source,size=18,color='red',alpha='alpha')#绘制点p.ygrid.grid_line_dash=[6,4]p.xgrid.grid_line_dash=[6,4]p.xaxis.major_label_orientation="vertical"#设置其他参数show(p)