本文简要介绍参加阿里天池新人赛——幸福感挖掘的相关思路
整体思路
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进行填充。
#缺失值填充<