PythonDay9打卡

热力图和子图的绘制

作业:对心脏病数据集绘制热力图和单特征分布的大图(包含几个子图)

绘制热力图完整代码:

# 1. 读取数据
import pandas as pd
data  = pd.read_csv('heart.csv')
# 2. 查看数据
data.info()
data.head(5)
data.columns
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 提取连续值特征
continuous_features = [
    'age', 'sex', 'cp',
    'trestbps', 'chol',
    'fbs', 'restecg',
    'thalach', 'exang',
    'oldpeak', 'slope', 'ca',
    'thal','target'
]
# 计算相关系数矩阵
correlation_matrix = data[continuous_features].corr()
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 绘制热力图
plt.figure(figsize=(12, 10))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Correlation Heatmap of Continuous Features')
plt.show()

 逐步解析:

1.读取数据+查看数据

# 1. 读取数据
import pandas as pd
data  = pd.read_csv('heart.csv')
# 2. 查看数据
data.info()

2.导入库:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

3.绘制热力图:

# 提取连续值特征
continuous_features = [
    'age', 'sex', 'cp',
    'trestbps', 'chol',
    'fbs', 'restecg',
    'thalach', 'exang',
    'oldpeak', 'slope', 'ca',
    'thal','target'
]
# 计算相关系数矩阵
correlation_matrix = data[continuous_features].corr()
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 绘制热力图
plt.figure(figsize=(12, 10))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Correlation Heatmap of Continuous Features')
plt.show()

 输出的结果是:

 

单特征分布大图完整代码(前四个特征为例):

import pandas as pd
import matplotlib.pyplot as plt
# 定义要绘制的特征
features = ['Annual Income', 'Years in current job', 'Tax Liens', 'Number of Open Accounts']

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 创建一个包含 2 行 2 列的子图布局
fig, axes = plt.subplots(2, 2, figsize=(12, 8))

# 使用 for 循环遍历特征
for i in range(len(features)):
    row = i // 2 # 计算当前特征在子图中的行索引,// 是整除,即取整 ,之所以用整除是因为我们要的是行数
    # 例如 0//2=0, 1//2=0, 2//2=1, 3//2=1
    col = i % 2 # 计算当前特征在子图中的列索引,% 是取余,即取模
    # 例如 0%2=0, 1%2=1, 2%2=0, 3%2=1
    # 绘制箱线图
    feature = features[i]
    axes[row, col].boxplot(data[feature].dropna())
    axes[row, col].set_title(f'Boxplot of {feature}')
    axes[row, col].set_ylabel(feature)

# 调整子图之间的间距
plt.tight_layout()

# 显示图形
plt.show()

 输出的结果是:

如果想绘制单个子图:

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 遍历特征逐个绘制
for feature in ['age', 'sex', 'cp', 'trestbps']:
    plt.figure(figsize=(8, 6))  # 为每个特征创建新图形
    plt.boxplot(data[feature].dropna())
    plt.title(f'Boxplot of {feature}')
    plt.ylabel(feature)
    plt.show()  # 显示当前图形

 输出的结果是:

最后学习一个非常实用的函数,我们后面会经常看到他

enumerate()函数:

enumerate()函数返回一个迭代对象,该对象包含索引和值。

语法:

enumerate(iterable, start=0)

参数:

iterable -- 迭代对象,迭代对象可以是列表、元组、字典、字符串等。

start -- 索引的开始值

返回值

返回一个迭代对象,该对象包含索引和值。

之所以这个函数很有用,是因为它允许我们同时迭代一个序列,并获取每个元素的索引和值。

代码:

features = ['Annual Income', 'Years in current job', 'Tax Liens', 'Number of Open Accounts']

for i, feature in enumerate(features):
    print(f"索引 {i} 对应的特征是: {feature}")

 输出的结果是:

# 定义要绘制的特征
features = ['Annual Income', 'Years in current job', 'Tax Liens', 'Number of Open Accounts']

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 创建一个包含 2 行 2 列的子图布局,其中
fig, axes = plt.subplots(2, 2, figsize=(12, 8))#返回一个Figure对象和Axes对象
# 这里的axes是一个二维数组,包含2行2列的子图
# 这里的fig是一个Figure对象,表示整个图形窗口
# 你可以把fig想象成一个画布,axes就是在这个画布上画的图形

# 遍历特征并绘制箱线图
for i, feature in enumerate(features):
    row = i // 2
    col = i % 2
    axes[row, col].boxplot(data[feature].dropna())
    axes[row, col].set_title(f'Boxplot of {feature}')
    axes[row, col].set_ylabel(feature)

# 调整子图之间的间距
plt.tight_layout()

# 显示图形
plt.show()

输出的结果是:

可以看出 enumerate() 是 Python 中一个非常实用的内置函数,它可以让循环变得更加简洁高效。enumerate() 是 Python 中一个非常实用的内置函数,它可以让循环变得更加简洁高效。

编程的世界没有银弹,多尝试、多踩坑才能成长。加油!!!

@浙大疏锦行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值