【旅游景点分析】--从数据搜集到清洗再到可视化呈现

2019-06-02 20:30:10 浏览数 (1)

分析背景

近两年由于日本签证放宽了许多,许多小伙伴出国游会选择日本作为目的地,同时现在许多旅游平台都有一站式服务,所以大多旅客会选择自助游,那么自助游便会涉及到“酒店、机票、火车票、攻略、景点门票、租车、美食、购物”的需求,这种一站式需求目前做的比较好的有:携程、去哪儿旅行、同程、途牛等旅游平台,客路从服务上看主打国外自由行,在景点、小团游、独特体验、美食、交通五大方面给到用户推荐和选择,现从客路的五大活动入手分析自助旅游不可错过的攻略,Let's go~


分析思路

1、以日本为例,获取五种活动分类各自所含活动的网址

活动分类:景点门票/表演、一日游/小团游、特色活动/体验、地道美食、当地交通/wifi

2、获取每种分类里所有网址的基本信息,基本信息包括:title,价格,参加人数,是否支持退改,评价数目,评分

3、每种分类用plt做散点图分析价格与评分的关系,做直方图查看价格前十、评分前十、评价数目前十的活动

4、用pyecharts做交互式图表

5、将点评数作为频次,用活动名做词云图


导入基本的工具包

import numpy as np

import pandas as pd

import requests

from bs4 import BeautifulSoup

import matplotlib.pyplot as plt

import warnings

warnings.filterwarnings('ignore')


1、获取五种活动分类各自所含活动的网址

注:左右滑动查看完整代码

代码语言:javascript复制
#获取分类1所有活动的urltype1_lst = []for i in range(1,6):    url = 'https://www.klook.com/zh-CN/search?query=日本&template_id=1&tag_id=33,122,139,34,9,35,38&city_id=398,15,28,29,30,32,36,71,343,373&start=' str(i) '&type=country'    type1_lst.append(url)print(type1_lst)#获取分类2所有活动的urltype2_lst = []for i in range(1,10):    url = 'https://www.klook.com/zh-CN/search?query=日本&template_id=2&city_id=398,15,28,29,30,32,36,71,343,373&start=' str(i) '&type=country'    type2_lst.append(url)print(type2_lst)#获取分类3所有活动的urltype3_lst = []for i in range(1,35):    url = 'https://www.klook.com/zh-CN/search?query=日本&template_id=3&city_id=398,15,28,29,30,32,36,71,343,373&start=' str(i) '&type=country'    type3_lst.append(url)print(type3_lst)#获取分类4所有活动的urltype4_lst = []for i in range(1,8):    url = 'https://www.klook.com/zh-CN/search?query=日本&template_id=4&city_id=398,15,28,29,30,32,36,71,343,373&start=' str(i) '&type=country'    type4_lst.append(url)print(type4_lst)#获取分类5所有活动的urltype5_lst = []for i in range(1,12):    url = 'https://www.klook.com/zh-CN/search?query=日本&template_id=5&city_id=398,15,28,29,30,32,36,71,343,373&start=' str(i) '&type=country'    type5_lst.append(url)print(type5_lst)
代码语言:javascript复制
#此处获取活动分类1一共115个网址pro1_lst = []n = 1for url in type1_lst:    ri = requests.get(url)    soupi = BeautifulSoup(ri.text,'lxml')    info = soupi.find('div',class_='activity_section').find('div',class_='act_list').find_all('a')    for i in info:        urli = 'https://www.klook.com' i['href']        pro1_lst.append(urli)        print('成功获取第%i条网址'%n)        n =1print(pro1_lst)    #此处获取活动分类2一共200个网址pro2_lst = []n = 1for url in type2_lst:    try:        ri = requests.get(url)        soupi = BeautifulSoup(ri.text,'lxml')        info = soupi.find('div',class_='activity_section').find('div',class_='act_list').find_all('a')        for i in info:            urli = 'https://www.klook.com' i['href']            pro2_lst.append(urli)            print('成功获取第%i条网址'%n)            n =1    except:        continueprint(pro2_lst)  #此处获取活动分类3一共177个网址pro3_lst = []n = 1for url in type3_lst:    try:        ri = requests.get(url)        soupi = BeautifulSoup(ri.text,'lxml')        info = soupi.find('div',class_='activity_section').find('div',class_='act_list').find_all('a')        for i in info:            urli = 'https://www.klook.com' i['href']            pro3_lst.append(urli)            print('成功获取第%i条网址'%n)            n =1    except:        continueprint(pro3_lst)  #此处获取活动分类4一共154个网址pro4_lst = []n = 1for url in type4_lst:    try:        ri = requests.get(url)        soupi = BeautifulSoup(ri.text,'lxml')        info = soupi.find('div',class_='activity_section').find('div',class_='act_list').find_all('a')        for i in info:            urli = 'https://www.klook.com' i['href']            pro4_lst.append(urli)            print('成功获取第%i条网址'%n)            n =1    except:        continueprint(pro4_lst)  #此处获取活动分类5一共257个网址pro5_lst = []n = 1for url in type5_lst:    try:        ri = requests.get(url)        soupi = BeautifulSoup(ri.text,'lxml')        info = soupi.find('div',class_='activity_section').find('div',class_='act_list').find_all('a')        for i in info:            urli = 'https://www.klook.com' i['href']            pro5_lst.append(urli)            print('成功获取第%i条网址'%n)            n =1    except:        continueprint(pro5_lst) 

2、 获取每种分类里所有网址的基本信息
3、每种分类用plt做散点图分析价格与评分的关系,直方图查看价格前十、评分前十、评价数目前十的活动 (二三同步进行)

以下是对“景点门票/表演”的分析

代码语言:javascript复制
#获取pro1共90个活动的基本信息def get_data1(urli):    headers={#此处可放入自己使用的计算机浏览网址的headers         }    ri = requests.get(url=urli,headers=headers)    soupi = BeautifulSoup(ri.text,'lxml')    dic = {}    info = soupi.find('div',class_='white_bg')    info1 = info.find('ul',class_='act_icons t14').find_all('li')    info2 = info.find('div',class_='m_border_gray m_bg_white shadow_box__1')    dic['title']=info.find('h1').text    for i in info1:        try:            infoi=[]            i = i.text.replace('n','')            infoi.append(i)            dic['是否支持退改']=infoi[0]            dic['使用方式']=infoi[1]            dic['活动时长']=infoi[2].split(':')[1]            dic['使用期限']=infoi[3]            dic['入场方式']=infoi[4]        except:            continue    dic['价格']=info2.find('p',class_='price').find('span').text    dic['参加人数']=info2.find('ul',class_='pay_otherinfo t_gray').find('div',class_='left_box').text.replace('n','').split('人')[0]    dic['评分']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='m_star_v2 t12').text.replace('n','')    dic['评价数目']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='t12 u_t_gray_6').text.replace('n','').replace('(','').split('条')[0]    return dicinfo1_list = []n=1for url in pro1_lst:    try:        #print(url)        info1_list.append(get_data1(url))        print('成功获取第%i个网址的基本信息'%n)        n =1    except:        continue

数据预处理:建立索引,转换数据类型,数据清洗

代码语言:javascript复制
df1=pd.DataFrame(info1_list)df1.index=df1['title']df1['评价数目']=df1['评价数目'].str.replace(',','')df1['评分']=df1['评分'].str.replace(',','')df1['价格']=df1['价格'].str.replace(',','')df1['评分']=df1['评分'].astype(np.float)df1['评价数目']=df1['评价数目'].astype(np.int)df1['价格']=df1['价格'].astype(np.int)df1

可视化:做散点图查看价格、评分、评价数目的关系

代码语言:javascript复制
plt.title('分类1活动价格评分气泡图')plt.scatter(df1['价格'],df1['评分'],s=df1['评价数目']/100,alpha=0.8,cmap='Reds')plt.grid()#从散点图可以看出评分多集中在4.5-4.8分,价格集中在500元内,评论多在500元左右的活动
代码语言:javascript复制
plt.title('价格分布图')plt.hist(df1['价格'],bins=10)plt.grid()#可以看出大部分活动价格集中在500内
代码语言:javascript复制
#查看价格前十的活动dptop10=df1.sort_values(by='价格',ascending=False).iloc[:10]dptop10['价格'].plot(kind='bar',figsize=(10,5),color='y',grid=True)#可以看出高价格主要是海洋馆&住宿和环球影城皇家套票
代码语言:javascript复制
#查看评分前十的活动dptop10=df1.sort_values(by='评分',ascending=False).iloc[:10]dptop10['评分'].plot(kind='bar',figsize=(10,5),color='r',grid=True)#可看出高评分主要集中在小丸子门票、海洋馆门票、植物园门票、读卖乐园门票、艺伎宴
代码语言:javascript复制
#查看评价数目前十的活动dptop10=df1.sort_values(by='评价数目',ascending=False).iloc[:10]dptop10['评价数目'].plot(kind='bar',figsize=(10,5),color='b',grid=True)#评价数目可以在一定程度上反映活动的热门程度,此处可以看出环球影城和迪士尼、海洋馆是最受欢迎的景点

以上便是对“景点门票/表演”的分析,从分析结果看建议做攻略的时候,景点可以考虑环球影城、海洋馆、迪士尼、静冈樱桃小丸子乐园、冲绳东南植物园、东京读卖乐园、东京大森茶屋艺伎宴等地,属于热门且评分较高的景点,具体可视出游路线而定~


以下是对“一日游/小团游”的分析

代码语言:javascript复制
#获取pro2共153个活动的基本信息def get_data1(urli):    headers={#此处可放入自己使用的计算机浏览网址的headers        }    ri = requests.get(url=urli,headers=headers)    soupi = BeautifulSoup(ri.text,'lxml')    dic = {}    info = soupi.find('div',class_='white_bg')    info1 = info.find('ul',class_='act_icons t14').find_all('li')    info2 = info.find('div',class_='m_border_gray m_bg_white shadow_box__1')    dic['title']=info.find('h1').text    for i in info1:        try:            infoi=[]            i = i.text.replace('n','')            infoi.append(i)            dic['是否支持退改']=infoi[0]            dic['使用方式']=infoi[1]            dic['活动时长']=infoi[2].split(':')[1]            dic['使用期限']=infoi[3]            dic['入场方式']=infoi[4]        except:            continue    dic['价格']=info2.find('p',class_='price').find('span').text    dic['参加人数']=info2.find('ul',class_='pay_otherinfo t_gray').find('div',class_='left_box').text.replace('n','').split('人')[0]    dic['评分']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='m_star_v2 t12').text.replace('n','')    dic['评价数目']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='t12 u_t_gray_6').text.replace('n','').replace('(','').split('条')[0]    return dicinfo2_list = []n=1for url in pro2_lst:    try:        #print(url)        info2_list.append(get_data1(url))        print('成功获取第%i个网址的基本信息'%n)        n =1    except:        continue

数据预处理:建立索引,转换数据类型,数据清洗

代码语言:javascript复制
df2=pd.DataFrame(info2_list)df2.index=df2['title']df2['评价数目']=df2['评价数目'].str.replace(',','')df2['评分']=df2['评分'].str.replace(',','')df2['价格']=df2['价格'].str.replace(',','')df2['评分']=df2['评分'].astype(np.float)df2['评价数目']=df2['评价数目'].astype(np.int)df2['价格']=df2['价格'].astype(np.int)df2

可视化:做散点图查看价格、评分、评价数目的关系

代码语言:javascript复制
plt.title('分类2活动价格评分气泡图')plt.scatter(df2['价格'],df2['评分'],s=df2['评价数目']/100,alpha=0.8,cmap='Reds')plt.grid()#从散点图可以看出评分多集中在4-4.8分,价格集中在500元左右,评论多在300元内的活动
代码语言:javascript复制
plt.title('价格分布图')plt.hist(df2['价格'],bins=10)plt.grid()#可以看出大部分活动价格集中在300-800元
代码语言:javascript复制
#查看价格前十的活动dptop10=df2.sort_values(by='价格',ascending=False).iloc[:10]dptop10['价格'].plot(kind='bar',figsize=(10,5),color='y',grid=True)#可以看出高价格主要是大阪、京都&奈良、广岛&宫岛等地的一日游包车活动
代码语言:javascript复制
#查看评分前十的活动dptop10=df2.sort_values(by='评分',ascending=False).iloc[:10]dptop10['评分'].plot(kind='bar',figsize=(10,5),color='r',grid=True)#可看出高评分主要集中东京筑地市场半日游、四国计程车乌龙面之旅、富士山等地巴士游、大阪黑门市场美食徒步旅、户隐高原巴士5日游等活动
代码语言:javascript复制
#查看评价数目前十的活动dptop10=df2.sort_values(by='评价数目',ascending=False).iloc[:10]dptop10['评价数目'].plot(kind='bar',figsize=(10,5),color='b',grid=True)#评价数目可以在一定程度上反映‘一日游/小团游’的热门程度,此处可以看出大阪周游券、欢迎来大阪卡、关西周游券、展望台电子门票较为热门

以上便是对一日游&小团游的分析,从分析结果建议做攻略的时候,从路线上看,出行可考虑购买周游券,包车比较方便但也比较昂贵,在一个城市待几天的话可以考虑购买周游券进行周边游,关西周游券可用于大阪、神户、京都以至奈良、和歌山、高野山的观光旅游,富士山旅游路线建议:忍野八海、御殿场outlet、抹茶体验、河口湖、五合目,富士&箱根:芦之湖、驹岳空中缆车,北海道:旭山动物园、美瑛青池;从评分上看,热门地点有:东京筑地市场、富士山、大阪黑门市场美食、户隐高原、东京SUP立式划桨体验、东京水上皮划艇体验、博多古寺巡礼等活动


以下是对“特色活动/体验”的分析

代码语言:javascript复制
#获取pro3共143个活动的基本信息def get_data1(urli):    headers={#此处可放入自己使用的计算机浏览网址的headers        }    ri = requests.get(url=urli,headers=headers)    soupi = BeautifulSoup(ri.text,'lxml')    dic = {}    info = soupi.find('div',class_='white_bg')    info1 = info.find('ul',class_='act_icons t14').find_all('li')    info2 = info.find('div',class_='m_border_gray m_bg_white shadow_box__1')    dic['title']=info.find('h1').text    for i in info1:        try:            infoi=[]            i = i.text.replace('n','')            infoi.append(i)            dic['是否支持退改']=infoi[0]            dic['使用方式']=infoi[1]            dic['活动时长']=infoi[2].split(':')[1]            dic['使用期限']=infoi[3]            dic['入场方式']=infoi[4]        except:            continue    dic['价格']=info2.find('p',class_='price').find('span').text    dic['参加人数']=info2.find('ul',class_='pay_otherinfo t_gray').find('div',class_='left_box').text.replace('n','').split('人')[0]    dic['评分']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='m_star_v2 t12').text.replace('n','')    dic['评价数目']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='t12 u_t_gray_6').text.replace('n','').replace('(','').split('条')[0]    return dicinfo3_list = []n=1for url in pro3_lst:    try:        #print(url)        info3_list.append(get_data1(url))        print('成功获取第%i个网址的基本信息'%n)        n =1    except:        continue

数据预处理:建立索引,转换数据类型,数据清洗

代码语言:javascript复制
#确定索引,转换数据类型,数据清洗df3=pd.DataFrame(info3_list)df3.index=df3['title']j=0for i in df3["价格"]:    if '免费' in i:        df3["价格"][j]=0        j =1df3['评价数目']=df3['评价数目'].astype(str).str.replace(',','')df3['评分']=df3['评分'].astype(str).str.replace(',','')df3['价格']=df3['价格'].astype(str).str.replace(',','')df3['评分']=df3['评分'].astype(np.float)df3['评价数目']=df3['评价数目'].astype(np.int)df3['价格']=df3['价格'].astype(np.int)df3

可视化:做散点图查看价格、评分、评价数目的关系

代码语言:javascript复制
plt.title('分类3活动价格评分气泡图')plt.scatter(df3['价格'],df3['评分'],s=df3['评价数目']/100,alpha=0.8,cmap='Reds')plt.grid()#从散点图可以看出评分多集中在4.2-4.8分,价格集中在500元内,评论多在200元左右的活动
代码语言:javascript复制
plt.title('价格分布图')plt.hist(df3['价格'],bins=10)plt.grid()#可以看出大部分活动价格集中在500元
代码语言:javascript复制
#查看价格前十的活动dptop10=df3.sort_values(by='价格',ascending=False).iloc[:10]dptop10['价格'].plot(kind='bar',figsize=(10,5),color='y',grid=True)#可以看出高价格主要是迪士尼乐园&迪士尼海洋馆,武士杀阵体验,浅草造型摄影、东京观光直升机、滑雪等活动
代码语言:javascript复制
#查看评分前十的活动dptop10=df3.sort_values(by='评分',ascending=False).iloc[:10]dptop10['评分'].plot(kind='bar',figsize=(10,5),color='r',grid=True)#可看出高评分主要集中京都东山人力车、青木原树海、武士杀阵体验、濑底岛帆伞&浮潜体验、天妇罗烹饪课&抹茶制作体验、茶道&书法&干果子制作体验、大阪城武士忍者神龟扮演体验、有马温泉体验、池袋动物广场萌宠体验等体验活动。
代码语言:javascript复制
#查看评价数目前十的活动dptop10=df3.sort_values(by='评价数目',ascending=False).iloc[:10]dptop10['评价数目'].plot(kind='bar',figsize=(10,5),color='b',grid=True)#评价数目可以在一定程度上反映‘特色活动&体验’的热门程度,此处可以看出大阪海洋馆、浅草寺和服体验、大江户温泉、京都和服、新宿机器人餐厅表演、岚山嵯峨野小火车、冲绳美丽海水族馆等活动较为热门,较多人评论

以上便是对‘特色活动&体验’的分析,从分析结果看建议做攻略的时候,土豪可以考虑武士杀阵体验,东京观光直升机、滑雪等体验,当然热门的京都东山人力车、青木原树海、濑底岛帆伞&浮潜体验、天妇罗烹饪课&抹茶制作体验、茶道&书法&干果子制作体验、大阪城武士忍者神龟扮演体验、有马温泉体验、池袋动物广场萌宠体验等体验活动评分较高,不容错过,大阪海洋馆、浅草寺和服体验、大江户温泉、京都和服、新宿机器人餐厅表演、岚山嵯峨野小火车、冲绳美丽海水族馆等活动评论人多很多,可见很多人参与,也可纳入攻略计划。


以下是对“地道美食”的分析

代码语言:javascript复制
#获取pro4共112个活动的基本信息def get_data1(urli):    headers={#此处可放入自己使用的计算机浏览网址的headers        }    ri = requests.get(url=urli,headers=headers)    soupi = BeautifulSoup(ri.text,'lxml')    dic = {}    info = soupi.find('div',class_='white_bg')    info1 = info.find('ul',class_='act_icons t14').find_all('li')    info2 = info.find('div',class_='m_border_gray m_bg_white shadow_box__1')    dic['title']=info.find('h1').text    for i in info1:        try:            infoi=[]            i = i.text.replace('n','')            infoi.append(i)            dic['是否支持退改']=infoi[0]            dic['使用方式']=infoi[1]            dic['活动时长']=infoi[2].split(':')[1]            dic['使用期限']=infoi[3]            dic['入场方式']=infoi[4]        except:            continue    dic['价格']=info2.find('p',class_='price').find('span').text    dic['参加人数']=info2.find('ul',class_='pay_otherinfo t_gray').find('div',class_='left_box').text.replace('n','').split('人')[0]    dic['评分']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='m_star_v2 t12').text.replace('n','')    dic['评价数目']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='t12 u_t_gray_6').text.replace('n','').replace('(','').split('条')[0]    return dicinfo4_list = []n=1for url in pro4_lst:    try:        #print(url)        info4_list.append(get_data1(url))        print('成功获取第%i个网址的基本信息'%n)        n =1    except:        continue

数据预处理:建立索引,转换数据类型,数据清洗

代码语言:javascript复制
#确定索引,转换数据类型,数据清洗df4=pd.DataFrame(info4_list)df4.index=df4['title']df4['评价数目']=df4['评价数目'].astype(str).str.replace(',','')df4['评分']=df4['评分'].astype(str).str.replace(',','')df4['价格']=df4['价格'].astype(str).str.replace(',','')df4['评分']=df4['评分'].astype(np.float)df4['评价数目']=df4['评价数目'].astype(np.int)df4['价格']=df4['价格'].astype(np.int)df4

可视化:做散点图查看价格、评分、评价数目的关系

代码语言:javascript复制
plt.title('分类4活动价格评分气泡图')plt.scatter(df4['价格'],df4['评分'],s=df4['评价数目']/10,alpha=0.8,cmap='Reds')plt.grid()#从散点图可以看出评分多集中在4.5分左右,价格集中在200-500内,评论多在300元左右的活动
代码语言:javascript复制
plt.title('价格分布图')plt.hist(df4['价格'],bins=10)plt.grid()#可以看出大部分活动价格集中在100-500元
代码语言:javascript复制
#查看价格前十的活动dptop10=df4.sort_values(by='价格',ascending=False).iloc[:10]dptop10['价格'].plot(kind='bar',figsize=(10,5),color='y',grid=True)#可以看出美食高价格主要是银座高级和牛牛排、清酒厂、米其林怀石料理、和牛烤肉等店
代码语言:javascript复制
#查看评分前十的活动dptop10=df4.sort_values(by='评分',ascending=False).iloc[:10]dptop10['评分'].plot(kind='bar',figsize=(10,5),color='r',grid=True)#可看出高评分主要有祗园怀石料理、乌丸御池店、螃蟹&海鲜居酒屋、和牛牛排西餐、北海道拉面、蟹本家、北一札幌拉面等店
代码语言:javascript复制
#查看评价数目前十的活动dptop10=df4.sort_values(by='评价数目',ascending=False).iloc[:10]dptop10['评价数目'].plot(kind='bar',figsize=(10,5),color='b',grid=True)#评价数目可以在一定程度上反映‘地道美食’的热门程度,此处可以看出玄品河豚、烧肉亭六歌仙、札幌啤酒园、武藏自助餐厅、日本酒专门店、蟹家、矶丸水产、玄品河豚等美食店较为热门,较多人评论

以上便是对‘地道美食’的分析,从分析结果看建议做攻略的时候,土豪可以考虑银座高级和牛牛排、清酒厂、米其林怀石料理、和牛烤肉等美食店;从评分看,祗园怀石料理、乌丸御池店、螃蟹&海鲜居酒屋、和牛牛排西餐、北海道拉面、蟹本家、北一札幌拉面等店是满分店,相信味道应该相当不错;从评论数目看,玄品河豚、烧肉亭六歌仙、札幌啤酒园、武藏自助餐厅、日本酒专门店、蟹家、矶丸水产、玄品河豚等美食店较为热门,性价比较高。


以下是对“当地交通/wifi”的分析

代码语言:javascript复制
#获取pro5共214个活动的基本信息def get_data1(urli):    headers={#此处可放入自己使用的计算机浏览网址的headers        }    ri = requests.get(url=urli,headers=headers)    soupi = BeautifulSoup(ri.text,'lxml')    dic = {}    info = soupi.find('div',class_='white_bg')    info1 = info.find('ul',class_='act_icons t14').find_all('li')    info2 = info.find('div',class_='m_border_gray m_bg_white shadow_box__1')    dic['title']=info.find('h1').text    for i in info1:        try:            infoi=[]            i = i.text.replace('n','')            infoi.append(i)            dic['是否支持退改']=infoi[0]            dic['使用方式']=infoi[1]            dic['活动时长']=infoi[2].split(':')[1]            dic['使用期限']=infoi[3]            dic['入场方式']=infoi[4]        except:            continue    dic['价格']=info2.find('p',class_='price').find('span').text    dic['参加人数']=info2.find('ul',class_='pay_otherinfo t_gray').find('div',class_='left_box').text.replace('n','').split('人')[0]    dic['评分']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='m_star_v2 t12').text.replace('n','')    dic['评价数目']=info2.find('ul',class_='pay_otherinfo t_gray').find('span',class_='t12 u_t_gray_6').text.replace('n','').replace('(','').split('条')[0]    return dicinfo5_list = []n=1for url in pro5_lst:    try:        #print(url)        info5_list.append(get_data1(url))        print('成功获取第%i个网址的基本信息'%n)        n =1    except:        continue

数据预处理:建立索引,转换数据类型,数据清洗

代码语言:javascript复制
#确定索引,转换数据类型,数据清洗df5=pd.DataFrame(info5_list)df5.index=df5['title']df5['评价数目']=df5['评价数目'].astype(str).str.replace(',','')df5['评分']=df5['评分'].astype(str).str.replace(',','')df5['价格']=df5['价格'].astype(str).str.replace(',','')df5['评分']=df5['评分'].astype(np.float)df5['评价数目']=df5['评价数目'].astype(np.int)df5['价格']=df5['价格'].astype(np.int)df5

可视化:做散点图查看价格、评分、评价数目的关系

代码语言:javascript复制
plt.title('分类5活动价格评分气泡图')plt.scatter(df5['价格'],df5['评分'],s=df5['评价数目']/100,alpha=0.8,cmap='Reds')plt.grid()#从散点图可以看出评分多集中在4.2-5分,价格集中在200元内,评论多在100元内的商品
代码语言:javascript复制
plt.title('价格分布图')plt.hist(df5['价格'],bins=10)plt.grid()#可以看出大部分活动价格集中在250元内
代码语言:javascript复制
#查看价格前十的活动dptop10=df5.sort_values(by='价格',ascending=False).iloc[:10]dptop10['价格'].plot(kind='bar',figsize=(10,5),color='y',grid=True)#可以看出交通高价格主要是札幌包车一日游、富士山箱根等地一日游、成天机场接送、大阪周边包车一日游、富士区一日游、京都市区一日游、京都奈良一日游等包车项目
代码语言:javascript复制
#查看评分前十的活动dptop10=df5.sort_values(by='评分',ascending=False).iloc[:10]dptop10['评分'].plot(kind='bar',figsize=(10,5),color='r',grid=True)#可看出高评分主要有福冈周边接机、关西包车游览、茨城机场接送、4G随身wifi、4G上网卡、新千岁机场接送、4G隐身wifi、九州自驾租车、普光寺&松代一日乘车券等商品
代码语言:javascript复制
#查看评价数目前十的活动dptop10=df5.sort_values(by='评价数目',ascending=False).iloc[:10]dptop10['评价数目'].plot(kind='bar',figsize=(10,5),color='b',grid=True)#评价数目可以在一定程度上反映‘交通&wifi’相关商品的热门程度,此处可以看出东京地铁乘车券、成田机场接送、日本随身wifi、欢迎来大阪卡、关西周游券、日本4G上网卡、箱根周游券等商品较多人购买使用。

以上便是对‘当地交通&wifi’的分析,从分析结果看建议做交通相关攻略的时候,根据游览地方,选择评分较高的交通方式,如:福冈周边接机、关西包车游览、茨城机场接送、4G随身wifi、4G上网卡、新千岁机场接送、4G隐身wifi、九州自驾租车、普光寺&松代一日乘车券等商品;同时可参考较多人使用的东京地铁乘车券、成田机场接送、日本随身wifi、欢迎来大阪卡、关西周游券、日本4G上网卡、箱根周游券等商品


根据对五个活动类别的分析,以下分别对景点、日游、体验、美食、交通五大方面给出建议: 1、景点&表演:环球影城、海洋馆、迪士尼、静冈樱桃小丸子乐园门票、冲绳东南植物园、东京读卖乐园、东京大森茶屋艺伎宴; 2、一日游&小团游:关西周游券可用于大阪、神户、京都以至奈良、和歌山、高野山的观光旅游,富士山旅游路线建议:忍野八海、御殿场outlet、抹茶体验、河口湖、五合目,富士&箱根:芦之湖、驹岳空中缆车,北海道:旭山动物园、美瑛青池;从评分上看,热门地点有:东京筑地市场、富士山、大阪黑门市场美食、户隐高原、东京SUP立式划桨体验、东京水上皮划艇体验、博多古寺巡礼; 3、特色体验:土豪可以考虑武士杀阵体验,东京观光直升机、滑雪等体验,当然热门的京都东山人力车、青木原树海、濑底岛帆伞&浮潜体验、天妇罗烹饪课&抹茶制作体验、茶道&书法&干果子制作体验、大阪城武士忍者神龟扮演体验、有马温泉体验、池袋动物广场萌宠体验、大阪海洋馆、浅草寺和服体验、大江户温泉、京都和服、新宿机器人餐厅表演、岚山嵯峨野小火车、冲绳美丽海水族馆不容错过; 4、地道美食:土豪可以考虑银座高级和牛牛排、清酒厂、米其林怀石料理、和牛烤肉等美食店;从评分看,祗园怀石料理、乌丸御池店、螃蟹&海鲜居酒屋、和牛牛排西餐、北海道拉面、蟹本家、北一札幌拉面等店是满分店,相信味道应该相当不错;从评论数目看,玄品河豚、烧肉亭六歌仙、札幌啤酒园、武藏自助餐厅、日本酒专门店、蟹家、矶丸水产、玄品河豚等美食店较为热门,性价比较高; 5、交通&wifi:根据游览地方,选择评分较高的交通方式,如:福冈周边接机、关西包车游览、茨城机场接送、4G随身wifi、4G上网卡、新千岁机场接送、4G隐身wifi、九州自驾租车、普光寺&松代一日乘车券等商品;同时可参考较多人使用的东京地铁乘车券、成田机场接送、日本随身wifi、欢迎来大阪卡、关西周游券、日本4G上网卡、箱根周游券等

以上是主要的分析思路和攻略建议


以下是对总数据分析后用活动名做词云图,对攻略意义不大,仅是为了做词云图和用pyecharts做交互式图表查看总体情况。

4、用pyecharts做交互式图表

代码语言:javascript复制
#用pe作交互式图表import osos.chdir(r'C:UsersLenovoDesktop')from pyecharts import Lineline=Line('价格分布折现图',width=1500,height=800)line.add('价格',df1['title'],df1['价格'],is_smooth=True,is_datazoom_show=True)line.render()
from pyecharts import Barbar=Bar('价格分布柱状图',width=1500,height=800)bar.add('价格',df1['title'],df1['价格'],is_smooth=True,is_datazoom_show=True)bar.render()

5、将点评数作为频次,用活动名做词云图

代码语言:javascript复制
#导出文件df1.to_excel(r'C:UsersLenovoDesktop日本KLOOK爬取信息.xlsx')

0 人点赞