簡體   English   中英

使用 Pandas 從 CSV 文件中繪制 4 列的 CDF

[英]Plot CDF of 4 columns from a CSV file using pandas

我想使用 Pandas 從 CSV 文件中繪制4 列的 CDF 值,如下所示:

df = pd.read_csv(r'pathfile.csv')

四列的數據包含以毫秒為單位的時間戳,我嘗試了一些代碼,但他們沒有報告正確的情節。 你能用簡單的方法幫忙嗎?

df = pd.read_csv(r'pathfile.csv')
def compute_distrib(df, col):
    stats_df = df.groupby(col)[col].agg('count')\
                 .pipe(pd.DataFrame).rename(columns={col: 'frequency'})
    
    # PDF
    stats_df['pdf'] = stats_df['frequency'] / sum(stats_df['frequency'])
    
    # CDF
    stats_df['CDF'] = stats_df['pdf'].cumsum()
    
    # modifications
    stats_df = stats_df.reset_index()\
                       .rename(columns={col:"X"})
    stats_df[" "] = col
    return stats_df

cdf = []
for col in ['1','2','3','4']: 
    cdf.append(compute_distrib(df, col))
cdf = pd.concat(cdf, ignore_index=True)

import seaborn as sns

sns.lineplot(x=cdf["X"],
             y=cdf["CDF"],
             hue=cdf[" "]);

這里的輸出似乎不正確

不應該是 df.groupby("column").agg({'column':pd.Series.count}) 嗎?

由於您的帖子中缺少可運行的代碼,我創建了自己的代碼來繪制數據幀df列的 CDF:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from itertools import accumulate


# GENERATE EXAMPLE DATA
df = pd.DataFrame()
df['x1'] = np.random.uniform(-1,1, size=1000)
df['x2'] = df['x1'] + np.random.uniform(-1,1, size=1000)
df['x3'] = df['x2'] + np.random.uniform(-1,1, size=1000)
df['x4'] = df['x3'] + np.random.uniform(-1, 1, size=1000)

# START A PLOT
fig,ax = plt.subplots()

for col in df.columns:

  # USE numpy's HISTOGRAM FUNCTION TO COMPUTE BINS
  xh, xb = np.histogram(df[col], bins=60, normed=True)

  # COMPUTE THE CUMULATIVE SUM WITH accumulate
  xh = list(accumulate(xh))
  # NORMALIZE THE RESULT
  xh = np.array(xh) / max(xh)

  # PLOT WITH LABEL
  ax.plot(xb[1:], xh, label=f"$CDF$({col})")
ax.legend()
plt.title("CDFs of Columns")
plt.show()

此代碼的結果圖如下:

CDF圖

要放入您自己的數據,只需用df = pd.read_csv('path/to/sheet.csv')替換# GENERATE EXAMPLE DATA df = pd.read_csv('path/to/sheet.csv') # GENERATE EXAMPLE DATA部分

如果您不清楚示例中的任何內容或需要更多解釋,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM