用NumPy 模块对bin进行nums计算的直方图
在这篇文章中,我们将讨论如何使用NumPy 模块对bin进行nums计算。直方图是可视化数据集频率分布的最佳方式,它将数据集分割成大小相等的小区间,称为bin。Numpy直方图函数类似于_matplotlib库的hist()函数,唯一的区别是NumPy直方图给出数据集的数字表示,而hist()给出数据集的图形表示。
在创建直方图的时候,最好不要用分仓的方式来考虑,而是要找到每个值出现的次数,即频率表。为此目的,Python字典是非常合适的。下面是纯Python中直方图的简单实现。
# Dataset
a = (1, 3, 7, 7, 2, 3, 4, 7, 6, 6, 3, 5, 2)
# Creating empty dictionary
hist = {}
# Counting the number of occurrences
for i in a:
hist[i] = hist.get(i, 0) + 1
# Printing the frequency table i.e histogram
print(hist)
输出:
{1: 1, 3: 3, 7: 3, 2: 2, 4: 1, 6: 2, 5: 1}
Numpy有一个内置的numpy.histogram()函数,以图形的形式表示数据分布的频率。具有相同水平尺寸的矩形对应于称为bin的类区间,可变高度对应于频率。
语法: numpy.histogram(data, bins=10, range=None, normed=None, weights=None, density=None)
参数:
- data: 要绘制的数组或数组的序列。
- bins:int或str序列,定义一个范围内等宽的bins数量,默认为10。
- range: 可选的参数,设置分层的下限和上限范围。
- normed:可选参数,与密度属性相同,对不等的bin宽度给出不正确的结果。
- weights: 可选的参数,定义了与数据具有相同尺寸的权重数组。
- density:可选参数,如果是假的,结果包含每个仓的样本数,如果是真的,结果包含仓的概率密度函数。
实现:
# Import libraries
import numpy as np
# Creating dataset
a = np.random.randint(100, size =(50))
# Creating histogram
np.histogram(a, bins = [0, 10, 20, 30, 40,
50, 60, 70, 80, 90,
100])
hist, bins = np.histogram(a, bins = [0, 10,
20, 30,
40, 50,
60, 70,
80, 90,
100])
# Displaying histogram
print (hist)
print (bins)
输出:
[5 7 4 7 4 5 1 6 4 7]
[ 0 10 20 30 40 50 60 70 80 90 100]
这里,np.histogram()函数有两个返回值_hist,它给出了直方图的数值数组,而edge_bin是一个浮动数据类型的数组,包含长度比hist多一个的bin边缘。
上述直方图的数字表示可以转换为图形形式。Matplotlib的pyplot子模块中的plt()_函数以数据集数组和bin数组为参数,创建相应数据值的柱状图。下面是一些计算nums与bin的直方图的例子。
示例 1:
# Import libraries
from matplotlib import pyplot as plt
import numpy as np
# Creating dataset
a = np.random.randint(100, size=(50))
# Creating plot
fig = plt.figure(figsize=(10, 7))
plt.hist(a, bins=[0, 10, 20, 30,
40, 50, 60, 70,
80, 90, 100])
plt.title("Numpy Histogram")
# show plot
plt.show()
输出:
示例 2:
# Import libraries
from matplotlib import pyplot as plt
import numpy as np
# Creating dataset
l = [i for i in range(50)]
# Creating plot
plt.hist(l, bins=[1, 2, 3, 4, 5],
color='green')
# show plot
plt.show()
输出:
示例 3:
# Import libraries
from matplotlib import pyplot as plt
import numpy as np
# Creating dataset
l = np.random.randint(150)
# Creating plot
plt.hist(l, bins=l,
color='lime')
# show plot
plt.show()
输出: