文章目录
Pandas中的函数和操作细如牛毛,即使是一本千页书籍也无法囊括其中,跟不用说一篇短短的博客。
所以撰写本篇博客并不是为了详细介绍Pandas中的函数及其用法,而是从比较高的实战角度对Pandas在机器学习比赛中一些简单的用法进行介绍。
对于Pandas中函数及其函数的详细用法读者可以参考Pandas官网。
一.机器学习中的Pandas
Pandas 是 Python 语言的一个扩展程序库,常用于数据分析和数据清洗。
说到Pandas就不得不说到和它息息相关的机器学习和深度学习领域
下面是摘自科普中国的简介
我将Pandas在机器学习比赛中需要用到的地方总结成一张图。
二 .一些常见的操作
下面操作所用到的数据是某个机器学习比赛中部分红酒数据。
地址:红酒数据
1.缺失值处理
对于缺失值,根据实际情况通常有以下两种处理方法:
(1)删除
(2)填充
删除可以使用python自带的del函数,通常适用于缺失比较严重,和与样本偏离严重的数据
填充可以说是缺失值处理中必备的操作,只要有缺失值就会有填充操作。
下面是填充代码,函数的具体用法可查看pandas官网
import pandas as np
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
pd.set_option('display.max_rows', None)
pd.set_option('display.max_colwidth', 500)
df = pd.read_excel('../练习/wine_data.csv')
df = pd.DataFrame(df)
print(df.iloc[:, 8])
df['density'] = df['density'].fillna(df.iloc[:, 8].mean())
print(df['density'])
2.数据可视化
python拥有很多与数据可视化相关的库,比如matplotlib,seaborn,pyecharts,HoloViews,Altair,Altair,ggplot等,对于初学者,只需掌握前两个即可应对绝大部分问题。对于matplotlib教程可以看博主写的文章。
机器学习——Matplotlib入门教程
大数据分析——Matplotlib进阶教程
进行数据可视化之前需要对数据有一个大致的了解
通过describe()函数可以对数据有一个直观的感受
下面是调用函数之后所展现的结果,可以发现打印出的信息有
参数量,平均数,标准差,最小值,最大值,和1/4分位数,中位数,3/4分位数。
3.数据集操作
数据集操作里面通常包括:
1.将数据集划分为一定比例的测试集和训练集合
2.选取某个集合中而特定范围的数据
3.选取某个集合中特定变量的数据
4.在交叉验证中对数据集进行操作
5.对数据的归一化,标准化等
6.对数据进行编码转换
……
由于这里的操作通常和机器学习相挂钩缺少具体示例未接触过机器学习的读者不易理解,所以这里暂时不详细描述。感兴趣的读者可以自己搜索学习。
三.实战演练
本次实战使用的是kaggle上经典的泰坦尼克号数据集
数据集合下载:泰坦尼克号
下面是对于数据标签的中文描述
下面的代码片段默认导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
1.数据载入及初步观察
首先查看是否有空缺值
data = pd.read_csv('../practice/datasets/train.csv')
#缺失值处理
print(data.isnull().head())
df1=data.notnull()
print(df1.sum())
可以看出Age,Cabin,Embarked出现缺失值了。
2.探索性数据分析
查看数据基本信息
print(data.info())
对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列),从数据中你能发现什么
排序后,如果我们仅仅关注年龄和票价两列。根据常识我知道发现票价越高的应该客舱越好,所以我们会明显看出,票价前20的乘客中存活的有14人,这是相当高的一个比例,那么我们后面是不是可以进一步分析一下票价和存活之间的关系,年龄和存活之间的关系呢?当你开始发现数据之间的关系了,数据分析就开始了。
当然,这只是我的想法,你还可以有更多想法。
3.数据清洗及特征处理
我们拿到的数据经常会有很多缺失值,比如我们可以看到Cabin列存在NaN,那其他列还有没有缺失值,这些缺失值要怎么处理呢
首先查看数据中缺失值情况
4.数据重构
5.数据可视化
首先我们来看看男女死亡人数
sex = data.groupby('性别')['是否幸存'].sum()
print(sex)
sex.plot.bar()
plt.title('survived_count')
plt.show()
female 233
male 109
我们再来看看男女各自总人数
df1=data['是否幸存'].value_counts()
print(df1)
df1.plot.bar()
plt.title('sex_count')
plt.show()
male 577
female 314
可以计算出性别存活比例分别为
男:18.9%
女:74.2%
接下来再看看各个年龄段的人数和生还人数
age_range = data['年龄']
# 各年龄阶段人数
age_num,_ = np.histogram(age_range,range=[0,80],bins=16 )
age_num
# 各年龄阶段生还人数
age_survived = []
for age in range(5,81,5):
survived_num = data.loc[(age_range>=age-5) & (age_range<=age)]['是否幸存'].sum()
age_survived.append(survived_num)
age_survived
[31, 11, 11, 37, 45, 48, 51, 39, 23, 21, 15, 8, 6, 0, 0, 1]
# 绘制条形图
plt.figure(figsize=(12,6))
plt.bar(np.arange(2,78,5)+0.5,age_num,width=5,label='总人数',alpha=0.8)
plt.bar(np.arange(2,78,5)+0.5,age_survived,width=5,label='生还人数')
plt.xticks(range(0,81,5))
plt.yticks(range(0,121,10))
plt.xlabel('年龄',position=(0.95,0),fontsize=15)
plt.ylabel('人数',position=(0,0.95),fontsize=15)
plt.title('各年龄阶段人数和生还人数条形图')
plt.grid(True,linestyle=':',alpha=0.6)
下面我们再从不同角度去可视化不同因素和死亡之间的关系
# 不同登入港口乘客的生还情况
pclass_count = data.groupby(by='仓位等级')['是否幸存'].value_counts()
plt.figure(figsize=(3*5,5))
axes1=plt.subplot(1,3,1)
axes1.pie(pclass_count.loc[1][::-1],autopct='%.2f%%',labels=['死亡','存活'],pctdistance=0.4,labeldistance=0.6,
shadow=True,explode=[0,0.1],textprops=dict(size=15),colors=['#9400D3','#FFB6C1'],startangle=45)
axes1.set_title('一等舱乘客生还率')
axes2=plt.subplot(1,3,2)
axes2.pie(pclass_count.loc[2],autopct='%.2f%%',labels=['死亡','存活'],pctdistance=0.4,labeldistance=0.6,
shadow=True,explode=[0,0.1],textprops=dict(size=15),colors=['#4169E1','#AFEEEE'])
axes2.set_title('二等舱乘客生还率')
axes3=plt.subplot(1,3,3)
axes3.pie(pclass_count.loc[3],autopct='%.2f%%',labels=['死亡','存活'],pctdistance=0.4,labeldistance=0.6,
shadow=True,explode=[0,0.1],textprops=dict(size=15),colors=['#698B69','#76EE00'])
axes3.set_title('三等舱乘客生还率')
# 从图中不难看出,一等舱乘客生还几率最高,超过60%; 二等舱乘客生还几率次之,接近50%; 而三等舱只有不到25%的乘客能够生还,电影中可以看到三等舱都在船体的中下部,而且轮船撞到冰山后船体内的舱门为了防止进水而关闭导致很多乘客无法逃出船舱到达甲板。
# 结合刚才不同登船港口的生还几率差异,我们可以猜测一下法国登船的乘客分布在一、二等舱的人所占比例要比爱尔兰和英格兰登船的乘客多,下面可以验证一下我们的猜测。
# 不同登入港口乘客的船舱分布情况情况
embarked_pclass = data.groupby(by='登船港口')['仓位等级'].value_counts()
# 三张饼图画在同一张图纸上
plt.figure(figsize=(3*5,5))
axes1=plt.subplot(1,3,1)
axes1.pie(embarked_pclass.loc['C'],autopct='%.2f%%',labels=['一等舱','三等舱','二等舱'],pctdistance=0.4,labeldistance=0.6,
shadow=True,explode=[0,0.1,0.1],textprops=dict(size=15),colors=['#9400D3','#FFB6C1','#FF6347'])
axes1.set_title('法国瑟堡市乘客生还率')
axes2=plt.subplot(1,3,2)
axes2.pie(embarked_pclass.loc['Q'],autopct='%.2f%%',labels=['三等舱','二等舱','一等舱'],pctdistance=0.4,labeldistance=0.6,
shadow=True,explode=[0,0.1,0.1],textprops=dict(size=10),colors=['#4169E1','#AFEEEE','#66CDAA'],startangle=10)
axes2.set_title('爱尔兰昆士敦乘客生还率')
axes3=plt.subplot(1,3,3)
axes3.pie(embarked_pclass.loc['S'],autopct='%.2f%%',labels=['三等舱','二等舱','一等舱'],pctdistance=0.4,labeldistance=0.6,
shadow=True,explode=[0,0.1,0.1],textprops=dict(size=15),colors=['#698B69','#76EE00','#76EEC6'],startangle=180)
axes3.set_title('英国南安普顿乘客生还率')
以上就是实战中最简单的数据分析,只分析了部分因素和死亡率之间的关系。对于其他因素之间的关系,读者可以照葫芦画瓢进行分析。