कोर्स
इस ट्यूटोरियल में, हम चर्चा करेंगे कि pandas के ढांचे में SQL की कार्यक्षमता हम कब और कैसे (और कब नहीं) इस्तेमाल कर सकते हैं। साथ ही, हम इस तरीके को लागू करने के कई उदाहरण देखेंगे और उनके नतीजों की तुलना शुद्ध pandas के समकक्ष कोड से करेंगे।
pandas में SQL क्यों इस्तेमाल करें?
जब pandas स्वयं एक संपूर्ण डेटा विश्लेषण पैकेज है, तब किसी को pandas के साथ SQL क्यों जोड़ना चाहिए?
जवाब यह है कि कुछ मौकों पर, खासकर जटिल प्रोग्रामों में, SQL क्वेरीज़ संबंधित pandas कोड की तुलना में अधिक सीधे-सादे और पढ़ने में आसान लगती हैं। यह विशेष रूप से उन लोगों के लिए सही है जिन्होंने पहले डेटा के साथ काम करने के लिए SQL का उपयोग किया और बाद में pandas सीखा।
SQL की पठनीयता को क्रियान्वयन में देखने के लिए, मान लीजिए हमारे पास penguins नाम की एक तालिका (dataframe) है जिसमें पेंगुइनों के बारे में विभिन्न जानकारी है (और हम इस ट्यूटोरियल में आगे ऐसी ही तालिका के साथ काम करेंगे)। उन सभी अद्वितीय प्रजातियों को निकालने के लिए जो नर हैं और जिनके फ्लिपर 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
अब जब हमने pandas के लिए SQL के उपयोग के फायदे पहचान लिए हैं, तो देखें कि हम तकनीकी तौर पर दोनों को कैसे जोड़ सकते हैं।
pandasql का उपयोग कैसे करें
pandasql Python लाइब्रेरी किसी भी SQL सर्वर से कनेक्ट हुए बिना SQL कमांड चलाकर pandas dataframes पर क्वेरी करने की अनुमति देती है। अंदरूनी तौर पर यह SQLite सिंटैक्स का उपयोग करती है, किसी भी pandas dataframe को अपने आप पहचानती है, और उसे एक सामान्य SQL तालिका की तरह ट्रीट करती है।
अपना परिवेश सेट करना
सबसे पहले, हमें pandasql इंस्टॉल करनी होगी:
pip install pandasql
फिर, आवश्यक पैकेज इम्पोर्ट करें:
from pandasql import sqldf
import pandas as pd
ऊपर, हमने सीधे pandasql से sqldf() फ़ंक्शन इम्पोर्ट किया है, जो व्यवहार में इस लाइब्रेरी का लगभग एकमात्र सार्थक फ़ंक्शन है। नाम से स्पष्ट है कि इसे SQL सिंटैक्स का उपयोग करके dataframes पर क्वेरी करने के लिए लगाया जाता है। इस फ़ंक्शन के अलावा, pandasql में दो सरल बिल्ट-इन डेटासेट भी आते हैं जिन्हें load_births() और load_meat() जैसे स्वयं-स्पष्ट फ़ंक्शनों से लोड किया जा सकता है।
pandasql सिंटैक्स
sqldf() फ़ंक्शन का सिंटैक्स बहुत सरल है:
sqldf(query, env=None)
यहां, query एक आवश्यक पैरामीटर है जो स्ट्रिंग के रूप में SQL क्वेरी लेता है, और env—एक वैकल्पिक (और कम उपयोगी) पैरामीटर है, जो locals() या globals() हो सकता है और sqldf() को आपके Python वातावरण में संबंधित वेरिएबल्स तक पहुंचने देता है।
sqldf() फ़ंक्शन क्वेरी के परिणाम को pandas dataframe के रूप में लौटाता है।
हम pandasql कब उपयोग कर सकते हैं
pandasql लाइब्रेरी Data Query Language (DQL) का उपयोग करके डेटा के साथ काम करने देती है, जो SQL का एक सबसेट है। दूसरे शब्दों में, pandasql के साथ हम डेटाबेस में संग्रहीत डेटा पर क्वेरी चलाकर आवश्यक जानकारी प्राप्त कर सकते हैं। खासकर, हम डेटा तक पहुंच सकते हैं, निकाल सकते हैं, फ़िल्टर कर सकते हैं, सॉर्ट, ग्रुप, जॉइन, एग्रीगेट कर सकते हैं, और उस पर गणितीय या तार्किक ऑपरेशन कर सकते हैं।
हम pandasql कब उपयोग नहीं कर सकते
pandasql DQL के अलावा SQL के किसी अन्य सबसेट का उपयोग करने की अनुमति नहीं देता। इसका मतलब है कि हम pandasql का उपयोग करके तालिकाओं को संशोधित (update, truncate, insert, आदि) नहीं कर सकते या तालिका के डेटा को बदल (update, delete, insert) नहीं सकते।
इसके अलावा, चूंकि यह लाइब्रेरी SQL सिंटैक्स पर आधारित है, हमें SQLite की जानी-मानी विशेषताओं से सावधान रहना चाहिए।
pandasql का उपयोग: उदाहरण
अब, हम pandasql के sqldf() फ़ंक्शन का उपयोग करके pandas dataframes पर SQL क्वेरी कैसे चलाएं, इसे और बारीकी से देखेंगे। अभ्यास के लिए कुछ डेटा पाने हेतु, चलिए 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 Fundamentals स्किल ट्रैक एक अच्छा संदर्भ बिंदु है।
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 dataframe से पहले पाँच पेंगुइनों की प्रजाति और भौगोलिक जानकारी निकाली। ध्यान दें कि sqldf() फ़ंक्शन चलाने पर एक pandas dataframe लौटता है:
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
ऊपर, हमने अपने पेंगुइनों को शरीर द्रव्यमान के आधार पर अवरोही क्रम में सॉर्ट किया और शीर्ष पाँच मान दिखाए।
pandas में, यह होगा:
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 से डेटा फ़िल्टर करना
आइए वही उदाहरण आज़माएं जिसका ज़िक्र हमने "pandas में SQL क्यों" अध्याय में किया था: उन पेंगुइनों की अद्वितीय प्रजातियाँ निकालना जो नर हैं और जिनके फ्लिपर 210 मिमी से लंबे हैं:
print(sqldf('''SELECT DISTINCT species
FROM penguins
WHERE sex = 'Male'
AND flipper_length_mm > 210'''))
आउटपुट:
species
0 Chinstrap
1 Gentoo
ऊपर, हमने दो शर्तों के आधार पर डेटा फ़िल्टर किया: sex = 'Male' और flipper_length_mm > 210।
pandas में यही कोड थोड़ा अधिक बोझिल लगेगा:
print(penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique())
आउटपुट:
['Chinstrap' 'Gentoo']
pandasql से डेटा को समूहित और एग्रीगेट करना
अब, आइए समूहकरण और एग्रीगेशन लागू करके प्रत्येक प्रजाति के लिए सबसे लंबी चोंच खोजें:
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
pandas में वही कोड:
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
pandasql से गणितीय ऑपरेशन करना
pandasql के साथ, हम आसानी से डेटा पर गणितीय या तार्किक ऑपरेशन कर सकते हैं। मान लें कि हम प्रत्येक पेंगुइन के लिए चोंच की लंबाई-से-गहराई का अनुपात निकालना चाहते हैं और इस माप के शीर्ष पाँच मान दिखाना चाहते हैं:
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
ध्यान दें कि इस बार, हमने अनुपात मानों वाले कॉलम के लिए length_to_depth उपनाम का उपयोग किया। वरना हमें bill_length_mm / bill_depth_mm जैसा बेहद लंबा कॉलम नाम मिलता।
pandas में, हमें पहले अनुपात मानों वाला एक नया कॉलम बनाना होगा:
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
निष्कर्ष
समापन के लिए, इस ट्यूटोरियल में हमने देखा कि pandas के लिए SQL की कार्यक्षमता कब और क्यों जोड़कर बेहतर, अधिक कुशल कोड लिखा जा सकता है। हमने इस उद्देश्य के लिए pandasql लाइब्रेरी को कैसे सेट अप और उपयोग किया जाए, और इस पैकेज की क्या सीमाएँ हैं, इस पर चर्चा की। अंत में, हमने pandasql के कई लोकप्रिय व्यावहारिक उदाहरण देखे और हर मामले में कोड की तुलना उसके pandas समकक्ष से की।
अब आपके पास वास्तविक परियोजनाओं में pandas के लिए SQL लागू करने के लिए सब कुछ है। अभ्यास के लिए एक बेहतरीन जगह है DataLab, DataCamp की AI-सक्षम डेटा नोटबुक, जिसमें बेहतरीन SQL सपोर्ट है।