python+json+pyecharts小结
·
一、Python 基础(必须先掌握)
1.1 数据类型
| 类型 | 说明 | 示例 |
|---|---|---|
str(字符串) |
文本数据 | "美国.txt"、'{"name":"张三"}' |
int(整数) |
整数 | 1、315、68128 |
float(浮点数) |
小数 | 3.14、2.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 | 123、3.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总结错误并记录下来,利于下次翻阅与复习!!!】
更多推荐


所有评论(0)