资源简介
阿里云天池——快来一起挖掘幸福感吧 全部代码附注释+提交数据
编程环境:pycharm+python3.7
用到的包:numpy、pandas、matplotlib、sklearn、xgboost
代码片段和文件信息
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties # 字体管理器
font = FontProperties(fname=r“c:\windows\fonts\simsun.ttc“ size=15) # 设置汉字格式
# 导入训练数据集和测试集
# encoding=‘gbk‘,不能用utf-8
train_data = pd.read_csv(‘happiness_train_complete.csv‘ encoding=‘gbk‘)
test_data = pd.read_csv(‘happiness_test_complete.csv‘ encoding=‘gbk‘)
# print(train_data)
#数据初步可视化1
x = train_data.id
y = train_data.happiness
plt.figure(figsize=(106))
plt.title(u“幸福感随id分布“fontproperties=font)
plt.scatter(x yc=‘#DC143C‘)
plt.xlabel(“id“fontsize=18)
plt.ylabel(u‘幸福感值‘fontsize=18fontproperties=font)
plt.show()
#数据初步可视化2
tmp=train_data.happiness
k=0
res={}
for indexk in enumerate(tmp):
if k not in res:
res[k]=1
else:
res[k]+=1
#print(res)
x=[];y=[]
for k in res:
x.append(k)
y.append(res[k])
plt.title(u“幸福感数量分布“ fontproperties=font)
plt.xlabel(“幸福感值“fontsize=18fontproperties=font)
plt.ylabel(u‘数量‘fontsize=18fontproperties=font)
plt.bar(xy)
plt.show()
# 数据初步处理
train_data_y = train_data.happiness
# print(train_data_y)
# 删除含有y值的列
train_data.drop([“happiness“] axis=1 inplace=True)
# 合并训练集和测试集
data = pd.concat((train_data test_data) axis=0)
# 调查时间是对幸福感影响不大,故删掉
data.drop(“survey_time“ axis=1 inplace=True)
# print(data)
# 首先处理特征,首先获取每个特征缺失的情况
percent = (data.isnull().sum() / data.isnull().count()).sort_values(ascending=False)
tmp = percent.to_dict()
# print(tmp)
#可视化缺失率
tmp1=[]
tmp2=[]
for indexk in enumerate(percent):
tmp1.append(index)
tmp2.append(k)
plt.ylabel(u“缺失率“fontproperties=font)
plt.xlabel(u“特征“fontproperties=font)
plt.bar(tmp1tmp2)
plt.show()
# 获取缺失率大于50%的特征
tmp1 = [];
tmp2 = []
for k in tmp:
if float(tmp[k]) > 0.5:
tmp1.append(k)
tmp2.append(float(tmp[k]))
# print(tmp1)
#可视化缺失率大于50%的特征
plt.ylabel(u“缺失率“fontproperties=font)
plt.xlabel(u“特征“fontproperties=font)
plt.bar(tmp1tmp2)
plt.show()
# 由于缺失率过高,因此删除确实率大于50%的特征
data.drop(tmp1 axis=1 inplace=True)
# print(data)
#当去除一部分缺失率过大的特征之后,开始处理缺失率并不高的某些特征,对其进行填充
#打印仍然有缺失值的特征
tmp1=[];tmp2=[]
for k in tmp:
if float(tmp[k])<0.5 and float(tmp[k])>0:
tmp1.append(k)
tmp2.append(float(tmp[k]))
#print(tmp1)
# 观察到marital_now以及marital_1st的空缺可能是由于未结婚造成的,填充为9997
# print(“marital_now“data.marital_now.isnull().sum())
data.marital_now.fillna(9997 inplace=True)
# print(“marital_1st“data.marital_1st.isnull().sum())
data.marital_1st.fillna(9997 inplace=True)
# 同样,s_xxx这一类特征,都是关于被调查人配偶的情况,也可能是由于被调查人可能没有配偶而导致该项缺失,因此将该项用0填补。
# print(“s_political“data.s_political.isnull().sum())
data.s_political.fillna(0 inplace=True)
# print(“s_hukou“data.s_hukou.isnull().sum())
data.s_hukou.fillna(0 inplace=True)
# print(“s_income“data.s_income.isnull().sum())
data.s_income.fillna(0 inplace=True)
# print(“s_birth“data.s_birth.isnull().sum())
data.s_birth.fillna(0 in
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 73072 2020-07-25 11:43 happiness_submit.csv
文件 8948 2020-07-25 11:06 main.py
评论
共有 条评论