Titanic Kaggle 竞赛技术小结(二)

写在开头:接着上一次的分析,开始对数据可视化的分析展示

回归前文

在前文中我们分享了一些数据查看和清洗的技巧,小面展示一些在Titanic 比赛上的数据可视化技巧。可以点击链接进行查看,
Titanic Kaggle 竞赛技术小结(一)

技术总结

一、全文思路
Step1. 载入数据、包,并查看数据;
Step2. 对数据进行清洗,包括去重复值、异常值、缺失值或特征化数值化处理;
Step3. 利用数据可视化,寻找有价值的变量与变量分组;
Step4. 利用可行的机器学习、深度学习模型进行模型训练;
Step5. 对不同模型的效果进行评估,交叉验证、重要变量筛选、查准率、查全率、F值、ROC-AUC等进行评价;
Step6. 保存数据,结束。

二、关键程序(续)

仅展示在Titanic中可能用到的一些图形的绘制。

# 此处使用的包
import matplotlib.pyplot as plt
%matplotlib inline #在juypter notebook时添加此语句
import seaborn as sns

Step3. 利用数据可视化,寻找有价值的变量与变量分组
直方图

#直方图绘制
g = sns.FacetGrid(train_df, col='Survived', size=4)
g.map(plt.hist, 'Age', bins=20, color='b', alpha=0.5)
g.set_axis_labels("Age",'Survieved')
g.set(xticks = [10,30,50])
g.fig.subplots_adjust(wspace=.02,hspace=.02)#子图和子图之间的间隔设置
plt.show()

解释
sns.FacetGrid():设置画布主要有col、row、hue三个参数调整画布按照哪一种类别进行分割,此处选择的是按照Survived变量按列划分,Survived有0,1两个类别,那么就是分为左右两个图;
g.set_axis_labels():设置横纵坐标名,Age为横轴名,Survived为纵轴名;
g.set():对横纵刻度进行设置;
g.fig.subplots_adjust():设置字体子图和子图之间的间隔设置。在这里插入图片描述
简单柱状图

#4.2对年龄的关系进行查看
age_3 = train_df[train_df.Age<3]['Age'].shape[0]
age_3_12 = train_df[train_df.Age>=3][train_df.Age<12]['Age'].shape[0]
age_12_18 = train_df[train_df.Age>=12][train_df.Age<18]['Age'].shape[0]
age_18_30 = train_df[train_df.Age>=18][train_df.Age<30]['Age'].shape[0]
age_30_60 = train_df[train_df.Age>=30][train_df.Age<60]['Age'].shape[0]
age_60 = train_df[train_df.Age>=60]['Age'].shape[0]
print(colored("目前年龄段人数分布如下", 'red'))
print("小于三岁的乘客有"+str(age_3)+"个")
print("小于十二岁但大于三岁的乘客有"+str(age_3_12)+"个")
print("小于十八岁但大于十二岁的乘客有"+str(age_12_18)+"个")
print("小于三十岁但大于十八岁的乘客有"+str(age_18_30)+"个")
print("小于六十岁但大于三十岁的乘客有"+str(age_30_60)+"个")
print("大于六十岁的乘客有"+str(age_60)+"个")

plt.rcParams['font.sans-serif'] = ['SimHei'] 
plt.rcParams['font.family'] = 'sans-serif'
#解决负号'-'显示为方块的问题 
plt.rcParams['axes.unicode_minus'] = False
#notebook特有,直接在python console里生成画布或图像
plt.figure(3, figsize=(20,10))
xlabel = ['age<3','3<age<12','12<age<18','18<age<30','30<age<60','age>60']
yvalue  = [age_3,age_3_12,age_12_18,age_18_30,age_30_60,age_60]
plt.bar(xlabel, yvalue, color='r', alpha=0.5)
plt.xlabel('各个年龄段', color='w', fontsize=25)
plt.ylabel('人数', color='w', fontsize=25)
plt.yticks(fontsize=20, color='w')
plt.xticks(fontsize=20, color='w')

解释
plt.rcParams:调节参数,此处的三个语句主要是为了解决中文显示问题,以及负号显示问题;
plt.figure:设置画布,figsize设置画布大小;
plt.xlabel:横坐标轴标题设置;
plt.xticks:横轴类别标签相关设置。

目前年龄段人数分布如下
小于三岁的乘客有24个
小于十二岁但大于三岁的乘客有44个
小于十八岁但大于十二岁的乘客有45个
小于三十岁但大于十八岁的乘客有448个
小于六十岁但大于三十岁的乘客有304个
大于六十岁的乘客有26个

在这里插入图片描述
堆积柱状图
此处省去数据提取的过程

#堆积柱状图设置
age_list = ['age<3','3<age<12','12<age<18','18<age<30','30<age<60','age>60']
survived = [sage_3,sage_3_12,sage_12_18,sage_18_30,sage_30_60,sage_60]  
unsurvived = [uage_3,uage_3_12,uage_12_18,uage_18_30,uage_30_60,uage_60] 
plt.bar(age_list , survived, label='Survived',fc = 'b',alpha=0.5)  
plt.bar(age_list , unsurvived, bottom=num_list, label='Unsurvived',fc = 'y',alpha=0.5)  
plt.xlabel('各个年龄段', color='w', fontsize=25)
plt.ylabel('人数', color='w', fontsize=25)
plt.yticks(fontsize=20, color='w')
plt.xticks(fontsize=20, color='w')
plt.legend(fontsize=20)  
plt.show()

解释
在这里插入图片描述
解释
在堆积柱状图中,需要话两个柱状图,然后设置bottom参数表示哪一个在下面,再调整颜色就可以绘制出堆积柱状图了。
箱线图
这里展示两种绘图包的箱线图

#sns绘图
sns.boxplot(x = train_df.Fare,palette="Blues",width=0.5, notch=True,linewidth=4)

解释
palette:是内置的一个调色板,可以实现对类别的颜色设置字典进行调色;
notch:为True时表示在箱线图均值处设置一个缺口。
在这里插入图片描述

# matplotlib画箱线图
plt.figure(3, figsize=(10,10))
Age_data = {
    "Age of train data":train_df['Age'],
    "Age of test data":test_df['Age']
    }
df = pd.DataFrame(Age_data)
df.boxplot()
plt.ylabel('Age', fontsize=10, color='w')
plt.yticks(fontsize=10, color='w')
plt.xticks(fontsize=10, color='w')

在这里插入图片描述
线图

#sns绘图
grid = sns.FacetGrid(train_df, row='Embarked', size=2.2, aspect=1.6)
grid.map(sns.pointplot, 'Pclass', 'Survived', 'Sex', palette='deep')
grid.add_legend()

解释
此图按照Embarked进行横轴的画布划分,然后以pclass为横轴,Survived均值为纵轴,并且以sex类别为两类,然后默认以均值连接(join=True)。图上的竖线表示的是置信区间。
在这里插入图片描述

#matplotlib制图
d1 = {"0":0.35, "1":0.54, "2":0.46, "3":0.25, "4":0.17, "5":0.00, "8":0.00}
plt.figure(3, figsize=(20,10))
plt.plot(d1.keys(), d1.values(), color='r', alpha=0.5, linewidth=4)
plt.yticks(fontsize=20, color='w')
plt.xticks(fontsize=20, color='w')
plt.legend(fontsize=20)  
for i in d1.items():
    plt.text(i[0], i[1], i[1], ha='center', fontsize=18)

解释
制作带标签的图需要首先绘制线图,然后再根据指标的绘制添加数据信息
在这里插入图片描述
结语
以上就是在Titanic上可能会用到的数据可视化的内容,下一篇将会说明Titanic在机器学习方面使用的东西以及模型的评估。对于数据可视化,后期会集中学习一些再进行分享。
谢谢阅读。
参考
箱线图的参考博文:箱线图制作
线图制作参考Notebook:sns线图制作

发布了3 篇原创文章 · 获赞 9 · 访问量 123

猜你喜欢

转载自blog.csdn.net/qq_35149632/article/details/104319510