直方图是一种强大的工具,用于揭示数据集的分布情况。本文将从直方图的全面定义开始,通过代表频率的块来展示统计洞察。将深入探讨直方图的重要性,讨论何时部署它们以及它们在现实世界中的应用。理解它们在提取业务洞察中的作用,强调了数据可视化在数据科学项目中的重要性,其中像Matplotlib这样的工具方便了直方图的绘制。
在使用任何技术之前,首先需要分析何时使用该技术(在本例中为直方图)以获得最佳效果。因此,在本节中,将讨论一些关键方面,直方图在这些方面可以非常有用。
在使用直方图时,首先要记住的是数据类型,这通常可以更好地洞察数值数据。如果想要查看数据集的分布情况,这种图表就非常有用,可以帮助确定数据是否呈正态分布。直方图还可以帮助了解客户的流程,即输出的生成情况。当得到问题陈述以分析时间序列数据时,直方图可以来救援,帮助开始分析,这可以确定随时间发生的变化。直方图还非常有助于识别流行的统计度量,如中位数、标准中位数、最小值和最大值数据点。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb
import pandas as pd
plt.rcParams["figure.figsize"] = (10,6)
让简要讨论导入的每个库的用途:Numpy:用于使用预定义的函数实现统计和数学公式。Matplotlib:这是数据可视化的原始库,将主要使用它来绘制图表/图形。Seaborn:另一个基于matplotlib的可视化库。Pandas:用于DataFrame操作和数据清洗。
让加载一些1D数据并深入了解它!为了使本节易于理解,生成的数据是随意组合的。它不仅仅是Scipy的分析函数——那会太容易了——但已确保它不是病态的。让从导入开始,以确保一开始就拥有所有正确的内容。如果这出现错误,使用pip install安装没有的任何依赖项。如果遇到问题(特别是在Windows机器上使用NumPy时),请尝试使用Conda install。例如:
import numpy as np
# 如果需要使用Conda安装NumPy,请取消注释下一行。
# !conda install numpy
# 现在,让从两个文件"example_1.txt"和"example_2.txt"加载数据。
d1 = np.loadtxt("example_1.txt")
d2 = np.loadtxt("example_2.txt")
# 打印加载的数据数组的形状。
print("输出:", d1.shape, d2.shape)
输出:(500,) (500,) 如上所述,已经加载了两个数据集,这些数据集是为演示目的创建的,当查看两个数据集的形状时,发现它们都有500行。
现在是时候深入了解直方图的不同方面了。在这里,将讨论3种图表,这些图表可以帮助同时获得两个数据集的名义数据分布。
普通图表:对于直方图的基本理解,即查看指定范围内数据点的分布。
密度和箱:进一步了解密度参数将帮助了解与直方图的概率联系,箱将有助于标准化。
自定义样式:为了给直方图一个良好的外观和感觉,也将根据它们的可用性进行自定义。
plt.hist(d1, label="D1")
plt.hist(d2, label="D2")
plt.legend()
plt.ylabel("计数");
运行代码查看输出
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb
import pandas as pd
plt.rcParams["figure.figsize"] = (10,6)
d1 = np.loadtxt("example_1.txt")
d2 = np.loadtxt("example_2.txt")
print(d1.shape, d2.shape)
plt.hist(d1, label="D1")
plt.hist(d2, label="D2")
plt.legend()
plt.ylabel("计数")
plt.show()
使用Python的Matplotlib绘制直方图的代码
已经使用matplotlib的hist plot为D1和D2绘制了直方图。请注意,在图表中,可以看到蓝色区域作为D1,黄色区域作为D2,由legend()函数执行。
缺点:主要缺点是图表完全不透明;因此无法清楚地看到分布;其次是不规则的箱大小,这正在讲述一个虚假的故事。
bins = np.linspace(min(d1.min(), d2.min()), max(d1.max(), d2.max()), 50)
counts1, _, _ = plt.hist(d1, bins=bins, label="D1")
plt.hist(d2, bins=bins, label="D2")
plt.legend()
plt.ylabel("计数");
这是输出
在这一步中,已经几乎解决了通过规范化箱来解决缺点,以便现在刺激虚假故事的数据点可以提供更好的洞察。
而不是默认箱,已经创建了一个新的变量,它存储了D1和D2数据集分布的最小值和最大值的范围,以便拥有自定义箱。
bins = np.linspace(min(d1.min(), d2.min()), max(d1.max(), d2.max()), 50)
counts1, _, _ = plt.hist(d1, bins=bins, label="D1", density=True)
plt.hist(d2, bins=bins, label="D2", density=True)
plt.legend()
plt.ylabel("概率");
输出
正如文章开头提到的,直方图与概率高度相关。人们可以注意到Y轴,并与之前的图表进行比较,那里有计数,而在本图中,有概率分布。通过添加一个参数,即density并将其设置为True来实现这一点。
bins = np.linspace(min(d1.min(), d2.min()), max(d1.max(), d2.max()), 50)
plt.hist([d1, d2], bins=bins, label="Stacked", density=True, alpha=0.5)
plt.hist(d1, bins=bins, label="D1", density=True, histtype="step", lw=1)
plt.hist(d2, bins=bins, label="D2", density=True, histtype="step", ls=":")
plt.legend()
plt.ylabel("概率");
检查输出
现在来到了样式部分,将通过改变和添加一些来自hist()函数的参数来改善Matplotlib的直方图的外观和感觉。
堆叠图表:没有特定的函数来实现堆叠功能。只需要将两个或三个数据集作为列表添加,工作就完成了!
Alpha:此参数用于管理条形的不透明度。当想要突出显示一个数据而不是另一个数据时,可以使用此参数。
Hist-Type:此参数可以将典型的直方图转换为条形图(步骤),正如可以看到连续分布之间的间距,这与条形图非常相似。
线宽和线型:线宽表示为“l-w”,这有助于增加或减少线条的宽度,而线型表示为ls;人们可以注意到选择了“:”,这对于D2数据集也是可见的。
现在到达了文章的最后一部分,将简要回顾到目前为止讨论的有关直方图的所有内容——包括它们的定义、目的、应用和实际实施。与其提供段落解释,不如选择逐点简介。