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()

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

@浙大疏锦行

相关推荐
fish_study_csdn27 分钟前
pytest 技术总结
开发语言·python·pytest
咖啡调调。36 分钟前
使用Django框架表单
后端·python·django
BO_S__39 分钟前
python调用ffmpeg对截取视频片段,可批量处理
python·ffmpeg·音视频
就叫飞六吧1 小时前
如何判断你的PyTorch是GPU版还是CPU版?
人工智能·pytorch·python
Nuyoah.1 小时前
《Vue3学习手记5》
前端·javascript·学习
pyengine2 小时前
基于pandoc的MarkDown格式与word相互转换小工具开发(pyqt5)
开发语言·python·qt·word
YuSun_WK2 小时前
配置MambaIRv2: Attentive State Space Restoration的环境
开发语言·python
Nick_zcy3 小时前
开发基于python的商品推荐系统,前端框架和后端框架的选择比较
开发语言·python·前端框架·flask·fastapi
一点.点3 小时前
李沐动手深度学习(pycharm中运行笔记)——04.数据操作
pytorch·笔记·python·深度学习·pycharm·动手深度学习
Niuguangshuo4 小时前
Python 设计模式:访问者模式
python·设计模式·访问者模式