机器学习项目实战-能源利用率 Part-1(数据清洗)

news2024/12/28 20:37:49

1. 项目背景

2009年的《当地法案84号》,或纽约市基准法案,要求对能源和用水量进行年度基准测试和披露信息。被覆盖的财产包括单个建筑物的税收地块,其总建筑面积大于50,000平方英尺(平方英尺),以及具有超过100,000平方英尺总建筑面积的多个建筑物的税收地块。从2018年开始,《纽约市基准法案》还将包括总面积大于25,000平方英尺的财产。

能源管理局的ENERGY STAR Portfolio Manager工具计算指标,建筑业主进行自我报告。数据的公开可用性使得建筑的绩效能够进行本地和全国比较,激励最精确的能源使用基准测试,并为能源管理决策提供信息。

2. 数据清洗与格式转换

这里的数据 NYC_Property_Energy.csv可私信给作者获取。

import warnings
# warning.filterwarnings('ignore')

import pandas as pd
import numpy as np
pd.set_option('display.max_columns', 60)
pd.options.mode.chained_assignment = None
# No warnings about setting value on copy of slice

import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.size'] = 24
from IPython.core.pylabtools import figsize

import seaborn as sns
sns.set(font_scale = 2)

data = pd.read_csv('./data/NYC_Property_Energy.csv')
data.head()

代码解释:

  • import pandas as pdimport numpy as np 导入 Pandas 和 NumPy 库。
  • pd.set_option('display.max_columns', 60) 设置 Pandas 显示的最大列数为 60。
  • pd.options.mode.chained_assignment = None 禁止对 Pandas 切片进行警告提示。
  • import matplotlib.pyplot as plt 导入 Matplotlib 库用于绘图。
  • %matplotlib inline 魔法命令将 Matplotlib 图表嵌入到 Jupyter Notebook 中。
  • plt.rcParams['font.size'] = 24 设置 Matplotlib 字体大小为 24。
  • from IPython.core.pylabtools import figsize 导入 figsize 函数,该函数可以在 Jupyter Notebook 中设置图表大小。
  • import seaborn as sns 导入 Seaborn 库用于绘图。
  • sns.set(font_scale = 2) 设置 Seaborn 图表字体比例为 2。

在这里插入图片描述

2.1 数据类型与缺失值

data.info()

在这里插入图片描述

data.info()是pandas库中的一个函数,用于查看DataFrame的信息,包括列名、非空值数量、每列数据类型等。具体信息如下:

  • RangeIndex: 表示数据集中行数范围,包括行数开始和结束值;
  • Data columns (total x columns): 表示数据集中总共有多少列;
  • Column Name: 列名;
  • Non-Null Count: 非空值的数量;
  • Dtype: 每列的数据类型,如int64、float64、object等。

Not Available转换为np.nan,再将部分数值型数据转换成float

data = data.replace({'Not Available': np.nan})

for col in list(data.columns):
    if ('ft²' in col or 'kBtu' in col or 'Metric Tons CO2e' in col or 'kWh' in
       col or 'therms' in col or 'gal' in col or 'Score' in col):
	    data[col] = data[col].astype(float)

data.describe()

这段代码的作用是对数据进行清洗和转换数据类型,以便后续的分析和建模。

首先,将所有Not Available的值替换为缺失值(np.nan),这是为了确保数据的完整性和准确性。

然后,使用一个for循环遍历数据集中的每一列,如果这一列的名称包含特定的字符串(如“ft²”、“kBtu”、“Metric Tons CO2e”、“kWh”、“therms”、“gal”和“Score”等),则将该列的数据类型转换为浮点数,这是为了将这些列转换为数值类型,以便后续的数值计算。

最后,使用.describe()函数统计数据集中每一列的基本统计信息,如均值、标准差、最小值、最大值等,以便对数据进行初步的探索和了解。

在这里插入图片描述

2.2 缺失值处理

import missingno as msno
msno.matrix(data, figsize = (16, 5))

这段代码使用了 missingno 库来绘制缺失值的矩阵图。该图以矩阵的形式展示了数据集中每个变量的缺失值情况,如果某个变量在某一行中有缺失值,那么这个变量所在的格子会被标记为白色。
在这里插入图片描述


计算缺失值的比例:

def missing_values_table(df):
    mis_val = df.isnull().sum() # 总缺失值
    mis_val_percent = 100 * df.isnull().sum() / len(df) # 缺失值比例
    mis_val_table = pd.concat([mis_val, mis_val_percent], axis=1) # 缺失值制成表格
    mis_val_table_ren_columns = mis_val_table.rename(columns={0:'Missing Values', 1:'% of Total Values'})
    mis_val_table_ren_columns = mis_val_table_ren_columns[mis_val_table_ren_columns.iloc[:,1] != 0].sort_values('% of Total Values', ascending=False).round(1)
    # 缺失值比例列由大到小排序
    print('Your selected dataframe has {} columns.\nThere are {} columns that have missing values.'.format(df.shape[1], mis_val_table_ren_columns.shape[0]))
    # 打印缺失值信息
    return mis_val_table_ren_columns

missing_values_table(data)

这段代码定义了一个函数 missing_values_table(df),用于检测数据框中每一列的缺失值信息并返回一个缺失值信息表格。函数接收一个数据框作为参数。

具体来说,函数首先使用 df.isnull().sum() 计算出每一列的缺失值总数,使用 100 * df.isnull().sum() / len(df) 计算出每一列缺失值所占比例。然后将这两个计算结果拼接成一个表格,用 mis_val_table_ren_columns = mis_val_table.rename(columns={0:'Missing Values', 1:'% of Total Values'}) 重新命名列名,用 mis_val_table_ren_columns = mis_val_table_ren_columns[mis_val_table_ren_columns.iloc[:,1] != 0].sort_values('% of Total Values', ascending=False).round(1) 对缺失值比例列进行排序(由大到小),并且保留小数点后一位。最后打印输出数据框的列数和含有缺失值的列数,并且返回排序后的缺失值信息表格。
在这里插入图片描述


获取缺失值比例 > 50% 的列并移除

missing_df = missing_values_table(data)
missing_columns = list(missing_df[missing_df['% of Total Values'] > 50].index)
print('We will remove %d columns.' % len(missing_columns))

在这里插入图片描述

删除缺失值比例高于50%的列

data = data.drop(columns = list(missing_columns))

Reference

机器学习项目实战-能源利用率1-数据预处理

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

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

相关文章

CISP-PTE认证是什么?含金量有多高?

CISP即“注册信息安全专业人员”,由中国信息安全测评中心根据中央编办授权,系国家对信息安全人员资质的最高认可。那么,CISP-PTE认证又是什么呢?它的含金量又有多高?下面,国科科技就为你介绍。 CISP-PTE是…

什么是Redisson分布式锁?有什么作用?

前言: 如果你的简历中写了做过电商项目,那么面试官基本都会从SpringBoot、SpringCloud以及Dubbo这些微服务架构涉及的知识问起,然后深入到问什么是分布事务、分布式锁以及分布式缓存等内容。 这篇文章主要聊聊什么是Redisson分布式锁&#…

【Java EE 初阶】线程安全及死锁解决方案

目录 1.多线程下线程不安全的问题 1.使用多个线程对Array List集合进行添加操作并打印,查看结果 2.如何在多线程环境下使用线程安全的集合类 CopyOnWriteArrayList 3.多线程环境下使用队列 4.多线程环境下使用哈希表 1.HashTable线程安全 2.Concurrent Hash M…

yolov8训练记录

resume: 将model设置为最近一次训练的权重路径 (last.pt) resume设置为True YOLOv8 在 Python 环境中直接使用,不用 ultralytics 库 pip uninstall ultralytics 原因:安装 ultralytics 库,只能在虚拟环境中使用,自己修改代码非常…

ACM 1004 | 母牛的故事

文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 总结 0x00 前言 C 语言网不仅提供 C 语言,还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及软件下载、题解博…

新库上线 | CnOpenData·A股上市公司担保数据

A股上市公司担保数据 一、数据简介 “对外担保”,是指上市公司为他人提供的担保,包括上市公司对控股子公司的担保。“上市公司及其控股子公司的对外担保总额”,是指包括上市公司对控股子公司担保在内的上市公司对外担保总额与上市公司控股子…

初级数据结构——栈和队列

目录 1.栈栈的概念及结构栈的实现栈的结构初始化栈入栈出栈获取栈顶元素获取栈中有效元素个数检测栈是否为空销毁栈Stack.hStack.cTest.c 2.队列队列的概念及结构队列的实现队列的结构初始化队列队尾入队列队头出队列获取队列头部元素获取队列队尾元素获取队列中有效元素个数检…

【FATE联邦学习】model not init, call init_model() function

太长不看版 在local_mode下,不要使用t.CustModel进行实例化,而是直接使用原本的类进行实例化。 如果你设置了trainer.local_mode(),那么trainer里面的model不可以是t.CustModel()的实例。 给几个example: 正确: mod…

2023年美国大学生数学建模竞赛B题重塑马赛马拉的形象解题全过程文档及程序

2023年美国大学生数学建模竞赛 B题 重塑马赛马拉的形象 原题再现: 背景介绍   肯尼亚的野生动物保护区最初主要是为了保护野生动物和其他自然资源而设立的。肯尼亚议会通过了2013年《野生动物保护和管理法》, 以提供更公平的资源共享,以及…

重新定义新增长,从百果园看ESG如何可持续

当下,企业的增长亟待重新定义。 中国已基本告别人口红利时代,不少行业和企业当前陷入增长困境。原来以规模定义的增长很难实现,一些企业在日常运营中找不到方向和方式,因此需要重新定义“增长”。 最终,在环境恶化、…

计算机图形学-GAMES101-7

引言 场景中有很多的三角形,如果实现可见性和遮挡呢?  一个简单的想法是,从远到近画,近处的物体自然会覆盖掉远处的物体,这种画法也叫画家算法。  但是实际绘制中物体的顺序是不容易确定的,比如如下图绘制…

下载和安装appuploader

转载:下载和安装appuploader IOS开发工具官网地址 Appuploader home -- A tool improve ios develop efficiency such as submit ipa to appstore and manage ios certificate 最新版本已经优化了没支付688给apple的账号登录流程,无需再安装其他软件。…

DockerWeave容器跨机通信网络部署

Docker Weave网络部署 Weave在Docker主机之间实现Overlay网络,使用业界标准VXLAN封装,基于UDP传输,也可以加密传输。 Weave Net创建一个连接多个Docker主机的虚拟网络,类似于一个以太网交换机,所有的容器都连接到这上…

数组或结构体赋值时memcpy与直接赋值的效率比较

先上结论: 二者不一定谁快通常情况下,数组维度越大,使用memcpy效率更高数组维度越大,直接赋值耗时主体是循环耗时 Note: “等号赋值”被编译器翻译成一连串的MOV指令,而memcpy则是一个循环。“等号赋值”比…

05mysql---函数

目录 1:日期函数 2:字符函数 3:数值函数 4:流程函数 1:日期函数 select 函数(参数) 函数功能举例curdate()返回当前日期2023-05-17curtime()返回当前时间14:44:33now()返回当前日期和时间2023-05-17 14:44:33year(date)获取指定date的年份month(date)获取指定date的月份day…

【简介】限流

限流 为什么要限流限流算法单机限流计数器算法滑动窗口算法漏桶算法令牌桶算法 分布式限流配额算法 限流策略限流位置 为什么要限流 作为有追求的程序员,我们都希望自己的系统跑的飞快,但是速度再快,系统处理请求耗时也不可能为0&#xff0c…

线程池下载4K壁纸

学习记录 学习记录 一、目标 aHR0cHM6Ly9waWMubmV0Ymlhbi5jb20vDQo 拿到每张图片的href 和 标题,跳转到详情页进行图片下载地址的提取并请求实现图片本地下载 二、代码实现 """ CSDN: 抄代码抄错的小牛马 mailbox:yxhlhm2002163.com…

计算机毕业论文内容参考|基于java的房产营销系统的设计与实现

文章目录 导文摘要前言绪论课题背景课题内容相关技术与方法介绍技术分析技术设计技术实现总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于java的房产营销系统的设计与实现 摘要 当今社会,随着经济的快速发展和人们对生活品质的不断提高,房地产行业正在面临…

Java --- docker安装redis

目录 一、拉取redis容器镜像 二、新建目录 三、拷贝redis.conf文件模板进/app/redis目录 四、修改redis.conf文件 五、启动redis镜像服务 一、拉取redis容器镜像 docker pull redis:7.0.0 二、新建目录 mkdir -p /app/redis 三、拷贝redis.conf文件模板进/app/redis目录 cp …

Java面试(4)面向对象

文章目录 概念1. 面向对象和面向过程的区别2. 面向对象三大特征 类1. 接口和抽象类有什么共同点和区别?2. 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?3. 内部类1. 内部类2. 内部类的优点3. 内部类有哪些应用场景4. 局部内部类和匿名内部类访问…