Python数据分析与机器学习----收入的预测分析

2023-10-27

一、题目

利用age、workclass、…、native_country等13个特征预测收入是否超过50k,是一个二分类问题。

二、训练集

32561个样本,每个样本14个特征,其中6个连续性特征、9个离散型特征
在这里插入图片描述

三、测试集

16281个样本,每个样本14个特征,
即在测试集中,根据age等14个特征,预测income是否超过50k,二分类问题。

四、说明

部分特征的值为“?”,表示缺失值,需要对其先处理。

五、实验过程和结果

import numpy as np
import pandas as pd
train = pd.read_csv('data/data40587/train.csv')
train.replace(' ?', np.nan, inplace=True)
print(train.isnull().sum())
#用众数进行替换缺失值
train.fillna(value = {'Workclass':train.Workclass.mode()[0],
                              'Occupation':train.Occupation.mode()[0],
                              'Native country':train['Native country'].mode()[0]}, inplace = True)
# 数据的探索性分析、数值型的统计描述
print(train.describe())
# 数据的探索性分析、离散型的统计描述
print(train.describe(include =[ 'object']))

在这里插入图片描述

# 导入绘图模块
import matplotlib.pyplot as plt
# 设置绘图风格
plt.style.use('ggplot')
# 设置多图形的组合
fig, axes = plt.subplots(2, 1)
# 绘制不同收入水平下的年龄核密度图,    针对数值型
train['Age'][train.Income == ' <=50K'].plot(kind = 'kde', label = '<=50K', ax = axes[0], legend = True, linestyle = '-')
train['Age'][train.Income == ' >50K'].plot(kind = 'kde', label = '>50K', ax = axes[0], legend = True, linestyle = '--')
# 绘制不同收入水平下的周工作小时数和密度图
train['Hours/Week'][train.Income == ' <=50K'].plot(kind = 'kde', label = '<=50K', ax = axes[1], legend = True, linestyle = '-')
train['Hours/Week'][train.Income == ' >50K'].plot(kind = 'kde', label = '>50K', ax = axes[1], legend = True, linestyle = '--')
# 显示图形
plt.show()

在这里插入图片描述

import seaborn as sns
# 构造不同收入水平下各种族人数的数据    针对离散型
race = pd.DataFrame(train.groupby(by = ['Race','Income']).aggregate(np.size).loc[:,'Age'])
# 重设行索引
race = race.reset_index()
# 变量重命名
race.rename(columns={'Age':'counts'}, inplace=True)
# 排序
race.sort_values(by = ['Race','counts'], ascending=False, inplace=True)

# 构造不同收入水平下各家庭关系人数的数据
relationship = pd.DataFrame(train.groupby(by = ['Relationship','Income']).aggregate(np.size).loc[:,'Age'])
relationship = relationship.reset_index()
relationship.rename(columns={'Age':'counts'}, inplace=True)
relationship.sort_values(by = ['Relationship','counts'], ascending=False, inplace=True)

# 设置图框比例,并绘图
plt.figure(figsize=(9,5))
sns.barplot(x="Race", y="counts", hue = 'Income', data=race)
plt.show()

plt.figure(figsize=(9,5))
sns.barplot(x="Relationship", y="counts", hue = 'Income', data=relationship)
plt.show()

在这里插入图片描述

# 离散变量的重编码
for feature in train.columns:
    if train[feature].dtype == 'object':
        train[feature] = pd.Categorical(train[feature]).codes
print(train.head())
# 删除变量
train.drop(['Education','fnlgwt'], axis = 1, inplace = True)
#训练集拆分
train_arr=np.array(train) #转换为数组
X_train=np.delete(train_arr,12,axis=1)
i_=[0,1,2,3,4,5,6,7,8,9,10,11]
y_train=np.delete(train_arr,i_,axis=1)
# 导入k近邻模型的类
from sklearn.neighbors import KNeighborsClassifier
# 构建k近邻模型
kn = KNeighborsClassifier()
kn.fit(X_train, y_train)
print(kn)
#整理测试数据集

# 加载测试数据集
test = pd.read_csv('data/data40587/test.csv')
test.replace(' ?', np.nan, inplace=True)
print(test.isnull().sum())
#用众数进行替换缺失值
test.fillna(value = {'Workclass':test.Workclass.mode()[0],
                              'Occupation':test.Occupation.mode()[0],
                              'Native country':test['Native country'].mode()[0]}, inplace = True)
# 离散变量的重编码
for feature in test.columns:
    if test[feature].dtype == 'object':
        test[feature] = pd.Categorical(test[feature]).codes

# 删除变量
test.drop(['Education','fnlgwt'], axis = 1, inplace = True)
print(test.head())
# 预测测试集
kn_pred = kn.predict(test)
#保存结果
test1 = pd.read_csv('data/data40587/test.csv')
test1['Income'] =kn_pred
test1.to_csv("20200618.csv",index=None)

结果
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python数据分析与机器学习----收入的预测分析 的相关文章

随机推荐

  • keil调试查看ROM或RAM

    Ctrl F5或点击调试按钮进入调试界面 在工具栏上点击Memory Windows 则右下角出现Memory1的页面 默认出现的是ROM的查看界面 在Address一栏输入十六进制的地址即可查看ROM里面的数值 点击Memory Wind
  • 动态修改JavaBean中的注解的参数值

    我这里有一个需求需要修改Person类中的一个属性上的注解的值进行修改 例如 public class Person private int age ApiParam access lala private String name get
  • 怎么做验收测试?

    本文是本系列文章的第四篇 也是最后一篇 主要讲述我们在Lyft面对越来越多的开发人员和服务时 如何扩展开发实践 第一部分 开发和测试环境的历史 第二部分 加快本地开发的一些优化 第三部分 预发布环境通过重载形式来扩展服务网格 第四部分 怎么
  • halcon给图像添加不同颜色的透明遮罩(叠加透明ROI)

    目录 前言 方法 1 给单通道图像添加透明遮罩 2 给RGB图像添加透明遮罩 参考链接 前言 最近想给图片叠加上透明region方便展示 以前一直用overpaint region算子搭配add image就行 这次用单通道图竟然叠加出来的
  • typec耳机知识介绍

    数字耳机和模拟耳机 模拟耳机即我们的常见的3 5mm接口的耳机 包括左右声道 地或者mic 如左图 数字耳机 右图 包含一个usb声卡 DAC ADC amp 模拟耳机 当数字耳机接入到手机 otg 或者电脑后 手机或者电脑识别到了usb设
  • 如何在本地测试ajax时间,为什么在本地测试ajax反应很慢

    在本地测试ajax接收分页数据 要反应1s左右 以上 但是放到服务器上就100ms到 900多ms之间 有什么好的办法解决ajax获取速度慢吗 已经把分页数据换成json了 没多大改善 数据大小显示是在2 9kb 耗时1 03s 处理逻辑就
  • C++ 虚函数、虚函数表剖析

    C 中的虚函数的作用主要是实现了多态的机制 关于多态 简而言之就是用父类型别的指针指向其子类的实例 然后通过父类的指针调用实际子类的成员函数 那么问题来了C 又是如何实现这种技术的呢 C 使用了一种动态绑定的技术 这个技术的核心是虚函数表
  • jQuery中delegate和on的用法与区别详细解析

    在jQuery1 7中 delegate 已被 on 取代 对于早期版本 它仍然使用事件委托的最有效手段 在事件绑定和委派 delegate 和on在一般情况下 这两种方法是等效的 delegate 指定的元素 属于被选元素的子元素 添加一
  • MySQL报错注入函数汇总

    常用函数 字符串连接函数 将多个字符串连接成一个字符串 当中间字符串有一个为空时 最后结果也为空 concat str1 str2 str3 concat ws 指定分隔符 str1 str2 str3 开头指定分隔符 与concat 不同
  • cpp课程设计实验题:定义Staff(员工)类,由Staff分别派生出Saleman(销售员)类和Manager(经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生

    定义Staff 员工 类 由Staff分别派生出Saleman 销售员 类和Manager 经理 类 再由Saleman 销售员 类和Manager 经理 类采用多重继承方式派生出新类SaleManager 销售经理 类 各类之间的继承关系
  • cmake中使用find_package查找vcpkg中的BOOST 包遇到的坑

    有人说vcpkg对于boost库暂时不支持find package 链接 其实是支持的 set BOOST VERSION 1 78 find package Boost REQUIRED COMPONENTS graph program
  • 用观测数据推断因果的问题(一文搞懂混杂因素、辛普森悖论)

    聊到因果推断与相关性的关系 大家其实都已经有一个认知叫做 相关性 因果性 但学界从统计推断发展到后来因果推断是经历了一个漫长的过程 直到今天 我们仍然基础的对数据的处理和认知离不开统计推断的方法 所以学习了解用观测数据做因果推断可能导致的问
  • N皇后问题(代码)

    N皇后问题 include lt stdio h gt include lt math h gt define N 4 判断第k个皇后目前放置位置是否与前面的皇后冲突 in isplace int pos int k int i for i
  • java学习小随笔—类中赋值的错误认知

    在java的类中 只能声明变量和方法 不能赋值 public class people int n 10 m m 10 上面的代码就是错误的 int n 10 m 语句中 属于声明语句 n在声明的同时初始化 m 10 属于赋值语句 在jav
  • kali无法连接外网

    今天用虚拟机时 无法连接外网 在网上搜了各种解决方法 windows下的VM服务都开了 其他也没有什么错 虚拟机使用NAT模式 查看我的虚拟网络编辑器 发现我的NAT模式是在113网段下的 而我linux的ip地址是在137网段下的 但是我
  • 对浏览器内核的理解

    简单来说 浏览器内核是浏览器的核心 也称 渲染引擎 用来解释网页语法并渲染到网页上 浏览器内核决定了浏览器该如何显示网页内容以及页面的格式信息 浏览器内核又可以分成两部分 渲染引擎和JS引擎 渲染引擎 负责获取网页的内容并显示 不同的浏览器
  • git修改commit日志

    由于公司对版本提交日志进行检查 如果不符合要求 则push失败 以下是修改commit日志的方法 1 进入到提交代码文件所在目录 即git所在目录下 cd app repository 2 git log git log commit bf
  • Rabbit MQ详解

    一 什么是RabbitMQ 答 RabbitMQ简称MQ是一套实现了高级消息队列协议的开源消息代理软件 简单来说就是一个消息中间件 是一种程序对程序的通信方法 其服务器也是以高性能 健壮以及可伸缩性出名的Erlang语言编写而成 二 Rab
  • nc文件经度从0-360更改为-180到180,并保存

    从0 360改为 180到180 import xarray as xr rawnc path InPath ds xr open dataset rawnc path lon name lon 你的nc文件中经度的命名 ds longit
  • Python数据分析与机器学习----收入的预测分析

    一 题目 利用age workclass native country等13个特征预测收入是否超过50k 是一个二分类问题 二 训练集 32561个样本 每个样本14个特征 其中6个连续性特征 9个离散型特征 三 测试集 16281个样本