作者:数据取经团——张俊红
数据取经团(公众号:zlx19930503)
专注R、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)')
通过结果发现:
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)')
通过结果发现:
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)')
通过结果发现:
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次中女性人数,其他类似。
通过结果发现:
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()
通过结果发现:
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()
通过结果发现:
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)')
通过结果发现:
2、恋爱与年级关系
代码部分:
grouped8=zero.groupby([u"年级"]).count()[u"性别"]
grouped8.plot(kind="bar",color="gray")
plt.xlabel('grade')
plt.ylabel('counts(people)')
通过结果发现:
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)')
通过结果查看:
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)')
通过结果查看可得:
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)')
通过结果查看可得:
7、恋爱与寝室舍友情况的关系:
代码部分:
grouped13=zero.groupby([u"寝室同学情况"]).count()[u"年级"]
grouped13.plot(kind="bar",stacked=True,color="gray")
plt.xlabel('dorm_mate')
plt.ylabel('counts(person)')
通过结果查看可得:
福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:
关注后在公众号内回复“课程”即可获取:
1.崔老师爬虫实战案例免费学习视频。
2.丘老师数据科学入门指导免费学习视频。
3.陈老师数据分析报告制作免费学习视频。
4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。
5.丘老师Python网络爬虫实战免费学习视频。