Beyond Pandas: تجزیه و تحلیل داده های مدرن و تکنیک های مهندسی با پایتون (قسمت 1)


نویسنده (ها): هدیه اوجبولو

در ابتدا منتشر شده در به سمت هوش مصنوعیبشر

Beyond Pandas: تجزیه و تحلیل داده های مدرن و تکنیک های مهندسی با پایتون (قسمت 1)Beyond Pandas: تجزیه و تحلیل داده های مدرن و تکنیک های مهندسی با پایتون (قسمت 1)
تصویر توسط نویسنده

طرح

  • مقدمه
  • چارچوب تصمیم گیری اندازه داده ها و نمودار جریان جامع تصمیم گیری
  • یک نمایش نمودار بر اساس اولویت نحوی تیمیوت عمل یا الزامات ادغام
  • نمونه های دنیای واقعی: تجزیه و تحلیل پرونده ورود به سیستم ، نمونه تجارت الکترونیکی و مورد IoT.
  • پایان

مقدمه

این مقاله از پستی که من در رسانه های اجتماعی به اشتراک گذاشتم الهام گرفته شده است ، که مکالمه ها را برانگیخت لینک وت توییتر رسیدن به بیش از 15K مردم و تولید بیش از 500 در کل در کل

این اظهار نظرهای متفکرانه از دانشمندان داده ، مهندسان و کاربران پایتون که در مشاوره فناوری اطلاعات ، فناوری ، توسعه نرم افزار ، زیرساخت داده ها ، تجزیه و تحلیل و خدمات مالی کار می کنند ، دریافت کرد. درگیری آنها اهمیت موضوع را برجسته کرد و احساس کردم ارزش آن را دارد که به یک مقاله کامل گسترش یابد.

به عنوان حجم داده ها همچنان در صنایع مانند تجارت الکترونیکی ، FinTech و تدارکات رشد می کنند ، چالش های پردازش پیچیده تر می شوند. با این حال ، بسیاری از دانشمندان ، مهندسان و تحلیلگران داده ها اغلب به ابزارهای آشنا مانند تکیه می کنند پاندا، حتی اگر این ابزارها دیگر ممکن است کارآمدترین یا مقیاس پذیر برای کار مورد نظر نباشند.

در این مقاله یک چارچوب مختصر و عملکردی برای انتخاب یک ابزار مناسب پردازش داده بر اساس ارائه شده است مجموعه داده اندازه ، از بارهای کوچک (500 مگابایت).

ما نقاط قوت و محدودیت های آن را مقایسه خواهیم کرد پاندا، Polars ، DuckDB و Pyspark ، با تمرکز بر سرعت اجرای ، راندمان حافظه ، موازی سازی و ادغام با گردش کار مدرن.

نمودار و چارچوب تصمیم گیری اندازه داده ها

بگذارید تجزیه و تحلیل کنیم که چه زمانی از هر ابزار مبتنی بر اندازه داده ها و چندین معیار استفاده کنیم.

تصویر توسط نویسنده: راهنمای جامع انتخاب ابزار برای گردش کار داده ها بر اساس حجم داده هابا آشنایی تیمیوت نیازهای زیرساختیبشر

داده های کوچک (

اگر شما مجموعه داده زیر 1 گیگابایت است ، پاندا به طور معمول بهترین انتخاب است. استفاده از آن آسان است ، به طور گسترده اتخاذ شده و در اکوسیستم پایتون پشتیبانی می شود. مگر در مواردی که نیازهای عملکردی بسیار خاصی نداشته باشید ، پاندا به طور موثری وظایفی مانند تجزیه و تحلیل سریع اکتشافی و تجسم را انجام می دهد.

از پاندا استفاده کنید وقتی:

  • مجموعه داده شما به راحتی در حافظه قرار می گیرد.
  • شما در حال انجام تجزیه و تحلیل سریع داده های اکتشافی هستید.
  • شما به اکوسیستم عظیم کتابخانه های سازگار با پاندا نیاز دارید.
  • گردش کار شما شامل تجسم داده های زیادی است.
import pandas as pd
df = pd.read_csv("small_data.csv") # Under 1GB works fine

پانداس به دلیل اکوسیستم غنی ، مستندات گسترده و پذیرش گسترده ، هنوز هم برای مجموعه داده های کوچکتر پادشاه است. برای این اندازه ها ، عملکرد عملکرد از ابزارهای دیگر ممکن است منحنی یادگیری را توجیه نکند.

داده های متوسط ​​(1 گیگابایت تا 50 گیگابایت)

هنگامی که داده های شما بین 1 گیگابایت و 50 گیگابایتی قرار می گیرد ، به چیزی سریعتر و کارآمدتر از پاندا نیاز دارید. انتخاب شما بین دلهره وت اردک بستگی به ترجیح برنامه نویسی و گردش کار شما دارد.

از polars استفاده کنید وقتی:

  • شما به سرعت بیشتری نسبت به پاندا نیاز دارید.
  • راندمان حافظه مهم است.
  • شما در حال کار با تحولات پیچیده داده هستید.
  • شما یک گردش کار محور پایتون را ترجیح می دهید.
import polars as pl
df = pl.read_csv("medium_data.csv") # Fast and memory efficient

از duckdb استفاده کنید وقتی:

  • شما نوشتن نمایش داده های SQL را ترجیح می دهید.
  • شما در حال انجام تجمع های پیچیده یا پیوستن هستید.
  • گردش کار شما تجزیه و تحلیل سنگین است.
  • شما می خواهید داده ها را مستقیماً از پرونده ها پرس و جو کنید.
# Import the DuckDB library for high-performance analytics
import duckdb

# Execute a SQL query against the CSV file and store results in a pandas DataFrame
# - Directly queries the CSV file without explicit loading, leveraging DuckDB's zero-copy architecture
# - Filters for records where 'value' column exceeds 100 for downstream analysis
# - Returns results as pandas DataFrame for compatibility with visualization libraries
df = duckdb.query("SELECT * FROM 'medium_large_data.csv' WHERE value > 100").df()

داده های بزرگ (بیش از 50 گیگابایت)

هنگامی که داده های شما از 50 گیگابایت فراتر می رود ، پیزارک به ابزار Go-to تبدیل می شود. این برای محاسبات توزیع شده طراحی شده است و می تواند به طور مؤثر مجموعه داده هایی را که دارای چندین دستگاه است ، کنترل کنند.

از pyspark استفاده کنید:

  • داده های شما از ظرفیت تک ماشین فراتر می رود.
  • پردازش توزیع شده ضروری است.
  • شما به تحمل گسل نیاز دارید.
  • زمان پردازش مهمتر از پیچیدگی تنظیم است.
# Import SparkSession from pyspark.sql module, which is the entry point to Spark SQL functionality
from pyspark.sql import SparkSession

# Initialize a Spark session with meaningful application name for monitoring/logging purposes
# - SparkSession.builder allows fluent configuration of Spark settings
# - appName defines the name shown in Spark UI and logs for easier identification
# - getOrCreate() either creates a new session or returns an existing one to avoid redundancy
spark = SparkSession.builder.appName("BigDataAnalysis").getOrCreate()

# Load CSV data into a Spark DataFrame with automatic schema inference
# - Distributed reading of potentially large CSV file leveraging Spark's parallel processing
# - header=True treats first row as column names instead of data
# - inferSchema=True analyzes data to determine appropriate column types, avoiding default string types
# - Returns a distributed DataFrame that can scale across a cluster for subsequent operations
df = spark.read.csv("really_big_data.csv", header=True, inferSchema=True)

Pyspark به شما امکان می دهد تا پردازش را در چندین دستگاه توزیع کنید و مجموعه داده های صدها گیگابایت را به پتابیت ها منتقل کنید.

تصویر توسط نویسنده: نمودار تصمیم گیری برای انتخاب ابزار پردازش داده بر اساس اندازه داده هابا ترجیح نحو تیمیوت عمل یا الزامات ادغام

عوامل اضافی برای در نظر گرفتن

در حالی که اندازه داده عامل اصلی است ، چندین ملاحظات دیگر باید بر انتخاب شما تأثیر بگذارند:

  • آیا نیاز به اجرای چندین دستگاه دارید؟PySpark
  • کار با دانشمندان داده ای که پاندا را می شناسند؟Polars (easiest transition)
  • به بهترین عملکرد در یک دستگاه واحد نیاز دارید؟DuckDB یا Polars
  • آیا نیاز به ادغام با گردش کار SQL موجود دارید؟DuckDB
  • داشبورد در زمان واقعی؟DuckDB
  • تحت محدودیت حافظه کار می کنید؟Polars یا DuckDB
  • آماده سازی داده برای داشبوردهای دو در مقیاس؟PySpark یا DuckDB

با ارزیابی سیستماتیک این عوامل ، کاربران می توانند تصمیمات آگاهانه تری بگیرند که کدام ابزار پردازش داده ها یا ترکیبی از ابزارها به بهترین وجه متناسب با نیازهای خاص پروژه و قابلیت های تیم آنها است.

نمونه های دنیای واقعی

مثال 1: تجزیه و تحلیل پرونده ورود به سیستم (10 گیگابایت)

پردازش سیاهههای مربوط به سرور برای استخراج الگوهای خطا:

  • انتخاب بد: پاندا (آهسته ، مسائل مربوط به حافظه).
  • انتخاب خوب: duckdb (می توانید مستقیماً از پرونده های ورود به سیستم پرس و جو کنید).

رمز نمونه:

import duckdb
error_counts = duckdb.query("""
SELECT error_code, COUNT(*) as count
FROM 'server_logs.csv'
GROUP BY error_code
ORDER BY count DESC
"""
).df()

مثال 2: داده های تجارت الکترونیکی (30 گیگابایت)

تجزیه و تحلیل الگوهای خرید مشتری:

  • انتخاب بد: پاندا (سقوط خواهد کرد)
  • انتخاب خوب: polars (برای تحولات) + duckdb (برای جمع آوری)

رمز نمونه:

import polars as pl
import duckdb

# Load and transform with Polars
df = pl.scan_csv("transactions.csv")
df = df.filter(pl.col("purchase_date") > "2023-01-01")

# Convert to DuckDB for complex aggregation
duckdb.register("transactions", df.collect())
customer_segments = duckdb.query("""
SELECT customer_id,
SUM(amount) as total_spent,
COUNT(*) as num_transactions,
AVG(amount) as avg_transaction
FROM transactions
GROUP BY customer_id
HAVING COUNT(*) > 5
"""
).df()

مثال 3: داده های سنسور (100 گیگابایت+)

پردازش داده های سنسور IoT از چندین دستگاه:

  • انتخاب بد: هر راه حل تک ماشین
  • انتخاب خوب: pyspark

رمز نمونه:

from pyspark.sql import SparkSession
from pyspark.sql.functions import window, avg

spark = SparkSession.builder.appName("SensorAnalysis").getOrCreate()

sensor_data = spark.read.parquet("s3://sensors/data/")

# Calculate rolling averages by sensor
hourly_averages = sensor_data \
.withWatermark("timestamp", "1 hour") \
.groupBy(
window(sensor_data.timestamp, "1 hour"),
sensor_data.sensor_id
) \
.agg(avg("temperature").alias("avg_temp"))

در قسمت 2 این سریال، ما با مقایسه دقیق DuckDB در مقابل Polars ، از جمله معیارهای عملکرد در عملیات داده های رایج ، عمیق تر به محدوده داده های متوسط ​​(1-50 گیگابایت) شیرجه می زنیم. ما همچنین دقیقاً بررسی خواهیم کرد که SQL از پایتون (و برعکس) برای چندین کار داده بهتر عمل می کند.

پایان

به عنوان مقیاس داده های شما ، باید ابزارهای شما نیز باشد. در حالی که پاندا یک انتخاب محکم برای مجموعه داده های زیر 1 گیگابایت است ، حجم های بزرگتر خواستار راه حل های تخصصی تر هستند. Polars برای کاربران پایتون که داده های متوسط ​​را اداره می کنند می درخشد ، DuckDB برای کسانی که SQL را ترجیح می دهند ایده آل است و به پرس و جوهای تحلیلی سریع احتیاج دارد ، و Pyspark برای مجموعه داده های عظیم که نیاز به پردازش توزیع شده دارند ساخته شده است.

بهترین قسمت؟ این ابزارها منحصر به فرد نیستند ، بسیاری از گردش کار داده های مدرن آنها را با هم ترکیب می کنند ، با استفاده از POLARS برای داده های سریع ، DuckDB برای تجزیه و تحلیل سبک وزن و Pyspark برای کارهای سنگین. در نهایت ، انتخاب ابزار مناسب فقط مربوط به مجموعه داده های امروز نیست ، بلکه در مورد اطمینان از گردش کار شما می تواند با داده های شما فردا رشد کند.

با من ارتباط برقرار کنید وابسته به لینکدین

با من ارتباط برقرار کنید توییتر

منتشر شده از طریق به سمت هوش مصنوعی





منبع: https://towardsai.net/p/data-analysis/beyond-pandas-the-modern-data-analytics-and-engineering-techniques-with-python-part-1