基于Python的携程网重庆市旅游景点数据可视化分析

一、项目背景

重庆,这座被誉为"山城"、"雾都"的城市,以其独特的地形地貌、丰富的旅游资源和深厚的文化底蕴,近年来成为国内炙手可热的旅游目的地。从洪崖洞的璀璨夜景到武隆天生三桥的壮丽奇观,重庆的旅游资源呈现出多元化、高品质的特点。

本项目通过爬取携程网重庆市旅游景点数据,运用Python数据分析技术,从空间分布价格体系标签特征口碑评价四个维度,深入挖掘重庆旅游资源的分布规律与特征,为游客出行规划、景区运营管理提供数据支撑。

二、数据来源与预处理

2.1 数据来源

数据来源于携程网重庆市旅游景点页面,包含以下完整字段

字段名称 说明
标题 景点名称
等级 景区等级(5A/4A等)
碑榜 景点上榜情况(如"重庆夜游必打卡景点榜 No.7"等)
标签 景点特色标签(如"遛娃宝藏地"、"自然山水"等)
热度 景点热度评分
评分 游客评分
评论数 总评论数
好评数 好评数量
消费后评价数 消费后评价数量
差评数 差评数量
地址 大区域地址(如"解放碑/洪崖洞")
详细地址 景点具体位置
距离 距市中心距离
门票 门票价格信息
开放时间 景区开放时间
官方电话 景区联系电话
封面图片链接 景点封面图片URL
详情链接 景点详情页URL
相关图片链接(轮播图的4个) 轮播图图片链接列表
更多内容 景点详细介绍、优待政策、服务设施等

2.2 数据预处理关键技术

(1)行政区提取

由于原始数据中地址格式不统一,需要通过正则表达式从详细地址中提取行政区信息:

def extract_district(addr):
    if pd.isna(addr):
        return '未知'
    addr_str = str(addr)
    pattern = r'重庆市([^市]+?(?:区|县|新区))'
    match = re.search(pattern, addr_str)
    if match:
        district = match.group(1).strip()
        if '两江新区' in district:
            return '两江新区'
        return district
    return '未知'

(2)门票价格提取

门票字段包含文本描述,需提取数值价格:

def extract_price(price_str):
    if pd.isna(price_str):
        return None
    match = re.search(r'门票\s*([\d.]+)元', str(price_str))
    if match:
        return float(match.group(1))
    return None

(3)等级分类判断

def is_5a(grade):
    if pd.isna(grade):
        return False
    return '5A' in str(grade)

(4)好评率计算

df['好评率'] = df.apply(lambda x: x['好评数'] / x['评论数'] if x['评论数'] > 0 else np.nan, axis=1)

三、各行政区景点分布分析

3.1 可视化实现

本模块采用matplotlib绑定三个子图,从不同角度展示景点分布特征:

fig, axes = plt.subplots(1, 3, figsize=(18, 6))

# 图1:景点数量占比饼图
axes[0].pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
axes[0].set_title('各行政区景点数量占比(前5名)')

# 图2:热度≥7景点数量条形图
axes[1].bar(x, y, color='skyblue')
axes[1].set_title('各行政区热度≥7的景点数量')

# 图3:5A与4A景点堆叠条形图
axes[2].bar(x, y_5a, width, label='5A', color='gold')
axes[2].bar(x, y_4a, width, bottom=y_5a, label='4A', color='lightcoral')

📸 请在此处插入截图:运行第一个代码块生成的三合一图表(饼图+条形图+堆叠条形图)
在这里插入图片描述

3.2 分析结果解读

(1)景点数量空间分布

从饼图可以看出:

  • "未知"行政区占比最高(约63.0%),这主要是因为部分景点地址信息不完整或未能成功提取具体区县
  • 在已知行政区中,渝中区(约5.0%)两江新区(约3.7%)、**武隆区(约2.6%)**位列前三

解读:渝中区作为重庆母城,集中了洪崖洞、解放碑、长江索道等核心地标,景点密度高;武隆区则拥有天生三桥、仙女山等世界级自然景观。

(2)高热度景点分布

热度≥7分的景点数量与景点总量呈正相关:

  • 渝中区、武隆区、两江新区领先
  • 渝中区的高热度景点多集中在网红打卡地
  • 武隆区以自然风光类景点获得高评价
(3)高等级景区分布
等级 主要分布区域 特点
5A 武隆区、大足区、奉节县、南川区 世界级自然与文化遗产
4A 渝中区、沙坪坝区、南岸区 人文、城市景观为主

关键发现:武隆区同时拥有多个5A和4A景区,是重庆高等级景区的核心集聚区;渝中区虽无5A景区,但凭借密集的4A景点和超高热度,依然是重庆旅游的绝对中心。


四、门票价格与热度、等级关系分析

4.1 可视化实现

本模块采用散点图+箱线图的组合,揭示价格与热度、等级的关系:

from scipy import stats

# 散点图 + 线性回归趋势线
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
line_x = np.array([x.min(), x.max()])
line_y = intercept + slope * line_x
ax1.plot(line_x, line_y, color='red', linestyle='--', 
         label=f'趋势线 (r={r_value:.2f})')

# 箱线图
bp = ax2.boxplot(data_box, labels=['5A', '4A', '其他'], patch_artist=True)
colors = ['gold', 'lightcoral', 'lightgreen']
for patch, color in zip(bp['boxes'], colors):
    patch.set_facecolor(color)

📸 请在此处插入截图:运行第二个代码块生成的双图(散点图+箱线图)
在这里插入图片描述

4.2 分析结果解读

(1)价格与热度的关系
指标 数值 含义
相关系数 r 0.06 几乎无相关性

核心发现

  • 价格与热度之间几乎不存在线性相关性
  • 无论价格高低(数十元至两百元),热度值均广泛分布在6.5~8.5之间
  • 游客对景区的热度评价不受价格高低的显著影响

业务启示:价格并非决定热度的主要因素,景区的特色、服务质量、品牌效应等软实力可能更为关键。

(2)不同等级景区的价格分层
等级 中位数价格 价格区间 特点
5A 130~150元 较宽,部分超200元 顶级景区定价能力强
4A 80~100元 相对集中 中高端定位
其他 40~60元 离散程度小 低价为主

核心发现:景区等级对门票价格具有明显的分层效应——等级越高,价格普遍越高。


五、景点标签与行政区词云分析

5.1 可视化实现

本模块使用WordCloud库生成词云图,直观展示景点标签和行政区分布:

from wordcloud import WordCloud

# 生成标签词云
wordcloud_tags = WordCloud(
    width=600, height=500,
    background_color='white',
    font_path='C:/Windows/Fonts/simhei.ttf',
    collocations=False
).generate(tags_text)

# 生成行政区词云
wordcloud_district = WordCloud(
    width=600, height=500,
    background_color='white',
    font_path='C:/Windows/Fonts/simhei.ttf',
    collocations=False
).generate_from_frequencies(district_counts)

# 并排显示
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8))
ax1.imshow(wordcloud_tags, interpolation='bilinear')
ax1.set_title('景点标签词云', fontsize=14)
ax2.imshow(wordcloud_district, interpolation='bilinear')
ax2.set_title('行政区词云', fontsize=14)

📸 请在此处插入截图:运行第三个代码块生成的词云双图(标签词云+行政区词云)
在这里插入图片描述

5.2 分析结果解读

(1)景点标签词云分析

核心标签(字体最大)

标签 含义 代表景点
夜游观景 重庆夜景经济核心吸引力 洪崖洞、两江游、南山一棵树
遛娃宝藏地 亲子游市场需求庞大 动物园、欢乐谷、海洋世界
自然山水 重庆旅游的"绿色底色" 武隆天生三桥、仙女山、金佛山
历史建筑 人文景点重要地位 磁器口、湖广会馆、大足石刻

次要标签

  • 城市漫步登高爬山:体现重庆"山城"特色
  • 博物馆&展馆公园&植物园古镇古村:文化科普、休闲游憩需求
  • 主题乐园水上乐园演唱会:现代娱乐业态

总结:重庆旅游呈现 “夜间经济 + 亲子游 + 山水观光 + 历史人文” 四轮驱动的特色。

(2)行政区词云分析

字体最大的区域

  • 渝中区:重庆母城和核心商圈,景区密度全市第一
  • 武隆区:世界级自然遗产,远郊旅游标杆

次大字体区域

  • 两江新区沙坪坝区:现代文旅项目+红色文化古镇
  • 南岸区九龙坡区巴南区:休闲度假资源丰富
  • 北碚区万州区奉节县:区域旅游集散中心

总结:重庆景点呈现 “主城核心集聚 + 远郊精品散布” 的格局。


六、评论数与好评率关系分析

6.1 可视化实现

本模块采用散点图+气泡图的组合,分析评论活跃度与口碑质量的关系:

# 图1:评论数 vs 好评率 散点图
ax1.scatter(x, y, alpha=0.5, s=20, c='steelblue')
ax1.set_xscale('log')  # 对数刻度

# 添加趋势线
slope, intercept, r_value, p_value, std_err = stats.linregress(
    valid['log_comments'], valid['好评率']*100)
ax1.plot(10**x_line, y_line, 'r--', label=f'趋势线 (r={r_value:.2f})')

# 图2:各行政区气泡图
sizes = stats['景点数'] * 30  # 气泡大小映射景点数量
scatter = ax2.scatter(stats['平均评论数'], stats['平均热度'], 
                      s=sizes, c=colors, alpha=0.7, cmap='viridis')
ax2.set_xscale('log')

📸 请在此处插入截图:运行第四个代码块生成的双图(散点图+气泡图)
在这里插入图片描述

6.2 分析结果解读

(1)评论数与好评率的关系

主要行政区表现

行政区 平均评论数 平均好评率 特点
江北区 约100万级别 约35% 高热度、口碑分化
渝中区 约100万级别 约30% 高热度、低好评矛盾
沙坪坝区 次高 约25% 类似趋势
九龙坡区、南岸区 10万级别 20%~15% 中位水平
云阳县、开州区 1万以下 10%以下 低评论、低好评

总体趋势

  • 呈现 “高评论数对应低好评率,低评论数对应更低好评率” 的近似趋势
  • 高评论数区域因游客基数大,评价样本丰富,容易出现两极分化
  • 低评论数区域因样本量小,好评率易受少数评价影响而波动
(2)各行政区评论活跃度与热度关系

气泡图解读

  • 气泡大小代表景点数量
  • 横轴为平均评论数(对数刻度),反映讨论活跃度
  • 纵轴为平均热度,反映景点受欢迎程度

核心发现

  • 渝中区、江北区等核心区域评论活跃度最高
  • 武隆区等远郊区域热度高但评论数相对较低
  • 部分新兴区域评论数和热度均较低,需加强推广

七、综合结论与建议

7.1 空间格局总结

重庆旅游景点呈现 “主城核心集聚 + 远郊精品散布” 的空间格局:

┌─────────────────────────────────────────────────┐
│  主城九区(渝中、沙坪坝、南岸、江北等)          │
│  → 人文、城市休闲类景点为主                      │
│  → 数量多、热度高、评论活跃                      │
├─────────────────────────────────────────────────┤
│  远郊区县(武隆、大足、奉节、南川等)            │
│  → 自然山水、世界遗产类景点为主                  │
│  → 等级高、单价高、口碑好                        │
└─────────────────────────────────────────────────┘

7.2 产品特征总结

重庆旅游呈现 “夜间经济 + 亲子游 + 山水观光 + 历史人文” 四轮驱动的特色:

维度 特征 代表资源
夜间经济 核心吸引力 洪崖洞、两江游、南山一棵树
亲子游 市场需求大 动物园、欢乐谷、海洋世界
山水观光 绿色底色 武隆天生三桥、仙女山、金佛山
历史人文 文化底蕴 磁器口、大足石刻、人民大礼堂

7.3 运营建议

对于景区运营方

  1. 提升等级是提高定价上限的有效途径
  2. 需同步优化服务和特色,才能将高价格转化为高热度
  3. 不能单纯依靠价格策略提升热度
  4. 可利用"碑榜"、"标签"等信息进行精准营销
  5. 关注差评原因,针对性改进服务质量

对于游客

  1. 高热度景区并非一定昂贵
  2. 部分4A或无等级景区也能提供高性价比的优质体验
  3. 可根据"标签"和"开放时间"灵活安排行程
  4. 关注评论数与好评率,理性选择景点

7.4 数据质量改进建议

"未知"行政区占比较高(63%),建议:

  1. 优化地址提取正则表达式
  2. 引入地理编码API进行地址解析
  3. 建立地址标准化清洗流程

八、技术栈总结

类别 技术/库
数据处理 pandas, numpy
可视化 matplotlib
词云生成 wordcloud
统计分析 scipy.stats
文本处理 re(正则表达式)
开发环境 Jupyter Notebook

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐