كيفية استخدام SQL في pandas باستخدام pandasql Queries

SQL، أو اللغة البرمجية المنظمة، هي لغة برمجية تستخدم للوصول إلى، واستخراج، وتشكيل، واستكشاف البيانات التي تخزن في قاعدات البيانات التعلقية. بانداز هي مكتبة برمجية مفتوحة المصدر للبرمجيات الخاصة بالتحليل البياني والتعديل البياني.

في هذا التوريتال، سنتحدث عن أي وقت وكيف يمكننا (وأي وقت لا يمكننا) استخدام قابليات SQL في إطار بانداز. إضافة إلى ذلك، سننظر في أمثلة مختلفة لتطبيق هذا المنهج ونقارن النتائج مع الكود المتماثل في بانداز الخالي من الملاحظات.

لماذا تستخدم SQL في بانداز؟

وفقاً للتعريفات في المقدمة، لماذا يحتاج شخص إلى إستخدام SQL مجاناً بالإطار بانداز وبما أن الأخر حزمة كاملة للتحليل البياني؟

الإجابة هي أنه في بعض الأحيان، وخاصة في البرامج المعقدة، تبدو الأسئلة SQL أكثر بساطة وأسهل القراءة من البرمجيات المتماثلة في بانداز. وهذا صحيح بشكل أكبر لأولئك الذين بدءوا بالعمل بالبيانات بواسطة SQL ومن ثم تعلموا بانداز.

إذا كنت تحتاج إلى تدريب أكثر في بانداز، يمكنك أن ترغب في فحص دورتنا التحليل البياني بواسطة بانداز و درس بانداز: أنماط البيانات في البيت السوداني.

لرؤية قابلية القراءة لSQL في العمل، دعونا نفترض أن لدينا جدول (مصفوفة البيانات) يُدعى penguins ويحتوي على معلومات متنوعة عن البطاريق (وسنعمل مع ذلك الجدول في هذا الدرس لاحقا). لاستخراج جميع الأنواع الفريدة من البطاريق الذكور والذين لديهم أضلاع أطول من 210 ميليميتر، سنحتاج إلى الكود التالي في pandas:

penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique()

بدلاً من ذلك، للحصول على نفس المعلومات باستخدام SQL، سنشغل الكود التالي:

SELECT DISTINCT species FROM penguins WHERE sex = 'Male' AND flipper_length_mm > 210

الجزء الثاني من الكود، الذي كتب بSQL، يبدو تقريبا كجملة إنجليزية طبيعية وبالتالي أكثر قابلية للفهم بكثير. يمكننا زيادة قابليتها للقراءة بتوسيعها على أكثر من سطر:

SELECT DISTINCT species FROM penguins WHERE sex = 'Male' AND flipper_length_mm > 210

الآن بما أننا وجدنا مزايا استخدام SQL لـpandas، دعونا نرى كيفية تجميعهما معاً تقنياً.

كيفية استخدام pandasql

تطبيق Python pandasql يسمح باستعلام الجداول البياناتية لـpandas عن طريق تشغيل أوامر SQL دون الحاجة إلى الاتصال بخادم SQL. من تحت الغطاء، يستخدم تعاليم SQLite، يكتشف تلقائياً أي جداول بيانات pandas ويعاملها كجدول SQL رسمي.

إعداد بيئتك

أولاً، يجب علينا تثبيت pandasql:

pip install pandasql

ثم، نستورد البعدات المطلوبة:

from pandasql import sqldf import pandas as pd

plaintext
أعلاه، قمنا بإستيراد المثيل الخاص بـ sqldf من pandasql، وهو تقريبا الوظيفة الوحيدة المعنوية للمكتبة. كما يتضح من الاسم، يُستخدم لاستعلام البيانات المصفوفة باستخدام تركيبة SQL. بعيدا عن هذه الوظيفة، يأتي pandasql مع مجموعتين بيانات تمثيلية سهلة التحميل يمكن تحميلهما باستخدام الوظائف الواضحة load_births() و load_meat().

تركيبة pandasql

تركيبة الوظيفة sqldf سهلة جدا:

sqldf(query, env=None)

هنا، query هو متغير مطلوب يأخذ استعلام SQL كسلسلة، و env — متغير اختياري (وغالبا لا يكون مفيدا) يمكن أن يكون إما locals() أو globals() ويسمح لـ sqldf بالوصول إلى مجموعة المتغيرات المناسبة في بيئة Python الخاصة بك.

تعيد الوظيفة sqldf نتيجة الاستعلام كمصفوفة pandas.

متى يمكننا استخدام pandasql

تسمح المكتبة pandasql بالعمل مع اللغة Data Query Language (DQL), التي هي إحدى الجزء من SQL. بمعنى آخر، يمكننا بواسطة pandasql تشغيل الاستعلامات على البيانات المخزَّنة في قاعدة البيانات لاسترجاع المعلومات الضرورية منها. وبالتحديد، يمكننا الوصول، والاستخراج، والتصفية، والترتيب، والتجميع، والإندماج، وتجميع البيانات، وإجراء عمليات رياضية أو منطقية عليها.

متى لا يمكننا استخدام pandasql

pandasql لا تسمح بتطبيق أي جزء آخر من SQL بعيدا عن DQL. هذا يعني أنه لا يمكننا تطبيق pandasql على تعديل (تحديث، قطع، إدراج، إلخ.) الجداول أو تغيير (تحديث، حذف، أو إدراج) البيانات في الجدول.

إضافة إلى ذلك، ومع أن هذه المكتبة تعتمد على سيntax SQL، يجب أن نكون حذرين من الشيئات المعروفة الغرابة في SQLite.

أمثلة لاستخدام pandasql

الآن، سنأخذ نظرة أكثر تفصيلية على كيفية تشغيل الاستعلامات SQL على ديفرانيوس pandas باستخدام الوظيفة sqldf من pandasql. لإمتلاك بعض البيانات لممارسة، دعونا نحمل إحدى مجموعات البيانات المبنية في مكتبة seaborn—penguins:

import seaborn as sns penguins = sns.load_dataset('penguins') print(penguins.head())

الناتج:

species island bill_length_mm bill_depth_mm flipper_length_mm \ 0 Adelie Torgersen 39.1 18.7 181.0 1 Adelie Torgersen 39.5 17.4 186.0 2 Adelie Torgersen 40.3 18.0 195.0 3 Adelie Torgersen NaN NaN NaN 4 Adelie Torgersen 36.7 19.3 193.0 body_mass_g sex 0 3750.0 Male 1 3800.0 Female 2 3250.0 Female 3 NaN NaN 4 3450.0 Female

إذا كان لديك الحاجة إلى تحديث مهارات SQL، فإن خط المهارات الأساسيات SQL هو نقطة إشارة جيدة.

استخراج البيانات بواسطة pandasql

print(sqldf('''SELECT species, island FROM penguins LIMIT 5'''))

الناتج:

species island 0 Adelie Torgersen 1 Adelie Torgersen 2 Adelie Torgersen 3 Adelie Torgersen 4 Adelie Torgersen

فوق، استخرجنا معلومات عن الأنواع والجغرافية لخمسة البطاريق الأوائل من ديفرانيوس penguins. لاحظ أن تشغيل الوظيفة sqldf يعيد ديفرانيوس pandas:

print(type(sqldf('''SELECT species, island FROM penguins LIMIT 5''')))

الناتج:

<class 'pandas.core.frame.DataFrame'>

في pandas النقي، سيكون الأمر:

print(penguins[['species', 'island']].head())

الناتج:

species island 0 Adelie Torgersen 1 Adelie Torgersen 2 Adelie Torgersen 3 Adelie Torgersen 4 Adelie Torgersen

مثال آخر هو استخراج القيم الفريدة من العمود:

print(sqldf('''SELECT DISTINCT species FROM penguins'''))

الناتج:

species 0 Adelie 1 Chinstrap 2 Gentoo

في pandas، سيكون الأمر:

print(penguins['species'].unique())

الناتج:

['Adelie' 'Chinstrap' 'Gentoo']

فرز البيانات بواسطة pandasql

print(sqldf('''SELECT body_mass_g FROM penguins ORDER BY body_mass_g DESC LIMIT 5'''))

الناتج:

body_mass_g 0 6300.0 1 6050.0 2 6000.0 3 6000.0 4 5950.0

فوق، فرزنا البطاريق حسب وزن الجسم بترتيب تنازلي وعرض الخمس قيم الأعلى لوزن الجسم.

في الباندا، سيكون:

print(penguins['body_mass_g'].sort_values(ascending=False, ignore_index=True).head())

الإخراج:

0 6300.0 1 6050.0 2 6000.0 3 6000.0 4 5950.0 Name: body_mass_g, dtype: float64

تصفية البيانات باستخدام pandasql

لنجرب نفس المثال الذي ذكرناه في فصل لماذا نستخدم SQL في الباندا: استخراج الأنواع الفريدة من طيور البطريق من الذكور والتي يزيد طول زعانفها عن 210 مم:

print(sqldf('''SELECT DISTINCT species FROM penguins WHERE sex = 'Male' AND flipper_length_mm > 210'''))

الإخراجالإخراج:

species 0 Chinstrap 1 Gentoo

أعلاه، قمنا بتصفية البيانات بناءً على شرطين <كود>الجنس = “ذكر” و<كود>طول_الزعنفة_مم >؛ 210.

الرمز نفسه في بانداس سيبدو أكثر غموضًا:

print(penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique())

الإخراج:

['Chinstrap' 'Gentoo']

تجميع وتجميع البيانات باستخدام البانداسل

الآن، دعونا نطبق تجميع وتجميع البيانات للعثور على أطول فاتورة لكل نوع في إطار البيانات:

print(sqldf('''SELECT species, MAX(bill_length_mm) FROM penguins GROUP BY species'''))

الإخراج:

species MAX(bill_length_mm) 0 Adelie 46.0 1 Chinstrap 58.0 2 Gentoo 59.6

نفس الكود في الباندا:

print(penguins[['species', 'bill_length_mm']].groupby('species', as_index=False).max())

الإخراج:

species bill_length_mm 0 Adelie 46.0 1 Chinstrap 58.0 2 Gentoo 59.6

إجراء عمليات رياضية باستخدام البانداسل

باستخدام البانداسل يمكننا بسهولة إجراء عمليات رياضية أو منطقية على البيانات. دعونا نتخيل أننا نريد حساب نسبة طول الفاتورة إلى العمق لكل بطريق وعرض أعلى خمس قيم لهذا القياس:

print(sqldf('''SELECT bill_length_mm / bill_depth_mm AS length_to_depth FROM penguins ORDER BY length_to_depth DESC LIMIT 5'''))

الإخراج:

length_to_depth 0 3.612676 1 3.510490 2 3.505882 3 3.492424 4 3.458599

لاحظ أننا استخدمنا هذه المرة الاسم المستعار <رمز>الطول_إلى_العمق للعمود الذي يحتوي على قيم النسبة. وإلا كنا سنحصل على عمود يحمل اسمًا وحشيًا <رمز <رمز>طول_الفاتورة_مم/عمق_الفاتورة.

في بانداس، سنحتاج أولاً إلى إنشاء عمود جديد بقيم النسبة:

penguins['length_to_depth'] = penguins['bill_length_mm'] / penguins['bill_depth_mm'] print(penguins['length_to_depth'].sort_values(ascending=False, ignore_index=True).head())

الإخراج:

0 3.612676 1 3.510490 2 3.505882 3 3.492424 4 3.458599 Name: length_to_depth, dtype: float64

الخلاصة

لإلتقاط الختام، بدأنا في هذه الدرسة في استكشاف سبب و أيام التحديد للتكامل بين وظيفة SQL لـ pandas لكتابة أكثر برمجية و كفاءة. تحدثنا عن كيفية إعداد و استخدام المكتبة pandasql لهذه الغرض و ما هي قصورات هذه المجموعة. و أخيرًا، نظرنا إلى العديد من الأمثلة الشهيرة عن تطبيق pandasql على اليوم العام و مقارنة كل مرة مع ما يكمله pandas.

و الآن لديك كل ما تحتاجه لتطبيق SQL لـ pandas في مشاريع العالم الحقيقي. و من الأماكن الجيدة للممارسة هو DataLab من DataCamp، الورقة الداتا مع دعم AI و توفر جيد ل SQL.

Source:
https://www.datacamp.com/tutorial/how-to-use-sql-in-pandas-using-pandasql-queries