【数据预处理】基于Pandas的数据预处理技术【california_housing加州房价数据集】_后9个任务

news2024/11/22 13:38:01

文章目录

  • 一.需求分析
  • 二.需求解决
    • 2.1 对第一个特征(收入中位数)排序后画散点图
    • 2.2 对第一个特征(收入中位数)画分位数图并分析
    • 2.3 【选做】对所有特征画分位数图并进行分析
    • 2.4 使用线性回归方法拟合第一个特征(收入中位数)
    • 2.5 【选做】使用局部回归(Loess)曲线(用一条曲线拟合散点图)方法拟合第一个特征(收入中位数)数据
    • 2.6 对第一个特征(收入中位数)按平均房间数分两段画分位数-分位数图并分析
    • 2.7 画直方图,查看各个特征的分布和数据倾斜情况
    • 2.8 【选做】对所有特征画直方图,查看数据的分布和数据倾斜情况
    • 2.9 寻找所有特征之间的相关性并找出相关性大于 0.7 的特征对,做特征规约
    • 2.10 总结

一.需求分析

前七个任务的解决方案,请查看上篇文章:

image-20221225235650468

本文主题:基于Pandas的数据预处理技术

本次任务共分为16个任务,将其分为前七个任务和后9个任务,本文探讨其后9个任务。

本文的源代码下载链接:

基于Pandas的数据预处理技术-源代码-机器学习文档类资源-CSDN文库

https://download.csdn.net/download/weixin_52908342/87337635

本次实验内容:

  1. 对第一个特征(收入中位数)排序后画散点图

  2. 对第一个特征(收入中位数)画分位数图并分析

  3. 【选做】对所有特征画分位数图并进行分析

  4. 使用散点图、使用线性回归方法拟合第一个特征(收入中位数)并分析

  5. 【选做】使用局部回归(Loess)曲线(用一条曲线拟合散点图)方法拟合第一个特征(收入中位数)数据

  6. 对第一个特征(收入中位数)画分位数-分位数图并分析

  7. 对第一个特征(收入中位数)画直方图,查看数据的分布和数据倾斜情况

  8. 【选做】对所有特征画直方图,查看数据的分布和数据倾斜情况

  9. 寻找所有特征之间的相关性并找出相关性大于 0.7 的特征对,做特征规约

二.需求解决

2.1 对第一个特征(收入中位数)排序后画散点图

对第一个特征(收入中位数)数据排序,画散点图,画x,y坐标轴标签

x_sorted=np.sort(df.iloc[:,0].values)
plt.scatter([i for i in range(X.shape[0])],x_sorted)
plt.xlabel('Count')
plt.ylabel('sorted'+housing['feature_names'][0])
plt.show()

运行结果如下

img

2.2 对第一个特征(收入中位数)画分位数图并分析

对第一个特征(收入中位数)画分位数图并分析:

对第一个特征(收入中位数)数据排序,画散点图,画中位数点,画x,y坐标轴标签

x_sorted=np.sort(df.iloc[:,0].values)
plt.scatter([i for i in range (X.shape[0])],x_sorted)
plt.scatter([round(X.shape[0]/4),round(X.shape[0]/2),round(X.shape[0]*3/4)],[np.quantile(x_sorted,0.25),np.quantile(x_sorted,0.5),                                                                            np.quantile(x_sorted,0.75)],color='red')
plt.xlabel('Count')
plt.ylabel('sorted'+housing['feature_names'][0])
plt.show()

运行结果如下:

img

2.3 【选做】对所有特征画分位数图并进行分析

【选做】对所有特征画分位数图并进行分析解决方案如下:

人均收入(MedInc)、房龄(HouseAge)、房间数(AveRooms)、卧室数(AveBedrooms)、小区人口数(Population)、

房屋居住人数(AveOccup)、小区经度(Longitude)、小区纬度(Latitude)

import matplotlib.pyplot as plt
plt.figure(figsize=(12,12))
for i in range(8):
    plt.subplot(4, 2, i+1)
    # 对第一个特征(收入中位数)数据排序
    x_sorted=np.sort(df.iloc[:,i].values)
    # 画散点图
    plt.scatter([i for i in range (X.shape[0])],x_sorted)
    # 画中位数点
    plt.scatter([round(X.shape[0]/4),round(X.shape[0]/2),round(X.shape[0]*3/4)],[np.quantile(x_sorted,0.25),np.quantile(x_sorted,0.5),
                                                                                np.quantile(x_sorted,0.75)],color='red')
    # 画x,y坐标轴标签
    plt.xlabel('Count')
    plt.ylabel('sorted'+housing['feature_names'][0])
plt.show()

运行结果如下:

img

上图可以看到:8个特征的分位数图。

2.4 使用线性回归方法拟合第一个特征(收入中位数)

使用线性回归方法拟合第一个特征(收入中位数)解决方案如下:

准备数据:

X_list=[i for i in range(X.shape[0])]

转换为np.array一维向量

X_array=np.array(X_list)

转换为矩阵

X_reshape=X_array.reshape(X.shape[0],1)

对第一个特征(收入中位数)排序

x_sorted=np.sort(df.iloc[:,0].values)

线性回归

from sklearn import linear_model
linear=linear_model.LinearRegression()

进行线性回归拟合

linear.fit(X_reshape,x_sorted)

对训练结果做拟合度评分

print("training score:",linear.score(X_reshape,x_sorted))

画散点图

plt.scatter(X_list,x_sorted)

使用sklearn线性回归的predict函数计算预测值

y_predict=linear.predict(X_reshape)

画线性回归算法拟合的直线

plt.plot(X_reshape,y_predict,color='red')
plt.show()

运行结果如下:

img

2.5 【选做】使用局部回归(Loess)曲线(用一条曲线拟合散点图)方法拟合第一个特征(收入中位数)数据

指定默认字体:解决plot不能显示中文问题,解决保存图像是负号’-'显示为方块的问题

pl.rcParams['font.sans-serif'] = ['STZhongsong']     
pl.rcParams['axes.unicode_minus'] = False           

一般来说,两个变量之间的关系非常微妙,仅用线性和曲线参数方程来描述是不够的,因此此时需要非参数回归。非参数方法和参数方法的区别在于,在分析之前预测是否存在一些限制。例如,如果我们认为特征和响应变量之间存在线性关系,我们可以使用线性方程拟合。我们只需要找到方程的系数,这是一种参数化方法,例如前面提到的线性回归和多项式回归。如果我们直接从数据中进行分析,这是一种非参数方法。因为没有限制,所以无论曲线关系如何复杂,用非参数方法拟合的曲线都能更好地描述变量之间的关系。
黄土(局部加权区域)是一种非参数的局部回归分析方法。它主要将样本划分为小单元,对区间中的样本进行多项式拟合,并重复此过程以获得不同区间中的加权回归曲线。最后,将这些回归曲线的中心连接在一起,形成一条完整的回归曲线。具体流程如下:

  • 确定拟合点的数量和位置
  • 以拟合点为中心确定k个最近点
  • 通过权重函数计算k个点的权重
  • 加权线性回归多项式拟合(一次或二次)
  • 对所有拟合点重复上述步骤
import math
import numpy as np
import statsmodels.api as sm
lowess = sm.nonparametric.lowess
import pylab as pl

# 准备数据
X_list=[i for i in range(X.shape[0])]
# 转换为np.array一维向量
X_array=np.array(X_list)
# 转换为矩阵
X_reshape=X_array.reshape(X.shape[0],1)
# 对第一个特征(收入中位数)排序
x_sorted=np.sort(df.iloc[:,0].values)

yest = lowess(X_list,x_sorted, frac=0.01)[:,0]
print(yest)
# print(java1.sort)
pl.clf()
# plt.scatter(X_list,x_sorted)
plt.scatter(X_list,x_sorted,c="red", marker='o')
pl.plot(X_list, yest, label='y pred')
plt.xlabel('Count')
plt.ylabel('收入中位数')
# plt.legend(loc=1)
pl.legend()
plt.show()

运行结果如下:

img

img

2.6 对第一个特征(收入中位数)按平均房间数分两段画分位数-分位数图并分析

对第一个特征按AveRooms平均房间数的平均值划分为两段,画分位数-分位数图:

import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(5,5))

对所有特征按AveRooms平均房间数的平均值划分为两段

df_new1=df[df['AveRooms']<=df['AveRooms'].mean()]
df_new2=df[df['AveRooms']>df['AveRooms'].mean()]

按照划分的两段对第一个特征排序

part1=np.sort(df_new1.iloc[:,0].values)[:df_new2['AveRooms'].count()]
part2=np.sort(df_new2.iloc[:,0].values)[:df_new2['AveRooms'].count()]

设置坐标轴刻度区间一致,画45°线

plt.xlim(part2[0],part2[-1])
plt.ylim(part2[0],part2[-1])
plt.plot([part2[0],part2[-1]],[part2[0],part2[-1]])

画分位数-分位数图

plt.scatter(part1,part2)
plt.scatter([np.quantile(part1,0.25),np.quantile(part1,0.5),np.quantile(part1,0.75)],      [np.quantile(part2,0.25),np.quantile(part2,0.5),np.quantile(part2,0.75)],color='red')
plt.show()

运行截图如下:

img

2.7 画直方图,查看各个特征的分布和数据倾斜情况

画直方图,查看各个特征的分布和数据倾斜情况。这个需求十分简单:

绘制特征1的直方图

plt.hist(X[:,0],edgecolor='k')
plt.show()

运行结果如图:

img

2.8 【选做】对所有特征画直方图,查看数据的分布和数据倾斜情况

【选做】对所有特征画直方图,查看数据的分布和数据倾斜情况,需求解决方案如下:

人均收入(MedInc)、房龄(HouseAge)、房间数(AveRooms)、卧室数(AveBedrooms)、小区人口数(Population)、

房屋居住人数(AveOccup)、小区经度(Longitude)、小区纬度(Latitude)

import matplotlib.pyplot as plt
plt.figure(figsize=(12,12))
for i in range(8):
    plt.subplot(4, 2, i+1)
    plt.hist(X[:,i],edgecolor='k')
    plt.xlabel('Count')
    plt.ylabel('sorted'+housing['feature_names'][0])
plt.show()

运行结果如下:

img

2.9 寻找所有特征之间的相关性并找出相关性大于 0.7 的特征对,做特征规约

寻找所有特征之间的相关性并找出相关性大于 0.7 的特征对,做特征规约,需求解决方案如下:

for column in df.columns:
    correlations_data=df.corr()[column].sort_values()
    print('%s:'%column)
    for key in correlations_data.keys():
        if key!=column and abs(correlations_data[key])>=0.7:
            print("      %s:" %key,correlations_data[key])

运行截图如下:

img

2.10 总结

本次实验收获非常的大,学习到了检测是否有空值,对数据集做中心化度量,对数据集做离散化度量,包括散点图,分位数图、分位数-分位数图、包括题目要求的所有选做题目,包括局部回归的理解和使用等等,都有了较深刻的理解和运用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于c# asp.net电子病历管理系统的设计与实现

摘 要 网络的广泛应用给生活带来了十分的便利。所以把电子病历管理与现在网络相结合&#xff0c;利用net语言建设电子病历管理系统&#xff0c;实现电子病历管理的信息化。则对于进一步提高医院的发展&#xff0c;丰富电子病历管理经验能起到不少的促进作用。 电子病历管理系统…

AbstractQueueSynchronizer

AbstractQueueSynchronizer AbstractQueueSynchronizer 是基于 FIFO线程等待队列 的一个同步器开发框架。 这篇文章首先介绍同步器概念&#xff0c;然后介绍AQS的结构原理 什么是Synchronizer&#xff08;同步器&#xff09; 并发环境下&#xff0c;Synchronizer用于实现线…

Windows和Mac系统实现本地部署WebPageTest工具

在项目开发或者测试的过程中&#xff0c;由于没有上线&#xff0c;我们在公网上无法访问我们的网站&#xff0c;但同时我们又需要查看浏览器性能&#xff0c;这样我们就需要在本地部署WebPageTest工具以协助进行性能测试 具体实现步骤&#xff1a; Windows系统&#xff1a; …

FFT求多项式乘积

之前在b站上看到了一些介绍FFT的视频 《快速傅里叶变换(FFT)——有史以来最巧妙的算法&#xff1f;》 《这个算法改变了世界》 于是打算写一篇记录一下qwq&#xff08;本博客中的截图基本上来源于第一个视频&#xff09; Fast Fourier Transform 是一种能在O(nlogn)O(nlogn)…

企业营销数字化转型:如何转型、如何选品、如何用好?

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图清华大学256页PPT元宇宙研究报告.pdf&#xff08;附下载链接&#xff09;…

【LeetCode】1759. 统计同构子字符串的数目

统计同构子字符串的数目 题目描述 给你一个字符串 s &#xff0c;返回 s 中 同构子字符串 的数目。由于答案可能很大&#xff0c;只需返回对 109 7 取余 后的结果。 同构字符串 的定义为&#xff1a;如果一个字符串中的所有字符都相同&#xff0c;那么该字符串就是同构字符串…

自定义报表-FineReport JS实现隐藏Tab页

1. 概述 1.1 问题描述 在实际项目中&#xff0c;使用决策报表的时候&#xff0c;有时会用到在决策报表参数面板获取报表控件的值&#xff0c;那么该如何实现呢&#xff1f; 1.2 实现思路 使用 JS 获取报表主体的控件值&#xff1a; _g().getWidgetByName("area").…

【金猿人物展】数睿数据创始人兼CEO穆鸿:大数据价值创造关键在于应用普惠...

‍穆鸿本文由数睿数据创始人兼CEO穆鸿撰写并投递参与“数据猿年度金猿策划活动——2022大数据产业趋势人物榜单及奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业事情还得从我2022年这一年经历的一些事情谈起&#xff0c;由于工作的原因&#xff0c;我要经常往返…

Python量化交易04——基于机器学习的交易策略

参考书目:深入浅出Python量化交易实战 学量化肯定要用的上机器学习这种强大的预测技术。本次使用机器学习构建一些简单的预测进行量化交易&#xff0c;使用Python进行回测。 获取数据 import pandas as pd import tushare as ts import numpy as npfrom sklearn.neighbors imp…

线程池设计与实现C

线程池实现 结构设计 先上图&#xff1a; 参数 线程池&#xff1a; 包含一个执行队列、一个任务队列mutex用来在多个线程取任务时锁任务队列&#xff0c;cond用来在任务队列为空时锁任务队列 如线程A锁了任务队列&#xff0c;去取任务时&#xff0c;又发现任务队列为空&…

【C++求解数学题】大圆圈里面三角形个数相等

本文介绍的问题是一道来自于二年级&#xff08;上&#xff09;数学的练习题。 问题 在下图中画8个Δ\DeltaΔ,使每个大圆圈里都有4个Δ\DeltaΔ. 示例&#xff1a; 每个大圆圈里面均有4个Δ\DeltaΔ. 方法 按照“变量-范围-条件”的三段式穷举法解题框架&#xff0c;对…

分布式系列之聊聊Nginx实现原理

Nginx作为开源的轻量级的HTTP服务器&#xff0c;广泛应用于分布式应用架构中。本文简要介绍了Nginx的特点及使用场景、Nginx的进程模型和请求处理流程&#xff0c;并结合不同场景进行配置&#xff0c;对Nginx的架构和实现原理有个初步的了解。 1、Nginx是什么 Nginx&#xff0…

Echarts之甘特图type: ‘custom‘参数详解

甘特图 const groupData XEUtils.groupBy(data, "eqpName"); //分组后的数据 const yAxisData Object.keys(groupData); const seriesData Object.keys(groupData).map((item, index) > {let arr [];groupData[item].forEach((GItem) > {arr.push([index,f…

Graphviz安装向导及入门指南

目录 1、首先在官网下载graphviz 2、安装。 3、测试并在Windows命令行中使用 4、在Python中使用 5、在自带的gvedit.exe 程序中使用 6、在语雀中使用 7、绘制一棵简单的二叉树 8、详细语法介绍 8.1 带标签 8.2 修改方框颜色和形状 8.3子视图 8.4 结构视图 8.5 …

【网络安全】Centos7安装杀毒软件----ClamAV

一、ClamAV介绍 Clam AntiVirus是一个Linux系统上使用的反病毒软件包。主要应用于邮件服务器&#xff0c;采用多线程后台操作&#xff0c;可以自动升级病毒库。 二、安装 1.下载rpm wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 2.升级epe…

4.1、网络层概述

1、主要任务 网络层的主要任务是实现网络互连\color{red}实现网络互连实现网络互连&#xff0c;进而实现数据包在各网路之间的传输\color{red}实现数据包在各网路之间的传输实现数据包在各网路之间的传输 例如&#xff1a; 这些异构型网络若只是需要各自内部通信&#xff0c…

高质量发展指标构建:全国各省高质量发展需求(2014-2021年)

高质量发展是坚持更高层次和更高水平对外开放的发展。中国改革开放四十年的实践充分证明&#xff0c;不断扩大对外开放是推动中国经济社会发展的重要动力&#xff0c;是实现国家繁荣富强的根本出路。因此&#xff0c;在中国经济发展的新时代&#xff0c;推动新一轮高水平开放&a…

docker logs实时查看日志tail

docker logs实时查看日志tail docker logs -f -t --since="2017-05-31" --tail=10 container说明: --since : 指定输出日志开始日期。 -f : 查看实时日志 -t : 查看日志产生的时间戳 -tail=10 : 查看最后的10条日志。 container : 容器名docker logs -f --until=2s说…

Docker常用操作命令总结(一)

文章目录一、Docker的应用场景二、Docker 的优点三、Docker 架构四、安装Docker1、更新 apt 包索引2、安装docker3、安装完成之后&#xff0c;运行命令sudo docker info&#xff0c;检查安装状态4、有可能&#xff0c;第一次需要手动启动服务.就需要执行下面的命令&#xff0c;…

LabVIEW如何减少下一代测试系统中的硬件过时4

LabVIEW如何减少下一代测试系统中的硬件过时4 DSSP Class Definition DSSP父类定义有三种不同类型的函数:仅父类、公共类和基于度量的函数。DSSP父类&#xff0c;DSSP.Lvclass包含所有子类函数的超集&#xff0c;加上父类特有的一些函数。DSSP父类的单个子实例(例如AgSigGen.…