叮!你要的 Python 脱单攻略已送达

年关将至,学妹却因为男朋友不愿意带她回家过年而难过,我劝学妹主动点,自己多提几次,但是学妹觉得身为女孩子不能太主动。


于是,作为妇女之友的我打算用一个故事来开导学妹,我准备用Python作分析,拿数据说话:


“学妹呀,我来给你讲个故事~”




有一座城市,当地风俗是,想结婚的男子必须先向心仪的女子求婚,而女子则需要等待求婚。

牧师每年会邀请人数相同的适婚男女参与一次集体相亲。一次相亲活动可能有很多轮:


  • 男子会首先向自己最爱的女子求婚,女子则会在所有的追求者中选择她的最爱;

  • 如果男子被拒绝,下一轮会向他第二喜欢的女子求婚;

  • 上一轮已经订婚的女子如果得到她更爱的人的求婚,则会毫不留情地抛弃未婚夫,和更爱的人在一起;

  • 被抛弃的男子需要重新参与求婚。


如此反复,等大家都订婚,就举办集体婚礼。




聪明学妹马上抓住了重点:只要这个活动没有结束,女生就有机会选择她更爱的人!这对女生来说实在是太棒了,只要等着就会等到最合适的那个人!


我点点头:是的没错,但每个人对自己最终伴侣的满意度才是我们更应该关注的。虽然无法实地调查,但作为熟知Python语言和蒙特卡洛模拟方法的数据分析师,透过规律看结果还是非常简单的。看到结果你会明白一些道理。


640?wx_fmt=jpeg

蒙特卡罗方法:一种基于随机试验和统计计算的数值方法。


1


接下去,就用Python来分析这类婚配规则的最终结果。


我要用Python随机生成数量相等的男女,每个人都有自己的代号和对每一位异性的喜爱程度排名,再用计算机模拟求婚过程,最后看结果。多轮模拟的结果就会更接近真实值。



先生成男性群体——


man = pd.DataFrame( [['w'+str(i) for i in random.sample(range(1,women_num+1),women_num)] 
                      for i in range(man_num)],
                    index = ['m'+str(i) for i in range(1,man_num+1)],
                    columns = ['level'+str(i) for i in range(1,women_num+1)]
                    )


人数设定为100人,生成的结果是这样的,包含每个人的代号,和对异性群体中每个人的喜好程度:


640?wx_fmt=gif


2


  • 每天上午,每位还没订婚的男子,会向还没拒绝过他的女子中,他最爱的那一个求婚;

  • 每天下午,每位女性会在自己接到的求婚信中,选择她最中意的男子接受求婚;如果没接到求婚,就继续等待。


这个过程实现起来可能要等很多天,但我们有Python就方便许多~部分代码长这样:


print('======测试集{}模拟开始====='.format(i))
print('=====开始模拟求婚过程=====')
level_num = 0
while man_ismapping['love_level'].min() == 0:
level_num += 1
print('=====开始第{}天婚姻配对====='.format(level_num))
u_mapping_man = man_ismapping[man_ismapping.target == 'n'].index.tolist()

*完整代码请看文末~


运行起来是这样的:


640?wx_fmt=gif


3


学妹看着正在运行的模拟过程有点着急了,于是我抽取其中一轮的结果:


640?wx_fmt=jpeg

纵轴代表该次模拟结果中,某位男性/女性的伴侣喜爱排名,即:匹配到的伴侣是他/她第X喜欢的异性。


男性更容易得到自己较为喜爱的另一半!这可和学妹最开始的预期差的有点多啊!


学妹陷入了困惑:明明随着匹配轮次增加,男性的伴侣总是从自己最喜欢的对象慢慢变成不那么喜欢的对象;而女性伴侣却在一步步变好。你会不会弄错了啊!


我:Python在手,100次模拟我有~看看这么多次模拟中,男性/女性匹配到的伴侣情况吧~


640?wx_fmt=jpeg

*纵轴代表其中一次模拟中,男性/女性的平均伴侣喜爱排名均值,即:匹配到的伴侣是他们/她们第X喜欢的异性。


可以明显看到,男性对自己最终匹配到的伴侣的喜爱程度,普遍高于女性。


学妹终于收起了质疑:原来主动出击真有这么大的作用!


我点点头:你看,男性在主动做出选择之时,每次都能选择自己最喜欢的对象。这个游戏保证男孩的伴侣是可能和他在一起的最好的那一个,但对女孩就不是。


640?wx_fmt=jpeg


故事到这里就结束了,学妹明白了主动出击的重要性跑去找她的男朋友了,我这手Python数据分析技能又被学妹夸了一番。


说到Python数据分析,我就不得不说我在1月15日的直播,编程能力和数据分析能力都不落下,要是各位感兴趣可以来听听,免费的哦!


Part.1

免费直播课


第一场

《数据研究可以套路化吗?》

<1月15日 周二 20:00>


直播大纲

(1)一个数据分析师的成长之路

(2)分析方法可以套路化吗?

(3)数学基础和代码能力是必修门槛吗?

(4)如何系统化构建你的数据分析技能体系


第二场

《为什么数据分析师现在都要求写代码?》

<1月23日 周三 20:00>


直播大纲

(1)效率问题:如何工程化你的数据工作流?

(2)Python开源工具体系介绍

(3)数据分析师的蜕变—— 算法模型构建

(4)案例演示,用数据模拟现实场景问题


Part.2

《一周时间体验Python数据分析》


640?wx_fmt=jpeg


课程大纲

(1)会写代码的数据分析师是怎么样的存在?

(2)武装你的电脑:Python环境搭建及软件安装

(3)手把手教你用数据挖掘“成为领导的秘诀”

(4)怎样做出专业且高逼格的数据可视化

(5)模拟实验:排队等待时间问题


Part.3

免费资料和代码分享


文中的Gale-Shapley算法完整代码和资料


【6G】数据分析综合学习资料

640?wx_fmt=jpeg


Part.4

答疑助力+福利获取方式

扫码加入QQ群,即可免费获取以上所有福利

群号:616310703


640?wx_fmt=png


美好的事物不等人,记得主动出击噢~


主动一点,点击【阅读原文】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值