快来一起挖掘幸福感
赛前预览
首先我们看一下比赛的大致要求和数据提供
这次比赛大概是通过问卷中的问题来获取一些人的个人情况等,从中提取重要因素用来判断幸福感。
数据可视化
import pandas as pd
import matplotlib.pyplot as plt
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
1
2
3
4
5
6
complete文件为变量完整版数据,abbr文件为变量精简版数据。
index文件中包含每个变量对应的问卷题目,以及变量取值的含义。
survey文件是数据源的原版问卷,作为补充以方便理解问题背景。
train = pd.read_csv('happiness_train_complete.csv', encoding = 'ansi')
test = pd.read_csv('happiness_test_complete.csv', encoding = 'ansi')
train_abbr = pd.read_csv('happiness_train_abbr.csv', encoding = 'ansi')
test_sub=pd.read_csv('happiness_submit.csv', encoding = 'ansi')
1
2
3
4
我们这里读取详细的train和test以及简略版的train和提交成绩的文件
train_abbr.shape, train.shape
1
精简版提供的feature有42个,而详细的有140个,当然了,精简版只是为了更好地理解问卷中主要涉及的问题方面,这里我就直接从详细版下手,一步步分析
train.head()
1
数据有很多,一眼看去就有不重要的id(可删),非数字类型的time等一些待处理的数据
test.head()
1
测试数据就是缺少了happiness的label,这也是我们需要预测的目标
import seaborn as sns
sns.countplot(x = 'happiness', data = train)
1
2
我们这里将happiness的分布情况画出来
幸福指数高的还是比较多啊,1、2、3、4、5是幸福等级,-8则是填了无法回答,那我们默认其为3类,尽可能不影响大局
label = train['happiness']
label = label.map(lambda x:3 if x==-8 else x)
train.drop(['happiness'], axis = 1, inplace = True)
data = pd.concat((train, test), axis = 0)
1
2
3
4
我们这里将-8替换为3,并且将label单独提取出来,方便之后输入模型作为y,同时将train和test整合到一起,方便数据的共同处理
sns.countplot(x = 'nationality', data = data)
1
观察民族的分布,极为不均匀,这应该也是正常现象,毕竟少数民族占比不大