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

数据获取

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

数据分析案例-旅游景点票价预测_第1张图片

加载数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

#加载数据
df = pd.read_csv("data.csv")
df.head()

 数据分析案例-旅游景点票价预测_第2张图片

数据预处理

处理景区等级,只保留数字,且对没有等级的用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)

数据分析案例-旅游景点票价预测_第3张图片

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

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

数据分析案例-旅游景点票价预测_第4张图片

地区处理,将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()

 数据分析案例-旅游景点票价预测_第5张图片

统计分析 

统计销量最多的前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()

数据分析案例-旅游景点票价预测_第6张图片

景区评级和省份的关系

#景区评级和省份的关系
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'])

 数据分析案例-旅游景点票价预测_第7张图片

 统计人最多的前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()

数据分析案例-旅游景点票价预测_第8张图片

统计人最少的前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()

 数据分析案例-旅游景点票价预测_第9张图片

 数据的分布分析

景区等级分布

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

热度分布

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

 数据分析案例-旅游景点票价预测_第10张图片

 价格分布

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

数据分析案例-旅游景点票价预测_第11张图片

销量分析

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

 数据分析案例-旅游景点票价预测_第12张图片

将num进行分组并可视化

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

 数据分析案例-旅游景点票价预测_第13张图片

建模 

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()

数据分析案例-旅游景点票价预测_第14张图片

 合并数据

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

数据分析案例-旅游景点票价预测_第15张图片

导包

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()

 数据分析案例-旅游景点票价预测_第16张图片

以下是心得体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

你可能感兴趣的:(数据分析,数据挖掘,python,数据分析)