Hướng dẫn plot cdf python pandas - cốt truyện cdf python pandas

Tôi thực sự thích câu trả lời của Raphvanns. Nó rất hữu ích vì nó không chỉ tạo ra cốt truyện, mà còn giúp tôi hiểu PDF, CDF và CCDF là gì.

Tôi có hai điều cần thêm vào giải pháp của Raphvanns: (1) sử dụng

s = pd.Series(np.random.randint(1000, size=(1000)))
0 một cách khôn ngoan để làm cho quá trình dễ dàng hơn; (2) Hãy nhớ sắp xếp (xác nhận)
s = pd.Series(np.random.randint(1000, size=(1000)))
1 trước khi tính toán PDF, CDF và CCDF.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from collections import Counter

Tạo số ngẫu nhiên:

s = pd.Series(np.random.randint(1000, size=(1000)))

Xây dựng DataFrame như Raphvanns đề xuất:

dic = dict(Counter(s))
df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])

Tính toán PDF, CDF và CCDF:

df['pdf'] = df.frequency/sum(df.frequency)
df['cdf'] = df['pdf'].cumsum()
df['ccdf'] = 1-df['cdf']

Plot:

df.plot(x = 'value', y = ['cdf', 'ccdf'], grid = True)

Hướng dẫn plot cdf python pandas - cốt truyện cdf python pandas

Bạn có thể tự hỏi tại sao chúng ta phải sắp xếp

s = pd.Series(np.random.randint(1000, size=(1000)))
1 trước khi tính toán PDF, CDF và CCDF. Chà, giả sử kết quả sẽ là gì nếu chúng ta không sắp xếp chúng (lưu ý rằng
s = pd.Series(np.random.randint(1000, size=(1000)))
3 tự động sắp xếp các mục, chúng ta sẽ thực hiện đơn hàng ngẫu nhiên theo cách sau).

dic = dict(Counter(s))
df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])

# randomize the order of `value`:
df = df.sample(n=1000)

df['pdf'] = df.frequency/sum(df.frequency)
df['cdf'] = df['pdf'].cumsum()
df['ccdf'] = 1-df['cdf']

df.plot(x = 'value', y = ['cdf'], grid = True)

Đây là cốt truyện:

Hướng dẫn plot cdf python pandas - cốt truyện cdf python pandas

Tại sao nó lại xảy ra? Chà, bản chất của CDF là "số lượng điểm dữ liệu chúng ta đã thấy cho đến nay", trích dẫn các bài giảng của YY về lớp trực quan hóa dữ liệu của anh ta. Do đó, nếu thứ tự của

s = pd.Series(np.random.randint(1000, size=(1000)))
1 không được sắp xếp (tăng dần hoặc giảm dần là tốt), thì khi bạn vẽ, trong đó trục
s = pd.Series(np.random.randint(1000, size=(1000)))
5 theo thứ tự tăng dần, giá trị
s = pd.Series(np.random.randint(1000, size=(1000)))
6 tất nhiên sẽ chỉ là một mớ hỗn độn.

Nếu bạn áp dụng một đơn đặt hàng giảm dần, bạn có thể tưởng tượng rằng CDF và CCDF sẽ chỉ trao đổi vị trí của họ:

Hướng dẫn plot cdf python pandas - cốt truyện cdf python pandas

Tôi sẽ để lại một câu hỏi cho độc giả của bài đăng này: Nếu tôi chọn ngẫu nhiên thứ tự

s = pd.Series(np.random.randint(1000, size=(1000)))
1 như trên, sẽ sắp xếp
s = pd.Series(np.random.randint(1000, size=(1000)))
1 sau (thay vì trước đó) tính toán PDF, CDF và CCDF giải quyết vấn đề?

dic = dict(Counter(s))
df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])

# randomize the order of `value`:
df = df.sample(n=1000)

df['pdf'] = df.frequency/sum(df.frequency)
df['cdf'] = df['pdf'].cumsum()
df['ccdf'] = 1-df['cdf']

# Will this solve the problem?
df = df.sort_values(by='value')

df.plot(x = 'value', y = ['cdf'], grid = True)

Bạn có thể nhận được CDF dễ dàng. Vì vậy, PDF thông qua CDF

Nội phân chính

  • Các mô -đun cần thiết
  • Các chức năng được sử dụng
  • Làm thế nào để bạn vẽ một phân phối bình thường trong Python?
  • Làm thế nào để bạn vẽ một phân phối bình thường?
  • Làm thế nào để bạn vẽ nhiều phân phối bình thường trong Python?

    import numpy as np
    import matplotlib.pyplot as plt
    import scipy.interpolate
    import scipy.stats

    def setGridLine(ax):
        #http://jonathansoma.com/lede/data-studio/matplotlib/adding-grid-lines-to-a-matplotlib-chart/
        ax.set_axisbelow(True)
        ax.minorticks_on()
        ax.grid(which='major', linestyle='-', linewidth=0.5, color='grey')
        ax.grid(which='minor', linestyle=':', linewidth=0.5, color='#a6a6a6')
        ax.tick_params(which='both', # Options for both major and minor ticks
                        top=False, # turn off top ticks
                        left=False, # turn off left ticks
                        right=False,  # turn off right ticks
                        bottom=False) # turn off bottom ticks

    data1 = np.random.normal(0,1,1000000)
    x=np.sort(data1)
    y=np.arange(x.shape[0])/(x.shape[0]+1)

    f2 = scipy.interpolate.interp1d(x, y,kind='linear')
    x2 = np.linspace(x[0],x[-1],1001)
    y2 = f2(x2)

    y2b = np.diff(y2)/np.diff(x2)
    x2b=(x2[1:]+x2[:-1])/2.

    f3 = scipy.interpolate.interp1d(x, y,kind='cubic')
    x3 = np.linspace(x[0],x[-1],1001)
    y3 = f3(x3)

    y3b = np.diff(y3)/np.diff(x3)
    x3b=(x3[1:]+x3[:-1])/2.

    bins=np.arange(-4,4,0.1)
    bins_centers=0.5*(bins[1:]+bins[:-1])
    cdf = scipy.stats.norm.cdf(bins_centers)
    pdf = scipy.stats.norm.pdf(bins_centers)

    plt.rcParams["font.size"] = 18
    fig, ax = plt.subplots(3,1,figsize=(10,16))
    ax[0].set_title("cdf")
    ax[0].plot(x,y,label="data")
    ax[0].plot(x2,y2,label="linear")
    ax[0].plot(x3,y3,label="cubic")
    ax[0].plot(bins_centers,cdf,label="ans")

    ax[1].set_title("pdf:linear")
    ax[1].plot(x2b,y2b,label="linear")
    ax[1].plot(bins_centers,pdf,label="ans")

    ax[2].set_title("pdf:cubic")
    ax[2].plot(x3b,y3b,label="cubic")
    ax[2].plot(bins_centers,pdf,label="ans")

    for idx in range(3):
        ax[idx].legend()
        setGridLine(ax[idx])

    plt.show()
    plt.clf()
    plt.close()

1) Trừ khi nhiều sơ đồ được vẽ, chúng tôi (dường như) nhìn vào cùng một bản vẽ và 2) đuôi bị cắt khi vẽ nhiều phân phối. 1) dễ dàng được sửa bằng cách thêm PLT.YLIM (0,1) vào phương thức cốt truyện. 2) Mặt khác, yêu cầu chúng ta phải tính đến hình dạng của tất cả các lô trong khi vẽ.

Bạn có thể nhận được CDF dễ dàng. Vì vậy, PDF thông qua CDF

Nội phân chính

  • Các mô -đun cần thiết
  • Xem thảo luận
  • 1) Trừ khi nhiều sơ đồ được vẽ, chúng tôi (dường như) nhìn vào cùng một bản vẽ và 2) đuôi bị cắt khi vẽ nhiều phân phối. 1) dễ dàng được sửa bằng cách thêm PLT.YLIM (0,1) vào phương thức cốt truyện. 2) Mặt khác, yêu cầu chúng ta phải tính đến hình dạng của tất cả các lô trong khi vẽ.

    Bạn có thể nhận được CDF dễ dàng. Vì vậy, PDF thông qua CDF

    Nội phân chính

    Prerequisites:

    • Các mô -đun cần thiết
    • Xem thảo luận
    • Cải thiện bài viết
    • Lưu bài viết

    Đọc is a probability function used in statistics that tells about how the data values are distributed. It is the most important probability distribution function used in statistics because of its advantages in real case scenarios. For example, the height of the population, shoe size, IQ level, rolling a die, and many more. 

    Bàn luận

    Matplotlib

    Numpy

    Các mô -đun cần thiết

    • Xem thảo luậnis python’s data visualization library which is widely used for the purpose of data visualization.
    • Cải thiện bài viết is a general-purpose array-processing package. It provides a high-performance multidimensional array object, and tools for working with these arrays. It is the fundamental package for scientific computing with Python.
    • Scipy là một thư viện Python hữu ích trong việc giải nhiều phương trình toán học và thuật toán.is a python library that is useful in solving many mathematical equations and algorithms.
    • Mô -đun thống kê cung cấp các chức năng để tính toán số liệu thống kê toán học của dữ liệu số.module provides functions for calculating mathematical statistics of numeric data.

    Các chức năng được sử dụng

    • Để tính toán trung bình của dữ liệu

    Syntax:

    mean(data)
    • Để tính toán độ lệch chuẩn của dữ liệu

    Syntax:

    stdev(data)
    • Để tính toán mật độ xác suất bình thường của định mức dữ liệu.pdf được sử dụng, nó đề cập đến hàm mật độ xác suất bình thường là mô -đun trong thư viện SCIPY sử dụng hàm mật độ xác suất trên để tính toán giá trị.

    Syntax:

    Norm.pdf (dữ liệu, LỘC, tỷ lệ)

    Ở đây, tham số LỘC còn được gọi là giá trị trung bình và tham số tỷ lệ còn được gọi là độ lệch chuẩn.

    Cách tiếp cận

    • Nhập mô -đun
    • Tạo dữ liệu
    • Tính toán trung bình và độ lệch
    • Tính mật độ xác suất bình thường
    • Sơ đồ sử dụng các giá trị được tính toán ở trên
    • Hiển thị cốt truyện

    Dưới đây là việc thực hiện.

    Python3

    s = pd.Series(np.random.randint(1000, size=(1000)))
    
    9
    dic = dict(Counter(s))
    df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])
    
    0

    s = pd.Series(np.random.randint(1000, size=(1000)))
    
    9
    dic = dict(Counter(s))
    df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])
    
    2

    dic = dict(Counter(s))
    df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])
    
    3
    dic = dict(Counter(s))
    df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])
    
    4
    s = pd.Series(np.random.randint(1000, size=(1000)))
    
    9
    dic = dict(Counter(s))
    df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])
    
    6

    s = pd.Series(np.random.randint(1000, size=(1000)))
    
    9
    dic = dict(Counter(s))
    df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])
    
    8

    dic = dict(Counter(s))
    df = pd.DataFrame(s.items(), columns = ['value', 'frequency'])
    
    9
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    0
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    1
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    2
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    3
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    4
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    3
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    4
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    7
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    8

    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    9
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    0
    df.plot(x = 'value', y = ['cdf', 'ccdf'], grid = True)
    
    1

    df.plot(x = 'value', y = ['cdf', 'ccdf'], grid = True)
    
    2
    df['pdf'] = df.frequency/sum(df.frequency)
    df['cdf'] = df['pdf'].cumsum()
    df['ccdf'] = 1-df['cdf']
    
    0
    df.plot(x = 'value', y = ['cdf', 'ccdf'], grid = True)
    
    4

    df.plot(x = 'value', y = ['cdf', 'ccdf'], grid = True)
    
    5

    df.plot(x = 'value', y = ['cdf', 'ccdf'], grid = True)
    
    6

    Output:

    Đầu ra của mã trên

    Làm thế nào để bạn vẽ một phân phối bình thường trong Python?

    Approach..

    Nhập mô -đun ..

    Tạo dữ liệu ..

    Tính trung bình và độ lệch ..

    Tính mật độ xác suất bình thường ..

    Lô đất sử dụng các giá trị được tính toán ở trên ..

    Hiển thị âm mưu ..

    Làm thế nào để bạn vẽ một phân phối bình thường?

    Phác thảo một hình ảnh của một phân phối bình thường.Bắt đầu bằng cách vẽ một đường ngang (trục).Tiếp theo, vẽ một đường cong bình thường (hình chuông) tập trung vào trục ngang.Sau đó vẽ một đường thẳng đứng từ trục ngang qua tâm của đường cong, cắt nó làm đôi.

    Làm thế nào để bạn vẽ nhiều phân phối bình thường trong Python?

    1) Trừ khi nhiều sơ đồ được vẽ, chúng tôi (dường như) nhìn vào cùng một bản vẽ và 2) đuôi bị cắt khi vẽ nhiều phân phối.1) dễ dàng được sửa bằng cách thêm PLT.YLIM (0,1) vào phương thức cốt truyện.2) Mặt khác, yêu cầu chúng ta phải tính đến hình dạng của tất cả các lô trong khi vẽ.adding plt. ylim(0,1) to the plot method. 2) On the other hand, requires us to take into account the shape of all plots while drawing.