今年五一,是12年之后第一次达到5天长度的五一假期。尤其这一次我们是经历了一次疫情的冲击,在4月8号武汉解放之后,突然前面有一个五一的中长假在等待着我们,那一系列的数据会发生怎样的变化?在防控常态化的背景下,旅游业的复苏会呈现出怎样的一种局面?为更科学地进行评估,我们对北京、上海、成都、武汉等旅游热门景点评论数据进行来数据爬取。

 

用数据说话是数据分析的意义所在,同时也不要沉溺于数据,之前文章(Python揭秘为什么你看到的文字评论和图片都是最好的)已经讲过,你看到的数据可能也未必是真实的。

 

本篇推文将对热门景点的评论数据进行分析,文章将分三步走:

  • 数据获取
  • 数据处理
  • 数据可视化分析

 

以下是具体步骤和代码实现:

数据获取

 

今天我们爬取对象为携程旅游网,通过对网址进行分析,发现一个特别有意思的地方,无论那个城市的景点,或者用户的那一页进行评论,URL都是一样的。我们对Request Payload进行分析,发现每一页的参数是有变化的,可以断定是通过改变这些参数来改变接口返回的结果。

 

Python帮你分析旅游业受疫情冲击影响几何!你所在的行业影响了吗

 

Python帮你分析旅游业受疫情冲击影响几何!你所在的行业影响了吗

 

分析明白了网页的规律,我们就来爬取数据吧,需要完整版数据的同学可以在公众号后台回复:五一数据

 

核心代码

 

url ='https://sec-m.ctrip.com/restapi/soa2/12530/json/viewCommentList?_fxpcqlniredt=09031027111681987287'
UserAgent = getHeaders()
headers = {
        'Content-type': 'application/json;charset=UTF-8',
        'Origin': 'https://piao.ctrip.com',
        'Referer': 'https://piao.ctrip.com/dest/t1412255.html',
        'accept': '*/*',
        "User-Agent":UserAgent}

df = pd.DataFrame(None)

try:
    html = requests.post(url,headers=headers,data =json.dumps(data)).text

    global test 
    test =json.loads(html)['data']

    data=json.loads(html)['data']['comments']
    data_len = len(data)
    for i in range(data_len):
        data_i =data[i]
        df_temp = json_normalize(data_i)
        df = df.append(df_temp)
except:
    pass

 

数据结果

 

Python帮你分析旅游业受疫情冲击影响几何!你所在的行业影响了吗

 

数据处理

 

对于获取的数据,需要进一步处理,以满足分析分析的需求,我们主要做的数据处理步骤如下:

  • 删除重复项
  • 删除不需要的列
  • 处理不规范的数据格式

 

代码如下

import pandas as pd
base_data = pd.read_csv('hcdwy_Result_01.csv')
base_data =base_data.drop_duplicates()
base_data['date'] = base_data['date'].apply(lambda x : x.split(' ', 1 )[0])
base_data.drop(columns=["title",'videos','replyeditor'],inplace=True)
data_agg = base_data.groupby(['date']).agg({'id':'count'}).reset_index()
df_sv = data_agg.sort_values(['date'],axis = 0,ascending = True)

 

数据可视化分析

 

 

大量的数据只有通过可视化才能让人一目了然,可视化工具我们使用的为pyecharts,接下来我们将对热门城市景点的数据进行数据可视化分析。

 

北京八达岭长城

 

 

 

Python帮你分析旅游业受疫情冲击影响几何!你所在的行业影响了吗

八达岭景区是全国文明风景旅游区示范点,以其宏伟的景观、完善的设施和深厚的文化历史内涵而著称于世,是举世闻名的旅游胜地。对北京八达岭长城进行可视化数据分析,我们可以看出因疫情影响,2月、3月份票数达到了低谷,随着国内疫情防控形势持续向好,4月份持续升高,但今年五一单量也不及疫情前五成。

 

核心代码

 

import pandas as pd
base_data = pd.read_csv('cc.csv')
base_data['date'] = base_data['date'].apply(lambda x : x.split(' ', 1 )[0])
base_data.drop(columns=["title",'videos','replyeditor'],inplace=True)
data_agg = base_data.groupby(['date']).agg({'id':'count'}).reset_index()

df_pr = data_agg.sort_values(['date'],axis = 0,ascending = True)
x_data = list(df_pr['date'])
y_data = list(df_pr['id'])

import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker


c = (
    Line()
    .add_xaxis(x_data)
    .add_yaxis("北京八达岭长城票数据统计", y_data, is_smooth=True)
#     .add_yaxis("商家B", Faker.values(), is_smooth=True)
    .set_series_opts(
        areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Line-面积图"),
        xaxis_opts=opts.AxisOpts(
            axistick_opts=opts.AxisTickOpts(is_align_with_label=True),
            is_scale=False,
            boundary_gap=False,
        ),
    )
    .render("line_areastyle_boundary_gap.html")
)

 

上海海昌海洋公园

 

Python帮你分析旅游业受疫情冲击影响几何!你所在的行业影响了吗

上海海昌海洋公园项目位于东海之滨滴水湖畔,地处长三角旅游核心目的地,海港、空港、铁路、公路、内河“五龙汇聚”。上海海昌海洋公园围绕海洋文化特色,分为人鱼海湾、极地小镇、冰雪王国、海底奇域、海洋部落五大主题区和富有特色的海洋主题度假酒店。从趋势图上来看,和北京八达岭长城是相似的,2月、3月份票数达到了低谷,五一订单量仅为3成左右。

 

 

核心代码

import pyecharts.options as opts
from pyecharts.charts import Line, Grid
from pyecharts.commons.utils import JsCode

import pandas as pd
base_data = pd.read_csv('Result_01.csv')
base_data['date'] = base_data['date'].apply(lambda x : x.split(' ', 1 )[0])
base_data.drop(columns=["title",'videos','replyeditor'],inplace=True)
data_agg = base_data.groupby(['date']).agg({'id':'count'}).reset_index()

df_pr = data_agg.sort_values(['date'],axis = 0,ascending = True)
x_data = list(df_pr['date'])
y_data = list(df_pr['id'])


x_data = x_data
y_data = y_data

background_color_js = (
    "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
    "[{offset: 0, color: '#c86589'}, {offset: 1, color: '#06a7ff'}], false)"
)
area_color_js = (
    "new echarts.graphic.LinearGradient(0, 0, 0, 1, "
    "[{offset: 0, color: '#eb64fb'}, {offset: 1, color: '#3fbbff0d'}], false)"
)

c = (
    Line(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="注册总量",
        y_axis=y_data,
        is_smooth=True,
        is_symbol_show=True,
        symbol="circle",
        symbol_size=6,
        linestyle_opts=opts.LineStyleOpts(color="#fff"),
        label_opts=opts.LabelOpts(is_show=True, position="top", color="white"),
        itemstyle_opts=opts.ItemStyleOpts(
            color="red", border_color="#fff", border_width=3
        ),
        tooltip_opts=opts.TooltipOpts(is_show=False),
        areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js), opacity=1),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="上海海昌海洋公园门票",
            pos_bottom="5%",
            pos_left="center",
            title_textstyle_opts=opts.TextStyleOpts(color="#fff", font_size=16),
        ),
        xaxis_opts=opts.AxisOpts(
            type_="category",
            boundary_gap=False,
            axislabel_opts=opts.LabelOpts(margin=30, color="#ffffff63"),
            axisline_opts=opts.AxisLineOpts(is_show=False),
            axistick_opts=opts.AxisTickOpts(
                is_show=True,
                length=25,
                linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
            ),
            splitline_opts=opts.SplitLineOpts(
                is_show=True, linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")
            ),
        ),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            position="right",
            axislabel_opts=opts.LabelOpts(margin=20, color="#ffffff63"),
            axisline_opts=opts.AxisLineOpts(
                linestyle_opts=opts.LineStyleOpts(width=2, color="#fff")
            ),
            axistick_opts=opts.AxisTickOpts(
                is_show=True,
                length=15,
                linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
            ),
            splitline_opts=opts.SplitLineOpts(
                is_show=True, linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")
            ),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )
)

(
    Grid()
    .add(
        c,
        grid_opts=opts.GridOpts(
            pos_top="20%",
            pos_left="10%",
            pos_right="10%",
            pos_bottom="15%",
            is_contain_label=True,
        ),
    )
    .render("beautiful_line_chart.html")
)

 

 武汉黄鹤楼

 

Python帮你分析旅游业受疫情冲击影响几何!你所在的行业影响了吗

黄鹤楼位于湖北省武汉市长江南岸的武昌蛇山之巅,濒临万里长江,是国家5A级旅游景区,“江南三大名楼”之一,自古享有“天下江山第一楼“和“天下绝景”之称。黄鹤楼是武汉市标志性建筑,与晴川阁、古琴台并称“武汉三大名胜”。从上图可以看出,武汉因疫情影响,黄鹤楼风景区并没有复苏的快速恢复的迹象,老百姓对外出游玩还是持有谨慎态度,并没有出现井喷的增长情况。

 

核心代码

 

import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker
import pandas as pd
base_data = pd.read_csv('hhlResult_01.csv')
base_data['date'] = base_data['date'].apply(lambda x : x.split(' ', 1 )[0])
base_data.drop(columns=["title",'videos','replyeditor'],inplace=True)
data_agg = base_data.groupby(['date']).agg({'id':'count'}).reset_index()

df_pr = data_agg.sort_values(['date'],axis = 0,ascending = True)
x_data = list(df_pr['date'])
y_data = list(df_pr['id'])

c = (
    Line()
    .add_xaxis(x_data)
    .add_yaxis(
        "黄鹤楼门票",
        y_data,
        markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Line-MarkLine"))
    .render("line_markline.html")
)

 

成都大熊猫繁育研究基地

 

 

 

Python帮你分析旅游业受疫情冲击影响几何!你所在的行业影响了吗

成都大熊猫繁育研究基地是我国乃至全球知名的集大熊猫科研繁育、保护教育、教育旅游、熊猫文化建设为一体的大熊猫等珍稀濒危野生动物保护研究机构,从趋势分析图我们可以看到,恢复速度比较快,目前已恢复达到六成左右。

 

核心代码

import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker
import pandas as pd
base_data = pd.read_csv('cdResult_01.csv')
base_data['date'] = base_data['date'].apply(lambda x : x.split(' ', 1 )[0])
base_data.drop(columns=["title",'videos','replyeditor'],inplace=True)
data_agg = base_data.groupby(['date']).agg({'id':'count'}).reset_index()

df_pr = data_agg.sort_values(['date'],axis = 0,ascending = True)
x_data = list(df_pr['date'])
y_data = list(df_pr['id'])

x_data = x_data
y_data =y_data

(
    Line()
    .set_global_opts(
        tooltip_opts=opts.TooltipOpts(is_show=False),
        xaxis_opts=opts.AxisOpts(type_="category"),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
    )
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="成都大熊猫繁育研究基地",
        y_axis=y_data,
        symbol="emptyCircle",
        is_symbol_show=True,
        label_opts=opts.LabelOpts(is_show=False),
    )
    .render("basic_line_chart.html")
)

源码获取私信小编01获取

 

相关文章: