本文将通过Python对Kaggle中的数据集进行分析。本文会包含所有代码,尽可能多的使用有关可视化的函数以及数据分析的模型。
一、项目简介
1.1 数据集简介
数据集来源:本文基于Kaggle的数据集,链接:Taxi trip fare prediction | Kaggle
数据集内容:下图为原文中的介绍
中文说明:
trip_duration | 行驶时间 |
distance_traveled | 行驶距离 |
num_of_passengers | 乘客数量 |
fare | 行驶费用 |
tip | 司机小费 |
miscellaneous_fees | 额外费用 |
total_fare | 费用总和 |
surge_applied | 动态定价 |
1.2研究内容
预测费用总和。在实际应用上,可以与打车平台合作,用户给定目的地、出发时间、乘客人数。通过知道行车距离、预计的行驶时间、乘客人数来预测行车费用返回给用户,用户可根据预测的行车费用来确定是否打车。
二、数据处理与可视化
2.1 数据预处理
2.1.1 导包
包含数据处理与可视化的所有包,其中可视化中文代码根据自己情况编写,这里是苹果系统
#导包
import pandas as pd
#可视化
import matplotlib.pyplot as plt
import seaborn as sns
#可视化中文
from matplotlib import font_manager
plt.rcParams['font.sans-serif']=['Heiti TC']
2.1.2 导入数据
登录上文中的网站下载原始数据集。
文件初始状态:
用过Pandas包的方法导入原文件
#导入原文件
data = pd.read_csv('train.csv')
2.1.3 数据清洗
使用Pandas中针对DateFrame中的分析函数
#数据集概括
data.info()
由输出结果,我们可以发现一共有209673行数据且没有空值
data.describe()
为了后文更加清楚,我将列名转化为了中文,这里大家自由选择即可,如果没有转化下文中涉及到列名的记得自己变换
#列名转中文
names = ['行驶时间','行驶距离','乘客数量','行驶费用','司机小费','额外费用','费用总和','动态定价']
data.columns = names
data
2.2 数据可视化
为了后文构建模型更加准确,这里我们先进行数据可视化观察数据的大致特征
我们先简单查看我们需要预测的费用总和的情况
#描述统计
data['费用总和'].describe()
绘制费用总和的直方图查看分布情况,bins设置柱子(箱子)的数量
#费用总和
plt.hist(data['费用总和'],bins = 50)
plt.show()
由于数据中存在远超均值的数据,导致X轴拉伸过长,无法精确观察数据
#划分
df = data[data['费用总和'] < 800]
df['费用总和'].describe()
这里我们用800划分,可以发现数量变为了209320个,少了300多个数据,对数据整体影响不大
plt.hist(df['费用总和'], bins=30)
plt.xlabel('费用总和')
plt.title('费用总和(小于800)')
plt.show()
这里我们可以发现费用总和集中在0-200之间
按照相同的方法,可绘制其他变量的分布情况,有些变量存在极大的数值,例如上文中的费用总和,可进行筛选后绘图来绘制出更清楚的图。
三、模型构建
通过查看数据集,我们可以发现费用总和等于行驶费用+司机小费+额外费用,因此我们的问题转换为预测行驶费用。此外,由于数据集数量过大(20w条),因此我这里只选择前2000条,大家可以根据自己情况进行选择,数据量越大后文模型计算时间越长。
data = data[0:2000]
3.1 模型构造准备
3.1.1 评估指标
均方误差