厦门真的不止鼓浪屿
厦门真的不止鼓浪屿
今天带来的一篇文章是关于厦门的。因为自己在厦门待过很年多的时间,从读书毕业到走上工作岗位,在厦门度过了十分美好的青春时光。
厦门的环境优美是名副其实的,在国内也一直都是一个热门旅游城市,但是很多人去厦门都是冲着鼓浪屿去的,毕竟名声在外。在自己的记忆中应该是去过7次鼓浪屿,每次家人或者朋友过来带他们上去。但是厦门真的不止鼓浪屿。
鼓浪屿
那就先来一张鼓浪屿的照片,自己曾经带着朋友去鼓浪屿的日光岩
(鼓浪屿最高峰)顶上拍摄的一张全景图。顶上的游客特别多,鼓浪屿、厦门标志性建筑世茂双子塔、厦门湾尽收眼底😃
数据来源
本文中使用的数据是从一个网站上进行获取的,具体过程详细解说。
爬取字段
总共爬取了6个字段,它们分别是:
中文名称cn_title 英文名称en_title 攻略strategy 点评comment 排名ranking 景点简介abstract
网页规律
1、进入网站:https://travel.qunar.com/p-cs299782-xiamen-jingdian-1-1,我们发现每页都有10个景点,总共126页:
网页规律可以构造为:
for i in range(1,127):
url = "https://travel.qunar.com/p-cs299782-xiamen-jingdian-1-{}".format(i) # 网页规律
2、我们看看6个字段信息在源码中位置,右键单击,选择“检查”,在审查元素elements中找到每页的10个景点,其中每个<li></li>
对代表一个景点。
3、看下每个字段的位置
通过下面的3幅图我们定位到了每个字段所在的位置。只有定位到了字段的位置,我们才能够进行解析出来。
下面我们将每个字段解析出来
导入相应库
爬取字段首先需要导入各种库,这些库主要的功能包含:
发送网络请求requests 正则解析数据re模块 json包处理Python字典类型数据 csv用于保存爬取到的数据 Pandas、numpy处理爬取的数据 plotly_express和pyecharts的绘图
import pandas as pd
import numpy as np
import re
import csv
import json
import requests
import random
# 分词
import jieba
# 绘图
# import plotly.express as px 等同
import plotly_express as px
import plotly.graph_objects as go
from wordcloud import WordCloud # 词云图
import matplotlib.pyplot as plt
from plotly.graph_objects import Scatter,Bar
第一页数据请求
我们先看看第一页数据的请求,看下具体的源码
部分的网页数据如下:
匹配字段
下面是通过re模块的findall()
使用正则表达式来匹配每个字段:
1、景点中文名称
有时候我们需要检查下每页的个数是否是10个,所以打印出来了长度,刚好是10个
2、景点英文名称
3、攻略数量
4、点评数量
5、景点排名
景点排名比较特殊,自己在爬取数据的时候发现有些景点是没有排名的,比如第16页的景点中,很多没有排名,需要特殊出来下。
在上面的代码中,如果景点的排名不存在,则用0代替:
6、景点简介
全网爬取
下面是爬取整个网站的源码,包含:
网页URL构造 发送请求,获取源码 字段解析过程,特殊情况处理 保存文件
数据处理
首先我们通过pandas来读取和处理我们获取的数据:
df = pd.read_csv("厦门景点.csv")
df.head() # 取出前5条数据
查看一下数据的长度和字段类型,以及是否有缺失值:
可以发现3个字段是字符串类型:object 另外3个字段是int64的类型
df.isnull().sum() # 查看缺失值
# 结果显示:369个英文名缺失,1121个景点没有简介
中文名称cn_title
首先我们看看景点的名称(分析中文名称)。厦门是一个花园城市,整个岛上有很多的公园,我们从数据中看看厦门有多少公园:
str.contains()
:字符串包含函数reset_index()
:pandas中的索引重排
# 1-多少个公园
park = df[df["cn_title"].str.contains("公园")].reset_index(drop=True)
park
结论:数据显示厦门岛内外总共有107个公园
我们将公园按照ranking字段进行排序,再看看具体是哪些公园比较受欢迎:
new_park = park[park["ranking"] != 0].sort_values(by=["ranking"]).reset_index(drop=True)
new_park[:20] # 取出前20个公园
从数据中看出来,排名前三的是:铁路文化公园、中山公园、五缘湾湿地公园
1、铁路文化公园:笔者去过一次,在金榜公园文凭路附近,是鹰厦(江西鹰潭到厦门)铁路的延伸线,还有陈旧的铁轨
2、中山公园:很多地方应该都有中山公园,纪念孙中山先生,在这里一般会举行很多的活动
3、五缘湾湿地公园:一提到五缘湾,就让人想到厦门的土豪们。五缘湾可以说是厦门的土豪区
还有白鹭洲公园,忠仑公园,岛外的天竺山森林公园等都是值得一去的地方。接下来我们看看厦门有哪些著名的街道:
# 2-著名街道
street = df[df["cn_title"].str.contains("街")].reset_index(drop=True)
street.head(10)
数据中共有37条,我们取出前10条数据
中山路步行街真的是太火了:各种当地闽南小吃、奶茶、台湾特产,厦门标志性建筑-骑楼。每到节假日都是堵车,人山人海。
顶澳仔猫街也有很多人去。在厦门大学南门不远处,笔者去过几次。里面有个卖猫的小店,超级火🔥。
最后我们看看和大学相关的景点:
可以看到基本上厦门和学校相关的17个景点被3所高校承包了:
厦门大学 集美大学 华侨大学
厦门大学以前游客是可以随意进出的。最近几年开始限制人数,而且还需要预约才能进校,所以想去厦门大学的小伙伴要提前预约喔
但是如果你有亲戚或者朋友在里面读书,听说可以带进去的喔😃偷偷告诉你。放一张厦门上弦场的照片,笔者曾经拍摄的。
景点排名ranking
我们直接通过景点的排名ranking来看看哪些景区受欢迎:
# 排除ranking=0的数据;排名升序排列;
# 取出前10个景点
ranking = df[df["ranking"] != 0].sort_values(by=["ranking"],ascending=True)[:20].reset_index(drop=True)
px.bar(ranking, # 传入的数据框
x="cn_title", # 横轴字段
y="ranking", # 纵轴字段
color="ranking" # 颜色显示字段
)
排名第一的果然是鼓浪屿😭。贝壳🐚梦幻世界、厦门海底世界、厦门大德记浴场、日光岩等都是鼓浪屿上的景点。所以鼓浪屿真的是非常火
其次就是厦门大学和旁边的南普陀寺,也是游客喜欢光顾的景点。前几年,厦门修建一个新的标志性建筑:世贸双子塔,也有很多游客去那边。
攻略数strategy
很多游客到了景点之后喜欢写一些旅游攻略供他人参考,我们看看热门景点的攻略数:
px.scatter(df, # 绘图数据
x="cn_title", # 横纵轴
y="strategy",
color="strategy" # 颜色标记
)
结论:数据显示厦门大学是游客最喜欢写攻略的景点,其次是南普陀寺和中山路步行街。
点评数comment
我们再来看看游客们对景点的点评数;降序排列之后取出前20个景点,并显示前10条数据:
comment = df[df["comment"] != 0].sort_values(by=["comment"],ascending=False)[:20].reset_index(drop=True)
comment.head(10)
px.scatter(comment, # 数据框
x="cn_title", # 横纵轴
y="comment",
color="comment" # 颜色
)
根据评论数comment和排名ranking,我们画出多图组合:
fig = px.scatter(comment, # 数据框
x="ranking", # 横轴
y="comment", # 纵轴
color="ranking", # 颜色
marginal_y="violin", # y轴图形
marginal_x="box", # x轴图形
trendline="ols", # 趋势线
template="simple_white") # 模板
fig.show()
排名第一的果然还是鼓浪屿😭厦门大学、南普陀寺、中山路步行街等紧随其后。
简介abstract
最后我们分析下网站上对景点的简介。在这里我们使用的WordCloud来绘制词云图。首先将简介中的空值进行填充。
abstract = df.fillna(value="") # 缺失值填充
abstract_list = abstract["abstract"].tolist() # 显示前10个简介
abstract_list[:10]
接下来我们使用jieba分词之后,再将每个分词追加到一个大的列表中:
jieba_list = []
for i in range(len(abstract_list)):
# jieba分词
seg_list = jieba.cut(str(abstract_list[i]).strip(), cut_all=False)
for each in list(seg_list):
jieba_list.append(each)
jieba_list[:10]
第一次:使用Wordcloud直接绘图
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = " ".join(i for i in jieba_list) # 待处理的字符串
# 先下载SimHei.ttf字体,放置到自己的某个目录下
font = r'/Users/peter/Desktop/spider/SimHei.ttf'
wc = WordCloud(collocations=False,
font_path=font, # 路径
max_words=2000,width=4000,
height=4000, margin=2).generate(text.lower())
plt.imshow(wc)
plt.axis("off")
plt.show()
wc.to_file('xiamen.png') # 把词云保存下来
从词云图中看出来,简介中:厦门和鼓浪屿是非常突出的。当然也有很多的无效词语,比如:位于、这里等,接下来我们使用去停用次表进行处理,停用词表是网上收集的:
### 使用去停用词再画一次:停用词表是自己收集的
# 创建停用词list
def StopWords(filepath):
stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
return stopwords
# 传入停用词表的路径
stopwords = StopWords('/Users/peter/Desktop/Publish/nlp_stopwords.txt')
stopword_list = []
for word in jieba_list:
if word not in stopwords:
if word != "\t" and word != " ":
stopword_list.append(word)
stopword_list[:10]
使用停用词表之后发现逗号等标点去掉了,很多没有价值的词语也被取消。接下来我们使用下面这张美女的图形作为背景图来绘制词云图:
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
d = path.dirname('.') # 在ide中使用这段代码
# d = path.dirname(__file__)
# 传入新的词语列表
text = " ".join(i for i in stopword_list)
# https://www.deviantart.com/jirkavinse/art/Real-Life-Alice-282261010
alice_coloring = np.array(Image.open(path.join(d, "wordcloud.jpg")))
# 设置停用词
stopwords = set(STOPWORDS)
stopwords.add("said")
# 字体路径
font = r'/Users/peter/Desktop/spider/SimHei.ttf'
wc = WordCloud(background_color="white", font_path=font,
max_words=2000, mask=alice_coloring,
height=6000,width=6000,
stopwords=stopwords, max_font_size=40, random_state=42)
wc.generate(text)
image_colors = ImageColorGenerator(alice_coloring)
plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
plt.axis("off")
plt.show()
wc.to_file('厦门.png') # 把词云保存下来
最终绘制出来的图形如下显示:
总结
本文通过从网上爬取的一份数据,对厦门的相关景点进行了分析,看看大家到厦门都喜欢去哪里:
鼓浪屿真的太火了,基本上游客是必去的 厦门大学片区的景点:厦门大学思明校区(芙蓉湖、芙蓉隧道、颂恩楼等)、旁边的南普陀寺、寺庙上面的五老峰 如果你喜欢大海,喜欢骑行,去这里:厦大白城沙滩、演武大桥、环岛路、胡里山炮台、椰风寨 如果你是个美食爱好者,你应该去:中山路步行街、曾厝垵、台湾小吃街 如果你是个文艺小青年,沙坡尾艺术西区你不能错过