পাইথন-এ ডেটা অ্যানালাইটিক্স

পাইথন নিয়ে চারপাশে অনেক কথা বার্তা – অনেকেই এই ল্যাঙ্গুয়েজটা শেখার চেষ্টা করছে – এটা একটা ভাল দিক । আমার নিজের প্রোগ্রামিং এর হাতেখড়ি সি ল্যাঙ্গুয়েজ দিয়ে – তাই নিজে যখন পাইথন এর বেসিক শেখা শুরু করলাম আশ্চর্যজনক ভাবে আবিষ্কার করলাম এর সাবলীলতা (Simplicity)  – অনেক কাজই ঠিক আমরা যেভাবে চিন্তা করি সেভাবে লিখে ফেলা যায় । শুধু বারবার খচখচ লাগছিল সেমিকোলন আর ট্যাব দিয়ে এলাইনমেন্ট এর ব্যাপারটা – যা অবশ্য দু একদিন পরই অভ্যাস হয়ে যায়।

পাইথন এর প্রাথমিক ব্যাপারগুলো নিয়ে কিছু বলার আর তেমন দরকার আছে বলে আমার মনে হয় না। কারো প্রয়োজন হলে বিস্তারিত দেখে নেয়া যাবে এখান থেকে –

১। পাইথন পরিচিতি   

২। প্রাথমিক ধারনা  

আমার এই লিখাটা মূলত তিনটি বা চারটি পর্বে ভাগ করার ইচ্ছে। এই পর্বে আলোচনা করব NumPy এর একেবারের শুরুর কিছু ব্যাপার। সামনের পর্ব গুলোতে  থাকবে NumPy আর Pandas নিয়ে বিস্তারিত কিছু যা মূলত ডাটা এনালাইটিকস এর কাজে ব্যাবহৃত হয়।

তার আগে কিন্তু আমাদের পাইথন এর বেসিক কিছু ডাটা স্ট্রাকচার নিয়ে হাতেকলমে কাজ করে আসতে হবে ,যেমন list, dict, tuples, sets, strings । আমি নিশ্চিত তোমরা এই জিনিসগুলো পড়েই ডাটা এনালাইটিক্স এর কাজে হাত দিবে –
চটপট একটা পুরনো পড়া পড়ে ফেলতে পারি আমরা –
List এ  append আর  extend এর পার্থক্য কি ?

NumPy (সচরাচর উচ্চারন “নামপাই”) একটি লাইব্রেরি এবং শব্দটা এসেছে Numerical Python থেকে । এই লাইব্রেরি এন-ডাইমেনশনাল Array , বিভিন্ন জটিল গাণিতিক ফাংশন এর কাজ ( যেমন  Fourier transforms )-সহ আরো অনেক ধরনের গাণিতিক কাজ করার ক্ষেত্রে ওস্তাদ ।

ঢাকায় এখন বিভিন্ন এপভিত্তিক পরিবহন খুব জনপ্রিয় – আমরা সবাই উবার, পাঠাও, মুভ বা স্যাম নামে এইসব সেবা ব্যাবহার করছি আর সেইরকম একটি সার্ভিস-এর তিনজন ব্যবহারকারীর কিছু ডেটা আছে, সেইরকম তিনটা ফাইল নিয়ে আমরা কাজ শুরু করতে পারি।
আমরা সেখান থেকে তিনটা জিনিস বের করতে চাইব :
১। অফিস থেকে কে কখন রাইড নিয়ে বের হয়ে গিয়েছে ?
২। তাদের ভাড়ার Standard Deviation দেখতে কেমন ?
আর
৩। চেষ্টা করব বের করতে এই তিনজনের মাঝে কোন বাইক ড্রাইভার কমন ছিলেন কিনা, সম্ভব হলে সেটা গ্রাফে দেখা (যদিও গ্রাফে দেখার ব্যাপারটা এর সাথে তেমন একটা সম্পর্কিত না – কিন্তু দেখতে সুন্দর লাগে)।

এখান থেকে ফাইলগুলো নামিয়ে নেয়া যাবে (আপাতত আমি একটা ফাইল রেখেছি …পরবর্তী পর্বে বাকীগুলো পাওয়া যাবে)। 

প্রথমেই RidersData1 ফাইলটি পড়ে নিয়ে পাইথন-এ এর ডাটা দেখে নেই – 

import csv
with open("C:\Users\Asus\Desktop\RidersData1.csv", 'r') as f:
riders_data = list(csv.reader(f, delimiter=","))
print(riders_data[:2])

দেখে নেই যাত্রীর ভাড়ার পরিমান কত ছিল তার ভ্রমণের দিনগুলোতে

fare = [item[10] for item in riders_data[1:]]
print(fare)

তার মোট পরিমান কত ছিল ?

fare = [int(item[10]) for item in riders_data[1:]]
print(sum(fare))

>> ৫১৮৫ টাকা

এবার আমরা Numpy ইন্সটল করে কাজটা শুরু করি-
( Numpy ইন্সটল করার ধাপগুলো সুন্দর করে বলে দেয়া আছে এখানে

import numpy as np
riders_data = np.genfromtxt("D:\RidersData1.csv", delimiter=",", skip_header=1)

 

fare = [int(item[10]) for item in riders_data[0:]]
print(sum(fare))

এখন যদি Numpy ব্যাবহার করে Array তৈরী করি যা আসলে Array এর Array তৈরী করবে ।

riders_data_array = np.array(riders_data[1:], dtype=np.int)

এখানে dtype=np.int  আসলে নিশ্চিত করবে যেন ডাটা গুলোকে  String থেকে int এ রুপান্তর(convert) করে নেয়।

এখন আমরা যদি Array টা দেখতে চাই?

ইনপুট
 print(riders_data_array)
আউটপুট
 [[4445115     143    3180   15536       5]
  [4341383     167    3067   15704       5]
  [4153972     163    2383   15692       5]
  [4052253     167    3055   15703       5]
  [3935184     191    1520   12760       5]
  [3896665     202    2251   13224       5]
  [3807622     141    2611   15722       5]
  [3723194     236    2063   16165       5]
  [3650954     233    2411   15695       5]
  [3592384     262    5845   15721       5]
  [3538266     204    4802   11583       5]
  [3496106     242    3462   15698       5]
  [3455465     235    2588   15695       5]
  [3361305     229    1883   15724       5]
  [3353856     230    2173   15574       5]
  [3342150     234    2483   15700       5]
  [3302407     217    2461   15716       5]
  [3263818     163    2393   15688       5]
  [3227817     163    2270   15691       5]
  [3189625     166    2976   15635       5]
  [3118401     244    3155   16076       5]
  [3056517     245    3161   12712       5]
  [2966371     191    1882   12546       5]
  [2904590     242    2844   16122       5]
  [2872271     135    2652   15900       5]]

আমরা এখন যেকোন রকমের Array তৈরি করতে পারি

ইনপুট
 any_array = np.ones((5,6))
 print(any_array)
আউটপুট
 [[ 1.  1.  1.  1.  1.  1.]
  [ 1.  1.  1.  1.  1.  1.]
  [ 1.  1.  1.  1.  1.  1.]
  [ 1.  1.  1.  1.  1.  1.]
  [ 1.  1.  1.  1.  1.  1.]]

এখানে np.ones((5,6)) তে 5 এবং 6  যথাক্রমে row আর column বুঝাচ্ছে ।ঠিক একই রকম ভাবে একটা array তৈরি করতে পারি যেটার সবগুলো ভ্যালু হবে zero।

ইনপুট
 any_array = np.zeros((5,6))
 print(any_array)
আউটপুট
 [[ 0.  0.  0.  0.  0.  0.]
  [ 0.  0.  0.  0.  0.  0.]
  [ 0.  0.  0.  0.  0.  0.]
  [ 0.  0.  0.  0.  0.  0.]
  [ 0.  0.  0.  0.  0.  0.]]

আর এখন যদি চিন্তা করি একটা array তৈরি করব যার ভ্যালুগুলো হবে যে কোন নাম্বার বা Random ।

ইনপুট
 any_array = np.random.rand(2,3)
 print(any_array)
আউটপুট
 [[ 0.58870582  0.75596673  0.48148491]
  [ 0.39392526  0.16046594  0.34446376]]

এই পর্যায়ে এসে আমি দুটো বাড়ির কাজ দিতে চাই – 

১। Random নাম্বারের একটা array তৈরি করতে হবে যেখানে সংখ্যাগুলো হবে পূর্ণমান বা integer
২। any_array = np.eye(4)  – এই কোডটি run করলে যেই আউটপুট আসল তার মানে কি ?

স্লাইসিং (Slicing) :

শব্দটা শুনেই বুঝা যাচ্ছে – যে কোন বড় কোন Array থেকে কিছু অংশ কেটে নেয়াই slicing । যেমন আমাদের মূল ডাটা এর array ( riders_data_array)  যা দেখতে এমন

[[4445115     143    3180   15536       5]
  [4341383     167    3067   15704       5]
  [4153972     163    2383   15692       5]
  [4052253     167    3055   15703       5]
  [3935184     191    1520   12760       5]
  [3896665     202    2251   13224       5]
  [3807622     141    2611   15722       5]
  [3723194     236    2063   16165       5]
  [3650954     233    2411   15695       5]
  [3592384     262    5845   15721       5]
  [3538266     204    4802   11583       5]
  [3496106     242    3462   15698       5]
  [3455465     235    2588   15695       5]
  [3361305     229    1883   15724       5]
  [3353856     230    2173   15574       5]
  [3342150     234    2483   15700       5]
  [3302407     217    2461   15716       5]
  [3263818     163    2393   15688       5]
  [3227817     163    2270   15691       5]
  [3189625     166    2976   15635       5]
  [3118401     244    3155   16076       5]
  [3056517     245    3161   12712       5]
  [2966371     191    1882   12546       5]
  [2904590     242    2844   16122       5]
  [2872271     135    2652   15900       5]]

আমি যদি এখন এখান থেকে ২য় কলাম এর প্রথম ৫ টা ডাটা দেখতে চাই –

ইনপুট
 print(riders_data_array[0:5,1])
আউটপুট
 [143  167   163   167   191]

এখানে [0:5,1] অংশ টা বুঝাচ্ছে – প্রথম ৫ টি row এর ডাটা এবং তা ২য় column এর। এখানে যদি 0 এর পরিবর্তে আমি 1 লিখি – তারমানে তখন প্রথম row বাদ দিয়ে চারটি ডাটা নিবে এবং আউটপুট হবে এরকম

[167   163    167     191]

NumPy নিয়ে পরবর্তী পর্বটি কিছুদিন পর প্রকাশিত হবে। ধন্যবাদ।