3. 数据加载与探索:使用 Pandas 读取多格式样本数据

在知识图谱样本偏差校验流程中,第一步是将原始样本数据加载到内存中,并进行初步的探索性分析。本章将演示如何使用 Pandas 读取 CSV、JSON 和 Excel 三种常见格式的知识图谱样本数据,并通过 shape、info、describe 等方法快速掌握数据的基本面貌。

3.1 数据加载:Pandas 读取三种格式

知识图谱样本数据通常以结构化表格形式存储,常见的字段包括实体 ID、关系类型、属性键值对等。Pandas 提供了统一的接口来读取不同格式的文件,核心函数如下表所示:

文件格式 Pandas 读取函数 常用参数 典型应用场景
CSV pd.read_csv() sep, encoding, header 大规模三元组、实体属性表
JSON pd.read_json() orient, lines API 导出的嵌套结构、事件图谱
Excel pd.read_excel() sheet_name, engine 人工标注样本、业务方提供的汇总表
实战要点: 读取 CSV 时务必指定 encoding='utf-8' 或 encoding='gbk' 避免乱码;JSON 文件若为每行一个 JSON 对象(JSON Lines 格式),需设置 lines=True;Excel 文件建议指定 engine='openpyxl' 以支持 .xlsx 格式。
import pandas as pd

# 1. 读取 CSV 格式的知识图谱样本
df_csv = pd.read_csv('kg_sample_data.csv', encoding='utf-8')
print("CSV 数据加载完成")

# 2. 读取 JSON 格式(嵌套结构)
df_json = pd.read_json('kg_sample_data.json', orient='records')
print("JSON 数据加载完成")

# 3. 读取 Excel 格式(指定工作表)
df_excel = pd.read_excel('kg_sample_data.xlsx', sheet_name='Sheet1', engine='openpyxl')
print("Excel 数据加载完成")

3.2 数据基本信息查看

加载数据后,需要立即通过三个核心方法了解数据的整体轮廓:

  • shape:返回 (行数, 列数),快速判断样本量级和特征维度。
  • info():显示每列的非空计数、数据类型和内存占用,用于发现缺失值和类型异常。
  • describe():对数值型列生成统计摘要(均值、标准差、分位数等),对类别型列可配合 include='object' 查看频次信息。
# 查看数据形状
print("数据形状 (行, 列):", df_csv.shape)

# 查看数据基本信息
print("\n数据信息 (info):")
df_csv.info()

# 查看数值列统计摘要
print("\n数值列描述性统计 (describe):")
print(df_csv.describe())

# 查看类别型列统计摘要
print("\n类别列描述性统计:")
print(df_csv.describe(include=['object']))
校验提示: 在知识图谱样本中,info() 输出的非空计数若与总行数不一致,说明该列存在缺失值,这可能是样本偏差的来源之一(例如关系类型字段缺失导致样本代表性下降)。

3.3 数据加载与探索流程

下图展示了从原始文件到初步探索的完整数据流,帮助理解每一步的输入输出关系:

数据加载与探索流程 CSV 文件 JSON 文件 Excel 文件 Pandas DataFrame shape info() describe() 行数 × 列数 列类型 / 缺失值 统计摘要

3.4 实战案例:加载知识图谱三元组样本

假设我们有一个包含实体关系三元组的 CSV 样本文件 triples_sample.csv,字段包括 head_entity、relation、tail_entity 和 confidence。以下代码演示了完整的加载与探索过程:

# 加载三元组样本
df = pd.read_csv('triples_sample.csv', encoding='utf-8')

# 1. 查看形状
print(f"样本总数: {df.shape[0]} 条三元组")
print(f"字段数量: {df.shape[1]} 列")

# 2. 查看字段信息
print("\n字段信息:")
df.info()

# 3. 查看数值列统计(confidence 字段)
print("\n置信度统计:")
print(df['confidence'].describe())

# 4. 查看类别列分布(relation 字段)
print("\n关系类型分布:")
print(df['relation'].value_counts())
常见偏差信号: 如果 value_counts() 显示某个关系类型的样本占比超过 80%,说明样本分布极度不均衡,后续校验需要重点关注该类型是否过度代表或缺失代表。

3.5 探索结果解读与偏差预判

通过上述探索,我们可以初步判断样本数据是否存在以下偏差风险:

  • 缺失偏差:info() 中非空计数小于总行数的字段,可能因数据采集遗漏导致样本不完整。
  • 分布偏差:describe() 中数值字段的标准差过大或 value_counts() 中类别分布严重倾斜,提示样本可能偏离真实分布。
  • 类型偏差:info() 显示的字段类型若与预期不符(如数值列被识别为 object),说明数据清洗环节可能存在错误。