数据分析案例-旅游景点票价预测

简介: 数据分析案例-旅游景点票价预测

数据获取

我们利用scrapy爬虫框架对去哪儿网对景点数据进行抓取,部分数据如下:

加载数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#加载数据
df = pd.read_csv("data.csv")
df.head()

数据预处理

处理景区等级,只保留数字,且对没有等级的用0填充

df['level'] = df['level'].fillna(0)
df['level'] = df['level'].apply(lambda x:0 if x==0 else int(x[0]))
df.head(10)

处理热度,只保留数值,且小数点保留两位数字

df['hot'] = df['hot'].apply(lambda x:float("%.2f"%float(x.split(" ")[-1])))
df.head(10)


地区处理,将area拆分为省,市,区,并新增这三列数据,最后删除area这一列

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] )
del df['area']
df.head()


统计分析

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

# 统计销量最多的前10个景点
num_top = df.sort_values(by='num',axis=0,ascending=False)
num_top = num_top.reset_index(drop=True)
plt.rcParams['font.sans-serif']=['Microsfot YaHei']
plt.rcParams['axes.unicode_minus']=False
import seaborn as sns
sns.set(font="SimHei")
sns.set_context("talk")
fig = plt.figure()
sns.barplot(num_top['name'][:10],num_top['num'][:10])
plt.xticks(rotation=90)
fig.show()


景区评级和省份的关系

#景区评级和省份的关系
df['level_sum']=1
var = df.groupby(['province','level']).level_sum.sum()
var.unstack().plot(kind="bar",figsize=(35,10),stacked=False,color=['red','blue','green','black'])


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

#统计人最多的前10个5A景区
top_5A = df[df['level']==5].sort_values(by="num",axis=0,ascending=False).reset_index(drop=True)
# top_5A.head()
fit = plt.figure(figsize=(35,15))
# plt.pie(top_5A["num"][:10],labels=top_5A["name"][:10],autopct='%1.2f%%')
sns.barplot(top_5A["name"][:10],top_5A["num"][:10])
plt.title("人数最多的10个5A景区")
plt.xticks(rotation=90)
plt.show()


统计人最少的前10个5A景区

#统计人最少的前10个5A景区
top_5A = df[df['level']==5].sort_values(by="num",axis=0,ascending=True).reset_index(drop=True)
# top_5A.head()
fit = plt.figure(figsize=(35,15))
# plt.pie(top_5A["num"][:10],labels=top_5A["name"][:10],autopct='%1.2f%%')
sns.barplot(top_5A["name"][:10],top_5A["num"][:10])
plt.title("人数最多的10个5A景区")
plt.xticks(rotation=90)
plt.show()



数据的分布分析

景区等级分布

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



热度分布

# 热度分布
sns.distplot(df['hot'])
plt.xticks(rotation=25)


价格分布

#价格分布
sns.distplot(df['price'])
plt.xticks(rotation=25)


销量分析

#销量分析
sns.distplot(df['num'])
plt.xticks(rotation=25)

将num进行分组并可视化

df['num_cut'] = pd.cut(df['num'],10)
plt.figure()
sns.countplot(y='num_cut',data=df)


建模

one-hot编码

df =df[['name','level','hot','price','num','province','city','mini_city']]
one_hot_df = pd.get_dummies(df[['province','city','mini_city']]) 
one_hot_df.head()


合并数据

df = df[['level','hot','price','num']]
df = pd.merge(df,one_hot_df,left_index=True,right_index=True)
df.head()


导包

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error,mean_absolute_error

数据准备

X = df[df.columns.difference(['price'])].values
Y = df['price'].values

划分数据集并训练模型

x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.3,random_state=6)
rf = RandomForestRegressor(n_estimators=20,max_depth=7)
rf.fit(x_train,y_train)
pred = rf.predict(x_test)
print(mean_squared_error(y_test,pred))
print(mean_absolute_error(y_test,pred))

模型结果预测

result_df = pd.DataFrame(np.concatenate((y_test.reshape(-1,1),pred.reshape(-1,1)),axis=1),columns=['y_test','y_pred'])
result_df.head()


目录
相关文章
|
2月前
|
数据采集 数据可视化 数据挖掘
数据分析案例-汽车客户信息数据可视化分析
数据分析案例-汽车客户信息数据可视化分析
100 0
|
2月前
|
数据可视化 搜索推荐 数据挖掘
数据分析案例-顾客购物数据可视化分析
数据分析案例-顾客购物数据可视化分析
99 0
|
7天前
|
数据采集 数据可视化 数据挖掘
Seaborn在数据分析中的应用:案例分析与实践
【4月更文挑战第17天】本文介绍了Seaborn在数据分析中的应用,它是一个基于Python的可视化库,简化了复杂数据的图表创建。通过一个销售数据分析的案例,展示了数据加载、描述性统计、相关性分析、多变量分析及高级可视化步骤。实践技巧包括数据清洗、图表选择、颜色使用、注释标签和交互性。Seaborn助力高效数据探索和理解,提升分析效率。注意,实际使用需根据数据集和目标调整,并参考最新文档。
|
8天前
|
供应链 搜索推荐 数据挖掘
Pandas实战案例:电商数据分析的实践与挑战
【4月更文挑战第16天】本文通过一个电商数据分析案例展示了Pandas在处理销售数据、用户行为分析及商品销售趋势预测中的应用。在数据准备与清洗阶段,Pandas用于处理缺失值、重复值。接着,通过用户购买行为和商品销售趋势分析,构建用户画像并预测销售趋势。实践中遇到的大数据量和数据多样性挑战,通过分布式计算和数据标准化解决。未来将继续深入研究Pandas与其他先进技术的结合,提升决策支持能力。
|
8天前
|
存储 数据可视化 数据挖掘
实战案例:Pandas在金融数据分析中的应用
【4月更文挑战第16天】本文通过实例展示了Pandas在金融数据分析中的应用。案例中,一家投资机构使用Pandas加载、清洗股票历史价格数据,删除无关列并重命名,将日期设为索引。接着,数据被可视化以观察价格走势,进行基本统计分析了解价格分布,以及计算移动平均线来平滑波动。Pandas的便捷功能在金融数据分析中体现出高效率和实用性。
|
2月前
|
数据可视化 数据挖掘 BI
数据分析案例-某公司员工数据信息可视化
数据分析案例-某公司员工数据信息可视化
52 2
|
2月前
|
数据采集 自然语言处理 数据可视化
数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析(上)
数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析
78 0
|
6天前
|
机器学习/深度学习 数据挖掘 计算机视觉
python数据分析工具SciPy
【4月更文挑战第15天】SciPy是Python的开源库,用于数学、科学和工程计算,基于NumPy扩展了优化、线性代数、积分、插值、特殊函数、信号处理、图像处理和常微分方程求解等功能。它包含优化、线性代数、积分、信号和图像处理等多个模块。通过SciPy,可以方便地执行各种科学计算任务。例如,计算高斯分布的PDF,需要结合NumPy使用。要安装SciPy,可以使用`pip install scipy`命令。这个库极大地丰富了Python在科学计算领域的应用。
12 1
|
7天前
|
数据可视化 数据挖掘 Python
Python中数据分析工具Matplotlib
【4月更文挑战第14天】Matplotlib是Python的数据可视化库,能生成多种图表,如折线图、柱状图等。以下是一个绘制简单折线图的代码示例: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure() plt.plot(x, y) plt.title('简单折线图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.show() ```
12 1
|
7天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
13 1