পাইথন নিয়ে চারপাশে অনেক কথা বার্তা – অনেকেই এই ল্যাঙ্গুয়েজটা শেখার চেষ্টা করছে – এটা একটা ভাল দিক । আমার নিজের প্রোগ্রামিং এর হাতেখড়ি সি ল্যাঙ্গুয়েজ দিয়ে – তাই নিজে যখন পাইথন এর বেসিক শেখা শুরু করলাম আশ্চর্যজনক ভাবে আবিষ্কার করলাম এর সাবলীলতা (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 নিয়ে পরবর্তী পর্বটি কিছুদিন পর প্রকাশিত হবে। ধন্যবাদ।