案例:用Python分析大学生恋爱情况
特别申明:
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—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的记录,不妨先让你舍友脱单,这样在一定程度上有助于你脱单。
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。
更多问题咨询,欢迎点击------>>>>在线客服!