• 数据预处理(预备知识)


    数据预处理

    为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始,而不是从那些准备好的张量格式数据开始。

    在Python中常用的数据分析工具中,我们通常使用pandas软件包。像庞大的Python生态系统中的许多其他扩展包一样,pandas可以与张量兼容。

    本节我们将简要介绍使用pandas预处理原始数据,并将原始数据转换为张量格式的步骤。我们将在后面的章节中介绍更多的数据预处理技术。

    读取数据集

    举一个例子,我们首先创建一个人工数据集,并存储在CSV(逗号分隔值)文件 …/data/house_tiny.csv中。

    以其他格式存储的数据也可以通过类似的方式进行处理,下面我们将数据集按行写入CSV文件中。

    import os                      #导入os包
    
    os.makedirs(os.path.join('..', 'data'), exist_ok=True)                #该文件目录已经存在时,也不会出现异常状况
    data_file = os.path.join('..', 'data', 'house_tiny.csv')               #生成文件的路径名称
    
    
    with open(data_file,'w') as fp:
        fp.write('NumRooms,Alley,Price\n')
        fp.write('NA,Pave,127500\n')
        fp.write('2,NA,106000\n')
        fp.write('4,NA,178100\n')
        fp.write('NA,NA,140000\n')                                         #将这些信息写入csv文件之中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    要从创建的CSV文件中加载原始数据集,我们导入pandas包并调用read_csv函数。

    该数据集有四行三列。其中每行描述了房间数量(“NumRooms”)、巷子类型(“Alley”)和房屋价格(“Price”)。

    import pandas as pd                                                   #导入pandas数据处理包
    
    data = pd.read_csv('../data/house_tiny.csv')                           #直接使用csv包的read_csv读取csv文件
    
    
    • 1
    • 2
    • 3
    • 4
    NumRoomsAlleyPrice
    0NaNPave127500
    12.0NaN106000
    24.0NaN178100
    3NaNNaN140000

    处理缺失值

    注意,“NaN”项代表缺失值。为了处理缺失的数据,典型的方法包括插值法删除法,其中插值法用一个替代值弥补缺失值,而删除法则直接忽略缺失值。

    通过位置索引iloc,我们将data分成inputsoutputs,其中前者为data的前两列,而后者为data的最后一列。

    在这里,我们将考虑插值法。对于inputs中缺少的数值,我们用同一列的均值替换“NaN”项。

    inputs = data.iloc[:,:2]                                             #pandas的切片操作,取得输入集合
    outputs = data.iloc[:,-1]                                            #pandas的切片操作,取得输出集合
    
    • 1
    • 2
    inputs                                                               #输入集数据
    
    • 1
    NumRoomsAlley
    0NaNPave
    12.0NaN
    24.0NaN
    3NaNNaN
    outputs                                                             #输出集数据        
    
    • 1
    0    127500
    1    106000
    2    178100
    3    140000
    Name: Price, dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用均值替换掉NumRooms中的NaN值

    inputs = inputs.fillna(inputs.mean())                              #以平均值填充NaN空值         
    
    • 1
    inputs                                                            #输出填充过的结果
    
    • 1
    NumRoomsAlley
    03.0Pave
    12.0NaN
    24.0NaN
    33.0NaN

    对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。

    由于“巷子类型”(“Alley”)列只接受两种类型的类别值“Pave”和“NaN”,pandas可以自动将此列转换为两列“Alley_Pave”和“Alley_nan”。

    • 巷子类型为“Pave”的行会将“Alley_Pave”的值设置为1,“Alley_nan”的值设置为0。
    • 缺少巷子类型的行会将“Alley_Pave”和“Alley_nan”分别设置为0和1。
    inputs = pd.get_dummies(inputs, dummy_na=True)                  #'dummies'假人,即对两分类的数据进行标注0或1
    print(inputs)
    
    • 1
    • 2
       NumRooms  Alley_Pave
    0       3.0           1
    1       2.0           0
    2       4.0           0
    3       3.0           0
    
    • 1
    • 2
    • 3
    • 4
    • 5

    转换为张量数据

    现在inputs和outputs中的所有条目都是数值类型,它们可以转换为张量格式。

    当数据采用张量格式后,可以通过在上节中(Pytorch的数据操作)引入的那些张量函数来进一步操作。

    import numpy as np                                            #引入numpy数组
    
    X, y = np.array(inputs.values), np.array(outputs.values)       #将pandas数据转化为张量
    
    X, y
    
    • 1
    • 2
    • 3
    • 4
    • 5
    (array([[3., 1.],
            [2., 0.],
            [4., 0.],
            [3., 0.]]),
     array([127500, 106000, 178100, 140000], dtype=int64))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    小结

    pandas软件包是Python中常用的数据分析工具中,pandas可以与张量兼容。

    用pandas处理缺失的数据时,我们可根据情况选择用插值法和删除法。

  • 相关阅读:
    【干货分享】2022软件测试面试题汇总
    Spring源码分析 事务 实现原理
    sentinel架构底层原理剖析详解
    二分法-算法总结
    python学习笔记(5)—— 输入和输出
    Day11: 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个数
    LeetCode 2351. 第一个出现两次的字母
    Power BI简介
    再学Blazor——概述
    Go Module详解
  • 原文地址:https://blog.csdn.net/weixin_43479947/article/details/126974022