国家统计局数据读取——数据读取——清洗数据06
我们在第一篇就讲过国家统计局数据的爬取了,接下来就是清洗数据和数据分析。
国家统计局数据分析01——机器学习-CSDN博客
一、导入需要的库
import json #用于处理JSON格式的数据,通常用于读取和写入JSON文件
import pandas as pd #Pandas是Python中最主要的数据处理和分析库,提供DataFrame数据结构,类似于Excel表格,用于处理结构化数据
import numpy as np #NumPy是Python科学计算的基础包,提供高性能的多维数组对象和数学函数
import matplotlib.pyplot as plt#Matplotlib是Python的主要绘图库,pyplot模块提供类似MATLAB的绘图接口
import matplotlib.font_manager as fm#Matplotlib的字体管理模块
from datetime import datetime#从datetime模块导入datetime类,用于处理日期和时间数据
import matplotlib #导入完整的matplotlib库,用于更高级的图表配置# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
二、读取数据
# 步骤1: 读取JSON数据文件
def read_json_data(file_path):"""读取JSON格式的数据文件参数:file_path (str): JSON文件的路径返回:dict/list: 解析后的JSON数据,如果读取失败则返回None功能说明:这个函数使用Python的json模块来读取和解析JSON文件。它采用了异常处理机制来确保在文件不存在、权限不足或JSON格式错误时程序不会崩溃。使用UTF-8编码确保能正确处理中文字符。"""try:# 使用with语句打开文件,确保文件在使用后正确关闭# 'r'表示读取模式,encoding='UTF-8'确保正确处理中文字符with open(file_path, 'r', encoding='UTF-8') as file:# 使用json.load()方法解析JSON文件内容data = json.load(file)# 打印成功消息print("数据读取成功!")# 返回解析后的数据return dataexcept Exception as e:# 捕获并处理所有可能的异常# 使用f-string格式化错误消息,包含具体的异常信息print(f"读取数据时出错: {e}")# 返回None表示读取失败return None
1. 异常处理 (Exception Handling)
try:# 可能出错的代码
except Exception as e:# 错误处理
- 作用:防止程序因意外错误而崩溃
- 最佳实践:使用具体的异常类型(如
FileNotFoundError
,JSONDecodeError
)而不是通用的Exception
2. 上下文管理器 (Context Manager)
with open(file_path, 'r', encoding='UTF-8') as file:# 文件操作
- 作用:自动管理资源(文件)的打开和关闭
- 优势:即使发生异常,文件也会正确关闭,避免资源泄漏
3. 文件编码处理
encoding='UTF-8'
- 重要性:确保正确处理中文字符和其他非ASCII字符
- 避免问题:防止出现乱码或编码错误
4. JSON解析
json.load(file)
- 功能:将JSON字符串转换为Python对象(dict/list)
- 相关方法:
json.loads()
用于解析字符串,json.load()
用于解析文件
5. 文档字符串 (Docstring)
"""
参数:
file_path (str): JSON文件的路径返回:
dict/list: 解析后的JSON数据
"""
- 作用:提供函数说明、参数说明、返回值说明
- 标准格式:遵循PEP 257规范
6. 类型提示 (Type Hints)
def read_json_data(file_path: str) -> Union[dict, list, None]:
- 作用:明确函数参数和返回值的类型
- 优势:提高代码可读性,便于静态类型检查
7. 错误信息处理
print(f"读取数据时出错: {e}")
- f-string:Python 3.6+的字符串格式化方法
- 重要性:提供详细的错误信息,便于调试
8. 返回值设计
return None # 表示读取失败
- 设计思想:使用
None
作为失败时的返回值 - 替代方案:可以抛出异常让调用者处理
9. 函数单一职责原则
- 该函数只负责读取JSON文件,不包含其他逻辑
- 符合"一个函数只做一件事"的原则
三、数据清洗
# 步骤2: 提取并清洗数据
def extract_and_clean_data(json_data):"""从JSON数据中提取并清洗价格数据"""# 获取第一个表格(价格数据)price_table = json_data['tables'][0]['data']# 创建DataFramedf = pd.DataFrame(price_table[1:], columns=price_table[0])# 移除分类标题行和注释行df = df[~df['产品名称'].str.contains('一、|二、|三、|四、|五、|六、|七、|八、|九、|注:', na=False)]# 重置索引df = df.reset_index(drop=True)#