大学生恋爱情况分析

浏览: 1701


特别申明:

1、本数据来源于网络,且数据量较小,故分析结果可能不具有普遍性,对于结果大家了解一下即可,不需要太在意,重点是分析过程。

2、本文图片较多,篇幅较长。


01|数据导入:


代码部分:


%matplotlib inline 

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

df=pd.read_csv("F:\\datasciene\\exercisedata\\data.csv",encoding="gbk")

print df.columns#查看有哪些索引值

df.head(2)#显示数据的前两行,查看数据呈现方式



02|数据预处理:


1、查看是否具有缺失值


如果有缺失值,则进行缺失值处理,可以选择填充或删掉。通过下面的截图看出没有缺失值,所以我们就跳过这一步。



2、值替换

为了便于后续的研究,需要把一些属性值替换成机器容易识别的符号。

代码部分:


df[u"性别"].replace([u"女",u"男"],["female","male"],inplace=True)#将性别男女替换成英文

df[u"年级"].replace([u"大一",u"大二",u"大三",u"大四"],["freshman","sophomore","junior","senior"],inplace=True)

df[u"眼镜"].replace([u"戴眼镜",u"不戴眼镜"],["wear","not_wear"],inplace=True)

值替换根据需要随时进行替换,有的一些属性值可能刚开始没想到会用到,在需要用的时候进行替换就可以。

03|描述性分析:


1、恋爱次数情况

代码部分:


grouped=df.groupby([u'恋爱次数']).count()[u'年级']

print "平均恋爱次数:",df[u'恋爱次数'].mean()

print "恋爱次数的中位数:",df[u'恋爱次数'].median()

grouped.plot(kind="bar",color="gray",align='center')

plt.xlabel('Times')

plt.ylabel('counts(person)')


通过结果发现:


  • 恋爱次数为1次的占比最多,其次是恋爱次数为0次的同学。

  • 平均恋爱次数: 1.30034129693。

  • 恋爱次数的中位数: 1.0。



2、被追人数情况:

代码部分:


grouped1=df.groupby([u'被追人数']).count()[u'年级']

print "平均被追人数:",df[u'被追人数'].mean()

print "被追人数的中位数:",df[u'被追人数'].median()

grouped1.plot(kind="bar",color="gray",align='center')

plt.xlabel('Times')

plt.ylabel('counts(person)')

通过结果发现:


  • 被追人数(次数)为0人的占比最多,其次是被追人数为1人的同学。

  • 平均被追人数(次数): 2.87。

  • 被追人数(次数)的中位数:2.0。


3、追求人数情况:

代码部分:


grouped2=df.groupby([u'追过人数']).count()[u'年级']

print "平均追过人数:",df[u'追过人数'].mean()

print "追过人数的中位数:",df[u'追过人数'].median()

grouped2.plot(kind="bar",color="gray",align='center')

plt.xlabel('Times')

plt.ylabel('counts(person)')

通过结果发现:


  • 追求人数(次数)为0人的占比最多,追求次数对应的人数一次递减。

  • 平均追求人数(次数):1.037。

  • 追求人数(次数)的中位数:1.0。

04|探索性分析(1):

接下来探索一下恋爱情况与性别的关系,所以先确认一下样本数据的男女比例是否一致。

结果显示男女比例几乎接近1:1,所以可以看成两者的比例是一致的。

1、恋爱次数与性别的关系:

代码部分:


grouped3=df.groupby([u'恋爱次数',u'性别']).count()[u'年级']

grouped3.plot(kind="bar",stacked="True",color=['r', 'g'],label=("female"))

plt.xlabel('Times&sex')

plt.ylabel('counts(person)')

plt.legend()

(0,female)表示恋爱0次中女性人数,其他类似。


通过结果发现:

  • 恋爱次数为0—1次时,男性人数多于女性,但是恋爱次数为2次时,女性人数反超男性人数,恋爱次数为3次时,女性又低于男性,当恋爱次数为4次时,女性对应的人数是男性对应人数的4倍,恋爱次数为5次的人群中只有女性。

2、被追人数与性别的关系:

代码部分:


grouped4=df.groupby([u'被追人数',u'性别']).count()[u"年级"]

grouped4.plot(kind="bar",stacked=True,color=['r', 'g'],label=("female"))

plt.xlabel('Times&sex')

plt.ylabel('counts(person)')

plt.legend()

通过结果发现:

  • 男生中有34.7%未被人追过,女生中有16.7%未被人追过。

  • 男生中被追为1次的人最多(除0次以外),而女生被追过5次的人最多。在被追次数为1-3次中,男生人数领先于女生,但是在4次以后,女生遥遥领先(除10次有个特殊点外,这个点可能是校草级别的人导致异常点出现的吧),由此可见,女生要么被追人数很少,要么就是同时被好多人追。(可能某个人在班里或者系里太出众,最后一个班或者是一个系的人都追她)


3、追过人数与性别的关系:

代码部分:


grouped5=df.groupby([u'追过人数',u'性别']).count()[u"年级"]

grouped5.plot(kind="bar",stacked=True,color=['r', 'g'],label=("female"))

plt.xlabel('Times&sex')

plt.ylabel('counts(person)')

plt.legend()

通过结果发现:

  • 除了追过人数为0次时对应的女生人数要多于男生,追过次数为1-4次中男生对应的人数都要高于女生,而5次以后又被女生反超。

  • 这个其实也是可以理解的,大部分女生相比于男生都比较害羞,不太好意思主动去追求,所以在1-4次时男生要明显多于女生,但是也有一些比较open的女生,会在5次以后对应的人数多于男生。

04|探索性分析(2):


接下来探索一下恋爱次数为0的同学们都有什么特征,或者是影响恋爱次数的因素有哪些?

代码部分:


zero=df[df[u"恋爱次数"]==0]#筛选出恋爱次数为0的同学

zero.head(2)


1、恋爱与男女比例关系:

有没有可能是这个学校本身男女比例的问题导致单身的存在,接下来看看单身群体中男女比例结构。(有的学校男女比例7:1,会是影响恋爱次数的一个重要原因)

代码部分:


grouped7=zero.groupby([u"性别"]).count()[u"年级"]

grouped7.plot(kind="bar",color="gray")

plt.xlabel('sex')

plt.ylabel('counts(people)')

通过结果发现:

  • 通过柱状图可以看出,单身群体中,男女比例接近于1:1,看来男女本身比例问题这个原因可以排除。

2、恋爱与年级关系

代码部分:


grouped8=zero.groupby([u"年级"]).count()[u"性别"]

grouped8.plot(kind="bar",color="gray")

plt.xlabel('grade')

plt.ylabel('counts(people)')


通过结果发现:

  • 恋爱和年级还真有点关系,大二中恋爱次数人数最少,这可能是大二已经经历了一年的大学生活,开始对这个学校慢慢熟悉起来,再加上也认识了一些人,具备了基础条件,所以恋爱的就会多起来。

  • 大三中恋爱次数为0的最多。

3、恋爱与追过和被追的关系:

代码部分:


grouped9=zero.groupby([u"追过人数",u"被追人数"]).count()[u"性别"]

grouped9.plot(kind="bar",color="gray")

plt.xlabel('Active and passive')

plt.ylabel('counts(people)')


通过结果发现:

  • 在恋爱次数为0的群体中,约一半的人追求人数和被追人数均为0,所以不主动可能至今是恋爱次数为0的主要原因吧。

  • 还会有一些主动追求过两次,被追求过10次这样的群体存在,这种群体可能是本身条件很好,所以追求人数很多,但是择偶标准也比较高,所以这么多人追求,依然保持恋爱次数为0。

  • 还有一些群体是主动追求过6、7次,被追求0次,恋爱次数依然为0。(好心疼他们)

4、恋爱次数与学生组织关系:

学生组织是我们结交人脉的一个重要渠道,如果我们没有加入学生组织,可能不会认识很多人,会没有追求目标,这可能是恋爱次数为0的一个原因。具体看看。

代码部分:


grouped10=zero.groupby([u"学生组织个数"]).count()[u"年级"]

grouped10.plot(kind="bar",stacked=True,color="gray")

plt.xlabel('counts')

plt.ylabel('counts(person)')


通过结果查看:

  • 在恋爱次数为0的群体中,大部分人还是至少有参加一个学生组织的,只有10%左右的人没有参加学生组织。所以可以排除这点原因。

5、恋爱与颜值的关系:

代码部分:


grouped12=zero.groupby([u"颜值"]).count()[u"年级"]

grouped12.plot(kind="bar",stacked=True,color="gray")

print "恋爱次数为0对应的平均颜值:",zero[u"颜值"].mean()

plt.xlabel('Beauty')

plt.ylabel('counts(person)')


通过结果查看可得:

  • 恋爱次数为0的群体的平均颜值为5.5(满分为10),众数为5。

  • 恋爱次数为0的人大部分颜值为中等水平,一部分是中等偏上,这一部分可能就是那些被追很多次,但是恋爱次数为0的人。

6、恋爱与身高的关系:


代码部分:


age_train_p=zero[u"身高"]

ages=np.arange(150,200,10)  #150~200岁,每10厘米一段(年龄最小153,最大为192)  

age_cut=pd.cut(age_train_p,ages)  #待分组值,分组条件

age_cut_grouped=age_train_p.groupby(age_cut).count()

age_cut_grouped.plot(kind="bar",color="gray")

plt.xlabel('height')

plt.ylabel('counts(person)')




通过结果查看可得:

  • 恋爱次数为0的群体中,大部分人的身高集中在(160,170),其次是(170,180)。个人觉得这个身高差不多了,所以就先判定恋爱次数与身高没有关系。


7、恋爱与寝室舍友情况的关系:

代码部分:


grouped13=zero.groupby([u"寝室同学情况"]).count()[u"年级"]

grouped13.plot(kind="bar",stacked=True,color="gray")

plt.xlabel('dorm_mate')

plt.ylabel('counts(person)')




通过结果查看可得:

  • 恋爱次数为0的群体中,大部分人的舍友也是单身,所以如果你想突破恋爱次数为0的记录,不妨先让你舍友脱单,这样在一定程度上有助于你脱单。



天善个人名片图片.jpg

推荐 8
本文由 张俊红 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

4 个评论

数据源哪里来的
好奇CSV文件哪里来的
链接:http://pan.baidu.com/s/1o8e69aa 密码:bw5u
链接:http://pan.baidu.com/s/1o8e69aa 密码:bw5u

要回复文章请先登录注册