十三朝古都西安
这是全国旅游攻略的第四篇,前面三篇分别是:
海滨城市:厦门真的不止鼓浪屿娱乐之都:长沙31块的臭豆腐它香吗?美食之都:成都的火锅应该很辣吧!
地理位置从东南沿海,走到中部,然后到达西南,今天来到了历史文化浓厚的西北城市,历史曾至少有13个朝代在此建都:西安,自己没有去过,只是曾经坐火车路过一次,也很期待西安到底有哪些好吃的美食和好玩的地方
整体效果
先看看西安不同美食店铺数量
西安名称
以下内容知识来自维基百科,纯科普而已,讲述的是西安历史名称变化,学习下历史知识:
“西安城”:丰邑(殷商)-镐京(西周)-长安(西汉)-常安(新莽)-长安(东汉)-长安(曹魏)-长安(西晋)-长安(前秦)-长安(后秦)-长安(北周)-大兴(隋)-长安(唐)-大安(后梁)-长安(后唐)-永兴(宋)-奉元(元)-西安(明)-西安(清)-西安(中华民国)-西安(中华人民共和国)“西安”:宗周(周)-内史(秦)-京兆(汉)-京兆(新)-京兆(南北朝)-京兆(隋)-京兆(唐)-大安(后梁)-京兆(后唐)-京兆(宋)-奉元(元)-西安(明)-西安(清)-西安(中华民国)-西安(中华人民共和国)
数据来源
数据来自网上的某公开网站,通过爬虫方式获取,具体过程参考:
西安景点参考厦门的文章西安美食参考长沙的文章
涉及到的主要爬虫知识点:
requests发送获取网页数据基于正则表达式的数据解析基于csv包的数据保存
⚠️:以后会专门写一篇文章讲解Python中如何基于re模块通过正则解析数据
西安景点
总共8个字段信息:中文名、英文名、攻略数、评论数、位置、排名、驴友占比、简介
西安美食
6个字段信息:中文名、得分、均价、地址、推荐菜、评价
导入库
import pandas as pdimport reimport csvimport jsonimport requestsimport 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 jiebaimport matplotlib.pyplot as pltfrom pyecharts.globals import CurrentConfig, OnlineHostType from pyecharts import options as opts # 配置项from pyecharts.charts import Bar, Scatter, Pie, Line, HeatMap, Funnel, WordCloud, Grid, Page from mons.utils import JsCode from pyecharts.globals import ThemeType,SymbolTypeimport plotly.express as pximport plotly.graph_objects as gofrom plotly.subplots import make_subplots # 子图
西安景点
首先看下整体的数据,显示有1864个景点:
地区景点个数
西安景点的个数主要是分布在:西安市区、周至、蓝田、临潼、高陵
location = df["location"].value_counts().reset_index().rename(columns={"index":"location","location":"number"})c = (Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS)).add("西安景点个数",[list(z) for z in zip(location["location"].tolist(),location["number"].tolist())]).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))c.render_notebook()
景点评论之王
西安有些景点的相关评论非常之多,看下哪些景点的评论靠前?
df = pd.read_csv("西安景点.csv")comment_top10 = df.sort_values("comment",ascending=False)[:10]# 作图fig = px.bar(comment_top10,x="cn_title",y="comment",color="comment",text="comment")fig.update_traces(textposition="outside")fig.show()
可以看到评论最火的是:秦始皇帝陵博物院(兵马俑),高达20339条评论,其次是秦始皇陵,16050条。的确是西安的热门景点。
攻略数之王
再看看景点攻略数的情况:
# pyecharts实现x_data = strategy_top10["cn_title"].tolist()y_data = strategy_top10["strategy"].tolist()c = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add_xaxis(x_data).add_yaxis("西安景点攻略数前10名",y_data).set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-20)), # 设置旋转角度))c.render_notebook()
必玩景点
提取攻略数和评论都大于1000的景点:
comment_strategy = df[(df["comment"] >= 1000) & (df["strategy"] >= 100)]fig = px.scatter(comment_strategy,x="comment",y="strategy",color="comment",size="strategy",text="cn_title")# ['top left', 'top center', 'top right', 'middle left',# 'middle center', 'middle right', 'bottom left', 'bottom center', 'bottom right']fig.update_traces(textposition="top center")fig.show()
从图中显示结果来看,有几个必去的景点:
秦始皇帝陵博物院(兵马俑)回民街秦始皇陵华清宫陕西历史博物馆西安城墙大雁塔大唐芙蓉园
游客心中的排名
# 西安市区景点排名ranking_xian = df[(df["location"] == "西安") & (df["ranking"] != 0)].sort_values("ranking",ascending=True)[1:][:20]ranking_xian
可以看到很多排名靠前的景点的确评论数和攻略数也很多,比如:
秦始皇帝陵博物院(兵马俑)回民街圭峰山(这个景点还是很意外,可能是西安比较出名的山)大唐芙蓉园等
西安宫殿
西安的宫殿应该是很多的,我们看看获取的数据中到底有多少个宫殿相关的景点:
我们看下前10个宫殿的景区:华清宫、大明宫国家遗址公园、大明宫遗址博物馆、兴庆宫公园、阿房宫遗址等
秦始皇很伟大
通过上面的分析我们发现:**秦始皇帝陵博物馆(兵马俑)**在西安是一个非常出名的景点,那么我们看看和秦始皇相关的景点有哪些?
qinshihuang = df[df["cn_title"].str.contains("秦始皇")].reset_index(drop=True)qinshihuang
上面的结果显示:总共是7个景点,其中秦始皇帝陵博物馆(兵马俑)和秦始皇陵最为热门。
公园个数几何?
每个城市都有自己不同不样的公园,我们看看西安公园的个数:
park = df[df["cn_title"].str.contains("公园")].reset_index(drop=True)print("公园个数:{}".format(len(park)))# 结果公园个数:133
结果显示是133个,真的不少!!!看下数据中的前5个公园:
大明宫国家遗址公园、太平国家森林公园、曲江海洋极地公园、曲江池遗址公园评论还是靠前的
驴友最爱景点
我们驴友占比较高的景点:
lvyou = df.sort_values("lvyou_number",ascending=False)[:10].reset_index(drop=True)fig = px.bar(lvyou,x="cn_title",y="lvyou_number",text="lvyou_number")fig.update_traces(textposition="outside")fig.show()
果然:回民街、秦始皇帝陵博物院(兵马俑)、大雁塔、陕西历史博物馆等是驴友心中不错的景点
总结
通过上面对景点数据的分析,我们发现西安下面几个景点很值得一去:
秦始皇帝陵博物院(兵马俑):兵马俑的确是西安景点的代表回民街:西安各种美食、小吃聚集的场所大雁塔:位于西安市雁塔区大慈恩寺内,现存最早、规模最大的唐代四方楼阁式砖塔,供奉着玄奘从天竺(印度)带回来的佛像、舍利和梵文经典大明宫国家遗址公园:始建于唐太宗贞观时期,西安宫殿建筑中最为辉煌壮丽的建筑群华清宫:也称为华清池、骊山宫、骊宫、绣岭宫,唐代封建帝王游幸的别宫,唐玄宗和杨贵妃恩爱共浴的地方,也是西安事变的发生地。
西安美食
西安美食数据总共有1870条,看下前5条数据:
西安面食
北方人很喜欢吃面食,我们看看西安的面馆、面店:
df1 = pd.read_csv("西安美食.csv")noodles = df1[df1["中文名"].str.contains("面")].reset_index(drop=True)noodlesprint("面馆总数:",len(noodles))# 结果面馆总数: 115
根据得分字段的降序观察前10名的店铺:
排名第一的小魏哥秘制果仁烤面筋,值得你去尝试下,地址也给你了。
biangbiang面
Biang字是这么写的😃,笔画挺多的
biangbiang面店总共有11家,**郑大妈biangbiang面(南院门店)**上过《天天向上》节目,估计值得你品尝
凉皮
到了西安肯定是不能错过凉皮的,数据中总共19家:
liangpi = df1[df1["中文名"].str.contains("凉皮")].sort_values("得分",ascending=False).reset_index(drop=True)liangpi.head(10)
# 取出前10家店fig = px.scatter(liangpi[:10],x="得分",y="均价",color="均价",size="均价",text="中文名")fig.update_traces(textposition="top center")fig.show()
凉皮吃:魏家凉皮就对了。
魏家凉皮,魏家凉皮,魏家凉皮!
馍馍
陕西人也挺喜欢吃馍馍,肉夹馍、羊肉泡馍都还不错的,数据中总共有87家馍馍店:
mo = df1[df1["中文名"].str.contains("馍")].sort_values("得分",ascending=False).reset_index(drop=True)# 取出前10家店fig = px.scatter(mo[:10],x="得分",y="均价",color="均价",size="均价",text="中文名",width=900, height=700)fig.update_traces(textposition="top center")fig.show()
肉夹馍
我们具体看看陕西的另一个著名小吃:肉夹馍,取出相关数据的前5名:
roujiamo = df1[df1["中文名"].str.contains("肉夹馍")].sort_values("得分",ascending=False).reset_index(drop=True)roujiamo.head(5)
数据显示有36家
排名第一的樊家腊汁肉夹馍(西五路店),整体来说:价格不贵,评价还挺赞的
泡馍
看完了肉夹馍,我们再看看羊肉泡馍:数据中总共有38家店铺
paomo = df1[df1["中文名"].str.contains("泡馍")].sort_values("得分",ascending=False).reset_index(drop=True)paomo
强烈推荐:果渊斋老米家泡馍馆(回坊总店)
串串🍢
到了北方也得吃个串串🍢吧?
kaochuan = df1[df1["中文名"].str.contains("串")].sort_values("得分",ascending=False).reset_index(drop=True)kaochuan
数据中总共32家店,看看前5家:
我们看到佰人王串串香占据了3家,所以这家应该是西安串串的连锁店,老牌串串店。或许值得一试!
烤肉店
烤肉店总共有57家,我们看看前10家
kaorou = df1[df1["中文名"].str.contains("烤肉")].sort_values("得分",ascending=False).reset_index(drop=True)# 取出前10家店fig = px.scatter(kaorou[:10],x="得分",y="均价",color="均价",size="均价",text="中文名")fig.update_traces(textposition="top center")fig.show()
推荐一家店:小杨烤肉(明德门店),整体得分第一,价格上挺实惠😃
店铺
统计了西安几种不同店铺的数量,看下具体的数据:
shops = pd.DataFrame({"name":["面馆","biangbiang面","裤带面","馍","肉夹馍","泡馍","串串","烤肉","凉皮","清真"],"number":[116,11,10,87,36,38,32,57,19,42]})shops
c = (Pie().add("", [list(z) for z in zip(shops["name"].tolist(), shops["number"].tolist())]).set_global_opts(title_opts=opts.TitleOpts(title="西安店铺")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))c.render_notebook()
推荐菜词云图
最后我们看看游客都推荐了哪些美食?将店铺的中文名和推荐菜做成了词云图:
name_list = df1["中文名"].tolist()recommand_list = df1[df1["推荐菜"] != "无"]["推荐菜"].tolist()lst = name_list + recommand_list# 分词过程rec_jieba_list = []for i in range(len(lst)):# jieba分词seg_list = jieba.cut(str(lst[i]).strip(), cut_all=False)for each in list(seg_list):rec_jieba_list.append(each)# 词频统计rec_result = pd.value_counts(rec_jieba_list)[5::].to_frame().reset_index().rename(columns={"index":"词语",0:"次数"})# 词云图rec_words = [tuple(z) for z in zip(rec_result["词语"].tolist(), rec_result["次数"].tolist())]c = (WordCloud().add("", rec_words, word_size_range=[20, 80], shape=SymbolType.DIAMOND).set_global_opts(title_opts=opts.TitleOpts(title="西安美食推荐菜词云")))c.render_notebook()
取出前50个词语,再看看效果:
# 取出前100个词语rec_words = [tuple(z) for z in zip(rec_result["词语"].tolist(), rec_result["次数"].tolist())]c = (WordCloud().add("", rec_words[:50], word_size_range=[20, 80], shape=SymbolType.DIAMOND).set_global_opts(title_opts=opts.TitleOpts(title="西安美食推荐菜词云图")))c.render_notebook()
从词云图中我们也可以看到陕西西安人的美食和饮食特点:面食为主。
我们可以对比下成都美食的词云图,发现成都人都是各种肉类,火锅料
总结
通过分析西安的美食数据,推荐几家店铺:
烤面筋:小魏哥秘制果仁烤面筋biangbiang面:郑大妈biangbiang面(南院门店)凉皮:魏家凉皮,在西安很多连锁店肉夹馍:樊家腊汁肉夹馍(西五路店)串串:佰人王串串香
尤而小屋,一个温馨的小屋。小屋主人,一手代码谋求生存,一手掌勺享受生活,欢迎你的光临😃