FireDucks:以零學習成本獲得超越 pandas 的效能!

Susan Sarandon
發布: 2024-10-03 06:23:02
原創
1092 人瀏覽過

Pandas 是最受歡迎的庫之一,當我在尋找一種更簡單的方法來加速其性能時,我發現了 FireDucks 並對它產生了興趣!

與 pandas 的比較:為什麼選擇 FireDucks?

Pandas 程式可能會遇到嚴重的效能問題,這取決於其編寫方式。然而,作為一名數據科學家,我想花越來越多的時間分析數據,而不是提高程式碼效能。因此,如果它能夠執行諸如交換進程順序並自動加速程式效能之類的事情,那就太好了。例如,Process A => Process B 會比較慢,所以我們將其替換為 Process B => Process A。 (當然,結果保證是一樣的。)據說資料科學家花了大約他們 45% 的時間都在準備數據,當我考慮做一些事情來加速這個過程時,我遇到了一個名為 FireDucks 的模組。

從 FireDucks 文件來看,它似乎只支援 Linux 平台。由於我在我的主機上使用 Windows,所以我想從 WSL2(Windows Subsystem for Linux)嘗試一下,這是一個可以在 Windows 上運行 Linux 的環境。

我嘗試的環境如下

  • 作業系統 Microsoft Windows 11 Pro
  • 版本 10.0.22631 內部版本 22631
  • 系統型號 Z690 Pro RS
  • 系統類型基於 x64
  • PC 處理器第 12 代 Intel(R) Core(TM) i3–12100、3300 Mhz、4 核心、8 個邏輯處理器
  • 底板產品 Z690 Pro RS
  • 平台角色桌面
  • 安裝的實體記憶體 (RAM)64.0 GB

安裝和配置 FireDucks

安裝 WSL

WSL 是在以下 Microsoft 文件的幫助下安裝的; Linux 發行版是 Ubuntu 22.04.1 LTS。

安裝 FireDucks

然後實際安裝FireDucks。不過安裝起來非常簡單。
pip install fireducks

安裝 FireDucks(以及 pyarrow、pandas 和其他函式庫)需要幾分鐘時間。

我嘗試執行下面的程式碼,載入速度非常快,pandas 花了 4 秒,fireDucks 只花了 74.5 ns。

# 1. analysis based on time period and creative duration
# convert timestamp to date/time object
df['timestamp_converted'] = pd.to_datetime(df['timestamp'], unit='s ')

# define time period 
def get_part_of_day(hour): 
  if 5 <= hour < 12: 
    return 'morning'
  elif 12 <= hour < 17:
    return 'afternoon'
  else: 
    return 'evening'

# Add time period in new column 
df['part_of_day'] = df['timestamp_converted'].apply(lambda x: get_part_of_day(x.hour))

# Calculate average creative duration by time period 
df_ duration_by_time = df.groupby('part_of_day')['creative_duration'].mean() print(df_duration_by_time) 

# 2. campaign performance per different advertiser 
df_ campaigns_per_advertiser = df.groupby('advertiser_id')['campaign_id'].nunique() 
df_creatives_per_advertiser = df.groupby('advertiser_id ')['creatives_id'].nunique() 
print(df_campaigns_per_advertiser) 
print(df_creatives_per_advertiser)

# 3. language and website association 
df_common_website_ per_language = df.groupby('placement_language')['website_id'].apply(lambda x: x.mode()[0]) 
print(df_common_website_per_language) 

# 4. Analyze referrer information 
def extract_domain(referrer): 
  # if referrer is a float (e.g. NaN), return empty string 
  if isinstance(referrer, float): 
    return '' 
  # otherwise, extract domain name
  return referrer.split('/')[0] 

df['referrer_domain'] = df['referrer_deep_three'].apply(extract_domain) 
df_referrer_distribution = df['referrer_domain'].value_counts() 
print(df_referrer_distribution)


登入後複製

所有這些數據預處理和分析在 pandas 中大約需要 8 秒,而使用 FireDucks 時可以在 4 秒內完成。幾乎可以實現 2 倍的速度。

提高性能

使用pandas最有壓力的事情之一是載入大數據集時的等待,然後我必須等待像groupby這樣的複雜操作。另一方面,由於FireDucks進行惰性評估,加載本身根本不需要時間,因此在需要的地方進行處理,我覺得這非常重要,大大減少了總等待時間。

至於其他性能,據該組織官方宣布,與 pandas 相比,似乎已經實現了高達 16 倍的速度提升。 (下次我會與各個競爭庫進行效能比較。)

FireDucks: Get performance beyond pandas with zero learning cost!

零學習成本

能夠遵循精確的 pandas 符號而無需考慮任何事情是一個巨大的優勢。除了FireDucks之外,還有其他資料幀加速庫,但它們學習成本太高,而且太容易被遺忘。

例如,如果你想加入有極座標的列,你必須這樣寫。

# pandas df["new_col"] = df["A"] + 1
# polars 
df = df.with_columns((pl.col("A") + 1).alias("new_col"))
登入後複製

幾乎不需要更改現有程式碼

我有幾個使用 pandas 的 ETL 和其他項目,如果僅透過安裝 FireDucks 並替換 import 語句就能看到效能改進,那就太好了。

如果您想進一步添加,請隨時在下面評論。

以上是FireDucks:以零學習成本獲得超越 pandas 的效能!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板