Rumah >pembangunan bahagian belakang >Tutorial Python >FireDucks: Dapatkan prestasi melebihi panda dengan kos pembelajaran sifar!

FireDucks: Dapatkan prestasi melebihi panda dengan kos pembelajaran sifar!

Susan Sarandon
Susan Sarandonasal
2024-10-03 06:23:021160semak imbas

Panda ialah salah satu perpustakaan yang paling popular, apabila saya mencari cara yang lebih mudah untuk mempercepatkan prestasinya, saya menemui FireDucks dan mula berminat dengannya!

Perbandingan dengan panda: Mengapa FireDucks?

Program Pandas mungkin menghadapi isu prestasi yang serius bergantung pada cara ia ditulis. Walau bagaimanapun, sebagai seorang saintis data, saya mahu menghabiskan lebih banyak masa menganalisis data daripada meningkatkan prestasi kod saya. Jadi, adalah bagus jika ia boleh melakukan sesuatu seperti menukar susunan proses dan mempercepatkan prestasi program secara automatik. Sebagai contoh, Proses A =>Proses B akan menjadi lebih perlahan, jadi kami akan menggantikannya sebagai Proses B =>Proses A. (Sudah tentu, hasilnya dijamin sama.) Dikatakan bahawa saintis data membelanjakan kira-kira 45% masa mereka menyediakan data dan apabila saya berfikir untuk melakukan sesuatu untuk mempercepatkan proses, saya terjumpa modul yang dipanggil FireDucks.

Daripada dokumentasi FireDucks, ia nampaknya disokong untuk platform Linux sahaja. Memandangkan saya menggunakan Windows pada mesin utama saya, saya ingin mencubanya daripada WSL2 (Windows Subsystem for Linux), persekitaran yang boleh menjalankan Linux pada Windows.

Persekitaran yang saya cuba adalah seperti berikut.

  • OS Microsoft Windows 11 Pro
  • Versi 10.0.22631 Binaan 22631
  • Model sistem Z690 Pro RS
  • Jenis Sistem berasaskan x64
  • Pemproses PC Teras Intel(R) Ke-12 (TM) i3–12100, 3300 Mhz, 4 Teras, 8 Pemproses Logik
  • Produk Baseboard Z690 Pro RS
  • Desktop Peranan Platform
  • Memori Fizikal (RAM) Dipasang 64.0 GB

Memasang dan Mengkonfigurasi FireDucks

Pasang WSL

WSL telah dipasang dengan bantuan dokumentasi Microsoft berikut; pengedaran Linux ialah Ubuntu 22.04.1 LTS.

Pasang FireDucks

Kemudian sebenarnya pasang FireDucks. Ia sangat mudah untuk dipasang.
pip pasang fireducks

Ia akan mengambil masa beberapa minit untuk memasang FireDucks (bersama-sama dengan pyarrow, panda dan perpustakaan lain).

Saya cuba melaksanakan kod di bawah, kelajuan memuatkan sangat pantas, panda mengambil masa 4 saat dan fireDucks hanya mengambil masa 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)


Semua prapemprosesan dan analisis data ini mengambil masa sekitar 8 saat dalam panda, manakala ia boleh diselesaikan dalam masa 4 saat apabila menggunakan FireDucks. Hampir 2 kali ganda kelajuan boleh dicapai.

Prestasi yang dipertingkatkan

Salah satu perkara yang paling tertekan tentang menggunakan panda ialah menunggu apabila memuatkan set data yang besar, dan kemudian saya perlu menunggu operasi yang kompleks seperti groupby. Sebaliknya, memandangkan FireDucks melakukan penilaian yang malas, pemuatan itu sendiri tidak mengambil masa sama sekali, jadi pemprosesan dilakukan di tempat yang diperlukan, dan saya merasakan ia sangat penting dengan pengurangan yang hebat dalam jumlah masa menunggu.

Bagi prestasi lain, nampaknya sehingga 16 kali ganda lebih pantas berbanding panda telah dicapai, seperti yang diumumkan secara rasmi oleh organisasi. (Saya akan membandingkan prestasi dengan pelbagai perpustakaan yang bersaing pada masa akan datang.)

FireDucks: Get performance beyond pandas with zero learning cost!

kos pembelajaran sifar

Keupayaan untuk mengikuti notasi panda yang tepat tanpa perlu memikirkan apa-apa adalah kelebihan yang besar. Selain FireDucks, terdapat perpustakaan pecutan bingkai data lain, tetapi ia terlalu mahal untuk dipelajari dan terlalu mudah untuk dilupakan.

Sebagai contoh, jika anda ingin menambah lajur dengan kutub, anda perlu menulis sesuatu seperti ini.

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

Hampir tidak perlu menukar kod sedia ada

Saya mempunyai beberapa ETL dan projek lain yang menggunakan panda, dan adalah bagus untuk melihat peningkatan prestasi hanya dengan memasang dan menggantikan pernyataan import dengan FireDucks.

Jika anda ingin menambahkannya lagi, sila komen di bawah.

Atas ialah kandungan terperinci FireDucks: Dapatkan prestasi melebihi panda dengan kos pembelajaran sifar!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn