python+json+pyecharts小结

一、Python 基础(必须先掌握)

1.1 数据类型

类型 说明 示例
str(字符串) 文本数据 "美国.txt"'{"name":"张三"}'
int(整数) 整数 131568128
float(浮点数) 小数 3.142.5
list(列表) 有序可变序列 ["北京", "上海", "广东"]
tuple(元组) 有序不可变序列 ("北京", 99)
dict(字典) 键值对集合 {"name": "湖北", "confirm": 68128}
bool(布尔) True/False is_show=True

1.2 文件操作

python

复制代码
# 打开文件
open("文件路径", "r", encoding="UTF-8")  # r=读,w=写,a=追加

# 推荐方式(自动关闭)
with open("文件.txt", "r", encoding="UTF-8") as f:
    data = f.read()

# 手动方式
f = open("文件.txt", "r", encoding="UTF-8")
data = f.read()
f.close()  # 必须手动关闭!

1.3 字符串操作

方法 说明 示例
replace() 替换字符串 "abc".replace("a", "A")"Abc"
[:-2] 切片(去掉最后2个字符) "abc"[:-2]"a"
[:315] 切片(取前315个) list[:315]
len() 获取长度 len("abc")3
f-string 格式化字符串 f"日期:{date}"

1.4 列表操作

python

复制代码
# 列表推导式(重点!)
data_list = [(p["name"], p["total"]["confirm"]) for p in children]

# 等同于:
data_list = []
for p in children:
    data_list.append((p["name"], p["total"]["confirm"]))

# 常用操作
list.append()   # 添加元素
list[:n]        # 取前n个
list[-n:]       # 取后n个
len(list)       # 获取长度
max(list)       # 最大值
min(list)       # 最小值
sum(list)       # 求和

1.5 字典操作

python

复制代码
# 获取值
data_dict["key"]          # 直接获取
data_dict.get("key")      # 安全获取(不存在返回None)

# 遍历字典
for key, value in data_dict.items():
    print(key, value)

# 嵌套字典访问
us_dict["data"][0]["trend"]["confirm"]

1.6 函数定义

python

复制代码
def 函数名(参数1, 参数2):
    # 函数体
    return 返回值

# 示例
def load_data(file_path, callback_name):
    with open(file_path, "r", encoding="UTF-8") as f:
        data = f.read()
    data = data.replace(callback_name, "")
    data = data[:-2]
    return json.loads(data)

1.7 异常处理

python

复制代码
try:
    data = json.loads(json_str)
except json.JSONDecodeError:
    print("JSON格式错误!")
except FileNotFoundError:
    print("文件不存在!")
finally:
    print("执行完毕")

二、JSON 数据处理(核心)

2.1 JSON 基础语法

JSON 类型 Python 对应 示例
对象 {} 字典 dict {"name": "张三"}
数组 [] 列表 list ["北京", "上海"]
字符串 "" 字符串 str "hello"
数字 int/float 1233.14
布尔 bool true/false
null None null

2.2 JSONP 格式处理

python

复制代码
# JSONP 格式
jsonp_1629344292311_69436({ "data": [...] });

# 处理步骤
data = data.replace("jsonp_1629344292311_69436(", "")  # 去掉开头
data = data[:-2]  # 去掉结尾的 ");"
data_dict = json.loads(data)  # 转换为字典

2.3 json 模块核心方法

方法 说明 示例
json.loads() JSON字符串 → Python对象 json.loads('{"a":1}')
json.dumps() Python对象 → JSON字符串 json.dumps({"a":1})
json.load() 从文件读取JSON json.load(f)
json.dump() 写入JSON到文件 json.dump(data, f)

2.4 数据提取模式

python

复制代码
# 模式1:折线图数据结构
data_dict["data"][0]["trend"]["date"]     # 日期列表
data_dict["data"][0]["trend"]["confirm"]  # 确诊列表

# 模式2:地图数据结构
data_dict["areaTree"][0]["children"]      # 省份列表
province["name"]                           # 省份名
province["total"]["confirm"]              # 确诊数

三、Pyecharts 基础

3.1 安装

bash

复制代码
pip install pyecharts

3.2 核心模块

模块 说明
from pyecharts.charts import * 图表类(Line, Map, Bar, Pie...)
from pyecharts import options as opts 配置选项
from pyecharts.options import * 具体配置项

3.3 通用三步曲

python

复制代码
# 第1步:创建图表对象
chart = 图表类型()

# 第2步:添加数据
chart.add_xaxis(x_data)
chart.add_yaxis("系列名", y_data)

# 第3步:生成HTML
chart.render("文件名.html")

四、Pyecharts 折线图(Line)

4.1 核心配置

python

复制代码
Line(
    init_opts=opts.InitOpts(
        width="1200px",      # 宽度
        height="600px",      # 高度
        theme="light"        # 主题
    )
)

4.2 常用方法

方法 说明
.add_xaxis() 添加x轴数据
.add_yaxis() 添加y轴数据
.set_global_opts() 设置全局配置
.set_series_opts() 设置系列配置
.render() 生成HTML文件

4.3 全局配置项

配置项 说明 示例
TitleOpts 标题 title="图表标题"
TooltipOpts 鼠标悬停提示 trigger="axis"
LegendOpts 图例 pos_top="5%"
AxisOpts 坐标轴 name="日期"
DataZoomOpts 缩放滑块 range_start=0
MarkPointOpts 标记点 type_="max"
MarkLineOpts 标记线 type_="average"

4.4 链式调用

python

复制代码
line = (
Line()
.add_xaxis(x_data)
.add_yaxis("系列1", y1_data)
.add_yaxis("系列2", y2_data)
.set_global_opts(...)
.set_series_opts(...)
)

五、Pyecharts 地图(Map)

5.1 核心方法

方法 说明
.add(名称, 数据, 地图类型) 添加地图数据
.set_global_opts() 设置全局配置

5.2 数据格式

python

复制代码
# 数据格式:[(省份名, 数值), ...]
data_list = [
    ("北京", 99),
    ("上海", 199),
    ("广东", 499)
]

5.3 视觉映射配置

python

复制代码
VisualMapOpts(
    is_show=True,           # 显示图例
    is_piecewise=True,      # 分段显示
    pieces=[                # 分段规则
        {"min": 1, "max": 99, "label": "1~99人", "color": "#CCFFFF"},
        {"min": 100, "label": "100+人", "color": "#CC3333"}
    ]
)

5.4 省份名称注意事项

python

复制代码
# pyecharts 需要完整省份名称
"湖北" ❌ → "湖北省" ✅
"北京" ❌ → "北京市" ✅
"广西" ❌ → "广西壮族自治区" ✅
"新疆" ❌ → "新疆维吾尔自治区" ✅

六、Pyecharts 其他图表

6.1 柱状图(Bar)

python

复制代码
from pyecharts.charts import Bar

bar = Bar()
bar.add_xaxis(["A", "B", "C"])
bar.add_yaxis("系列名", [10, 20, 30])
bar.render("柱状图.html")

6.2 饼图(Pie)

python

复制代码
from pyecharts.charts import Pie

pie = Pie()
pie.add("", [("A", 10), ("B", 20), ("C", 30)])
pie.render("饼图.html")

6.3 散点图(Scatter)

python

复制代码
from pyecharts.charts import Scatter

scatter = Scatter()
scatter.add_xaxis([1, 2, 3, 4, 5])
scatter.add_yaxis("系列名", [10, 25, 30, 45, 60])
scatter.render("散点图.html")

七、数据处理技巧

7.1 自定义函数(复用代码)

python

复制代码
def load_data(file_path, callback_name):
with open(file_path, "r", encoding="UTF-8") as f:
data = f.read()
data = data.replace(callback_name, "")
data = data\[:-2\]
return json.loads(data)
# 一行读取一个国家数据
us_dict = load_data("美国.txt", "jsonp_xxx(")

7.2 批量处理多个文件

python

复制代码
files = {"美国": "jsonp_xxx(", "日本": "jsonp_yyy("}
data_dicts = {}
for name, callback in files.items():
    data_dicts[name] = load_data(f"{name}.txt", callback)

7.3 数据验证

python

复制代码
# 检查数据长度
print(f"数据长度:{len(data)}")

# 查看前几条
print(data[:5])

# 检查数据类型
print(type(data))

# 检查键是否存在
if "key" in data_dict:
    print("键存在")

八、常见错误及解决方案

错误类型 原因 解决方案
FileNotFoundError 文件路径错误 检查路径和文件名
JSONDecodeError JSON格式不正确 检查是否去除JSONP包装
KeyError 字典键不存在 print(data_dict.keys()) 查看所有键
IndexError 列表索引超出范围 检查列表长度 len(list)
TypeError 类型错误 检查数据类型 type()
NameError 变量未定义 检查变量是否已赋值
图表显示 NaN 省份名称不匹配 使用完整省份名

【结合今日所学,让ai总结错误并记录下来,利于下次翻阅与复习!!!】