机器学习预处理-表格数据的分析与可视化

news2024/12/16 14:19:46

机器学习预处理-表格数据的分析与可视化

最近在做一些模型部署的工作,但是发现对于数据的处理、分析、训练方面还是缺少一些系统的学习,因此抽空余时间分析总结一些使用python进行数据处理的实用案例,希望能够方便自己已经其他人的Ctrl C+V。

之前做稠密(表格)数据的处理都是使用一些现有的分析软件去做(如SPSS),学习成本低但是自由度比较受限,此处介绍使用python的处理。

此处的数据分析部分参考博客:【机器学习】最经典案例:房价预测(完整流程:数据分析及处理、模型选择及微调)

本文的数据集和代码下载:机器学习预处理-表格数据的分析与可视化-数据集和python文件

目录

  • 机器学习预处理-表格数据的分析与可视化
    • 1、数据下载
    • 2、数据查看
      • 2.1、查看表格数据头和数据案例
      • 2.2、总体查看数据大小、数据类型和空缺情况
      • 2.3、查看数值属性列的均值、最小最大值等信息
      • 2.4、绘制每列数据的分布情况
      • 2.5、绘制多维数据关系
      • 2.6、绘制两两间互相关关系图
      • 2.7、绘制相关性系数热力图
    • 3、代码
      • 3.1、01LoadDataSet.py
      • 3.2、02DataView.py

1、数据下载

(01LoadDataSet.py)
运行下面代码即可自动下载数据集(经典房价数据),但是由于目标的url在国外地址,可能需要科学上网工具,代码会自动下载数据集并解压:

import os
import tarfile
from urllib import request

DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/"
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"#网址位置
HOUSING_PATH = os.path.join("datasets", "housing")#存储位置

def fetch_housing_data(housing_url = HOUSING_URL, housing_path = HOUSING_PATH):
    os.makedirs(housing_path, exist_ok = True)
    tgz_path = os.path.join(housing_path, "housing.tgz")
    request.urlretrieve(housing_url, tgz_path)
    housing_tgz = tarfile.open(tgz_path)
    housing_tgz.extractall(path = housing_path)#解压
    housing_tgz.close()
    
fetch_housing_data()

下载得到的为tgz压缩格式,进行解压即可得到原始数据的csv格式
在这里插入图片描述

2、数据查看

(02DataView.py)

2.1、查看表格数据头和数据案例

运行下面代码,会打印表格csv数据的表头和5行案例数据,帮我我们快速了解表格数据的大致内容和格式:

import pandas as pd
import os

HOUSING_PATH = os.path.join("datasets", "housing")  # 存储位置
def load_housing_data(housing_path=HOUSING_PATH):
    csv_path = os.path.join(housing_path, "housing.csv")
    return pd.read_csv(csv_path)  # 返回 包含所有数据的pandas DataFrame对象

housing = load_housing_data()
print(housing.head())

在这里插入图片描述
但是,由于表格数据比较大,部分数据不能全部打印出来,推荐直接打开csv的表格文件进行查看,更加方便直观一些。
在这里插入图片描述

2.2、总体查看数据大小、数据类型和空缺情况

使用下面的代码可以直接打印出数据集的属性描述:

housing.info()#查看数据集属性描述,自动打印

在这里插入图片描述

2.3、查看数值属性列的均值、最小最大值等信息

使用下面的命令查看数据集每列的信息,此处直接打印会在输出窗口显示不完全,因此直接把数据输出为xlsx文件查看

# 查看数值属性列的均值、最小最大值等信息-结果导出为housing_describe.xlsx
housing_describe = housing.describe()
housing_describe.to_excel('housing_describe.xlsx')  # 保存到 Excel 文件

生成后的文件信息如下:
在这里插入图片描述
文件中各个行的数据解释如下:

  • count:非空(非NA/null)值的数量
  • mean:平均值,所有非空值的算术平均。
  • std:标准差,衡量数据的离散程度
  • min:最小值,数据中的最小值。 25%:第25百分位数,也称为下四分位数,表示数据中有25%的数据小于这个值
  • 50%(median):中位数,数据排序后位于中间的数。如果数据量是奇数,则中位数就是中间那个数;如果是偶数,则中位数是中间两个数的平均值
  • 75%:第75百分位数,也称为上四分位数,表示数据中有75%的数据小于这个
  • max:最大值,数据中的最大值。

2.4、绘制每列数据的分布情况

数字形式的数据绘图
实际中,我们往往需要观察每个数据的实际分布的情况,使用下面代码绘制分布图:

import matplotlib.pyplot as plt
housing.hist(bins = 50, figsize = (20,15))#各属性各自的分布:即处于横轴区间(x轴)的样本个数为多少(y轴)
plt.savefig('distribution01.png', dpi=300)#保存图片为png
plt.show()

运行得到的结果如下所示,还是比较美观的:
在这里插入图片描述
文字形式的数据显示
我们之前可以分析到“ocean_proximity”这一列的数据为字符串格式,对于字符格式的数据我们可以使用下面代码观察其分布:

print(housing["ocean_proximity"].value_counts())#查看ocean_proximity栏中有多少种分类

运行结果为:
在这里插入图片描述

2.5、绘制多维数据关系

三个自变量对应一个因变量
多维度数据关系的绘制需要根据具体情况来具体分析,此处选择影响房价的三个因素为例进行。从之前的原始数据的观察,此处绘制数据的自变量包含经度、纬度、人口密度,绘制数据的因变量就是房价数据

#房价分布, s-蓝色-人口数量,c-颜色-价格-(蓝-红)
housing.plot(kind = "scatter", x = "longitude", y = "latitude", alpha = 0.4,
             s = housing["population"]/100, label = "population", figsize = (10,7),
             c = "median_house_value", cmap = plt.get_cmap("jet"), colorbar = True,
            )
plt.legend()
plt.savefig('distribution02.png', dpi=300)#保存图片为png

绘制得到的图表如下所示,其中横纵坐标分别为经纬度,图中圆圈大小代表人口的密度,图中的颜色深浅代表房价的具体数值,可以看到美国沿海地区人口密度大,房价更高:
在这里插入图片描述

2.6、绘制两两间互相关关系图

说白了就是以其中一个数据为横坐标,另一个数据为纵坐标绘图

from pandas.plotting import scatter_matrix
attributes = ["median_house_value", "median_income", "total_rooms", "housing_median_age"]
scatter_matrix(housing[attributes], figsize = (12,8))
plt.savefig('correlation.png', dpi=300)#保存图片为png

从下面的第一列的第二行的图片可以看到,房价数据和收入的绘图有一定的线性关系,其余的数据的关系并不显著:
在这里插入图片描述

2.7、绘制相关性系数热力图

上一小节2.6、绘制两两间互相关关系图的绘制不太直观,可以使用相关性系数的热力图对两两变量的相关性进行分析,代码如下:

# 计算相关性系数矩阵
correlation_matrix = housing[['median_house_value', 'median_income', 'total_rooms', 'housing_median_age']].corr()
import seaborn as sns
# 设置 seaborn 样式
sns.set(style="white")
# 绘制相关性热力图
plt.figure(figsize=(8, 6))  # 设置图形大小
heatmap = sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', center=0)
plt.subplots_adjust(left=0.2, right=0.9, top=0.9, bottom=0.3)
# 添加标题和标签(可选)
plt.title('Correlation Heatmap')
# 显示图形
# plt.show()
# 保存图形为图片文件
plt.savefig('correlation_heatmap.png', dpi=300)

运行结果如下,可见收入和房价间的相关性确实比较大
在这里插入图片描述

3、代码

3.1、01LoadDataSet.py

import os
import tarfile
from urllib import request


DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/"
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"#网址位置
HOUSING_PATH = os.path.join("datasets", "housing")#存储位置

def fetch_housing_data(housing_url = HOUSING_URL, housing_path = HOUSING_PATH):
    os.makedirs(housing_path, exist_ok = True)
    tgz_path = os.path.join(housing_path, "housing.tgz")
    request.urlretrieve(housing_url, tgz_path)
    housing_tgz = tarfile.open(tgz_path)
    housing_tgz.extractall(path = housing_path)#解压
    housing_tgz.close()
    
fetch_housing_data()

3.2、02DataView.py

import pandas as pd
import os

HOUSING_PATH = os.path.join("datasets", "housing")  # 存储位置
def load_housing_data(housing_path=HOUSING_PATH):
    csv_path = os.path.join(housing_path, "housing.csv")
    return pd.read_csv(csv_path)  # 返回 包含所有数据的pandas DataFrame对象

housing = load_housing_data()
print(housing.head())


housing.info()#查看数据集属性描述


# 查看数值属性列的均值、最小最大值等信息-结果导出为housing_describe.xlsx
housing_describe = housing.describe()
housing_describe.to_excel('housing_describe.xlsx')  # 保存到 Excel 文件


import matplotlib.pyplot as plt
housing.hist(bins = 50, figsize = (20,15))#各属性各自的分布:即处于横轴区间(x轴)的样本个数为多少(y轴)
plt.savefig('distribution01.png', dpi=300)#保存图片为png
# plt.show()

print(housing["ocean_proximity"].value_counts())#查看ocean_proximity栏中有多少种分类


#房价分布, s-蓝色-人口数量,c-颜色-价格-(蓝-红)
housing.plot(kind = "scatter", x = "longitude", y = "latitude", alpha = 0.4,
             s = housing["population"]/100, label = "population", figsize = (10,7),
             c = "median_house_value", cmap = plt.get_cmap("jet"), colorbar = True,
            )
plt.legend()
plt.savefig('distribution02.png', dpi=300)#保存图片为png




from pandas.plotting import scatter_matrix
attributes = ["median_house_value", "median_income", "total_rooms", "housing_median_age"]
scatter_matrix(housing[attributes], figsize = (12,8))
plt.savefig('correlation.png', dpi=300)#保存图片为png

# 计算相关性系数矩阵
correlation_matrix = housing[['median_house_value', 'median_income', 'total_rooms', 'housing_median_age']].corr()
import seaborn as sns
# 设置 seaborn 样式
sns.set(style="white")
# 绘制相关性热力图
plt.figure(figsize=(8, 6))  # 设置图形大小
heatmap = sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', center=0)
plt.subplots_adjust(left=0.2, right=0.9, top=0.9, bottom=0.3)
# 添加标题和标签(可选)
plt.title('Correlation Heatmap')
# 显示图形
# plt.show()
# 保存图形为图片文件
plt.savefig('correlation_heatmap.png', dpi=300)

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

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

相关文章

鸿蒙项目云捐助第六讲鸿蒙App应用的首页导航资讯功能的实现

鸿蒙项目云捐助第六讲鸿蒙App应用的首页导航资讯功能的实现 前面的教程中已实现了启动页,登录页,注册页及首页的部分功能。这里有一些朋友提出问题,如何设置登录页面的背景图片。这里稍带说一个这个功能的实现。 一、登录页面的背景图片实现…

【Vue3】前端使用 FFmpeg.wasm 完成用户视频录制,并对视频进行压缩处理

强烈推荐这篇博客!非常全面的一篇文章,本文是对该博客的简要概括和补充,在不同技术栈中提供一种可行思路,可先阅读该篇文章再阅读本篇: FFmpeg——在Vue项目中使用FFmpeg(安装、配置、使用、SharedArrayBu…

17、ConvMixer模型原理及其PyTorch逐行实现

文章目录 1. 重点2. 思维导图 1. 重点 patch embedding : 将图形分割成不重叠的块作为图片样本特征depth wise point wise new conv2d : 将传统的卷积转换成通道隔离卷积和像素空间隔离两个部分,在保证精度下降不多的情况下大大减少参数量 2. 思维导图 后续再整…

金蝶云苍穹踩过的坑(慢慢更新)

IDEA不能用最新版,不然搜不到金蝶的插件。 我用的是2024.1.7/2023.1.7 IDEA里增加金蝶插件库的地址也变了,现在是 https://tool.kingdee.com/kddt/idea-updatePlugins.xml 金蝶云苍穹部署在服务器 MAC本地IDEA调试的时候,登录N次能成功一次…

springboot438校园志愿者管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统校园志愿者管理系统信息管理难度大,容错率低&…

高项 - 信息系统管理

个人总结,仅供参考,欢迎加好友一起讨论 博文更新参考时间点:2024-11-09 高项 - 章节与知识点汇总:点击跳转 文章目录 高项 - 信息系统管理管理方法管理基础规划和组织设计和实施运维和服务优化和持续改进 管理要点数据管理运维管…

05、GC基础知识

JVM程序在跑起来之后,在数据的交互过程中,就会有一些数据是过期不用的,这些数据可以看做是垃圾,JVM中,这些垃圾是不用开发者管的,它自己会有一套垃圾回收系统自动回收这些内存垃圾,以备后面继续…

【前端开发】HTML+CSS网页,可以拿来当作业(免费开源)

HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content_lizhongyu"widthdevice-width, initial-scale1.0"><title>小兔鲜儿-新鲜、惠民、快捷<…

【Unity3D】无限循环列表(扩展版)

基础版&#xff1a;【Unity技术分享】UGUI之ScrollRect优化_ugui scrollrect 优化-CSDN博客 using UnityEngine; using UnityEngine.UI; using System.Collections.Generic;public delegate void OnBaseLoopListItemCallback(GameObject cell, int index); public class BaseLo…

Git-基础操作命令

目录 Git基础操作命令 case *查看提交日志 log 版本回退 get add . Git基础操作命令 我们创建并且初始化这个仓库以后&#xff0c;我们就要在里面进行操作。 Git 对于文件的增删改查存在几个状态&#xff0c;这些修改状态会随着我们执行Git的命令而发生变化。 untracked、…

Flutter Navigator2.0的原理和Web端实践

01 背景与动机 在Navigator 2.0推出之前&#xff0c;Flutter主要通过Navigator 1.0和其提供的 API&#xff08;如push(), pop(), pushNamed()等&#xff09;来管理页面路由。然而&#xff0c;Navigator 1.0存在一些局限性&#xff0c;如难以实现复杂的页面操作&#xff08;如移…

【容器】k8s学习笔记基础部分(三万字超详细)

概念 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定义资源使…

PostgreSQL 常用运维SQL整理

一、查询并杀会话 -- 查询会话 select pid,usename,client_addr,client_port,query_start,query,wait_event from pg_stat_activity; -- 杀会话 select pg_terminate_backend(pid号); -- 使用如下命令自动生成杀会话语句 select datid,datname,pid,usesysid,usename,applicat…

前端0基础用Cursor完成管理系统页面 - 1

Cursor下载 下载链接: https://www.cursor.com/ Hello World! 作为完全不会前端的人&#xff0c;首先需要让AI帮我们搭建一个HelloWorld界面 确定语言框架 首先要给AI框定好前端语言和框架&#xff0c;由于AI的物料大量来自网上的开源项目&#xff0c;所以越是受欢迎的开源…

系统组件优化的思考框架

我之前的文章里有分享过自己总结的做技术选型的思考框架&#xff0c;本文将会分享一下我总结的做系统组件调优/优化的思考框架。 组件优化的思考框架 常见的互联网架构基本离不开数据库、缓存、消息队列、搜索、数据处理等等各种组件&#xff0c;虽然组件的形态不一、功能不同…

Linux shell的七大功能 ---自动补齐、管道机制、别名

1、自动补齐---TAB 输入命令的前几个字符&#xff0c;按下tab键&#xff0c;会自动补齐完整的字符&#xff0c;若有多个命令、文件或目录的前几个字符相同&#xff0c;按下tab将会全部列举出来 2、管道机制---| 例如&#xff1a;ls -- help |more 将有关ls的帮助内容传递给“|…

计算机网络-基础概念(HTTP,TPC/IP, DNS,URL)

HTTP不同的版本 HTTP0.9于1990年问世&#xff0c;此时HTTP并没有作为正式的标准被建立。HTTP正式被公布是1996年的5月&#xff0c;版本命名为HTTP/1.0。HTTP1.1&#xff0c;1997年1月公布&#xff0c;目前仍然是主流版本的HTTP协议版本。 TCP/IP 通常使用的网络是在TCP/IP协…

12.3【JAVA-EXP4-DEBUGSTUDY】

java升级版本 JDK 1.8 是 Java Development Kit 的第 8 版本&#xff0c;发布于 2014 年 3 月 18 日。这个版本是 Java SE&#xff08;Standard Edition&#xff09;的一部分&#xff0c;包含了 Java 编程语言的实现、编译器、调试工具和其他相关组件 JDK 1.8: 这里的 1.8 表…

在Windows上运行mediapipe:适合新手的AI框架

一、mediapipe简介 mediapipe可以被视为谷歌版的onnx&#xff0c;其设计目的在于跨平台部署AI模型&#xff0c;并提供一系列工具来监测不同平台、不同设备运行人工智能模型时的性能表现。 尽管mediapipe已经陆续支持训练自定义模型&#xff0c;但博主更推荐使用Pytorch/Tenso…

自然语言处理:我的学习心得与笔记

Pytorch 1.Pytorch基本语法 1.1 认识Pytorch 1.2 Pytorch中的autograd 2.Pytorch初步应用 2.1 使用Pytorch构建一个神经网络 2.2 使用Pytorch构建一个分类器 小节总结 学习了什么是Pytorch. 。Pytorch是一个基于Numpy的科学计算包,作为Numpy的替代者,向用户提供使用GPU强大…