Hướng dẫn dùng np.histogram python

Thùng là phạm vi thể hiện chiều rộng của một thanh đơn của biểu đồ dọc theo trục X. Bạn cũng có thể gọi đây là khoảng thời gian. (Wikipedia định nghĩa chúng chính thức hơn là "các danh mục rời rạc".)

Hàm Numpy histogramkhông vẽ biểu đồ, nhưng nó tính toán các lần xuất hiện của dữ liệu đầu vào nằm trong mỗi thùng, từ đó xác định diện tích (không nhất thiết là chiều cao nếu các thùng không có chiều rộng bằng nhau) của mỗi thanh.

Trong ví dụ này:

 np.histogram([1, 2, 1], bins=[0, 1, 2, 3])

Có 3 thùng, lần lượt cho các giá trị từ 0 đến 1 (không bao gồm 1), 1 đến 2 (không bao gồm 2) và 2 đến 3 (bao gồm 3). Cách Numpy xác định các thùng này nếu bằng cách đưa ra danh sách các dấu phân cách ( [0, 1, 2, 3]) trong ví dụ này, mặc dù nó cũng trả về các thùng trong kết quả, vì nó có thể chọn chúng tự động từ đầu vào, nếu không có dấu nào được chỉ định. Nếu bins=5, ví dụ, nó sẽ sử dụng 5 thùng của bằng chiều rộng chênh lệch giữa giá trị đầu vào tối thiểu và giá trị đầu vào tối đa.

Các giá trị đầu vào là 1, 2 và 1. Do đó, bin "1 đến 2" chứa hai lần xuất hiện (hai 1giá trị) và bin "2 đến 3" chứa một lần xuất hiện ( 2). Các kết quả này trong mục đầu tiên trong tuple trả về: array([0, 2, 1]).

Vì các thùng ở đây có chiều rộng bằng nhau, bạn có thể sử dụng số lần xuất hiện cho chiều cao của mỗi thanh. Khi rút ra, bạn sẽ có:

  • thanh có chiều cao 0 cho dải / thùng [0,1] trên trục X,
  • thanh có chiều cao 2 cho phạm vi / thùng [1,2],
  • thanh có chiều cao 1 cho phạm vi / thùng [2,3].

Bạn có thể vẽ biểu đồ này trực tiếp bằng Matplotlib ( histhàm của nó cũng trả về các thùng và giá trị):

>>> import matplotlib.pyplot as plt
>>> plt.hist([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]), )
>>> plt.show()

Hướng dẫn dùng np.histogram python

178 hữu ích 4 bình luận chia sẻ

Thật khó tưởng tượng rằng bạn mở một tờ báo hoặc tạp chí mà không thấy một số biểu đồ cho bạn biết về số người hút thuốc trong các nhóm tuổi nhất định, số ca sinh trong một năm và vv. Đó là một cách tuyệt vời để miêu tả các sự kiện mà không cần phải sử dụng quá nhiều từ, nhưng về mặt hạn chế, chúng cũng có thể được sử dụng để thao túng hoặc nói dối qua thống kê.

Histogram là gì? Một định nghĩa chính thức có thể là: Đây là một đại diện đồ họa của một phân bố tần suất của một số dữ liệu số. Hình chữ nhật có kích thước bằng nhau theo hướng ngang có chiều cao tương ứng với tần suất.

Nếu chúng ta xây dựng một histogram, chúng ta sẽ bắt đầu phân bố phạm vi của các giá trị x có thể vào các khoảng hoặc thùng chứa thường có kích thước bằng nhau và liền kề.

Bây giờ chúng ta bắt đầu với một chương trình Python thực tiễn. Chúng tôi tạo một histogram với các số ngẫu nhiên:

>>> import matplotlib.pyplot as plt

>>> import numpy as np

>>> gaussian_numbers = np.random.normal(size=1000)

>>> plt.hist(gaussian_numbers)

(array([  10.,   29.,  118.,  231.,  265.,  221.,  100.,   22.,    3.,    1.]), array([-3.09815172, -2.40020948, -1.70226724, -1.00432499, -0.30638275,

        0.39155949,  1.08950174,  1.78744398,  2.48538622,  3.18332846,

        3.88127071]), )

>>> plt.title("Gaussian Histogram")



>>> plt.xlabel("Value")



>>> plt.ylabel("Frequency")



>>> plt.show()

>>> n, bins, patches = plt.hist(gaussian_numbers)

>>> print("n: ", n, sum(n))

('n: ', array([  10.,   29.,  118.,  231.,  265.,  221.,  100.,   22.,    3.,    1.]), 1000.0)

>>> print("bins: ", bins)

('bins: ', array([-3.09815172, -2.40020948, -1.70226724, -1.00432499, -0.30638275,

        0.39155949,  1.08950174,  1.78744398,  2.48538622,  3.18332846,

        3.88127071]))

>>> print("patches: ", patches)

('patches: ', )

>>> print(patches[1])

Rectangle(-2.40021,0;0.697942x29)

>>>

Chúng ta có thể tùy chỉnh số bin.


>>> plt.hist(gaussian_numbers, bins=100)

>>> plt.show()

Một tham số quan trọng khác của hist là "normed". "normed" là tùy chọn và giá trị mặc định là 'False'. Nếu nó được đặt thành 'True', phần tử đầu tiên của bộ dữ liệu trả về sẽ được đếm bình thường để tạo thành mật độ xác suất.


>>> plt.hist(gaussian_numbers, bins=100, normed=True)
>>> plt.show()

>>>

Nếu cả hai tham số ‘normed’ và 'stacked' được đặt thành 'True', tổng của biểu đồ được normalized thành 1.

>>> plt.hist(gaussian_numbers,

...          bins=100,

...          normed=True,

...          stacked=True,

...          edgecolor="#6A9662",

...          color="#DDFFDD")

>>> plt.show()

Nếu bạn muốn xem nó như mô tả một hình vẽ với giá trị lũy tiến? Chúng ta có thể vẽ nó như một hàm phân phối lũy tiến bằng cách thiết lập tham số 'cumulative'.

>>> plt.hist(gaussian_numbers,

...          bins=100,

...          normed=True,

...          stacked=True,

...          cumulative=True)

>>> plt.show()

Thực hành với bar plot qua phương thức bar().

>>> bars = plt.bar([1,2,3,4], [1,4,9,16])

>>> bars[0].set_color('green')

>>> plt.show()

>>>

Và cách thiết lập màu riêng cho các bar để tạo điểm nhấn qua hàm set_color(). Để có đượng bar tương ứng ta dùng hàm get_children() của lớp Axis
>>> ax=f.add_subplot(1,1,1)

>>> ax.bar([1,2,3,4], [1,4,9,16])



>>> children = ax.get_children()

>>> children[2].set_color('g')

>>> plt.show()

Two-Dimensional Histograms and Binnings

Giống như ta tạo histogram trong một chiều bằng cách chia dữ liệu vào thùng, chúng ta cũng có thể tạo histogram theo hai chiều bằng cách chia điểm giữa các thùng chứa hai chiều. Chúng ta sẽ xem xét một số cách để làm điều này ở đây. Chúng ta sẽ bắt đầu bằng cách xác định một số dữ liệu-mảng x và y được rút ra từ một phân bố Gaussian đa biến:

>>> import numpy as np

>>> import matplotlib.pyplot as plt

>>> mean = [0, 0]

>>> cov = [[1, 1], [1, 2]]

>>> x, y = np.random.multivariate_normal(mean, cov, 10000).T

Một cách đơn giản để vẽ histogram hai chiều là sử dụng Matplotlib.

>>> plt.hist2d(x, y, bins=30, cmap='Blues')

>>> cb = plt.colorbar()

>>> cb.set_label('counts in bin')

>>> plt.show()

Biểu đồ histogram hai chiều tạo ra một tesselation của hình vuông qua các trục. Một hình dạng tự nhiên khác cho việc tesselation là hình lục giác thông thường. Với mục đích này, Matplotlib cung cấp phương thức plt.hexbin, nó sẽ đại diện cho một bộ dữ liệu hai chiều được chèn trong một ô lưới lục giác:


plt.hexbin(x, y, gridsize=30, cmap='Blues')



>>> cb = plt.colorbar(label='count in bin')

>>> plt.show()

Kết Luận

Kết thúc bài học này, bạn đọc đã thu được cách thức vẽ biểu đồ tần số (Histogram) đối với dữ liệu 1-D & 2-D. Bài học cũng cố gắng đưa đến người đọc nhiều lựa chọn biểu diễn kèm theo các cách thay đổi tương tứng nhất.