Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Trong hướng dẫn này, bạn sẽ được trang bị để tạo các biểu đồ biểu đồ Python có chất lượng sản xuất, sẵn sàng trình bày với nhiều lựa chọn và tính năng

Nếu bạn có kiến ​​thức nhập môn đến trung cấp về Python và thống kê, thì bạn có thể sử dụng bài viết này như một cửa hàng duy nhất để xây dựng và vẽ biểu đồ biểu đồ trong Python bằng các thư viện từ ngăn xếp khoa học của nó, bao gồm NumPy, Matplotlib, Pandas và Seaborn

Biểu đồ là một công cụ tuyệt vời để đánh giá nhanh phân phối xác suất mà hầu hết mọi đối tượng đều có thể hiểu được bằng trực giác. Python cung cấp một số tùy chọn khác nhau để xây dựng và vẽ biểu đồ. Hầu hết mọi người biết một biểu đồ bằng biểu diễn đồ họa của nó, tương tự như biểu đồ thanh

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Bài viết này sẽ hướng dẫn bạn cách tạo các ô giống như ở trên cũng như các ô phức tạp hơn. Đây là những gì bạn sẽ bao gồm

  • Xây dựng biểu đồ bằng Python thuần túy, không sử dụng thư viện của bên thứ ba
  • Xây dựng biểu đồ với NumPy để tóm tắt dữ liệu cơ bản
  • Vẽ biểu đồ kết quả bằng Matplotlib, Pandas và Seaborn

Tiền thưởng miễn phí. Thời gian ngắn?

Biểu đồ trong Python thuần túy

Khi bạn đang chuẩn bị vẽ một biểu đồ tần suất, đơn giản nhất là đừng nghĩ về các thùng mà hãy báo cáo số lần mỗi giá trị xuất hiện (một bảng tần số). Python rất phù hợp cho nhiệm vụ này

>>>

>>> # Need not be sorted, necessarily
>>> a = (0, 1, 1, 1, 2, 3, 7, 7, 23)

>>> def count_elements(seq) -> dict:
..     """Tally elements from `seq`."""
..     hist = {}
..     for i in seq:
..         hist[i] = hist.get(i, 0) + 1
..     return hist

>>> counted = count_elements(a)
>>> counted
{0: 1, 1: 3, 2: 1, 3: 1, 7: 2, 23: 1}

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
9 trả về một từ điển có các phần tử duy nhất từ ​​chuỗi dưới dạng khóa và tần số (số lượng) của chúng dưới dạng giá trị. Trong vòng lặp trên
>>> recounted.items() == counted.items()
True
0,
>>> recounted.items() == counted.items()
True
1 nói, “đối với mỗi phần tử của chuỗi, hãy tăng giá trị tương ứng của nó trong
>>> recounted.items() == counted.items()
True
2 lên 1. ”

Trên thực tế, đây chính xác là những gì được thực hiện bởi lớp

>>> recounted.items() == counted.items()
True
3 từ thư viện chuẩn của Python, một từ điển Python và ghi đè phương thức
>>> recounted.items() == counted.items()
True
4 của nó

>>>

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})

Bạn có thể xác nhận rằng chức năng thủ công của bạn thực hiện hầu như giống như

>>> recounted.items() == counted.items()
True
3 bằng cách kiểm tra sự bằng nhau giữa hai chức năng

>>>

>>> recounted.items() == counted.items()
True

Chi tiết kỹ thuật. Ánh xạ từ

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
9 ở trên mặc định là được tối ưu hóa cao hơn nếu có sẵn. Trong hàm Python
>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
9, một tối ưu hóa vi mô mà bạn có thể thực hiện là khai báo
>>> recounted.items() == counted.items()
True
8 trước vòng lặp for. Điều này sẽ liên kết một phương thức với một biến để gọi nhanh hơn trong vòng lặp

Có thể hữu ích khi xây dựng các hàm đơn giản hóa từ đầu như là bước đầu tiên để hiểu những hàm phức tạp hơn. Hãy tiếp tục phát minh lại bánh xe một chút với biểu đồ ASCII tận dụng lợi thế của Python

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))

Hàm này tạo một biểu đồ tần suất được sắp xếp trong đó số lượng được biểu diễn dưới dạng các ký hiệu cộng (

>>> recounted.items() == counted.items()
True
9). Gọi
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
0 trên một từ điển sẽ trả về một danh sách đã sắp xếp các khóa của nó, sau đó bạn truy cập giá trị tương ứng cho từng khóa với
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
1. Để thấy điều này hoạt động, bạn có thể tạo một tập dữ liệu lớn hơn một chút với mô-đun
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
2 của Python

>>>

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++

Ở đây, bạn đang mô phỏng việc gảy từ

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
3 với tần số được cung cấp bởi
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
4 (một biểu thức trình tạo). Dữ liệu mẫu thu được lặp lại từng giá trị từ
def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
3 một số lần nhất định trong khoảng từ 5 đến 15

Ghi chú. được sử dụng để tạo hoặc khởi tạo, trình tạo số giả ngẫu nhiên cơ bản (PRNG) được sử dụng bởi

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
2. Nghe có vẻ giống như một nghịch lý, nhưng đây là một cách làm cho dữ liệu ngẫu nhiên có thể tái tạo và xác định. Nghĩa là, nếu bạn sao chép nguyên trạng mã ở đây, bạn sẽ nhận được chính xác cùng một biểu đồ bởi vì lệnh gọi đầu tiên tới ____13_______8 sau khi tạo hạt giống, trình tạo sẽ tạo ra dữ liệu "ngẫu nhiên" giống hệt nhau bằng cách sử dụng Mersenne Twister

Loại bỏ các quảng cáo

Xây dựng từ cơ sở. Tính toán biểu đồ trong NumPy

Cho đến nay, bạn đã làm việc với thứ tốt nhất có thể gọi là “bảng tần số. ” Nhưng về mặt toán học, biểu đồ là ánh xạ của các thùng (khoảng) thành tần số. Về mặt kỹ thuật hơn, nó có thể được sử dụng để tính gần đúng hàm mật độ xác suất (PDF) của biến cơ bản

Tiếp tục từ “bảng tần suất” ở trên, trước tiên, một biểu đồ thực sẽ “phân tách” phạm vi giá trị và sau đó đếm số lượng giá trị rơi vào mỗi ngăn. Đây là chức năng của hàm

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
9 của NumPy và nó là cơ sở cho các hàm khác mà bạn sẽ thấy sau này trong các thư viện Python như Matplotlib và Pandas

Hãy xem xét một mẫu số float được rút ra từ phân phối Laplace. Phân phối này có đuôi béo hơn phân phối bình thường và có hai tham số mô tả (vị trí và tỷ lệ)

>>>

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])

Trong trường hợp này, bạn đang làm việc với phân phối liên tục và sẽ không hữu ích lắm nếu kiểm đếm từng số float một cách độc lập, xuống đến chữ số thập phân thứ mười một. Thay vào đó, bạn có thể tạo thùng hoặc “nhóm” dữ liệu và đếm các quan sát rơi vào mỗi thùng. Biểu đồ là tổng số giá trị trong mỗi thùng

>>>

>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])

Kết quả này có thể không trực quan ngay lập tức.

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
0 theo mặc định sử dụng 10 thùng có kích thước bằng nhau và trả về một bộ giá trị tần số và các cạnh thùng tương ứng. Chúng là các cạnh theo nghĩa là sẽ có một cạnh bin nhiều hơn số thành viên của biểu đồ

>>>

>>> hist.size, bin_edges.size
(10, 11)

Chi tiết kỹ thuật. Tất cả trừ thùng cuối cùng (ngoài cùng bên phải) đang mở một nửa. Nghĩa là, tất cả các ngăn trừ ngăn cuối cùng là [bao gồm, loại trừ) và ngăn cuối cùng là [bao gồm, bao gồm]

Một phân tích rất cô đọng về cách các thùng được xây dựng trông như thế này

>>>

>>> # The leftmost and rightmost bin edges
>>> first_edge, last_edge = a.min(), a.max()

>>> n_equal_bins = 10  # NumPy's default
>>> bin_edges = np.linspace(start=first_edge, stop=last_edge,
..                         num=n_equal_bins + 1, endpoint=True)
...
>>> bin_edges
array([ 0. ,  2.3,  4.6,  6.9,  9.2, 11.5, 13.8, 16.1, 18.4, 20.7, 23. ])

Trường hợp trên có rất nhiều ý nghĩa. 10 ngăn cách đều nhau trên phạm vi từ đỉnh đến đỉnh là 23 có nghĩa là các khoảng có chiều rộng 2. 3

Từ đó, hàm ủy quyền cho

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
1 hoặc
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
2. Bản thân
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
3 có thể được sử dụng để xây dựng hiệu quả “bảng tần suất” mà bạn đã bắt đầu ở đây, với điểm khác biệt là bao gồm các giá trị không có lần xuất hiện nào

>>>

>>> bcounts = np.bincount(a)
>>> hist, _ = np.histogram(a, range=(0, a.max()), bins=a.max() + 1)

>>> np.array_equal(hist, bcounts)
True

>>> # Reproducing `collections.Counter`
>>> dict(zip(np.unique(a), bcounts[bcounts.nonzero()]))
{0: 1, 1: 3, 2: 1, 3: 1, 7: 2, 23: 1}

Ghi chú.

>>> recounted.items() == counted.items()
True
2 ở đây thực sự đang sử dụng các thùng có chiều rộng 1. 0 thay vì đếm "rời rạc". Do đó, điều này chỉ hoạt động để đếm số nguyên, không phải số float, chẳng hạn như
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
5

Trực quan hóa Biểu đồ với Matplotlib và Pandas

Bây giờ bạn đã biết cách xây dựng biểu đồ trong Python từ đầu, hãy xem các gói Python khác có thể thực hiện công việc đó cho bạn như thế nào. Matplotlib cung cấp chức năng trực quan hóa các biểu đồ Python ngay lập tức với một trình bao bọc linh hoạt xung quanh

def ascii_histogram(seq) -> None:
    """A horizontal frequency-table/histogram plot."""
    counted = count_elements(seq)
    for k in sorted(counted):
        print('{0:5d} {1}'.format(k, '+' * counted[k]))
9 của NumPy

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
0

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Như đã định nghĩa trước đó, một biểu đồ của biểu đồ sử dụng các cạnh bin của nó trên trục x và các tần số tương ứng trên trục y. Trong biểu đồ trên, thông qua

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
7 chọn giữa hai thuật toán để ước tính số lượng thùng “lý tưởng”. Ở cấp độ cao, mục tiêu của thuật toán là chọn độ rộng thùng tạo ra biểu diễn dữ liệu trung thực nhất. Để biết thêm về chủ đề này, chủ đề này có thể khá kỹ thuật, hãy xem phần Chọn thùng biểu đồ từ tài liệu Astropy

Ở trong ngăn xếp khoa học của Python, Pandas'

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
8 để vẽ biểu đồ Matplotlib của Sê-ri đầu vào

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
1

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
0 tương tự nhưng tạo biểu đồ cho từng cột dữ liệu trong DataFrame

Loại bỏ các quảng cáo

Vẽ sơ đồ ước tính mật độ hạt nhân (KDE)

Trong hướng dẫn này, bạn đã làm việc với các mẫu, nói một cách thống kê. Cho dù dữ liệu là rời rạc hay liên tục, nó được giả định là bắt nguồn từ một tổng thể có phân phối chính xác, thực tế được mô tả chỉ bằng một vài tham số

Ước tính mật độ hạt nhân (KDE) là một cách để ước tính hàm mật độ xác suất (PDF) của biến ngẫu nhiên “làm cơ sở” cho mẫu của chúng tôi. KDE là một phương tiện làm mịn dữ liệu

Gắn bó với thư viện Pandas, bạn có thể tạo và phủ các ô mật độ bằng cách sử dụng

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
1, có sẵn cho cả đối tượng
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
2 và
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
3. Nhưng trước tiên, hãy tạo hai mẫu dữ liệu riêng biệt để so sánh

>>>

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
2

Bây giờ, để vẽ từng biểu đồ trên cùng một trục Matplotlib

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
3

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Các phương pháp này tận dụng

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
4 của SciPy, dẫn đến một tệp PDF trông mượt mà hơn

Nếu bạn xem xét kỹ hơn chức năng này, bạn có thể thấy nó gần đúng với PDF “đúng” như thế nào đối với một mẫu tương đối nhỏ gồm 1000 điểm dữ liệu. Bên dưới, trước tiên bạn có thể xây dựng bản phân phối “phân tích” với

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
5. Đây là một thể hiện của lớp gói gọn phân phối chuẩn thống kê tiêu chuẩn, các khoảnh khắc của nó và các hàm mô tả. PDF của nó là "chính xác" theo nghĩa nó được định nghĩa chính xác là
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
6

Xây dựng từ đó, bạn có thể lấy một mẫu ngẫu nhiên gồm 1000 điểm dữ liệu từ bản phân phối này, sau đó cố gắng quay lại ước tính của tệp PDF với

>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
7

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
4

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Đây là một đoạn mã lớn hơn, vì vậy hãy dành một giây để chạm vào một vài dòng chính

  • Gói con
    >>> import numpy as np
    >>> # `numpy.random` uses its own PRNG.
    >>> np.random.seed(444)
    >>> np.set_printoptions(precision=3)
    
    >>> d = np.random.laplace(loc=15, scale=3, size=500)
    >>> d[:5]
    array([18.406, 18.087, 16.004, 16.221,  7.358])
    
    8 của SciPy cho phép bạn tạo các đối tượng Python đại diện cho các bản phân phối phân tích mà bạn có thể lấy mẫu từ đó để tạo dữ liệu thực tế. Vì vậy,
    >>> import numpy as np
    >>> # `numpy.random` uses its own PRNG.
    >>> np.random.seed(444)
    >>> np.set_printoptions(precision=3)
    
    >>> d = np.random.laplace(loc=15, scale=3, size=500)
    >>> d[:5]
    array([18.406, 18.087, 16.004, 16.221,  7.358])
    
    9 đại diện cho một biến ngẫu nhiên liên tục bình thường và bạn tạo các số ngẫu nhiên từ biến đó với
    >>> hist, bin_edges = np.histogram(d)
    
    >>> hist
    array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])
    
    >>> bin_edges
    array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
           19.073, 21.055, 23.037])
    
    0
  • Để đánh giá cả PDF phân tích và Gaussian KDE, bạn cần một mảng
    >>> hist, bin_edges = np.histogram(d)
    
    >>> hist
    array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])
    
    >>> bin_edges
    array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
           19.073, 21.055, 23.037])
    
    1 lượng phân vị (độ lệch chuẩn trên/dưới giá trị trung bình, đối với phân phối chuẩn).
    >>> hist, bin_edges = np.histogram(d)
    
    >>> hist
    array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])
    
    >>> bin_edges
    array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
           19.073, 21.055, 23.037])
    
    2 đại diện cho một tệp PDF ước tính mà bạn cần đánh giá trên một mảng để tạo ra thứ gì đó có ý nghĩa trực quan trong trường hợp này
  • Dòng cuối cùng chứa một số LaTex, tích hợp độc đáo với Matplotlib

Một sự thay thế ưa thích với Seaborn

Hãy mang thêm một gói Python vào hỗn hợp. Seaborn có hàm

>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
3 vẽ biểu đồ tần suất và KDE cho phân phối đơn biến trong một bước. Sử dụng mảng NumPy
>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
4 từ trước đó

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
5

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Cuộc gọi ở trên tạo ra một KDE. Ngoài ra còn có tùy chọn để phù hợp với một phân phối cụ thể cho dữ liệu. Điều này khác với KDE và bao gồm ước tính tham số cho dữ liệu chung và tên phân phối được chỉ định

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
6

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Một lần nữa, lưu ý sự khác biệt nhỏ. Trong trường hợp đầu tiên, bạn đang ước tính một số tệp PDF không xác định;

Loại bỏ các quảng cáo

Các công cụ khác trong Pandas

Ngoài các công cụ vẽ biểu đồ, Pandas còn cung cấp một phương pháp

>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
5 thuận tiện để tính toán biểu đồ các giá trị khác null cho một Pandas
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
2

>>>

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
7

Ở những nơi khác,

>>> hist, bin_edges = np.histogram(d)

>>> hist
array([ 1,  0,  3,  4,  4, 10, 13,  9,  2,  4])

>>> bin_edges
array([ 3.217,  5.199,  7.181,  9.163, 11.145, 13.127, 15.109, 17.091,
       19.073, 21.055, 23.037])
7 là một cách thuận tiện để sắp xếp các giá trị thành các khoảng tùy ý. Giả sử bạn có một số dữ liệu về độ tuổi của các cá nhân và muốn sắp xếp chúng một cách hợp lý

>>>

>>> from collections import Counter

>>> recounted = Counter(a)
>>> recounted
Counter({0: 1, 1: 3, 3: 1, 2: 1, 7: 2, 23: 1})
8

Điều thú vị là cả hai hoạt động này cuối cùng đều sử dụng mã Cython giúp chúng cạnh tranh về tốc độ trong khi vẫn duy trì tính linh hoạt

Được rồi, vậy tôi nên sử dụng cái nào?

Tại thời điểm này, bạn đã thấy nhiều hàm và phương thức để lựa chọn để vẽ biểu đồ Python. Làm thế nào để họ so sánh? . ” Đây là bản tóm tắt các chức năng và phương thức mà bạn đã đề cập cho đến nay, tất cả đều liên quan đến việc chia nhỏ và biểu diễn các bản phân phối trong Python

Bạn Có/Muốn Cân nhắc Sử dụng (Các) Ghi chú Dữ liệu số nguyên cắt gọn được đặt trong một cấu trúc dữ liệu như danh sách, bộ hoặc tập hợp và bạn muốn tạo biểu đồ Python mà không cần nhập bất kỳ thư viện bên thứ ba nào. từ thư viện chuẩn Python cung cấp một cách nhanh chóng và đơn giản để lấy số lượng tần suất từ ​​một vùng chứa dữ liệu. Đây là một bảng tần suất, vì vậy nó không sử dụng khái niệm tạo thùng như một biểu đồ "đúng". Mảng dữ liệu lớn và bạn muốn tính toán biểu đồ "toán học" đại diện cho các thùng và tần số tương ứng. NumPy's

>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
0 và
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
1 rất hữu ích để tính toán các giá trị biểu đồ bằng số và các cạnh thùng tương ứng. Để biết thêm, hãy xem
>>> hist.size, bin_edges.size
(10, 11)
1. Dữ liệu dạng bảng trong đối tượng
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
2 hoặc
>>> import numpy as np
>>> # `numpy.random` uses its own PRNG.
>>> np.random.seed(444)
>>> np.set_printoptions(precision=3)

>>> d = np.random.laplace(loc=15, scale=3, size=500)
>>> d[:5]
array([18.406, 18.087, 16.004, 16.221,  7.358])
3 của Pandas. Các phương pháp của gấu trúc như
>>> hist.size, bin_edges.size
(10, 11)
4,
>>> hist.size, bin_edges.size
(10, 11)
5,
>>> hist.size, bin_edges.size
(10, 11)
6 và
>>> hist.size, bin_edges.size
(10, 11)
7, cũng như
>>> hist.size, bin_edges.size
(10, 11)
8 và
>>> hist.size, bin_edges.size
(10, 11)
9. Xem tài liệu trực quan hóa Pandas để lấy cảm hứng. Tạo một biểu đồ tinh chỉnh, có thể tùy chỉnh cao từ bất kỳ cấu trúc dữ liệu nào.
>>> # The leftmost and rightmost bin edges
>>> first_edge, last_edge = a.min(), a.max()

>>> n_equal_bins = 10  # NumPy's default
>>> bin_edges = np.linspace(start=first_edge, stop=last_edge,
..                         num=n_equal_bins + 1, endpoint=True)
...
>>> bin_edges
array([ 0. ,  2.3,  4.6,  6.9,  9.2, 11.5, 13.8, 16.1, 18.4, 20.7, 23. ])
0 là một chức năng vẽ biểu đồ biểu đồ được sử dụng rộng rãi sử dụng
>>> # No NumPy .. yet
>>> import random
>>> random.seed(1)

>>> vals = [1, 3, 4, 6, 8, 9, 10]
>>> # Each number in `vals` will occur between 5 and 15 times.
>>> freq = (random.randint(5, 15) for _ in vals)

>>> data = []
>>> for f, v in zip(freq, vals):
..     data.extend([v] * f)

>>> ascii_histogram(data)
    1 +++++++
    3 ++++++++++++++
    4 ++++++
    6 +++++++++
    8 ++++++
    9 ++++++++++++
   10 ++++++++++++
0 và là cơ sở cho các chức năng vẽ biểu đồ của Pandas. Matplotlib, và đặc biệt là khung hướng đối tượng của nó, rất tuyệt vời để tinh chỉnh các chi tiết của biểu đồ. Giao diện này có thể mất một chút thời gian để thành thạo, nhưng cuối cùng cho phép bạn rất chính xác về cách trình bày mọi hình ảnh trực quan. Thiết kế và tích hợp đóng hộp sẵn. Seaborn's
>>> # The leftmost and rightmost bin edges
>>> first_edge, last_edge = a.min(), a.max()

>>> n_equal_bins = 10  # NumPy's default
>>> bin_edges = np.linspace(start=first_edge, stop=last_edge,
..                         num=n_equal_bins + 1, endpoint=True)
...
>>> bin_edges
array([ 0. ,  2.3,  4.6,  6.9,  9.2, 11.5, 13.8, 16.1, 18.4, 20.7, 23. ])
2, để kết hợp biểu đồ tần suất và biểu đồ KDE hoặc biểu đồ phù hợp với phân phối. Về cơ bản, một "trình bao bọc xung quanh một trình bao bọc" tận dụng biểu đồ Matplotlib bên trong, từ đó sử dụng NumPy

Tiền thưởng miễn phí. Thời gian ngắn?

Bạn cũng có thể tìm thấy các đoạn mã từ bài viết này cùng nhau trong một tập lệnh tại trang Tài liệu Python thực

Với điều đó, chúc may mắn khi tạo biểu đồ trong tự nhiên. Hy vọng rằng một trong những công cụ trên sẽ phù hợp với nhu cầu của bạn. Dù bạn làm gì, chỉ cần không sử dụng biểu đồ hình tròn

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Vẽ biểu đồ Python. NumPy, Matplotlib, Pandas và Seaborn

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Gửi cho tôi thủ thuật Python »

Giới thiệu về Brad Solomon

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?
Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Brad là một kỹ sư phần mềm và là thành viên của Nhóm hướng dẫn Python thực sự

» Thông tin thêm về Brad


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Adriana

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Đan

Làm thế nào để bạn khớp gaussian với biểu đồ trong python?

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Biểu đồ Gaussian là gì?

Dạng Gaussian ( ) vẽ một Gaussian phù hợp nhất với biểu đồ của một mẫu dữ liệu . Trên thực tế, tất cả những gì nó làm là tính toán giá trị trung bình và độ lệch chuẩn của mẫu và vẽ đường cong Gaussian tương ứng. Các giá trị trung bình và độ lệch chuẩn được báo cáo theo biểu đồ (xem bên dưới).

Có chức năng Gaussian trong Python không?

gauss() gauss() là một phương thức sẵn có của mô-đun ngẫu nhiên . Nó được sử dụng để trả về một số dấu phẩy động ngẫu nhiên với phân phối gaussian. ví dụ 2. Chúng ta có thể tạo số nhiều lần và vẽ biểu đồ để quan sát phân phối gaussian.

Phù hợp Gaussian là gì?

Phân phối Gauss với trung bình m và phương sai s 2 là phân phối thống kê có hàm xác suất . và một phân phối Gaussian tùy ý có thể được chuyển đổi thành một phân phối chuẩn thông thường bằng cách thay đổi các biến thành.