点击上方"蓝字",关注"Python当打之年"
本期我们通过全国热门旅游景点数据分析一下全国比较热门的景点分布和国民出游情况,看看哪些地区景点比较受欢迎,希望对小伙伴们有所帮助,如有疑问或者需要改进的地方可以联系小编。
涉及到的内容:
Pandas — 数据处理
Pyecharts — 数据可视化
jieba — 分词
collections — 数据统计
import jieba
import pandas as pd
from collections import Counter
from pyecharts.charts import Line,Pie,Scatter,Bar,Map,Grid
from pyecharts.charts import WordCloud
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.globals import SymbolType
from pyecharts.commons.utils import JsCode
地图显示部分需要用到 pyecharts==1.9.0,已安装其他低版本的需要升级。
df = pd.read_excel('旅游景点.xlsx')
df.head()
df.info()
2.3 按销量排序
df.sort_values('销量', ascending=False).head()
可以看到上海迪士尼乐园、上海海昌海洋公园、北京故宫、陕西秦始皇陵博物馆、四川成都大熊猫繁育研究基地等景点相当热门。
3.1 销量前20热门景点数据
sort_info = df.sort_values(by='销量', ascending=True)
b1 = (
Bar()
.add_xaxis(list(sort_info['名称'])[-20:])
.add_yaxis('热门景点销量', sort_info['销量'].values.tolist()[-20:],itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js)))
.reversal_axis()
.set_global_opts(
title_opts=opts.TitleOpts(title='热门景点销量数据'),
yaxis_opts=opts.AxisOpts(name='景点名称'),
xaxis_opts=opts.AxisOpts(name='销量'),
)
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
)
# 将图形整体右移
g1 = (
Grid()
.add(b1, grid_opts=opts.GridOpts(pos_left='20%', pos_right='5%'))
)
df_tmp1 = df[['城市','销量']]
df_counts = df_tmp1.groupby('城市').sum()
m1 = (
Map()
.add('假期出行分布', [list(z) for z in zip(df_counts.index.values.tolist(), df_counts.values.tolist())], 'china')
.set_global_opts(
title_opts=opts.TitleOpts(title='假期出行数据地图分布'),
visualmap_opts=opts.VisualMapOpts(max_=100000, is_piecewise=False,range_color=colors),
)
)
华东、华南、华中等地区属于国民出游热点地区,尤其是北京、上海、江苏、广东、四川、陕西等地区出行比较密集。
df_tmp2 = df[df['星级'].isin(['4A', '5A'])]
df_counts = df_tmp2.groupby('城市').count()['星级']
b2 = (
Bar()
.add_xaxis(df_counts.index.values.tolist())
.add_yaxis('4A-5A景区数量', df_counts.values.tolist(),itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js)))
.set_global_opts(
title_opts=opts.TitleOpts(title='各省市4A-5A景区数量'),
datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_='inside')],
)
)
df0 = df_counts.copy()
df0.sort_values(ascending=False, inplace=True)
c1 = (
Pie()
.add('', [list(z) for z in zip(df0.index.values.tolist(), df0.values.tolist())],
radius=['30%', '100%'],
center=['50%', '60%'],
rosetype='area',
)
.set_global_opts(title_opts=opts.TitleOpts(title='地区景点数量'),
legend_opts=opts.LegendOpts(is_show=False),
toolbox_opts=opts.ToolboxOpts())
.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position='inside', font_size=12,
formatter='{b}: {c}', font_style='italic',
font_weight='bold', font_family='Microsoft YaHei'
))
)
item_style = {'normal': {'shadowColor': '#000000',
'shadowBlur': 20,
'shadowOffsetX':5,
'shadowOffsetY':15
}
}
s1 = (
Scatter()
.add_xaxis(df_counts.index.values.tolist())
.add_yaxis('4A-5A景区数量', df_counts.values.tolist(),symbol_size=50,itemstyle_opts=item_style)
.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_show=False,
type_='size',
range_size=[5,50]))
)
df_tmp3 = df[df['星级'].isin(['4A', '5A'])]
df_counts = df_tmp3.groupby('城市').count()['星级']
m2 = (
Map()
.add('4A-5A景区分布', [list(z) for z in zip(df_counts.index.values.tolist(), df_counts.values.tolist())], 'china')
.set_global_opts(
title_opts=opts.TitleOpts(title='地图数据分布'),
visualmap_opts=opts.VisualMapOpts(max_=50, is_piecewise=True),
)
)
price_level = [0, 50, 100, 150, 200, 250, 300, 350, 400, 500]
label_level = ['0-50', '50-100', '100-150', '150-200', '200-250', '250-300', '300-350', '350-400', '400-500']
jzmj_cut = pd.cut(df['价格'], price_level, labels=label_level)
df_price = jzmj_cut.value_counts()
p1 = (
Pie(init_opts=opts.InitOpts(
width='800px', height='600px',
)
)
.add(
'',
[list(z) for z in zip(df_price.index.tolist(), df_price.values.tolist())],
radius=['20%', '60%'],
center=['40%', '50%'],
rosetype='radius',
label_opts=opts.LabelOpts(is_show=True),
)
.set_global_opts(title_opts=opts.TitleOpts(title='门票价格占比',pos_left='33%',pos_top="5%"),
legend_opts=opts.LegendOpts(type_='scroll', pos_left="80%",pos_top="25%",orient="vertical")
)
.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}: {c} ({d}%)'),position='outside')
)
s2 = (
Scatter()
.add_xaxis(df_price.index.tolist())
.add_yaxis('门票价格区间', df_price.values.tolist(),symbol_size=50,itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js)))
.set_global_opts(
yaxis_opts=opts.AxisOpts(name='数量'),
xaxis_opts=opts.AxisOpts(name='价格区间(元)'))
.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_show=False,
# 设置通过图形大小来表现数据
type_='size',
# 图形大小映射范围
range_size=[5,50]))
)
w2 = (
WordCloud()
.add(
"",
ac.most_common(200),
word_size_range=[5, 80],
textstyle_opts=opts.TextStyleOpts(font_family="cursive"),
mask_image='1.jpg'
)
.set_global_opts(
title_opts=opts.TitleOpts(title="自定义样式词云图"),
)
)
华东、华南、华中等地区属于国民出游热点地区,尤其是北京、上海、江苏、广东、四川、陕西等地区出行比较密集。 江苏、安徽、河南、北京、湖北等地区4A、5A级景区数量比较多。 门票价格100以内居多,大概占比70%,还是比较实惠的。
往期推荐
可视化 | Flask+Mysql+Echarts 豆瓣电影Top250数据分析系统
Pandas+Pyecharts | 暑期档电影票房数据分析可视化
Pandas+Pyecharts | 平均预期寿命数据可视化
Pandas+Pyecharts | 2024年巴黎奥运会奖牌数据分析可视化
Pandas+Pyecharts | 杭州二手房数据分析可视化
Pandas+Pyecharts | 当当网畅销图书榜单数据分析可视化
Pandas+Pyecharts | 海南旅游攻略数据分析可视化
Pandas+Pyecharts | 全国海底捞门店数据分析可视化
Pandas+Pyecharts | 京东某商品销量数据分析可视化
Pandas+Pyecharts | 全国星巴克门店数据分析可视化
Pandas+Pyecharts | 第七次人口普查数据分析可视化
Pandas+Pyecharts | 快手APP全国大学生用户数据分析可视化
Pandas+Pyecharts | 奥迪汽车销量数据分析可视化
Pandas+Pyecharts | 剧荒了?用Python找找最近的热播好剧!
Pandas+Pyecharts | 2023年胡润百富榜数据分析可视化
Pandas+Pyecharts | 2023软科中国大学排名分析可视化
Pandas+Pyecharts | 成都大运会奖牌数据分析可视化
Pandas+Pyecharts | 电子产品销售数据分析可视化+用户RFM画像
Pandas+Pyecharts | 北京近五年历史天气数据可视化
Pandas+Pyecharts | 中国高校及专业数据分析可视化
Pandas+Pyecharts | 新冠疫情数据动态时序可视化
Pandas+Pyecharts | 全国吃穿住行消费排行榜,最‘抠门’的地区居然是北京!!!
Pandas+Pyecharts | 2022世界500强数据分析可视化
Pandas+Pyecharts | 上海市餐饮数据分析可视化
Pandas+Pyecharts | 山东省高考考生数据分析可视化
Pandas+Pyecharts | 20000+天猫订单数据可视化
Pandas+Pyecharts | 40000+汽车之家数据分析可视化
Pandas+Pyecharts | 广州市已成交房源信息数据可视化
Pandas+Pyecharts | 某直聘平台招聘信息数据可视化
可视化 | 分享一套Flask+Pyecharts可视化模板
用Python分析了3W+《独行月球》影评数据,看看观众们怎么说~