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

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

@浙大疏锦行

相关推荐
leisoo80975 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
WangYan20225 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
蒸蒸yyyyzwd7 小时前
秋招不熟悉力扣学习笔记1
笔记·学习·leetcode
金銀銅鐵7 小时前
[Python] 借助 turtle 逐字展示唐诗《金缕衣》
python
OH_TPC8 小时前
【鸿蒙优选三方库】@ohos/mpchart:让 HarmonyOS 应用的数据可视化开箱即用
华为·信息可视化·harmonyos·鸿蒙
小弥儿9 小时前
GitHub今日热榜 | 2026-08-11:图原生基础设施首日登顶
学习·开源·github
Python大数据分析@9 小时前
使用大模型MCP采集数据,爬虫已经无门槛
python·网络爬虫
quantdash_cc9 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
65岁退休Coder10 小时前
LangChain v1.3.4 笔记 - 07 补充:链式调用 LCEL
后端·python·langchain
卷无止境10 小时前
FastAPI 部署在 Nginx 后面到底该怎么配
后端·python