ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据分析--数据预处理 [打印本页]

作者: 耶耶耶耶耶    时间: 2024-2-18 02:45
标题: 数据分析--数据预处理
本文主要是个人的学习笔记总结,数据预处理的基本思路和方法,包括一些方法的使用示例和参数解释,具体的数据预处理案例case详见其他文章。如有错误之处还请指正!

目录

数据在进行建模和分析前,对其进行数据处理是必不可少的,这样做能帮助我们从根本上保证数据质量,提高数据的准确性和可靠性。主要包括数据清洗、数据转换、数据集成、数据降维等过程。
数据的质量评定

从五个维度来对数据质量进行评定
    维度    说明        有效性
Validity    数据的有效性源于统计学概念,即符合数据收集时所制定的规则及约束条件的数据。        精确度
Accuracy    精确度是衡量数据质量的另一个重要条件。
一般情况下,通过数据清理很难改善数据的准确度,这就对数据源质量提出了较高的要求。        完整度
Completeness    如果在采集数据的过程中造成了数据丢失,也就影响了其完整程度。
不完整的数据,势必会对分析结论造成影响,这需要进一步采取措施来改善这种情况。        一致性
Consistency    原始数据中,数据可能会存在不一致性。
例如:客户在两个不同的系统中提供了两个不一样的家庭地址,而正确的地址只有一个。
那么,就需要我们来判断并消除这种不一致性。        均匀度
Uniformity    数据的均匀度可能来源于度量单位的不一致,这就需要我们通过换算来解决,使得最终数据统一均匀。  数据处理步骤

数据处理的常见四个步骤:
    序号    步骤    说明        1    数据清理
Data Cleansing    数据清理大致包括对空缺键值进行填充操作,
对噪声数据进行相应的平滑处理,对孤立点和异常点进行删除处理等。        2    数据集成
Data Integration    将多个数据库或者数据文件里面包含的数据进行集成处理。        3    数据转换
Data Transformation    将数据进行聚集或者规范化处理,从一种形式转换成另外一种我们需要的形式。        4    数据规约
Data Reduction    对庞大的数据集进行压缩处理,且尽量保证最终预测结果的一致性。  下面将详细介绍常用的数据处理方法:
缺失值的处理

标记缺失值
  1. # 生成包含缺数据的示例
  2. import numpy as np
  3. import pandas as pd
  4. null_data = {'A': [10, np.nan, 25, np.nan, 42, np.nan],
  5.              'B': [12, 15, np.nan, 14, 17, np.nan],
  6.              'C': [10, 13, 27, 13, 19, 40]}
  7. df = pd.DataFrame(null_data)
复制代码
删除缺失值

  1. # 删除缺失值
  2. import pandas as pd
  3. # 创建一个示例数据框
  4. data = {'A': [1, 2, None, 4],
  5.         'B': [5, None, 7, 8],
  6.         'C': [None, 10, None, 12]}
  7. df = pd.DataFrame(data)
  8. # 删除包含缺失值的行
  9. cleaned_df1 = df.dropna()  # 默认删除包含缺失值的行
  10. cleaned_df2 = df.dropna(axis=1)  # 删除包含缺失值的列
  11. cleaned_df3 = df.dropna(how='all')  # 当所有值为缺失值时删除行
  12. cleaned_df4 = df.dropna(thresh=2)  # 至少要有 2 个非缺失值才保留行
  13. cleaned_df5 = df.dropna(subset=['B', 'C'])  # 只有在 'B' 和 'C' 列中同时存在空值的情况下,对应的行才会被删除
  14. print(cleaned_df1)
  15. print(cleaned_df2)
  16. print(cleaned_df3)
  17. print(cleaned_df4)
  18. print(cleaned_df5)
复制代码
填充缺失值

重复值处理
  1. # 示例数据
  2. df = pd.DataFrame({'name': ['amy', 'david'] * 3 +
  3.                    ['jam'], 'class': [2, 2, 2, 4, 3, 2, 4]})
复制代码
  1. df.drop_duplicatep() #去除全部重复值
  2. df.drop_duplicates(['name']) #去除name列的重复值
  3. df.drop_duplicates(keep='last') # 默认保留重复项前面的值,而去除后面的值,‘last’则为保留最后一个
复制代码
异常值的处理

当涉及 Pandas 应用数学与统计学领域中的异常值检测时,有一些比较深入的方法,包括概率方法,矩阵分解,以及神经网络等。下面是一些具体示例展示:
数据集合并

这里主要是用pandas中的常见方法进行数据集的连接合并。
pandas.DataFrame.concat()方法合并:
  1. pandas.concat(
  2.     objs,              # 接受一个列表或字典,表示要连接的 pandas 对象(Series 或 DataFrame)
  3.     axis=0,            # 沿指定轴进行连接,0 表示沿第一个轴(行方向)连接,1 表示沿第二个轴(列方向)连接
  4.     join='outer',      # 指定连接的方式,'outer'表示并集(union),'inner'表示交集(intersection)
  5.     ignore_index=False,# 如果为 True,将忽略原始索引并生成一个新的整数索引
  6.     keys=None,         # 创建层次化索引,用于识别每个片段
  7.     levels=None,       # 指定多级索引的级别(通常自动推断)
  8.     names=None,        # 指定多级索引的级别名称
  9.     verify_integrity=False,  # 如果为 True,在连接操作之前验证轴是否包含重复项
  10.     sort=False         # 如果为 True,对非连接轴上的索引进行排序
  11. )
复制代码
以下是对各个参数的详细解释:

pandas.DataFrame.merge() 方法合并
  1. pandas.merge(
  2.     left,                     # 左侧的 DataFrame 对象
  3.     right,                    # 右侧的 DataFrame 对象
  4.     how='inner',              # 合并方式,默认为 'inner',表示取两个 DataFrame 的交集
  5.     on=None,                  # 指定列名或索引级别作为合并的键,默认为 None,表示自动根据列名的交集进行合并
  6.     left_on=None,             # 指定左侧 DataFrame 中的列名或索引级别作为合并的键
  7.     right_on=None,            # 指定右侧 DataFrame 中的列名或索引级别作为合并的键
  8.     left_index=False,         # 如果为 True,在左侧 DataFrame 中使用索引作为合并键
  9.     right_index=False,        # 如果为 True,在右侧 DataFrame 中使用索引作为合并键
  10.     sort=False,               # 如果为 True,根据合并键对结果进行排序
  11.     suffixes=('_left', '_right'),  # 如果列名冲突,为列名添加后缀来区分,默认为 '_left' 和 '_right'
  12.     copy=True                 # 如果为 True,在执行合并操作时复制数据
  13. )
复制代码
以下是对各个参数的详细解释:
pandas.DataFrame.join() 方法:
  1. DataFrame.join(
  2.     other,                     # 合并的另一个 DataFrame 对象
  3.     on=None,                   # 指定列名或索引级别作为合并的键,默认为 None,表示根据索引进行合并
  4.     how='left',                # 合并方式,默认为 'left',表示以左侧 DataFrame 为基准进行左外连接
  5.     lsuffix='',                # 左侧 DataFrame 列名相同时的后缀,默认为 '',不添加任何后缀
  6.     rsuffix='',                # 右侧 DataFrame 列名相同时的后缀,默认为 '',不添加任何后缀
  7.     sort=False                 # 如果为 True,根据合并键对结果进行排序
  8. )
复制代码
以下是对各个参数的详细解释:
数据映射 map()方法完成
  1. df = pd.DataFrame({'name': ['amy', 'david', 'jam'], 'age': [14, 13, 12]})
  2. name_to_gender = {'amy': 'girl', 'david': 'boy', 'jam': 'boy'}  # 建立映射字典
  3. df['gender'] = df['name'].map(name_to_gender)
复制代码
分组聚合

pandas.DataFrame.groupby()对数据集进行分组聚合
  1. df = pd.DataFrame({'key1': ['A', 'B', 'C', 'A', 'B', 'C'],
  2.                    'key2': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
  3.                    'data': [1, 2, 3, 4, 5, 6]})
  4. df.groupby(by='key1').sum()
  5. df.groupby(by=['key1', 'key2']).mean() # 替换为count().mean()等其它函数
复制代码
数据转换

不仅是数据格式或类型的转换,更多的是通过一些统计学方法对数据进行标准化或离散化处理。
特征工程:需要去设计数据特征,以帮助训练得到性能更加优异的模型。
标准化 Normalization(无量纲化)是数据预处理中的常用手段。标准化的目的主要是消除不同特征之间的量纲和取值范围不同造成的差异。这些差异,不仅会造成数据偏重不均,还会在可视化方面造成困扰
  1. import numpy as np
  2. import pandas as pd
  3. %matplotlib inline
  4. np.random.seed(10)  # 随机数种子
  5. df = pd.DataFrame({'A': np.random.random(
  6.     20), 'B': np.random.random(20) * 10000})
  7. print(df.plot())  # 绘图
复制代码
此时,B列数据太大,A列已经无法看出趋势,近似一条直线.
Z-Score 标准化

Z-Score 标准化 是常用的标准化手段之一,其公式为:

\[z = \frac{x - \mu}{\sigma}\]

其中,
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4