热力图/第二密度图/蜘蛛网图/树状图:Python中的四种实用可视化方法
热力图
热力图是一种数据矩阵表示方法,其中每个元素值矩阵由一种颜色表示。不同的颜色代表不同的值,要比较的两个或两个特征通过矩阵索引链接在一起。热图非常适合展示各种特征变量之间的关系,因为你可以通过颜色立即了解该位置矩阵元素的大小。通过查看热图上的其他点,您还可以了解每个关系与数据集中其他关系的比较情况。颜色非常直观,为我们提供了一种非常简单的方法来解释数据。
现在我们看一下实现代码。与“matplotlib”相比,“seaborn”可以用来绘制更高级的图形,这通常需要其他组件,例如一些颜色、图形或变量。 “matplotlib”可以用来显示图形,“NumPy”可以用来生成数据,“pandas”可以用来处理数据!绘图只是“seaborn”的一个简单功能。
# Importing libs
import seaborn as sns
import pandas as pd
import numpy as np
import as plt
# Create a random dataset
data = (((10,6)), columns=["Iron Man","Captain America","Black Widow","Thor","Hulk", "Hawkeye"])
print(data)
# Plot the heatmap
heatmap_plot = (data, center=0, cmap='gist_ncar')
()
二维密度图
二维密度图(2D Density Plot)是一维版本密度图的直观扩展。与一维版本相比,优点是可以看到两个变量的概率分布。例如,在下面的二维密度图中,右侧的比例图使用颜色来表示每个点的概率。我们的数据最有可能出现的地方(即数据点最集中的地方)看起来大约是大小=,速度=。众所周知,二维密度图对于快速查找具有两个变量的数据最集中的区域非常有用,而不是像一维密度图那样只有一个变量。当您有两个对输出很重要的变量并且想要了解它们如何协同工作以影响输出分布时,使用二维密度图查看数据非常有用。
事实再次证明,使用“seaborn”编写代码是非常方便的!这次,我们将创建一个偏态分布,使数据可视化更加有趣。您可以调整大多数可选参数以使可视化看起来更清晰。
# Importing libs
import seaborn as sns
import as plt
from import skewnorm
# Create the data
speed = (4, size=50)
size = (4, size=50)
# Create and shor the 2D Density plot
ax = (speed, size, cmap="Reds", shade=False, bw=.15, cbar=True)
(xlabel='speed', ylabel='size')
()
蜘蛛图
蜘蛛图是显示一对多关系的最佳方式之一。换句话说,您可以绘制并查看与变量或类别相关的各种变量的值。在蜘蛛网图中,一个变量相对于另一个变量的重要性是显而易见的,因为覆盖的面积和距中心的长度在某些方向上变得更大。如果您想了解这些变量如何描述不同类别的对象,可以将它们绘制在一起。在下面的图表中,可以很容易地比较复仇者联盟的各种属性,看看他们的优势在哪里! (请注意,数据是随机设置的,我对复仇者联盟成员没有偏见。)
这里,我们可以直接使用“matplotlib”而不是“seaborn”来创建可视化结果。我们需要让每个属性在圆周上等距分布。我们将在每个角上设置一个标签,然后将值绘制为一个点,其与中心的距离取决于值/大小。最后,为了看起来更清晰,我们将使用半透明颜色来填充连接属性点的线所覆盖的区域。
# Import libs
import pandas as pd
import seaborn as sns
import numpy as np
import as plt
# Get the data
df=("")
print(df)
"""
# Name Attack Defense Speed Range Health
0 1 Iron Man 83 80 75 70 70
1 2 Captain America 60 62 63 80 80
2 3 Thor 80 82 83 100 100
3 3 Hulk 80 100 67 44 92
4 4 Black Widow 52 43 60 50 65
5 5 Hawkeye 58 64 58 80 65
"""
# Get the data for Iron Man
labels=(["Attack","Defense","Speed","Range","Health"])
stats=[0,labels].values
# Make some calculations for the plot
angles=(0, 2*, len(labels), endpoint=False)
stats=((stats,[stats[0]]))
angles=((angles,[angles[0]]))
# Plot stuff
fig = ()
ax = (111, polar=True)
(angles, stats, 'o-', linewidth=2)
(angles, stats, alpha=)
_thetagrids(angles * 180/, labels)
_title([[0,"Name"]])
(True)
()
树形图
我们从小学就开始使用树形图了!树状图自然且直观,这使得它们易于解释。直接连接的节点相关性密切,而连接较多的节点相似度较低。在下面的可视化中,我根据 Kaggle 统计数据(生命值、攻击、防御、特殊攻击、特殊防御、速度)绘制了 Pokemon 游戏数据集的一小部分的树状图。
因此,统计上最相容的神奇宝贝将密切相关。例如,在图表的顶部,Arbor 和 Screech 是直接相连的,如果我们看数据的话,Arbor 的总分是 438,Screech 的分数是 442,非常接近!但如果我们看Lada,我们可以看到它的总分是413,这与Arbor和Apex有很大不同,所以它们在树形图中是分开的!当我们爬上树时,绿色组中的神奇宝贝比红色组中的神奇宝贝彼此更相似,尽管没有直接的绿色连接。
对于树形图,我们需要使用“Scipy”来绘制!读取数据集中的数据后,我们将删除字符串字段。这样做只是为了让可视化更直观、更容易理解,但在实践中,将字符串转为类别变量会给出更好的结果和比较。我们还设置了数据帧索引,以便它可以正确地用作引用每个节点的列。答:最后我要告诉你的是,在“Scipy”中计算和绘制树状图只需要一行简单的代码。
# Import libs
import pandas as pd
from matplotlib import pyplot as plt
from import hierarchy
import numpy as np
# Read in the dataset
# Drop any fields that are strings
# Only get the first 40 because this dataset is big
df = ('')
df = ('Name')
del .name
df = (["Type 1", "Type 2", "Legendary"], axis=1)
df = (n=40)
# Calculate the distance between each sample
Z = (df, 'ward')
# Orientation our tree
hierarchy.dendrogram(Z, orientation="left", labels=)
()
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。