التوثيق : بايثون - رست - Node.js - R | StackOverflow : بايثون - رست - Node.js - R | دليل المستخدم | الفتنة
Polars عبارة عن واجهة DataFrame أعلى محرك استعلام OLAP الذي تم تنفيذه في Rust باستخدام تنسيق Apache Arrow Columnar Format كنموذج للذاكرة.
لمعرفة المزيد، اقرأ دليل المستخدم.
>> > import polars as pl
>> > df = pl . DataFrame (
... {
... "A" : [ 1 , 2 , 3 , 4 , 5 ],
... "fruits" : [ "banana" , "banana" , "apple" , "apple" , "banana" ],
... "B" : [ 5 , 4 , 3 , 2 , 1 ],
... "cars" : [ "beetle" , "audi" , "beetle" , "beetle" , "beetle" ],
... }
... )
# embarrassingly parallel execution & very expressive query language
>> > df . sort ( "fruits" ). select (
... "fruits" ,
... "cars" ,
... pl . lit ( "fruits" ). alias ( "literal_string_fruits" ),
... pl . col ( "B" ). filter ( pl . col ( "cars" ) == "beetle" ). sum (),
... pl . col ( "A" ). filter ( pl . col ( "B" ) > 2 ). sum (). over ( "cars" ). alias ( "sum_A_by_cars" ),
... pl . col ( "A" ). sum (). over ( "fruits" ). alias ( "sum_A_by_fruits" ),
... pl . col ( "A" ). reverse (). over ( "fruits" ). alias ( "rev_A_by_fruits" ),
... pl . col ( "A" ). sort_by ( "B" ). over ( "fruits" ). alias ( "sort_A_by_B_by_fruits" ),
... )
shape : ( 5 , 8 )
┌──────────┬──────────┬──────────────┬─────┬─────────────┬─────────────┬─────────────┬─────────────┐
│ fruits ┆ cars ┆ literal_stri ┆ B ┆ sum_A_by_ca ┆ sum_A_by_fr ┆ rev_A_by_fr ┆ sort_A_by_B │
│ - - - ┆ - - - ┆ ng_fruits ┆ - - - ┆ rs ┆ uits ┆ uits ┆ _by_fruits │
│ str ┆ str ┆ - - - ┆ i64 ┆ - - - ┆ - - - ┆ - - - ┆ - - - │
│ ┆ ┆ str ┆ ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞══════════╪══════════╪══════════════╪═════╪═════════════╪═════════════╪═════════════╪═════════════╡
│ "apple" ┆ "beetle" ┆ "fruits" ┆ 11 ┆ 4 ┆ 7 ┆ 4 ┆ 4 │
│ "apple" ┆ "beetle" ┆ "fruits" ┆ 11 ┆ 4 ┆ 7 ┆ 3 ┆ 3 │
│ "banana" ┆ "beetle" ┆ "fruits" ┆ 11 ┆ 4 ┆ 8 ┆ 5 ┆ 5 │
│ "banana" ┆ "audi" ┆ "fruits" ┆ 11 ┆ 2 ┆ 8 ┆ 2 ┆ 2 │
│ "banana" ┆ "beetle" ┆ "fruits" ┆ 11 ┆ 4 ┆ 8 ┆ 1 ┆ 1 │
└──────────┴──────────┴──────────────┴─────┴─────────────┴─────────────┴─────────────┴─────────────┘
>> > df = pl . scan_csv ( "docs/assets/data/iris.csv" )
>> > ## OPTION 1
>> > # run SQL queries on frame-level
>> > df . sql ( """
... SELECT species,
... AVG(sepal_length) AS avg_sepal_length
... FROM self
... GROUP BY species
... """ ). collect ()
shape : ( 3 , 2 )
┌────────────┬──────────────────┐
│ species ┆ avg_sepal_length │
│ - - - ┆ - - - │
│ str ┆ f64 │
╞════════════╪══════════════════╡
│ Virginica ┆ 6.588 │
│ Versicolor ┆ 5.936 │
│ Setosa ┆ 5.006 │
└────────────┴──────────────────┘
>> > ## OPTION 2
>> > # use pl.sql() to operate on the global context
>> > df2 = pl . LazyFrame ({
... "species" : [ "Setosa" , "Versicolor" , "Virginica" ],
... "blooming_season" : [ "Spring" , "Summer" , "Fall" ]
...})
>> > pl . sql ( """
... SELECT df.species,
... AVG(df.sepal_length) AS avg_sepal_length,
... df2.blooming_season
... FROM df
... LEFT JOIN df2 ON df.species = df2.species
... GROUP BY df.species, df2.blooming_season
... """ ). collect ()
يمكن أيضًا تشغيل أوامر SQL مباشرة من جهازك الطرفي باستخدام Polars CLI:
# run an inline SQL query
> polars -c " SELECT species, AVG(sepal_length) AS avg_sepal_length, AVG(sepal_width) AS avg_sepal_width FROM read_csv('docs/assets/data/iris.csv') GROUP BY species; "
# run interactively
> polars
Polars CLI v0.3.0
Type .help for help.
> SELECT species, AVG(sepal_length) AS avg_sepal_length, AVG(sepal_width) AS avg_sepal_width FROM read_csv( ' docs/assets/data/iris.csv ' ) GROUP BY species ;
ارجع إلى مستودع Polars CLI لمزيد من المعلومات.
القطبية سريعة جدا. في الواقع، إنه أحد أفضل الحلول المتوفرة أداءً. راجع نتائج معايير PDS-H.
Polars أيضًا خفيفة الوزن جدًا. يأتي بدون أي تبعيات مطلوبة، وهذا يظهر في أوقات الاستيراد:
إذا كانت لديك بيانات لا يمكن احتواؤها في الذاكرة، فإن محرك استعلام Polars قادر على معالجة استعلامك (أو أجزاء من استعلامك) بطريقة متدفقة. يؤدي هذا إلى تقليل متطلبات الذاكرة بشكل كبير، لذا قد تتمكن من معالجة مجموعة البيانات التي تبلغ سعتها 250 جيجابايت على الكمبيوتر المحمول الخاص بك. اجمع باستخدام collect(streaming=True)
لتشغيل دفق الاستعلام. (قد يكون هذا أبطأ قليلاً، لكنه لا يزال سريعًا جدًا!)
قم بتثبيت أحدث إصدار من Polars باستخدام:
pip install polars
لدينا أيضًا حزمة conda ( conda install -c conda-forge polars
)، إلا أن النقطة هي الطريقة المفضلة لتثبيت Polars.
قم بتثبيت Polars مع كافة التبعيات الاختيارية.
pip install ' polars[all] '
يمكنك أيضًا تثبيت مجموعة فرعية من كافة التبعيات الاختيارية.
pip install ' polars[numpy,pandas,pyarrow] '
راجع دليل المستخدم لمزيد من التفاصيل حول التبعيات الاختيارية
لرؤية إصدار Polars الحالي وقائمة كاملة بتبعياته الاختيارية، قم بتشغيل:
pl . show_versions ()
تحدث الإصدارات كثيرًا (أسبوعيًا / كل بضعة أيام) في الوقت الحالي، لذا فإن تحديث Polars بانتظام للحصول على أحدث إصلاحات الأخطاء / الميزات قد لا يكون فكرة سيئة.
يمكنك الحصول على أحدث إصدار من crates.io
، أو إذا كنت ترغب في استخدام أحدث الميزات/تحسينات الأداء، قم بالإشارة إلى الفرع main
لهذا الريبو.
polars = { git = " https://github.com/pola-rs/polars " , rev = " <optional git tag> " }
يتطلب إصدار Rust >=1.80
.
هل تريد المساهمة؟ اقرأ دليل المساهمة الخاص بنا.
إذا كنت تريد إصدارًا متطورًا أو أداءً أقصى، فيجب عليك تجميع Polars من المصدر.
ويمكن القيام بذلك من خلال اتباع الخطوات التالية بالتسلسل:
pip install maturin
cd py-polars
واختر واحدًا مما يلي:make build
ثنائيًا بطيئًا مع تأكيدات ورموز التصحيح وأوقات الترجمة السريعةmake build-release
، ثنائي سريع بدون تأكيدات التصحيح، الحد الأدنى من رموز التصحيح، أوقات الترجمة الطويلةmake build-nodebug-release
، مثل build-release ولكن بدون أي رموز تصحيح، وهو أسرع قليلًا في التجميعmake build-debug-release
، مثل إصدار build-release ولكن مع رموز التصحيح الكاملة، وهو أبطأ قليلًا في التجميعmake build-dist-release
أسرع ثنائي وأوقات الترجمة القصوى افتراضيًا، يتم تجميع الملف الثنائي مع تشغيل التحسينات لوحدة المعالجة المركزية الحديثة. حدد LTS_CPU=1
باستخدام الأمر إذا كانت وحدة المعالجة المركزية الخاصة بك أقدم ولا تدعم AVX2 على سبيل المثال.
لاحظ أن صندوق Rust الذي ينفذ روابط Python يُسمى py-polars
لتمييزه عن polars
Rust المغلف نفسه. ومع ذلك، تتم تسمية كل من حزمة Python ووحدة Python باسم polars
، لذا يمكنك pip install polars
import polars
.
يعد توسيع Polars باستخدام UDFs المجمعة في Rust أمرًا سهلاً. نكشف عن امتدادات PyO3 لهياكل بيانات DataFrame
و Series
. شاهد المزيد في https://github.com/pola-rs/pyo3-polars.
هل تتوقع أكثر من 2 ^ 32 (~ 4.2 مليار) صف؟ قم بتجميع Polars باستخدام علامة ميزة bigidx
، أو بالنسبة لمستخدمي Python، قم بتثبيت pip install polars-u64-idx
.
لا تستخدم هذا إلا إذا وصلت إلى حد الصف لأن البناء الافتراضي لـ Polars يكون أسرع ويستهلك ذاكرة أقل.
هل تريد تشغيل Polars على وحدة معالجة مركزية قديمة (على سبيل المثال، يعود تاريخها إلى ما قبل 2011)، أو على إصدار x86-64
من Python على Apple Silicon تحت Rosetta؟ تثبيت pip install polars-lts-cpu
. تم تجميع هذا الإصدار من Polars بدون ميزات هدف AVX.