数据清洗、数据集成
整个数据分析过程中,数据清洗大概占到了80%。
数据质量准则:
- 完整性:单条数据是否存在空值,统计的字段是否完善。
- 全面性:观察某一列全部数据值可通过常识判断该列在数据定义、单位标识、数字本身方面是否有问题。
- 合法性:数据的类型、内容、大小的合法性。
- 唯一性:数据是否存在重复。
对于缺失值的处理通常采用三种方法:
- 删除:删除数据缺失的记录
- 均值:使用当前列的均值
df['Age'].fillna(df['Age'].mean(), inplace=True)
- 高频:使用当前列出现频率最高的数据。
age_maxf = train_features['Age'].value_counts().index[0]
train_features['Age'].fillna(age_maxf, inplace=True)
空行的处理:
df.dropna(how='all',inplace=True)
列数据单位不统一:
# 获取 weight 数据列中单位为 lbs 的数据
rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)
print df[rows_with_lbs]
# 将 lbs转换为 kgs, 2.2lbs=1kgs
for i,lbs_row in df[rows_with_lbs].iterrows():
# 截取从头开始到倒数第三个字符之前,即去掉lbs。
weight = int(float(lbs_row['weight'][:-3])/2.2)
df.at[i,'weight'] = '{}kgs'.format(weight)
非ASCII字符:
# 删除非 ASCII 字符
df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
一列有多个参数:
# 切分名字,删除源数据列
df[['first_name','last_name']] = df['name'].str.split(expand=True)
df.drop('name', axis=1, inplace=True)
重复数据:
# 删除重复数据行
df.drop_duplicates(['first_name','last_name'],inplace=True)
例:
import pandas as pd
df = pd.read_csv('D://Jupyter/food.csv')
df
#将ounces列中的缺失值从均值来填充
df['ounces'].fillna(df['ounces'].mean(), inplace=True)
#将food列中同一转换成小写
df['food'] = df['food'].str.lower()
#将ounce列中的负数取正
df['ounces'] = df['ounces'].apply(lambda x: abs(x))
#删除food列中重复的项
df.drop_duplicates('food', inplace=True)
df
数据集成就是将多个数据源合并存放在一个数据存储中(如数据仓库),方便后续的数据挖掘。
数据集成的两种架构:ELT和ETL
ETL是英文Extract、Transform和Load的缩写,包括了数据抽取、转换、加载三个过程。
- 抽取是将数据从已有的数据源中提取出来。
- 转换是对原始数据进行处理
- 加载就是将转换后的数据从中间层导入数据分析层。
根据转换发生的顺序和位置,数据集成可以分为 ETL 和 ELT 两种架构。
- ETL:提取(Extract)——转换(Transform)——加载(Load),数据源抽取后首先进行转换,然后将转换的结果写入目的地。
- ELT:提取(Extract)——加载(Load)——变换(Transform),在抽取后将结果先写入目的地,然后利用数据库的聚合分析能力或者外部计算框架,如Spark来完成转换的步骤。
ELT和ETL相比最大区别是重抽取和加载,轻转换。从而可以用更轻量的方案搭建一个数据集成平台。使用ELT方法,在提取完成之后,数据加载会立即开始。一方面更省时,另一方面ELT允许 BI 分析人员无限制地访问整个原始数据,为分析师提供了更大的灵活性,使之能更好地支持业务。
在ELT架构中,数据变换这个过程根据后续使用的情况,需要在 SQL 中进行,而不是在加载阶段进行。这样做的好处是你可以从数据源中提取数据,经过少量预处理后进行加载。这样的架构更简单,使分析人员更好地了解原始数据的变换过程。
典型ETL工具:
- 商业软件:Informatica PowerCenter、IBM InfoSphere DataStage、Oracle Data Integrator、Microsoft SQL Server Integration Services等
- 源软件:Kettle、Talend、Apatar、Scriptella、DataX、Sqoop等