记一次无聊的画图练习。
最近,同学的弟弟开始被相亲了。被,这个字挺好,很好的诠释了他当前的处境吧,用在当年的我的身上,也许也行得通。
周末,和同学唠了会儿家常后一直坐在电脑前发呆。为什么不能主动,一定要被动呢?这个问题是我同学耿耿于怀的,谁让家里大事小事都要她操心呢!
我也是好奇,或者说是感同身受,一直憋着一股劲,想要替同学弟弟干一件主动的事。当然,身体还是很诚实的,只做自己的事。之后,一个相亲网站就被我爬了。也没什么特别会让人张针眼的信息,就几个字段。而且也不出所料的男多女少。瞅着这些,能干点啥呢?
要不,看看那些竞争者们的情况,比如身高、收入、学历。
Environment
·python 3.7.4
·jupyter notebook
导入数据
很简单的那么几列,我也就这点本事。
目标
我们这些小城市的三无老青年,只所以被逼婚被相亲,终其原因就是‘贫’。如果富的话,爸妈肯定是另外一套说辞,什么‘小心被女人骗’,你爱什么时候交,交几个都不会管。所以,就挖挖,我们这些老青年处在哪个阶层吧。身高真的还可以吗?这个年纪的收入一般会有多少?大部分的人学历都是怎么样的?从中挖出一点比自己改变的动力。
数据情况
本数据有11个字段,对本次瞎扯有意义的是性别、身高、教育水平、出生年份、薪水和省份。因为数据量并不大,城市暂不做考虑。为了规避隐私,我上图会将id和用户名遮掩。从严格上面讲,本数据会由于填写信息的人的不同目的而导致数据失真,本文纯当练手。
data.info()之后没有发现缺失值
第一图
想了解不同省份的身高差异,是不是正如刻板印象中的南矮北高。用箱线图的形式表现出来,直观展现各个省份男女平均身高,身高中位数的差异。
需要的数据 男(女):各省男(女)身高平均数(以此进行排序)。
1,查看身高数据中的空值和异常值,并剔除==>data1
2,筛选出男(女)数据,添加一列平均身高,数据为各省男(女)身高平均值==>data1
3,筛选出data1的 省份,身高,平均身高 做图数据==>data2
4, 画图
剔除异常
查看身高汇总之后,发现有填0的,有填1米的,1.4米,2.5米的也有。成年人,如果不是有特殊疾病的话也该都不会太矮或太高。剔除身高小于150和高于220的人。身高太高和太矮会对平均值造成影响。
data1=data[(data['身高']>=150) & (data['身高']<=220)]
接着还有对省份的检查
筛选出男(女)数据,计算身高平均值
然后将平均值关联到data1中。并筛选出省份、升高、平均升高字段。
接着,就可以画图了。使用matplotlib,一个比较复杂的包。
得出了这么个图。用平均值做了排序。从图中可以看出,广西、贵州平均值都是小于1.7米,中位数也刚好1.7米。看样子那里的人多数是不高的。但广西最高最矮的身高差挺大,难道是外来人口也比较多?广西,我只去过玉林,满街的狗肉摊。从图中看,浙江得平均值稍低于全国平均。实际计算全国也是172.91,浙江的数字在上上图中有显示。
此刻,值得欣慰的是,大众脸,大众名,大众身高。
重新查看了下各省的样本数,发现很很多省的用户数量是小于1000的。还是重点比一下人数上千的省份的中位数吧。
(data1[data1['性别']=='男'].pivot_table('用户id',index=['省份份'],aggfunc='count')>1000).iloc[1:,]
同透析表把人数多于1000的身份找出来。
计算出中位数,并把它添加到表中,对象名data3_men_1
图 1 图 2所有的省份中,广东的用户最多,和同样是大城市的北京比起来,广东的身高更为集中(由于数量差异太大,图2中我没有将北京和广东放一起)。北京和山东都是北方,中位数相同,平均值却是山东高出不少,用图2的方法,可以看到山东的数据右偏了不少(文中没展现)。
有意思的一个详细,170公分是每个身份最多的。商量好的吗?可能大家都喜欢四舍五入吧。
小结:南北方,确实存在平均身高上的差异,还有在总数上的差异。较为显著的就是图2中,重庆和山东的比较,四川和北京的比较。
第二图
想了解不同年龄段的薪水状况,每个年龄段不同薪水的占比。
需要的数据:男(女)每个年龄段每个薪水段占该年龄段的比例,(年龄段、薪水、该薪水在该年龄段的比例)
1,查看薪水、出生年份数据中的空值和异常值,并剔除==>data_money1
2,筛选出男(女)数据,添加字段(年龄段)==>data1_money1
3,计算出该薪水在该年龄段的比例,生成DataFrame==>df_money_ratio
4, 画图
检查数据中发现,中有薪水为按照规定填写、出生年份有30年代、40年代、50年代和千禧年10代的,过于夸张,全部剔除。数量不到总数的1.7%。
接着就是画图
在修改参数的时候,我一直想让数字标签呆在它所对应的块状当中,却一直没有调好,原因是我在enumerate()参数中没有累加,或者是累加了发现数字标签中的数字也是累加的结果。曾想在不累加的情况下,对y轴维度进行修改,但永远也改不到统一。再后来又想在能否y_g-y_t这样的累减能帮助到我。但事与愿违。
最后,还是选择了添加一个变量。使得数字标签使用的值是这个后添加的变量的值。终于解决了这个问题。
如果有朋友能有更简单的方法,欢迎留言和我们这些小白分享,万分感谢!
小结:月薪上万不断的年轻化,更像鸡蛋,两头尖,但不是中间中间最大。曾几何时,40岁以上的中年人是这个社会的中流砥柱,慢慢的输给后辈的爆发力。中国的年轻人,好样的!
第三图
根据性别和教育水平画两个饼状图,分析不同学历在男(女)当中的比例,横向对比同等学历的占比
需要数据:字段(用户id,性别,教育水平)
1,检查教育水平和性别中有无异常和空值,剔除==>data4_edu
2, 筛选出男(女)数据,用户id,教育水平==》data4_edu
3,计算出该学历在男(女)中比例==>df_edu
4,画图
查看数据中发现教育水平字段中有不安规定填写的,剔除。另外也检索了下’院士‘,发现众多都是90后,和实际不符,剔除。
画图
小结:女性受高等教育的比例明显比男性高出很多。刷d音经常能看到女人精致的让男人高攀不起,这是否能为那些莫名的仰望添一把火。
总结:好好努把力吧,不管是年轻的或者是不年轻的男人们。尤其是像我们这种小城市的三无老青年。
今天开始加入简书葡萄园,摘葡萄吃葡萄,挖个坑,吐葡萄籽种葡萄!
网友评论