如何用Python分析相亲网站数据
这篇文章主要介绍“如何用Python分析相亲网站数据”,在日常操作中,相信很多人在如何用Python分析相亲网站数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Python分析相亲网站数据”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一、前言本文利用 Python 分析了按城市寻找所有地区的征婚信息,看看相亲男女的画像。
二、数据查看和预处理导入用到的库
importpandasaspdimportre
读取数据,查看前 5 行
df=pd.read_excel('marriage.xlsx')df.head()
查看索引、数据类型和内存信息
df.info()
可以看到数据都没有缺失值。
获取到的数据里,居住地是各地区的,为了便于分析,需要处理成省级行政区,学历/月薪那一列数据,有些是月薪,有些是学历,可以分别处理成两列数据,是学历的,提取出学历层次,月薪标记为 "未知";是月薪的,提取出月薪并计算,学历标记为 "未知"。
#获取34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区的名称withopen('地区.txt','r',encoding='utf-8')asf:area=f.read().split('\\n')print(area)print(len(area))
结果如下:
['北京','上海','天津','重庆','黑龙江','吉林','辽宁','内蒙古','河北','新疆','甘肃','青海','陕西','宁夏','河南','山东','山西','安徽','湖北','湖南','江苏','四川','贵州','云南','广西','西藏','浙江','江西','广东','福建','台湾','海南','香港','澳门']34areas_list=[]foriindf['居住地']:forjinarea:ifjini:areas_list.append(j)breakelse:areas_list.append('未知')df['居住地']=areas_listdf.head()
withopen('学历.txt','r',encoding='utf-8')asfp:edu=fp.read().split('\\n')print(edu)
结果如下:
['博士','硕士','本科','大专','中专','高中','初中','小学']salary_list=[]edu_list=[]foritemindf['学历/月薪']:if'元'initem:#这一列的数据是表达月薪的话计算data=re.findall('\\d+',item)data=[int(x)forxindata]salary=int(sum(data)/len(data))#取整salary_list.append(salary)edu_list.append('未知')else:salary_list.append('未知')foreinedu:ifeinitem:edu_list.append(e)breakelse:edu_list.append('未知')print(len(edu_list))print(len(salary_list))df['学历']=edu_listdf['月薪']=salary_listdf.head()
这时候数据处理好了,可以删掉学历/月薪这一列,再重新保存到 Excel blank。
deldf['学历/月薪']df
df.to_excel('处理后数据.xlsx',index=False)三、数据分析
相亲男女性别占比?
#-*-coding:UTF-8-*-"""@File:男女占比情况.py@Author:叶庭云@CSDN:https://yetingyun.blog.csdn.net/"""importpandasaspdimportcollectionsfrompyecharts.chartsimportPiefrompyechartsimportoptionsasoptsfrompyecharts.globalsimportThemeType,CurrentConfig#引用本地js资源渲染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)fork,vingender_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%。
相亲男女年龄分布?
#-*-coding:UTF-8-*-"""@File:年龄分布.py@Author:叶庭云@CSDN:https://yetingyun.blog.csdn.net/"""importpandasaspdimportcollectionsfrompyecharts.chartsimportBarfrompyecharts.globalsimportThemeType,CurrentConfigfrompyechartsimportoptionsasoptsCurrentConfig.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=lambdax:x[0])age=[x[0]forxinage_count]nums=[y[1]foryinage_count]#print(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 岁的相亲男女数据单独提取出来看看。
importpandasaspddf=pd.read_excel('处理后数据.xlsx')df1=df[df['年龄']<=20]df2=df1['婚况'].value_counts()#统计小于等于20岁的相亲男女的婚况print(df2)
未婚153离异6丧偶2Name:婚况,dtype:int64
大部分是未婚,年纪轻轻就那么急着相亲吗,再看看婚况是离异的数据。
importpandasaspddf=pd.read_excel('处理后数据.xlsx')df1=df[df['年龄']<=20]df3=df1[df1['婚况']=='离异']print(df3)
网名性别...学历月薪17425微风轻起男士...未知5000029645媳妇女士...大专未知30398仙妹女士...高中未知30485会员1415395937男士...未知3500036684微笑着变老女士...高中未知49864风吹动了风玲女士...高中未知[6rowsx9columns]
月薪写着 50000、35000 的男士有些显眼啊,在数据集中查看。
月薪 50000 的微风轻起,征婚信息年龄写的19,征婚宣言里又写到 1994 年 26 岁;月薪 35000 的会员某某某,征婚信息年龄写的 20,征婚宣言里又写到 81 年的,看来网站里年龄、身高这些信息真实性值得怀疑。
相亲男女婚况?
#-*-coding:UTF-8-*-"""@File:男女占比情况.py@Author:叶庭云@CSDN:https://yetingyun.blog.csdn.net/"""importpandasaspdimportcollectionsfrompyecharts.chartsimportPiefrompyechartsimportoptionsasoptsfrompyecharts.globalsimportThemeType,CurrentConfig#引用本地js资源渲染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%。
相亲男女学历分布情况?
#-*-coding:UTF-8-*-"""@File:学历分布.py@Author:叶庭云@CSDN:https://yetingyun.blog.csdn.net/"""importpandasaspdimportcollectionsfrompyecharts.chartsimportPiefrompyechartsimportoptionsasoptsfrompyecharts.globalsimportCurrentConfig#引用本地js资源渲染CurrentConfig.ONLINE_HOST='D:/python/pyecharts-assets-master/assets/'#提取数据学历不为未知的df=pd.read_excel('处理后数据.xlsx')data=df[df['学历']!='未知']#print(data)#统计各学历层次相亲男女数量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,#系列数据项,格式为[(key1,value1),(key2,value2)...]rosetype="radius",#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}%)"#'item':数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用),label_opts=opts.LabelOpts(color="#fff"),).render("相亲男女学历.html"))
相亲男女学历大部分在高中(35.92%)、大专(24.72%),有近六成的相亲男女。本科占比20.7%,中专占比16.35%,硕士、博士高学历的相亲男女人数很少,分别占比2.14%,0.17%。
相亲男女地区分布?
#-*-coding:UTF-8-*-"""@File:地区分布.py@Author:叶庭云@CSDN:https://yetingyun.blog.csdn.net/"""importpandasaspdimportcollectionsfrompyechartsimportoptionsasoptsfrompyecharts.chartsimportGeofrompyecharts.globalsimportChartTypefrompyecharts.globalsimportThemeType,CurrentConfigCurrentConfig.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)]
重庆、广东、四川等地区的相亲男女人数最多。
征婚宣言一般是介绍自己情况,表达对另一半的要求和期望。下面我们分别来看看相亲男女征婚宣言里关键词都有些什么。
#-*-coding:UTF-8-*-"""@File:征婚宣言词云.py@Author:叶庭云@CSDN:https://yetingyun.blog.csdn.net/"""importpandasaspdimportjiebaimportcollectionsimportrefromwordcloudimportWordCloudimportmatplotlib.pyplotaspltimportnumpyasnpfromPILimportImage#提取性别征婚宣言这两列数据就好df=pd.read_excel('处理后数据.xlsx')[['性别','征婚宣言']]#df1=df[df['性别']=='女士']['征婚宣言']df2=df[df['性别']=='女士']['征婚宣言']#读取停用词数据withopen('stop_words.txt',encoding='utf-8')asf:con=f.read().split('\\n')#得到每一行的停用词stop_words=set()foriincon:stop_words.add(i)result_list=[]fordataindf2:#文本预处理去除一些无用的字符只提取出中文出来new_data=re.findall('[\\u4e00-\\u9fa5]+',data,re.S)new_data="/".join(new_data)#文本分词seg_list_exact=jieba.cut(new_data,cut_all=True)#去除停用词和单个词forwordinseg_list_exact:ifwordnotinstop_wordsandlen(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',#设置背景颜色默认是blackmask=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()
到此,关于“如何用Python分析相亲网站数据”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。