数据科学 - 数据预处理(数据集透视,缺失值处理)

1. 前言

当我们获取一份数据后,首先要对数据进行透视处理,简单来讲,我们要先去了解这个数据集有什么,在讲什么,数据的类型是什么。了解了这些之后,才能更好的去了解通过这个数据集我们想要获得什么样的结论,运用什么样的模型,更清晰明了的解决目标问题。

python中有很多内置的包可以更方便快捷的对数据进行处理。

import numpy as np
import pandas as pd

上述两个包是数据处理中最为常见的,numpy广泛适用于数学运算,pandas进行数据表格处理十分快捷。

本文以数据集Adult为例进行演示讲解。

2. 数据集及相关文件的导入

#数据信息阅读
file = open("Adult.name",'rb')
information = file.read()
print(information)
file.close()

简单的文件打开阅读操作对于数据有一个大致的了解

columns = ['Age','Workclass','fnlgwt','Education','EdNum','MaritalStatus',
           'Occupation','Relationship','Race','Sex','CapitalGain',
           'CapitalLoss','HoursPerWeek','Country','Income']

train_Data = pd.read_csv("/Users/ricardo/Desktop/自学/数据科学/机器学习/机器学习实战/adult/adult.data",header=None,names=columns)
#header设置为None放置数据集默认无标题将数据集第一行作为列索引
#names对每一列属性命名

读取时的参数也有许多作用:

header:指定数据集中某一行作为数据的索引,None则设置数据集不含索引 

names:对数据集索引名称自定义

sep:自定义数据集的分隔符,平常工作中常常会有数据之间都在同一列的情况,设置分隔符将数据与数据之间进行分割

data = pd.read_csv('/Users/ricardo/Desktop/自学/数据科学/机器学习/机器学习实战/bank+marketing/bank/bank.csv',header=0,sep=';')

3. 数据集剖析

3.1 标签元素

train_Data['sex'].unique()


'''array(['Male','Female'],dtype=object) '''

通过unique函数,直观的看出数据集某一个标签中所含属性,为后续标准编码提供桥梁。

train_Data['sex'].value_counts() #对相应标签中属性出现次数计数

3.2 数据集统计

train_Data.describe() #对于数据集中数值数据的统计量,包含极值等
print(train_Data.shape) #获取数据集的大小
print(train_Data.dtypes) #每一个属性数据的类型
train_Data.head() #获取表格的前五行

以下是相应函数所列举出的表格数据

数值类型的数据进行统计,其中包含极值,标准差,平均值等

查看数据集的前五行,直接了解数据集的内容,一般由于数据集量大,不完全查看

pandas内置一个更简单的函数对于数据集进行剖析,一步到位得出数据集是否包含缺失值与类型:

train_Data.info()

 

4. 缺失值处理 

在Adult数据集中并没有缺失值,缺失值在数据集中以字符的形式"?"出现,为了方便起见,将数据集中的"?"更改为缺失值

train_Data.replace(" ?",pd.NaT,inplace=True) #inplace设置为True操作将会作用于原数据集

缺失值处理一般有三种处理方式

1. 删除缺失值所在的行

最简单粗暴的方式,将原数据集中有缺失数据的样本一刀切直接删除

train_Data.dropna(inplace=True)

这种办法虽然简单快捷,但也会造成数据集的缺失

2. 填充该属性的众数,平均数,中位数等

train_Data.['Workclass'].mode()[0]
train_Data.['HoursPerWeek'].mean()
train_Data.['HourPerWeek'].median()

上述代码是获取单独某一列的众数,平均数以及中位数。注意,如果众数含有多个,会返回从小到大依次排列的数组,所以要针对性获取其中一个数据。

在pandas中填入缺失值可以以字典的形式针对性对某一列填充。

trans = {'Workclass':train_Data.['Workclass'].mode()[0],'HoursPerWeek':train_Data['HoursPerWeek'].mean()}
train_Data.fillna(trans,inplace=True)

字典中的key值对应数据集列名,对于列名进行替换其中字典中的value值。

或者直接对于某一列做处理:

trains_Data['Workclass'].fillna(trains_Data['Workclass'].mode()[0],inplace=True)

3. 自定义填充

自定义填充有许多种方式,例如重新测量或统计出缺失值的数值,针对性进行填充。

train_Data.iloc[0,0] = 3 #iloc通过矩阵的行列数获取数据

当然也可以使用预测模型(如线性回归、决策树等)来预测缺失值。这种方法较为复杂,但能够利用数据间的相关性来更准确地填充缺失值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值