阿里天池新人赛——幸福感挖掘

本文详细记录了参与阿里天池新人赛——幸福感挖掘的全过程,从问题分析、数据清洗、处理及可视化,到数据分析和建模计算。通过对幸福感相关因素的探索,运用多种模型进行预测,并取得了良好的竞赛成绩。
摘要由CSDN通过智能技术生成

本文简要介绍参加阿里天池新人赛——幸福感挖掘的相关思路

整体思路

1.分析问题,提出分析目的
2.数据清洗、数据预处理及数据可视化
3.数据分析
4.建模计算
5.分析结果及竞赛成绩

1.分析问题,提出分析目的

幸福感是一个古老而深刻的话题,是人类世代追求的方向。与幸福感相关的因素成千上万、因人而异,大如国计民生,小如路边烤红薯,都会对幸福感产生影响。在这些错综复杂的因素中,如何找到其中的共性,一窥幸福感的要义,进而提升人民的幸福感,能去帮助那些抑郁不开心的人,这,是展开幸福感数据分析的目的
主要解决的几个问题如下:
1.调查人群的整体幸福感情况
2.对数据如何进行处理,对缺失值如何处理,对分级的数据如何处理
3.用哪些模型进行分析
针对问题一,利用matplotlib、seaborn画图库可视化整体人群的幸福状况;针对问题二,将分级系列值用加和的形式代替,缺省比例超过15%的数据进行删除,缺省值用众数进行代替;针对问题三,先利用相关性矩阵找出与幸福感关联较大的数据项,利用融合CatBoostRegressor + LightGBM + xgboost + gbdt现有模型的方式进行数据分析

2.数据清洗、处理及可视化

分析工具:jupyter notebook
(1)导入数据,并对数据进行整体观察

df_train = pd.read_csv('happiness_train_complete.csv', encoding='gbk')#读取训练数据
df_test = pd.read_csv('happiness_test_complete.csv', encoding='gbk')#读取测试数据
df_train.head()#对主要数据进行显示

源数据展示
(2)对各个参数的缺失数目进行统计,观察标签happiness的分布情况,并对异常值进行删除处理

df_train.isnull().sum()#统计缺失参数的数目
	#查看lable的分布
	y_train=df_train["happiness"]#将df_train中happiness这一栏的数据赋给y_train
	y_train.value_counts()#统计y_train中各个数值的数目
	#处理异常值
	df_train = df_train.loc[df_train['happiness'] != -8]#将happiness=-8的值剔除
	#查看分布情况
	f,ax=plt.subplots(1,2,figsize=(18,8))#创建1*2个子图  figsize是定义图像大小  ax就是图像的总称,		ax[0]左,ax[1]右
	print(df_train['happiness'].value_counts())
	#df_tarin['happiness'].value_counts()统计happiness栏目中各个值出现的次数
	df_train['happiness'].value_counts().plot.pie(autopct='%1.1f%%',ax=ax[0])
	#plot.pie()绘制饼图autopct 控制饼图内百分比设置,可以使用format字符串或者format 	function'%1.1f'指小数点前后位数(没有用空格补齐)
	ax[0].set_title('happiness')
	ax[0].set_ylabel('test')#设置竖直方向的标题
	sns.countplot('happiness',data=df_train,ax=ax[1])#画条形图
	ax[1].set_title('happiness')
	plt.show()

在这里插入图片描述

(3)对数据进行处理
将训练集和测试集数据进行连接,并将系列值进行加和处理

#数据进行处理
total=total[total["happiness"]!=-8]
i=1
total["public_service"]=0#新增一列栏目为total["public_service"],并将初始值设置为0,用以存储对所有public_service1-9系列的值
while i<10:                                                                                                                                                                                                                                                                                                                                                                                                                                                
    total["public_service"]=total["public_service"]+total["public_service_"+str(i)]#将所有的值public_service1-9系列的值加起来
    total=total.drop(["public_service_"+str(i)],axis=1)#drop删除行或者列 axis=1时删除列,=0时删除行 加完值后便将public_service1-9列删除
    i=i+1
#接下来的同上都是将所有的系列值加和
i=1
total["trust"]=0
while i<14:
    total["trust"]=total["trust"]+total["trust_"+str(i)]
    total=total.drop(["trust_"+str(i)],axis=1)
    i+=1
    ......

进行缺失值填充
先对各个数据项的缺失比例进行计算,如果缺失比例超过百分之15就对该数据项进行删除。若不超过百分之15,数值型数据用众数进行填充,类别型数据用None进行填充。

#缺失值填充<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值