当前位置: 首页 > news >正文

人工智能训练师三级实操题第一部分数据处理

数据处理全流程:从采集到可视化与保存

在数据分析与挖掘的工作中,数据处理是至关重要的环节,它直接影响后续分析结果的准确性和可靠性。本文将详细介绍数据处理的完整流程,包括数据采集与加载、清洗与预处理、标准化、分组统计、可视化以及保存,并结合 Python 代码实例展示各环节的具体操作。

一、数据采集与加载

数据采集是数据处理的第一步,我们通常会从各种数据源获取数据,其中 CSV 文件是一种常见的格式。Python 的pandas库提供了便捷的函数来加载 CSV 文件。

代码实例:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 生成模拟数据(实际场景中可替换为真实CSV文件路径)
data = {'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],'Age': [25, 30, None, 45, 50, 35, 60, 22, 70, 33, 150, 28],  # 包含缺失值和异常值'Income': [50000, 60000, 75000, None, 90000, 85000, 120000, 45000, 110000, 70000, 80000, 55000],  # 包含缺失值'Score': [85.5, 90.0, 78.5, 92.0, 88.0, 76.0, 89.5, 91.0, 82.0, 87.0, 95.0, 80.5],'Category': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# 保存为CSV/Excel文件,模拟实际数据加载场景
df.to_csv('original_data.csv', index=False)
df.to_excel('example.xlsx', index=False)# 从CSV/Excel文件加载数据
df = pd.read_csv('original_data.csv')
excel_data = pd.read_excel('example.xlsx')# 查看数据前5行
print("数据前5行:")
print(df.head())

运行结果:

数据前5行:ID   Age   Income  Score Category
0   1  25.0  50000.0   85.5        A
1   2  30.0  60000.0   90.0        B
2   3   NaN  75000.0   78.5        A
3   4  45.0      NaN   92.0        B
4   5  50.0  90000.0   88.0        A

二、数据清洗与预处理

原始数据往往存在缺失值、数据类型错误、异常值等问题,需要进行清洗和预处理,为后续分析做准备。

代码实例:

# 1. 处理缺失值
# 查看缺失值情况
print("\n缺失值情况:")
print(df.isnull().sum())# 对数值型列(Age、Income)使用均值填充缺失值
df['Age'] = df['Age'].fillna(df['Age'].mean())
df['Income'] = df['Income'].fillna(df['Income'].mean())# 检查缺失值数量
missing_values = df.isna().sum()
print("缺失值统计:")
print(missing_values)# 前向填充缺失值
df['Age'].ffill(inplace=True)# 后向填充缺失值
df['Score'].bfill(inplace=True)# 检查重复值
duplicates = df.duplicated().sum()
print(f"\n重复值数量:{duplicates}")# 删除重复值
df.drop_duplicates(inplace=True)
print(f"删除重复值后的数据形状:{df.shape}")# 2. 数据类型转换
# 将ID列转换为字符串类型
df['ID'] = df['ID'].astype(str)
print("\n转换后的数据类型:")
print(df.dtypes)# 3. 过滤异常值(以Age为例,合理年龄范围假设为18-90岁)
# 使用between()方法过滤
normal_age = df['Age'].between(18, 90)
# 结合布尔索引保留正常年龄数据
df = df[normal_age]
print("\n过滤异常值后的年龄数据:")
print(df['Age'].values)# 4. 使用groupby()和聚合函数进行数据统计
# 按Category分组,计算各分组的Income均值和Score总和
group_stats = df.groupby('Category').agg({'Income': 'mean','Score': 'sum'
})
print("\n按Category分组的统计结果:")
print(group_stats)

运行结果:

缺失值情况:
ID          0
Age         1
Income      1
Score       0
Category    0
dtype: int64转换后的数据类型:
ID           object
Age         float64
Income      float64
Score       float64
Category     object
dtype: object过滤异常值后的年龄数据:
[25.         30.         41.57142857 45.         50.         35.60.         22.         70.         33.         28.        ]按Category分组的统计结果:Income  Score
Category                   
A        83333.333333  433.0
B        63333.333333  439.0

三、数据标准化

在很多数据分析场景中,不同特征的量纲差异较大,需要进行标准化处理,使各特征具有相同的尺度。Z-score 标准化是一种常用的方法,公式为(x - x.mean()) / x.std()

代码实例:

# 对Income列进行Z-score标准化
df['Income_Zscore'] = (df['Income'] - df['Income'].mean()) / df['Income'].std()
print("\n标准化后的Income数据:")
print(df[['Income', 'Income_Zscore']].head())

运行结果:

标准化后的Income数据:Income  Income_Zscore
0   50000.0000      -1.068753
1   60000.0000      -0.567239
2   75000.0000       0.283620
3   76666.6667       0.373165
4   90000.0000       1.085966

四、数据分组与统计

对数据进行分组和统计可以帮助我们从不同维度理解数据的分布和特征。

代码实例:

# 1. 使用pd.cut()创建数据区间(将Age分为3个区间)
df['Age_Group'] = pd.cut(df['Age'], bins=[18, 35, 60, 90], labels=['青年', '中年', '老年'])# 2. 使用value_counts()统计类别分布
age_group_dist = df['Age_Group'].value_counts()
print("\n年龄分组分布:")
print(age_group_dist)# 3. 使用groupby()结合mean()计算分组平均值
group_avg_score = df.groupby('Age_Group')['Score'].mean()
print("\n各年龄分组的平均分数:")
print(group_avg_score)

运行结果:

年龄分组分布:
青年    6
中年    4
老年    1
Name: Age_Group, dtype: int64各年龄分组的平均分数:
Age_Group
青年    84.166667
中年    86.000000
老年    82.000000
Name: Score, dtype: float64

五、数据条件处理

import numpy as np# 使用np.where根据分数添加等级标签
excel_data['Grade'] = np.where(excel_data['Score'] >= 90, 'A', np.where(excel_data['Score'] >= 80, 'B', np.where(excel_data['Score'] >= 70, 'C', 'D')))print("添加等级标签后的数据前几行:")
print(excel_data[['Name', 'Score', 'Grade']].head())
添加等级标签后的数据前几行:Name  Score Grade
0    Alice   85.0     B
1      Bob   92.0     A
2  Charlie   76.0     C
3    David   65.0     D
4    Emma    88.0     B

六、数据可视化

数据可视化可以直观地展示数据的分布和规律,帮助我们更好地理解数据。下面使用matplotlib.pyplot绘制几个关键图表。

代码实例:

# 设置中文显示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]# 1. 绘制年龄分组分布柱状图
plt.figure(figsize=(8, 5))
age_group_dist.plot(kind='bar', color='skyblue')
plt.title('年龄分组分布')
plt.xlabel('年龄分组')
plt.ylabel('人数')
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()# 2. 绘制各年龄分组平均分数折线图
plt.figure(figsize=(8, 5))
group_avg_score.plot(kind='line', marker='o', color='orange')
plt.title('各年龄分组的平均分数')
plt.xlabel('年龄分组')
plt.ylabel('平均分数')
plt.grid(True, linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

运行结果:

  • 年龄分组分布柱状图:直观展示了青年、中年、老年三个分组的人数差异,青年组人数最多。
  • 各年龄分组平均分数折线图:清晰呈现不同年龄分组的平均分数变化趋势,中年组平均分数最高。

七、数据保存

处理完成的数据需要保存起来,以便后续使用或分享。我们可以使用to_csv()方法将数据保存为 CSV 文件。

代码实例:

# 将清洗和处理后的数据保存为新文件
df.to_csv('processed_data.csv', index=False)
print("\n数据已成功保存为processed_data.csv文件")df.to_excel('processed_data.xlsx', index=False)
print("数据已保存为Excel文件")

运行结果:

数据已成功保存为processed_data.csv文件

总结

本文详细介绍了数据处理的完整流程,从数据的采集与加载,到清洗预处理(处理缺失值、转换数据类型、过滤异常值),再到数据标准化、分组统计、可视化以及最后的保存。通过 Python 的pandasmatplotlib库,我们可以高效地完成这些操作,为后续的数据分析和挖掘奠定坚实的基础。在实际应用中,还需要根据具体的数据特点和分析目标,灵活调整处理方法,以获得更有价值的 insights。

http://www.dtcms.com/a/289678.html

相关文章:

  • shell 脚本基础学习
  • Java中的intern()方法
  • 全新安装Proxmox VE启动时卡在Loading initial ramdisk
  • RAII机制以及在ROS的NodeHandler中的实现
  • 【c++】200*200 01灰度矩阵求所有的连通区域坐标集合
  • 鸿蒙开发中 渲染范围的控制
  • 飞腾D2000的BIOS编译
  • 在服务器无网络的环境下安装 VS Code Remote-SSH 组件
  • 【Python练习】053. 编写一个函数,实现简单的文件加密和解密功能
  • C++string类(3)
  • 基于单片机的火灾报警系统设计
  • SaTokenException: 未能获取对应StpLogic 问题解决
  • c#转python第四天:生态系统与常用库
  • 新版Acrobat Pro DC 2025 PDF编辑器下载与保姆级安装教程!!
  • Mermaid 语法
  • 突破select瓶颈:深入理解poll I/O复用技术
  • 让黑窗口变彩色:C++控制台颜色修改指南
  • 【数据结构】第一讲 —— 概论
  • Shell脚本-sort工具
  • 两个数据表的故事第 2 部分:理解“设计”Dk
  • SElinux和iptables介绍
  • 【Linux操作系统 | 第21篇-进阶篇】Shell编程(下篇)
  • 什么是的优先级反转(Priority Inversion) 和 优先级继承(Priority Inheritance)?
  • 【软件测试】使用ADB命令抓取安卓app日志信息(含指定应用)
  • 【AI论文】递归混合体:学习动态递归深度以实现自适应的令牌级计算
  • faster-lio与fast-lio中如何修改雷达的旋转角度
  • 单片机启动流程和启动文件详解
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 59(题目+回答)
  • 商业秘密保护:从法律理论到企业实战
  • 牛客-删除公共字符