ホームページ  >  記事  >  バックエンド開発  >  FireDucks: 学習コストゼロでパンダを超えるパフォーマンスを手に入れましょう!

FireDucks: 学習コストゼロでパンダを超えるパフォーマンスを手に入れましょう!

Susan Sarandon
Susan Sarandonオリジナル
2024-10-03 06:23:02997ブラウズ

Pandas は最も人気のあるライブラリの 1 つです。そのパフォーマンスをより簡単に高速化する方法を探していたときに、FireDucks を発見し、興味を持ちました。

パンダとの比較: なぜ FireDucks なのか?

Pandas プログラムは、その記述方法によっては、重大なパフォーマンスの問題が発生する可能性があります。しかし、データ サイエンティストである私は、コードのパフォーマンスを向上させることよりも、データの分析にもっと多くの時間を費やしたいと考えています。そこで、処理の順序を入れ替えたり、プログラムのパフォーマンスを自動的に高速化することができれば素晴らしいと思います。例えば、工程A =>工程Bでは遅くなってしまうので、工程B =>工程 Aと置き換えます。 (もちろん結果は同じであることが保証されます) データサイエンティストの費用は彼らの時間の 45% はデータの準備に費やされており、このプロセスを高速化するために何かをしようと考えていたときに、FireDucks というモジュールを見つけました。

FireDucks のドキュメントによると、FireDucks は Linux プラットフォームのみでサポートされているようです。メインマシンで Windows を使っているので、Windows 上で Linux を実行できる環境である WSL2 (Windows Subsystem for Linux) から試してみたいと思います。

試した環境は以下の通りです。

  • OS 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

FireDuck のインストールと構成

WSLのインストール

WSL は、次の Microsoft ドキュメントを利用してインストールされました。 Linux ディストリビューションは Ubuntu 22.04.1 LTS です。

FireDuck をインストールする

次に、実際に FireDucks をインストールします。ただし、インストールは非常に簡単です。
pip インストール 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)


これらすべてのデータの前処理と分析には、パンダでは約 8 秒かかりましたが、FireDucks を使用すると 4 秒以内に完了できました。ほぼ2倍の高速化が達成できました。

パフォーマンスの向上

パンダの使用で最もストレスがかかることの 1 つは、大規模なデータセットをロードするときに待機することであり、その後、groupby のような複雑な操作を待たなければなりません。一方、FireDucks は遅延評価を行うため、ロード自体に時間がかからず、必要なところに処理が行われ、トータルの待ち時間が大幅に短縮され、非常に有意義だと感じました。

その他の性能としては、団体が公式発表しているように、パンダと比較して最大16倍の速度を達成しているようです。 (次回は競合するさまざまなライブラリとパフォーマンスを比較してみます。)

FireDucks: Get performance beyond pandas with zero learning cost!

学習コストゼロ

何も考えずにパンダの記法に正確に従うことができることは、大きな利点です。 FireDucks 以外にもデータ フレーム アクセラレーション ライブラリはありますが、学習するには高価すぎ、忘れがちです。

たとえば、極座標を含む列を追加したい場合は、次のように記述する必要があります。

# pandas df["new_col"] = df["A"] + 1
# polars 
df = df.with_columns((pl.col("A") + 1).alias("new_col"))

既存のコードを変更する必要はほとんどありません

パンダを使用する ETL やその他のプロジェクトがいくつかありますが、インポート ステートメントをインストールして FireDucks に置き換えるだけでパフォーマンスが向上するのは素晴らしいことです。

さらに追加したい場合は、お気軽に以下にコメントしてください。

以上がFireDucks: 学習コストゼロでパンダを超えるパフォーマンスを手に入れましょう!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。