day6 python数据可视化

在数据分析的过程中,数据可视化是一个至关重要的环节,它能帮助我们更直观地理解数据的特征和规律。本文将围绕数据可视化展开,介绍如何进行单特征分布可视化、特征与标签关系可视化,并使用 matplotlibseaborn 库绘制各种图表。

一、单特征分布可视化

1.1 找到连续特征

在对数据进行可视化之前,我们需要先确定哪些特征是连续特征。以下是两种查找连续特征的方法:

复制代码
import pandas as pd

# 读取数据
data = pd.read_csv('data.csv')

# 方法一:使用循环判断
continuous_features = []
for i in data.columns:
    if data[i].dtype != 'object':
        continuous_features.append(i)
print("方法一找到的连续特征:", continuous_features)

# 方法二:使用 select_dtypes 方法
continuous_features = data.select_dtypes(include=['float64', 'int64']).columns.tolist()
print("方法二找到的连续特征:", continuous_features)

这里我们探讨了实现同一目标的两种方法。在实际项目中,如果项目较为复杂,需要考虑内存管理、运行效率、算法复杂度以及代码美观性等因素。但对于初学者来说,达到目的即可,建议使用最简单直观的方法,便于理解和阅读。

1.2 初识 matplotlib

matplotlib 是 Python 中常用的绘图库,使用它绘制图表通常需要指定图的类型、坐标轴以及标题等信息。下面是一个绘制箱线图的示例:

复制代码
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 读取数据
data = pd.read_csv('data.csv')

# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False

# 绘制箱线图
sns.boxplot(x=data['Annual Income'])
plt.title('年收入 箱线图')
plt.xlabel('年收入')
plt.show()

在上述代码中,我们首先设置了支持中文的字体,解决了中文显示不全的问题。然后使用 seabornboxplot 函数绘制了 Annual Income 列的箱线图,并添加了标题和 x 轴标签。

1.3 绘制直方图

除了箱线图,我们还可以使用直方图来展示数据的分布情况。以下是绘制 Years in current job 列直方图的示例:

复制代码
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 读取数据
data = pd.read_csv('data.csv')

# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False

# 绘制直方图
sns.histplot(data['Years in current job'])
plt.title('在当前工作年限 直方图')
plt.xlabel('在当前工作年限')
plt.ylabel('员工数量')
plt.xticks(rotation=45, ha='right')  # 旋转 45 度,并右对齐
plt.tight_layout()  # 自动调整子图参数,提供足够的空间
plt.show()

在这个示例中,我们使用 seabornhistplot 函数绘制了直方图,并通过 plt.xticks 函数旋转了 x 轴标签,使用 plt.tight_layout 函数自动调整子图参数,使图表更加美观。

二、绘制特征和标签的关系

2.1 标签离散,特征连续的情况

当标签是离散的,特征是连续的时候,我们可以使用箱线图、小提琴图或直方图来展示它们之间的关系。以下是相关示例代码:

复制代码
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 读取数据
data = pd.read_csv('data.csv')

# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False

# 绘制箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(x='Credit Default', y='Annual Income', data=data)
plt.title('年收入与信用违约的关系(箱线图)')
plt.xlabel('信用违约')
plt.ylabel('年收入')
plt.show()

# 绘制小提琴图
plt.figure(figsize=(8, 6))
sns.violinplot(x='Credit Default', y='Annual Income', data=data)
plt.title('年收入与信用违约的关系(小提琴图)')
plt.xlabel('信用违约')
plt.ylabel('年收入')
plt.show()

# 绘制带核密度估计的直方图
plt.figure(figsize=(8, 6))
sns.histplot(x='Annual Income', hue='Credit Default', data=data, kde=True, element="step")
plt.title('年收入与信用违约的关系(直方图)')
plt.xlabel('年收入')
plt.ylabel('数量')
plt.show()

2.2 绘制离散变量和标签的关系

对于离散变量和标签的关系,我们可以使用计数图来展示。当离散变量的值较多时,可以进行分组处理。以下是示例代码:

复制代码
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 读取数据
data = pd.read_csv('data.csv')

# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False

# 绘制计数图
plt.figure(figsize=(8, 6))
sns.countplot(x='Number of Open Accounts', hue='Credit Default', data=data)
plt.title('开户数量与信用违约的关系')
plt.xlabel('开户数量')
plt.ylabel('数量')
plt.show()

# 将 "Number of Open Accounts" 分组
data['Open Accounts Group'] = pd.cut(data['Number of Open Accounts'], bins=[0, 5, 10, 15, 20, float('inf')], labels=['0 - 5', '6 - 10', '11 - 15', '16 - 20', '20+'])

# 绘制分组后的计数图
plt.figure(figsize=(10, 6))
sns.countplot(x='Open Accounts Group', hue='Credit Default', data=data)
plt.title('分组后的开户数量与信用违约的关系')
plt.xlabel('开户数量分组')
plt.ylabel('数量')
plt.show()

通过以上的可视化操作,我们可以更直观地观察数据的分布和特征与标签之间的关系。在实际数据分析中,我们可以根据数据的特点选择合适的可视化方法,从而更好地理解数据。同时,我们也应该注重从数据分布本身去认识数据,有时候不依赖复杂的模型,单纯从数据中就能发现很多有价值的信息。

@浙大疏锦行

相关推荐
92year5 小时前
用Google ADK从零搭一个能调工具的AI Agent:Python实操全过程
python·ai·mcp
爱看大明王朝15665 小时前
磁件学习-磁性元器件的极限计算
笔记·学习
woxihuan1234565 小时前
SQL删除数据时存在依赖关系_设置外键级联删除ON DELETE
jvm·数据库·python
东风破1375 小时前
DM8达梦共享存储集群DSC搭建步骤
数据库·学习·dm达梦数据库
Jetev6 小时前
如何确定SQL字段是否为空_使用IS NULL与IS NOT NULL
jvm·数据库·python
蛐蛐蛐6 小时前
昇腾910B4上安装新版本CANN的正确流程
人工智能·python·昇腾
星幻元宇VR6 小时前
VR科普大空间:沉浸式公共教育新模式
科技·学习·安全·vr·虚拟现实
m0_702036536 小时前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
2401_846339566 小时前
MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议
jvm·数据库·python
2601_957780847 小时前
Claude 4.6 对阵 GPT-5.4:2026 开发者大模型 API 选型深度解析
人工智能·python·gpt·ai·claude