Python数据分析与应用 |第4章 使用pandas进行数据预处理 (实训)

server/2024/9/24 13:17:19/

表1-1healthcare-dataset-stroke.xlsx 部分中风患者的基础信息和体检数据

编号性别高血压是否结婚工作类型居住类型体重指数吸烟史中风
9046私人城市36.6以前吸烟
51676私营企业农村N/A从不吸烟
31112私人农村32.5从不吸烟
60182私人城市34.4抽烟
1665私营企业农村24从不吸烟
56669私人城市29以前吸烟
53882私人农村27.4从不吸烟

表二 healthcare-dataset-age-abs.xlsx 部分中风患者的年龄和平均血糖数据

编号年龄平均血糖
904667228.69
5167661202.21
3111280105.92
6018249171.23
166579174.12
5666981186.21
538827470.09
104346994.39
274195976.15
604917858.57

实训1 合并年龄、平均血糖和中风患者信息数据

1、训练要点

(1) 掌握判断主键的方法

(2) 掌握主键合并方法

2、需求分析

某医院为了早期监测预警患者的中风风险,对现有中风患者的基础信息和体检数据(healthcare-dataset-stroke.xls)进行分析,观察发现患者基础信息和体检数据中缺少中风患者的年龄和平均血糖的信息。另有年龄和平均血糖数据(healthcare-dataset-age_abs.xls)存放了分析所需的患者的年龄和平均血糖信息。

(1)读取两个数据文件,打印前5行结果进行显示。

# 合并年龄、平均血糖和中风患者数据
import pandas as pd
df1 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
df2 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')#(1)读取两个数据文件,打印前5行结果进行显示。
print("healthcare-dataset-stroke.xls前5行:")
print(df1.head(5))
print("----------------------------------------")
print("healthcare-dataset-age_abs.xls前5行:")
print(df2.head(5))

(2)利用concat函数进行纵向堆叠,展示‘内连接‘、‘外连接’的拼接结果(前5行即可)。

# 使用concat函数进行纵向堆叠
import pandas as pd
df1 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
df2 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')# 外连接
df_concat = pd.concat([df1, df2], axis=0, join='outer')
print("纵向堆叠结果前5行(外连接):")
print(df_concat.head(5))# 内连接
df_concat = pd.concat([df1, df2], axis=0, join='inner')
print("纵向堆叠结果前5行(内连接):")
print(df_concat.head(5))

(3)对两个数据利用‘编号’列作为主键进行合并,展示合并结果(前5行即可)

# 使用'编号'列作为主键进行合并
import pandas as pd
df1 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
df2 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')df_merge = pd.merge(df1, df2, on='编号', how='inner')
print("合并结果前5行:")
print(df_merge.head(5))

实训2 对表格数据进行数据清洗。

需求说明:

基于1中的数据

(1)对于表格healthcare-dataset-stroke.xls的信息,使用duplicates函数对‘工作类型’、‘吸烟史’两列数据进行特征去重。

# 对于表格healthcare-dataset-stroke.xls的信息,使用duplicates函数对‘工作类型’、‘吸烟史’两列数据进行特征去重
import pandas as pd
# 读取数据
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')
# 对'工作类型'和'吸烟史'列进行去重
df = df.drop_duplicates(subset=['工作类型', '吸烟史'])
# 打印结果
print(df)

(2)对于表格healthcare-dataset-age_abs.xls的信息,对‘年龄’、‘平均血糖’两列数据,使用sum及isnull函数判断及统计缺失值。

# 对于表格healthcare-dataset-age_abs.xls的信息,对‘年龄’、‘平均血糖’两列数据,使用sum及isnull函数判断及统计缺失值。
import pandas as pd# 读取数据
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 判断是否有缺失值
missing_values = df.isnull()
# 统计缺失值的个数
missing_count = missing_values.sum()
# 打印结果
print("缺失值统计:")
print(missing_count)

(3)对‘年龄’列的数据使用均值替换其缺失值;对‘平均血糖’列数据使用3阶多项式进行插值。

# (3)	对‘年龄’列的数据使用均值替换其缺失值;对‘平均血糖’列数据使用3阶多项式进行插值。
import pandas as pd
import numpy as np# 读取数据
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')# 计算年龄的均值
mean_age = df['年龄'].mean()# 使用均值替换年龄列的缺失值
df['年龄'] = df['年龄'].fillna(mean_age)# 对平均血糖列进行3阶多项式插值
df['平均血糖'] = df['平均血糖'].interpolate(method='polynomial', order=3)# 打印结果
print(df)

(4)使用3δ原则判断‘年龄’、‘平均血糖’两列数据中是否存在异常值及异常值的个数。

import pandas as pd
import numpy as np# 读取数据
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')# 计算年龄和平均血糖的均值和标准差
mean_age = df['年龄'].mean()
std_age = df['年龄'].std()
mean_glucose = df['平均血糖'].mean()
std_glucose = df['平均血糖'].std()# 使用3δ原则判断是否存在异常值
outliers_age = (np.abs(df['年龄'] - mean_age) > 3 * std_age)
outliers_glucose = (np.abs(df['平均血糖'] - mean_glucose) > 3 * std_glucose)# 统计异常值的个数
num_outliers_age = outliers_age.sum()
num_outliers_glucose = outliers_glucose.sum()# 打印结果
print("年龄异常值个数:", num_outliers_age)
print("平均血糖异常值个数:", num_outliers_glucose)

实训 3 基于healthcare-dataset-age_abs.xls中的‘平均血糖’列数据,(1)使用离差标准化、标准差标准化、小数定标标准化进行标准化处理。

需求分析:

(1)使用离差标准化 进行标准化处理

import pandas as pd
# 读取数据
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
# 离差标准化
df['平均血糖_离差标准化'] = (df['平均血糖'] - df['平均血糖'].min()) / (df['平均血糖'].max() - df['平均血糖'].min())
print(df)

(2)使用标准差标准化进行标准化处理

# 标准差标准化
import pandas as pd
# 读取数据
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')
df['平均血糖_标准差标准化'] = (df['平均血糖'] - df['平均血糖'].mean()) / df['平均血糖'].std()
print(df)

(3)使用小数定标标准化进行标准化处理。

import pandas as pd# 读取数据
df = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')# 使用0填充缺失值
df['平均血糖'] = df['平均血糖'].fillna(0)# 小数定标标准化
df['平均血糖_小数定标标准化'] = df['平均血糖'] / (10 ** (df['平均血糖'].apply(lambda x: len(str(abs(int(x))))) - 1))# 打印结果
print(df)

实训4 对表healthcare-dataset-stroke.xls中‘吸烟史’的类别型数据进行哑变量处理,转换为数值型数据。

需求说明:

      (1)对表healthcare-dataset-stroke.xls中‘吸烟史’的类别型数据进行哑变量处理,转换为数值型数据。

import pandas as pd# 读取数据
df1 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-stroke.xlsx')# 哑变量处理
df1_dummies = pd.get_dummies(df1['吸烟史'], prefix='吸烟史')print(df1_dummies)

(2)对表healthcare-dataset-age_abs.xls中‘年龄’数据使用等宽法、等频法进行离散化,划分为5类区间。

import pandas as pd
df2 = pd.read_excel('C:/Users/DELL/Python/healthcare-dataset-age-abs.xlsx')# 等宽法离散化
df2['年龄_等宽法'] = pd.cut(df2['年龄'], bins=5, labels=False)# 等频法离散化
df2['年龄_等频法'] = pd.qcut(df2['年龄'], q=5, labels=False)print(df2[['年龄', '年龄_等宽法', '年龄_等频法']])


http://www.ppmy.cn/server/8458.html

相关文章

项目开发流程

项目开发流程 👩‍🦳项目立项 估计项目的花费,确定大致的所需开发人员数,确定项目是否可行; 👩‍🦰需求分析 整体过程: 项目背景和目标,即项目的目的是什么 用户需求&…

Android14 - WindowManagerService之客户端Activity布局

Android14 - WindowManagerService之客户端Activity布局 一、主要角色 WMS作为一个服务端,有多种客户端与其交互的场景。我们以常见的Activity为例: Activity:在ActivityThread构建一个Activity后,会调用其attach方法,…

Python学习笔记 - 正则表达式

前言 正则表达式(Regular Expression,在代码中常简写为 regex、regexp、RE 或 re)是预先定义好的一个“规则字符串”,通过这个“规则字符串”可以匹配、查找、替换那些符合“规则”的文本,也就是说正则表达式针对的目标…

STM32 HAL库F103系列之ADC实验(二)

多通道ADC采集(DMA读取)实验 这个实验与单通道ADC(DMA读取)实验大致相同 实验简要: 1,功能描述 通过DMA读取数据 通过ADC1通道0/1/2/3/4/5(PA0/1/2/3/4/5)采集测试电压&#xf…

腾讯EdgeOne产品测评体验——多重攻击实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入

腾讯EdgeOne产品测评体验——实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入 写在最前面一、产品概述1.1 什么是边缘安全加速平台 EO?1.2 EdgeOne产品功能 二、准备工作2.1 选择:NS(Name Server)接入模式或 CN…

Arrow, 一个六边形的 Python 时间库

文章目录 Arrow, 一个六边形的 Python 时间库第一部分:背景介绍第二部分:库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解决方案第…

控制台程序设置

该篇博客主要是对下一篇博客《贪吃蛇游戏》的设计做铺垫,大家可以持续关注(点个关注哦😊)等待更新,以下是个人主页: 敲上瘾-CSDN博客 在我们写的程序运行起来后弹出的框就是控制台程序。而这个窗口我们是可以对它进行设置的&…

(CDA数据分析师笔记)第六章 业务分析方法二

基准比计算方法 各个不同维度项下的汇总值和某个基准值之间的比较。 基准值:一个公认的可以衡量此类汇总值的数值。如考试几个成绩60分等。 用于描述各个维度项的表现水平与基准值的差异程度。进行分类,了解各个维度项的表现水平的好坏程度。 在基准…