年關(guān)將至,學(xué)妹卻因?yàn)槟信笥巡辉敢鈳丶疫^年而難過,我勸學(xué)妹主動點(diǎn),自己多提幾次,但是學(xué)妹覺得身為女孩子不能太主動。
于是,作為婦女之友的我打算用一個故事來開導(dǎo)學(xué)妹,我準(zhǔn)備用Python作分析,拿數(shù)據(jù)說話:
“學(xué)妹呀,我來給你講個故事~”
有一座城市,當(dāng)?shù)仫L(fēng)俗是,想結(jié)婚的男子必須先向心儀的女子求婚,而女子則需要等待求婚。
牧師每年會邀請人數(shù)相同的適婚男女參與一次集體相親。一次相親活動可能有很多輪:
男子會首先向自己最愛的女子求婚,女子則會在所有的追求者中選擇她的最愛;
如果男子被拒絕,下一輪會向他第二喜歡的女子求婚;
上一輪已經(jīng)訂婚的女子如果得到她更愛的人的求婚,則會毫不留情地拋棄未婚夫,和更愛的人在一起;
被拋棄的男子需要重新參與求婚。
如此反復(fù),等大家都訂婚,就舉辦集體婚禮。
聰明學(xué)妹馬上抓住了重點(diǎn):只要這個活動沒有結(jié)束,女生就有機(jī)會選擇她更愛的人!這對女生來說實(shí)在是太棒了,只要等著就會等到最合適的那個人!
我點(diǎn)點(diǎn)頭:是的沒錯,但每個人對自己最終伴侶的滿意度才是我們更應(yīng)該關(guān)注的。雖然無法實(shí)地調(diào)查,但作為熟知Python語言和蒙特卡洛模擬方法的數(shù)據(jù)分析師,透過規(guī)律看結(jié)果還是非常簡單的??吹浇Y(jié)果你會明白一些道理。
蒙特卡羅方法:一種基于隨機(jī)試驗(yàn)和統(tǒng)計計算的數(shù)值方法。
1
接下去,就用Python來分析這類婚配規(guī)則的最終結(jié)果。
我要用Python隨機(jī)生成數(shù)量相等的男女,每個人都有自己的代號和對每一位異性的喜愛程度排名,再用計算機(jī)模擬求婚過程,最后看結(jié)果。多輪模擬的結(jié)果就會更接近真實(shí)值。
先生成男性群體——
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)]
)
人數(shù)設(shè)定為100人,生成的結(jié)果是這樣的,包含每個人的代號,和對異性群體中每個人的喜好程度:
2
每天上午,每位還沒訂婚的男子,會向還沒拒絕過他的女子中,他最愛的那一個求婚;
每天下午,每位女性會在自己接到的求婚信中,選擇她最中意的男子接受求婚;如果沒接到求婚,就繼續(xù)等待。
這個過程實(shí)現(xiàn)起來可能要等很多天,但我們有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()
*完整代碼請看文末~
運(yùn)行起來是這樣的:
3
學(xué)妹看著正在運(yùn)行的模擬過程有點(diǎn)著急了,于是我抽取其中一輪的結(jié)果:
縱軸代表該次模擬結(jié)果中,某位男性/女性的伴侶喜愛排名,即:匹配到的伴侶是他/她第X喜歡的異性。
男性更容易得到自己較為喜愛的另一半!這可和學(xué)妹最開始的預(yù)期差的有點(diǎn)多?。?/span>
學(xué)妹陷入了困惑:明明隨著匹配輪次增加,男性的伴侶總是從自己最喜歡的對象慢慢變成不那么喜歡的對象;而女性伴侶卻在一步步變好。你會不會弄錯了?。?/span>
我:Python在手,100次模擬我有~看看這么多次模擬中,男性/女性匹配到的伴侶情況吧~
*縱軸代表其中一次模擬中,男性/女性的平均伴侶喜愛排名均值,即:匹配到的伴侶是他們/她們第X喜歡的異性。
可以明顯看到,男性對自己最終匹配到的伴侶的喜愛程度,普遍高于女性。
學(xué)妹終于收起了質(zhì)疑:原來主動出擊真有這么大的作用!
我點(diǎn)點(diǎn)頭:你看,男性在主動做出選擇之時,每次都能選擇自己最喜歡的對象。這個游戲保證男孩的伴侶是可能和他在一起的最好的那一個,但對女孩就不是。
故事到這里就結(jié)束了,學(xué)妹明白了主動出擊的重要性跑去找她的男朋友了,我這手Python數(shù)據(jù)分析技能又被學(xué)妹夸贊了一番。