Pandas என்பது தரவுகளை வைத்து பல்வேறு ஆய்வினை நிகழ்த்துவதற்கு உதவும் வகையில் தரவினைப் பல்வேறு வடிவங்களில் சேமிக்கப் பயன்படுகிறது. Series, Dataframe, Panel ஆகியவை பாண்டாஸ் பயன்படுத்துகின்ற தரவு வடிவங்களாகும். இவை முறையே ஒருபரிமாண இருபரிமாண மற்றும் முப்பரிமாண வடிவில் அமையும் தரவுகளை சேமிக்கப் பயன்படுகின்றன. எடுத்துக்காட்டாக நமது அரசாங்கத்தில் என்னென்ன துறைகள் உள்ளன என்பதை வரிசையாக ஒன்றன்பின் ஒன்றாக எழுதி சேமிக்க series-ஐப் பயன்படுத்தலாம் (1D data). அதாவது துறைகள் எனும் இந்த ஒரு பரிமாணத்தில் மட்டும்தான் தரவுகள் சேமிக்கப்படுகின்றன. அதுவே ஒவ்வொரு துறையிலும் எவ்வளவு பேர் பணிபுரிகின்றனர் (2D data) என்பதை சேமிக்க விரும்பினால் dataframe-ஐப் பயன்படுத்தலாம். ஏனெனில் துறைகள், பணியாளர்கள் எனும் இரண்டு பரிமாணங்களில் தரவுகள் சேமிக்கப்படுகின்றன. இன்னும் விரிவாக ஒவ்வொரு மாநிலத்திலும் உள்ள பல்வேறு துறைகளில் எத்தனை எத்தனை பேர் பணிபுரிகின்றனர் (3D data) என்பதை சேமிக்க விரும்பினால் Panel-ஐப் பயன்படுத்தலாம். ஏனெனில் மாநிலங்கள், அதில் உள்ள துறைகள், அவ்வொவ்வொன்றிலும் உள்ள பணியாளர்கள் எனும் மூன்று பரிமாணங்களில் இங்கு தரவுகள் சேமிக்கப்படும்.
மேலும் எண்கள், சொற்கள், categorical data, time series data போன்ற எந்த வகையான தரவுகளாக இருந்தாலும் அவற்றை நாம் சேமிக்கலாம். ஒவ்வொரு தரவு வடிவத்திற்கும் தனித்தனியான பண்புகள் உள்ளன. அவற்றை அணுகுவதற்கும் பயன்படுத்துவதற்கும் பல்வேறு வழிமுறைகளும் விதிமுறைகளும் உள்ளன. இவற்றைப் பற்றியெல்லாம் இப்புத்தகத்தில் காண்போம்.
முதலில் pandas பயன்படுத்தும் தரவு வடிவங்களைப் பற்றி விளக்கமாகக் காண்போம்.
Data Types – Series, DataFrame, Panel
Series என்பது ஒரே வகையான தரவினை மட்டும் சேமிக்கப் பயன்படுகிறது. எனவேதான் இது dtype எனும் பண்பினைப் பெற்று விளங்குகிறது.
Dataframe என்பது பல்வேறு வகையான தரவுகளை பல்வேறு சீரீஸில் சேமிக்கிறது. எனவே இதன் வடிவம் excel sheet-ல் உள்ளது போன்று row, column வடிவில் இருக்கும். இதிலுள்ள ஒவ்வொரு column-ம் தனித்தனி சீரீஸ் ஆகும். ஒரு சீரீஸில் int வகையான மதிப்புகள் காணப்படும். அடுத்த சீரீஸில் string வகையான மதிப்புகள் இருக்கலாம். அதற்கடுத்தது datetime மதிப்பினைப் பெற்று விளங்கலாம். இதுபோன்று வெவ்வேறு வகையான மதிப்பினை பெற்று விளங்கும் பல்வேறு சீரீஸின் தொகுப்பே டேட்டாஃப்பிரேம் ஆகும். எனவேதான் இதற்கு dtype என்ற பொதுப்பண்பு கிடையாது. வேண்டுமானால் ஒவ்வொரு series-க்குமான dtype மதிப்பை இது தனித்தனியே வெளிப்படுத்தும்.
Panel என்பது இத்தகைய டேட்டாஃப்பிரேம்களின் தொகுப்பு ஆகும். அதாவது ஒரு excelbook-ல் பல்வேறு sheets இருக்குமல்லவா! அந்த ஒவ்வொரு ஷீட்டிலும் rows, columns-ல் அமைந்த பல்வேறு தரவுகள் இருக்குமல்லவா! அதுபோலத்தான் பேனல் என்பது பல டேட்டாஃப்பிரேமை உள்ளடக்கியது. அதன் ஒவ்வொரு டேட்டாஃப்பிரேமும் rows, columns-ல் அமைந்த பல்வேறு தரவுகளைப் பெற்றிருக்கும்.
கீழ்க்கண்டவாறு நிரலை எழுதி இயக்கிப் பார்த்தால் இவற்றைப் பற்றிய புரிதல் உங்களுக்குத் தெளிவாகப் புலப்படும்.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
print (pd.Series()) | |
print (pd.DataFrame()) | |
print (pd.Panel()) | |
l1 = [90,83,67,83,45] | |
s = pd.Series(l1) | |
print (s) | |
df = pd.DataFrame(l1) | |
print (df) | |
l2 = [[90,83,67,83,45],[68,89,75,56,73],[58,88,60,90,100]] | |
df = pd.DataFrame(l2) | |
print (df) | |
d1 = {'Midterm': pd.DataFrame([[90,83,67,83,45],[68,89,75,56,73],[58,88,60,90,100]]), | |
'Quarterly': pd.DataFrame([[35,44,65,56,79],[85,55,84,50,99],[65,90,87,69,78]]), | |
'Half early': pd.DataFrame([[80,78,90,68,66],[35,89,67,79,90],[67,89,59,90,45]]), | |
'Annual': pd.DataFrame([[90,94,58,69,84],[95,68,57,89,96],[90,58,67,96,78]])} | |
p = pd.Panel(d1) | |
print (p) | |
print (p['Midterm']) | |
print (p.major_xs(1)) | |
print (p.minor_xs(1)) | |
print (s.dtype) # This attribute available only for series | |
print (df.dtypes) | |
print (df[1].dtype) |
நிரலுக்கான விளக்கம்:
எந்த ஒரு தகவலையும் பெற்றிராத காலியான சீரீஸ், டேட்டாஃப்பிரேம், பேனலின் வெளிப்பாடு பின்வருமாறு இருக்கும்.
print (pd.Series())
Series([], dtype: float64)
print (pd.DataFrame())
Empty DataFrame
Columns: []
Index: []
print (pd.Panel())
<class ‘pandas.core.panel.Panel’>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
Items axis: None
Major_axis axis: None
Minor_axis axis: None
ஒரு மாணவன் ஐந்து பாடத்திலும் பெற்ற மதிப்பெண்களை சேமிக்க இங்கு சீரீஸ் பயன்பட்டுள்ளது. அம்மதிப்பெண்கள் முதலில் ஒரு பட்டியலுக்குள் இடப்பட்டு, பின்னர் அப்பட்டியல் Series() –க்குள் செலுத்தப்பட்டுள்ளது. இதனை பிரிண்ட் செய்து பார்த்தால் அது பின்வருமாறு வெளிப்படுத்துவதைக் காணலாம். dtype என்ற பண்பு இதில் int64 வகையிலான தரவுகள் சேமிக்கப் பட்டுள்ளன என்பதை வெளிப்படுத்தியுள்ளது.
l1 = [90,83,67,83,45]
s = pd.Series(l1)
print (s)
0 90
1 83
2 67
3 83
4 45
dtype: int64
அதேபோல மூன்று மாணவர்கள் ஐந்து பாடத்திலும் பெற்ற மதிப்பெண்களை சேமிக்க இங்கு டேட்டாஃப்பிரேம் பயன்பட்டுள்ளது. மூன்று மாணவர்களை rows-ஆகவும், ஐந்து பாடங்களை columns-ஆகவும் வைத்து இங்கு தரவுகள் சேமிக்கப்பட்டுள்ளன. rows என்பது index என்று அழைக்கப்படுகிறது. 0,1,2 ஆகியவை மூன்று மாணவர்களுக்கான இன்டெக்ஸ் ஆகும். 0,1,2,3,4 ஆகிய எண்களால் ஐந்து பாடங்களும் குறிக்கப்படுகின்றன. இந்த ஒவ்வொரு column-ம் ஒவ்வொரு தனித்தனி சீரீஸ் ஆகும்.
l2 = [[90,83,67,83,45],[68,89,75,56,73],[58,88,60,90,100]]
df = pd.DataFrame(l2)
print (df)
0 1 2 3 4
0 90 83 67 83 45
1 68 89 75 56 73
2 58 88 60 90 100
அடுத்ததாக காலாண்டு, அரையாண்டு, முழு ஆண்டு என பல்வேறு பருவங்களில் இம்மூன்று மாணவர்களும் 5 பாடங்களில் பெற்ற மதிப்பெண்களை சேமிக்க பேனல் பயன்பட்டுள்ளது. இப்பருவங்களை keys-ஆகவும், ஒவ்வொரு பருவத்திலும் அம்மூன்று மாணவர்களும் பெற்ற மதிப்பெண்களைக் கொண்ட டேட்டாஃப்பிரேமை values-ஆகவும் கொண்டு ஒரு டிக்சனரி உருவாக்கப்பட்டுள்ளது. பின்னர் அந்த டிக்சனரியை Panel-க்குள் செலுத்தி பிரிண்ட் செய்யப்படுகிறது.
சீரீஸ், டேட்டாஃப்பிரேம் போன்று இதன் வெளிப்பாடு தரவுகளை மொத்தமாகக் காட்டாது. பேனலின் டைமென்ஷன் எத்தனை?, ஒவ்வொரு பரிமாணத்திலும் எத்தனை இன்டெக்ஸ் மற்றும் columns உள்ளன?, அவைகளின் range எதிலிருந்து எதுவரை அமைந்துள்ளன ஆகியவற்றை மட்டுமே வெளிப்படுத்தும். கீழே காலாண்டு, அரையாண்டு என்று வகைப்படுத்த கூடிய பாகுபாடு மொத்தம் 4 உள்ளது என்பதை வெளிப்படுத்தியுள்ளது. பின் அவை ஒவ்வொன்றிலும் சேமிக்கப்பட்டுள்ள மாணவர்கள் 3 என்பதை மேஜர் ஆக்சிஸ் ஆகவும், பாடங்கள் 5 என்பதை மைனர் ஆக்சிஸ் ஆகவும் வெளிப்படுத்தியுள்ளது. அடுத்ததாக அவைகள் ஒவ்வொன்றும் எதிலிருந்து எதுவரை அமைந்துள்ளன எனும் range-ஐ வெளிப்படுத்தியுள்ளது.
d1 = {‘Midterm’: pd.DataFrame([[90,83,67,83,45],[68,89,75,56,73],[58,88,60,90,100]]),
‘Quarterly’: pd.DataFrame([[35,44,65,56,79],[85,55,84,50,99],[65,90,87,69,78]]),
‘Half early’: pd.DataFrame([[80,78,90,68,66],[35,89,67,79,90],[67,89,59,90,45]]),
‘Annual’: pd.DataFrame([[90,94,58,69,84],[95,68,57,89,96],[90,58,67,96,78]])}
p = pd.Panel(d1)
print (p)
<class ‘pandas.core.panel.Panel’>
Dimensions: 4 (items) x 3 (major_axis) x 5 (minor_axis)
Items axis: Midterm to Annual
Major_axis axis: 0 to 2
Minor_axis axis: 0 to 4
பேனலின் ஏதாவது ஒரு item-ஐ மட்டும் தேர்வு செய்து பார்க்க விரும்பினால் அது பின்வருமாறு அமையும்.
print (p[‘Midterm’])
0 1 2 3 4
0 90 83 67 83 45
1 68 89 75 56 73
2 58 88 60 90 100
ஒவ்வொரு பருவத்திலும் இரண்டாவது மாணவன் மட்டும் பெற்ற மதிப்பெண்களைக் காண விரும்பினால், மேஜர் ஆக்சிஸ் என்பதற்குள் இரண்டாவது மாணவனுக்கான இன்டெக்ஸ் எண்ணைக் கொடுத்து பிரிண்ட் செய்து பார்க்கவும்.
print (p.major_xs(1))
Midterm Quarterly Half early Annual
0 68 85 35 95
1 89 55 89 68
2 75 84 67 57
3 56 50 79 89
4 73 99 90 96
அதே போல ஒவ்வொரு பருவத்திலும் இரண்டாவது பாடத்தில் மட்டும் பெற்ற மதிப்பெண்களைக் காண விரும்பினால், மைனர் ஆக்சிஸ் என்பதற்குள் இரண்டாவது பாடத்திற்கான இன்டெக்ஸ் எண்ணை மட்டும் கொடுத்து பிரிண்ட் செய்து பார்க்கவும்.
print (p.minor_xs(1))
Midterm Quarterly Half early Annual
0 83 44 78 94
1 89 55 89 68
2 88 90 89 58