数据预处理 虚战1

 

import pandas as pd
import numpy as npdf = pd.read_csv('diabetes.csv')def preprocess(df):print('----------------------------------------------')print("Before preprocessing")print("Number of rows with 0 values for each variable")#遍历每一列for col in df.columns:  #该列值为0的数量missing_rows = df.loc[df[col] == 0].shape[0]print(col + ": " + str(missing_rows))print('----------------------------------------------')df = preprocess(df)

输出结果:

----------------------------------------------
Before preprocessing
Number of rows with 0 values for each variable
Pregnancies: 111
Glucose: 5
BloodPressure: 35
SkinThickness: 227
Insulin: 374
BMI: 11
DiabetesPedigreeFunction: 0
Age: 0
Outcome: 500
----------------------------------------------

1.先看看每一列值为零的情况

通过常识可以知道,这些值是不合理的。这表明数据集中有缺失值。

对于缺失值的处理:

  • 移除(丢弃)任何含有0的行;
  • 使用非0的平均数/中位数/众数来替换缺失值;
  • 使用另外的机器学习模型来预测这些数据的真实值;

2.我们在这里采用非0值的平均数来代替缺失值

首先,用NaN来替换Glucose、BloodPressure、SkinThickness、Insulin、BMI中的0。这样pandas 就知道这些是非法值。

import pandas as pd
import numpy as npdf = pd.read_csv('diabetes.csv')def preprocess(df):print('----------------------------------------------')print("Before preprocessing")print("Number of rows with 0 values for each variable")#遍历每一列for col in df.columns:  #该列值为0的数量missing_rows = df.loc[df[col] == 0].shape[0]print(col + ": " + str(missing_rows))print('----------------------------------------------')#使用NaN来替换0df['Glucose'] = df['Glucose'].replace(0, np.nan)df['BloodPressure'] = df['BloodPressure'].replace(0, np.nan)df['SkinThickness'] = df['SkinThickness'].replace(0, np.nan)df['Insulin'] = df['Insulin'].replace(0, np.nan)df['BMI'] = df['BMI'].replace(0, np.nan)#平均数来代替缺失值df['Glucose'] = df['Glucose'].fillna(df['Glucose'].mean())df['BloodPressure'] = df['BloodPressure'].fillna(df['BloodPressure'].mean())df['SkinThickness'] = df['SkinThickness'].fillna(df['SkinThickness'].mean())df['Insulin'] = df['Insulin'].fillna(df['Insulin'].mean())df['BMI'] = df['BMI'].fillna(df['BMI'].mean())df = preprocess(df)

完成上面的缺失值处理以后,接下来做  数据标准化 处理。

3.数据标准化处理的目的是对数值类型的变量进行变换,使其均值为0 并具有单位方差。

数据标准化的另外一个积极作用是它可以收缩变量的量级,将其变换到更均衡的范围。因为在训练模型时,范围大的变量相对范围小的变量会占据主导地位,这样会过分强调范围大的变量,我们不希望这种情况发生的。

整个过程如下:

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn import preprocessingdef preprocess(df):print('----------------------------------------------')print("Before preprocessing")print("Number of rows with 0 values for each variable")for col in df.columns:missing_rows = df.loc[df[col]==0].shape[0]print(col + ": " + str(missing_rows))print('----------------------------------------------')# Replace 0 values with the mean of the existing valuesdf['Glucose'] = df['Glucose'].replace(0, np.nan)df['BloodPressure'] = df['BloodPressure'].replace(0, np.nan)df['SkinThickness'] = df['SkinThickness'].replace(0, np.nan)df['Insulin'] = df['Insulin'].replace(0, np.nan)df['BMI'] = df['BMI'].replace(0, np.nan)df['Glucose'] = df['Glucose'].fillna(df['Glucose'].mean())df['BloodPressure'] = df['BloodPressure'].fillna(df['BloodPressure'].mean())df['SkinThickness'] = df['SkinThickness'].fillna(df['SkinThickness'].mean())df['Insulin'] = df['Insulin'].fillna(df['Insulin'].mean())df['BMI'] = df['BMI'].fillna(df['BMI'].mean())print('----------------------------------------------')print("After preprocessing")print("Number of rows with 0 values for each variable")for col in df.columns:missing_rows = df.loc[df[col]==0].shape[0]print(col + ": " + str(missing_rows))print('----------------------------------------------')# Standardizationdf_scaled = preprocessing.scale(df)df_scaled = pd.DataFrame(df_scaled, columns=df.columns)df_scaled['Outcome'] = df['Outcome']df = df_scaledreturn dfdf = pd.read_csv('diabetes.csv')
df = preprocess(df)

preprocessing.scale(df)

这一句就可以完成数据的标准化,输出结果df_scaled已经不是dataframe类型,需要转回dataframe 类型 。

Outcome列是数据的输出结果,不需要标准化的。

自此已经完成预处理了。


一些基础:

1.在Pandas中,使用df.loc来访问某个DataFrame中的行和列的数据。其基本语法为:df.loc[row_indexer, column_indexer]。其中,row_indexer可以是一个单独的标签,也可以是一组标签;column_indexer可以是一个单独的标签,也可以是一组标签。如果不指定row_indexer,则会返回所有行的数据;如果不指定column_indexer,则会返回所有列的数据。

2.可以使用一些布尔条件来访问DataFrame中的数据。具体来说,可以创建一组布尔条件,然后使用这组条件来筛选出符合条件的行或列。代码示例如下:

df.loc[df[col] == 0]  其中df[col] == 0就是某列满足这个条件,也就是结果为True的行

df.shape[0] 即为行数
df.shape[1] 为列数


参考:

df.loc的详细解析_笔记大全_设计学院 (python100.com)

 python神经网络项目实战

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

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

相关文章

2024年【危险化学品生产单位主要负责人】复审模拟考试及危险化学品生产单位主要负责人作业模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位主要负责人复审模拟考试为正在备考危险化学品生产单位主要负责人操作证的学员准备的理论考试专题,每个月更新的危险化学品生产单位主要负责人作业模拟考试祝您顺利通过危险化学品…

深度学习 Day23——J3DenseNet算法实战与解析

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 文章目录 前言1 我的环境2 pytorch实现DenseNet算法2.1 前期准备2.1.1 引入库2.1.2 设…

C++学习笔记(二十六):c++ 复制与拷贝构造函数

本节介绍拷贝构造函数。当我们复制数据或对象是一般情况下我们会有两个副本。但当我们仅需要读取数据或者修改一个已经存在的对象时,我们不想去复制一份副本,这样会造成性能的损耗。理解什么时候复制,什么时候不需要复制对提升程序的性能有较…

数据库服务器如何处理并发访问请求?

在当今的数字化时代,并发访问请求的处理已成为数据库服务器的重要挑战之一。随着应用程序和互联网的普及,数据库服务器需要处理来自大量用户和设备的并发访问请求,这对其性能和可扩展性提出了更高的要求。本文将探讨数据库服务器如何处理并发…

flutter 使用adb 同时连接 多个模拟器

MUMU模拟器 MuMu模拟器官网_安卓12模拟器_网易手游模拟器 传统只需要 连接一个 默认命令是 默认端口是7555 adb connect 127.0.0.1:7555 但是需要同时连接调试多个模拟器的时候 就需要连接多个 这里可以使用自带的多开 多开后 使用 1 是对应多开的序号 这样就可以查看对…

我是谁 whoami

文章目录 我是谁 whoami更多信息 我是谁 whoami 我知道你是谁,但我不知道我是谁,此时whoami可以帮助你,哈哈。 whoami将打印当前用户的名字。与id -un类似。 官方定义为: whoami - print effective userid 用法为: …

Redis基础学习一

1. Redis 入门 1.1. Redis 诞生历程 1.1.1.从一个故事开始 08 年的时候有一个意大利西西里岛的小伙子,笔名 antirez(http://invece.org/),创建了一个访客信息网站 LLOOGG.COM。有的时候我们需要知道网站的访问情况,…

高级数据结构:并查集

文章目录 1.什么是并查集:2、并查集的基本结构3.现实问题和代码实现链接4.代码实现 1.什么是并查集: 对于一个集合S{a1,a2,……an-1,an},这是可以对集合S进一步划分:S1,S2,……,Sm-1&#xff0…

阿里云迁移AWS视频点播技术攻坚

文章目录 🐷 背景🦥 简述🐥 Aws服务🦜 AWS CloudFormation🐞 问题🐉 落地方案🦉 Aws vs Aliyun🍄 避坑指南 🐷 背景 由于AWS整体成本略低于阿里云,公司决定将…

qt编译管理员权限的程序

MSVC msvc编译的话,只需要在.pro文件中加入以下语句: QMAKE_LFLAGS /MANIFESTUAC:\"level\requireAdministrator\ uiAccess\false\\"MinGW mingw编译的话,有几个步骤: 1、在项目根目录下增加一个文件proce.manifest,…

R 批量对多个变量进行单因素方差分析 批量计算均值±标准差

多个变量批量进行单因素方差 R实现 文章目录 一、批量生成均值标准差 P值二、添加协变量单因素方差分析,生成校正P值三、在分层情况下进行单因素方差分析四、添加协变量和交互项的单因素方差分析,生成交互项的P值 一、批量生成均值标准差 P值 数据结构如…

Android AAudio

文章目录 基本概念启用流程基本流程HAL层对接数据流计时模型调试 基本概念 AAudio 是 Android 8.0 版本中引入的一种音频 API。 AAudio 提供了一个低延迟数据路径。在 EXCLUSIVE 模式下,使用该功能可将客户端应用代码直接写入与 ALSA 驱动程序共享的内存映射缓冲区…

数字图像处理(图像灰度变换、图像直方图及均衡、图像中值滤波、图像空域锐化增强、图像频域滤波)

数字图像处理(图像灰度变换、图像直方图及均衡、图像中值滤波、图像空域锐化增强、图像频域滤波) 目录 1 图像灰度变换 1.1 灰度线性变换 1.2 图像二值化 1.3 负象变换 1.4 灰度非线性变换 1.5 程序设计流程图 2 图像直方图及均衡 2.1 直方图 2…

Linux 服务器磁盘满了怎么办?详细清理大文件指南

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

Agilent安捷伦E4407B频谱分析仪26.5GHz

E4407B是安捷伦ESA-E系列频谱分析仪,它是一款能够适应未来需要的中性能频谱分析仪解决方案。该系列在测量速度、动态范围、精度和功率分辨能力上,都为类似价位的产品建立了性能标准。其灵活的平台设计使得研发、制造和现场服务工程师能够自定义产品&…

特征工程筛选重要变量

特征筛选主要分为3个方法:过滤法、嵌入法(经典的一些树模型比如xgboost)、包裹法(经典的RFECV,RFE递归特征消除法) 过滤法更快速,但更粗糙。 包装法和嵌入法更精确,比较适合具体到算…

【代码随想录】刷题笔记Day46

前言 刚考完自辩,Chat回答举例什么的真方便。早上做组会PPT去了,火速来刷题! 139. 单词拆分 - 力扣(LeetCode) 单词是物品,字符串s是背包,单词能否组成字符串s,就是问物品能不能把…

Kotlin: Jetpack — ViewModel简单应用

ViewModel 概览 Android Jetpack 的一部分。 ViewModel 类是一种业务逻辑或屏幕级状态容器。它用于将状态公开给界面,以及封装相关的业务逻辑。 它的主要优点是,它可以缓存状态,并可在配置更改后持久保留相应状态。这意味着在 activity 之…

Android studio ViewPager2应用设计

一、ViewPager2应用场景: ViewPager2是一个功能强大的滑动容器,提供灵活的页面切换和布局定制功能,使得应用程序界面更加丰富和交互性强,主要应用于以下场景: 1)、实现引导页或欢迎页:ViewPager2可用于创建引导页/欢迎页,让用户通过滑动浏览介绍应用程序功能/展示欢迎…

SpringBoot学习(五)-Spring Security配置与应用

注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! Spring Security Spring Security是一个基于Java的开源框架,用于在Java应用程…