2.Python数据分析项目——旅游景点票价预测

2023-11-14

1.总结

流程 具体操作
基本查看 查看缺失值、查看数值类型
预处理 缺失值处理(填充)拆分数据(获取有需要的值) 、统一数据格式
数据分析 groupby分组求最值数据、seaborn可视化
预测(RandomForestRegressor) 拆分数据集、建立模型、训练模型、预测、评估模型

数量查看:条形图
占比查看:饼图
数据分区分布查看:概率密度函数图
查看相关关系:条形图
分布分析:分类直方图(countplot)、分布图(distplot)

2.数据的基本查看

df = pd.read_csv('data.csv')
'''
    1.得出对于level我们需要获取它的单独等级,并且处理缺失值(填充0);
    2.获取地区数据,使用拆分成多列的方式
    3.获取热度值数据,整理成统一的数据格式
'''
df.head()

# 对数值列进行描述性统计
df.describe()

在这里插入图片描述

3.数据的预处理

第二步中,已经确定好了需要处理的方向

# 处理等级数据
# 1.填充缺失值:将等级为NaN的数据填充为0
df['level'] = df['level'].fillna(0)
# 2.只保留等级数值
df['level'] = df['level'].apply(lambda x:0 if x==0 else int(x[0]))

# 处理热度列:只保留热度的数字
# 1.先将热度数字字符串提取出来,转换为浮点型数据,浮点型数据保留两位小数,最后结果再一次转换为浮点型数据
df['hot'] = df['hot'].apply(lambda x:float("%.2f"%float(x.split(" ")[-1])))

# 处理区域数据
# 1.对区域中的省、市、区 分别提取出来,并存储到新的列中
df['province'] = df['area'].apply(lambda x:x.split('·')[0]) # 新增省份列
df['city'] = df['area'].apply(lambda x:x.split('·')[1]) # 新增城市列
df['mini_city'] = df['area'].apply(lambda x:x.split('·')[-1]) # 新增区列
# 2.删除原来的area列
del df['area']
df

在这里插入图片描述

4.数据分析

4.1 统计销量最多的前10个景点

# 1.分组统计销量
num_top = df.sort_values(by='num', ascending=False)
# 2.重置索引
num_top = num_top.reset_index(drop=True)# 重置索引,将原来的索引删了
# 3.绘制图形
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 设置字体
import seaborn as sns
sns.set(font='SimHei') # 设置绘图字体中文编码
fig = plt.figure()
sns.barplot(num_top['name'][:10], num_top['num'][:10])# 绘制条形图
fig.show()

在这里插入图片描述

4.2 景区评级和省份之间的关系

# 1.新增加应该level_sum列,设置初始值为1。最后用其计数
df['level_sum'] = 1
# 2.分组(景区和省份)再对应两者求和
var = df.groupby(['province','level'])['level_sum'].sum()
# 3.将Series转化为DataFrame。(两索引重置分别转换为DataFrame的行和列)
var.unstack()
# 4.绘制条形图
var.unstack().plot(kind='bar')

在这里插入图片描述

4.3 统计人数最多的前10个5A级景区

# 先选取5A级别的景区,然后根据数量降序排序,最后重置索引并删除原来的索引,选取前10个
top_5A = df[df['level'] == 5].sort_values(by='num',ascending=False).reset_index(drop=True)[:10]
# 绘制经典名称与销量(人数)条形图
sns.barplot(top_5A['name'], top_5A['num'])
plt.title('人数最多的5A级景区')
plt.xticks(rotation=90) # x轴名称旋转90度
plt.show()

在这里插入图片描述

4.4 数据分布分析——等级、热度、价格、销量

# 1.景区等级分布
plt.figure(figsize=(20,1))
sns.countplot(y='level', data=df)

在这里插入图片描述

# 2.景区热度分布
# 解决图形负号乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 热度分布图绘制
sns.displot(df['hot'])
plt.xticks(rotation=25)

在这里插入图片描述

#3.价格分布分析
df.describe() # 查看发现不符合实际,国内票价很少超过300元,删除,不参与分析
df = df.drop(df[df['price']>300].index)
df.describe()
sns.displot(df['price'])
plt.xticks(rotation=25)

在这里插入图片描述

# 4.销量分布
# 数据过于集中,导致查看分布无意义,所以切分查看
df['num_cut'] = pd.cut(df['num'],10)
plt.figure()
sns.countplot(y='num_cut', data=df)

在这里插入图片描述

5.建模前数据预处理

# 1.删除建模不需要的列
df.drop(['level_sum', 'num_cut'],axis=1,inplace=True)
df.head()

# 2.对指定列进行one-hot编码(推荐编码分类的列)
one_hot_df = pd.get_dummies(df[['province', 'city', 'mini_city']])
# 3.与原本的数据表合并
df = df[['level','hot','price','num']]
df = pd.merge(df, one_hot_df, left_index=True, right_index=True)
df.head()

在这里插入图片描述

6.建模——对票价进行预测

使用RandomForestRegressor(随机森林)建立回归模型,对票价进行预测

# 1.导包
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, mean_absolute_error

# 2.获取数据集
X = df[df.columns.difference(['price'])].values # 获取样本特征集
y = df['price'].values # 获取样本标签值

# 3.分割数据集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=456)

# 4.建立模型
rf = RandomForestRegressor(n_estimators=20, max_depth=7)

# 5.拟合训练模型
rf.fit(X_train, y_train)

# 6.预测值
pred = rf.predict(X_test)

# 7.模型评估
print("MSE: ", mean_squared_error(y_test, pred))
print("MAE: ", mean_absolute_error(y_test, pred))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2.Python数据分析项目——旅游景点票价预测 的相关文章

随机推荐

  • gojs Node 中文文档

    PS 其中大部分API都一个个自己使用测试一遍了解其实现效果 再根据描述编写 如果有不正确的请在评论区指出 Hierarchy GraphObject Panel Part Node Group 节点是可以通过线连接到其他节点的零部件 也可
  • 【数据结构 】八大排序(插入,希尔,选择,堆,归并,快排,冒泡,计数)

    文章目录 一 排序的基本概念 二 常见的基本排序 1 插入排序 插入排序的时间复杂度 2 希尔排序 希尔排序的时间复杂度分析 3 选择排序 选择排序时间复杂度分析 4 堆排序 堆排序的时间复杂度 5 归并排序 6 快速排序 快速排序的时间复
  • LeetCode 1.两数之和

    题目链接 1 两数之和 思路分析 可以暴力枚举时间复杂度为 O n 2 O n 2 O n2 也可以用哈希表
  • RPA机器人来了, 你的饭碗还好吗?

    摘要 RPA正在席卷全球各行各业 从金融到医疗再到零售 多种重复有规律的工作流程正在被代替 从上世纪90年代到现在 RPA经历了怎样的发展历程 目前又是怎么样的现状呢 RPA 正在席卷全球 这是一个平常的星期二 你睁开睡眼惺忪的眼睛 迅速洗
  • 梳理Vue常考面试题型

    完整版在线阅读 http interview poetries top 1 对于MVVM的理解 MVVM是Model View ViewModel缩写 也就是把MVC中的Controller演变成ViewModel Model层代表数据模型
  • Linux03:CentOS7.5安装jdk1.8

    jdk下载地址 链接 https pan baidu com s 1GvcOgsIXn502aZC5yk1aDg 提取码 l16v 1 上传安装包 创建目录 mkdir p data soft 上传安装包 2 解压 tar zxvf jdk
  • Swagger常用注解强调点说明

    Swagger注解 常用注解 Api 用于类 一般用于controller类 表示 标识这个类是swagger的资源 显示在文档中 ApiOperation 用于方法 一般用于controller中的方法上 表示一个http请求的操作 Ap
  • Python爬虫的Selenium(学习于b站尚硅谷)

    目录 一 Selenium 1 为什么要学习Selenium 1 什么是Selenium 2 为什么使用selenium 3 代码演示 2 selenium的基本使用 1 如何安装selenium 2 selenium的使用步骤 3 代码的
  • Linux是什么,能干什么,在哪干?

    Linux就是个操作系统 它和Windows XP Windows 2003 2008什么的一样就是一个操作系统而已 Linux能干什么 它能当服务器 服务器上安装者各种企业应用 服务 比如 Web服务 apache 就是能架设网站的 数据
  • 程序员的自我修养(十二) -- Linux共享库

    共享库 从文件结构上来看 共享库和共享对象没什么区别 Linux下的共享库就是欧通的ELF共享对象 共享库的更新有两类 兼容更新 不兼容更新 版本命名 libname so x y z x 主版本号 库的重大升级 不同主版本号之间是不兼容的
  • 【高危】 Zoom Desktop Client for Windows <5.14.5 权限升级漏洞

    漏洞描述 Zoom 是一种用于视频会议 在线会议和远程协作的软件平台 Zoom Desktop Client for Windows 5 14 5 之前版本由于对数据的真实性验证不足 经过身份验证的攻击者可通过网络访将权限升级为 SYSTE
  • 核医学笔记-标准摄取值SUV计算

    SUV SUV值全称为标准摄取值 standard uptake value SUV 是pet在肿瘤诊断中常用的半定量指标 是指局部组织摄取的显像剂的放射性活度与全身平均注射活度 SUV 病灶的放射性浓度 kBq ml 注射剂量 MBq 体
  • Java五子棋详细步骤及完整代码

    五子棋 1 定义声明一个二维数组做棋盘 import java util Scanner public class Main public static void main String args 定义声明一个二维数组作为棋盘 int ga
  • c++primer 第十九章笔记 02运行时类型识别

    19 2 运行时类型识别 typeid运算符 用于返回表达式的类型 dynamic cast运算符 用于将基类的指针或引用安全地转换成派生类的指针或引用 将这两个运算符用于某种类型的指针或引用 当该类型含有虚函数 运算符将使用指针或引用所绑
  • sample函数—R语言

    简述 Sample函数从x的元素中提取指定大小的样本 使用替换或不替换 其使用格式为 sample函数 sample x size replace FALSE prob NULL 其中 x 一个可供选择的一个或多个元素的向量 或一个正整数
  • 用74LS165实现串口扩展并行输入口

    1 74LS165各个端口功能 SH RD 移位 装载数据 当为高电平时 在时钟信号下进行移位 当为低电平时 将并行输入口的数据送到寄存器中 CLK 时钟输入 A H 并行输入口 QH QH 串行输出口 GND 接地端 SER 串行输入口
  • SpringBoot 项目打包后获取不到resource下资源的解决

    SpringBoot 项目打包后获取不到resource下资源的解决 在项目中有几个文件需要下载 然后不想暴露真实路径 又没有CDN 便决定使用接口的方式来获取文件 最初的时候使用了传统的方法来获取文件路径 发现不行 查找资料后发现是Spr
  • Java垃圾回收(GC)机制

    一 为什么要垃圾回收 如果不进行垃圾回收 内存迟早都会被消耗空 因为我们在不断的分配内存空间而不进行回收 除非内存无限大 我们可以任性的分配而不回收 但是事实并非如此 所以 垃圾回收是必须的 哪些内存需要回收 哪些内存需要回收是垃圾回收机制
  • 亲密关系-【沟通日志】-如何不再重蹈覆辙

    大多数人会问 我要怎么克服眼前的困难 实际上应该问 哪些事已经做得很好 学会记录成长 就能固定成长 自我激励 过去的成功 会激发未来的成功 意识到自己已经走了多远 你才会更愿意继续去坚持 记录成长的工具 沟通日志 日期 年 日 每日记录 1
  • 2.Python数据分析项目——旅游景点票价预测

    1 总结 流程 具体操作 基本查看 查看缺失值 查看数值类型 预处理 缺失值处理 填充 拆分数据 获取有需要的值 统一数据格式 数据分析 groupby分组求最值数据 seaborn可视化 预测 RandomForestRegressor