五一去长沙吃喝玩乐

前几天发表过一篇文章厦门不止鼓浪屿,得到了一些朋友的肯定,让我再写下其他城市。这两天又获取到了两份关于长沙的数据:长沙景点和长沙美食,之后进行了分析,如果有朋友想去长沙或者周边城市玩,要仔细看看喔。

导入库

import pandas as pd
import re
import csv
import json
import requests
import random# 显示所有列
# pd.set_option('display.max_columns', None)# 显示所有行
# pd.set_option('display.max_rows', None)# 设置value的显示长度为100,默认为50
# pd.set_option('max_colwidth',100)# 绘图相关
import jieba
import matplotlib.pyplot as plt
from pyecharts.globals import CurrentConfig, OnlineHostType
from pyecharts import options as opts  # 配置项
from pyecharts.charts import Bar, Pie, Line, HeatMap, Funnel, WordCloud, Grid, Page  # 各个图形的类
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType,SymbolTypeimport plotly.express as px
import plotly.graph_objects as go

长沙景点

景点分析效果

首先看见具体的分析结果:

数据获取

长沙景点的数据获取方法和之前那篇关于厦门的文章是一样的,只是重新跑了一遍代码,具体过程不再阐述,感兴趣的朋友可以看之前的文章,爬取的字段:

  • 中文名
  • 英文名
  • 攻略数
  • 评价数
  • 位置
  • 排名
  • 驴友占比
  • 简介

具体的源代码如下:

最终数据有1152条,数据中绝大部分是长沙的景点数据,也有少量周边城市,比如:宁乡、浏阳等的数据,整体的数据前5行如下:

下面重点介绍数据分析的过程

整体情况

首先看看整体的数据情况:

fig = px.scatter(changsha[:10],  # 前10个x="strategy",  # 攻略数y="comment",   # 评论数color="comment",  # 颜色选取size="comment",  # 散点大小hover_name="cn_title",text="cn_title"  # 显示文字)fig.update_traces(textposition='top center')  # 文本顶部居中显示fig.show()

很显然:橘子洲、岳麓山、岳麓书院、太平老街排名靠前

排名靠前景点

看看排名靠前的景点是哪些?

# 根据ranking排序取出前20名数据,排除ranking=0的数据,再取出前10数据changsha1 = changsha[changsha["ranking"] != 0].sort_values(by=["ranking"])[:20].reset_index(drop=True)
changsha1.head(10)

通过排名我们发现:橘子洲(烟火、大桥、天心阁)、岳麓山(书院)、黄兴路步行街、马王堆汉墓遗址、湖南省博物馆,整体排名很靠前,深受游客们欢迎,具体看看排名前20的景点:

评论火爆景点

很多游客到了一个景点喜欢写评论,看下哪些景点获得大量的评论:

changsha2 = changsha[changsha["comment"] != 0].sort_values(by=["comment"],ascending=False)[:10]# 绘图
fig = px.scatter(changsha2,x="cn_title",y="comment",size="comment",color="comment",text="cn_title"
)fig.update_traces(textposition="top center")fig.show()

攻略在手,旅游不愁

出门旅游之前最好还是做一份旅游攻略,看看提供攻略最多的前10景点是哪些:

如果我们考虑前20个景点的攻略数:

驴友占比

我们爬取到的驴友数据是百分比,类型是字符串类型,我们现在去掉%符号,取出左边的数值,如果没有则用0代替,方便最终画图,具体操作如下:

# 去掉%取出左边数据
changsha["lvyou_number"] = changsha["lvyou"].apply(lambda x:x.split("%")[0])
changsha["lvyou_number"] = changsha["lvyou_number"].astype(int)
changsha.head()

取出排名前10的驴友占比景点:

景点介绍

获取到的abstract字段是用来描述景点的基本信息,可以用来制作词云图,具体处理过程如下:

abstract_list = changsha["abstract"].tolist()# 1、分词
jieba_name = []
for i in range(len(abstract_list)):# seg_list只是一个generator生成器:<class 'generator'>seg_list = jieba.cut(str(abstract_list[i]).strip(), cut_all=False)  # 对list(seg_list)中的每个元素进行追加for each in list(seg_list):   jieba_name.append(each)# 2、去停用词
# 创建停用词list
def stopwordslist(filepath):stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]return stopwords# 传入路径,加载去停用词
stopwords = stopwordslist('/Users/peter/Desktop//nlp_stopwords.txt')  stopword_list = []
for word in jieba_name:  # jieba_name中的word不在停用词表中,且不是\t制表符if word not in stopwords:if word != "\t" and word != " " and word != "nan":stopword_list.append(word)# 3、统计单词出现个数
dic = {}
number = 0for each in stopword_list:if each in dic.keys():number += 1   dic[each] = numberelse:dic[each] = 1 # 不存在则结果为1# 4、字典转成json数据,绘制词云图需要
tuple_list = []
for k,v in dic.items():tuple_list.append(tuple([k,v]))tuple_list[:20]

长沙美食

第二部分介绍的是长沙(长沙附近部分城市)的美食,接下来从3个方面介绍:

  • 字段获取
  • 数据保存及处理
  • 美食数据分析

发送请求

url = "https://travel.qunar.com/p-cs300022-changsha-meishi?page=1"headers = {"user-agent": "个人请求头"}response = requests.get(url=url,headers=headers)
result = response.content.decode()

字段获取

  • 名称cn_title
  • 评分socre
  • 均价person_avg
  • 地址address
  • 推荐菜recommand
  • 评价comment

1、源码结构

网页显示每页有10个景点(最后页未必是10个),总共200页的数据,每个景点的信息包括在一个<li></li>标签对中,我们只需要从标签中获取到相应的信息即可

2、名称和评分两个字段的获取相对简单,直接通过正则表达式来获取,关键字定位需要准确(以后会详细详解正则表达式的使用)

# 中文名
cn_title = re.findall('cn_tit">(.*?)</span>.*?countbox',result,re.S)

# 得分:没有得分用--表示
score = re.findall('cur_score">(.*?)</span>.*?total_score',result,re.S)

3、关于剩下4个字段的获取,相对复杂。因为他们并不是在每个店的信息中存在,有的,但是他们有一个共同点:全部是隐藏一个<div></div>标签对中,而且每个字段都有自己的关键词

具体处理方法:先大后小

1、先整体:提取sublistbox下面的全部信息

2、从步骤1的信息进行判断,获取4个单独字段

# 均价
person_avg = []for i in range(len(sublistbox)):try:if "均" in sublistbox[i]:  # 如果均价存在person_avg.append(re.findall('&yen; (.*?)</dd></dl>',sublistbox[i],re.S)   [0])   # 将解析出来的第一个字段放入列表中else:  # 否则,不存在的话,添加0person_avg.append(0)continue   # 遇到报错继续往下执行except:person_avg.append(0)

剩下3个字段处理类似:

address = []for i in range(len(sublistbox)):try:if "址" in sublistbox[i]:  # 关键词address.append(re.findall('址.*?des_line">(.*?)</dd></dl>',sublistbox[i],re.S)[0])else:address.append("无")continueexcept:address.append("无")
recommand = []for i in range(len(sublistbox)):try:if "推荐菜" in sublistbox[i]:recommand.append(re.findall('推荐菜.*?des_line">(.*?)</dd></dl>',sublistbox[i],re.S)[0])else:recommand.append("无")continueexcept:recommand.append("无")
comment = []for i in range(len(sublistbox)):try:if "desbox" in sublistbox[i]:   # 关键词comment.append(re.findall('.*?txt">(.*?)<span class="img_doublequote img_r">',sublistbox[i],re.S)[0])else:comment.append("无")continueexcept:comment.append("无")

4、上面是获取单页数据的解析过程,下面讲解如何获取200页的字段数据:

# 中文名:得分字段类似
cn_title_list = []for i in range(1,201):url = "https://travel.qunar.com/p-cs300022-changsha-meishi?page={}".format(i)headers = {"user-agent": "请求头"}response = requests.get(url=url,headers=headers)result = response.content.decode()cn_title = re.findall('cn_tit">(.*?)</span>.*?countbox',result,re.S)for each in cn_title:cn_title_list.append(each)cn_title_list
#  均价字段:地址、推荐菜、评价类似
# 某个字段不存在,用0或者无代替
person_avg_list = []for i in range(1,201):url = "https://travel.qunar.com/p-cs300022-changsha-meishi?page={}".format(i)headers = {"user-agent": ""}response = requests.get(url=url,headers=headers)result = response.content.decode()# 1、先整体提取sublistbox = re.findall('sublistbox">(.*?)</div>', result, re.S)# 2、再局部提取person_avg = []for i in range(len(sublistbox)):try:if "均" in sublistbox[i]:person_avg.append(re.findall('&yen; (.*?)</dd></dl>',sublistbox[i],re.S)[0])else:person_avg.append(0)continueexcept:person_avg.append(0)for each in person_avg:person_avg_list.append(each)# 地址
address_list = []for i in range(1,201):url = "https://travel.qunar.com/p-cs300022-changsha-meishi?page={}".format(i)headers = {"user-agent": "请求头"}response = requests.get(url=url,headers=headers)result = response.content.decode()# 1、先整体提取sublistbox = re.findall('sublistbox">(.*?)</div>', result, re.S)# 2、再局部提取address = []for i in range(len(sublistbox)):try:if "址" in sublistbox[i]:address.append(re.findall('址.*?des_line">(.*?)</dd></dl>',sublistbox[i],re.S)[0])else:address.append("无")continueexcept:address.append("无")for each in address:address_list.append(each)address_list[:20]

获取全网数据

5、提取到每个字段后生成整体数据,并保存:

# 1、生成数据df = pd.DataFrame({"中文名": cn_title_list,"得分": score_list,"均价": person_avg_list,"地址": address_list,"推荐菜": recommand_list,"评价": comment_list
})
# 2、保存数据
# df.to_csv("长沙美食.csv",index=False,encoding='utf_8_sig')  # 防止乱码

美食数据分析

前期处理

在进行数据分析之前,需要进行前期的处理:

df["得分"] = df["得分"].apply(lambda x: x.replace("--","0"))  # 将得分中的--替换成0

改变两字字段的数据类型:

长沙到底有几家文和友?

1、文和友是长沙的知名老店,那获取到的数据中有几家和文和友相关的店?

数据显示:20家

看看前5家:

2、哪家文和友得分最高?

我们看看前5名:

fig = px.scatter(wenheyou_score[:5],x="中文名",y="得分",color="得分",size="得分",text="地址"
)fig.update_traces(textposition="top center")
fig.show()

可以看到:府中路的这家店是评分最高的,网友给的评价是:

虾肉很新鲜,口感嫩滑,入味极佳,个人觉得不是很辣,但是如果对于吃辣程度一般的人来说,绝对足够了。

臭豆腐香不香?

1、看看数据中有臭豆腐店

数据显示有19家,我们看看前5家店

2、臭豆腐的价格如何?

数据分析可视化-长沙31块的臭豆腐香吗相关推荐

  1. 长沙旅游攻略!用Python告诉你31块的臭豆腐它香吗?

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 夜阑卧听风吹雨,铁马冰河入梦来. ...

  2. 长沙旅游攻略!31块的臭豆腐它香吗?

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 为学应须毕生力,攀高贵在少年时. ...

  3. 做电商数据分析可视化,这个国产BI软件很香

    电商数据分析的数据采集整合工作量大,对实时性要求高,特别是跨境电商物流周期长不利于做库存计划不说,还容易出现运营.物流.财务.生产信息脱节等情况.难,但难不倒国产BI软件.在国内外BI软件中,国产BI ...

  4. 【数据分析可视化】各国商店-小试牛刀

    分组+plt 各国商店-小试牛刀 # 基本信息 import numpy as np import pandas as pd from pandas import Series, DataFrame# ...

  5. 数据分析_SQL数据分析--旅游数据分析可视化实操

    SQL数据分析--旅游数据分析可视化实操.根据现有数据分析,具体操作情况如下: ①用户个人信息,数据共有4列,userid:用户ID: gender性别:province省份:age年龄段 测试集,1 ...

  6. 大数据分析可视化工具怎么选

    大数据是指不能在一定时间内使用传统软件工具进行捕获.管理和处理的数据收集.它需要一种新的处理模式来具有更强的决策能力.从这些方面入手,可以帮助我们更全面的识别产品,从而快速准确的选择合适的大数据分析可 ...

  7. 48种数据分析可视化图表

    可视化对于数据分析师来说可能不是最重要的,重要的是你分析或挖掘出来的结果是否有效.在这基础之上就需要通过可视化恰当完整的表达见解.这里又有区别了:实用性和美观性哪个更重要?要我说实用性是第一位的,能用 ...

  8. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

  9. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化

    python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化 一.抓取数据 需要的库 request库 响应http请求 json库 将文本保存成json形式 pyquery 类似JQ ...

最新文章

  1. hibernate -- HQL语句总结
  2. 【DEMO 0074】进程创建与消亡
  3. SAP标准成本估算删除
  4. swift5的SnipKit框架使用
  5. 网关服务Spring Cloud Gateway(三)
  6. tensorflow错误:InvalidArgumentError (see above for traceback): Cannot assign a device for operation
  7. 雪色光晕(计算几何+暴力)
  8. 【MM模块】Inventory Management(IM)库存管理简介
  9. Android之ViewStub
  10. Java案例2-1 商品入库
  11. java 信鸽推送demo_iOS中关于信鸽推送的使用demo详解
  12. ASN.1入门(超详细)
  13. scrapy爬虫-拉勾网(学习交流)
  14. 用asp.net写的一个购物网站
  15. 双平衡吉尔伯特混频器设计(项目设计论文)
  16. jetson nano开发使用的基础详细分享
  17. 苹果8p手机的指纹解锁为什么会失灵呢?怎么解决
  18. 用C语言实现简单的神经元
  19. 【译】「食人的大鹫」的运动方法 程序动画技术
  20. mastercam2017后处理升级_如何升级Mastercam 9.1版后处理?

热门文章

  1. hame RT5350移植OpenWrt
  2. 在隐秘角落的小爽文有多火?40天内就收回所有成本?豆豆细说爽文大生意
  3. 怎么用vm安装linux系统,如何用虚拟机安装linux系统
  4. 【MySql】CentOS7 安装并配置MySQL8.0
  5. 10、正则表达式 (笔试题、语法规则、正则对象方法、正则实例属性、支持正则表达式的String对象的方法、贪婪匹配与非贪婪匹配)
  6. 特斯拉家用充电桩电流是多少_特斯拉如何给家庭装上充电桩
  7. 0051:软件版本(C++)
  8. 魔力Python——对象
  9. 服务器修改字体,Win10 1909默认字体怎么修改?Win10 1909默认字体修改教程
  10. 微信H5开发-大多数前端都会遇到的几个兼容性的坑