分享一套【优质Python源码】基于Python的全国热门旅游景点数据分析可视化(pandas+pyecharts)

0 阅读34分钟

大家好,我是python222_小锋老师,分享一套优质的基于Python的全国热门旅游景点数据分析可视化(pandas+pyecharts)  。  

1.jpg

项目简介

随着国民生活水平的提升和旅游市场的快速发展,国内旅游已成为人们休闲生活的重要组成部分。为了深入了解全国景区门票销售情况和国民出游趋势,本项目通过对全国各地区景点门票的售卖数据进行分析,旨在揭示热门景点的分布和出游情况,为旅游业相关决策提供数据支持。

源码下载

链接: pan.baidu.com/s/1_bV9x3jB…

提取码: 1234

相关截图

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

8.jpg

9.jpg

核心代码

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "toc": true
   },
   "source": [
    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#项目介绍\" data-toc-modified-id=\"项目介绍-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>项目介绍</a></span></li><li><span><a href=\"#1.-导入模块\" data-toc-modified-id=\"1.-导入模块-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>1. 导入模块</a></span></li><li><span><a href=\"#2.Pandas数据处理\" data-toc-modified-id=\"2.Pandas数据处理-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>2.Pandas数据处理</a></span><ul class=\"toc-item\"><li><span><a href=\"#2.1-读取数据\" data-toc-modified-id=\"2.1-读取数据-3.1\"><span class=\"toc-item-num\">3.1&nbsp;&nbsp;</span>2.1 读取数据</a></span></li><li><span><a href=\"#2.2-查看索引、数据类型和内存信息\" data-toc-modified-id=\"2.2-查看索引、数据类型和内存信息-3.2\"><span class=\"toc-item-num\">3.2&nbsp;&nbsp;</span>2.2 查看索引、数据类型和内存信息</a></span></li><li><span><a href=\"#2.3-查看数值型列汇总统计\" data-toc-modified-id=\"2.3-查看数值型列汇总统计-3.3\"><span class=\"toc-item-num\">3.3&nbsp;&nbsp;</span>2.3 查看数值型列汇总统计</a></span></li><li><span><a href=\"#2.4-查看销量为0的行\" data-toc-modified-id=\"2.4-查看销量为0的行-3.4\"><span class=\"toc-item-num\">3.4&nbsp;&nbsp;</span>2.4 查看销量为0的行</a></span></li><li><span><a href=\"#2.5-去除销量为0的行数据\" data-toc-modified-id=\"2.5-去除销量为0的行数据-3.5\"><span class=\"toc-item-num\">3.5&nbsp;&nbsp;</span>2.5 去除销量为0的行数据</a></span></li><li><span><a href=\"#2.6-统计各列空值\" data-toc-modified-id=\"2.6-统计各列空值-3.6\"><span class=\"toc-item-num\">3.6&nbsp;&nbsp;</span>2.6 统计各列空值</a></span></li><li><span><a href=\"#2.7-将星级缺失值用‘未知’填充\" data-toc-modified-id=\"2.7-将星级缺失值用‘未知’填充-3.7\"><span class=\"toc-item-num\">3.7&nbsp;&nbsp;</span>2.7 将星级缺失值用‘未知’填充</a></span></li><li><span><a href=\"#2.8-也可以将所有缺失值都用‘未知’填充\" data-toc-modified-id=\"2.8-也可以将所有缺失值都用‘未知’填充-3.8\"><span class=\"toc-item-num\">3.8&nbsp;&nbsp;</span>2.8 也可以将所有缺失值都用‘未知’填充</a></span></li><li><span><a href=\"#2.9-按销量排序\" data-toc-modified-id=\"2.9-按销量排序-3.9\"><span class=\"toc-item-num\">3.9&nbsp;&nbsp;</span>2.9 按销量排序</a></span></li></ul></li><li><span><a href=\"#3.-Pyecharts数据可视化\" data-toc-modified-id=\"3.-Pyecharts数据可视化-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>3. Pyecharts数据可视化</a></span><ul class=\"toc-item\"><li><span><a href=\"#3.1-销量前20热门景点数据\" data-toc-modified-id=\"3.1-销量前20热门景点数据-4.1\"><span class=\"toc-item-num\">4.1&nbsp;&nbsp;</span>3.1 销量前20热门景点数据</a></span></li><li><span><a href=\"#3.2-假期出行数据全国地图分布\" data-toc-modified-id=\"3.2-假期出行数据全国地图分布-4.2\"><span class=\"toc-item-num\">4.2&nbsp;&nbsp;</span>3.2 假期出行数据全国地图分布</a></span></li><li><span><a href=\"#3.3-各省市4A-5A景区数量柱状图\" data-toc-modified-id=\"3.3-各省市4A-5A景区数量柱状图-4.3\"><span class=\"toc-item-num\">4.3&nbsp;&nbsp;</span>3.3 各省市4A-5A景区数量柱状图</a></span></li><li><span><a href=\"#3.4-各省市4A-5A景区数量玫瑰图\" data-toc-modified-id=\"3.4-各省市4A-5A景区数量玫瑰图-4.4\"><span class=\"toc-item-num\">4.4&nbsp;&nbsp;</span>3.4 各省市4A-5A景区数量玫瑰图</a></span></li><li><span><a href=\"#3.5-各省市4A-5A景区数量阴影散点图\" data-toc-modified-id=\"3.5-各省市4A-5A景区数量阴影散点图-4.5\"><span class=\"toc-item-num\">4.5&nbsp;&nbsp;</span>3.5 各省市4A-5A景区数量阴影散点图</a></span></li><li><span><a href=\"#3.6-各省市4A-5A景区地图分布\" data-toc-modified-id=\"3.6-各省市4A-5A景区地图分布-4.6\"><span class=\"toc-item-num\">4.6&nbsp;&nbsp;</span>3.6 各省市4A-5A景区地图分布</a></span></li><li><span><a href=\"#3.7-门票价格区间占比玫瑰图\" data-toc-modified-id=\"3.7-门票价格区间占比玫瑰图-4.7\"><span class=\"toc-item-num\">4.7&nbsp;&nbsp;</span>3.7 门票价格区间占比玫瑰图</a></span></li><li><span><a href=\"#3.8-门票价格区间数量散点图\" data-toc-modified-id=\"3.8-门票价格区间数量散点图-4.8\"><span class=\"toc-item-num\">4.8&nbsp;&nbsp;</span>3.8 门票价格区间数量散点图</a></span></li><li><span><a href=\"#3.9-景点简介词云\" data-toc-modified-id=\"3.9-景点简介词云-4.9\"><span class=\"toc-item-num\">4.9&nbsp;&nbsp;</span>3.9 景点简介词云</a></span></li></ul></li><li><span><a href=\"#总结\" data-toc-modified-id=\"总结-5\"><span class=\"toc-item-num\">5&nbsp;&nbsp;</span>总结</a></span></li></ul></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "E8FF169A027449A6AB12585BB252124E",
    "jupyter": {},
    "mdEditEnable": true,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "# 项目介绍\n",
    "\n",
    "本期我们通过去全国各地区景点门票的售卖情况,简单分析一下全国比较热门的景点分布和国民出游情况,看看哪些景点比较受欢迎,希望对小伙伴们有所帮助,如有疑问或者需要改进的地方可以在评论区留言。  \n",
    "\n",
    "- 关键词\n",
    "\n",
    "pandas数据处理、pyecharts可视化、jieba分词"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "E297C894A9784F55A63141CADE03A899",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "# 1. 导入模块  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {
    "id": "FA092A6B19024D0F94EE3CF11AB4DB18",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:42.875881Z",
     "start_time": "2025-10-15T13:26:42.744158600Z"
    }
   },
   "outputs": [],
   "source": [
    "import jieba\n",
    "import pandas as pd \n",
    "from collections import Counter\n",
    "from pyecharts.charts import Line,Pie,Scatter,Bar,Map,Grid\n",
    "from pyecharts.charts import WordCloud\n",
    "from pyecharts import options as opts\n",
    "from pyecharts.globals import ThemeType\n",
    "from pyecharts.globals import SymbolType\n",
    "from pyecharts.commons.utils import JsCode\n",
    "\n",
    "from pyecharts.globals import CurrentConfig, NotebookType,OnlineHostType\n",
    "CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOK"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "03382FF7E283464A86920CF4E62F41C5",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "# 2.Pandas数据处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "91041FC88B7D42C8856DF5E3C113108E",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.1 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {
    "id": "EFED20CBA70F46AE87311AC65E090CE3",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.004500800Z",
     "start_time": "2025-10-15T13:26:42.751369500Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "   城市        名称   星级   评分     价格     销量       省/市/区                    坐标  \\\n0  上海   上海迪士尼乐园  NaN  0.0  325.0  19459  上海·上海·浦东新区  121.667917,31.149712   \n1  上海  上海海昌海洋公园   4A  0.0  276.5  19406  上海·上海·浦东新区  121.915647,30.917713   \n2  上海   上海野生动物园   5A  3.6  116.0   6764  上海·上海·浦东新区  121.728112,31.059636   \n3  上海      东方绿舟   4A  3.5   40.0   5353   上海·上海·青浦区  121.015977,31.107866   \n4  上海      东方明珠   5A  3.8   54.0   3966  上海·上海·浦东新区   121.50626,31.245369   \n\n                    简介   是否免费                      具体地址  \n0         每个女孩都有一场迪士尼梦  False  上海市浦东新区川沙镇黄赵路310号上海迪士尼乐园  \n1   看珍稀海洋生物 | 玩超刺激娱乐项目  False         上海市浦东新区南汇城银飞路166号  \n2  全球动物聚集地 | 零距离和动物做朋友  False           上海市浦东新区南六公路178号  \n3     全国首屈一指的青少年校外教育营地  False          上海市青浦区沪青平公路6888号  \n4       感受云端漫步,品味老上海风情  False             上海市浦东新区世纪大道1号  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>城市</th>\n      <th>名称</th>\n      <th>星级</th>\n      <th>评分</th>\n      <th>价格</th>\n      <th>销量</th>\n      <th>省/市/区</th>\n      <th>坐标</th>\n      <th>简介</th>\n      <th>是否免费</th>\n      <th>具体地址</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>上海</td>\n      <td>上海迪士尼乐园</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>325.0</td>\n      <td>19459</td>\n      <td>上海·上海·浦东新区</td>\n      <td>121.667917,31.149712</td>\n      <td>每个女孩都有一场迪士尼梦</td>\n      <td>False</td>\n      <td>上海市浦东新区川沙镇黄赵路310号上海迪士尼乐园</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>上海</td>\n      <td>上海海昌海洋公园</td>\n      <td>4A</td>\n      <td>0.0</td>\n      <td>276.5</td>\n      <td>19406</td>\n      <td>上海·上海·浦东新区</td>\n      <td>121.915647,30.917713</td>\n      <td>看珍稀海洋生物 | 玩超刺激娱乐项目</td>\n      <td>False</td>\n      <td>上海市浦东新区南汇城银飞路166号</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>上海</td>\n      <td>上海野生动物园</td>\n      <td>5A</td>\n      <td>3.6</td>\n      <td>116.0</td>\n      <td>6764</td>\n      <td>上海·上海·浦东新区</td>\n      <td>121.728112,31.059636</td>\n      <td>全球动物聚集地 | 零距离和动物做朋友</td>\n      <td>False</td>\n      <td>上海市浦东新区南六公路178号</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>上海</td>\n      <td>东方绿舟</td>\n      <td>4A</td>\n      <td>3.5</td>\n      <td>40.0</td>\n      <td>5353</td>\n      <td>上海·上海·青浦区</td>\n      <td>121.015977,31.107866</td>\n      <td>全国首屈一指的青少年校外教育营地</td>\n      <td>False</td>\n      <td>上海市青浦区沪青平公路6888号</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>上海</td>\n      <td>东方明珠</td>\n      <td>5A</td>\n      <td>3.8</td>\n      <td>54.0</td>\n      <td>3966</td>\n      <td>上海·上海·浦东新区</td>\n      <td>121.50626,31.245369</td>\n      <td>感受云端漫步,品味老上海风情</td>\n      <td>False</td>\n      <td>上海市浦东新区世纪大道1号</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_excel('./旅游景点.xlsx')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "F938ED28D0D64C09A8BC371FF95DF6BA",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.2 查看索引、数据类型和内存信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {
    "id": "9A1C77F834EB4581BE4B1BABCF5AADED",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.012901200Z",
     "start_time": "2025-10-15T13:26:43.006502200Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2443 entries, 0 to 2442\n",
      "Data columns (total 11 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   城市      2443 non-null   object \n",
      " 1   名称      2443 non-null   object \n",
      " 2   星级      913 non-null    object \n",
      " 3   评分      2443 non-null   float64\n",
      " 4   价格      2443 non-null   float64\n",
      " 5   销量      2443 non-null   int64  \n",
      " 6   省/市/区   2443 non-null   object \n",
      " 7   坐标      2443 non-null   object \n",
      " 8   简介      2402 non-null   object \n",
      " 9   是否免费    2443 non-null   bool   \n",
      " 10  具体地址    2440 non-null   object \n",
      "dtypes: bool(1), float64(2), int64(1), object(7)\n",
      "memory usage: 193.4+ KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "5E3FA6570137497C95A7B35E70010E7F",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.3 查看数值型列汇总统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {
    "id": "DE4983C061D0485FAD8A638192265C23",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.021303Z",
     "start_time": "2025-10-15T13:26:43.009901700Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "                评分            价格            销量\ncount  2443.000000   2443.000000   2443.000000\nmean      1.683135    151.780929    360.652886\nstd       2.012527    649.170226   1043.798441\nmin       0.000000      0.000000      0.000000\n25%       0.000000     32.000000     40.000000\n50%       0.000000     62.000000     90.000000\n75%       3.700000    120.000000    270.000000\nmax       5.000000  23888.000000  19459.000000",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>评分</th>\n      <th>价格</th>\n      <th>销量</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>2443.000000</td>\n      <td>2443.000000</td>\n      <td>2443.000000</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>1.683135</td>\n      <td>151.780929</td>\n      <td>360.652886</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>2.012527</td>\n      <td>649.170226</td>\n      <td>1043.798441</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>0.000000</td>\n      <td>32.000000</td>\n      <td>40.000000</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>0.000000</td>\n      <td>62.000000</td>\n      <td>90.000000</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>3.700000</td>\n      <td>120.000000</td>\n      <td>270.000000</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>5.000000</td>\n      <td>23888.000000</td>\n      <td>19459.000000</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "2A7273A39E6D44889A7943D23DEFF1B5",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.4 查看销量为0的行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {
    "id": "FC10C73FB8564E74ADCD386658C60D87",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.028382100Z",
     "start_time": "2025-10-15T13:26:43.021303Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "     城市      名称   星级   评分   价格  销量  省/市/区                               坐标  \\\n301  台湾  复兴桥风景区  NaN  0.0  0.0   0  台湾·桃园  121.35037883956,24.815040245504   \n302  台湾     长春祠  NaN  3.5  0.0   0  台湾·花莲  121.60445032684,24.162302549393   \n303  台湾    淡水老街  NaN  0.0  0.0   0  台湾·淡水  121.44124069779,25.171297755773   \n304  台湾    士林官邸  NaN  5.0  0.0   0  台湾·台北  121.53013540214,25.093934468272   \n305  台湾    北安公园  NaN  5.0  0.0   0  台湾·台北  121.52694244942,25.076889096728   \n\n                     简介   是否免费               具体地址  \n301   带动了北横碧水青山的另一种欢乐风情  False       桃园县复兴乡中正路15号  \n302     一道飞瀑分流入溪,山水景色绝佳   True              台湾花莲县  \n303        美食汇聚的北台湾老街之一   True          台北县淡水镇中正路  \n304    林木参天、绿树幽深,极富神秘色彩   True  台北市士林区中山北路五段兴福林路口  \n305  满园新绿,温雅如诗,连绵一片绿意盎然  False    台湾台北市中山北路四段北安路旁  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>城市</th>\n      <th>名称</th>\n      <th>星级</th>\n      <th>评分</th>\n      <th>价格</th>\n      <th>销量</th>\n      <th>省/市/区</th>\n      <th>坐标</th>\n      <th>简介</th>\n      <th>是否免费</th>\n      <th>具体地址</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>301</th>\n      <td>台湾</td>\n      <td>复兴桥风景区</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0</td>\n      <td>台湾·桃园</td>\n      <td>121.35037883956,24.815040245504</td>\n      <td>带动了北横碧水青山的另一种欢乐风情</td>\n      <td>False</td>\n      <td>桃园县复兴乡中正路15号</td>\n    </tr>\n    <tr>\n      <th>302</th>\n      <td>台湾</td>\n      <td>长春祠</td>\n      <td>NaN</td>\n      <td>3.5</td>\n      <td>0.0</td>\n      <td>0</td>\n      <td>台湾·花莲</td>\n      <td>121.60445032684,24.162302549393</td>\n      <td>一道飞瀑分流入溪,山水景色绝佳</td>\n      <td>True</td>\n      <td>台湾花莲县</td>\n    </tr>\n    <tr>\n      <th>303</th>\n      <td>台湾</td>\n      <td>淡水老街</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0</td>\n      <td>台湾·淡水</td>\n      <td>121.44124069779,25.171297755773</td>\n      <td>美食汇聚的北台湾老街之一</td>\n      <td>True</td>\n      <td>台北县淡水镇中正路</td>\n    </tr>\n    <tr>\n      <th>304</th>\n      <td>台湾</td>\n      <td>士林官邸</td>\n      <td>NaN</td>\n      <td>5.0</td>\n      <td>0.0</td>\n      <td>0</td>\n      <td>台湾·台北</td>\n      <td>121.53013540214,25.093934468272</td>\n      <td>林木参天、绿树幽深,极富神秘色彩</td>\n      <td>True</td>\n      <td>台北市士林区中山北路五段兴福林路口</td>\n    </tr>\n    <tr>\n      <th>305</th>\n      <td>台湾</td>\n      <td>北安公园</td>\n      <td>NaN</td>\n      <td>5.0</td>\n      <td>0.0</td>\n      <td>0</td>\n      <td>台湾·台北</td>\n      <td>121.52694244942,25.076889096728</td>\n      <td>满园新绿,温雅如诗,连绵一片绿意盎然</td>\n      <td>False</td>\n      <td>台湾台北市中山北路四段北安路旁</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[df['销量']==0,:].head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "5B2C5E4E0A6B4EDD81F4A5463FE557D5",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "一共有123行。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "CCB1E99F409548CFBC87E3E00D9A900D",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.5 去除销量为0的行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {
    "id": "34AA1739B5264055A6B35B30168940DD",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.064054100Z",
     "start_time": "2025-10-15T13:26:43.028382100Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "(2320, 11)"
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df[df['销量']!=0] \n",
    "df.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "0E009A7038E74B488CBA5928B0452A0F",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "去除后还剩下2320行数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "38B1D5A86828490F8F138E3E37847BE7",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.6 统计各列空值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {
    "id": "3AAE68729FB84239803A046E3D475BF3",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.082349700Z",
     "start_time": "2025-10-15T13:26:43.036143800Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "城市          0\n名称          0\n星级       1407\n评分          0\n价格          0\n销量          0\n省/市/区       0\n坐标          0\n简介         37\n是否免费        0\n具体地址        2\ndtype: int64"
     },
     "execution_count": 167,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "0A13A87BD07B4B688420D8374EFC3F50",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "星级存在1407个空值,简介37个空值,具体地址2个空值,其他列不存在空值,数据还算比较完整。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "893925C89CD64E9088B80E57165520C5",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.7 将星级缺失值用‘未知’填充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {
    "id": "B9557FC5FC764C2C8219C06A166082ED",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.144918900Z",
     "start_time": "2025-10-15T13:26:43.047230400Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "城市        0\n名称        0\n星级        0\n评分        0\n价格        0\n销量        0\n省/市/区     0\n坐标        0\n简介       37\n是否免费      0\n具体地址      2\ndtype: int64"
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# df['星级'].fillna('未知', inplace=True)\n",
    "df.fillna({'星级': '未知'}, inplace=True)\n",
    "df.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "79EAEE2CC12A46C7951E5D7AA86BDD46",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.8 也可以将所有缺失值都用‘未知’填充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {
    "id": "4AF9872713754FF9965D304D93B757F5",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.160952Z",
     "start_time": "2025-10-15T13:26:43.055637200Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "城市       0\n名称       0\n星级       0\n评分       0\n价格       0\n销量       0\n省/市/区    0\n坐标       0\n简介       0\n是否免费     0\n具体地址     0\ndtype: int64"
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.fillna('未知', inplace=True)\n",
    "df.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "2B95E79B168F44658FBBFADFC43D65D6",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 2.9 按销量排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {
    "id": "419C7BAA08DF42C08448C18BAC97D265",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.183541Z",
     "start_time": "2025-10-15T13:26:43.065059800Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "      城市             名称  星级   评分     价格     销量       省/市/区  \\\n0     上海        上海迪士尼乐园  未知  0.0  325.0  19459  上海·上海·浦东新区   \n1     上海       上海海昌海洋公园  4A  0.0  276.5  19406  上海·上海·浦东新区   \n211   北京             故宫  5A  5.0   58.6  15277   北京·北京·东城区   \n2187  陕西  秦始皇帝陵博物院(兵马俑)  5A  4.4  120.0  12714   陕西·西安·临潼区   \n474   四川    成都大熊猫繁育研究基地  4A  4.0   52.0   9731   四川·成都·成华区   \n\n                        坐标                    简介   是否免费  \\\n0     121.667917,31.149712          每个女孩都有一场迪士尼梦  False   \n1     121.915647,30.917713    看珍稀海洋生物 | 玩超刺激娱乐项目  False   \n211   116.403347,39.922148      世界五大宫之首,穿越与您近在咫尺  False   \n2187  109.266029,34.386024               世界第八大奇迹  False   \n474   104.152603,30.738951  无关黑与白, 不分胖与瘦, 可爱而又温暖  False   \n\n                          具体地址  \n0     上海市浦东新区川沙镇黄赵路310号上海迪士尼乐园  \n1            上海市浦东新区南汇城银飞路166号  \n211               北京市东城区景山前街4号  \n2187      陕西省西安市临潼县秦始皇陵东1.5公里处  \n474       四川省成都市成华区外北熊猫大道1375号  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>城市</th>\n      <th>名称</th>\n      <th>星级</th>\n      <th>评分</th>\n      <th>价格</th>\n      <th>销量</th>\n      <th>省/市/区</th>\n      <th>坐标</th>\n      <th>简介</th>\n      <th>是否免费</th>\n      <th>具体地址</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>上海</td>\n      <td>上海迪士尼乐园</td>\n      <td>未知</td>\n      <td>0.0</td>\n      <td>325.0</td>\n      <td>19459</td>\n      <td>上海·上海·浦东新区</td>\n      <td>121.667917,31.149712</td>\n      <td>每个女孩都有一场迪士尼梦</td>\n      <td>False</td>\n      <td>上海市浦东新区川沙镇黄赵路310号上海迪士尼乐园</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>上海</td>\n      <td>上海海昌海洋公园</td>\n      <td>4A</td>\n      <td>0.0</td>\n      <td>276.5</td>\n      <td>19406</td>\n      <td>上海·上海·浦东新区</td>\n      <td>121.915647,30.917713</td>\n      <td>看珍稀海洋生物 | 玩超刺激娱乐项目</td>\n      <td>False</td>\n      <td>上海市浦东新区南汇城银飞路166号</td>\n    </tr>\n    <tr>\n      <th>211</th>\n      <td>北京</td>\n      <td>故宫</td>\n      <td>5A</td>\n      <td>5.0</td>\n      <td>58.6</td>\n      <td>15277</td>\n      <td>北京·北京·东城区</td>\n      <td>116.403347,39.922148</td>\n      <td>世界五大宫之首,穿越与您近在咫尺</td>\n      <td>False</td>\n      <td>北京市东城区景山前街4号</td>\n    </tr>\n    <tr>\n      <th>2187</th>\n      <td>陕西</td>\n      <td>秦始皇帝陵博物院(兵马俑)</td>\n      <td>5A</td>\n      <td>4.4</td>\n      <td>120.0</td>\n      <td>12714</td>\n      <td>陕西·西安·临潼区</td>\n      <td>109.266029,34.386024</td>\n      <td>世界第八大奇迹</td>\n      <td>False</td>\n      <td>陕西省西安市临潼县秦始皇陵东1.5公里处</td>\n    </tr>\n    <tr>\n      <th>474</th>\n      <td>四川</td>\n      <td>成都大熊猫繁育研究基地</td>\n      <td>4A</td>\n      <td>4.0</td>\n      <td>52.0</td>\n      <td>9731</td>\n      <td>四川·成都·成华区</td>\n      <td>104.152603,30.738951</td>\n      <td>无关黑与白, 不分胖与瘦, 可爱而又温暖</td>\n      <td>False</td>\n      <td>四川省成都市成华区外北熊猫大道1375号</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values('销量', ascending=False).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "CF493E19BF2F4022A7B9D30963657A1C",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "# 3. Pyecharts数据可视化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "A53EABB8204D47F38F63ECA8FAAF399C",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 3.1 销量前20热门景点数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {
    "hide_input": true,
    "id": "2234662DFE604FD98FE71DB60F1E056E",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": true,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.184541300Z",
     "start_time": "2025-10-15T13:26:43.078271300Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\销量前20热门景点数据.html'"
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 线性渐变\n",
    "color_js = \"\"\"new echarts.graphic.LinearGradient(0, 0, 1, 0,\n",
    "    [{offset: 0, color: '#009ad6'}, {offset: 1, color: '#ed1941'}], false)\"\"\"\n",
    "\n",
    "\n",
    "sort_info = df.sort_values(by='销量', ascending=True)\n",
    "b1 = (\n",
    "    Bar()\n",
    "    .add_xaxis(list(sort_info['名称'])[-20:])\n",
    "    .add_yaxis('热门景点销量', sort_info['销量'].values.tolist()[-20:],itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js)))\n",
    "    .reversal_axis()\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title='热门景点销量数据'),\n",
    "        yaxis_opts=opts.AxisOpts(name='景点名称'),\n",
    "        xaxis_opts=opts.AxisOpts(name='销量'),\n",
    "        )\n",
    "    .set_series_opts(label_opts=opts.LabelOpts(position=\"right\"))\n",
    "\n",
    ")\n",
    "# 将图形整体右移\n",
    "g1 = (\n",
    "    Grid()\n",
    "        .add(b1, grid_opts=opts.GridOpts(pos_left='20%', pos_right='5%'))  \n",
    ")\n",
    "g1.render('销量前20热门景点数据.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9E79713474E642B8B45B487AAA588B9F",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 3.2 假期出行数据全国地图分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "scrolled": true,
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.196797900Z",
     "start_time": "2025-10-15T13:26:43.085436900Z"
    }
   },
   "outputs": [],
   "source": [
    "dictcode = {'北京': '北京市',\n",
    " '天津': '天津市',\n",
    " '河北': '河北省',\n",
    " '山西': '山西省',\n",
    " '内蒙古': '内蒙古自治区',\n",
    " '辽宁': '辽宁省',\n",
    " '吉林': '吉林省',\n",
    " '黑龙江': '黑龙江省',\n",
    " '上海': '上海市',\n",
    " '江苏': '江苏省',\n",
    " '浙江': '浙江省',\n",
    " '安徽': '安徽省',\n",
    " '福建': '福建省',\n",
    " '江西': '江西省',\n",
    " '山东': '山东省',\n",
    " '河南': '河南省',\n",
    " '湖北': '湖北省',\n",
    " '湖南': '湖南省',\n",
    " '广东': '广东省',\n",
    " '广西': '广西壮族自治区',\n",
    " '海南': '海南省',\n",
    " '重庆': '重庆市',\n",
    " '四川': '四川省',\n",
    " '贵州': '贵州省',\n",
    " '云南': '云南省',\n",
    " '西藏': '西藏自治区',\n",
    " '陕西': '陕西省',\n",
    " '甘肃': '甘肃省',\n",
    " '青海': '青海省',\n",
    " '宁夏': '宁夏回族自治区',\n",
    " '新疆': '新疆维吾尔自治区',\n",
    "'台湾':'台湾',\n",
    " '香港':'香港',\n",
    " '澳门':'澳门'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {
    "hide_input": true,
    "id": "A45D19EE7D7747B585372EAF3F0DFAC4",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.243073800Z",
     "start_time": "2025-10-15T13:26:43.091306500Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\假期出行数据全国地图分布.html'"
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_tmp1 = df[['城市','销量']]\n",
    "df_counts = df_tmp1.groupby('城市').sum()\n",
    "m1 = (\n",
    "        Map()\n",
    "        .add('假期出行分布', [list(z) for z in zip([dictcode[x] for x in df_counts.index.values.tolist() ], df_counts.values.tolist())], 'china')\n",
    "        .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title='假期出行数据地图分布'),\n",
    "        visualmap_opts=opts.VisualMapOpts(max_=100000, is_piecewise=False,range_color=[\"white\", \"#fa8072\", \"#ed1941\"]),\n",
    "        )\n",
    "    )\n",
    "m1.render('假期出行数据全国地图分布.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "6D2C936FC70948479A50BC99BB9E8FC3",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "**华东、华南、华中**等地区属于国民出游热点地区,尤其是**北京、上海、江苏、广东、四川、陕西**等地区出行比较密集。  \n",
    "\n",
    "## 3.3 各省市4A-5A景区数量柱状图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {
    "hide_input": true,
    "id": "006C1643C3F84F928FB35A8C581A02C0",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.244073900Z",
     "start_time": "2025-10-15T13:26:43.101679700Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\各省市4A-5A景区数量柱状图.html'"
     },
     "execution_count": 174,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 线性渐变\n",
    "color_js = \"\"\"new echarts.graphic.LinearGradient(0, 1, 0, 0,\n",
    "    [{offset: 0, color: '#009ad6'}, {offset: 1, color: '#ed1941'}], false)\"\"\" \n",
    "\n",
    "df_tmp2 = df[df['星级'].isin(['4A', '5A'])]\n",
    "df_counts = df_tmp2.groupby('城市').count()['星级']\n",
    "b2 = (\n",
    "        Bar()\n",
    "            .add_xaxis(df_counts.index.values.tolist())\n",
    "            .add_yaxis('4A-5A景区数量', df_counts.values.tolist(),itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js)))\n",
    "            .set_global_opts(\n",
    "            title_opts=opts.TitleOpts(title='各省市4A-5A景区数量'),\n",
    "            datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_='inside')],\n",
    "        )\n",
    "    )\n",
    "b2.render('各省市4A-5A景区数量柱状图.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "8A7747CCF5E944139712945EA05D50A8",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 3.4 各省市4A-5A景区数量玫瑰图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {
    "hide_input": true,
    "id": "312D5065C1CD4E2FB5DDEA9D53A39558",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.248396Z",
     "start_time": "2025-10-15T13:26:43.110091200Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\各省市4A-5A景区数量玫瑰图.html'"
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df0 = df_counts.copy()\n",
    "df0.sort_values(ascending=False, inplace=True)\n",
    "c1 = (\n",
    "    Pie()\n",
    "    .add('', [list(z) for z in zip(df0.index.values.tolist(), df0.values.tolist())],\n",
    "         radius=['30%', '100%'],\n",
    "         center=['50%', '60%'],\n",
    "         rosetype='area',\n",
    "         )\n",
    "    .set_global_opts(title_opts=opts.TitleOpts(title='地区景点数量'),\n",
    "                     legend_opts=opts.LegendOpts(is_show=False),\n",
    "                     toolbox_opts=opts.ToolboxOpts())\n",
    "    .set_series_opts(label_opts=opts.LabelOpts(is_show=True, position='inside', font_size=12,\n",
    "                                               formatter='{b}: {c}', font_style='italic',\n",
    "                                               font_weight='bold', font_family='Microsoft YaHei'\n",
    "                                               ))\n",
    ")\n",
    "c1.render('各省市4A-5A景区数量玫瑰图.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "DAE41EAF8FDE498E8D5A16248A075EE7",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 3.5 各省市4A-5A景区数量阴影散点图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {
    "hide_input": true,
    "id": "30FC8ACECB5E414DAAB0A4279D420E63",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.261825900Z",
     "start_time": "2025-10-15T13:26:43.120336500Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\各省市4A-5A景区数量阴影散点图.html'"
     },
     "execution_count": 176,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_style = {'normal': {'shadowColor': '#000000', \n",
    "                         'shadowBlur': 20,\n",
    "                         'shadowOffsetX':5, \n",
    "                         'shadowOffsetY':15\n",
    "                         }\n",
    "              }\n",
    "s1 = (\n",
    "        Scatter()\n",
    "        .add_xaxis(df_counts.index.values.tolist())\n",
    "        .add_yaxis('4A-5A景区数量', df_counts.values.tolist(),symbol_size=50,itemstyle_opts=item_style)\n",
    "        .set_global_opts(visualmap_opts=opts.VisualMapOpts(is_show=False, \n",
    "                                              type_='size',\n",
    "                                              range_size=[5,50]))\n",
    ")\n",
    "s1.render('各省市4A-5A景区数量阴影散点图.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "049552DEB5504E14B0E01767CC42C762",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 3.6 各省市4A-5A景区地图分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {
    "hide_input": true,
    "id": "0FCF25B83EDD41038514CB4F16372300",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.262329200Z",
     "start_time": "2025-10-15T13:26:43.144918900Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\各省市4A-5A景区地图分布.html'"
     },
     "execution_count": 177,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_tmp3 = df[df['星级'].isin(['4A', '5A'])]\n",
    "df_counts = df_tmp3.groupby('城市').count()['星级']\n",
    "m2 = (\n",
    "    Map()\n",
    "    .add('4A-5A景区分布', [list(z) for z in zip([dictcode[x] for x in df_counts.index.values.tolist() ], df_counts.values.tolist())], 'china')\n",
    "    .set_global_opts(\n",
    "    title_opts=opts.TitleOpts(title='地图数据分布'),\n",
    "    visualmap_opts=opts.VisualMapOpts(max_=50, is_piecewise=True),\n",
    "    )\n",
    ")\n",
    "m2.render('各省市4A-5A景区地图分布.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "A349E7E012294947B6D8117841172692",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "**江苏、安徽、河南、北京、湖北**等地区4A、5A级景区数量比较多。  \n",
    "\n",
    "## 3.7 门票价格区间占比玫瑰图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {
    "id": "F67A8AE64241445D980B5CBB4AC5B2D7",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.262329200Z",
     "start_time": "2025-10-15T13:26:43.144918900Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "价格\n0-50       888\n50-100     725\n100-150    278\n150-200    184\n200-250     62\n250-300     59\n300-350     20\n350-400     19\n400-500     13\nName: count, dtype: int64"
     },
     "execution_count": 178,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 门票价格占比\n",
    "price_level = [0, 50, 100, 150, 200, 250, 300, 350, 400, 500]    \n",
    "label_level = ['0-50', '50-100', '100-150', '150-200', '200-250', '250-300', '300-350', '350-400', '400-500']    \n",
    "jzmj_cut = pd.cut(df['价格'], price_level, labels=label_level)        \n",
    "df_price = jzmj_cut.value_counts()\n",
    "df_price"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {
    "hide_input": true,
    "id": "A5BCB37CE0904684BC0D05EC27CFD0B4",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.262329200Z",
     "start_time": "2025-10-15T13:26:43.147751400Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\门票价格区间占比玫瑰图.html'"
     },
     "execution_count": 179,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p1 = (\n",
    "    Pie(init_opts=opts.InitOpts(\n",
    "            width='800px', height='600px',\n",
    "            )\n",
    "       )\n",
    "        .add(\n",
    "        '',\n",
    "        [list(z) for z in zip(df_price.index.tolist(), df_price.values.tolist())],\n",
    "        radius=['20%', '60%'],\n",
    "        center=['40%', '50%'],\n",
    "        rosetype='radius',\n",
    "        label_opts=opts.LabelOpts(is_show=True),\n",
    "        )    \n",
    "        .set_global_opts(title_opts=opts.TitleOpts(title='门票价格占比',pos_left='33%',pos_top=\"5%\"),\n",
    "                        legend_opts=opts.LegendOpts(type_='scroll', pos_left=\"80%\",pos_top=\"25%\",orient=\"vertical\")\n",
    "                        )\n",
    "        .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}: {c} ({d}%)'),position='outside')\n",
    "    )\n",
    "p1.render('门票价格区间占比玫瑰图.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "7BBAF122382A48D583FF9D4E598EC2EF",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 3.8 门票价格区间数量散点图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {
    "hide_input": true,
    "id": "0F746E7689CE47C482C9438E2162D618",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.263333700Z",
     "start_time": "2025-10-15T13:26:43.155949600Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\门票价格区间数量散点图.html'"
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "color_js = \"\"\"new echarts.graphic.RadialGradient(\n",
    "                    0.5, 0.5, 1,\n",
    "                    [{offset: 0,\n",
    "                      color: '#009ad6'},\n",
    "                     {offset: 1,\n",
    "                      color: '#ed1941'}\n",
    "                      ])\"\"\"\n",
    "\n",
    "s2 = (\n",
    "        Scatter()\n",
    "        .add_xaxis(df_price.index.tolist())\n",
    "        .add_yaxis('门票价格区间', df_price.values.tolist(),symbol_size=50,itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js))) \n",
    "        .set_global_opts(\n",
    "            yaxis_opts=opts.AxisOpts(name='数量'),\n",
    "            xaxis_opts=opts.AxisOpts(name='价格区间(元)'))\n",
    "        .set_global_opts(visualmap_opts=opts.VisualMapOpts(is_show=False, \n",
    "                                              # 设置通过图形大小来表现数据\n",
    "                                              type_='size',\n",
    "                                              # 图形大小映射范围\n",
    "                                              range_size=[5,50]))\n",
    ")\n",
    "s2.render('门票价格区间数量散点图.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "3AAD62F9565742E69179EDB55C53FDA2",
    "jupyter": {},
    "mdEditEnable": false,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## 3.9 景点简介词云"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {
    "hide_input": true,
    "id": "0BC6BC05107645F18AEC81A91AB0E3F1",
    "jupyter": {},
    "notebookId": "61bc8d4159c2930017fd1f14",
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.285307Z",
     "start_time": "2025-10-15T13:26:43.168474Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'D:\\\\sys\\\\lvyou\\\\景点简介词云.html'"
     },
     "execution_count": 181,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "contents = \"\".join('%s' % i for i in df['简介'].values.tolist())\n",
    "contents_list = jieba.cut(contents)\n",
    "ac = Counter(contents_list)\n",
    "\n",
    "stopwords = []\n",
    "with open('./stopwords.txt', \"r\",encoding='utf-8') as f:  # 打开文件\n",
    "    data = f.read()  # 读取文件\n",
    "    stopwords = data.split('\\n')\n",
    "\n",
    "for i in stopwords:\n",
    "    del ac[i]\n",
    " \n",
    "w1 = (\n",
    "    WordCloud()\n",
    "    .add(\"\", \n",
    "         ac.most_common(150), \n",
    "         word_size_range=[5, 100], \n",
    "         textstyle_opts=opts.TextStyleOpts(font_family=\"cursive\"),\n",
    "         shape='star')\n",
    "    .set_global_opts(title_opts=opts.TitleOpts(title=\"景点简介词云\"))\n",
    ")\n",
    "w1.render('景点简介词云.html')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9958BE467A004FA18DD0EA008B333B6C",
    "jupyter": {},
    "mdEditEnable": true,
    "notebookId": "61bc8d4159c2930017fd1f14",
    "runtime": {
     "execution_status": null,
     "status": "default"
    },
    "scrolled": false,
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "# 总结  \n",
    "* 华东、华南、华中等地区属于国民出游热点地区,尤其是北京、上海、江苏、广东、四川、陕西等地区出行比较密集。  \n",
    "* 江苏、安徽、河南、北京、湖北等地区4A、5A级景区数量比较多。  \n",
    "* 门票价格100以内居多,大概占比70%,还是比较实惠的,而且一般景区还存在学生优惠等。  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-15T13:26:43.302916100Z",
     "start_time": "2025-10-15T13:26:43.263333700Z"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {
    "height": "423px",
    "width": "322px"
   },
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": true,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "165px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}