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

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

@浙大疏锦行

相关推荐
yaoh.wang16 分钟前
力扣(LeetCode) 1: 两数之和 - 解法思路
python·程序人生·算法·leetcode·面试·跳槽·哈希算法
hssfscv34 分钟前
Javaweb 学习笔记——html+css
前端·笔记·学习
Mr.Jessy41 分钟前
JavaScript高级:深浅拷贝、异常处理、防抖及节流
开发语言·前端·javascript·学习
liwulin05061 小时前
【PYTHON-YOLOV8N】关于YOLO的推理训练图片的尺寸
开发语言·python·yolo
我送炭你添花1 小时前
Pelco KBD300A 模拟器:04+1.Python 打包详解:历史、发展与多种方式对比
python·测试工具·运维开发
博客胡1 小时前
Python-fastAPI的学习与使用
学习·fastapi·ai编程
陈天伟教授1 小时前
人工智能训练师认证教程(3)Pandas数据世界的军刀
人工智能·数据分析·pandas
yaoh.wang1 小时前
力扣(LeetCode) 27: 移除元素 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针
幸存者letp1 小时前
Python 常用方法分类大全
linux·服务器·python
HyperAI超神经1 小时前
【Triton 教程】triton_language.load
人工智能·学习·大语言模型·cpu·gpu·编程语言·triton