一、概述
目的
- 熟练掌握pandas对数据集的基本操作方法
- 掌握matplotlib、pandas、seaborn绘制数据图表的方法
- 了解数据探查-数据清洗-模型训练-性能检验的基本机器学习应用过程
- 掌握集成学习模型训练及超参数优化的方法
- 理解特征选取的意义和初步的方法
环境
- Python 3.6+
- pandas, matplitlib, seaborn, skearn, xgboost
实验任务
从指定的数据源读取数据,对数据进行数据探查、数据预清洗、数据预处理,特征分析、选取合适的特征,构造分类模型,确定一个人的年收入是否超过50K。
- 数据来源:1994年美国人口普查数据库。(原始数据下载地址:https://archive.ics.uci.edu/ml/datasets/Adult )。数据存放在data目录中,其中,adult.data存放训练数据,adult.test存放测试数据。
- 特征列
- age:年龄,整数
- workclass:工作性质,字符串,包含少数几种取值,例如:Private、State-gov等
- education:教育程度,字符串,包含少数几种取值,例如:Bachelors、Masters等
- education_num:受教育年限,整数
- maritial_status:婚姻状况,字符串,包含少数几种取值,例如:Never-married、Divorced等
- occupation:职业,字符串,包含少数几种取值,例如:Sales、Tech-Support等
- relationship:亲戚关系,字符串,包含少数几种取值,例如:Husband、Wife等
- race:种族,字符串,包含少数几种取值,例如:White、Black等
- sex:性别,字符串,包含少数几种取值,例如:Female, Male
- capital_gain:资本收益,浮点数
- capital_loss:资本损失,浮点数
- hours_per_week:每周工作小时数,浮点数
- native_country:原籍,包含少数几种取值,例如:United-States, Mexico等
- 分类标签列:income
- >50K
- <=50K
链接:https://pan.baidu.com/s/1tkyLks_nNlMbz9N9PP-2CA?pwd=6688
提取码:6688
二、数据探查
熟悉数据,查看数据结构和数据分布情况
1. 读取数据文件,查看行列信息
- 文本(字符串)字段的Dtype属性为"object"
import numpy as np
import pandas as pd
train_data_path = 'adult.data'
test_data_path = 'adult.test' \
''
train_data = pd.read_csv(train_data_path, header=None) # 训练数据文件中不包含列名
test_data = pd.read_csv(test_data_path, header=None, skiprows=1) # 测试文件中的第一行数据无意义,应跳过
# 指定各个列的名称
col_labels = ['age', 'workclass', 'fnlwgt', 'education', 'education_num', 'marital_status',
'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss',
'hours_per_week', 'native_country', 'wage_class']
train_data.columns = col_labels
test_data.columns = col_labels
#打印通过info函数查看数据信息
print(train_data.info())
2. 查看数值类型列的数据描述信息
- 对于数值类型的列,可以分别查看每列的基本统计信息,例如:数据个数、均值、标准差、极值、四分位数、中位数
#打印查看数值列统计信息 哪一个函数获取统计信息?
print(train_data.describe())
3.以可视化的方式查看数值类型的取值分布情况
- 观察上面获取的数据统计信息,会发现什么问题?
- 在上一步骤中,capital_gain和capital_loss列的极小值、四分位数均为0,而极大值很大,这意味着其数据主要分布在0附近。
- 数据可视化可以直观看到数据的分布情况,可以通过分箱统计的方式查看数值分布
- 直方统计图是很直观的查看数值分布的方法。下面的代码将所有数值分成20个区间,然后统计每个区间中的数据个数
#from datashader.examples.streaming import df
import matplotlib.pyplot as plt
%matplotlib inline
numeric_columns = ['age','fnlwgt','education_num','capital_gain','capital_loss','hours_per_week']
#为numeric_colums列表中每一项单独绘制直方图。
#for 循环实现 绘图2行 3列 6个子图
for i in range(len(numeric_columns)):#列标签的长度循环
plt.subplot(2,3,i+1)#2行,3列的数据,并添加每一个标签
#获取数据
column_data = train_data[numeric_columns[i]]
#为当前子图添加标题添加每一个标题,赋值给column_data
plt.title(numeric_columns[i])
#绘制直方统计图 柱的数量bins=20 figsize:16,12
column_data.