简易的pandas

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('英国南安普顿乘客生还率')

以上就是实战中最简单的数据分析,只分析了部分因素和死亡率之间的关系。对于其他因素之间的关系,读者可以照葫芦画瓢进行分析。

### 回答1: ARIMA模型是一种时间序列预测模型,其通过对历史数据的分析和建模,预测未来数据的趋势和变化。下面是一个简单的ARIMA模型的Python代码示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.arima_model import ARIMA # 加载数据 data = pd.read_csv('data.csv') data['Date'] = pd.to_datetime(data['Date'], format='%Y-%m-%d') data = data.set_index('Date') # 绘制时间序列图 plt.plot(data) plt.xlabel('Date') plt.ylabel('Data') plt.show() # 拆分数据集 train_data = data[:'2018'] test_data = data['2019':] # 训练ARIMA模型 model = ARIMA(train_data, order=(1, 1, 1)) model_fit = model.fit(disp=0) # 预测未来数据 predictions = model_fit.predict(start='2019-01-01', end='2020-01-01', dynamic=False) # 绘制预测结果图 plt.plot(test_data) plt.plot(predictions, color='red') plt.xlabel('Date') plt.ylabel('Data') plt.show() ``` 其中,`data.csv`是包含时间序列数据的CSV文件,`train_data`和`test_data`分别表示训练集和测试集,`order=(1, 1, 1)`表示ARIMA模型的阶数为(1, 1, 1),即ARIMA(1, 1, 1)模型。`model_fit.predict()`函数用于预测未来数据,`start`和`end`参数分别表示预测的起始日期和结束日期。最后,将测试集和预测结果绘制在同一张图上以便进行比较。 ### 回答2: ARIMA模型是一种常用的时间序列预测模型,可以用于分析和预测具有趋势和季节性的数据。下面是一个使用Python实现ARIMA模型的简易代码示例: ```python # 导入所需的库 import pandas as pd import numpy as np from statsmodels.tsa.arima_model import ARIMA # 导入时间序列数据 data = pd.read_csv('data.csv') # 将时间列转换为日期格式 data['日期'] = pd.to_datetime(data['日期']) # 将日期列设置为索引 data.set_index('日期', inplace=True) # 拆分训练集和测试集 train_data = data.loc[:'2019-12-31'] test_data = data.loc['2020-01-01':] # 创建ARIMA模型 model = ARIMA(train_data, order=(1, 1, 1)) # 设置p、d、q参数 # 拟合模型 model_fit = model.fit(disp=0) # 进行预测 forecast, stderr, conf_int = model_fit.forecast(steps=len(test_data)) # 将预测结果转换为DataFrame forecast_df = pd.DataFrame(forecast, index=test_data.index, columns=['预测结果']) # 输出预测结果 print(forecast_df) # 可视化预测结果 import matplotlib.pyplot as plt plt.plot(train_data, label='训练集') plt.plot(test_data, label='测试集') plt.plot(forecast_df, label='预测结果') plt.legend() plt.show() ``` 以上代码演示了如何使用ARIMA模型对时间序列数据进行训练和预测。首先,我们使用pandas库导入时间序列数据,并将日期列转换为日期格式和设置为索引。然后,我们将数据拆分为训练集和测试集。接下来,我们使用statsmodels库中的ARIMA模型创建模型,并通过调整p、d、q参数进行拟合。最后,我们使用训练好的模型对测试集进行预测,并将预测结果可视化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打火机烧水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值