数据分析:旅游景点销售门票和消费情况分析

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

如果觉得文章不错或能帮助到你学习,可以点赞收藏评论+关注哦!

如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!


文章目录

  • 数据分析:旅游景点销售门票和消费情况分析
  • 一、前言
  • 二、数据准备
  • 三、分析数据
  • 四、用户购买门票数量分析
  • 五、用户复购分析
  • 六、用户回购分析
  • 七、占比分析
    • 1.每个月分层用户占比情况。
    • 2.每月不同用户的占比
    • 3.每月活跃用户的占比
    • 4.每月回流用户占比
  • 励志语录

一、前言

旅游景区作为旅游业持续发展的重要载体,在旅游业中起到中流砥柱的作用。随着人们的生活水平的不断提升,对旅游服务质量的要求也越来越高,特别是在旅游景区,大部分游客已经不再满足于现有的旅游服务水平,因此旅游景区服务质量的改善提升对旅游景区的发展具有一定的现实意义。目前,由于互联网大数据时代的来临,网络数据呈爆炸式增长,可以通过各种网站游客的评论数据获得游客对于旅游景区的感知情况。但这类数据随意性、社会性、分散性等特点,很难直接使用,文本分析技术应运而生。本文使用文本分析技术从冗杂的评论数据中识别出用户谈论的主要文本内容,提炼旅游景区应该主要关注问题。本文基于游客感知的视角,通过分析、挖掘游客对旅游景区的网络评论了解游客对景区形象的评价和感受。(来自于网络)

二、数据准备

1.导入所需要的模块。

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt%matplotlib inlineplt.rcParams['font.sans-serif']=['SimHei']# 用来正常显示中文标签from datetime import datetime

2.导入数据,查看前十数据。

df = pd.read_csv(r"C:\Users\XWJ\Desktop\kelu.csv")df.head()


3.使用函数info():数据表的基本信息(维度,列名称,数据格式,所占空间等)。

df.info()


4…使用describe()函数,计算数据集中每列的总数、均值、标准差、最小值、25%、50%、75%分位数以及最大值。

df.describe()

根据平均分92,和1/2分位得知,大多数用户评分在100,效果非常不错。
16年~19年门票价格都是110。

三、分析数据

1.每天销量分析。

df['time'] = pd.to_datetime(df['time'],format='%Y/%m/%d')df.groupby('time')['rating'].count().plot(figsize=(12,4))

整体来看每日销量呈现上升趋势,但是在18年5月份前后(2,3,4)出现一次较大的波动,销量急剧下滑,猜测:台风,疫情,运营推广不利。
6年9月~17年1月,销量非常低,每天平均2-3张门票,猜测:101观景台门票刚刚上线发售,观景台刚刚对游客进行开放。

2.每月销量分析。

df['month'] = df['time'].values.astype('datetime64[M]')#保留月份精度的日期df.head()df.groupby('month')['rating'].count().plot(figsize=(12,4))#按照月份进度进行计数plt.xlabel('月份')plt.ylabel('销售数量')plt.title('16~19年每月销量分析')

月份整体销量依然呈现上升趋势,但是在18年2,3,4月份月销量下滑明显。跟每天销量下降有关。猜测:台风,疫情,运营推广不利。

3.每个用户的购买量和消费金额分析。

df1 = pd.DataFrame({'name':['zhangsan','lisi'],'group':['A','B']})df2 =pd.DataFrame({'name':['wangwu','lisi'],'score':[88,90],'group':['C','D']})pd.merge(left=df1,right=df2,on='name',how='inner',suffixes=['_1','_2'])

#按照游客分组,统计每个游客的购买次数grouped_count_author = df.groupby('author')['frequency'].count().reset_index() #按照游客分组,统计每个游客的消费金额grouped_sum_amount = df.groupby('author')['amount'].sum().reset_index()user_purchase_retention = pd.merge(left=grouped_count_author,right=grouped_sum_amount,on='author',how='inner')user_purchase_retention.tail(60)user_purchase_retention.plot.scatter(x='frequency',y='amount',figsize=(12,4))plt.title('用户的购买次数和消费金额关系图')plt.xlabel('购物次数')plt.ylabel('消费金额')

四、用户购买门票数量分析

1.用户购买门票数量。

df.groupby('author')['frequency'].count().plot.hist(bins=50)#影响柱子的宽度,宽度= (最大值-最小值)/binsplt.xlim(1,17)plt.xlabel('购买数量')plt.ylabel('人数')plt.title('用户购买门票数量直方图')

绝大多数用户购买过1张门票,用户在7000人次左右。
少数人购买过2~4张门票,猜测:可能是台北周边用户。

2.用户购买门票2次及以上情况分析。

df_frequency_2 = df.groupby('author').count().reset_index()df_frequency_2.head()df_frequency_2[df_frequency_2['frequency']>=2].groupby('author')['frequency'].sum().plot.hist(bins=50)plt.xlabel('购买数量')plt.ylabel('人数')plt.title('购买门票在2次及以上的用户数量')

消费两次的用户在整体上占比较大,大于2次的用户占小部分,用户购买次数最多为8次。

3.查看购买2次及以上的具体人数。

df_frequency_2[df_frequency_2['frequency']>=2].groupby('frequency')['author'].count()

出去购买一次的顾客,可以看出购买2次有402人,购买3次的99人,以此类推得知大多数据倾向于购买2~5。

4.购买次数在1~5次之间的用户占比分析。

#1.按照用户进行分组2.取出购买次数3.过滤出1~5次用户4.绘制饼图df_frequency_gte_1 = df.groupby('author')['frequency'].count().reset_index()#过滤出<=5次的用户values = list(df_frequency_gte_1[df_frequency_gte_1['frequency']<=5].groupby('frequency')['frequency'].count())print(values)plt.pie(values,labels=['购买1次','购买2次','购买3次','购买4次','购买5次'],autopct='%1.1f%%')plt.title('购买次数在1~5次之间的人数占比')plt.legend()

可以看出购买一次的占比83%,其次逐渐递减。并且递减比较明显,购买3.4.5的占比相近,人数都很少。

5.购买次数在2~5次之间的用户占比分析。

#过滤出>=2次并且<=5次的用户df_frequency_gte_2 = df_frequency_2[df_frequency_2['frequency']>=2].reset_index()values = list(df_frequency_gte_2[df_frequency_gte_2['frequency']<=5].groupby('frequency')['frequency'].count())print(values)plt.pie(values,labels=['购买2次','购买3次','购买4次','购买5次'],autopct='%1.1f%%')plt.title('购买次数在2~5次之间的人数占比')plt.legend()

在2~5次之间,购买2.3次用户占比最大,综合占据了80%

五、用户复购分析

1.复购率分析。

复购率:在某一时间窗口内(多指一个月)内消费次数在两次及以上的用户在总消费用户的占比
三种情况:
消费次数>1,为复购用户,用1表示
消费次数=1,为非复购用户,用0表示
消费次数=0, 未消费用户,用na表示

applymap:df,处理每一个元素
apply:df,处理每一行或者每一列数据
map:Serise,处理每一个元素

pivot_count = df.pivot_table(index='author',columns='month',values='frequency',aggfunc='count').fillna(0)pivot_count = pivot_count.applymap(lambda x: 1 if x>1 else np.NANif x==0 else 0)# pivot_count[pivot_count['2016-09-01']==1](pivot_count.sum()/pivot_count.count()).plot()plt.xlabel('时间(月)')plt.ylabel('百分比(%)')plt.title('16~19年每月用户复购率')

16年9月份复购率最高达到了7.5%,然后开始下降,趋于平稳在1.2%。

2.复购用户人数。

pivot_count.sum().plot()plt.xlabel('时间/月')plt.ylabel('复购人数')plt.title('16~19年每月的复购人数折线图')


整体来看,复购人数长线上升趋势。
但是在18年2.3.4.10和19年2月份,复购人数下降较为明显,出现异常信号,需要和业务部门具体分析情况。

六、用户回购分析

1.回购率分析。

回购率:在某一个时间窗口内消费过的用户,在下一个时间窗口仍旧消费的占比

pivot_purchase = df.pivot_table(index='author',columns='month', values='frequency', aggfunc='count').fillna(0)pivot_purchase.head()def purchase_return(data): #data:代表的是每一名游客的所有月份消费记录status = [] #存储每一个月回购状态for i in range(30):#遍历每一个月(最后一个月除外)####本月消费if data[i] == 1:if data[i+1] ==1:#下个月有消费,是回购用户,1status.append(1)else:#na|未消费status.append(0) #非回购用户,0else: ####本月未消费status.append(np.NaN)status.append(np.NaN)return pd.Series(status,pivot_purchase.columns)pivot_purchase_return = pivot_purchase.apply(purchase_return,axis=1)#用户回购状态(pivot_purchase_return.sum()/pivot_purchase_return.count()).plot()plt.title('16年~19年每月的回购率')plt.xlabel('月份')plt.ylabel('回购率%')

回购率最高在18年6月份,达到4%
整体来看,回购率呈现微弱上升趋势
出现了几次较大下滑,分别是17年6月份,18年1月份,18年8月份,19年1月份

2.回购人数分析。

pivot_purchase_return.sum().plot()plt.title('16年~19年每月的回购人数')plt.xlabel('月份')plt.ylabel('回购人数')print(pivot_purchase_return.sum())

整体呈现上升趋势,回购人数最多时在18年11月份,人数未17人
其中有几次回购人数下降较为明显,主要在分别是17年6月份,18年1月份,18年8月份,19年1月份

七、占比分析

1.每个月分层用户占比情况。

#活跃用户|不活跃用户|回流用户|新用户def active_status(data): #data:每一行数据(共31列)status = [] #存储用户31个月的状态(new|active|unactive|return|unreg)for i in range(31):#判断本月没有消费==0if data[i] ==0:if len(status)==0: #前几个月没有任何记录(也就是97年1月==0)status.append('unreg')else:#之前的月份有记录(判断上一个月状态)if status[i-1] =='unreg':#一直没有消费过status.append('unreg')else:#上个月的状态可能是:new|active|unative|reuturnstatus.append('unactive')else:#本月有消费==1if len(status)==0:status.append('new') #第一次消费else:#之前的月份有记录(判断上一个月状态)if status[i-1]=='unactive':status.append('return') #前几个月不活跃,现在又回来消费了,回流用户elifstatus[i-1]=='unreg':status.append('new') #第一次消费else:#new|activestatus.append('active') #活跃用户return pd.Series(status,pivot_purchase.columns) #值:status,列名:18个月份pivot_purchase_status=pivot_purchase.apply(active_status,axis=1)pivot_status_count =pivot_purchase_status.replace('unreg',np.NaN).apply(pd.value_counts)pivot_status_count.T.plot.area()

可以看出,红色(不活跃用户)占据网站用户的主体
橙色(新用户)从17年的1月~19年1月,呈现上升趋势;但是在18年4月份左右,新用户的量突然急剧下降,异常信号;
以后,新用户又开始逐渐上涨,回复稳定状态
绿色(回流用户),一直维持稳定稳定状态,但是在18年2~4月份,出现异常下降情况,异常信号;

2.每月不同用户的占比

return_rate = pivot_status_count.apply(lambda x:x/x.sum())return_rate.T.plot()

在17年1月份过后,网站用户主体由不活跃用户组成,新用户占比开始逐渐下降,并且趋于稳定,稳定在10%左右
活跃用户和会用户,一直很稳定,并且占比较小
16年9月前后,新用户和不活跃用户,发生较大的变化,猜测:活动或者节假日造成…

3.每月活跃用户的占比

return_rate.T['active'].plot(figsize=(12,6))plt.xlabel('时间(月)')plt.ylabel('百分比')plt.title('每月活跃用户的占比分析')


在17年1月份活跃用户占比较高,在0.5%,但是在1-2月份,急剧下降,猜测:春节的影响,或者温度
结合历年1~2月份销量来看,都会出现一定比例的下降,再次验证我们的猜测:春节的影响
在18年2月和5月出现异常,门票销量下降,猜测:雨水或者台风影响

4.每月回流用户占比

return_rate.T['return'].plot(figsize=(12,6))plt.xlabel('时间(月)')plt.ylabel('百分比')plt.title('每月回流用户的占比分析')

整体来看,回流用户比例上升趋势,但是波动较大
在17年1月和6月,18年4月,19年2月,回流用户比例都出现了较大幅度下降,表现为异常信号
不论是回流用户还是活跃用户,在以上几个月份中都表现出下降趋势。

np.mean(return_rate.T['return'])#0.00736823576229978 

回流用户平均值在0.73%左右
在17年9月份以后,仅有连个异常点在平均值一下
在17年9月份以前,所有数据都显示出回流用户比例低于平均值,猜测:景点开放不久,很多游客尚未发现本景点;本景点在该平台上线不久

励志语录

人生从来没有固定的路线,决定你能够走多远的,并不是年龄,而是你的努力程度。无论到了什么时候,只要你还有心情对着糟糕的生活挥拳宣战,都不算太晚。迟做,总比不做好!