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

表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 部分中风患者的年龄和平均血糖数据

|-------|----|--------|
| 编号 | 年龄 | 平均血糖 |
| 9046 | 67 | 228.69 |
| 51676 | 61 | 202.21 |
| 31112 | 80 | 105.92 |
| 60182 | 49 | 171.23 |
| 1665 | 79 | 174.12 |
| 56669 | 81 | 186.21 |
| 53882 | 74 | 70.09 |
| 10434 | 69 | 94.39 |
| 27419 | 59 | 76.15 |
| 60491 | 78 | 58.57 |

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

1、训练要点

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

(2) 掌握主键合并方法

2、需求分析

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

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

python 复制代码
# 合并年龄、平均血糖和中风患者数据
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行即可)。

python 复制代码
# 使用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行即可)

python 复制代码
# 使用'编号'列作为主键进行合并
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函数对'工作类型'、'吸烟史'两列数据进行特征去重。

python 复制代码
# 对于表格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函数判断及统计缺失值。

python 复制代码
# 对于表格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阶多项式进行插值。

python 复制代码
# (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δ 原则判断'年龄'、'平均血糖'两列数据中是否存在异常值及异常值的个数。

python 复制代码
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)使用离差标准化 进行标准化处理

python 复制代码
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)使用标准差标准化进行标准化处理

python 复制代码
# 标准差标准化
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)使用小数定标标准化进行标准化处理。

python 复制代码
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中'吸烟史'的类别型数据进行哑变量处理,转换为数值型数据。

python 复制代码
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类区间。

python 复制代码
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[['年龄', '年龄_等宽法', '年龄_等频法']])
相关推荐
Srlua8 分钟前
周期性移动模式地铁乘客流量预测
python·数据分析
Tianyanxiao12 小时前
【探商宝】大数据获客平台在销售型企业中的应用
大数据·经验分享·科技·数据分析
AI完全体14 小时前
【AI日记】24.11.25 学习谷歌数据分析初级课程-第6课
学习·数据分析
枝上棉蛮14 小时前
报表工具功能对比:免费易上手的山海鲸报表 vs 庞大用户群体的Tableau
信息可视化·数据挖掘·数据分析·数字孪生·中国式报表·报表制作工具·免费报表软件
GOTXX15 小时前
基于深度学习的手势识别算法
人工智能·深度学习·算法·机器学习·数据挖掘·卷积神经网络
Jurio.16 小时前
【论文笔记】Large Brain Model (LaBraM, ICLR 2024)
大数据·论文阅读·人工智能·深度学习·数据挖掘
pblh12318 小时前
spark 3.4.4 利用Spark ML中的交叉验证、管道流实现鸢尾花分类预测案例选取最优模型
分类·数据挖掘·spark-ml
阡之尘埃18 小时前
Python数据分析案例65——基于深度学习的音频文件分类(音频文件特征提取和模型构建)
python·深度学习·分类·数据分析·数据可视化·音频文件
weixin_4314708619 小时前
价格分类(神经网络)
神经网络·分类·数据挖掘
TsingtaoAI19 小时前
数据挖掘/深度学习-高校实训解决方案
人工智能·深度学习·数据挖掘·实训平台·ai实训课程·高校ai实训·高校实训