📜  直方图的解释

📅  最后修改于: 2022-05-13 01:54:33.971000             🧑  作者: Mango

直方图的解释

直方图是条形图的一种变体,其中数据值组合在一起并放入不同的类中。通过此分组,您可以查看每个类中的数据在数据集中出现的频率。

直方图以图形方式显示以下内容:

  • 数据集中不同数据点的频率。
  • 数据中心的位置。
  • 数据集的传播。
  • 数据集的偏度/方差。
  • 数据集中存在异常值。

这些特征为数据中的正确分布模型提供了强有力的指示。概率图或拟合优度检验可用于验证分布模型。

直方图包含以下轴:

  • 垂直轴:每个 bin 的频率/计数。
  • 水平轴:箱/类别列表。

直方图的解释:

  • 正常直方图:这是一个经典的钟形直方图,大部分频率计数集中在中间,尾部逐渐减少,并且相对于中位数是对称的。由于正态分布在实际场景中最常见,因此您最有可能找到这些。在正态分布直方图中,均值几乎等于中值。
  • 非正态短尾/长尾直方图:在短尾分布中,随着我们从数据的中位数移动,尾部非常快地接近 0,在长尾直方图中,当我们远离中位数。在这里,我们将尾部称为直方图中的极端区域,其中大部分数据不集中,并且位于峰值的两侧。
  • 双峰直方图:数据的一种模式表示直方图中最常见的值(即直方图的峰值。双峰直方图表示直方图中有两个峰值。直方图可用于测试数据的单峰性。双峰(或例如非单峰性)在数据集中表示过程有问题。双峰直方图许多一个或两个字符:双峰正态分布和对称分布
  • 倾斜的左/右直方图:倾斜的直方图是一侧的尾巴明显比另一侧的尾巴长的直方图。右偏直方图意味着峰的右侧尾部比左侧更拉伸,反之亦然。在左偏直方图中,均值总是小于中位数,而在右偏直方图中,均值大于直方图。
  • 均匀直方图:在均匀直方图中,每个 bin 包含大约相同数量的计数(频率)。统一直方图的例子是一个骰子被滚动 n (n>>30) 次并记录不同结果的频率。
  • 具有异常值的正态分布:此直方图类似于正态直方图,但它包含一个异常值,其中结果的计数/概率是实质性的。这主要是由于过程中出现了一些系统错误,导致产品生成错误等。

执行

  • 在这个实现中,我们将使用 Numpy、Matplotlib 和 Seaborn 绘图库。这些库预先安装在 colab 中,但是对于本地环境,您可以使用pip install命令轻松安装这些库。
Python3
# Imports
import numpy as np
import matplotlib.pylot as plt
import seaborn as sns
 
# Normal histogram plot
data = np.random.normal(10.0, 3, 500)
sns.displot(data, kde= True, bins=10, color='black')
 
# Left-skewed Histogram
wc_goals =[0]* 19 + [1]*49 + [2]*60 + [3] *47 + [4]*32 + [5]* 18+ [6]*3 + [7]*3 + [8]
sns.displot(wc_goals, bins=8, kde= True, alpha =0.6,color='blue')
 
# Right-skewed Histogram
wc_goals_conc =
    [0]* 19 + [-1]*49 + [-2]*60 + [-3] *47 + [-4]*32 + [-5]* 18+ [-6]*3 + [-7]*3 + [-8]
sns.displot(wc_goals_conc, kde = True,bins=8,  alpha=0.6, color='red')
 
# Bi-modal histogram
N=400
mu_1, sigma_1 = 80, 10
mu_2, sigma_2 = 20, 10
# Generate two normal distributios of given mean sdand concatenate
X_1 = np.random.normal(mu, sigma, N)
X_2 = np.random.normal(mu2, sigma2, N)
X = np.concatenate([X1, X2])
sns.displot(X,bins=10,kde=True , color='green')
 
# Uniform histogram (an example of die roll with N=600)
die_roll =  [1]*89 + [2]*94 + [3]*110 + [4]*101 + [5]*90 +[6]*116
sns.displot(die_roll, kde=True, bins =6)
 
# Normal distribution with an outlier
X_1 = np.random.normal(mu, sigma, N)
X_1 =np.concatenate([X1, [200]*30])
sns.displot(X_1, kde= True, bins=13)



正态直方图

偏左直方图

偏右直方图

双峰直方图

均匀直方图

正常与异常值