星巴克门店信息数据分析、数据清洗与可视化
一、星巴克门店信息数据分析
1.1.概述
本练习的目标是对星巴克门店的全球分布数据进行分析、清洗和可视化。我们将使用 pyecharts 库绘制地图,并通过数据分析和清洗确保数据的准确性和完整性。以下是步骤和方法的详细说明。

1.2.步骤
⑴.数据收集
- 从 CSV 文件中读取星巴克门店的数据。
⑵.数据清洗
- 检查数据的完整性和准确性。
- 处理缺失值和异常值。
- 转换数据格式,确保数据的一致性。
⑶.数据分析
- 汇总和统计门店数量。
- 计算各国门店的分布情况。
⑷.数据可视化
- 使用 pyecharts 创建全球地图。
- 将清洗后的数据添加到地图上,展示星巴克门店的全球分布情况
二、可视化
2.1.星巴克全球分布图
⑴.普通地图
from pyecharts import options as opts from pyecharts.charts import Map import pandas as pd # 国家代码到国家名称的映射字典,用于将国家的简写代码转换为完整名称 country_mapping = { 'US': 'United States', # 美国 'CN': 'China', # 中国 'CA': 'Canada', # 加拿大 'JP': 'Japan', # 日本 'KR': 'South Korea', # 韩国 'GB': 'United Kingdom', # 英国 'MX': 'Mexico', # 墨西哥 'TW': 'Taiwan', # 台湾 'TR': 'Turkey', # 土耳其 'PH': 'Philippines', # 菲律宾 'TH': 'Thailand', # 泰国 'ID': 'Indonesia', # 印度尼西亚 'MY': 'Malaysia', # 马来西亚 'DE': 'Germany', # 德国 'AE': 'United Arab Emirates', # 阿联酋 'FR': 'France', # 法国 'SG': 'Singapore', # 新加坡 'RU': 'Russia', # 俄罗斯 'AR': 'Argentina', # 阿根廷 'KW': 'Kuwait', # 科威特 'BR': 'Brazil', # 巴西 'SA': 'Saudi Arabia', # 沙特阿拉伯 'ES': 'Spain', # 西班牙 'CL': 'Chile', # 智利 'PE': 'Peru', # 秘鲁 'IN': 'India', # 印度 'IE': 'Ireland', # 爱尔兰 'CH': 'Switzerland', # 瑞士 'NL': 'Netherlands', # 荷兰 'PL': 'Poland', # 波兰 'EG': 'Egypt', # 埃及 'LB': 'Lebanon', # 黎巴嫩 'CZ': 'Czech Republic', # 捷克共和国 'GR': 'Greece', # 希腊 'RO': 'Romania', # 罗马尼亚 'VN': 'Vietnam', # 越南 'NZ': 'New Zealand', # 新西兰 'PR': 'Puerto Rico', # 波多黎各 'AU': 'Australia', # 澳大利亚 'BH': 'Bahrain', # 巴林 'DK': 'Denmark', # 丹麦 'BE': 'Belgium', # 比利时 'AT': 'Austria', # 奥地利 'SE': 'Sweden', # 瑞典 'QA': 'Qatar', # 卡塔尔 'NO': 'Norway', # 挪威 'JO': 'Jordan', # 约旦 'HU': 'Hungary', # 匈牙利 'OM': 'Oman', # 阿曼 'SV': 'El Salvador', # 萨尔瓦多 'PT': 'Portugal', # 葡萄牙 'CO': 'Colombia', # 哥伦比亚 'CR': 'Costa Rica', # 哥斯达黎加 'BS': 'Bahamas', # 巴哈马 'CY': 'Cyprus', # 塞浦路斯 'MA': 'Morocco', # 摩洛哥 'FI': 'Finland', # 芬兰 'KZ': 'Kazakhstan', # 哈萨克斯坦 'GT': 'Guatemala', # 危地马拉 'PA': 'Panama', # 巴拿马 'BN': 'Brunei', # 文莱 'BG': 'Bulgaria', # 保加利亚 'KH': 'Cambodia', # 柬埔寨 'BO': 'Bolivia', # 玻利维亚 'AZ': 'Azerbaijan', # 阿塞拜疆 'TT': 'Trinidad and Tobago', # 特立尼达和多巴哥 'ZA': 'South Africa', # 南非 'SK': 'Slovakia', # 斯洛伐克 'CW': 'Curacao', # 库拉索 'AW': 'Aruba', # 阿鲁巴 'MC': 'Monaco', # 摩纳哥 'LU': 'Luxembourg', # 卢森堡 'AD': 'Andorra' # 安道尔 } # 读取 CSV 文件中的数据,文件路径为 'directory.csv' df = pd.read_csv('directory.csv') # 将 CSV 文件中的国家简写和对应的数量转化为字典形式,并转换为列表的元组形式 # `value_counts()` 方法统计每个国家的出现次数 # `to_dict()` 方法将结果转化为字典,`items()` 方法将字典转化为列表的元组形式 data = list(df.Country.value_counts().to_dict().items()) # 使用映射字典将国家简写转换为完整的国家名称 # `country_mapping.get(code, code)`:如果在映射字典中找到国家代码,则替换为对应的国家名称,否则保留原代码 converted_data = [(country_mapping.get(code, code), value) for code, value in data] # 创建地图实例 map = Map() # 设置地图的全局配置项 map.set_global_opts( title_opts=opts.TitleOpts( title="Starbucks 门店全球分布图", # 设置地图标题 pos_left="center" # 设置标题的位置为居中 ), visualmap_opts=opts.VisualMapOpts( max_=14000 # 设置视觉映射的最大值,这里是根据数据的最大值设置的 ) ) # 添加数据到地图 map.add( "", converted_data, # 数据源,包含国家名称和对应的数值 maptype="world", # 使用世界地图 is_roam=False, # 禁用地图拖拽功能 is_map_symbol_show=False, # 禁用地图符号的显示 label_opts=opts.LabelOpts(is_show=False) # 禁用地图标签的显示 ) # 渲染地图并生成 HTML 文件,文件名为 "Starbucks 门店全球分布图.html" map.render("星巴克门店全球分布图.html")

⑵.各国/地区星巴克门店数量(可点击下钻到城市)
# 导入所需的库 import pandas as pd from pyecharts.charts import TreeMap import pyecharts.options as opts # 读取 CSV 文件中的数据,文件路径为 'directory.csv' df = pd.read_csv('directory.csv') # 填充缺失值 # 使用 fillna() 方法为缺失值填充默认值。这里为 'Country' 和 'City' 两列缺失的值填充 'NA' df_t = df.fillna(value=dict(Country='NA', City='NA')) # 按国家和城市分组,统计每个分组的数量 # groupby(['Country', 'City']) 按 'Country' 和 'City' 两列分组 # size() 计算每个分组的数量 # reset_index() 将分组后的结果转换为 DataFrame 并为新生成的列('Count')重新设置索引 df_t = df_t.groupby(['Country', 'City']).size().reset_index(name='Count') print(df_t) # 将数据转换为适合 TreeMap 的层次结构格式 tree_data = [] for country, group in df_t.groupby('Country'): children = [] for _, row in group.iterrows(): # 将每个城市的数据作为子节点(children)存储 children.append({"name": row['City'], "value": row['Count']}) # 将国家和其对应的城市列表添加到 tree_data 中 tree_data.append({"name": country, "children": children}) # 创建 TreeMap 图表对象 treemap = TreeMap() # 向 TreeMap 对象中添加数据并设置相关选项 treemap.add('星巴克门店', tree_data, # 添加数据,tree_data 是转换后的层次结构数据 leaf_depth=1, # 设定叶子节点的深度为 1,即只显示国家和城市两层 label_opts=opts.LabelOpts( # 标签设置选项 position="inside", # 标签位置设置为节点内部 formatter='{b}:{c}门店' # 标签的格式设置为 '城市名称:门店数量' ), levels=[ # 针对不同层级设置样式 opts.TreeMapLevelsOpts( # 第一层级(国家)的样式设置 treemap_itemstyle_opts=opts.TreeMapItemStyleOpts( border_color="#555", # 边框颜色设置为 #555 border_width=4, # 边框宽度设置为 4 像素 gap_width=4 # 节点间的间隔宽度设置为 4 像素 ) ), opts.TreeMapLevelsOpts( # 第二层级(城市)的样式设置 color_saturation=[0.3, 0.6], # 颜色饱和度范围设置为 [0.3, 0.6] treemap_itemstyle_opts=opts.TreeMapItemStyleOpts( border_color_saturation=0.7, # 边框颜色饱和度设置为 0.7 gap_width=2, # 节点间的间隔宽度设置为 2 像素 border_width=2 # 边框宽度设置为 2 像素 ) ) ]) # 设置标题和其他全局选项 treemap.set_global_opts( title_opts=opts.TitleOpts( # 标题选项 title="星巴克门店全球分布 TreeMap 图", # 设置标题文字 pos_left="center" # 标题位置设置为居中 ), legend_opts=opts.LegendOpts(is_show=False) # 图例选项,is_show=False 表示不显示图例 ) # 渲染图表并保存为 HTML 文件 treemap.render("treemap_starbucks_distribution.html") # 将图表渲染并保存为名为 'treemap_starbucks_distribution.html' 的 HTML 文件

2.2.门店数量前15的城市
# 导入所需的库 import pandas as pd from pyecharts.charts import Bar import pyecharts.options as opts # 读取 CSV 文件中的数据,文件路径为 'directory.csv' df = pd.read_csv('directory.csv') # 获取每个城市的门店数量并按降序排列,取出前15名 # df.City.value_counts() 计算每个城市出现的次数,即每个城市的门店数量 # to_dict() 将结果转换为字典形式 # items() 返回字典的键值对,例如:dict_items([('上海市', 542), ('Seoul', 243), ('北京市', 234)] # list(...)[0:15] 获取前15个城市及其对应的门店数量 b = list(df.City.value_counts().to_dict().items())[0:15] print(b) # 打印前15个城市及其门店数量 # 将获取的前15个城市及其门店数量转换为字典形式 data = dict(b) print(data) # 打印转换后的字典 # 获取城市名称列表,用于X轴 print(list(data.keys())) # 打印前15个城市的名称 # 创建 Bar(柱状图)对象 bar = Bar() # 设置全局选项,如标题、轴配置、视觉映射等 bar.set_global_opts( title_opts=opts.TitleOpts( title='门店数量在前15的城市', # 设置图表标题 pos_left="center" # 标题位置设置为居中 ), xaxis_opts=opts.AxisOpts( position='top' # 将X轴位置设置为顶部 ), yaxis_opts=opts.AxisOpts( is_inverse=True # Y轴反转,最小值在顶部 ), visualmap_opts=opts.VisualMapOpts( is_show=False, # 视觉映射组件不显示 dimension=0, # 设置影响哪个维度(0表示X轴,1表示Y轴) max_=300, # 设定最大值为300(用于颜色映射) range_color=['#FFE7D3', '#7A0616'] # 颜色范围,从浅色到深色 ) ) # 添加X轴数据(城市名称)和Y轴数据(门店数量) bar.add_xaxis(list(data.keys())) # X轴数据:前15个城市的名称 bar.add_yaxis('', list(data.values()), # Y轴数据:前15个城市的门店数量 label_opts=opts.LabelOpts(position='right') # 标签设置,标签显示在条形图的右侧 ) # 将X轴和Y轴互换位置,生成水平条形图 bar.reversal_axis() # 渲染图表并保存为HTML文件 bar.render('Top_15_cities_by_number_Starbucks_stores.html') # 将图表渲染并保存为HTML文件

2.3.门店所有权占比
星巴克门店类型有 :
Company Owned:公司所有
Joint Venture:合资
Licensed:授权许可
Franchise:加盟店
# 导入所需的库 import pandas as pd from pyecharts.charts import Pie import pyecharts.options as opts # 读取 CSV 文件中的数据,文件路径为 'directory.csv' df = pd.read_csv('directory.csv') # 统计每种所有权类型的门店数量,并将结果转换为字典项列表 # df['Ownership Type'].value_counts() 计算每种所有权类型的数量 # to_dict() 将结果转换为字典形式 # items() 返回字典的键值对 # list(...) 将结果转换为列表形式 data = list(df['Ownership Type'].value_counts().to_dict().items()) print(data) # 打印所有权类型及其对应的数量 # 创建 Pie(饼图)对象 p = Pie() # 设置全局选项,如标题 p.set_global_opts( title_opts=opts.TitleOpts( title='门店所有权占比' # 设置图表标题 ) ) # 向 Pie 图表对象中添加数据并设置相关选项 p.add( '', # 图例名称,这里为空字符串表示没有图例名称 data, # 数据源,包含所有权类型及其数量 rosetype='area', # 饼图的玫瑰图类型,'area' 表示按照区域大小绘制图形 label_opts=opts.LabelOpts( formatter='{b}:{d}%' # 标签格式设置为 '类别名称:占比百分比' ), radius=['10%', '45%'] # 设置饼图的半径范围,第一个值是内半径,第二个值是外半径 ) # 渲染图表并保存为 HTML 文件 p.render('starbucks_store_ownership_percentage.html') # 将图表渲染并保存为名为 'starbucks_store_ownership_percentage.html' 的 HTML 文件

2.4.星巴克在中国的分布
⑴.根据经纬度绘制热力地图
# 导入所需的库 import pandas as pd from pyecharts.charts import Geo import pyecharts.options as opts # 读取 CSV 文件中的数据,文件路径为 'directory.csv' df = pd.read_csv('directory.csv') # 过滤出中国的数据 df_china = df[df['Country'] == 'CN'] # 按经纬度分组,统计每个经纬度的门店数量 a = df_china.groupby(['Longitude', 'Latitude']).size() print(a) print(list(a.to_dict().items())) # 将数据转换为适合 Geo 图表的格式 jwd, data = [], [] for (longitude, latitude), count in a.to_dict().items(): # jwd 列表存储了每个点的名称及其经纬度 jwd.append((f"{longitude}-{latitude}", longitude, latitude)) # data 列表存储了每个点的名称及其对应的数量 data.append((f"{longitude}-{latitude}", count)) # 创建 Geo(地理图)对象 geo = Geo() # 添加每个门店的经纬度坐标 for name, longitude, latitude in jwd: geo.add_coordinate(name, longitude, latitude) # 设置地图样式 geo.add_schema(maptype='china', is_roam=False) # 添加数据,并设置为热力图类型 geo.add( '', # 系列名称,这里为空字符串 data, # 数据源 type_='heatmap', # 设置为热力图 is_large=True, # 启用大规模模式,适用于大量数据点 blur_size=10, # 模糊大小 point_size=2 # 点大小 ) # 设置全局选项,包括视觉映射选项 geo.set_global_opts( visualmap_opts=opts.VisualMapOpts( is_show=True, # 显示视觉映射 max_=max([count for name, count in data]), # 设置数据的最大值,以便正确映射颜色 min_=1, # 设置数据的最小值 range_color=["blue", "green", "yellow", "red"], # 颜色范围 ), title_opts=opts.TitleOpts( title="中国星巴克门店分布热力图", # 设置标题 pos_left="center" # 标题位置 ) ) # 渲染图表并保存为 HTML 文件 geo.render("heatmap_distribution_starbucks_stores_china.html")

⑵.国内星巴克门店最多的20个城市
# 导入所需的库 import pandas as pd # 用于数据处理 from pyecharts.charts import Bar # 用于绘制条形图 import pyecharts.options as opts # 用于设置图表的各种配置项 # 读取 CSV 文件中的数据,文件路径为 'directory.csv' df = pd.read_csv('directory.csv') # 过滤出中国的城市数据,并统计每个城市的星巴克门店数量,取出门店数量最多的前20个城市 # df[df['Country'] == 'CN'] 筛选出国家为中国的数据 # ['City'].value_counts() 按城市统计门店数量 # .to_dict().items() 将统计结果转为字典并转为列表 data = list(df[df['Country'] == 'CN']['City'].value_counts().to_dict().items())[0:20] print(data) # 打印出统计结果,查看前20个城市及其门店数量 # 创建一个 Bar 对象,用于生成条形图 bar = Bar() # 设置全局选项,包括标题、坐标轴和视觉映射 bar.set_global_opts( title_opts=opts.TitleOpts( title="国内星巴克门店最多的20个城市", # 设置图表标题 pos_left="center" # 将标题位置设置在图表的中央 ), xaxis_opts=opts.AxisOpts( position="top" # 将 X 轴的位置设置在图表的顶部 ), yaxis_opts=opts.AxisOpts( is_inverse=True # 将 Y 轴反转,即从上到下显示城市名称 ), visualmap_opts=opts.VisualMapOpts( is_show=False, # 不显示视觉映射组件(因为这里只显示单一颜色) dimension=0, # 选择应用视觉映射的维度,这里是 X 轴 max_=300 # 设置视觉映射的最大值,用于规范颜色映射范围 ) ) # 添加 X 轴数据(城市名称)和 Y 轴数据(门店数量) bar.add_xaxis(list(dict(data).keys())) # 将城市名称作为 X 轴标签 bar.add_yaxis( "", # 系列名称,这里为空字符串 list(dict(data).values()), # 将门店数量作为 Y 轴数据 label_opts=opts.LabelOpts(position='right') # 设置标签显示在条形图的右侧 ) # 反转轴,使得条形图横向显示 bar.reversal_axis() # 渲染图表并保存为 HTML 文件 bar.render("The_20_cities_with_most_starbucks_stores_china.html") # 将图表渲染为 HTML 文件,并保存

三、Page组件拖拽实现可视化看板
完整的代码如下:
from pyecharts import options as opts from pyecharts.charts import Map, TreeMap, Bar, Pie, Geo, Page import pandas as pd from pyecharts.components import Table # 国家代码到国家名称的映射字典,用于将国家的简写代码转换为完整名称 country_mapping = { 'US': 'United States', # 美国 'CN': 'China', # 中国 'CA': 'Canada', # 加拿大 'JP': 'Japan', # 日本 'KR': 'South Korea', # 韩国 'GB': 'United Kingdom', # 英国 'MX': 'Mexico', # 墨西哥 'TW': 'Taiwan', # 台湾 'TR': 'Turkey', # 土耳其 'PH': 'Philippines', # 菲律宾 'TH': 'Thailand', # 泰国 'ID': 'Indonesia', # 印度尼西亚 'MY': 'Malaysia', # 马来西亚 'DE': 'Germany', # 德国 'AE': 'United Arab Emirates', # 阿联酋 'FR': 'France', # 法国 'SG': 'Singapore', # 新加坡 'RU': 'Russia', # 俄罗斯 'AR': 'Argentina', # 阿根廷 'KW': 'Kuwait', # 科威特 'BR': 'Brazil', # 巴西 'SA': 'Saudi Arabia', # 沙特阿拉伯 'ES': 'Spain', # 西班牙 'CL': 'Chile', # 智利 'PE': 'Peru', # 秘鲁 'IN': 'India', # 印度 'IE': 'Ireland', # 爱尔兰 'CH': 'Switzerland', # 瑞士 'NL': 'Netherlands', # 荷兰 'PL': 'Poland', # 波兰 'EG': 'Egypt', # 埃及 'LB': 'Lebanon', # 黎巴嫩 'CZ': 'Czech Republic', # 捷克共和国 'GR': 'Greece', # 希腊 'RO': 'Romania', # 罗马尼亚 'VN': 'Vietnam', # 越南 'NZ': 'New Zealand', # 新西兰 'PR': 'Puerto Rico', # 波多黎各 'AU': 'Australia', # 澳大利亚 'BH': 'Bahrain', # 巴林 'DK': 'Denmark', # 丹麦 'BE': 'Belgium', # 比利时 'AT': 'Austria', # 奥地利 'SE': 'Sweden', # 瑞典 'QA': 'Qatar', # 卡塔尔 'NO': 'Norway', # 挪威 'JO': 'Jordan', # 约旦 'HU': 'Hungary', # 匈牙利 'OM': 'Oman', # 阿曼 'SV': 'El Salvador', # 萨尔瓦多 'PT': 'Portugal', # 葡萄牙 'CO': 'Colombia', # 哥伦比亚 'CR': 'Costa Rica', # 哥斯达黎加 'BS': 'Bahamas', # 巴哈马 'CY': 'Cyprus', # 塞浦路斯 'MA': 'Morocco', # 摩洛哥 'FI': 'Finland', # 芬兰 'KZ': 'Kazakhstan', # 哈萨克斯坦 'GT': 'Guatemala', # 危地马拉 'PA': 'Panama', # 巴拿马 'BN': 'Brunei', # 文莱 'BG': 'Bulgaria', # 保加利亚 'KH': 'Cambodia', # 柬埔寨 'BO': 'Bolivia', # 玻利维亚 'AZ': 'Azerbaijan', # 阿塞拜疆 'TT': 'Trinidad and Tobago', # 特立尼达和多巴哥 'ZA': 'South Africa', # 南非 'SK': 'Slovakia', # 斯洛伐克 'CW': 'Curacao', # 库拉索 'AW': 'Aruba', # 阿鲁巴 'MC': 'Monaco', # 摩纳哥 'LU': 'Luxembourg', # 卢森堡 'AD': 'Andorra' # 安道尔 } # 读取 CSV 文件中的数据 df = pd.read_csv('directory.csv') def starbucks_stores_worldwide(): """ 星巴克门店全球分布图 :return: """ # 处理地图图表 data = list(df.Country.value_counts().to_dict().items()) converted_data = [(country_mapping.get(code, code), value) for code, value in data] map_chart = Map() map_chart.set_global_opts( title_opts=opts.TitleOpts(title="星巴克门店全球分布图", pos_left="center"), visualmap_opts=opts.VisualMapOpts(max_=14000) ) map_chart.add("", converted_data, maptype="world", is_roam=False, is_map_symbol_show=False, label_opts=opts.LabelOpts(is_show=False)) return map_chart def TreeMap_starbucks_stores_worldwide(): """ TreeMap图表 :return: """ # 处理 TreeMap 图表 df_t = df.fillna(value=dict(Country='NA', City='NA')) df_t = df_t.groupby(['Country', 'City']).size().reset_index(name='Count') tree_data = [] for country, group in df_t.groupby('Country'): children = [{"name": row['City'], "value": row['Count']} for _, row in group.iterrows()] tree_data.append({"name": country, "children": children}) treemap_chart = TreeMap() treemap_chart.add('星巴克门店', tree_data, leaf_depth=1, label_opts=opts.LabelOpts(position="inside", formatter='{b}:{c}门店'), levels=[ opts.TreeMapLevelsOpts( treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(border_color="#555", border_width=4, gap_width=4)), opts.TreeMapLevelsOpts(color_saturation=[0.3, 0.6], treemap_itemstyle_opts=opts.TreeMapItemStyleOpts( border_color_saturation=0.7, gap_width=2, border_width=2)) ]) treemap_chart.set_global_opts( title_opts=opts.TitleOpts(title="星巴克门店全球分布 TreeMap 图", pos_left="center"), legend_opts=opts.LegendOpts(is_show=False) ) return treemap_chart def cities_top_15_stores(): # 处理 Bar 图表 top_cities = list(df.City.value_counts().to_dict().items())[0:15] bar_chart = Bar() bar_chart.set_global_opts( title_opts=opts.TitleOpts(title='门店数量在前15的城市', pos_left="center"), xaxis_opts=opts.AxisOpts(position='top'), yaxis_opts=opts.AxisOpts(is_inverse=True), visualmap_opts=opts.VisualMapOpts(is_show=False, dimension=0, max_=300, range_color=['#FFE7D3', '#7A0616']) ) bar_chart.add_xaxis(list(dict(top_cities).keys())) bar_chart.add_yaxis('', list(dict(top_cities).values()), label_opts=opts.LabelOpts(position='right')) bar_chart.reversal_axis() return bar_chart def percentage_store_ownership(): # 处理 Pie 图表 ownership_data = list(df['Ownership Type'].value_counts().to_dict().items()) pie_chart = Pie() pie_chart.set_global_opts( title_opts=opts.TitleOpts(title='门店所有权占比') ) pie_chart.add( '', ownership_data, rosetype='area', label_opts=opts.LabelOpts(formatter='{b}:{d}%'), radius=['10%', '45%'] ) return pie_chart def starbucks_stores_china(): # 处理 Geo 图表 df_china = df[df['Country'] == 'CN'] geo_data = df_china.groupby(['Longitude', 'Latitude']).size() jwd, geo_data_list = [], [] for (longitude, latitude), count in geo_data.to_dict().items(): jwd.append((f"{longitude}-{latitude}", longitude, latitude)) geo_data_list.append((f"{longitude}-{latitude}", count)) geo_chart = Geo() for name, longitude, latitude in jwd: geo_chart.add_coordinate(name, longitude, latitude) geo_chart.add_schema(maptype='china', is_roam=False) geo_chart.add('', geo_data_list, type_='heatmap', is_large=True, blur_size=10, point_size=2) geo_chart.set_global_opts( visualmap_opts=opts.VisualMapOpts(is_show=True, max_=max([count for name, count in geo_data_list]), min_=1, range_color=["blue", "green", "yellow", "red"]), title_opts=opts.TitleOpts(title="中国星巴克门店分布热力图", pos_left="center") ) return geo_chart def make_title(v_title): table = Table() table.add(headers=[v_title], rows=[], attributes={ "align": "center", "padding": "2px", "style": "background:#f5f5f5; width:100%; height:80px; font-size:60px; color:#333333; border:none;" }) table.render("大标题.html") return table # 使用 Page 合并图表 page = Page(layout=Page.DraggablePageLayout) page.add( make_title("星巴克门店分布量化分布可视化"), # 标题 starbucks_stores_worldwide(), # 图标 TreeMap_starbucks_stores_worldwide(), cities_top_15_stores(), percentage_store_ownership(), starbucks_stores_china()) # 渲染到 HTML 文件 page.render('starbucks_dashboard.html')
拖拽调整央视布局,保存配置文件

导出配置文件 ,生成可视化报表:
from pyecharts.charts import Page Page.save_resize_html( source="starbucks_dashboard.html", cfg_file="chart_config_0809.json", dest="starbucks_dashboard_new.html" )


浙公网安备 33010602011771号