用 Python 分析了 5 萬條相親數據,告訴你男女相親背後的秘密

2021-02-20 CSDN

來源 | 轉載自修煉 Python(ID:yetingyun_python)

前言


數據來源:https://www.zhenai.com/zhenghun/
本文利用 Python 分析了按城市尋找所有地區的徵婚信息,看看相親男女的畫像。

import pandas as pdimport re

df = pd.read_excel('marriage.xlsx')df.head()

獲取到的數據裡,居住地是各地區的,為了便於分析,需要處理成省級行政區,學歷/月薪那一列數據,有些是月薪,有些是學歷,可以分別處理成兩列數據,是學歷的,提取出學歷層次,月薪標記為 「未知」;是月薪的,提取出月薪並計算,學歷標記為 「未知」。

with open('地區.txt', 'r', encoding='utf-8') as f:    area = f.read().split('\n')
print(area)print(len(area))

['北京', '上海', '天津', '重慶', '黑龍江', '吉林', '遼寧', '內蒙古', '河北', '新疆', '甘肅', '青海', '陝西', '寧夏', '河南', '山東', '山西', '安徽', '湖北', '湖南', '江蘇', '四川', '貴州', '雲南', '廣西', '西藏', '浙江', '江西', '廣東', '福建', '臺灣', '海南', '香港', '澳門']34
areas_list = []for i in df['居住地']: for j in area: if j in i: areas_list.append(j) break else: areas_list.append('未知')
df['居住地'] = areas_listdf.head()

結果如下:

with open('學歷.txt', 'r', encoding='utf-8') as fp:    edu = fp.read().split('\n')
print(edu)

['博士', '碩士', '本科', '大專', '中專', '高中', '初中', '小學']
salary_list = []edu_list = []for item in df['學歷/月薪']: if '元' in item: # 這一列的數據是表達月薪的話 計算 data = re.findall('\d+', item) data = [int(x) for x in data] salary = int(sum(data) / len(data)) # 取整 salary_list.append(salary) edu_list.append('未知') else: salary_list.append('未知') for e in edu: if e in item: edu_list.append(e) break else: edu_list.append('未知')
print(len(edu_list))print(len(salary_list))df['學歷'] = edu_listdf['月薪'] = salary_listdf.head()

結果如下:
這時候數據處理好了,可以刪掉學歷/月薪這一列,再重新保存到Excel。

df.to_excel('處理後數據.xlsx', index=False)


數據分析


"""@File    :男女佔比情況.py@Author  :葉庭雲@CSDN    :https://yetingyun.blog.csdn.net/"""import pandas as pdimport collectionsfrom pyecharts.charts import Piefrom pyecharts import options as optsfrom pyecharts.globals import ThemeType, CurrentConfig
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_excel('處理後數據.xlsx')gender = list(df['性別'])gender_count = collections.Counter(gender).most_common()gender_count = [(k, v) for k, v in gender_count]
pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))pie.add('性別', data_pair=gender_count, radius=["40%", "55%"], label_opts=opts.LabelOpts( position="outside", formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ", background_color="#eee", border_color="#aaa", border_width=1, border_radius=4, rich={ "a": {"color": "#999", "lineHeight": 22, "align": "center"}, "abg": { "backgroundColor": "#e3e3e3", "width": "100%", "align": "right", "height": 22, "borderRadius": [4, 4, 0, 0], }, "hr": { "borderColor": "#aaa", "width": "100%", "borderWidth": 0.5, "height": 0, }, "b": {"fontSize": 16, "lineHeight": 33}, "per": { "color": "#eee", "backgroundColor": "#334455", "padding": [2, 4], "borderRadius": 2, }, }, ),)pie.set_global_opts(title_opts=opts.TitleOpts(title='相親男女佔比情況'))pie.set_colors(['red', 'blue']) pie.render('男女佔比情況.html')

相親男女中男士有 25910 人,佔比 45.72%;女士有 30767 人,佔比 54.28%。參加相親人數中女士多於男士。

"""@File    :年齡分布.py@Author  :葉庭雲@CSDN    :https://yetingyun.blog.csdn.net/"""import pandas as pdimport collectionsfrom pyecharts.charts import Barfrom pyecharts.globals import ThemeType, CurrentConfigfrom pyecharts import options as opts
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_excel('處理後數據.xlsx')age = list(df['年齡'])age_count = collections.Counter(age).most_common()age_count.sort(key=lambda x: x[0])age = [x[0] for x in age_count]nums = [y[1] for y in age_count]
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))bar.add_xaxis(age)bar.add_yaxis('人數', nums) bar.set_global_opts(title_opts=opts.TitleOpts(title='相親男女年齡分布'))bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False), markpoint_opts=opts.MarkPointOpts( data=[ opts.MarkPointItem(type_="max", name="最大值"), opts.MarkPointItem(type_="min", name="最小值"), opts.MarkPointItem(type_="average", name="平均值")]), markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_="average", name="平均值")]))bar.render('年齡分布.html')


31 歲的相親男女人數最多,有 2637 人,各個年齡段都有一定數量的人,我們將年齡小於等於 20 歲,大於等於 70 歲的相親男女數據單獨提取出來看看。

import pandas as pd
df = pd.read_excel('處理後數據.xlsx')df1 = df[df['年齡'] <= 20]df2 = df1['婚況'].value_counts() print(df2)
結果如下:未婚 153離異 6喪偶 2Name: 婚況, dtype: int64

大部分是未婚,年紀輕輕就那麼急著相親嗎?再看看婚況是離異、喪偶的數據,

import pandas as pd
df = pd.read_excel('處理後數據.xlsx')df1 = df[df['年齡'] <= 20]
df3 = df1[df1['婚況'] == '離異']print(df3)

                網名  性別  ...  學歷     月薪17425          微風輕起  男士  ...  未知  5000029645            媳婦  女士  ...  大專     未知30398            仙妹  女士  ...  高中     未知30485  會員1415395937  男士  ...  未知  3500036684         微笑著變老  女士  ...  高中     未知49864        風吹動了風玲  女士  ...  高中     未知
[6 rows x 9 columns]

月薪寫著 50000、35000 的男士有些顯眼啊,取數據集中查看。

月薪 50000 的微風輕起,徵婚信息年齡寫的 19,徵婚宣言裡又寫到 1994 年 26 歲;月薪 35000 的會員某某某,徵婚信息年齡寫的 20,徵婚宣言裡又寫到 81 年的,看來網站裡年齡、身高這些信息真實性值得懷疑。

"""@File    :男女佔比情況.py@Author  :葉庭雲@CSDN    :https://yetingyun.blog.csdn.net/"""import pandas as pdimport collectionsfrom pyecharts.charts import Piefrom pyecharts import options as optsfrom pyecharts.globals import ThemeType, CurrentConfig
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_excel('處理後數據.xlsx')data = df[df['婚況'] != '未填寫']data_count = collections.Counter(data['婚況']).most_common()print(data)
c = ( Pie() .add( "婚況", data_count, radius=["40%", "55%"], label_opts=opts.LabelOpts( position="outside", formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ", background_color="#eee", border_color="#aaa", border_width=1, border_radius=4, rich={ "a": {"color": "#999", "lineHeight": 22, "align": "center"}, "abg": { "backgroundColor": "#e3e3e3", "width": "100%", "align": "right", "height": 22, "borderRadius": [4, 4, 0, 0], }, "hr": { "borderColor": "#aaa", "width": "100%", "borderWidth": 0.5, "height": 0, }, "b": {"fontSize": 16, "lineHeight": 33}, "per": { "color": "#eee", "backgroundColor": "#334455", "padding": [2, 4], "borderRadius": 2, }, }, ), ) .set_colors(["#8B008B", "#FF1493", "#000000"]) .set_global_opts(title_opts=opts.TitleOpts(title="相親男女婚況")) .render("pie_rich_label.html"))


相親男女婚況,離異的佔比 57.67%,未婚佔比 34.14%,喪偶佔比 8.19%。

"""@File    :學歷分布.py@Author  :葉庭雲@CSDN    :https://yetingyun.blog.csdn.net/"""import pandas as pdimport collectionsfrom pyecharts.charts import Piefrom pyecharts import options as optsfrom pyecharts.globals import CurrentConfig
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_excel('處理後數據.xlsx')data = df[df['學歷'] != '未知']data_count = collections.Counter(data['學歷']).most_common()c = ( Pie(init_opts=opts.InitOpts(width="800px", height="500px", bg_color="#2c343c")) .add( series_name="相親男女學歷", data_pair=data_count, rosetype="radius", radius="55%", center=["50%", "50%"], label_opts=opts.LabelOpts(is_show=False, position="center"), ) .set_colors(["#00BFFF", "#00FF7F", "#FF1493", "#8B008B", "#FFFF00", "#556B2F"]) .set_global_opts( title_opts=opts.TitleOpts( title="相親男女學歷", pos_left="center", pos_top="20", title_textstyle_opts=opts.TextStyleOpts(color="#fff"), ), legend_opts=opts.LegendOpts(is_show=False), ) .set_series_opts( tooltip_opts=opts.TooltipOpts( trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)" ), label_opts=opts.LabelOpts(color="#fff"), ) .render("相親男女學歷.html"))


相親男女學歷大部分在高中(35.92%)、大專(24.72%),有近六成的相親男女,本科佔比 20.7%,中專佔比 16.35%,碩士、博士高學歷的相親男女人數較少,分別佔比 2.14%,0.17%。

"""@File    :地區分布.py@Author  :葉庭雲@CSDN    :https://yetingyun.blog.csdn.net/"""import pandas as pdimport collectionsfrom pyecharts import options as optsfrom pyecharts.charts import Geofrom pyecharts.globals import ChartTypefrom pyecharts.globals import ThemeType, CurrentConfig
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_excel('處理後數據.xlsx')area = list(df['居住地'])area_count = collections.Counter(area).most_common(34)print(area_count)
geo = Geo(init_opts=opts.InitOpts(width='1000px', height='600px', theme=ThemeType.DARK))geo.add_schema(maptype='china', label_opts=opts.LabelOpts(is_show=True))geo.add('相親男女人數', data_pair=area_count, type_=ChartType.EFFECT_SCATTER)geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) geo.set_global_opts(title_opts=opts.TitleOpts(title="相親男女地區分布"), visualmap_opts=opts.VisualMapOpts(max_=5000, is_piecewise=True, pieces=[{"max": 1000, "min": 100, "label": "100-1000", "color": "#708090"}, {"max": 1500, "min": 1001, "label": "1001-1500", "color": "#00008B"}, {"max": 2000, "min": 1501, "label": "1501-2000", "color": "#483D8B"}, {"max": 2500, "min": 2001, "label": "2001-2500", "color": "#1E90FF"}, {"max": 3000, "min": 2501, "label": "2501-3000", "color": "#8B008B"}, {"max": 5000, "min": 3001, "label": ">=3000", "color": "#FF0000"}]) )geo.render('地區分布.html')

[('重慶', 4436), ('廣東', 2637), ('四川', 2519), ('山東', 2398), ('河南', 2160), ('上海', 2156), ('雲南', 2039), ('北京', 2037), ('臺灣', 1997), ('安徽', 1920), ('江蘇', 1919), ('天津', 1918), ('黑龍江', 1918), ('湖南', 1800), ('新疆', 1799), ('遼寧', 1680), ('甘肅', 1680), ('廣西', 1679), ('湖北', 1679), ('內蒙古', 1559), ('山西', 1440), ('福建', 1440), ('江西', 1440), ('浙江', 1440), ('陝西', 1439), ('河北', 1439), ('青海', 1339), ('貴州', 1200), ('吉林', 1080), ('西藏', 942), ('寧夏', 702), ('海南', 360), ('香港', 353), ('澳門', 117)]

徵婚宣言一般是介紹自己情況,表達對另一半的要求和期望,下面我們分別來看看相親男女徵婚宣言裡關鍵詞都有些什麼。

"""@File    :徵婚宣言詞雲.py@Author  :葉庭雲@CSDN    :https://yetingyun.blog.csdn.net/"""import pandas as pdimport jiebaimport collectionsimport refrom wordcloud import WordCloudimport matplotlib.pyplot as pltimport numpy as npfrom PIL import Image
df = pd.read_excel('處理後數據.xlsx')[['性別', '徵婚宣言']]df2 = df[df['性別'] == '女士']['徵婚宣言']
with open('stop_words.txt', encoding='utf-8') as f: con = f.read().split('\n') stop_words = set() for i in con: stop_words.add(i)
result_list = []for data in df2: new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S) new_data = "/".join(new_data) seg_list_exact = jieba.cut(new_data, cut_all=True) for word in seg_list_exact: if word not in stop_words and len(word) > 1: result_list.append(word)
print(result_list)word_counts = collections.Counter(result_list)mask_ = 255 - np.array(Image.open('woman_mask.png'))my_cloud = WordCloud( background_color='white', mask=mask_, font_path='simhei.ttf', max_font_size=112, min_font_size=12, random_state=88 ).generate_from_frequencies(word_counts)
plt.figure(figsize=(8, 5), dpi=200)plt.imshow(my_cloud, interpolation='bilinear')plt.axis('off')plt.savefig('woman_cloud.png', dpi=200)plt.show()

結果如下:
相親男女徵婚宣言裡,喜歡、希望、生活、善良、真誠、真心、幸福、性格都是出現頻率高的詞語。

程式設計師如何避免陷入「內卷」、選擇什麼技術最有前景,中國開發者現狀與技術趨勢究竟是什麼樣?快來參與「2020 中國開發者大調查」,更有豐富獎品送不停!

☞估值飆至 280 億美元,Databricks G 輪融資 10 億美元,誰說開源不掙錢?

☞編程網站 Perl.com 被劫,售價 19 萬美元

相關焦點

  • 男女相親做好這5點,一定會幸福
    單身男女去相親都是為了遇到對的人,收穫幸福。那怎麼判斷相親對象是否適合自己?與什麼樣的人結婚才會幸福? 4、相親雙方達成默契 相親男女在一起的前提條件是雙方要能達成默契。 兩個人的默契,可以慢慢將兩顆心的距離縮短,在無意識中漸漸靠近彼此。 兩個人對於一件事情有不同看法時,是否能夠很容易地溝通,是否能夠敞開說明。
  • 相親節目泛濫?《好姻緣》教男女嘉賓"用身體戀愛"
    東方搭檔寧夏衛視當家花旦張染。1月4日晚,該節目將在南京電視臺教科頻道和寧夏衛視先後播出,南京名嘴東方將搭檔寧夏衛視當家花旦張染,為全國觀眾呈現一檔以大齡單身男女為服務對象的生活服務節目。還在玩「微表情」?你可以了解得更全面!記者昨日在發布會上了解到,節目還首推「麻辣情師」幫助男女嘉賓們用「身體談戀愛」。   相親節目泛濫?
  • 伊對每月1000萬場相親視頻相親成功的四個「必殺技」!
    (圖片來源:中新網)  曾幾何時,相親都得見面。如今視頻相親成為潮流,特別是在三四線城市。伊對上面每個月就有1000多萬次相親活動。想想都壯觀。或許,相親也是一種消遣方式。  01  直播相親的「五
  • 我的相親對象不是人
    它配備了近50萬條潛在回復語,存檔超過10億條語言,每周產生幾百萬條的對話,被認為是最像人類的AI。這場相親名場面的背後是一次較量,看看誰更像真人。女方家長不服男方一直宣稱自己史上最強、卻從未公開展示。於是,在沒有臉書官方參與的情況下,女方利用男方的開源數據,讓兩個AI自由聊天,全程直播,最後請觀眾投票一分勝負。
  • 「每逢佳節被相親」「相親」的英語怎麼說?
    (因為「相親」是「從未晤面的男女經第三者安排所作的約會」,這麼看來英語中的這個「blind」用得真是相當地傳神呢。可不能看到這個說法就望文生義地以為是「盲目約會」或「瞎約會」哦。)「相親」的英語怎麼說?
  • 相親指南:父母為什麼逼你相親?以及3大忌
    如果你終不能倖免,即將要在2019年小長假迎來人生中第一次相親,那你可要小心了。相親不就是倆個陌生人第一次或許也是最後一次吃飯,有什麼可怕?如果說父母是我們和死神之間的一堵牆,那麼相親則是父母替我們找尋另一座直面死神牆頭的絕佳機會。也就是說,咱可以敷衍相親,只要你願意傷透父母的一片心。
  • 網際網路相親,是怎麼收割單身男女的?
    在溝通中,深燃發現,多位用戶的感受是,在下單前,導師描述的內容和自己的情況吻合,並極力強調會用專業能力幫你解決問題,一旦付費,服務質量反而下降了,甚至只會誇大問題,告知用戶需要更高階的課程才可解決問題。
  • 追求個性自由的年輕人 為什麼最終選擇相親
    大家沒想到上知天文,下知地理,解得了高等數學題,寫得了情詩小作文的名校畢業生,居然會為談戀愛發愁,並且選擇相親。畢竟在普遍印象中,現代的年輕人普遍追求個性追求自由,為什麼最終還是走上了相親這條老路呢?電影《愛在日落黃昏時》裡,女主角席琳說:「當你年輕的時候你會相信你將認識很多人,但後來你才會發現能交流的人其實很少,何況你又不能保證和他們好好相處,就這樣,失去聯繫了。」一句話早已道明了一切。緣分很淺,有些人僅僅一次遇見,就是此生的最後一面,遑論發展出更多的故事。
  • 相親被分手31次不可怕!島國小哥相親50次,含淚總結相親指南
    ▲參加資格其次我們再看看參加資格,看來哪國的相親也不是隨便都能參加的。男性要求大學畢業或者是公務員或者是年收入350萬日元(約21萬RMB)以上,女性要求單身即可。與其說是相親活動,更不如說是男女美食交流活動,一般參加這種相親的都是會做飯的男女,相應的比較適合交流能力較高,喜歡做飯的人士。像這種趣味型相親活動還有足球相親、登山相親、攝影相親、寵物相親等等。日本人為了增加相親次數可謂是使出來渾身解數!
  • 相親男女這三種人絕對不能交往
    前言:韓劇中的男女主角總是能在不經意間撞見,平淡的言語中卻能演繹出光鮮亮麗的愛情,而現實中沒有戀愛經驗的我們卻發現很難做到聚光燈下的愛情28歲的秦先生身為世界前三製藥公司的Marketing部門負責人,無論是生活上還是工作中都是佼佼者,可以說是什麼都不缺,唯獨在相親網站上連續失敗了四次的相親經歷
  • 你媽逼你相親了?是時候祭出這張延平區單身男女數量走勢圖了!
    你媽逼你相親了?是時候祭出這張延平區單身男女數量走勢圖了!國慶假期即將結束延平區的「大齡女青年」們你們還好嗎?有男朋友了嗎?怎麼還不找對象啊?要不要阿姨給你介紹個對象啊?▼國慶假期你媽逼你去相親了嗎?「你媽覺得你嫁不出去」到了年齡還嫁不出去就是不孝……▼別著急!女孩子晚點處對象挺好的呀!不信來看官方數據分析!▼雖然對男孩子挺不公平的但是延平區的單身男女比例真的失衡了!
  • 相親其實並不可怕「注孤生」那更可怕
    大家沒想到上知天文、下知地理、解得了高等數學題、寫得了情詩小作文的名校畢業生,居然會為談戀愛發愁,並且選擇相親。   畢竟在普遍印象中,現代的年輕人普遍追求個性追求自由,為什麼最終還是走上了相親這條老路呢?
  • 淺析追求一位985學霸的相親戰術
    如果你或你身邊的人特別喜歡學霸,卻又苦於沒有追求門徑,希望本文能夠為你提供對985群體相親環境的深入了解和切實可行的追求戰術。2015年成立的陌上花開HIMMR,致力於為985高校以及海外頂尖名校的學生與校友提供相親服務。其創始人月亮和樂樂嘔心瀝血服務4,000+嘉賓,影響了幾十萬人的婚戀觀念。
  • 推出對緣:映客為何加碼「雲相親」?
    據易觀分析《2020在線婚戀交友行業年度綜合分析》的數據顯示,2019年,中國網際網路婚戀交友市場整體規模達55.9億元,較2018年實現了12.5%的收入增長,且預計未來1~2年行業業績還有望繼續增長。對緣切的正是婚戀交友行業。映客一直鼓勵內部團隊在社交賽道上的創新。去年,李濤結合映客的大方向,認準直播與相親結合將是一個大發展良機。在跟公司溝通之後,對緣立項。
  • 一個內向的男孩相親背後的事
    相親這種形式對於絕大多數人來說都是一種不可避免的尋找伴侶的方式,當然現在更多的提倡自由戀愛,畢竟現在是科技和網絡發達的時代,但凡長的帥,會說話會辦事的男孩都會找到自己嚮往的戀愛,而相對的是長相一般,或者不會說話辦事的只有相親這條路道路,更多的也可能是中國自古以來的傳統所致吧
  • 珍愛網相親有成功的嗎?教你如何解決在相親中碰到的困難
    如今的快節奏社會,人們做什麼都講求效率快,就連尋找伴侶也是一樣的要快,因此很多人都選擇通過相親的方式去尋找自己的終身伴侶。但有很多人在相親中都遇到了不少的問題,而根據珍愛網直營店的調研報告顯示,有3.72%的男女是不知道在去相親之前應該要做些什麼準備。常言道,機會是留給有準備的人的。
  • 成都男女相親路上的「絆腳石」 學歷身高房子…
    正式相親後,小夥才知道對方是專科畢業生。小夥子對學歷很看重,又覺得女生很熱情,除了學歷低並沒有什麼別的缺點。小夥在糾結一周後,終於說服自己學歷不重要,過日子才重要。但他再約那個女生時,對方不回信息了。成都相親男女的擇偶標準是什麼?會在意學歷嗎?相親的過程中又發生了哪些糟心事?天府早報記者進行了調查。
  • 追求個性自由的年輕人 為什麼還是走上了相親這老路?
    大家沒想到上知天文、下知地理、解得了高等數學題、寫得了情詩小作文的名校畢業生,居然會為談戀愛發愁,並且選擇相親。畢竟在普遍印象中,現代的年輕人普遍追求個性追求自由,為什麼最終還是走上了相親這條老路呢?電影《愛在日落黃昏時》裡,女主角席琳說:「當你年輕的時候你會相信你將認識很多人,但後來你才會發現能交流的人其實很少,何況你又不能保證和他們好好相處,就這樣,失去聯繫了。」一句話早已道明了一切。緣分很淺,有些人僅僅一次遇見,就是此生的最後一面,遑論發展出更多的故事。
  • 男女相親無果緣由:男生太心急,女生太磨嘰
    相親,是中國青年男女選擇締約婚姻的一種方式。曾記得我們的父母輩,不說一相一個準,總歸多相親幾次便成了。而如今,男女相親頻率如此之高,可依舊相不到合適的,甚至於很多相親還沒有開始就宣告結束了,其中原因之一便是:男生太心急,女生太磨嘰。
  • 相親飯錢AA,你是什麼意思?
    不過,你可曾想過,在相親開銷上提出 AA 這件事,背後確實是可以有很多種不同意圖的?01前陣子,西蒙開了一家「相親沒問題餐廳」。這餐廳特別的地方在於,它為相親吃飯的男男女女提供一項特殊服務。用餐完,「相親沒問題餐廳」會在 24 小時內,分別給兩人發送這樣一張小卡片選擇: