本文将按以下几个步骤描述,数据分析的流程:

提出问题,给出分析目的;

  1. 数据清洗与处理;
  2. 数据分析及可视化;
  3. 建立模型及预测分析;
  4. 分析结果.

1.提出问题,给出分析目的
幸福感是一个古老而深刻的话题,是人类世代追求的方向。与幸福感相关的因素成千上万、因人而异,大如国计民生,小如路边烤红薯,都会对幸福感产生影响。在这些错综复杂的因素中,如何找到其中的共性,一窥幸福感的要义,进而提升人民的幸福感,能去帮助那些抑郁不开心的人,这是展开幸福感数据分析的目的。

基于调查人群的相关特征,提出关于幸福感的几个问题如下:

调查人群数据中的整体幸福状况?
什么会影响一个人的幸福感?如何提升幸福感?
利用训练集数据,如何预测测试集中的幸福指数?
针对问题一,利用matplotlib、seaborn画图库可视化整体人群的幸福状况;针对问题二,采用逻辑树的方法进行分析,将问题分层罗列,逐步向下展开,并可视化辅助分析;针对问题三,在问题二的基础上提出相应的建议。给出问题之后我们开始处理数据。

2.数据清洗与处理
分析工具:Jupyter notebook
首先观察数据,训练集happiness_train_complete.csv文件标签有调查人员id,幸福指数,城市,年龄等等…总共140个标签,8000条人员数据。一览如下:

导入查看数据,解析survey_time列的值作为独立的日期列,

train = pd.read_csv('happiness_train_complete.csv', parse_dates=['survey_time'], encoding='utf-8')
test = pd.read_csv('happiness_test_complete.csv', parse_dates=['survey_time'], encoding='utf-8')
train.head()

数据预处理包括:发现和填补缺失值、数据类型转换、异常值删除等。

首先查看幸福指数happiness的取值,




数据中的空值以0填充,

for i in train_data.columns: for j in train_data.index:if np.isnan(train_data[i][j]):train_data[i][j] = 0

由于数据表中只有调查时间和出生年份,所以计算调查者年龄,调查年份-出生年份

3.数据分析与可视化

3.1描述性分析

首先用describe()方法查看数据的统计量,均值、标准差、最小值、分位数、最大值,

可以看到happiness均值为3.87,最大值为5,最小值为1,大部分人的幸福感是比较高的。

3.2 探索性分析

问题一:整体幸福状况

对于问题一的整体人群的幸福状况,画出5个等级幸福感的柱状图,5个等级的占比图

注:happiness:1 = 非常不幸福; 2 = 比较不幸福; 3 = 说不上幸福不幸福; 4 = 比较幸福; 5 = 非常幸福;

由图可知,77.6%的调查人员幸福指数大于等于4,说明77.6%的调查人员是比较幸福的,仅有7.5%的人是不幸福的。

问题二:什么会影响一个人的幸福感?如何提升幸福感?

采用逻辑树的方法进行分析,将问题解为外界层面(物质、社会)、自我层面(精神、身体),逐步向下展开。

选取两方面各十个特征进行分析:

外部层面(物质、社会):age,inc_ability,gender,status_peer,family_status,equity,class,income,house,survey_type.
个人层面(精神、身体):health,work_exper,health_problem,depression,learn,relax,edu,social_friend,marital,work_status.

为了得到数据表里多个特征两两的相关度(pearson相关系数计算),绘制热力图如下:


上图说明了两个层面的20个特征都对人的幸福感有影响,外部层面因素更能影响一个人的幸福感,例如收入合理程度inc_ability、与同龄人比较社会经济地位status_peer、公平equity。

下面挑选几个特征具体来看:

性别gender、年龄age、样本类型(城市农村)survey_type、收入合理程度inc_ability、与同龄人比较社会经济地位status_peer、公平equity.

按性别分析

男女的幸福指数比较,其中1表示男,2表示女

不同幸福指数下的男女数量图如下:
不同性别下的幸福指数比例图如下:

结论:

由图可知,19.1%的女性认为自己非常幸福,高于男性的15.9%;78.3%的女性幸福感在比较幸福4以上,而男性的幸福感在比较幸福以上的为77.2%低于女性,所以由数据可知女性的幸福感是略高于男性的。

按样本类型分析

样本类型的幸福指数比较,1表示城市,2表示农村。


不同样本类型下的幸福指数数量及比例图如下:

结论:

由上图可知,在城市样本中17.9%认为自己非常幸福,高于农村的17.3%;78.6%的城市样本幸福感在比较幸福4以上,而农村的幸福感在比较幸福以上的为76.8%低于城市的,所以由数据可知在城市调查的样本中幸福感是略高于在农村的样本。

按年龄分析

将年龄分成5段,按每个年龄阶段分析幸福感,
每个年龄段在不同幸福指数下的数量图如下,

由上图可知,在这次调查中48-64岁年龄段的人最多,80岁以上的人最少,而在每个年龄段中,最多的是幸福感指数为4(比较幸福)的,最少的是幸福感指数为1(非常不幸福)的,每个年龄段的幸福人数分布情况差不多。

并且绘制每个年龄段的幸福比例,分析具体:


每个年龄段的幸福指数比例图如下,
结论:

由上图可知,幸福的比例呈先下降后升高的趋势,最高为在年龄段16-32中81.1%的人是幸福的,最低为在年龄段48-64中75.6%的人是幸福的,所以由数据可知随着年龄的递增,人类的幸福指数是先递减后递增的变化,正好验证了中年人对于各方面的压力而幸福指数较低。

按收入合理分析inc_ability

inc_ability表示的是:考虑到您的能力和工作状况,您目前的收入是否合理?

1 = 非常合理; 2 = 合理; 3 = 不合理; 4 = 非常不合理;

绘制每个inc_ability的幸福指数比例图如下:
结论:

由上图可知,在认为自己收入非常合理中,89.8%的人是比较幸福及以上的,在认为自己收入非常不合理中,52.5%的人是比较幸福及以上的,可以看出随着合理程度的递增,幸福的比例也递增,也就是当一个人对自己目前的收入认为越合理时,他的幸福感就越强。

按社会经济地位分析status_peer

status_peer表示的是与同龄人比较社会经济地位,1 = 较高; 2 = 差不多 3 = 较低;

以与同龄人比较社会经济地位作为参量,5个happiness level的堆叠条形图如下:


结论:

由上图可知,与同龄人相比,几乎50%人认为自己的社会经济地位是和同龄人差不多,几乎50%人认为自己的社会经济地位是比同龄人低,在每个happiness level下status_peer的分布情况是大概一致的,所以社会经济地位与幸福感无关,也就证明了那些社会经济地位高的人也不一定很开心呀!

按公平分析equity

equity表示的是:您认为当今社会公不公平,1 = 完全不公平; 2 = 比较不公平; 3 = 说不上公平但也不能说不公平; 4 = 比较公平; 5 = 完全公平;

在每个公平程度下,绘制5个happiness level的比例图如下:

4. 建立模型及预测分析

对于问题三预测人群的幸福指数,首先用主成分分析法PCA对数据降维,再建立神经网络模型对测试集幸福感进行预测。

对缩略版数据happiness_train_abbr.csv(42个特征),进行预处理降维。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征实现提升数据处理速度的目的,主成分分析降维个人觉得是去除了线性相关性低的特征对结果的影响,而把重要特征显现出来。

PCA算法流程:

对原始n维数据集转置,对每一行进行零均值化;
构造样本的协方差矩阵;
计算协方差矩阵的特征值和相应的特征向量;
选择与前k个最大特征值对应的特征向量,其中k为新特征空间维度(k<=n);
将特征向量按对应特征值大小排序,取前k个组成特征子空间,即为降维后的数据.

# 主成分分析PCA
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
# np.isnan()多用于单个值的检验,pd.isnull()用于对一个DataFrame或Series(整体)的检验。
train_data_y = train_data['happiness']
del train_data['happiness']
# 先将空值填充为0
def data_PCA(train_data):for i in train_data.columns: for j in train_data.index:if np.isnan(train_data[i][j]):train_data[i][j] = 0pca = PCA(n_components=8)# 返回降维的数据矩阵re = pca.fit_transform(train_data)return re train_data_x = data_PCA(train_data)
test_data = data_PCA(test_data)

返回降维后的8维数据矩阵,建立神经网络模型,进行幸福感预测,采用一般的三层神经网络,用keras中的神经网络Sequential模型,预测了测试集的happiness.代码如下:

#建立神经网络模型,进行幸福感预测
from keras.models import Sequential
from keras.layers.core import Dense,Activation
# 初始化一个神经网络
model = Sequential()
# 添加一层神经网,输入层
model.add(Dense(input_dim=8,output_dim=16))
# 设置激活函数
model.add(Activation('relu'))
# 添加输出层
model.add(Dense(input_dim=16,output_dim=1))
# 模型设置:optimizer选择优化函数,loss损失函数的评价方法
model.compile(loss='mean_squared_error',optimizer='adam')
# batch_size: 每一次迭代的样本数目. nb_epoch训练代数
model.fit(train_data_x,train_data_y,nb_epoch=1200,batch_size=20)
model.predict(test_data)
h = pd.DataFrame(model.predict(test_data),index=test_index)
h.to_csv("forcast.csv")

机器学习(四)幸福感数据分析+预测相关推荐

  1. 天池新人赛幸福感数据分析+预测

    天池新人赛幸福感预测赛题链接 https://tianchi.aliyun.com/competition/entrance/231702/introduction 本文将按以下几个步骤描述,数据分析 ...

  2. 幸福感数据分析与预测

    文章目录 分析目的 一.数据采集 1. 数据来源 2. 数据说明 二.数据传输 三.数据处理 1.查看数据 2.缺失值处理 3.合并数据集 4.时间数据处理 5.分组及One-hot编码处理 四.数据 ...

  3. 用机器学习进行学生成绩预测的数据分析(入门向 附可用源码)

    用机器学习进行学生成绩预测的数据分析(入门向 附可用源码) 声明 思路 检查数据 图像化处理 分析 相关性分析 构建模型 代码实现 可运行代码 声明 文章代码修改于kaggle博主DIPAMVASAN ...

  4. 基于机器学习的天气数据分析与预测系统

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从某天气预报网站抓取某一城市的历史天气数据,构建天气数据分析与预测系统,实现对 ...

  5. 淘宝双11数据分析与预测课程案例—步骤四:利用Spark预测回头客行为代码报错

    在练习林子雨老师的"淘宝双11数据分析与预测课程案例-步骤四:利用Spark预测回头客行为"章节时出现了代码报错. 具体在执行"val model = SVMWithSG ...

  6. python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)

    本文转自博客园,作者为hsm_computer 原文链接:https://www.cnblogs.com/JavaArchitect/p/11717998.html在笔者的新书里,将通过股票案例讲述P ...

  7. 机器学习四剑客1——Numpy

    求业之精,别无他法,日专而已矣! 一.概论 1.机器学习是什么 2.机器学习做什么 3.机器学习基本概念 二.机器学习第一步:数据分析 1.Python被大量应用在数据挖掘和深度学习领域: 2.其中使 ...

  8. 疯狂的机器学习实战-银行营销预测

    机器学习实战-银行营销预测 问题: 数据集: 链接:https://pan.baidu.com/s/1TUOLr8jFbT38p_iUh1iBsQ 提取码:1234 银行营销数据集 这些数据与葡萄牙银 ...

  9. python泰坦尼克号数据预测_机器学习入门之Python机器学习:泰坦尼克号获救预测一...

    本文主要向大家介绍了机器学习入门之Python机器学习:泰坦尼克号获救预测一,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 一.项目概要 1.应用 模式识别.数据挖掘(核心).统计学 ...

最新文章

  1. ENTER键指定事件
  2. matlab实现瑞利信道需要的步骤,基于Matlab的瑞利信道仿真.docx
  3. animate方法 jQuery中元素的创建 创建十个p标签 创建列表 动态创建列表
  4. Android Studio 自定义Gradle Plugin
  5. 计算机院校人气排名,2019高校人气排行榜_最具人气大学排行榜7月榜单发布 清华大学排第一...
  6. 机器学习--digits手写字体
  7. redies用途和使用场景
  8. echart——时间点和时间段综合显示
  9. Qt中打包程序运行时出现:0xc000007b错误
  10. 图解网络(一)——计算机网络基础
  11. Java中List使用Comparator.comparing进行排序
  12. Mina中的Kimchi SNARK
  13. 机器人莫麟_国内机器人/机甲动画汇总——2013年
  14. 一般mysql的客户端用什么软件_mysql一般用什么管理工具?
  15. 对待前任你有遗憾么?
  16. Android 9(P)之init进程启动源码分析指南之一
  17. DNSPod吴洪声:国外域名注册商域名不许国内解析
  18. 1.28 Cubemx_STM32H743 触摸屏
  19. CSS基础 外部样式表 内嵌样式表 行内样式表
  20. 2023最新小熊的日记图文列表布局小程序模板源码

热门文章

  1. 读富豪、麻将和社会保障(卢辘轳)
  2. 推荐一款FPGA lattice 深力科电子LCMXO3LF-4300C-5BG324C 使得您的控制PLD和桥接设计能够跟上技术发展
  3. 【源码分享】仿网易客户端源码效果 apkbus的~
  4. python脚本写log日志文件
  5. 独木难支:那些没被巨头招安的公司怎么活?
  6. spark如何利用namenode HA
  7. C语言正交表测试用例,测试用例设计—正交试验法
  8. 字体的故事:简单为美的 Helvetica
  9. 认知智能+数字伙伴双轮驱动,爱数以数据认知激发组织创新活力
  10. AtCoder Beginner Contest 196 A~E题解