pytorch 数据预处理和常用工具

发布于:2025-05-14 ⋅ 阅读:(14) ⋅ 点赞:(0)

NumPy

  • NumPy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy支持向量处理ndarray对象,提高程序运算速度。
    • 多维数组支持:NumPy 提供了灵活且高效的多维数组(ndarray)结构,支持从一维到高维的数据存储。
    • 高效的数学运算:内置了大量的数学函数,能够在数组上进行快速的向量化计算。
    • 线性代数和随机数生成:提供了丰富的线性代数运算(矩阵乘法、特征值分解等)和随机数生成器。
    • 集成性:与其他科学计算库(如SciPy、Pandas、Matplotlib)无缝衔接。

Numpy数据结构

ndarray是NumPy库的核心数据结构,用于表示多维数组。

  • 维度:ndarray可以具有任意数量的维度,从一维(向量)到三维(立体)、四维甚至更高。每个维度的大小称为轴长。
  • 形状:ndarray对象具有一个描述其维度大小的元组,称为形状(Shape)。例如,二维数组的形状可能是(3,4),表示有3行4列。
  • 数据类型:ndarray中的所有元素都必须是相同的数据类型。数据可以是整数、浮点数、复数等。
  • 内存布局:ndarray在内存中是连续存储的,这意味着它允许高效的数据访问和操作。
  • 索引和切片:ndarray支持使用方括号进行索引和切片,这允许你访问、修改或操作数组的特定部分。
  • 广播:ndarray支持广播功能,这是一种机制,允许在不同形状的数组之间进行数学运算。
  • 数学运算:ndarray支持各种数学运算,如加法、减法、乘法、除法等,这些运算可以逐元素应用于数组中的每个元素。
  • 函数:NumPy提供了许多内置函数,可以对ndarray执行各种操作,如求和、求平均值、求最大值、求最小值等。
  • 通用函数:NumPy还提供了通用函数(ufunc),这些函数可以对ndarray中的每个元素执行操作,而不需要循环。

安装和使用NumPy

  1. 通过 pip 安装 NumPy:
pip install numpy
  1. 基本使用示例
import numpy as np

#创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("数组维度:", arr.ndim)        # 输出:2
print("数组形状:", arr.shape)      # 输出:(2, 3)
print("元素类型:", arr.dtype)      # 输出:int64

#数组运算
result = np.dot(arr.T, arr)          # 计算矩阵乘法
print("结果:\n", result)
import numpy as np

#创建一个二维数组
arr_a = np.array([[1, 2, 3], [4, 5, 6]])
arr_b = np.array([1, 2, 3])
c=np.add(arr_a, arr_b)

print(c)
import numpy as np

#创建一个二维数组
arr = np.array([[1, 2], [4, 5]])
print(arr[0])
print(arr[1])

Matplotlib的安装和导入

  • Matplotlib是一个用于绘制图形的Python库,可用于实现数据的可视化展示。

安装和导入Matplotlib

  1. 安装和验证命令
pip install matplotlib
import matplotlib
print(matplotlib.__version__)
  1. 导入Matplotlib和解决中文报错
import matplotlib.pyplot as plt
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题,确保在图表中正确显示负号
plt.rcParams['axes.unicode_minus'] = False

绘制基础图画

折线图

import matplotlib.pyplot as plt

# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题,确保在图表中正确显示负号
plt.rcParams['axes.unicode_minus'] = False
#定义x和y的值
x=[1,2,3,4,5]
y=[2,4,6,8,10]
#使用折线图展示x和y的关系
plt.plot(x,y)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('折线图')
#显示图表
plt.show()

散点图

#%% md
## 散点图
#%%
import matplotlib.pyplot as plt
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题,确保在图表中正确显示负号
plt.rcParams['axes.unicode_minus'] = False
#定义x和y的值
x=[1,2,3,4,5]
y=[2,4,6,8,10]
#使用折线图展示x和y的关系
plt.scatter(x,y)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('折线图')
#显示图表
plt.show()

柱状图

plt.show()
#%%
import matplotlib.pyplot as plt
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题,确保在图表中正确显示负号
plt.rcParams['axes.unicode_minus'] = False
#定义x和y的值
x=[1,2,3,4,5]
y=[2,4,6,8,10]
#使用折线图展示x和y的关系
plt.bar(x,y)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('折线图')
#显示图表
plt.show()

图例

import matplotlib.pyplot as plt
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题,确保在图表中正确显示负号
plt.rcParams['axes.unicode_minus'] = False
#定义x和y的值
x=[1,2,3,4,5]
y_1=[2,4,6,8,10]
y_2=[3,5,7,9,11]

#使用折线图展示x和y的关系
plt.plot(x,y_1,label='数据1')
plt.plot(x,y_2,label='数据2')
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('折线图')
# 添加图例
plt.legend()
#显示图表
plt.show()

数据清洗

  • 数据清洗是数据预处理的一部分,主要是对数据进行审查和校验,以确保其准确性、完整性、一致性和可靠性。

据清洗的作用

  • 数据清洗是机器学习和深度学习中的一个重要步骤,对模型的性能有着决定性的影响。
  • 尽管深度学习模型,尤其是深度神经网络具有很强的特征学习能力,可以在一定程度上容忍数据的不完美,但这并不意味着可以完全忽略数据清洗的步骤。良好的数据预处理可以帮助模型更快地收敛,提高训练效率,同时也可以防止模型过拟合。
  • 据清洗主要包括以下内容:
    • 删除重复信息:识别并去除数据中的重复记录,这些可能是由于数据录入错误或系统错误产生的。
    • 纠正错误:查找并修正数据中的错误,例如小数点位置错误、拼写错误或其他录入错误。
    • 提供数据一致性:确保数据集中的信息是一致的,比如统一日期格式或文本的大小写,以便可以进行有效的比较和分析。
    • 处理无效值或缺失值:对于数据中的无效值或缺失值,需要决定是删除还是填充这些值,以保持数据的完整性。
    • 消除异常值:检测并处理那些不符合常规模式的值,这些可能是由于测量错误或其他原因造成的。
    • 数据转换和格式化:对数据进行调整,以满足特定的分析需求,例如日期的转换、数值的标准化等。

  • 可以使用Python中的NumPy、Pandas或Scikit-learn库实现数据清洗。

Pandas进行数据清洗

  • Pandas是一个用于数据分析的Python库,是Python中进行数据处理和分析的一个强大工具,它提供了快速、灵活且直观的数据结构,特别适合处理关系型和标记型数据。
    Pandas的重要特性。
  • 数据结构:Pandas提供了两种主要的数据结构:Series和DataFrame。Series是一种一维的标签化数组;而DataFrame是一种二维的表格型数据结构,可以想象成一个Excel表格或数据库中的表。
  • 数据处理:Pandas提供了大量的函数和方法,使得数据的清洗、转换和分析变得更加高效和便捷。这些功能包括但不限于数据筛选、排序、分组、合并以及时间序列分析等。
  • 数据可视化:Pandas与Matplotlib等绘图库紧密结合,提供了一些内置的绘图功能,方便用户对数据进行可视化分析。

Pandas数据结构

Series 数据结构
  • Series是一种强大的一维数据结构,它不仅能够存储数据,还提供了丰富的方法和操作,使得数据分析变得更加高效和便捷。
  • Series具有多个特性:多种创建方式,切片和索引,缺失值检测,自动对齐
import pandas as pd
s=pd.Series([1,2,3,4,5])
print(s)
0    1
1    2
2    3
3    4
4    5
dtype: int64
DataFrame数据结构
  • DataFrame是Pandas库的核心数据结构,它类似于一个二维表格,可以存储多种类型的数据,并且具有很多方便进行数据处理的功能。
  • DataFrame的关键特性包括:二维标签化数据结构,潜在的异质性,数据处理,数据分析,数据存储,查询便捷
  • 潜在的异质性:DataFrame中的每列可以是不同的数据类型,包括数值、字符串或布尔值等。
  • DataFrame是Pandas库中的一个类,用于创建二维表格型数据结构。
  • data是一个包含数据的字典或列表,其中字典的键表示列名,字典的值表示对应列的数据。如果data是一个列表,则每个元素代表一行数据。
import pandas as pd

data={
    'Name':['Alice','Bob','Charlie'],
    'Age':[25,30,35],
    'City': ['New York','London','Paris']
}
s=pd.DataFrame(data)
print(s)

Pandas数据清洗常用代码

import pandas as pd
# 读取数据
data=pd.read_csv('data.csv')
data=pd.read_excel('data.csv')

# 查看前5行信息
print(data.head())

#删除含有缺失值的行
data.dropna(inplace=True)
#使用平均值填充缺失值
data.fillna(data.mean(),inplace=True)

#检测重复行
duplicatess=data.duplicated()
#删除重复行
data.drop_duplicates(inplace=True)
# 去除异常值
data = data[(np.abs(stats.zscore(data['column_to_clean'])) < 3)]

# 数据类型转换
data['date']= pd.to_datetime(data['date'])

#筛选年龄大于或等于18岁的记录
filtered_data = data[data['age'] >= 18]
#按年龄升序排列
sorted_data = filtered_data.sort_values(by='age', ascending=True)

#假设有两个数据集:data1和data2
merged_data = pd.merge(datal, data2, on='customer_id')

特征工程

  • 特征工程是指对原始数据进行预处理、选择、修改和构建新的特征的过程,以便提高模型的性能。这个过程包括数据清洗、特征选择、特征转换和降维等。
  • 特征工程的作用包括:提高模型性能,减少过拟合,提高训练速度,数据清洗,特征选择,降维。

主成分分析

  • 主成为分析(PCA)是一种数据降维技术,它的核心目的是通过变换找到数据中最重要的特征,也就是主成分,以减少数据的复杂性,同时保留大部分信息。主成分分析就像是用一个滤镜来优化你的照片,只保留最精华的部分,去掉那些不重要的杂乱背景,使得图片更加清晰和突出重点。

线性判别分析

  • 线性判别分析是一种统计方法,它用于找到能够最大化不同类别数据之间差异的方向。这种方法在机器学习和统计中被广泛用于降维和分类。
  • 线性判别分析就是找到一个能够最好地区分不同类别的方向,通过这个方向可以简化数据,同时保留最重要的区分信息。

Scikit-learn数据预处理

  • Scikit-learn是一个开源的、广泛使用的机器学习工具包,其提供了丰富的机器学习算法,例如回归、聚类、降维等,同时还支持数据预处理、模型评估及参数调优等功能。
pip install scikit-learn

数据标准化

  • Min-Max标准化(极差法):这种方法通过将原始数据按照最小值和最大值进行线性变换,使得转换后的数据落在一个特定的区间内,通常是[0,1]。这种方法简单直观,适用于大多数情况,特别是当数据分布相对均匀时。
  • Z-score标准化(标准差法):这种方法基于原始数据的均值和标准差进行转换,使得转换后的数据具有零均值和单位方差。这种方法适用于数据分布近似正态分布的情况,可以有效地消除不同量纲和数量级的影响。
#导入相关库
import numpy as np
from sklearn.preprocessing import StandardScaler
#创建一个示例数据集
data =np.array([[1,2],[3,4],[5,6]])
#初始化StandardScaler对象
scaler = StandardScaler()
#使用fit_transform方法对数据进行标准化
normalized_data = scaler.fit_transform(data)
print("原始数据:")
print(data)
print("标准化后的数据:")
print(normalized_data)

特征工程

  1. 创建数据集:使用Pandas 库创建一个DataFrame,包含三列数据’A’,‘B’,'C"。
  2. 特征选择:计算各列之间的相关系数,然后选择与C列相关系数大于0.5的列作为特征。
  3. 特征提取:使用PCA(主成分分析)方法对数据进行降维,将数据的维度从3降到2。
  4. 特征缩放:使用StandardScaler对数据进行标准化处理,使得每一列的数据都符合标准正态分布。
import pandas as pd
from sklearn.preprocessing import StandardScaler
#创建数据集
data = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]})
#特征选择(以相关系数为例)
correlations = data.corr().abs()
features = correlations[correlations['C'] > 0.5].index.tolist()
#特征提取(以PCA为例)
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
data_pca = pca.fit_transform(data)
#特征缩放
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
#显示处理后的数据
print("特征选择结果:",features)
print("特征提取结果:",data_pca)
print("特征缩放结果:",data_scaled)

网站公告

今日签到

点亮在社区的每一天
去签到