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[['年龄', '年龄_等宽法', '年龄_等频法']])
相关推荐
紫色沙2 小时前
每天一个数据分析题(四百零五)- 因子分析
数据挖掘·数据分析
xiaoyalian4 小时前
横截面数据回归
笔记·学习·数据挖掘·回归·r语言
逆风就重开4 小时前
大数据中的常见数据问题:独断脏
大数据·数据仓库·数据分析
Sam90294 小时前
《昇思 25 天学习打卡营第 11 天 | ResNet50 图像分类 》
学习·分类·数据挖掘
Alkali!10 小时前
2-5 softmax 回归的简洁实现
人工智能·数据挖掘·回归
算法金「全网同名」15 小时前
算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环
python·机器学习·数据分析
茶桁16 小时前
使用 PCA 可视化数据的分类能力
人工智能·分类·数据挖掘
spark-aixin17 小时前
昇思学习打卡-9-ResNet50图像分类
学习·分类·数据挖掘
懒大王爱吃狼18 小时前
Python数据分析之pandas学习
开发语言·爬虫·python·学习·信息可视化·数据分析·pandas
紫色沙18 小时前
每天一个数据分析题(四百零三)- 因子分析
数据挖掘·数据分析