pyecharts源码解读(5)数据集包datasets概述:支持模糊查找键的数据结构FuzzyDict

当前pyecharts版本为1.9.0

概述

datasets包位于pyecharts包顶级目录中,用于存放pyecharts的内置数据集,并将数据集映射到固定的三个“全局”变量中。包结构如下:

├─datasets # 数据集包
│  │  city_coordinates.json # 省市县坐标集
│  │  countries_regions_db.json # 国家地区缩写
│  │  map_filename.json # 资源文件名称、路径映射表
│  │  __init__.py # 定义字典模糊查找类,管理附加组件

city_coordinates.json

datasets包中的city_coordinates.json文件存放着国内城市地理坐标数据,数据格式为{城市名称: [经度, 纬度},例如:

{
  "阿城": [
    126.58,
    45.32
  ],
  "阿克苏": [
    80.19,
    41.09
  ],
  "阿勒泰": [
    88.12,
    47.5
  ],
  "阿图什": [
    76.08,
    39.42
  ]
  }

countries_regions_db.json

datasets包中的countries_regions_db.json文件存放着全球国家、地区的缩写信息,数据格式为{名称:缩写},例如:

{
    "蒲隆地": "BI", 
    "圣卢西亚": "LC", 
    "巴巴多斯": "BB", 
    "安道尔": "AD",
 }

map_filename.json

datasets包中的map_filename.json文件存放着pyecharts资源文件名称与路径的映射关系,数据格式为{名称:[路径,扩展名]},例如:

{
  "bulma": ["bulma.min", "css"],
  "jquery": ["jquery.min", "js"],
  "jquery-ui": ["jquery-ui.min", "js"],
  "resize-sensor": ["ResizeSensor", "js"],
  "echarts": ["echarts.min", "js"],
  "echarts-gl": ["echarts-gl.min", "js"],
  "echarts-liquidfill": ["echarts-liquidfill.min", "js"],
  "echarts-wordcloud": ["echarts-wordcloud.min", "js"],
  "bmap": ["bmap.min", "js"],
  "chalk": ["themes/chalk", "js"],
  "essos": ["themes/essos", "js"],
  "halloween": ["themes/halloween", "js"],
  "infographic": ["themes/infographic", "js"],
  "macarons": ["themes/macarons", "js"],
  "purple-passion": ["themes/purple-passion", "js"],
  "roma": ["themes/roma", "js"],
  "romantic": ["themes/romantic", "js"],
  "shine": ["themes/shine", "js"],
  "vintage": ["themes/vintage", "js"],
  "walden": ["themes/walden", "js"],
  "westeros": ["themes/westeros", "js"],
  "wonderland": ["themes/wonderland", "js"],
  "china": ["maps/china", "js"]
  }

__init__.py

datasets包中的__init__.py文件结构如下,主要包含1个类,3个变量和3个函数。

  • FuzzyDict(dict)类提供基础的数据结构支持,实现了字典键的模糊查找。疑似为pywinautofuzzydict模块中的FuzzyDict
  • FILENAMES变量为map_filename.json反序列化后的结果,数据结构采用FuzzyDict,便于模糊查找。
  • COORDINATES变量为city_coordinates.json反序列化后的结果,数据结构采用FuzzyDict,便于模糊查找。
  • EXTRA变量用于存储附加资源文件名与路径的映射关系。
  • register_url(asset_url: str)函数用于构造附加资源文件名与路径的映射关系,更新EXTRA变量。
  • register_files(asset_files: dict)函数用于更新资源文件与路径的映射关系,更新FILENAMES变量。
  • register_coords(coords: dict)函数用于更新地理坐标信息,更新COORDINATES变量。
    在这里插入图片描述

__init__.py源码

__HERE = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(__HERE, "map_filename.json"), "r", encoding="utf8") as f:
    FILENAMES: FuzzyDict = FuzzyDict()
    for k, v in json.load(f).items():
        FILENAMES[k] = v

with open(os.path.join(__HERE, "city_coordinates.json"), "r", encoding="utf8") as f:
    COORDINATES: FuzzyDict = FuzzyDict()
    for k, v in json.load(f).items():
        COORDINATES[k] = v

EXTRA = {}


def register_url(asset_url: str):
    if asset_url:
        registry = asset_url + "/registry.json"
        try:
            contents = urllib.request.urlopen(registry).read()
            contents = json.loads(contents)
        except Exception as e:
            raise e
        files = {}
        pinyin_names = set()
        for name, pinyin in contents["PINYIN_MAP"].items():
            file_name = contents["FILE_MAP"][pinyin]
            files[name] = [file_name, "js"]
            pinyin_names.add(pinyin)

        for key, file_name in contents["FILE_MAP"].items():
            if key not in pinyin_names:
                # English names
                files[key] = [file_name, "js"]

        js_folder_name = contents["JS_FOLDER"]
        if js_folder_name == "/":
            js_file_prefix = f"{asset_url}/"
        else:
            js_file_prefix = f"{asset_url}/{js_folder_name}/"
        EXTRA[js_file_prefix] = files


def register_files(asset_files: dict):
    if asset_files:
        FILENAMES.update(asset_files)


def register_coords(coords: dict):
    if coords:
        COORDINATES.update(coords)

案例:FuzzyDict(dict)类应用

注意,FuzzyDict(dict)类构造函数还有一个默认参数cutoff = 0.6,当模糊匹配评分都低于0.6时会抛出异常!

from pyecharts.datasets import FuzzyDict,FILENAMES,EXTRA,COORDINATES

a={"hello" : "World", "Hiya" : 2, "Here you are" : 3}
fd = FuzzyDict()
fd.update(a)
# 模糊查找键
print(fd['Here you'])
print(FILENAMES['哈尔'])
print(COORDINATES['哈尔'])

输出为:

3
['maps/hei1_long2_jiang1_ha1_er3_bin1', 'js']
[126.63, 45.75]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值