01-EDA-iris-数据探索-seaborn可视化方案

# 加载yellowbrick数据集
import os
import pandas as pd
FIXTURES  = os.path.join(os.getcwd(), "data")
df = pd.read_csv(os.path.join(FIXTURES,"iris.csv"))
df.head()
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
df.head().to_dict()
{'sepal_length': {0: 5.1, 1: 4.9, 2: 4.7, 3: 4.6, 4: 5.0},
 'sepal_width': {0: 3.5, 1: 3.0, 2: 3.2, 3: 3.1, 4: 3.6},
 'petal_length': {0: 1.4, 1: 1.4, 2: 1.3, 3: 1.5, 4: 1.4},
 'petal_width': {0: 0.2, 1: 0.2, 2: 0.2, 3: 0.2, 4: 0.2},
 'species': {0: 'setosa', 1: 'setosa', 2: 'setosa', 3: 'setosa', 4: 'setosa'}}

可视化相关的库

import warnings
warnings.filterwarnings('ignore')

import numpy as np
from scipy.stats import norm

import seaborn as sns
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False 
data=df.copy()
plt.style.use( 'seaborn-v0_8')
sns.set(style='white')

‘darkgrid’:深色网格样式
‘whitegrid’:白色网格样式,ggplot2
‘dark’:深色背景样式
‘white’:白色背景样式
‘ticks’:坐标轴刻度线样式

条形图

sns.barplot(x='species',y='petal_length',hue='species',data=data)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第1张图片

x: 指定 x 轴上要显示的数据列或数组。
y: 指定 y 轴上要显示的数据列或数组。
hue: 指定要分组的数据列或数组,根据该列的不同取值将数据分为不同的组,并使用不同的颜色进行区分。
data: 指定要使用的数据集,可以是 pandas 的 DataFrame、numpy 数组或其他类似结构的数据。

使用了 x=‘species’ 将 species 列的值用作 x 轴数据,y=‘petal_length’ 将 petal_length 列的值用作 y 轴数据,hue=‘species’ 根据 species 列的不同取值对数据进行分组,并使用不同的颜色进行区分。

import pandas as pd

fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ['2015', '2016', '2017']
data = {'fruits': fruits,
        '2015': [2, 1, 4, 3, 2, 4],
        '2016': [5, 3, 3, 2, 4, 6],
        '2017': [3, 2, 4, 4, 5, 3]}

df = pd.DataFrame(data)
df 
fruits 2015 2016 2017
0 Apples 2 5 3
1 Pears 1 3 2
2 Nectarines 4 3 4
3 Plums 3 2 4
4 Grapes 2 4 5
5 Strawberries 4 6 3
# 使用 melt() 函数将宽格式的数据转换为长格式,并创建复合列 x
df_melted = df.melt(id_vars='fruits', var_name='year', value_name='counts')
df_melted
fruits year counts
0 Apples 2015 2
1 Pears 2015 1
2 Nectarines 2015 4
3 Plums 2015 3
4 Grapes 2015 2
5 Strawberries 2015 4
6 Apples 2016 5
7 Pears 2016 3
8 Nectarines 2016 3
9 Plums 2016 2
10 Grapes 2016 4
11 Strawberries 2016 6
12 Apples 2017 3
13 Pears 2017 2
14 Nectarines 2017 4
15 Plums 2017 4
16 Grapes 2017 5
17 Strawberries 2017 3
x = list(zip(df_melted['fruits'], df_melted['year']))
# 使用 Seaborn 绘制复合柱状图
sns.barplot(data=df_melted, x='fruits', y='counts', hue='year')

# 显示图表
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第2张图片

# 使用 Seaborn 绘制复合柱状图
sns.barplot(data=df_melted, x='year', y='counts', hue='fruits')

# 显示图表
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第3张图片

# 使用 Seaborn 绘制复合柱状图
sns.barplot(data=df_melted, x='year', y='counts', hue='fruits')

# 设置图例水平排列
plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.1), ncol=3)

# 显示图表
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第4张图片

# 使用 Seaborn 绘制复合柱状图
sns.barplot(data=df_melted, x='year', y='counts', hue='fruits')

# 调整图例位置和间距
plt.legend(loc='upper center', title='', bbox_to_anchor=(0.5, 1.2), ncol=3, labelspacing=0.2)

# 显示图表
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第5张图片

import matplotlib.pyplot as plt

# 数据准备
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]
colors = ["#c9d9d3", "#718dbf", "#e84d60"]
data = {'fruits' : fruits,
        '2015'   : [2, 1, 4, 3, 2, 4],
        '2016'   : [5, 3, 4, 2, 4, 6],
        '2017'   : [3, 2, 4, 4, 5, 3]}

# 绘制堆叠柱状图
bottom = [0] * len(fruits)
for year, color in zip(years, colors):
    plt.bar(fruits, data[year], bottom=bottom, color=color, label=year)
    bottom = [b + d for b, d in zip(bottom, data[year])]

# 设置标题和标签
plt.title("Fruit Counts by Year")
plt.xlabel("Fruits")
plt.ylabel("Counts")

# 添加图例
plt.legend()

# 显示图表
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第6张图片

# 绘制水平柱状图
sns.barplot(data=df_melted, x='counts', y='fruits', hue='year', palette=colors, estimator=sum, orient='h')

# 设置标题和标签
plt.title("Fruit Counts by Year")
plt.xlabel("Counts")
plt.ylabel("Fruits")

# 显示图表
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第7张图片

# 绘制水平柱状图
bottom = [0] * len(fruits)
for year, color in zip(years, colors):
    plt.barh(fruits, data[year], left=bottom, color=color, label=year)
    bottom = [b + d for b, d in zip(bottom, data[year])]

# 设置标题和标签
plt.title("Fruit Counts by Year")
plt.xlabel("Counts")
plt.ylabel("Fruits")

# 添加图例
plt.legend()

# 显示图表
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第8张图片

散点图

sns.scatterplot(x='petal_length',y='sepal_length',hue='species',style='species',s=90,data=data)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第9张图片

下面是各个参数的含义:

x 和 y:表示散点图中 x 轴和 y 轴变量的名称。
hue:表示分类变量的名称。每个不同的类别将用不同的颜色表示。
style:表示分类变量的名称。每个不同的类别将使用不同的样式(例如圆形、三角形等)表示。
s:表示散点的大小。
data:表示包含数据的 Pandas 数据框。
在你提供的代码中,散点图的 x 轴变量为 petal_length,y 轴变量为 sepal_length。species 用作分类变量,并使用不同的颜色和样式来表示每个不同的类别。每个散点的大小由参数 s=90 指定。

直方图

sns.histplot(x='sepal_length',kde=True,data=data)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第10张图片

??sns.distplot
# 插入代码块:Distplot
plt.figure(figsize=(8, 6))
sns.distplot(data['sepal_length'], bins=16, color="firebrick",)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第11张图片

sns.histplot(x='sepal_length',kde=True,hue='species',data=data)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第12张图片

折线图

sns.lineplot(x='petal_length',y='petal_width',data=data)
# plt.grid(True)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第13张图片

sns.regplot(x='petal_length', y='petal_width', data=data)
# plt.grid(True)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第14张图片

x 和 y:表示散点图中 x 轴和 y 轴变量的名称。
data:表示包含数据的 Pandas 数据框。
scatter:表示是否绘制散点图。默认为 True。
fit_reg:表示是否绘制拟合曲线。默认为 True。
ci:表示用于计算置信区间的方法。默认为 95% 的置信区间,可设定为 None、‘sd’ 或 float 类型的值。
order:表示拟合曲线的阶数。默认为 1,即线性模型。
truncate:表示是否忽略位于 x 轴边缘的点。默认为 False。
x_jitter 和 y_jitter:表示添加的噪声大小,用于避免重叠的点。
color、marker、line_kws 等其他参数可以用于自定义拟合曲线和散点图的样式。

我们使用 sns.regplot() 函数来绘制散点图和拟合曲线。x=‘petal_length’ 和 y=‘petal_width’ 指定了 x 轴和 y 轴的变量。data=data 表示数据来自名为 data 的 Pandas 数据框。

如果你想只绘制散点图,可以将 fit_reg 参数设为 False。

雷达图

from math import pi
# 数据准备
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]
data = {'fruits' : fruits,
        '2015'   : [2, 1, 4, 3, 2, 4],
        '2016'   : [5, 3, 4, 2, 4, 6],
        '2017'   : [3, 2, 4, 4, 5, 3]}

# 转换数据为长格式
df = pd.DataFrame(data)
df_melted = pd.melt(df, id_vars=['fruits'], var_name='year', value_name='counts')

# 获取每个年份的最大值,用于设置雷达图的坐标轴范围
max_value = df_melted['counts'].max()

# 创建绘图区域
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))

# 绘制雷达图
for year in years:
    values = df_melted[df_melted['year'] == year]['counts'].tolist()
    values.append(values[0])  # 让雷达图形成闭环
    angles = [i / len(fruits) * 2 * pi for i in range(len(fruits))]  # 分割圆周成等距离角度
    angles.append(angles[0])  # 让雷达图形成闭环
    sns.lineplot(x=angles, y=values, ax=ax)
    ax.fill(angles, values, alpha=0.25)  # 填充雷达区域

# plt.legend(years, loc='upper left')
# 调整图例位置和间距
# plt.legend(years, loc='upper left', title='', bbox_to_anchor=(0.5, 1.2), ncol=3, labelspacing=0.2)

# 设置雷达图的坐标轴范围和标签
ax.set_ylim(0, max_value)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(fruits)
ax.set_title("Fruit Counts by Year")

# 显示图表
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第15张图片

风琴图

sns.violinplot(x='species',y='petal_length',data=data,hue='species')
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第16张图片

箱线图

sns.boxplot(x='species',y='sepal_length',data=data,hue='species')
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第17张图片

# 单个连续变量
ser = data['sepal_length']

plt.figure(figsize=(10, 6))

plt.subplot(211)
ser.plot.hist(bins = 10, density = True)
plt.title("Histogram of charges")

# 计算高斯分布
mu, std = norm.fit(ser)
x_vals = np.linspace(ser.min(), ser.max(), 100)
y_vals = norm.pdf(x_vals, mu, std)

# 绘制高斯分布曲线
plt.plot(x_vals, y_vals,color='orange')

plt.subplot(212)
ser.plot.box(vert=False)

01-EDA-iris-数据探索-seaborn可视化方案_第18张图片

热力图

heat_corr=data.iloc[:,0:4].corr()
sns.heatmap(heat_corr,annot=True)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第19张图片

heat_corr = data.iloc[:, 0:4].corr()
cmap = sns.color_palette("Set2")
sns.heatmap(heat_corr, annot=True, cmap=cmap)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第20张图片

点图

sns.pointplot(x='species',y='petal_length',data=data,markers ='^',color='g')
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第21张图片

x 和 y:表示 x 轴和 y 轴的变量名称。
data:表示包含数据的 Pandas 数据框。
markers:表示点图中使用的标记符号。默认为 None。
color:表示点图中的颜色。默认为 None。
ci:表示用于计算置信区间的方法。默认为 95% 的置信区间,可设定为 None、‘sd’ 或 float 类型的值。
estimator:表示要计算的统计量。默认为均值,可设定为 numpy.median 等函数。

我们使用 sns.pointplot() 函数来绘制点图。x=‘species’ 和 y=‘petal_length’ 分别指定了 x 轴和 y 轴的变量。data=data 表示数据来自名为 data 的 Pandas 数据框。

此外,我们还使用了 markers=‘^’ 来指定点图中使用的标记符号为三角形,color=‘g’ 来指定点图的颜色为绿色。

密度图

sns.kdeplot(x='petal_length',data=data,hue='species',multiple='stack')
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第22张图片

sns.kdeplot(x='petal_length', y='sepal_length', data=data, hue='species')
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第23张图片

计数图

sns.countplot(x='species', data=data)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第24张图片

# 创建随机颜色列表
num_colors = len(data['species'].unique())
color_palette = sns.color_palette('muted', num_colors)  # hls

# 绘制 countplot,并设置随机颜色
sns.countplot(x='species', data=data, palette=color_palette)

plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第25张图片

sns.color_palette() 函数有几个常用的参数,可以通过这些参数来指定颜色列表或颜色映射。

以下是sns.color_palette() 的主要参数:

palette: 可以接受预定义的颜色名称,也可以传递一个颜色列表。常用的预定义颜色名称有:‘deep’、‘muted’、‘bright’、‘pastel’、‘dark’、‘colorblind’ 等。
n_colors: 指定要从调色板中选择的颜色数量。
as_cmap: 如果设置为 True,将返回一个颜色映射而不是颜色列表。
以下是一些常见的预定义调色板名称:

‘deep’: 深色调色板
‘muted’: 柔和色调调色板
‘bright’: 鲜明明亮的调色板
‘pastel’: 柔和的粉彩调色板
‘dark’: 深色调色板
‘colorblind’: 配色方案适用于色盲的调色板

蜂群图

sns.swarmplot(x='sepal_width',y='species',data=data,hue='species',dodge=True,orient='h',size=8)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第26张图片

配对图

sns.set(rc = {"figure.figsize":(6,3)})  # 特征多的时候不要用,速度慢
sns.pairplot(data=data,hue='species')
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第27张图片

Facet Grid

Seaborn中的FacetGrid函数将数据集和一个或多个分类变量作为输入,并创建一个图表网格,每种类别变量的组合都有一个图表。网格中的每个图都可以定制为不同类型的图,例如散点图、直方图或箱形图。

g=sns.FacetGrid(data, col="species",height=4,hue='species')
g.map(sns.histplot, "petal_length")
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第28张图片

联合分布图

联合分布图将两个不同的图组合在一个表示中,可以展示两个变量之间的关系(二元关系)

sns.jointplot(x="sepal_length", y="sepal_width", data=data,
                              palette='Set2',hue='species')  # hue分组
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第29张图片

# 插入代码块:Distplot
plt.figure(figsize=(8, 6))

# 使用Seaborn绘制二维关系图
sns.jointplot(x="sepal_length", y="sepal_width",data=data,  height=7) # color="lightsalmon",

plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第30张图片

# 插入代码块:jointplot
plt.figure(figsize=(8, 6))
# 绘制Hexbin图
sns.jointplot(x="sepal_length", y="sepal_width", data=data, kind="hex", color="lightcoral")
plt.suptitle("Hexbin Plot", y=1.02)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第31张图片

分类图

cat图(分类图的缩写)是Seaborn中的定制的一种图,它可以可视化数据集中一个或多个分类变量与连续变量之间的关系。它可用于显示分布、比较组或显示不同变量之间的关系。

sns.catplot(data=data, x="petal_length", y="species", kind="violin", color=".9", inner=None)
sns.swarmplot(data=data, x="petal_length", y="species", size=3)
plt.show()

01-EDA-iris-数据探索-seaborn可视化方案_第32张图片


你可能感兴趣的:(05_数据可视化,python)