अध्याय 03 पांडा का उपयोग करके डेटा हैंडलिंग-02

“हम भारतीयों के बहुत आभारी हैं, जिन्होंने हमें गिनना सिखाया, जिसके बिना कोई भी महत्वपूर्ण वैज्ञानिक खोज संभव नहीं हो पाती।”

— अल्बर्ट आइंस्टीन

3.1 परिचय

जैसा कि पिछले अध्याय में चर्चा की गई थी, Pandas एक प्रतिष्ठित Python लाइब्रेरी है जिसका उपयोग डेटा के हेरफेर, प्रोसेसिंग और विश्लेषण के लिए किया जाता है। हम पहले ही Series और DataFrame पर बुनियादी संचालन जैसे उन्हें बनाना और उनसे डेटा तक पहुँचना सीख चुके हैं। Pandas डेटा विश्लेषण के लिए और भी शक्तिशाली और उपयोगी फ़ंक्शन प्रदान करता है।

इस अध्याय में, हम DataFrame की अधिक उन्नत विशेषताओं के साथ काम करेंगे जैसे डेटा को सॉर्ट करना, डेटा का उपयोग करके विश्लेषणात्मक प्रश्नों के उत्तर देना, डेटा को साफ़ करना और डेटा पर विभिन्न उपयोगी फ़ंक्शन लागू करना। नीचे उदाहरण डेटा दिया गया है जिस पर हम Pandas की उन्नत विशेषताएँ लागू करेंगे।

केस स्टडी

आइए स्कूल में हुई इकाई परीक्षाओं में प्राप्त अंकों के डेटा पर विचार करें। प्रत्येक इकाई परीक्षा के लिए, कक्षा के सभी छात्रों द्वारा प्राप्त किए गए अंकों को रिकॉर्ड किया जाता है। प्रत्येक विषय में अधिकतम अंक 25 हैं। विषय हैं गणित, विज्ञान, सामाजिक अध्ययन (S.St.), हिंदी और अंग्रेज़ी। सरलता के लिए, हम मानते हैं कि कक्षा में 4 छात्र हैं और नीचे दी गई तालिका में उनके इकाई परीक्षा 1, इकाई परीक्षा 2 और इकाई परीक्षा 3 में प्राप्त अंक दिखाए गए हैं। तालिका 3.1 इस डेटा को दर्शाती है।

तालिका 3.1 केस स्टडी

परिणाम
नाम/विषय यूनिट टेस्ट गणित विज्ञान सामाजिक विज्ञान हिन्दी अंग्रेज़ी
रमन 1 22 21 18 20 21
रमन 2 21 20 17 22 24
रमन 3 14 19 15 24 23
ज़ुहैर 1 20 17 22 24 19
ज़ुहैर 2 23 15 21 25 15
ज़ुहैर 3 22 18 19 23 13
आश्रव्य 1 23 19 20 15 22
आश्रव्य 2 24 22 24 17 21
आश्रव्य 3 12 25 19 21 23
मिष्टी 1 15 22 25 22 22
मिष्टी 2 18 21 25 24 23
मिष्टी 3 17 18 20 25 20

आइए डेटा को एक DataFrame में संग्रहीत करें, जैसा कि प्रोग्राम 3.1 में दिखाया गया है:

प्रोग्राम 3-1 परिणाम डेटा को marksUT नामक DataFrame में संग्रहीत करें।

>>> import pandas as pd
>>>marksUT={‘Name’:[‘Raman’,‘Raman’,‘Raman’,‘Zuhaire’,‘Zuhaire’,‘Zuhaire’, ‘Ashravy’,‘Ashravy’,‘Ashravy’,‘Mishti’,‘Mishti’,‘Mishti’],
$\qquad$ ‘UT’:[1,2,3,1,2,3,1,2,3,1,2,3],
$\qquad$ ‘Maths’:[22,21,14,20,23,22,23,24,12,15,18,17],
$\qquad$ ‘Science’:[21,20,19,17,15,18,19,22,25,22,21,18],
$\qquad$ ‘S.St’:[18,17,15,22,21,19,20,24,19,25,25,20],
$\qquad$ ‘Hindi’:[20,22,24,24,25,23,15,17,21,22,24,25],
$\qquad$ ‘Eng’:[21,24,23,19,15,13,22,21,23,22,23,20]
$\qquad$ }
>>> df=pd.DataFrame(marksUT)
>>> print(df)

नाम यूटी गणित विज्ञान स.वि हिन्दी अंग्रेज़ी
0 रमन 1 22 21 18 20 21
1 रमन 2 21 20 17 22 24
2 रमन 3 14 19 15 24 23
3 ज़ुहैर 1 20 17 22 24 19
4 ज़ुहैर 2 23 15 21 25 15
5 ज़ुहैर 3 22 18 19 23 13
6 अश्रव्य 1 23 19 20 15 22
7 अश्रव्य 2 24 22 24 17 21
8 अश्रव्य 3 12 25 19 21 23
9 मिश्ती 1 15 22 25 22 22
10 मिश्ती 2 18 21 25 24 23
11 मिश्ती 3 17 18 20 25 20

3.2 वर्णनात्मक सांख्यिकी

वर्णनात्मक सांख्यिकी दिए गए डेटा को संक्षेपित करने के लिए प्रयोग की जाती हैं। दूसरे शब्दों में, ये वे तरीके हैं जिनका उपयोग डेटा के बारे में कुछ बुनियादी जानकारी प्राप्त करने के लिए किया जाता है।

इस खंड में हम उन वर्णनात्मक सांख्यिकीय तरीकों की चर्चा करेंगे जिन्हें एक DataFrame पर लागू किया जा सकता है। ये हैं max, min, count, sum, mean, median, mode, quartiles, variance। प्रत्येक स्थिति में हम ऊपर बनाए गए DataFrame df पर विचार करेंगे।

3.2.1 अधिकतम मानों की गणना

DataFrame.max() का उपयोग DataFrame से अधिकतम मानों की गणना करने के लिए किया जाता है, चाहे उसके डेटा प्रकार कुछ भी हों। निम्नलिखित कथन DataFrame के प्रत्येक स्तंभ का अधिकतम मान आउटपुट करता है:

>>> print(df.max())

नाम ज़ुहैर #नाम स्तंभ में अधिकतम मान
#(वर्णानुक्रम में)
यूटी 3 #यूटी स्तंभ में अधिकतम मान
गणित 24 #गणित स्तंभ में अधिकतम मान
विज्ञान 25 #विज्ञान स्तंभ में अधिकतम मान
सामाजिक विज्ञान 25 #सामाजिक विज्ञान स्तंभ में अधिकतम मान
हिन्दी 25 #हिन्दी स्तंभ में अधिकतम मान
अंग्रेज़ी 24 #अंग्रेज़ी स्तंभ में अधिकतम मान

dtype: object

यदि हम केवल संख्यात्मक मान वाले स्तंभों के लिए अधिकतम मान निकालना चाहते हैं, तो हम max() विधि में numeric_only=True पैरामीटर सेट कर सकते हैं, जैसा कि नीचे दिखाया गया है:

>>>print(df.max(numeric_only=True))

यूटी $\qquad$ 3
गणित $\quad$ 24
विज्ञान $\quad$ 25
सामाजिक विज्ञान $\qquad$ 25
हिन्दी $\qquad$ 25
अंग्रेज़ी $\qquad$ 24
dtype: int64

प्रोग्राम 3-2 यूनिट टेस्ट 2 में प्रत्येक विषय में प्राप्त अधिकतम अंकों को आउटपुट करने के लिए कथन लिखें।

>>> dfUT2 = df[df.UT == 2]
>>> print(’\nयूनिट टेस्ट 2 का परिणाम:\n\n’, dfUT2)

नाम यूटी गणित विज्ञान सामाजिक विज्ञान हिन्दी अंग्रेज़ी
1 रमन 2 21 20 17 22 24
4 ज़ुहैर 2 23 15 21 25 15
7 अश्रव्य 2 24 22 24 17 21
10 मिश्ति 2 18 21 25 24 23

>>> print(’\nयूनिट टेस्ट 2 में प्रत्येक विषय में प्राप्त अधिकतम अंक: \n\n’,dfUT2.
max(numeric_only=True))

यूनिट टेस्ट 2 में प्रत्येक विषय में प्राप्त अधिकतम अंक:

UT $\qquad$ 2
गणित $\quad$ 24
विज्ञान $\quad$ 22
सामाजिक विज्ञान $\qquad$ 25
हिन्दी $\quad$ 25
अंग्रेज़ी $\qquad$ 24
dtype: int64

प्रोग्राम 3.2 का आउटपुट निम्न कथनों का उपयोग करके भी प्राप्त किया जा सकता है
>>> dfUT2=df[df [ ‘UT ‘]==2] . max (numeric_only=True)
>>> print(dfUT2)

डिफ़ॉल्ट रूप से, $\max ()$ विधि प्रत्येक कॉलम का अधिकतम मान खोजती है (जिसका अर्थ है, axis=0)। हालाँकि, प्रत्येक पंक्ति का अधिकतम मान खोजने के लिए, हमें इसके तर्क के रूप में axis $=1$ निर्दिष्ट करना होता है।

#सभी विषयों में प्रत्येक छात्र के लिए प्रत्येक इकाई परीक्षा में अधिकतम अंक

>>> df.max(axis=1)

0 $\quad$ 22
1 $\quad$ 24
2 $\quad$ 24
3 $\quad$ 24
4 $\quad$ 25
5 $\quad$ 23
6 $\quad$ 23
7 $\quad$ 24
8 $\quad$ 25
9 $\quad$ 25
10 $\quad$ 25
11 $\quad$ 25
dtype: int64

नोट: अधिकांश पायथन फ़ंक्शन कॉल में, axis $=0$ पंक्ति-वार संचालन को संदर्भित करता है और axis $=1$ कॉलम-वार संचालन को। लेकिन $\max ()$ की कॉल में, axis $=1$ पंक्ति-वार आउटपुट देता है और axis $=0$ (डिफ़ॉल्ट स्थिति) कॉलम-वार आउटपुट देता है। इस अध्याय में चर्चा किए गए सभी सांख्यिकीय संचालनों के साथ ऐसा ही है।

3.2.2 न्यूनतम मानों की गणना

DataFrame.min() का उपयोग DataFrame से न्यूनतम मान प्रदर्शित करने के लिए किया जाता है, चाहे डेटा प्रकार कुछ भी हों। यह प्रत्येक कॉलम या पंक्ति का न्यूनतम मान दिखाता है। निम्न कोड पंक्ति DataFrame के प्रत्येक कॉलम का न्यूनतम मान आउटपुट करती है:

>>> print(df.min())

नाम अश्रव्य
यूटी 1
गणित 12
विज्ञान 15
सामाजिक विज्ञान 15
हिन्दी 15
अंग्रेज़ी 13

dtype: object

प्रोग्राम 3-3 उन कथनों को लिखिए जो किसी विशेष छात्रा ‘मिश्ती’ द्वारा सभी इकाई-परीक्षणों में प्रत्येक विषय में प्राप्त न्यूनतम अंक दिखाएँ।

>>> dfMishti = df.loc[df.Name == ‘Mishti’]
>>> print(’\nसभी इकाई-परीक्षणों में मिश्ती द्वारा प्राप्त अंक \n\n’,dfMishti)

सभी इकाई-परीक्षणों में मिश्ती द्वारा प्राप्त अंक

नाम यूटी गणित विज्ञान सामाजिक विज्ञान हिन्दी अंग्रेज़ी
9 मिश्ती 1 15 22 25 22 22
10 मिश्ती 2 18 21 25 24 23
11 मिश्ती 3 17 18 20 25 20

>>> print(’\nप्रत्येक विषय में सभी इकाई-परीक्षणों में मिश्ती द्वारा प्राप्त न्यूनतम अंक\n\n’, dfMishti[[‘गणित’,‘विज्ञान’,‘सा.
वि’,‘हिन्दी’,‘अंग्रेज़ी’]].min())

प्रोग्राम 3.3 का आउटपुट निम्न कथनों से भी प्राप्त किया जा सकता है
>>>dfMishti=df[[‘गणित’,‘विज्ञान’,‘सा.वि’,‘हिन्दी’,‘अंग्रेज़ी’]][df.Name==‘Mishti’].min()
>>> print(dfMishti)

प्रत्येक विषय में सभी इकाई-परीक्षणों में मिश्ती द्वारा प्राप्त न्यूनतम अंक:

गणित $\quad$ 15
विज्ञान $\quad$ 18
सा.वि $\quad$ 20
हिन्दी $\quad$ 22
अंग्रेज़ी $\quad$ 20
dtype: int64

नोट: चूँकि हम यूटी स्तंभ का न्यूनतम मान नहीं चाहते थे, इसलिए हमने उन सभी अन्य स्तंभों के नाम दिए जिनके लिए न्यूनतम गणना करनी थी।

3.2.3 मानों का योग निकालना

DataFrame.sum() DataFrame के मानों का योग दिखाएगा चाहे उसका डेटाटाइप कुछ भी हो। निम्नलिखित कोड लाइन DataFrame के प्रत्येक कॉलम का योग आउटपुट करती है:

>>> print(df.sum())
Name
RamanRamanRamanZuhaireZuhaireZuhaireAshravyAsh…

Maths $\qquad$ 231
Science $\qquad$ 237
S.St $\qquad$ 245
Hindi $\qquad$ 262
Eng $\qquad$ 246
dtype: object

हम टेक्स्ट मानों का योग जोड़ने में रुचि नहीं रख सकते। इसलिए किसी विशेष कॉलम का योग प्रिंट करने के लिए हमें sum फंक्शन के कॉल में कॉलम का नाम निर्दिष्ट करना होगा। निम्नलिखित कथन गणित विषय के कुल अंक प्रिंट करता है:

>>> print(df[‘Maths’].sum())
231

सोचिए और विचार कीजिए

क्या आप प्रोग्राम 3.4 के आउटपुट को प्राप्त करने के लिए संक्षिप्त कोड लिख सकते हैं?

किसी विशेष विद्यार्थी के कुल अंक गणना करने के लिए विद्यार्थी का नाम निर्दिष्ट करना होगा।

प्रोग्राम 3-4 प्रत्येक विषय में रामन द्वारा प्राप्त कुल अंक प्रिंट करने के लिए पायथन कथन लिखिए।

>>> dfRaman=df[df[‘Name’]==‘Raman’]
>>> print(“Marks obtained by Raman in each test are:\n”, dfRaman)

Marks obtained by Raman in each test are:

Name UT Maths Science S.St Hindi Eng
0 Raman 1 22 21 18 20 21
1 Raman 2 21 20 17 22 24
2 Raman 3 14 19 15 24 23

>>> dfRaman[[‘Maths’,‘Science’,‘S.
St’,‘Hindi’,‘Eng’]].sum()

गणित $\quad$ 57
विज्ञान $\quad$ 60
सामाजिक विज्ञान $\quad$ 50
हिन्दी $\quad$ 66
अंग्रेज़ी $\quad$ 68
dtype: int64

गतिविधि 3.1

मिश्ती द्वारा प्राप्त किए गए अंग्रेज़ी अंकों का योग प्रिंट करने के लिए पायथन कथन लिखें।

#रमन द्वारा प्रत्येक यूनिट टेस्ट में सभी विषयों में प्राप्त कुल अंकों को प्रिंट करने के लिए
>>> dfRaman[[‘गणित’,‘विज्ञान’,‘सामा.
वि’,‘हिन्दी’,‘अंग्रेज़ी’]].sum(axis=1)

0 $\quad$ 102
1 $\quad$ 104
2 $\quad$ 95
dtype: int64

3.2.4 मानों की संख्या की गणना

DataFrame.count() DataFrame के प्रत्येक कॉलम या पंक्ति के लिए कुल मानों की संख्या दिखाएगा। पंक्तियों की गणना करने के लिए हमें axis=1 तर्क का उपयोग करना होता है जैसा कि नीचे प्रोग्राम 3.5 में दिखाया गया है।

>>> print(df.count())

नाम $\quad$ 12
यूटी $\quad$ 12
गणित $\quad$ 12
विज्ञान $\quad$ 12
सामाजिक विज्ञान $\quad$ 12
हिन्दी $\quad$ 12
अंग्रेज़ी $\quad$ 12
dtype: int64

प्रोग्राम 3-5 पंक्ति में मानों की संख्या गिनने के लिए कथन लिखें।

>>> df.count(axis=1)

0 $\quad$ 7
1 $\quad$ 7
2 $\quad$ 7
3 $\quad$ 7
4 $\quad$ 7
5 $\quad$ 7
6 $\quad$ 7
7 $\quad$ 7
8 $\quad$ 7
9 $\quad$ 7
10 $\quad$ 7
11 $\quad$ 7
dtype: int64

3.2.5 माध्य की गणना

DataFrame.mean() DataFrame के प्रत्येक कॉलम के मानों का माध्य (औसत) दिखाएगा। यह केवल संख्यात्मक मानों पर लागू होता है।

>>> df.mean()

यूटी $\quad$ 2.5000
गणित $\quad$ 18.6000
विज्ञान $\quad$ 19.8000
सामाजिक विज्ञान $\quad$ 20.0000
हिन्दी $\quad$ 21.3125
अंग्रेज़ी $\quad$ 19.8000
dtype: float64

प्रोग्राम 3-6 ज़ुहैर द्वारा सभी यूनिट टेस्टों में प्राप्त किए गए अंकों का औसत प्राप्त करने के लिए कथन लिखें।

>>> dfZuhaireMarks = dfZuhaire.loc[:,‘Maths’:‘Eng’]
>>> print(“Slicing of the DataFrame to get only the marks\n”, dfZuhaireMarks)

डेटाफ्रेम का स्लाइसिंग केवल अंक प्राप्त करने के लिए

Maths Science S.St Hindi Eng
3 20 17 22 24 19
4 23 15 21 25 15
5 22 18 19 23 13

>>> print(“Average of marks obtained by Zuhaire in all Unit Tests \n”, dfZuhaireMarks.
mean(axis=1))

ज़ुहैर द्वारा सभी यूनिट टेस्टों में प्राप्त किए गए अंकों का औसत
3 $\quad$ 20.4
4 $\quad$ 19.8
5 $\quad$ 19.0
dtype: float64

सोचें और विचार करें

उपरोक्त आउटपुट प्राप्त करने के लिए एक छोटा कोड लिखने का प्रयास करें। आउटपुट के प्रासंगिक शीर्षकों को प्रिंट करना याद रखें।

उपरोक्त आउटपुट में, 20.4 ज़ुहैर द्वारा यूनिट टेस्ट 1 में प्राप्त किए गए अंकों का औसत है। इसी प्रकार, 19.8 और 19.0 क्रमशः यूनिट टेस्ट 2 और 3 में प्राप्त अंकों का औसत हैं।

3.2.6 माध्यिका की गणना

DataFrame.Median() डेटा का मध्य मान प्रदर्शित करेगा। यह फ़ंक्शन डेटाफ्रेम के प्रत्येक कॉलम के मानों की माध्यिका प्रदर्शित करेगा। यह केवल संख्यात्मक मानों के लिए लागू है।

>>> print(df.median())

UT 2.5
Maths 19.0
Science 20.0
S.St 19.5
Hindi 21.5
Eng 21.0

dtype: float64

प्रोग्राम 3-7 यूटी1 में गणित की माध्यिका अंक प्रिंट करने के लिए कथन लिखें।

>>> dfMaths=df[‘Maths’]
>>> dfMathsUT1=dfMaths[df.UT==1]
>>> print(“Displaying the marks scored in Mathematics in UT1\n”,dfMathsUT1)

UT1, विषय गणित के अंक प्रदर्शित करना
0 $\quad$ 22
3 $\quad$ 20
6 $\quad$ 23
9 $\quad$ 15
Name: Maths, dtype: int64

>>> dfMathMedian=dfMathsUT1.median()
>>> print(“Displaying the median of Mathematics in UT1\n”,dfMathMedian)
UT1 में गणित की माध्यिका प्रदर्शित करना 21.0

गतिविधि 3.2

DataFrame की पंक्तियों के मानों की माध्यिका ज्ञात कीजिए।

यहाँ, मानों की संख्या सम है इसलिए दो मध्य मान हैं अर्थात् 20 और 22। अतः माध्यिका 20 और 22 का औसत है।

3.2.7 बहुलक की गणना

DateFrame.mode() बहुलक प्रदर्शित करेगा। बहुलक वह मान होता है जो डेटा में सबसे अधिक बार आता है। यह फ़ंक्शन DataFrame के प्रत्येक स्तंभ या पंक्ति का बहुलक प्रदर्शित करेगा। हिंदी के अंकों का बहुलक प्राप्त करने के लिए निम्नलिखित कथन का उपयोग किया जा सकता है।

>>> df[‘Hindi’]

0 $\quad$ 20
1 $\quad$ 22
2 $\quad$ 24
3 $\quad$ 24
4 $\quad$ 25
5 $\quad$ 23
6 $\quad$ 15
7 $\quad$ 17
8 $\quad$ 21
9 $\quad$ 22
10 $\quad$ 24
11 $\quad$ 25
Name: Hindi, dtype: int64

>>> df[‘Hindi’].mode()

0 $\quad$ 24
dtype: int64

गतिविधि 3.3

गणित में प्राप्त अंकों का बहुलक की गणना कीजिए

ध्यान दें कि हिंदी विषय में तीन विद्यार्थियों को 24 अंक मिले हैं जबकि दो विद्यार्थियों को 25 अंक, एक विद्यार्थी को 23 अंक, दो विद्यार्थियों को 22 अंक, एक-एक विद्यार्थी को 21, 20, 15, 17 अंक मिले हैं।

3.2.8 चतुर्थांश (Quartile) की गणना

Dataframe.quantile() चतुर्थांश प्राप्त करने के लिए प्रयोग किया जाता है। यह DataFrame के प्रत्येक स्तंभ या पंक्ति का चतुर्थांश चार भागों में देता है, अर्थात् पहला चतुर्थांश $25 %$ (पैरामीटर $\mathrm{q}=.25$), दूसरा चतुर्थांश $50 %$ (माध्यिका), तीसरा चतुर्थांश $75 %$ (पैरामीटर $\mathrm{q}=.75$) होता है। डिफ़ॉल्ट रूप से यह सभी संख्यात्मक मानों का दूसरा चतुर्थांश (माध्यिका) दिखाता है।

>>> df.quantile() # डिफ़ॉल्ट रूप से, माध्यिका आउटपुट होती है

UT $\quad$ 2.0
Maths $\quad$ 20.5
Science $\quad$ 19.5
S.St $\quad$ 20.0
Hindi $\quad$ 22.5
Eng $\quad$ 21.5
Name: 0.5, dtype: float64

>>> df.quantile(q=.25)

UT $\quad$ 1.00
Maths $\quad$ 16.50
Science $\quad$ 18.00
S.St $\quad$ 18.75
Hindi $\quad$ 20.75
Eng $\quad$ 19.75
Name: 0.25, dtype: float64

>>> df.quantile(q=.75)

UT $\quad$ 3.00
Maths $\quad$ 22.25
Science $\quad$ 21.25
S.St $\quad$ 22.50
Hindi $\quad$ 24.00
Eng $\quad$ 23.00
Name: 0.75, dtype: float64

प्रोग्राम 3-8 सभी विषयों के पहले और तीसरे चतुर्थांश को प्रदर्शित करने के लिए कथन लिखें।

>>> dfSubject=df[[‘Maths’,‘Science’,‘S.St’,‘Hindi’,‘Eng’]]
>>> print(“सभी विषयों के अंक:\n”,dfSubject)

सभी विषयों के अंक:

गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
0 22 21 18 20 21
1 21 20 17 22 24
2 14 19 15 24 23
3 20 17 22 24 19
4 23 15 21 25 15
5 22 18 19 23 13
6 23 19 20 15 22
7 24 22 24 17 21
8 12 25 19 21 23
9 15 22 25 22 22
10 18 21 25 24 23
11 17 18 20 25 20

>>> dfQ=dfSubject.quantile([.25,.75])
>>> print(“First and third quartiles of all the subjects:\n”,dfQ)

गतिविधि 3.4

निम्नलिखित परीक्षा अंकों का प्रसार और मानक विचलन ज्ञात कीजिए: $92,95,85$, 80, 75,50 . प्रोग्राम 3-8 सभी विषयों के प्रथम और तृतीय चतुर्थांश प्रदर्शित करने के लिए कथन लिखिए।

सभी विषयों के प्रथम और तृतीय चतुर्थांश:

गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
0.25 16.50 18.00 18.75 20.75 19.75
0.75 22.25 21.25 22.50 24.00 23.00

3.2.9 प्रसार की गणना

DataFrame.var() प्रसार प्रदर्शित करने के लिए प्रयोग किया जाता है। यह माध्य से वर्गित अंतरों का औसत होता है।

>>> df[[‘Maths’,‘Science’,‘S.
St’,‘Hindi’,‘Eng’]].var()

Maths $\quad$ 15.840909
Science $\quad$ 7.113636
S.St $\quad$ 9.901515
Hindi $\quad$ 9.969697
Eng $\quad$ 11.363636
dtype: float64

3.2.10 मानक विचलन की गणना

DataFrame.std() मानों का मानक विचलन लौटाता है। मानक विचलन को प्रसरण का वर्गमूल निकालकर गणना की जाती है।

>>> df[[‘Maths’,‘Science’,‘S.
St’,‘Hindi’,‘Eng’]].std()

Maths $\quad$ 3.980064
Science $\quad$ 2.667140$
S.St $\quad$ 3.146667$
Hindi $\quad$ 3.157483$
Eng $\quad$ 3.370999$
dtype: float 64

DataFrame.describe() फ़ंक्शन एक ही कमांड में वर्णनात्मक सांख्यिकीय मान प्रदर्शित करता है। ये मान हमें DataFrame में डेटा के समूह का वर्णन करने में मदद करते हैं।

>>> df.describe()

UT Maths Science S.St Hindi Eng
count 12.000000 12.000000 12.00000 12.000000 12.000000 12.000000
mean 2.000000 19.250000 19.75000 20.416667 21.833333 20.500000
std 0.852803 3.980064 2.66714 3.146667 3.157483 3.370999
min 1.000000 12.000000 15.00000 15.000000 15.000000 13.000000
258 1.000000 16.500000 18.00000 18.750000 20.750000 19.750000
508 2.000000 20.500000 19.50000 20.000000 22.500000 21.500000
758 3.000000 22.250000 21.25000 22.500000 24.000000 23.000000
max 3.000000 24.000000 25.00000 25.000000 25.000000 24.000000

3.3 डेटा एकत्रीकरण

एग्रीगेशन का अर्थ है डेटासेट को ट्रांसफॉर्म करना और एक ऐरे से एकल संख्यात्मक मान उत्पन्न करना। एग्रीगेशन को एक या एक से अधिक कॉलमों पर एक साथ लागू किया जा सकता है। एग्रीगेट फ़ंक्शन हैं $\max (), \min (), \operatorname{sum}()$, count(), std(), var()।

>>> df.aggregate(‘max’)

Name Zuhaire # Name का अधिकतम भी प्रदर्शित कर रहा है

UT $\quad$ 3
Maths $\quad$ 24
Science $\quad$ 25
S.St $\quad$ 25
Hindi $\quad$ 25
Eng $\quad$ 24
dtype: object

#एक ही स्टेटमेंट में कई एग्रीगेट फ़ंक्शन का उपयोग करने के लिए
>>> df.aggregate([‘max’,‘count’])

Name UT Maths Science S.St Hindi Eng
max Zuhaire 3 24 25 25 25 24
count 12 12 12 12 12 12 12

>>> df[‘Maths’].aggregate([‘max’,‘min’])

max $\quad$ 24
min $\quad$ 12
Name: Maths, dtype: int64

नोट: हम एग्रीगेट फ़ंक्शन के साथ पैरामीटर axis का भी उपयोग कर सकते हैं। डिफ़ॉल्ट रूप से, axis का मान शून्य होता है, अर्थात् कॉलम।

#उपरोक्त स्टेटमेंट को axis=0 के साथ उपयोग करने पर वही परिणाम मिलता है
>>> df[‘Maths’].aggregate([‘max’,‘min’],axis=0)

max $\quad$ 24
min $\quad$ 12
Name: Maths, dtype: int64

#प्रत्येक छात्र द्वारा प्राप्त किए गए Maths और Science के कुल अंक।
#sum() का उपयोग axis=1 के साथ (पंक्ति-वार योग)
>>> df[[‘Maths’,‘Science’]].aggregate(‘sum’,axis=1)

0 $\quad$ 43
1 $\quad$ 41
2 $\quad$ 33
3 $\quad$ 37
4 $\quad$ 38
5 $\quad$ 40
6 $\quad$ 42
7 $\quad$ 46
8 $\quad$ 37
9 $\quad$ 37
10 $\quad$ 39
11 $\quad$ 35
dtype: int64

3.4 DataFrame को सॉर्ट करना

सॉर्टिंग का अर्थ है डेटा तत्वों को एक निर्धारित क्रम में व्यवस्थित करना, जो या तथा आरोही (ascending) या अवरोही (descending) हो सकता है। Pandas DataFrame के डेटा मानों को सॉर्ट करने के लिए sort_values() फ़ंक्शन प्रदान करता है। इस फ़ंक्शन की सिंटैक्स इस प्रकार है:

DataFrame.sort_values(by, axis $=0$, ascending=True)

यहाँ, एक कॉलम सूची (by), एक्सिस आर्गुमेंट्स (पंक्तियों के लिए 0 और स्तंभों के लिए 1) और सॉर्टिंग का क्रम (ascending $=$ False या True) आर्गुमेंट्स के रूप में पास किए जाते हैं। डिफ़ॉल्ट रूप से, सॉर्टिंग पंक्ति इंडेक्स पर आरोही क्रम में की जाती है।

एक परिदृश्य पर विचार करें, जहाँ शिक्षक छात्रों के नामों के अनुसार या किसी विशेष विषय में प्राप्त अंकों के अनुसार सूची को व्यवस्थित करने में रुचि रखता है। ऐसे मामलों में, सॉर्टिंग का उपयोग कर वांछित परिणाम प्राप्त किए जा सकते हैं। निम्नलिखित Python कोड प्रोग्राम 3.1 में बनाए गए DataFrame में डेटा को सॉर्ट करने के लिए है।

संपूर्ण डेटा को विशेषता ‘Name’ के आधार पर सॉर्ट करने के लिए, हम निम्नलिखित कमांड का उपयोग करते हैं:

#डिफ़ॉल्ट रूप से, सॉर्टिंग आरोही क्रम में की जाती है।
>>> print(df.sort_values(by=[‘Name’]))

नाम यूटी गणित विज्ञान स.व. हिंदी अंग्रेज़ी
6 अश्रव्य 1 23 19 20 15 22
7 अश्रव्य 2 24 22 24 17 21
8 अश्रव्य 3 12 25 19 21 23
9 मिश्ती 1 15 22 25 22 22
10 मिश्ती 2 18 21 25 24 23
11 मिश्ती 3 17 18 20 25 20
0 रमन 1 22 21 18 20 21
1 रमन 2 21 20 17 22 24
2 रमन 3 14 19 15 24 23
3 ज़ुहैरे 1 20 17 22 24 19
4 ज़ुहैरे 2 23 15 21 25 15
5 ज़ुहैरे 3 22 18 19 23 13

अब, यूनिट टेस्ट 2 में सभी विद्यार्थियों द्वारा विज्ञान में प्राप्त किए गए अंकों की क्रमबद्ध सूची प्राप्त करने के लिए निम्नलिखित कोड का उपयोग किया जा सकता है:

# यूनिट टेस्ट 2 से संबंधित डेटा प्राप्त करें
>>> dfUT2 = df[df.UT == 2]
# विज्ञान में प्राप्त अंकों के आरोही क्रम के अनुसार क्रमबद्ध करें
>>> print(dfUT2.sort_values(by=[‘Science’]))

नाम यूटी गणित विज्ञान स.व. हिंदी अंग्रेज़ी
4 ज़ुहैरे 2 23 15 21 25 15
1 रमन 2 21 20 17 22 24
10 मिश्ती 2 18 21 25 24 23
7 अश्रव्य 2 24 22 24 17 21

प्रोग्राम 3-9 वह कथन लिखें जो डेटाफ्रेम df में यूनिट टेस्ट 3 के आधार पर अंग्रेज़ी में प्राप्त अंकों को अवरोही क्रम में क्रमबद्ध करेगा।

# यूनिट टेस्ट 3 से संबंधित डेटा प्राप्त करें » dfUT3 $=$ df[df.UT == 3]
# विज्ञान में अंकों के अवरोही क्रम के अनुसार क्रमबद्ध करें
>>> print(dfUT3.sort_values(by=[‘Eng’], ascending=F alse ) )

Name UT Maths Science S.St Hindi Eng
2 Raman 3 14 19 15 24 23
8 Ashravy 3 12 25 19 21 23
11 Mishti 3 17 18 20 25 20
5 Zuhaire 3 22 18 19 23 13

एक DataFrame को एक से अधिक कॉलमों के आधार पर क्रमबद्ध किया जा सकता है। निम्नलिखित कोड यूनिट टेस्ट 3 में विज्ञान के अंकों के आधार पर DataFrame df को आरोही क्रम में क्रमबद्ध करने के लिए है। यदि विज्ञान में अंक समान हैं, तो क्रमबद्ध करना हिंदी के अंकों के आधार पर किया जाएगा।

# यूनिट टेस्ट 3 में अंकों से संबंधित डेटा प्राप्त करें
>>> dfUT3 = df[df.UT == 3]
# डेटा को विज्ञान के अनुसार और फिर हिंदी के अनुसार क्रमबद्ध करें
>>> print(dfUT3.sort_values(by=[‘Science’,‘Hindi’]))

Name UT Maths Science S.St Hindi Eng
5 Zuhaire 3 22 18 19 23 13
11 Mishti 3 17 18 20 25 20
2 Raman 3 14 19 15 24 23
8 Ashravy 3 12 25 19 21 23

यहाँ, हम देख सकते हैं कि सूची को विज्ञान के अंकों के आधार पर क्रमबद्ध किया गया है। दो छात्र, जिनमें Zuhaire और Mishti हैं, के विज्ञान में समान अंक (18) हैं। इसलिए उनके लिए क्रमबद्ध करना हिंदी के अंकों के आधार पर किया गया है।

3.5 GROUP BY फ़ंक्शन

pandas में, DataFrame.GROUP BY() फ़ंक्शन का उपयोग डेटा को किसी मानदंड के आधार पर समूहों में विभाजित करने के लिए किया जाता है। pandas के ऑब्जेक्ट्स जैसे DataFrame को उनके किसी भी एक्सिस पर विभाजित किया जा सकता है। GROUP BY फ़ंक्शन split-apply-combine रणनीति पर काम करता है जो नीचे 3-चरणीय प्रक्रिया के रूप में दिखाया गया है:

चरण 1: मूल DataFrame से GROUP BY ऑब्जेक्ट बनाकर डेटा को समूहों में विभाजित करें।

चरण 2: आवश्यक फ़ंक्शन लागू करें।

चरण 3: परिणामों को मिलाकर एक नया DataFrame बनाएं।

इसे बेहतर समझने के लिए, आइए नीचे दिए गए चित्र में दि�ाए गए डेटा पर विचार करें। यहाँ हमारे पास दो-स्तंभ वाला DataFrame है (key, data)। हमें एक विशेष key के लिए data स्तंभ का योग निकालना है, अर्थात् key A, B और C के सभी data तत्वों का योग। ऐसा करने के लिए, हम पहले पूरे DataFrame को key स्तंभ के आधार पर समूहों में विभाजित करते हैं। फिर हम संबंधित समूहों पर sum फ़ंक्शन लागू करते हैं। अंत में, हम परिणामों को मिलाकर एक नया DataFrame बनाते हैं जिसमें वांछित परिणाम होता है।

चित्र 3.1: दो स्तंभों वाला DataFrame

निम्नलिखित कथन दिखाते हैं कि Program 3.1 में बनाए गए DataFrame df पर GROUP BY() फ़ंक्शन कैसे लागू करें:

#DataFrame df से GROUP BY Name of the student बनाएं
>>> g1=df.GROUP BY(‘Name’)
#प्रत्येक समूह से पहली प्रविष्टि प्रदर्शित करना
>>> g1.first()

नाम यूटी गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
अश्रव्य 1 23 19 20 15 22
मिश्ती 1 15 22 25 22 22
रमन 1 22 21 18 20 21
ज़ुहैरे 1 20 17 22 24 19

#प्रत्येक समूह का आकार दिखाना
>>> g1.size()

नाम
अश्रव्य 3
मिश्ती 3
रमन 3
ज़ुहैरे 3

dtype: int64


#समूह डेटा दिखाना, अर्थात् समूह_नाम, समूह से संबंधित पंक्ति अनुक्रमणिकाएँ और उनका डेटा प्रकार
>>> g1.groups
{‘अश्रव्य’: Int64Index([6, 7, 8],
dtype=‘int64’),
‘मिश्ती’: Int64Index([9, 10, 11],
dtype=‘int64’),
‘रमन’: Int64Index([0, 1, 2], dtype=‘int64’),
‘ज़ुहैरे’: Int64Index([3, 4, 5],
dtype=‘int64’)}

#एकल समूह का डेटा प्रिंट करना
>>> g1.get_group(‘रमन’)

यूटी गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
0 1 22 21 18 20 21
1 2 21 20 17 22 24
2 3 14 19 15 24 23

#एकाधिक गुणों के आधार पर समूहन
#नाम और यूटी के अनुसार GROUP BY बनाना
>>> g2=df.GROUP BY([‘Name’, ‘UT’])
>>> g2.first()

गणित विज्ञान सामाजिक विज्ञान हिन्दी अंग्रेज़ी
नाम यूटी
अश्रव्य 1 23 19 20 15 22
2 24 22 24 17 21
3 12 25 19 21 23
मिश्ती 1 15 22 25 22 22
2 18 21 25 24 23
रमन 3 17 18 20 25 20
1 22 21 18 20 21
2 21 20 17 22 24
ज़ुहैरे 3 14 19 15 24 23
1 20 17 22 24 19
2 23 15 21 25 15
3 22 18 19 23 13

उपरोक्त कथन दिखाते हैं कि हम GROUP BY() का उपयोग करके एक DataFrame को विभाजित करके समूह कैसे बनाते हैं। अगला चरण बनाए गए समूहों पर फलन लागू करना है। यह Aggregation द्वारा किया जाता है।

Aggregation एक प्रक्रिया है जिसमें GROUP BY() द्वारा बनाए गए प्रत्येक समूह पर एक समष्टि फलन लागू किया जाता है। यह प्रत्येक समूह के अनुरूप एक एकल समष्टि सांख्यिकीय मान लौटाता है। इसका उपयोग किसी अक्ष पर एकाधिक फलन लागू करने के लिए किया जा सकता है। डिफ़ॉल्ट रूप से, फलन स्तंभों पर लागू होते हैं। Aggregation agg() या aggregate() फलन का उपयोग करके किया जा सकता है।

#प्रत्येक यूटी के लिए प्रत्येक विषय में सभी विद्यार्थियों द्वारा प्राप्त औसत अंकों की गणना करना
>>> df.GROUP BY([‘UT’]).aggregate(‘mean’)

गणित विज्ञान सामाजिक विज्ञान हिन्दी अंग्रेज़ी
यूटी
1 20.00 19.75 21.25 20.25 21.00
2 21.50 19.50 21.75 22.00 20.75
3 16.25 20.00 18.25 23.25 19.75

#प्रत्येक यूटी में गणित में प्राप्त औसत अंकों की गणना करें
>>> group1=df.GROUP BY([‘UT’])
>>> group1[‘Maths’].aggregate(‘mean’)

यूटी
1 20.00
2 21.50
3 16.25

Name: Maths, dtype: float64

गतिविधि 3.5

प्रत्येक यूटी में सभी विद्यार्थियों द्वारा विज्ञान में प्राप्त औसत अंक प्रिंट करने के लिए पायथन कथन लिखें।

प्रोग्राम 3-10 प्रत्येक विद्यार्थी द्वारा सभी यूटी में गणित में प्राप्त अंकों का माध्य, प्रसरण, मानक विचलन और चतुर्थक प्रिंट करने के लिए पायथन कथन लिखें।

>>> df.GROUP BY(by=‘Name’)[‘Maths’].agg([‘mean’,‘var’,‘std’,‘quantile’])

माध्य प्रसरण मानक विचलन चतुर्थक
नाम
अश्रव्य 19.666667 44.333333 6.658328 23.0
मिश्ती 16.666667 2.333333 1.527525 17.0
रमन 19.000000 19.000000 4.358899 21.0
ज़ुहैरे 21.666667 2.333333 1.527525 22.0

3.6 इंडेक्स को बदलना

हम DataFrame के तत्वों तक पहुँचने के लिए इंडेक्सिंग का उपयोग करते हैं। यह डेटा को तेज़ी से पुनःप्राप्त करने के लिए प्रयोग होता है। डिफ़ॉल्ट रूप से, 0 से शुरू होने वाला एक संख्यात्मक इंडेक्स पंक्ति इंडेक्स के रूप में बनाया जाता है, जैसा नीचे दिखाया गया है:

>>> df #डिफ़ॉल्ट इंडेक्स के साथ

नाम यूटी गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
0 रमन 1 22 21 18 20 21
1 रमन 2 21 20 17 22 24
2 रमन 3 14 19 15 24 23
3 ज़ुहैर 1 20 17 22 24 19
4 ज़ुहैर 2 23 15 21 25 15
5 ज़ुहैर 3 22 18 19 23 13
6 अश्रव्य 1 23 19 20 15 22
7 अश्रव्य 2 24 22 24 17 21
8 अश्रव्य 3 12 25 19 21 23
9 मिश्ती 1 15 22 25 22 22
10 मिश्ती 2 18 21 25 24 23
11 मिश्ती 3 17 18 20 25 20

यहाँ, पहले कॉलम में 0 से शुरू होने वाली पूर्ण संख्या इंडेक्स है। हालाँकि, हमारी आवश्यकताओं के अनुसार हम किसी अन्य कॉलम को इंडेक्स चुन सकते हैं या हम एक और इंडेक्स कॉलम जोड़ सकते हैं।

जब हम डेटा को स्लाइस करते हैं, तो हमें मूल इंडेक्स मिलता है जो लगातार नहीं होता, उदाहरण के लिए जब हम यूनिट टेस्ट 1 में सभी छात्रों के अंक चुनते हैं, तो हमें निम्नलिखित परिणाम मिलता है:

>>> dfUT1 = df[df.UT == 1]
>>> print(dfUT1)

नाम यूटी गणित विज्ञान स.वि हिंदी अंग्रेज़ी
0 रमन 1 22 21 18 20 21
3 ज़ुहैर 1 20 17 22 24 19
6 अश्रव्य 1 23 19 20 15 22
9 मिश्टी 1 15 22 25 22 22

ध्यान दें कि पहला स्तंभ एक असतत अनुक्रमणिका है क्योंकि यह मूल डेटा का स्लाइस है। हम इसके साथ-साथ reset_index() फ़ंक्शन का उपयोग करके एक नई सतत अनुक्रमणिका बनाते हैं, जैसा कि नीचे दिखाया गया है:

>>> dfUT1.reset_index(inplace=True)
>>> print(dfUT1)

अनुक्रमणिका नाम यूटी गणित विज्ञान स.वि हिंदी अंग्रेज़ी
0 0 रमन 1 22 21 18 20 21
1 3 ज़ुहैर 1 20 17 22 24 19
2 6 अश्रव्य 1 23 19 20 15 22
3 9 मिश्टी 1 15 22 25 22 22

एक नई सतत अनुक्रमणिका बनाई गई है जबकि मूल अनुक्रमणिका भी बरकरार है। हम मूल अनुक्रमणिका को drop फ़ंक्शन का उपयोग करके हटा सकते हैं, जैसा कि नीचे दिखाया गया है:

>>> dfUT1.drop(columns=[‘index’],inplace=True)
>>> print(dfUT1)

नाम यूटी गणित विज्ञान स.वि हिंदी अंग्रेज़ी
0 रमन 1 22 21 18 20 21
1 ज़ुहैर 1 20 17 22 24 19
2 अश्रव्य 1 23 19 20 15 22
3 मिश्टी 1 15 22 25 22 22

हम डेटा के किसी अन्य कॉलम को इंडेक्स बना सकते हैं।

>>> dfUT1.set_index(‘Name’,inplace=True)
>>> print(dfUT1)

UT Maths Science S.St Hindi Eng
Name
Raman 1 22 21 18 20 21
Zuhaire 1 20 17 22 24 19
Ashravy 1 23 19 20 15 22
Mishti 1 15 22 25 22 22

हम पिछले इंडेक्स पर वापस निम्नलिखित कथन का उपयोग करके लौट सकते हैं:

>>> dfUT1.reset_index(‘Name’, inplace = True)
>>> print(dfUT1)

Name UT Maths Science S.St Hindi Eng
0 Raman 1 22 21 18 20 21
1 Zuhaire 1 20 17 22 24 19
2 Ashravy 1 23 19 20 15 22
3 Mishti 1 15 22 25 22 22

3.7 अन्य डेटाफ्रेम संचालन

इस खंड में, हम अधिक तकनीकों और फंक्शनों को सीखेंगे जिनका उपयोग डेटाफ्रेम में डेटा को नियंत्रित और विश्लेषण करने के लिए किया जा सकता है।

3.7.1 डेटा को पुनः आकार देना

डेटासेट को पंक्तियों और स्तंभों में जिस तरह व्यवस्थित किया जाता है, उसे डेटा का आकार कहा जाता है। डेटा को पुनः आकार देना उस प्रक्रिया को संदर्भित करता है जिसमें डेटासेट के आकार को बदला जाता है ताकि यह किसी विश्लेषण समस्या के लिए उपयुक्त हो सके। नीचे दिए गए खंड में दिया गया उदाहरण डेटा को पुनः आकार देने की उपयोगिता को समझाता है।

डेटा को पुनः आकार देने के लिए, Pandas में दो बुनियादी फंक्शन उपलब्ध हैं, pivot और pivot_table। यह खंड उन्हें विस्तार से कवर करता है।

(A) पिवोट

पिवट फंक्शन का उपयोग मूल डेटाफ्रेम को पुनः आकार देने और एक नया डेटाफ्रेम बनाने के लिए किया जाता है। निम्नलिखित उदाहरण पर विचार करें जिसमें चार स्टोरों S1, S2, S3 और S4 की वर्ष 2016, 2017 और 2018 की बिक्री और लाभ का डेटा दिया गया है:

उदाहरण 3.1

>>> import pandas as pd
>>>data={‘Store’:[‘S1’,‘S4’,‘S3’,‘S1’,‘S2’,‘S3’,‘S1’,‘S2’,‘S3’],‘Year’:[2016,2016,2016,2017,2017,2017,2018,2018,2018],
‘Total_sales(Rs)’:[12000,330000,420000,20000,10000,450000,30000, 11000,89000],
‘Total_profit(Rs)’:[1100,5500,21000,32000,9000,45000,3000, 1900,23000]
}

>>> df=pd.DataFrame(data)
>>> print(df)

Store Year Total_sales(Rs) Total_profit(Rs)
0 S1 2016 12000 1100
1 S4 2016 330000 5500
2 S3 2016 420000 21000
3 S1 2017 20000 32000
4 S2 2017 10000 9000
5 S3 2017 450000 45000
6 S1 2018 30000 3000
7 S2 2018 11000 1900
8 S3 2018 89000 23000

आइए उपरोक्त डेटा पर निम्नलिखित प्रश्नों के उत्तर खोजने का प्रयास करें।

  1. स्टोर S1 की सभी वर्षों में कुल बिक्री क्या थी? इस कार्य को करने के लिए Python कथन इस प्रकार होंगे:

# स्टोर S1 से संबंधित डेटा प्राप्त करेगा
>>> S1df = df[df.Store==’S1’]
#स्टोर S1 की बिक्री का योग निकालेगा
>>> S1df[‘Total_sales(Rs)’].sum()
62000

  1. किसी भी वर्ष में स्टोर S3 द्वारा अधिकतम बिक्री मान क्या है?

#स्टोर S3 से संबंधित डेटा प्राप्त करेगा
>>> S3df = df[df.Store==’S3’]
#स्टोर S3 के लिए अधिकतम बिक्री खोजें
>>> S3df[‘Total_sales(Rs)’].max()\ 450000

  1. सभी वर्षों में किस स्टोर की कुल बिक्री अधिकतम थी?

>>> S1df = df[df.Store==‘S1’]
>>> S2df=df[df.Store == ‘S2’]
>>> S3df = df[df.Store==‘S3’]
>>> S4df = df[df.Store==‘S4’]
>>> S1total = S1df[‘Total_sales(Rs)’].sum()
>>> S2total = S2df[‘Total_sales(Rs)’].sum()
$\quad$ >>> S3total = S3df[‘Total_sales(Rs)’].sum()
$\quad$ >>> S4total = S4df[‘Total_sales(Rs)’].sum()
>>> max(S1total,S2total,S3total,S4total)
959000

ध्यान दें कि हमें एक विशेष स्टोर के अनुरूप डेटा को स्लाइस करना होता है और फर क्वेरी का उत्तर देना होता है। अब, आइए डेटा को पिवोट का उपयोग करके रीशेप करें और अंतर देखें।

>>>pivot1=df.pivot(index=‘Store’,columns=‘Year’,va lues=‘Total_sales(Rs)’)

यहाँ, Index उन कॉलम को निर्दिष्ट करता है जो पिवोट टेबल में इंडेक्स के रूप में कार्य करेंगे, columns पिवोट किए गए डेटा के लिए नए कॉलम निर्दिष्ट करता है और values उन कॉलम को निर्दिष्ट करता है जिनके मान प्रदर्शित किए जाएंगे। इस विशेष मामले में, स्टोर के नाम इंडेक्स के रूप में कार्य करेंगे, वर्ष कॉलम के हेडर होंगे और बिक्री मान पिवोट टेबल के मानों के रूप में प्रदर्शित होंगे।

>>> print(pivot1)

Year 2016 2017 2018
Store
S1 12000.0 20000.0 30000.0
S2 NaN 10000.0 11000.0
S3 420000.0 450000.0 89000.0
S4 330000.0 NaN NaN

जैसा कि ऊपर देखा जा सकता है, मूल तालिका में प्रत्येक पंक्ति के Total_sales (Rs) का मान नई तालिका pivot1 में स्थानांतरित कर दिया गया है, जहाँ प्रत्येक पंक्ति में एक स्टोर का डेटा होता है और प्रत्येक स्तंभ में एक वर्ष का डेटा होता है। नई पिवट तालिका में उन कोशिकाओं को NaN से भरा जाता है जिनका मूल तालिका में कोई मिलान नहीं होता है। उदाहरण के लिए, हमारे पास 2016 में स्टोर S2 की बिक्री से संबंधित कोई मान नहीं था, इसलिए pivot1 में संबंधित कोशिका NaN से भरी गई है।

अब उपरोक्त प्रश्नों के लिए Python कथन इस प्रकार होंगे:

  1. स्टोर S1 की सभी वर्षों में कुल बिक्री क्या थी?

>>> pivot1.loc[‘S1’].sum()

  1. किसी भी वर्ष में स्टोर S3 द्वारा अधिकतम बिक्री मान क्या है?

>>> pivot1.loc[‘S3’].max()

  1. किस स्टोर की अधिकतम कुल बिक्री थी?

>>> S1total = pivot1.loc[‘S1’].sum()
>>> S2total = pivot1.loc[‘S2’].sum()
>>> S3total = pivot1.loc[‘S3’].sum()
>>> S4total = pivot1.loc[‘S4’].sum()
>>> max(S1total,S2total,S3total,S4total)

गतिविधि 3.6

कार्यक्रम 3.1 में दिए गए इकाई परीक्षा के अंकों के डेटा को ध्यान में रखते हुए, गणित में नामवार UT अंक प्रिंट करने के लिए Python कथन लिखें।

हम देख सकते हैं कि रीशेपिंग ने डेटा की संरचना को बदल दिया है, जिससे यह अधिक पठनीय हो गया है और डेटा का विश्लेषण करना आसान हो गया है।

(B) एकाधिक स्तंभों द्वारा पिवोटिंग

एकाधिक कॉलमों द्वारा पिवोट करने के लिए, हमें pivot() फ़ंक्शन के values पैरामीटर में एकाधिक कॉलम नाम निर्दिष्ट करने होते हैं। यदि हम values पैरामीटर को छोड़ देते हैं, तो यह सभी संख्यात्मक मानों के लिए पिवोटिंग प्रदर्शित करेगा।

_>>>pivot2=df.pivot(index=‘Store’,columns=‘Year’,values=[‘Total_sales(Rs)’,‘Total_profit(Rs)’])
>>> print(pivot2) _

Total_sales(Rs) Total_profit(Rs)
Year 2016 2017 2018 2016 2017 2018
Store
S1 12000.0 20000.0 30000.0 1100.0 32000.0 3000.0
S2 NaN 10000.0 11000.0 NaN 9000.0 1900.0
S3 330000.0 NaN NaN 5500.0 NaN NaN

आइए एक अन्य उदाहरण पर विचार करें, जहाँ मान लीजिए हमारे पास किसी स्टोर के संगत स्टॉक डेटा है:

>>> data={‘Item’:[‘Pen’,‘Pen’,‘Pencil’,‘Pencil’,‘Pen’,‘Pen’],
‘Color’:[‘Red’,‘Red’,‘Black’,‘Black’,‘Blue’,‘Blue’]‘Price(Rs)’:[10,25,7,5,50,20],
‘Units_in_stock’:[50,10,47,34,55,14]}
>>> df=pd.DataFrame(data)
>>> print(df)

Item Color Price(Rs) Units_in_stock
0 Pen Red 10 50
1 Pen Red 25 10
2 Pencil Black 7 47
3 Pencil Black 5 34
4 Pen Blue 50 55
5 Pen Blue 20 14

अब, मान लीजिए हमें उपरोक्त तालिका को Item को इंडेक्स और Color को कॉलम बनाकर पुनः आकार देना है। हम नीचे दिए गए अनुसार pivot फंक्शन का उपयोग करेंगे:

>>>pivot3=df.pivot(index=‘Item’,columns=‘Color’,values=‘Units_in_stock’)

लेकिन यह कथन एक त्रुटि देता है: “ValueError: Index contains duplicate entries, cannot reshape”। ऐसा इसलिए है क्योंकि डुप्लिकेट डेटा को pivot फंक्शन का उपयोग करके पुनः आकार नहीं दिया जा सकता। इसलिए, pivot() फंक्शन को कॉल करने से पहले, हमें यह सुनिश्चित करना होगा कि हमारे डेटा में निर्दिष्ट कॉलमों के लिए डुप्लिकेट मानों वाली पंक्तियाँ नहीं हैं। यदि हम यह सुनिश्चित नहीं कर सकते, तो हमें pivot_table फंक्शन का उपयोग करना पड़ सकता है।

(C) पिवोट टेबल

यह pivot फंक्शन की तरह काम करता है, लेकिन निर्दिष्ट कॉलमों के लिए डुप्लिकेट प्रविष्टियों वाली पंक्तियों के मानों को समेकित करता है। दूसरे शब्दों में, हम समेकन फंक्शन जैसे min, max, mean आदि का उपयोग कर सकते हैं, जहाँ भी हमारे पास डुप्लिकेट प्रविष्टियाँ हैं। डिफ़ॉल्ट समेकन फंक्शन mean है।

सिंटैक्स:

pandas.pivot_table(data, values=None,
index=None, columns=None, aggfunc=‘mean’)

पैरामीटर aggfunc के पास मान हो सकते हैं sum, max, min, len, np.mean, np.median के बीच।

हम एक से अधिक कॉलमों पर इंडेक्स लागू कर सकते हैं यदि हमारे पास इंडेक्स के रूप में कार्य करने के लिए कोई अद्वितीय कॉलम नहीं है।

>>> df1 = df.pivot_table(index=[‘Item’,‘Color’])
>>> print(df1)

Price(Rs) Units_in_stock
Item Color
Pen Blue 35.0 34.5
Red 17.5 30.0
Pencil Black 6.0 40.5

कृपया ध्यान दें कि माध्य (mean) को डिफ़ॉल्ट एकत्रीकरण फ़ंक्शन के रूप में इस्तेमाल किया गया है। मूल डेटा में नीले पेन की कीमत 50 और 20 है। एकत्रीकरण के रूप में माध्य का उपयोग किया गया है और df1 में नीले पेन की कीमत 35 है।

हम डेटा पर एक से अधिक एकत्रीकरण फ़ंक्शन का उपयोग कर सकते हैं। नीचे दिया गया उदाहरण sum, max और np.mean फ़ंक्शन के उपयोग को दर्शाता है।

>>>pivot_table1=df.pivot_table(index=‘Item’,columns=‘Color’,values=‘Units_in_stock’,aggfunc=[sum,max,np.mean])
>>> pivot_table1

sum max mean
Color Black Blue Red Black Blue Red Black Blue Red
Item
Pen NaN 69.0 60.0 NaN 55.0 50.0 NaN 34.5 30.0
Pencil 81.0 NaN NaN 47.0 NaN NaN 40.5 NaN NaN

पिवोटिंग कई कॉलम पर भी की जा सकती है। इसके अलावा, विभिन्न कॉलम पर विभिन्न एकत्रीकरण फ़ंक्शन लागू किए जा सकते हैं। निम्नलिखित उदाहरण दो कॉलम - Price(Rs) और Units_in_stock पर पिवोटिंग को प्रदर्शित करता है। साथ ही, कॉलम Price(Rs) पर len() फ़ंक्शन और कॉलम Units_in_stock पर mean() फ़ंक्शन के अनुप्रयोग को उदाहरण में दिखाया गया है। ध्यान दें कि एकत्रीकरण फ़ंक्शन len उस प्रविष्टि के अनुरूप पंक्तियों की संख्या लौटाता है।

>>>pivot_table1=df.pivot_table(index=‘Item’,columns=‘Color’,values=[‘Price(Rs)’,‘Units_in_stock’],aggfunc={“Price(Rs)":len,“Units_in_stock”:np.mean})

>>> pivot_table1

मूल्य (रु.) स्टॉक_में_इकाइयाँ
रंग काला नीला लाल काला नीला लाल
वस्तु
पेन NaN 2.0 2.0 NaN 34.5 30.0
पेंसिल 2.0 NaN NaN 40.5 NaN NaN

प्रोग्राम 3-11 प्रत्येक रंग के पेन का अधिकतम मूल्य प्रिंट करने के लिए कथन लिखिए।

>>>dfpen=df[df.Item==‘Pen’]
>>>pivot_redpen=dfpen.pivot_table(index=‘Item’,columns=[‘Color’],values=[‘Price(Rs)’],aggfunc=[max])
>>>print(pivot_redpen)

max
मूल्य (रु.)
रंग नीला लाल
वस्तु
पेन 50 25

3.8 लापता मानों को संभालना

जैसा कि हम जानते हैं कि एक डेटाफ्रेम में कई पंक्तियाँ (ऑब्जेक्ट्स) हो सकती हैं जहाँ प्रत्येक पंक्ति विभिन्न स्तंभों (गुणों) के लिए मान रख सकती है। यदि किसी स्तंभ के लिए संगत मान मौजूद नहीं है, तो उसे लापता मान माना जाता है। एक लापता मान $\mathrm{NaN}$ द्वारा दर्शाया जाता है।

वास्तविक दुनिया के डेटासेट में, किसी ऑब्जेक्ट के कुछ गुणों के लापता होना सामान्य बात है। इसके कई कारण हो सकते हैं। कुछ मामलों में, डेटा ठीक से एकत्र नहीं किया गया जिससे डेटा लापता हुआ, उदाहरण के लिए कुछ लोगों ने सर्वे लेते समय सभी फ़ील्ड नहीं भरे। कभी-कभी, कुछ गुण सभी के लिए प्रासंगिक नहीं होते। उदाहरण के लिए, यदि कोई व्यक्ति बेरोज़गार है तो वेतन गुण अप्रासंगिक होगा और इसलिए उसे भरा नहीं गया होगा।

लापता मान डेटा विश्लेषण के दौरान बहुत सी समस्याएँ पैदा करते हैं और इन्हें ठीक से संभालना पड़ता है। इस खंड में समझाए गए लापता मानों से निपटने की दो सबसे सामान्य रणनीतियाँ हैं:

i) जिस वस्तु में लापता मान हों उसे हटा दें,

ii) लापता मान को भरें या अनुमान लगाएँ

आइए पिछले केस स्टडी को टेबल 3.1 में देखें। मान लीजिए, छात्र अब यूनिट टेस्ट 4 में भी शामिल हो चुके हैं। पर रामन विज्ञान, गणित और अंग्रेज़ी की परीक्षाओं में शामिल नहीं हो सका, और मान लीजिए पुनः परीक्षा की कोई संभावना नहीं है। इसलिए इन विषयों के अनुरूप उसके द्वारा प्राप्त अंक लापता होंगे। यूनिट टेस्ट 4 के बाद का डेटासेट टेबल 3.2 में दिखाया गया है। ध्यान दें कि विशेषताएँ ‘Science’, ‘Maths’ और ‘English’ में रामन के लिए यूनिट टेस्ट 4 में लापता मान हैं।

Table 3.2 Case study data after UT4

परिणाम
नाम/विषय यूनिट टेस्ट गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
रमन 1 22 21 18 20 21
रमन 2 21 20 17 22 24
रमन 3 14 19 15 24 23
रमन 4 19 18
ज़ुहैर 1 20 17 22 24 19
ज़ुहैर 2 23 15 21 25 15
ज़ुहैर 3 22 18 19 23 13
ज़ुहैर 4 19 20 17 19 16
आश्रव्य 1 23 19 20 15 22
आश्रव्य 2 24 22 24 17 21
आश्रव्य 3 12 25 19 21 23
आश्रव्य 4 15 20 20 20 17
मिश्ती 1 15 22 25 22 22
मिश्ती 2 18 21 25 24 23
मिश्ती 3 17 18 20 25 20
मिश्ती 4 14 20 19 20 18

अंतिम परिणाम की गणना करने के लिए, शिक्षकों को सभी छात्रों द्वारा प्राप्त अंकों का प्रतिशत जमा करने को कहा गया है। रमन के मामले में, गणित शिक्षक 3 टेस्टों में प्राप्त अंकों की गणना करती है और फिर 75 अंकों के कुल स्कोर से प्रतिशत निकालती है। एक तरह से, वह यूनिट टेस्ट 4 के अंकों को छोड़ने का निर्णय लेती है। हालांकि, अंग्रेज़ी शिक्षक रमन को चौथे टेस्ट में वही अंक देने का निर्णय लेती है जो तीसरे टेस्ट में प्राप्त किए थे। विज्ञान शिक्षक रमन को चौथे टेस्ट में शून्य अंक देने का निर्णय लेती है और फिर प्राप्त अंकों का प्रतिशत निकालती है। निम्न खंड लापता मानों की जांच के लिए कोड और उन लापता मानों को उपयुक्त मानों से प्रतिस्थापित करने के लिए कोड की व्याख्या करते हैं।

3.8.1 लापता मानों की जाँच करना

Pandas एक isnull() फ़ंक्शन प्रदान करता है जिससे यह जाँचा जा सकता है कि DataFrame में कोई मान लापता है या नहीं। यह फ़ंक्शन सभी गुणों की जाँच करता है और यदि किसी गुण में लापता मान हैं तो True लौटाता है, अन्यथा False लौटाता है।

निम्नलिखित कोड सभी यूनिट टेस्टों के अंकों के आँकड़ों को एक DataFrame में संग्रहित करता है और जाँचता है कि DataFrame में लापता मान हैं या नहीं।

>>> marksUT = {
‘Name’:[‘Raman’,‘Raman’,‘Raman’,‘Raman’,‘Zuhaire’,‘Zuhaire’,‘Zuhaire’
,‘Zuhaire’,‘Ashravy’,‘Ashravy’,‘Ashravy’,‘Ashravy’,‘Mishti’,‘Mishti’,
‘Mishti’,‘Mishti’],
‘UT’:[1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4],
‘Maths’:[22,21,14,np.NaN,20,23,22,19,23,24,12,15,15,18,17,14],
‘Science’:[21,20,19,np.NaN,17,15,18,20,19,22,25,20,22,21,18,20],
‘S.St’:[18,17,15,19,22,21,19,17,20,24,19,20,25,25,20,19],
‘Hindi’:[20,22,24,18,24,25,23,21, 15,17,21,20,22,24,25,20],
‘Eng’:[21,24,23,np.NaN,19,15,13,16,22,21,23,17,22,23,20,18] }

>>> df = pd.DataFrame(marksUT)
>>> print(df.isnull())

उपरोक्त कोड का आउटपुट होगा

नाम यूटी गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
0 False False False False False False False
1 False False False False False False False
2 False False False False False False False
3 False False True True False False False
4 False False False False False False False
5 False False False False False False False
6 False False False False False False False
7 False False False False False False False
8 False False False False False False False
9 False False False False False False False
10 False False False False False False False
11 False False False False False False False
12 False False False False False False False
13 False False False False False False False
14 False False False False False False False
15 False False False False False False False

कोई प्रत्येक व्यक्तिगत गुण के लिए भी जांच कर सकता है, उदाहरण के लिए निम्नलिखित कथन यह जांचता है कि गुण ‘विज्ञान’ में कोई मान गायब है या नहीं। यह उन प्रत्येक पंक्ति के लिए True लौटाता है जहाँ ‘विज्ञान’ गुण के लिए कोई मान गायब है, और अन्यथा False।

>>> print(df[‘विज्ञान’].isnull())

0 $\quad$ False
1 $\quad$ False
2 $\quad$ False
3 $\quad$ True
4 $\quad$ False
5 $\quad$ False
6 $\quad$ False
7 $\quad$ False
8 $\quad$ False
9 $\quad$ False
10 $\quad$ False
11 $\quad$ False
12 $\quad$ False
13 $\quad$ False
14 $\quad$ False
15 $\quad$ False
Name: Science, dtype: bool

किसी कॉलम (गुण) में संपूर्ण डेटासेट में कोई मिसिंग वैल्यू है या नहीं, यह जाँचने के लिए any() फ़ंक्शन का उपयोग किया जाता है। यदि मिसिंग वैल्यू होती है तो यह True लौटाता है, अन्यथा False लौटाता है।

>>> print(df.isnull().any())

Name $\quad$ False
UT $\quad$ False
Maths $\quad$ True
Science $\quad$ True
S.St $\quad$ False
Hindi $\quad$ False
Eng $\quad$ True
dtype: bool

any() फ़ंक्शन किसी विशेष गुण के लिए भी इस्तेमाल किया जा सकता है। निम्नलिखित कथन True लौटाते हैं यदि किसी गुण में मिसिंग वैल्यू होती है, अन्यथा False लौटाते हैं।

>>> print(df[‘Science’].isnull().any())
True

>>> print(df[‘Hindi’].isnull().any())
False

प्रत्येक गुण के अनुरूप $\mathrm{NaN}$ वैल्यू की संख्या ज्ञात करने के लिए, sum() फ़ंक्शन को isnull() फ़ंक्शन के साथ नीचे दिखाए अनुसार उपयोग किया जा सकता है:

>>> print(df.isnull().sum())

Name $\quad$ 0
UT $\quad$ 0
Maths $\quad$ 1
Science $\quad$ 1
S.St $\quad$ 0
Hindi $\quad$ 0
Eng $\quad$ 1
dtype: int64

संपूर्ण डेटासेट में $\mathrm{NaN}$ की कुल संख्या ज्ञात करने के लिए df.isnull().sum().sum() का उपयोग किया जा सकता है।

>>> print(df.isnull().sum().sum())
3

Program 3-12 रमन द्वारा हिंदी में प्राप्त किए गए अंकों का प्रतिशत ज्ञात करने के लिए एक प्रोग्राम लिखिए।

>>> dfRaman = df[df[‘Name’]==‘Raman’]
>>> print(‘रमन द्वारा प्राप्त अंक \n\n’,dfRaman)

रमन द्वारा प्राप्त अंक
Name UT Maths Science S.St Hindi Eng
0 Raman 1 22.0 21.0 18 20 21.0
1 Raman 2 21.0 20.0 17 22 24.0
2 Raman 3 14.0 19.0 15 24 23.0
3 Raman 4 NaN NaN 19 18 NaN

>>> dfHindi = dfRaman[‘Hindi’]
>>> print(“रमन द्वारा हिंदी में प्राप्त अंक\ \n\n”,dfHindi)

रमन द्वारा हिंदी में प्राप्त अंक

0 $\quad$ 20
1 $\quad$ 22
2 $\quad$ 24
3 $\quad$ 18
Name: Hindi, dtype: int64

>>> row = len(dfHindi) # आयोजित इकाई परीक्षाओं की संख्या। यहाँ row 4 होगा

_>>> print(“रमन द्वारा हिंदी में प्राप्त अंकों का प्रतिशत\n\n”,(dfHindi.sum()100)/(25row),”%”) \

उपरोक्त सूत्र में हर पक्ष के अंकों का योग है। यहाँ row 4 परीक्षाएँ हैं और 25 एक परीक्षा के अधिकतम अंक हैं_

रमन द्वारा हिंदी में प्राप्त अंकों का प्रतिशत
84.0 %

प्रोग्राम 3-13 गणित विषय में रमन द्वारा प्राप्त अंकों का प्रतिशत ज्ञात करने के लिए एक पायथन प्रोग्राम लिखिए।

>>>dfMaths = dfRaman[‘Maths’]
>>>print(“रमन द्वारा गणित में प्राप्त अंक
\n\n”,dfMaths)
रमन द्वारा गणित में प्राप्त अंक

0 $\quad$ 22.0
1 $\quad$ 21.0
2 $\quad$ 14.0
3 $\quad$ NaN
Name: Maths, dtype: float64

>>>row = len(dfMaths) # यहाँ, row का मान 4 होगा, यूनिट टेस्टों की संख्या
>>>print(“Percentage of Marks Scored by Raman in Maths\n\n”,dfMaths.sum()100/(25row),"%")

Percentage of Marks Scored by Raman in Maths
57%

यहाँ ध्यान दें कि रमन गणित विषय में यूनिट टेस्ट 4 में अनुपस्थित था। प्रतिशत की गणना करते समय, चौथे टेस्ट के अंकों को 0 माना गया है।

3.8.2 लापता मानों को हटाना

लापता मानों को या तो उस पूरी पंक्ति को हटाकर संभाला जा सकता है जिसमें लापता मान है, या उसे उपयुक्त मान से प्रतिस्थापित किया जा सकता है।

हटाने से वह पूरी पंक्ति (ऑब्जेक्ट) हट जाएगी जिसमें लापता मान है। यह रणनीति डेटा विश्लेषण में प्रयुक्त डेटासेट का आकार घटाती है, इसलिए इसका उपयोग तभी करना चाहिए जब कुछ ऑब्जेक्ट्स पर लापता मान हों। dropna() फ़ंक्शन का उपयोग DataFrame से पूरी पंक्ति हटाने के लिए किया जा सकता है। उदाहरण के लिए, पिछले उदाहरण पर dropna() फ़ंक्शन को कॉल करने से $\mathrm{NaN}$ मान वाली चौथी पंक्ति हट जाएगी।

>>> df1 = df.dropna()
>>> print(df1)

नाम यूटी गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
0 रमन 1 22.0 21.0 18 20 21.0
1 रमन 2 21.0 20.0 17 22 24.0
2 रमन 3 14.0 19.0 15 24 23.0
4 ज़ुहैर 1 20.0 17.0 22 24 19.0
5 ज़ुहैर 2 23.0 15.0 21 25 15.0
6 ज़ुहैर 3 22.0 18.0 19 23 13.0
7 ज़ुहैर 4 19.0 20.0 17 21 16.0
8 अश्रव्य 1 23.0 19.0 20 15 22.0
9 अश्रव्य 2 24.0 22.0 24 17 21.0
10 अश्रव्य 3 12.0 25.0 19 21 23.0
11 अश्रव्य 4 15.0 20.0 20 20 17.0
12 मिश्ती 1 15.0 22.0 25 22 22.0
13 मिश्ती 2 18.0 21.0 25 24 23.0
14 मिश्ती 3 17.0 18.0 20 25 20.0
15 मिश्ती 4 14.0 20.0 19 20 18.0

अब, आइए निम्नलिखित कोड पर विचार करें:

# सभी यूनिट टेस्टों में रमन द्वारा प्राप्त अंक
>>>dfRaman=df[df.Name==‘Raman’]

# inplace=true मूल डेटाफ्रेम में बदलाव करता है #यहाँ dfRaman
>>>dfRaman.dropna(inplace=True,how=‘any’)
>>>dfMaths = dfRaman[‘Maths’] # गणित में प्राप्त अंक प्राप्त करें
>>>print("\nरमन द्वारा गणित में प्राप्त अंक \n",dfMaths)

रमन द्वारा गणित में प्राप्त अंक

0 $\quad$ 22.0
1 $\quad$ 21.0
2 $\quad$ 14.0
3 $\quad$ NaN
नाम: Maths, dtype: float64

>>>row = len(dfMaths)
>>>print("\nPercentage of Marks Scored by Raman in Maths\n")
>>>print(dfMaths.sum()*100/(25*row),"%")

Percentage of Marks Scored by Raman in Maths
76.0%

ध्यान दें कि dropna का उपयोग करने के बाद dfRaman में पंक्तियों की संख्या 3 है। इसलिए प्रतिशत की गणना 3 इकाई परीक्षाओं में प्राप्त अंकों से की गई है।

3.8.3 लापता मानों का अनुमान

लापता मानों को अनुमान या आकलन द्वारा भरा जा सकता है, जैसे कि लापता मान से ठीक पहले या बाद का मान, उस विशेषता के मानों का औसत/न्यूनतम/अधिकतम आदि। कुछ मामलों में लापता मानों को शून्य (या एक) से प्रतिस्थापित किया जाता है।

fillna(num) फ़ंक्शन का उपयोग लापता मानों को num में निर्दिष्ट मान से प्रतिस्थापित करने के लिए किया जा सकता है। उदाहरण के लिए, fillna(0) लापता मान को 0 से प्रतिस्थापित करता है। इसी तरह fillna(1) लापता मान को 1 से प्रतिस्थापित करता है। निम्नलिखित कोड लापता मानों को 0 से प्रतिस्थापित करता है और रमन द्वारा विज्ञान में प्राप्त अंकों का प्रतिशत की गणना करता है।

#Marks Scored by Raman in all the subjects across the tests
>>>dfRaman = df.loc[df['Name']=='Raman']
>>>(row,col) = dfRaman.shape
>>>dfScience = dfRaman.loc[:,'Science']
>>>print("Marks Scored by Raman in Science \n\n",dfScience)

Marks Scored by Raman in Science

0  21.0
1  20.0
2  19.0
3  NaN
Name: Science, dtype: float64

>>>dfFillZeroScience = dfScience.fillna(0)
>>>print('\nMarks Scored by Raman in Science with Missing Values Replaced with Zero\n',dfFillZeroScience)

विज्ञान में रमन द्वारा प्राप्त अंक जिनमें लापता मानों को शून्य से प्रतिस्थापित किया गया है

0 $\quad$ 21.0
1 $\quad$ 20.0
2 $\quad$ 19.0
3 $\quad$ 0.0
Name: Science, dtype: float64

>>>print(“विज्ञान में रमन द्वारा प्राप्त अंकों का प्रतिशत\n\n”,dfFillZeroScience.sum()100/(25row),"%")

विज्ञान में रमन द्वारा प्राप्त अंकों का प्रतिशत
60.0%

df.fillna(method=‘pad’) लापता मान को लापता मान से पहले वाले मान से प्रतिस्थापित करता है जबकि df.fillna(method=‘bfill’) लापता मान को लापता मान के बाद वाले मान से प्रतिस्थापित करता है। निम्नलिखित कोड अंग्रेज़ी की इकाई परीक्षा 4 में लापता मान को इकाई परीक्षा 3 के अंकों से प्रतिस्थापित करता है और फिर रमन द्वारा प्राप्त अंकों का प्रतिशत गणना करता है।

>>>dfEng = dfRaman.loc[:,‘Eng’]
>>>print(“अंग्रेज़ी में रमन द्वारा प्राप्त अंक \n\n”,dfEng)

अंग्रेज़ी में रमन द्वारा प्राप्त अंक

0 $\quad$ 21.0
1 $\quad$ 24.0
2 $\quad$ 23.0
3 $\quad$ NaN
Name: Eng, dtype: float64

>>>dfFillPadEng = dfEng.fillna(method=‘pad’)
>>>print(’\nअंग्रेज़ी में रमन द्वारा प्राप्त अंक जिनमें लापता मानों को पिछली परीक्षा के अंकों से प्रतिस्थापित किया गया है\n’,dfFillPadEng)

अंग्रेज़ी में रमन द्वारा प्राप्त अंक जिनमें लापता मानों को पिछली परीक्षा के अंकों से प्रतिस्थापित किया गया है

0 $\quad$ 21.0
1 $\quad$ 24.0
2 $\quad$ 23.0
3 $\quad$ 23.0
Name: Eng, dtype: float64

>>>print(“अंग्रेज़ी में रमन द्वारा प्राप्त अंकों का प्रतिशत\n\n”)
>>>print(dfFillPadEng.sum()100/(25row),"%")

अंग्रेज़ी में रमन द्वारा प्राप्त अंकों का प्रतिशत
91.0%

इस खंड में, हमने लापता मानों को संभालने के विभिन्न तरीकों पर चर्चा की है। लापता मान सूचना की हानि है और किसी अनुमान द्वारा लापता मानों को बदलने से निश्चित रूप से डेटासेट बदल जाएगा। सभी स्थितियों में, डेटा विश्लेषण के परिणाम वास्तविक परिणाम नहीं होंगे, बल्कि वास्तविक परिणामों का एक अच्छा अनुमान होंगे।

3.9 पांडास और मायएसक्यूएल के बीच डेटा का आयात और निर्यात

अब तक, हमने सीधे डेटा दर्ज किया है और एक डेटाफ्रेम बनाया है और सीखा है कि डेटाफ्रेम में डेटा का विश्लेषण कैसे किया जाता है। हालांकि, वास्तविक परिदृश्यों में, हर बार डेटा टाइप या कॉपी-पेस्ट करने की आवश्यकता नहीं होती है। बल्कि, अधिकांश समय डेटा किसी फ़ाइल (टेक्स्ट या csv) या डेटाबेस में उपलब्ध होता है। इस प्रकार, वास्तविक दुनिया के परिदृश्यों में, हमें डेटा को सीधे डेटाबेस से लाकर डेटाफ्रेम में लोड करना होगा। इसे डेटाबेस से डेटा आयात करना कहा जाता है। इसी प्रकार, विश्लेषण के बाद, हमें डेटा को वापस डेटाबेस में संग्रहित करना होगा। इसे डेटाबेस में डेटा निर्यात करना कहा जाता है।

डेटाफ्रेम से डेटा को मायएसक्यूएल डेटाबेस से पढ़ा और उसमें लिखा जा सकता है। ऐसा करने के लिए, pymysql डेटाबेस ड्राइवर का उपयोग करके मायएसक्यूएल डेटाबेस के साथ एक कनेक्शन की आवश्यकता होती है। और इसके लिए, निम्नलिखित कमांड का उपयोग करके ड्राइवर को पायथन वातावरण में स्थापित किया जाना चाहिए:

pip install pymysql

sqlalchemy एक लाइब्रेरी है जो आवश्यक साख प्रदान करके मायएसक्यूएल डेटाबेस के साथ बातचीत करने के लिए उपयोग की जाती है। इस लाइब्रेरी को निम्नलिखित कमांड का उपयोग करके स्थापित किया जा सकता है:

pip install sqlalchemy

एक बार यह इंस्टॉल हो जाने के बाद, sqlalchemy एक create_engine() फ़ंक्शन प्रदान करता है जो इस कनेक्शन को स्थापित करने में सक्षम बनाता है। फ़ंक्शन के अंदर की स्ट्रिंग को कनेक्शन स्ट्रिंग कहा जाता है। कनेक्शन स्ट्रिंग कई पैरामीटरों से बनी होती है जैसे कि डेटाबेस का नाम जिससे हम कनेक्शन स्थापित करना चाहते हैं, यूज़रनेम, पासवर्ड, होस्ट, पोर्ट नंबर और अंत में डेटाबेस का नाम। और, यह फ़ंक्शन इस कनेक्शन स्ट्रिंग के आधार पर एक engine ऑब्जेक्ट लौटाता है। इसके लिए सिंटैक्स नीचे दिया गया है:

engine=create_engine(‘driver://
username:password@host:port/name_of_database’,index=false)

जहां,
Driver = mysql+pymysql
username= mysql का यूज़र नाम (आमतौर पर यह root होता है)
password= MySql का पासवर्ड
port = आमतौर पर हम localhost से पोर्ट नंबर
3306 (डिफ़ॉल्ट पोर्ट नंबर) के साथ कनेक्ट करते हैं
Name of the Database = आपका डेटाबेस

निम्नलिखित उपभागों में, Pandas और MySQL एप्लिकेशनों के बीच डेटा को आयात और निर्यात करना प्रदर्शित किया गया है। इसके लिए, हम इसी पुस्तक के अध्याय 1 में बनाए गए उसी डेटाबेस CARSHOWROOM और तालिका INVENTORY का उपयोग करेंगे।

mysql> use CARSHOWROOM ;
Database changed
mysql> select * from INVENTORY;

CarId CarName Price Model YearManufacture Fueltype
D001 कार1 582613.00 LXI 2017 पेट्रोल
D002 कार1 673112.00 VXI 2018 पेट्रोल
B001 कार2 567031.00 सिग्मा1.2 2019 पेट्रोल
B002 कार2 647858.00 डेल्टा1.2 2018 पेट्रोल
E001 कार3 355205.00 5 STR STD 2017 CNG
E002 कार3 654914.00 CARE 2018 CNG
S001 कार4 514000.00 LXI 2017 पेट्रोल
S002 कार4 614000.00 VXI 2018 पेट्रोल

8 पंक्तियाँ सेट में (0.00 सेकंड)

3.9.1 MySQL से Pandas में डेटा आयात करना

MySQL से pandas में डेटा आयात करना मूलतः इस प्रक्रिया को संदर्भित करता है जिसमें MySQL डेटाबेस से एक तालिका को पढ़कर pandas DataFrame में लोड किया जाता है। कनेक्शन स्थापित करने के बाद, डेटाबेस की तालिका से डेटा लाने के लिए हमारे पास निम्नलिखित तीन फ़ंक्शन होते हैं:

  1. pandas.read_sql_query(query, sql_conn)

इसका उपयोग एक SQL क्वेरी (query) को DataFrame में पढ़ने के लिए किया जाता है, create_engine() से लौटाए गए कनेक्शन पहचानकर्ता (sql_conn) का उपयोग करते हुए।

  1. pandas.read_sql_table(table_name,sql_conn)

इसका उपयोग एक SQL तालिका (table_name) को DataFrame में पढ़ने के लिए किया जाता है, कनेक्शन पहचानकर्ता (sql_conn) का उपयोग करते हुए।

  1. pandas.read_sql(sql, sql_conn)

इसका उपयोग या तो एक SQL क्वेरी या SQL तालिका (sql) को DataFrame में पढ़ने के लिए किया जाता है, कनेक्शन पहचानकर्ता (sql_conn) का उपयोग करते हुए।

>>>import pandas as pd
>>>import pymysql as py
>>>import sqlalchemy
>>>engine=create_engine(‘mysql+pymysql://root:smsmb@localhost:3306/CARSHOWROOM’)
>>>df = pd.read_sql_query(‘SELECT * FROM INVENTORY’, engine)
>>>print(df)

CarId CarName Price Model YearManufacture Fueltype
0 D001 कार1 582613.00 LXI 2017 पेट्रोल
1 D002 कार1 673112.00 VXI 2018 पेट्रोल
2 B001 कार2 567031.00 Sigma1.2 2019 पेट्रोल
3 B002 कार2 647858.00 Delta1.2 2018 पेट्रोल
4 E001 कार3 355205.00 5STR STD 2017 CNG
5 E002 कार3 654914.00 CARE 2018 CNG
6 S001 कार4 514000.00 LXI 2017 पेट्रोल
7 S002 कार4 614000.00 VXI 2018 पेट्रोल

3.9.2 पांडास से माइएसक्यूएल में डेटा एक्सपोर्ट करना

पांडास से माइएसक्यूएल में डेटा एक्सपोर्ट करना मूलतः उस प्रक्रिया को संदर्भित करता है जिसमें एक पांडास डेटाफ्रेम को माइएसक्यूएल डेटाबेस की एक टेबल में लिखा जाता है। इस उद्देश्य के लिए, हमारे पास निम्नलिखित फ़ंक्शन है:
pandas.DataFrame.to_sql(table,sql_conn,if_exists=“fail”,index=False/True)

  • Table उस टेबल का नाम निर्दिष्ट करता है जिसमें हम DataFrame के मान बनाना या जोड़ना चाहते हैं। इसका उपयोग निर्दिष्ट DataFrame को उस टेबल में लिखने के लिए किया जाता है जिसका कनेक्शन पहचानकर्ता (sq1_conn) create_engine() से लौटाया गया है।
  • पैरामीटर if_exists यह निर्दिष्ट करता है कि “DataFrame से डेटा टेबल में किस तरह दर्ज किया जाना चाहिए। इसके निम्नलिखित तीन मान हो सकते हैं: “fail”, “replace”, “append”.

o “fail” डिफ़ॉल्ट मान है जो इंगित करता है कि यदि टेबल पहले से डेटाबेस में मौजूद है तो ValueError आएगी।

o “replace” निर्दिष्ट करता है कि टेबल की पिछली सामग्री को DataFrame की सामग्री से अद्यतन किया जाना चाहिए।

o “append” निर्दिष्ट करता है कि DataFrame की सामग्री को मौजूदा टेबल में जोड़ा जाना चाहिए और जब अद्यतन किया जाए तो प्रारूप समान होना चाहिए (कॉलम नाम क्रम)।

  • Index - डिफ़ॉल्ट रूप से index True होता है जिसका अर्थ है DataFrame इंडेक्स MySQL टेबल में कॉपी किया जाएगा। यदि False है, तो यह DataFrame इंडेक्सिंग को अनदेखा करेगा।
    #Code to write DataFrame df to database

>>>import pandas as pd
>>>import pymysql as py
>>>import sqlalchemy
>>>engine=create_engine(‘mysql+pymysql://root:smsmb@localhost:3306/CARSHOWROOM’)
>>>data={‘ShowRoomId’:[1,2,3,4,5],‘Location’:[‘Delhi’,‘Bangalore’,‘Mumbai’,‘Chandigarh’,‘Kerala’]}
>>>df=pd.DataFrame(data)
>>>df.to_sql(‘showroom_info’,engine,if_exists=“replace”,index=False)

इस पायथन स्क्रिप्ट को चलाने के बाद, डेटाबेस में “showroom_info” नाम की एक mysql टेबल बनाई जाएगी।

SUMMARY

  • वर्णनात्मक सांख्यिकी का उपयोग दिए गए डेटा का मात्रात्मक सारांश तैयार करने के लिए किया जाता है।
  • पांडा डेटा के विश्लेषण के लिए कई सांख्यिकीय फ़ंक्शन प्रदान करता है। कुछ फ़ंक्शन हैं $\max ()$, $\min ($ ), mean(), median(), mode(), std(), var() आदि।
  • सॉर्टिंग का उपयोग डेटा को एक निर्दिष्ट क्रम में व्यवस्थित करने के लिए किया जाता है, अर्थात् या तो आरोही या अवरोही।
  • डेटाफ्रेम में किसी पंक्ति या स्तंभ के इंडेक्स या लेबल को बदला जा सकता है। इस प्रक्रिया को इंडेक्स बदलना कहा जाता है। इस उद्देश्य के लिए दो फ़ंक्शन reset_index और set_index का उपयोग किया जाता है।
  • लापता मान डेटा विश्लेषण में बाधा हैं और इन्हें ठीक से संभालना चाहिए।
  • लापता डेटा को संभालने के मुख्यतः दो मुख्य रणनीतियाँ हैं। या तो वह पंक्ति (या स्तंभ) जिसमें लापता मान है, उसे विश्लेषण से पूरी तरह हटा दिया जाता है या लापता मान को किसी उपयुक्त मान से प्रतिस्थापित किया जाता है (जो शून्य या एक या औसत आदि हो सकता है)।
  • डेटाफ्रेम की संरचना को बदलने की प्रक्रिया को पुनः आकार देना कहा जाता है। पांडा इसके लिए दो बुनियादी फ़ंक्शन प्रदान करता है, pivot() और pivot_table()।
  • pymysql और sqlalchemy पांडा और माईएसक्यूएल के बीच डेटा के आयात और निर्यात को सुगम बनाने के लिए दो अनिवार्य लाइब्रेरी हैं। आयात और निर्यात से पहले, पायथन स्क्रिप्ट से माईएसक्यूएल डेटाबेस से एक कनेक्शन स्थापित करना आवश्यक होता है।
  • माईएसक्यूएल से पांडा में डेटा आयात करना उस प्रक्रिया को संदर्भित करता है जिसमें माईएसक्यूएल टेबल या डेटाबेस से डेटा को पांडा डेटाफ्रेम में लाया जाता है।
  • पांडा से माईएसक्यूएल में डेटा निर्यात करना उस प्रक्रिया को संदर्भित करता है जिसमें पांडा डेटाफ्रेम से डेटा को माईएसक्यूएल टेबल या डेटाबेस में संग्रहित किया जाता है।

अभ्यास

1. MySQL से कनेक्ट करने के लिए python connector यानी pymysql इंस्टॉल करने के लिए स्टेटमेंट लिखें।
2. pivot() और pivot_table() फंक्शन के बीच अंतर समझाइए।
3. sqlalchemy क्या है?
4. क्या आप एक DataFrame को कई कॉलम के संदर्भ में सॉर्ट कर सकते हैं?
5. Missing values क्या होती हैं? इन्हें हैंडल करने की रणनीतियाँ क्या हैं?
6. निम्नलिखित पदों को परिभाषित करें: Median, Standard Deviation और variance।
7. MODE शब्द से आप क्या समझते हैं? इसे कैलकुलेट करने के लिए कौन-सा फंक्शन यूज़ किया जाता है?
8. Data aggregation का उद्देश्य लिखें।
9. GROUP BY की अवधारणा को एक उदाहरण की मदद से समझाइए।
10. MySQL डेटाबेस से DataFrame में डेटा पढ़ने के लिए आवश्यक स्टेप्स लिखें।
11. डेटा के reshaping के महत्व को एक उदाहरण के साथ समझाइए।
12. डेटा एनालिसिस में estimation एक महत्वपूर्ण अवधारणा क्यों है?
13. दी गई टेबल: Product मानते हुए, निम्नलिखित के लिए python कोड लिखें:

Item Company Rupees USD
TV LG 12000 700
TV VIDEOCON 10000 650
TV LG 15000 800
AC SONY 14000 750

a) ऊपर दी गई टेबल के लिए data frame बनाने के लिए।

b) data frame में नई rows जोड़ने के लिए।

c) LG TV की maximum price डिस्प्ले करने के लिए।

d) सभी products का योग डिस्प्ले करने के लिए।

e) Sony products के USD का median डिस्प्ले करने के लिए।

f) Rupees के अनुसार डेटा को सॉर्ट करना और उसे MySQL में ट्रांसफर करना।

g) नए डेटाफ्रेम को नए मानों के साथ MySQL में ट्रांसफर करना।

14. दिए गए डेटासेट के आधार पर निम्नलिखित प्रश्न के लिए पायथन स्टेटमेंट लिखें:

Name Degree Score
0 Aparna MBA 90.0
1 Pankaj BCA NaN
2 Ram M.Tech 80.0
3 Ramesh MBA 98.0
4 Naveen NaN 97.0
5 Krrishnav BCA 78.0
6 Bhawna MBA 89.0

a) उपरोक्त डेटाफ्रेम बनाना।

b) प्रत्येक स्ट्रीम में डिग्री और अधिकतम अंक प्रिंट करना।

c) NaN को 76 से भरना।

d) इंडेक्स को Name पर सेट करना।

e) प्रत्येक छात्र के नाम और डिग्री अनुसार औसत अंक प्रदर्शित करना।

f) MBA में छात्रों की संख्या गिनना।

g) BCA के मोड अंक प्रिंट करना।

ओपन डेटासेट पर आधारित हल किया गया केस स्टडी

UCI डेटासेट खुले डेटासेट का एक संग्रह है, जो प्रयोग और अनुसंधान उद्देश्यों के लिए जनता के लिए उपलब्ध है। ‘auto-mpg’ एक ऐसा ही खुला डेटासेट है।

इमें शहर में ऑटोमोबाइल्स द्वारा ईंधन खपत से संबंधित डेटा होता है। खपत को मील प्रति गैलन $(\mathrm{mpg})$ में मापा जाता है, इसलिए डेटासेट का नाम auto-mpg है। डेटा में 398 पंक्तियाँ (जिन्हें आइटम या इंस्टेंस या ऑब्जेक्ट भी कहा जाता है) और नौ कॉलम (जिन्हें विशेषता भी कहा जाता है) हैं।

विशेषताएँ हैं: $\mathrm{mpg}$, cylinders, displacement, horsepower, weight, acceleration, model year, origin, car name। तीन विशेषताएँ—cylinders, model year और origin—श्रेणीबद्ध मान रखती हैं, car name एक स्ट्रिंग है जिसमें प्रत्येक पंक्ति के लिए एक अद्वितीय मान है, जबकि शेष पाँच विशेषताओं में संख्यात्मक मान हैं।

यह डेटा UCI डेटा रिपॉजिटरी से डाउनलोड किया गया है जो http://archive.ics.uci.edu/ $\mathrm{ml} /$ machine-learning-databases/auto-mpg/ पर उपलब्ध है।

डेटा का विश्लेषण करने के लिए निम्नलिखित अभ्यास हैं:

  1. auto-mpg.data को एक DataFrame autodf में लोड करें।
  2. उत्पन्न DataFrame autodf का विवरण दें।
  3. DataFrame autodf की पहली 10 पंक्तियाँ प्रदर्शित करें।
  4. वे विशेषताएँ खोजें जिनमें missing values हैं। missing values को निम्नलिखित दो तरीकों से संभालें:

i. missing values को उससे पहले आए मान से प्रतिस्थापित करें।

ii. original dataset से वे पंक्तियाँ हटा दें जिनमें missing values हैं

  1. वह कार जिसने अधिकतम mileage दी, उसका विवरण प्रिंट करें।
  2. दिए गए cylinders की संख्या के आधार पर कार का औसत displacement ज्ञात करें।
  3. एक कार में cylinders की औसत संख्या क्या है?
  4. उन कारों की संख्या निर्धारित करें जिनका weight औसत weight से अधिक है।