資源簡介
阿里云天池——快來一起挖掘幸福感吧 全部代碼附注釋+提交數據
編程環境: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
評論
共有 條評論