一、数据治理定义
数据治理是一种组织数据管理的方法,涉及数据的收集、存储、处理、分析和共享等方面,旨在最大程度地利用数据资产并降低数据相关的风险。 数据治理确保数据的质量、安全性、合规性和可用性,以支持组织的决策和运营活动。
二、数据清洗定义
数据清洗是数据治理工作中的一项重要任务,旨在解决企业的数据质量历史遗留问题,如数据不一致、不完整、不合规和冗余等。 数据清洗通过设定特定的数据规则对混乱数据进行清洗和标准化。
三、数据治理和数据清洗的区别
数据治理主要是宏观上对数据进行管理,由国家或行业制定制度,具有稳定性。 数据治理涉及顶层设定,具有权威性,确保数据的整体质量和合规性。而数据清洗主要是微观上对数据进行清洗和标准化,规则由自己设定,随意性较强。 数据清洗更侧重于解决具体的数据质量问题。
四、数据清洗常用方法
1.数据质量问题一:数据中存在缺失值
下面以bbb.csv文件为例,介绍常用缺失值处理方法,该文件具体内容如下:
2.处理方法
(1)方法一:删除缺失值所在的行
def DelRowWithNull():
data = pd.read_csv('bbb.csv')
data.dropna(inplace=True)
return data
(2)方法二:填补缺失值
1)使用缺失值所在列临近值填补
# 使用缺失值上一行有效值填补
def FillingNullWithUpRow():
data = pd.read_csv('bbb.csv')
data.fillna(method='ffill',inplace=True)
return data
# 使用缺失值下一行有效值填补
def FillingNullWithDownRow():
data = pd.read_csv('bbb.csv')
data.fillna(method='bfill',inplace=True)
return data
2)使用该列平均值对空值进行填补(缺失值所在列类型为数值型)
def FillingNullWithColMean():
data = pd.read_csv('bbb.csv')
data.fillna(data.mean(),inplace=True)
return data
3)使用空值列中位数进行填补(缺失值所在列类型为数值型)
def FillingNullWithMedian():
data = pd.read_csv('bbb.csv')
data.fillna(data.median(),inplace=True)
return data
填补后的结果如下图:
4)使用空值所在列众数进行填补
def FillingNullWithMode():
data = pd.read_csv('bbb.csv')
data.fillna(data.mode().iloc[0], inplace=True)
return data
填补后的结果如下图:
5) 自定义填充
def FillingNullWithCustom(data):
data = pd.read_csv('bbb.csv')
data.fillna('-1', inplace=True)
return data
填补后的结果如下图所示:
6) 插值填充(缺失值必须为数值类型)
def FillingNullWithInsertVal(data):
data = pd.read_csv('bbb.csv')
data.interpolate(method='linear', limit_direction='forward', inplace=True)
return data
注释:method 参数可取值及对应解释:
linear:线性插补。
time:时间序列插补,适用于日期范围的数据。
index:基于索引的插补。
values:基于数据值的插补。
nearest:最接近邻居插补。
zero:零或者一个常数。
slinear:线性插补,用于离散数据。
quadratic:二次插补,用于离散数据。
cubic:三次插补,用于离散数据。
7)机器学习填充(缺失值必须为数值类型 或者 字符类型)
要使用该方法,必须确定缺失值所在列与其他某一列间存在某种联系。
3.问题二:存在重复值
4.处理方法
方法:删除重复记录
def DelDuplicateRow(data):
data = pd.read_csv('bbb.csv')
data = data.drop_duplicates()
return data
5.问题三:存在异常值
例如:现有这样一个叫ccc.csv的文件,文件内容如下:
从上面表格文件中可以看出,age 年龄列,存在一个异常值为400,身高列存在一个异常值-10。
6.处理方法
方法1:检测异常值并剔除包含异常值的记录
具体逻辑如下:
import pandas as pd
def detect_outliers(series):
Q1 = series.quantile(0.25)
Q3 = series.quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = (series < lower_bound) | (series > upper_bound)
return outliers
csv_file = 'ccc.csv'
# 1.读取ccc.csv文件
df = pd.read_csv(csv_file)
# 2.创建一个空的DataFrame来存储异常值标记
outlier_flags = pd.DataFrame(index=df.index, columns=df.columns, dtype=bool)
# 3.对每一列应用detect_outliers函数,并存储结果
for column in df.columns:
outlier_flags[column] = detect_outliers(df[column])
# 4.找出至少在一个列中有异常值的行
any_outliers = outlier_flags.any(axis=1)
abn_rows_loc = []
# 5.打印有异常值的行和对应的列
for index, row in df[any_outliers].iterrows():
outlier_columns = outlier_flags.loc[index].index[outlier_flags.loc[index]]
print(f"Row {index} has outliers in columns: {', '.join(outlier_columns)}")
abn_row_loc.append(index)
print(row)
print()
for i in abn_col_idx:
df.drop([i], inplace=True)
print(df)
方法2:检测异常值并填补异常值
填补方法同数据填补策略一致。