अध्याय 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())

नाम ज़ुहैर #Name कॉलम में अधिकतम मान
#(वर्णमाला क्रम में)
यूटी 3 #UT कॉलम में अधिकतम मान
गणित 24 #Maths कॉलम में अधिकतम मान
विज्ञान 25 #Science कॉलम में अधिकतम मान
सामाजिक विज्ञान 25 #S.St कॉलम में अधिकतम मान
हिन्दी 25 #Hindi कॉलम में अधिकतम मान
अंग्रेज़ी 24 #Eng कॉलम में अधिकतम मान

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

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

#To print total marks scored by Raman in all subjects in each Unit Test
>>> dfRaman[[‘Maths’,‘Science’,‘S.
St’,‘Hindi’,‘Eng’]].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())

Name $\quad$ 12
UT $\quad$ 12
Maths $\quad$ 12
Science $\quad$ 12
S.St $\quad$ 12
Hindi $\quad$ 12
Eng $\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()

UT $\quad$ 2.5000
Maths $\quad$ 18.6000
Science $\quad$ 19.8000
S.St $\quad$ 20.0000
Hindi $\quad$ 21.3125
Eng $\quad$ 19.8000
dtype: float64

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

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

Slicing of the DataFrame to get only the marks

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))

Average of marks obtained by Zuhaire in all
Unit Tests
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() डेटा का मध्य मान प्रदर्शित करेगा। यह फ़ंक्शन DataFrame के प्रत्येक कॉलम के मानों की माध्यिका प्रदर्शित करेगा। यह केवल संख्यात्मक मानों के लिए लागू होता है।

>>> 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 UT1 में गणित की माध्यिका अंक प्रिंट करने के लिए कथन लिखें।

>>> 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 ज़ुहैर # 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 ज़ुहैर 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 को सॉर्ट करना

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

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

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

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

संपूर्ण डेटा को विशेषता ‘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() फ़ंक्शन का उपयोग कुछ मानदंडों के आधार पर डेटा को समूहों में विभाजित करने के लिए किया जाता है। DataFrame जैसे pandas ऑब्जेक्ट्स को उनके किसी भी अक्ष पर विभाजित किया जा सकता है। 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 को विभाजित करके समूह कैसे बनाते हैं। अगला चरण इन बनाए गए समूहों पर फ़ंक्शन लागू करना है। यह एग्रीगेशन द्वारा किया जाता है।

एग्रीगेशन एक प्रक्रिया है जिसमें GROUP BY() द्वारा बनाए गए प्रत्येक समूह पर एक एग्रीगेट फ़ंक्शन लागू किया जाता है। यह प्रत्येक समूह के अनुरूप एक एकल एग्रीगेटेड सांख्यिकीय मान लौटाता है। इसका उपयोग किसी अक्ष पर एकाधिक फ़ंक्शन लागू करने के लिए किया जा सकता है। डिफ़ॉल्ट रूप से, फ़ंक्शन कॉलमों पर लागू होते हैं। एग्रीगेशन 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

नाम: 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 इंडेक्स को बदलना

हम डेटाफ्रेम के तत्वों तक पहुँचने के लिए इंडेक्सिंग का उपयोग करते हैं। यह डेटा की तेज़ पुनर्प्राप्ति के लिए प्रयुक्त होता है। डिफ़ॉल्ट रूप से, 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)

मूल्य (रु) स्टॉक में इकाइयाँ
वस्तु रंग
पेन नीला 35.0 34.5
लाल 17.5 30.0
पेंसिल काला 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 लापता मानों को संभालना

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

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

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

i) लापता मान वाली वस्तु को हटा दें,

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

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

सारणी 3.2 यूटी4 के बाद की केस स्टडी डेटा

परिणाम
नाम/विषय इकाई परीक्षण गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
रमन 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 में कोई मान लापता है या नहीं। यह फ़ंक्शन सभी attribute-जाँचता है और यदि किसी attribute में लापता मान हों तो 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(‘Raman द्वारा प्राप्त अंक \n\n’,dfRaman)

Raman द्वारा प्राप्त अंक
नाम यूटी गणित विज्ञान सामाजिक विज्ञान हिंदी अंग्रेज़ी
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
3 रमन 4 NaN NaN 19 18 NaN

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

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

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

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

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

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

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

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

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

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 लापता मानों को हटाना

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

हटाने से वह पूरी पंक्ति (ऑब्जेक्ट) हट जाएगी जिसमें लापता मान हैं। यह रणनीति डेटा विश्लेषण में प्रयुक्त डेटासेट का आकार घटाती है, इसलिए इसका उपयोग तभी करना चाहिए जब कुछ ही ऑब्जेक्ट्स पर लापता मान हों। DataFrame से पूरी पंक्ति हटाने के लिए dropna() फ़ंक्शन का उपयोग किया जा सकता है। उदाहरण के लिए, पिछले उदाहरण पर 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
Name: Maths, dtype: float64

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

रामन द्वारा गणित में प्राप्त किए गए अंकों का प्रतिशत
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)

रामन द्वारा विज्ञान में प्राप्त किए गए अंक

0 $\quad$ 21.0
1 $\quad$ 20.0
2 $\quad$ 19.0
3 $\quad$ 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 एप्लिकेशनों के बीच डेटा को आयात और निर्यात करना प्रदर्शित किया गया है। इसके लिए, हम इसी डेटाबेस CARSHOWROOM और टेबल INVENTORY का उपयोग करेंगे जो इस पुस्तक के अध्याय 1 में बनाया गया था।

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) को कनेक्शन पहचानकर्ता (sq1_conn) का उपयोग करके DataFrame में पढ़ने के लिए किया जाता है, जो create_engine() से लौटाया गया है।

  1. pandas.read_sql_table(table_name,sql_conn)

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

  1. pandas.read_sql(sql, sql_conn)

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

>>>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 टेबल बनाई जाएगी।

सारांश

  • वर्णनात्मक सांख्यिकी का उपयोग दिए गए डेटा का मात्रात्मक सारांश तैयार करने के लिए किया जाता है।
  • पांडा डेटा के विश्लेषण के लिए कई सांख्यिकीय फ़ंक्शन प्रदान करता है। कुछ फ़ंक्शन हैं $\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. मिसिंग वैल्यूज़ क्या होती हैं? इन्हें हैंडल करने की रणनीतियाँ क्या हैं?
6. निम्नलिखित पदों को परिभाषित कीजिए: माध्यिका (Median), मानक विचलन (Standard Deviation) और प्रसरण (variance)।
7. आप MODE शब्द से क्या समझते हैं? इसे कैलकुलेट करने के लिए कौन-सा फ़ंक्शन इस्तेमाल होता है?
8. डेटा एग्रीगेशन का उद्देश्य लिखिए।
9. एक उदाहरण की मदद से GROUP BY की अवधारणा समझाइए।
10. MySQL डेटाबेस से DataFrame में डेटा पढ़ने के लिए आवश्यक स्टेप्स लिखिए।
11. एक उदाहरण के साथ डेटा के री-शेपिंग के महत्व को समझाइए।
12. डेटा एनालिसिस में एस्टीमेशन एक महत्वपूर्ण अवधारणा क्यों है?
13. दी गई टेबल: Product मानते हुए, निम्नलिखित के लिए python कोड लिखिए:

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

a) ऊपर दी गई टेबल के लिए डेटा फ्रेम बनाने के लिए।

b) डेटा फ्रेम में नई पंक्तियाँ जोड़ने के लिए।

c) LG TV की अधिकतम कीमत डिस्प्ले करने के लिए।

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

e) Sony प्रोडक्ट्स के USD की माध्यिका डिस्प्ले करने के लिए।

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

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

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

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) उपरोक्त DataFrame बनाना।

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

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. वे गुण खोजें जिनमें लापता मान हैं। लापता मानों को निम्न दो तरीकों से संभालें:

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

ii. मूल डेटासेट से वे पंक्तियाँ हटा दें जिनमें लापता मान हैं

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