কম্পিউটার টিউটোরিয়াল

পাইথনে ডেটা অ্যানালিসিস ও ভিজুয়ালাইজেশন (Python Data Analysis and Visualization)

Pandas ডেটা সায়েন্স ও অ্যানালিটিক্সের জন্য পাইথনের সবচেয়ে জনপ্রিয় লাইব্রেরির একটি। Pandas লাইব্রেরি ডেটা ম্যানিপুলেশন, অ্যানালিসিস ও ক্লিনিংয়ের জন্য ব্যবহৃত হয়। এটি নিম্ন-স্তরের NumPy-এর ওপর একটি হাই-লেভেল অ্যাবস্ট্রাকশন যা পুরো C-তে লেখা। এই সেকশনে আমরা ডেটা অ্যানালিস্ট বা ডেটা সায়েন্টিস্ট হিসেবে জানা দরকার সবচেয়ে গুরুত্বপূর্ণ (সবচেয়ে বেশি ব্যবহৃত) বিষয়গুলো আলোচনা করব।

লাইব্রেরি ইনস্টলেশন

প্রয়োজনীয় লাইব্রেরি pip ব্যবহার করে ইনস্টল করা যায়, কমান্ড টার্মিনালে নিচের কমান্ড চালান:

pip install pandas

DataFrame এবং Series

পহলে প্যান্ডাসের দুটি মূল বেসিক ডেটা স্ট্রাকচার বুঝতে হবে: DataFrame এবং Series। প্যান্ডাসে মাস্টারি পাওয়ার জন্য এই দুটি ডেটা স্ট্রাকচার বুঝতে হয়।

Series

Series একটি অবজেক্ট যা পাইথনের বিল্ট-ইন লিস্টের মতো কিন্তু প্রতিটি এলিমেন্ট বা ইনডেক্সের সাথে সংশ্লিষ্ট লেবেল থাকায় আলাদা।

>>> import pandas as pd 
>>> my_series = pd.Series([12, 24, 36, 48, 60, 72, 84]) 
>>> my_series 
0    12 
1    24 
2    36 
3    48 
4    60 
5    72 
6    84 
dtype: int64

উপরের আউটপুটে বাম পাশে 'index' এবং ডান পাশে 'value'। প্রতিটি Series অবজেক্টের ডেটা টাইপ (dtype) থাকে, এখানে int64।

ইনডেক্স নম্বর দিয়ে এলিমেন্ট রিট্রিভ করা যায়:

>>> my_series[6] 
84

স্পষ্টভাবে ইনডেক্স (লেবেল) দিতে হলে:

>>> my_series = pd.Series([12, 24, 36, 48, 60, 72, 84], index=['ind0', 'ind1', 'ind2', 'ind3', 'ind4', 'ind5', 'ind6']) 
>>> my_series 
ind0    12 
ind1    24 
ind2    36 
ind3    48 
ind4    60 
ind5    72 
ind6    84 
dtype: int64

একসাথে কয়েকটি এলিমেন্ট তাদের ইনডেক্স দিয়ে রিট্রিভ বা গ্রুপ অ্যাসাইন করা খুব সহজ:

>>> my_series[['ind0', 'ind3', 'ind6']] 
ind0    12 
ind3    48 
ind6    84 
dtype: int64 
>>> my_series[['ind0', 'ind3', 'ind6']] = 36 
>>> my_series 
ind0    36 
ind1    24 
ind2    36 
ind3    36 
ind4    60 
ind5    72 
ind6    36 
dtype: int64

ফিল্টারিং ও ম্যাথ অপারেশনও সহজ:

>>> my_series[my_series > 24] 
ind0    36 
ind2    36 
ind3    36 
ind4    60 
ind5    72 
ind6    36 
dtype: int64 
>>> my_series[my_series < 24] * 2 
Series([], dtype: int64) 
>>> my_series 
ind0    36 
ind1    24 
ind2    36 
ind3    36 
ind4    60 
ind5    72 
ind6    36 
dtype: int64

Series-এ অন্যান্য সাধারণ অপারেশন:

>>> # ডিকশনারির মতো কাজ করে 
>>> my_series1 = pd.Series({'a': 9, 'b': 18, 'c': 27, 'd': 36}) 
>>> my_series1 
a     9 
b    18 
c    27 
d    36 
dtype: int64 
>>> # লেবেল অ্যাট্রিবিউট 
>>> my_series1.name = 'Numbers' 
>>> my_series1.index.name = 'letters' 
>>> my_series1 
letters 
a     9 
b    18 
c    27 
d    36 
Name: Numbers, dtype: int64 
>>> # ইনডেক্স পরিবর্তন 
>>> my_series1.index = ['w', 'x', 'y', 'z'] 
>>> my_series1 
w     9 
x    18 
y    27 
z    36 
Name: Numbers, dtype: int64

DataFrame

DataFrame একটি টেবিলের মতো আচরণ করে কারণ এতে সারি ও কলাম থাকে। DataFrame-এর প্রতিটি কলাম একটি Series অবজেক্ট এবং সারিগুলো Series-এ থাকা এলিমেন্টগুলোতে গঠিত।

DataFrame পাইথনের বিল্ট-ইন ডিকশনারি দিয়ে কনস্ট্রাক্ট করা যায়:

>>> df = pd.DataFrame({ 
    'Country': ['China', 'India', 'Indonesia', 'Pakistan'], 
    'Population': [1420062022, 1368737513, 269536482, 204596442], 
    'Area': [9388211, 2973190, 1811570, 770880] 
}) 
>>> df 
        Area       Country   Population 
0  9388211        China  1420062022 
1  2973190        India  1368737513 
2  1811570    Indonesia   269536482 
3   770880      Pakistan   204596442 
>>> df['Country'] 
0      China 
1      India 
2  Indonesia 
3   Pakistan 
Name: Country, dtype: object 
>>> df.columns 
Index(['Area', 'Country', 'Population'], dtype='object') 
>>> df.index 
RangeIndex(start=0, stop=4, step=1)

এলিমেন্ট অ্যাক্সেস

সারি ইনডেক্স স্পষ্টভাবে দেয়ার অনেক উপায় রয়েছে।

>>> df = pd.DataFrame({ 
    'Country': ['China', 'India', 'Indonesia', 'Pakistan'], 
    'Population': [1420062022, 1368737513, 269536482, 204596442], 
    'Landarea': [9388211, 2973190, 1811570, 770880] 
}, index=['CHA', 'IND', 'IDO', 'PAK']) 
>>> df 
       Country  Landarea  Population 
CHA    China   9388211  1420062022 
IND    India   2973190  1368737513 
IDO  Indonesia  1811570   269536482 
PAK  Pakistan   770880   204596442 
>>> df.index = ['CHI', 'IND', 'IDO', 'PAK'] 
>>> df.index.name = 'Country Code' 
>>> df 
       Country  Landarea  Population 
Country Code 
CHI      China   9388211  1420062022 
IND      India   2973190  1368737513 
IDO    Indonesia  1811570   269536482 
PAK    Pakistan   770880   204596442 
>>> df['Country'] 
Country Code 
CHI      China 
IND      India 
IDO    Indonesia 
PAK    Pakistan 
Name: Country, dtype: object

ইনডেক্স ব্যবহার করে সারি অ্যাক্সেস করার বিভিন্ন পদ্ধতি:

  • .loc ব্যবহার করে ইনডেক্স লেবেল দিয়ে
  • .iloc ব্যবহার করে ইনডেক্স নম্বর দিয়ে
>>> df.loc['IND'] 
Country      India 
Landarea   2973190 
Population 1368737513 
Name: IND, dtype: object 
>>> df.iloc[1] 
Country      India 
Landarea   2973190 
Population 1368737513 
Name: IND, dtype: object 
>>> df.loc[['CHI', 'IND'], 'Population'] 
Country Code 
CHI    1420062022 
IND    1368737513 
Name: Population, dtype: int64

ফাইল পড়া ও লেখা

Pandas CSV, XML, HTML, Excel, SQL, JSON সহ অনেক জনপ্রিয় ফাইল ফরম্যাট সমর্থন করে। সবচেয়ে সাধারণ CSV ফাইল ফরম্যাট।

CSV ফাইল পড়তে:

>>> df = pd.read_csv('GDP.csv', sep=',')

নেমড আর্গুমেন্ট sep CSV ফাইলের সেপারেটর ক্যারেক্টার নির্দেশ করে (এখানে GDP.csv)।

এগ리게েশন ও গ্রুপিং (Aggregating and Grouping)

Pandas-এ ডেটা গ্রুপ করতে .groupby মেথড ব্যবহার করা হয়। এগ리게েশন ও গ্রুপিং প্রদর্শনের জন্য Titanic ডেটাসেট ব্যবহার করা হয়েছে, নিচের লিংক থেকে পাওয়া যাবে:

https://yadi.sk/d/TfhJdE2k3EyALt

>>> titanic_df = pd.read_csv('titanic.csv') 
>>> print(titanic_df.head()) 
PassengerID   Name  PClass Age Sex Survived SexCode 
0  1  Allen, Miss Elisabeth Walton  1st  29.00 female  1  1 
1  2  Allison, Miss Helen Loraine  1st  2.00  female  0  1 
2  3  Allison, Mr Hudson Joshua Creighton  1st  30.00 male  0  0 
3  4  Allison, Mrs Hudson JC (Bessie Waldo Daniels)  1st  25.00 female  0  1 
4  5  Allison, Master Hudson Trevor  1st  0.92  male  1  0

কতজন যাত্রী (নারী ও পুরুষ) বাঁচেছে এবং কতজন বাঁচেনি, .groupby ব্যবহার করে বের করি:

>>> print(titanic_df.groupby(['Sex', 'Survived'])['PassengerID'].count()) 
Sex     Survived 
female  0           154 
        1           308 
male    0           709 
        1           142 
Name: PassengerID, dtype: int64

কেবিন ক্লাস অনুযায়ী ডেটা:

>>> print(titanic_df.groupby(['PClass', 'Survived'])['PassengerID'].count()) 
PClass  Survived 
*       0             1 
1st     0           129 
        1           193 
2nd     0           160 
        1           119 
3rd     0           573 
        1           138 
Name: PassengerID, dtype: int64

টাইম সিরিজ অ্যানালিসিস (Time Series Analysis) প্যান্ডাস দিয়ে

Pandas মূলত টাইম সিরিজ ডেটা অ্যানালাইজ করার জন্য তৈরি। উদাহরণস্বরূপ Amazon ৫ বছরের স্টক প্রাইস ব্যবহার করা হয়েছে। নিচের লিংক থেকে ডাউনলোড করা যাবে:

https://finance.yahoo.com/quote/AMZN/history?period1=1397413800&period2=1555180200&interval=1mo&filter=history&frequency=1mo

>>> import pandas as pd 
>>> amzn_df = pd.read_csv('AMZN.csv', index_col='Date', parse_dates=True) 
>>> amzn_df = amzn_df.sort_index() 
>>> print(amzn_df.info()) 
 
DatetimeIndex: 62 entries, 2014-04-01 to 2019-04-12 
Data columns (total 6 columns): 
Open       62 non-null object 
High       62 non-null object 
Low        62 non-null object 
Close      62 non-null object 
Adj Close  62 non-null object 
Volume     62 non-null object 
dtypes: object(6) 
memory usage: 1.9+ KB 
None

উপরে Date কলাম দিয়ে DatetimeIndex-সহ DataFrame তৈরি করা হয়েছে এবং সেটি সোর্ট করা হয়েছে।

গড় ক্লোজিং প্রাইস:

>>> amzn_df.loc['2015-04', 'Close'].mean() 
421.779999

ভিজুয়ালাইজেশন (Visualization)

Pandas ভিজুয়ালাইজ করতে matplotlib লাইব্রেরি ব্যবহার করা যায়। Amazon স্টক হিস্টリカল ডেটাসেট নিলে নির্দিষ্ট টাইম পিরিয়ডের প্রাইস মুভমেন্ট গ্রাফে দেখা যাবে।

>>> import matplotlib.pyplot as plt 
>>> df = pd.read_csv('AMZN.csv', index_col='Date', parse_dates=True) 
>>> new_df = df.loc['2014-06':'2018-08', ['Close']] 
>>> new_df = new_df.astype(float) 
>>> new_df.plot() 
<matplotlib.axes._subplots.AxesSubplot object at 0x0B9B8930> 
>>> plt.show()

পাইথনে ডেটা অ্যানালিসিস ও ভিজুয়ালাইজেশন (Python Data Analysis and Visualization)

  1. পাইথনে পান্ডাজ এবং ম্যাটপ্লটলিব দিয়ে ডেটা অ্যানালাইসিস এবং ভিজ্যুয়ালাইজেশন

  2. পাইথনে বিভিন্ন চার্ট দিয়ে ডেটা ভিজ্যুয়ালাইজেশন

  3. পাইথনে ডেটা অ্যানালাইসিস ও ভিজ্যুয়ালাইজেশন (pandas, matplotlib)

  4. পাইথনে এক্সপ্লোরেটরি ডেটা অ্যানালিসিস (Exploratory Data Analysis)