26 KiB
Scikit-learn ব্যবহার করে একটি রিগ্রেশন মডেল তৈরি করুন: ডেটা প্রস্তুত এবং ভিজ্যুয়ালাইজ করুন
ইনফোগ্রাফিক: দাসানি মাদিপল্লি
পূর্ব-লেকচার কুইজ
এই পাঠটি R-এ উপলব্ধ!
ভূমিকা
আপনি যখন Scikit-learn ব্যবহার করে মেশিন লার্নিং মডেল তৈরি করতে শুরু করবেন, তখন আপনার ডেটা থেকে সঠিক প্রশ্ন জিজ্ঞাসা করার জন্য প্রস্তুত হতে হবে। ডেটার সাথে কাজ করার সময় এবং ML সমাধান প্রয়োগ করার সময়, সঠিক প্রশ্ন জিজ্ঞাসা করা অত্যন্ত গুরুত্বপূর্ণ যাতে আপনার ডেটাসেটের সম্ভাবনাগুলি সঠিকভাবে উন্মোচিত হয়।
এই পাঠে আপনি শিখবেন:
- কীভাবে মডেল তৈরির জন্য আপনার ডেটা প্রস্তুত করবেন।
- কীভাবে Matplotlib ব্যবহার করে ডেটা ভিজ্যুয়ালাইজ করবেন।
আপনার ডেটার সঠিক প্রশ্ন জিজ্ঞাসা করা
আপনার উত্তর পেতে চাওয়া প্রশ্নটি নির্ধারণ করবে আপনি কোন ধরনের ML অ্যালগরিদম ব্যবহার করবেন। এবং আপনি যে উত্তরটি পাবেন তার গুণমান আপনার ডেটার প্রকৃতির উপর ব্যাপকভাবে নির্ভর করবে।
এই পাঠের জন্য প্রদত্ত ডেটা দেখুন। আপনি এই .csv ফাইলটি VS Code-এ খুলতে পারেন। দ্রুত স্কিম করলে দেখা যায় যে এখানে ফাঁকা স্থান এবং স্ট্রিং ও সংখ্যার মিশ্রণ রয়েছে। এছাড়াও একটি অদ্ভুত কলাম রয়েছে যার নাম 'Package', যেখানে ডেটা 'sacks', 'bins' এবং অন্যান্য মানের মিশ্রণ। ডেটা আসলে একটু বিশৃঙ্খল।
🎥 উপরের ছবিতে ক্লিক করুন এই পাঠের জন্য ডেটা প্রস্তুত করার একটি সংক্ষিপ্ত ভিডিও দেখতে।
আসলে, সম্পূর্ণ প্রস্তুত একটি ডেটাসেট পাওয়া খুবই বিরল যা সরাসরি ML মডেল তৈরির জন্য ব্যবহার করা যায়। এই পাঠে, আপনি স্ট্যান্ডার্ড Python লাইব্রেরি ব্যবহার করে একটি কাঁচা ডেটাসেট প্রস্তুত করার পদ্ধতি শিখবেন। এছাড়াও, আপনি ডেটা ভিজ্যুয়ালাইজ করার বিভিন্ন কৌশল শিখবেন।
কেস স্টাডি: 'কুমড়ার বাজার'
এই ফোল্ডারে আপনি মূল data
ফোল্ডারে US-pumpkins.csv নামে একটি .csv ফাইল পাবেন, যেখানে 1757 লাইনের ডেটা রয়েছে যা শহর অনুযায়ী গোষ্ঠীবদ্ধ কুমড়ার বাজার সম্পর্কে তথ্য প্রদান করে। এটি Specialty Crops Terminal Markets Standard Reports থেকে প্রাপ্ত কাঁচা ডেটা, যা মার্কিন যুক্তরাষ্ট্রের কৃষি বিভাগের দ্বারা বিতরণ করা হয়।
ডেটা প্রস্তুত করা
এই ডেটা পাবলিক ডোমেইনে রয়েছে। এটি USDA ওয়েবসাইট থেকে শহর অনুযায়ী আলাদা ফাইল হিসেবে ডাউনলোড করা যায়। অনেক আলাদা ফাইল এড়াতে, আমরা সমস্ত শহরের ডেটা একত্রিত করে একটি স্প্রেডশিটে রেখেছি, ফলে আমরা ইতিমধ্যেই ডেটা কিছুটা প্রস্তুত করেছি। এবার, ডেটার দিকে আরও গভীরভাবে নজর দিন।
কুমড়ার ডেটা - প্রাথমিক পর্যবেক্ষণ
এই ডেটা সম্পর্কে আপনি কী লক্ষ্য করেন? আপনি ইতিমধ্যেই দেখেছেন যে এখানে স্ট্রিং, সংখ্যা, ফাঁকা স্থান এবং অদ্ভুত মানের মিশ্রণ রয়েছে যা আপনাকে বুঝতে হবে।
রিগ্রেশন কৌশল ব্যবহার করে আপনি এই ডেটা থেকে কী প্রশ্ন করতে পারেন? যেমন, "একটি নির্দিষ্ট মাসে বিক্রয়ের জন্য একটি কুমড়ার দাম পূর্বাভাস দিন।" ডেটার দিকে আবার তাকালে, আপনি লক্ষ্য করবেন যে এই কাজের জন্য প্রয়োজনীয় ডেটা কাঠামো তৈরি করতে কিছু পরিবর্তন করতে হবে।
অনুশীলন - কুমড়ার ডেটা বিশ্লেষণ করুন
চলুন Pandas ব্যবহার করি, (এর নাম Python Data Analysis
থেকে এসেছে) একটি টুল যা ডেটা আকৃতির জন্য খুবই কার্যকর, কুমড়ার ডেটা বিশ্লেষণ এবং প্রস্তুত করতে।
প্রথমে, অনুপস্থিত তারিখ পরীক্ষা করুন
আপনাকে প্রথমে অনুপস্থিত তারিখ পরীক্ষা করার জন্য কিছু পদক্ষেপ নিতে হবে:
- তারিখগুলোকে মাসের ফরম্যাটে রূপান্তর করুন (এগুলো US তারিখ, তাই ফরম্যাটটি
MM/DD/YYYY
)। - মাসটি একটি নতুন কলামে বের করুন।
Visual Studio Code-এ notebook.ipynb ফাইলটি খুলুন এবং স্প্রেডশিটটি একটি নতুন Pandas ডেটাফ্রেমে আমদানি করুন।
-
প্রথম পাঁচটি সারি দেখতে
head()
ফাংশন ব্যবহার করুন।import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ শেষ পাঁচটি সারি দেখতে আপনি কোন ফাংশন ব্যবহার করবেন?
-
বর্তমান ডেটাফ্রেমে অনুপস্থিত ডেটা আছে কিনা তা পরীক্ষা করুন:
pumpkins.isnull().sum()
অনুপস্থিত ডেটা রয়েছে, তবে এটি হয়তো এই কাজের জন্য গুরুত্বপূর্ণ নাও হতে পারে।
-
আপনার ডেটাফ্রেমটি আরও সহজে কাজ করার জন্য, শুধুমাত্র প্রয়োজনীয় কলামগুলো নির্বাচন করুন,
loc
ফাংশন ব্যবহার করে যা মূল ডেটাফ্রেম থেকে একটি নির্দিষ্ট সারি এবং কলাম গ্রুপ বের করে। নিচের ক্ষেত্রে:
এর অর্থ "সব সারি।"columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
দ্বিতীয়ত, কুমড়ার গড় দাম নির্ধারণ করুন
একটি নির্দিষ্ট মাসে কুমড়ার গড় দাম নির্ধারণ করার জন্য কীভাবে চিন্তা করবেন? এই কাজের জন্য আপনি কোন কলামগুলো বাছাই করবেন? ইঙ্গিত: আপনাকে ৩টি কলাম দরকার হবে।
সমাধান: Low Price
এবং High Price
কলামের গড় নিয়ে নতুন Price কলামটি পূরণ করুন এবং Date কলামটি শুধুমাত্র মাস দেখানোর জন্য রূপান্তর করুন। সৌভাগ্যক্রমে, উপরের পরীক্ষার অনুযায়ী, তারিখ বা দামের জন্য কোনো অনুপস্থিত ডেটা নেই।
-
গড় নির্ধারণ করতে নিম্নলিখিত কোড যোগ করুন:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ আপনি
print(month)
ব্যবহার করে যেকোনো ডেটা পরীক্ষা করতে পারেন। -
এখন, আপনার রূপান্তরিত ডেটা একটি নতুন Pandas ডেটাফ্রেমে কপি করুন:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
আপনার ডেটাফ্রেম প্রিন্ট করলে আপনি একটি পরিষ্কার, সুশৃঙ্খল ডেটাসেট দেখতে পাবেন যার উপর আপনি আপনার নতুন রিগ্রেশন মডেল তৈরি করতে পারেন।
কিন্তু অপেক্ষা করুন! এখানে কিছু অদ্ভুত ব্যাপার আছে
যদি আপনি Package
কলামের দিকে তাকান, তাহলে দেখবেন কুমড়াগুলো বিভিন্ন কনফিগারেশনে বিক্রি হয়। কিছু '1 1/9 bushel' পরিমাপে বিক্রি হয়, কিছু '1/2 bushel' পরিমাপে, কিছু প্রতি কুমড়া, কিছু প্রতি পাউন্ড, এবং কিছু বড় বাক্সে বিভিন্ন প্রস্থে।
কুমড়াগুলোকে ধারাবাহিকভাবে ওজন করা খুবই কঠিন
মূল ডেটার দিকে গভীরভাবে তাকালে দেখা যায় যে Unit of Sale
কলামে 'EACH' বা 'PER BIN' সমান মান রয়েছে, এবং Package
টাইপ প্রতি ইঞ্চি, প্রতি বিন, বা 'each'। কুমড়াগুলোকে ধারাবাহিকভাবে ওজন করা খুবই কঠিন, তাই চলুন Package
কলামে 'bushel' স্ট্রিং থাকা কুমড়াগুলো বাছাই করি।
-
ফাইলের শীর্ষে, প্রাথমিক .csv আমদানির নিচে একটি ফিল্টার যোগ করুন:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
এখন ডেটা প্রিন্ট করলে আপনি দেখতে পাবেন যে আপনি শুধুমাত্র 415 বা তার বেশি সারি পাচ্ছেন যেখানে কুমড়াগুলো bushel হিসেবে বিক্রি হয়।
কিন্তু অপেক্ষা করুন! আরও একটি কাজ করতে হবে
আপনি কি লক্ষ্য করেছেন যে bushel পরিমাণটি প্রতি সারিতে পরিবর্তিত হয়? আপনাকে দামকে স্বাভাবিক করতে হবে যাতে আপনি bushel অনুযায়ী দাম দেখাতে পারেন, তাই এটি মানক করতে কিছু গণনা করুন।
-
নতুন_pumpkins ডেটাফ্রেম তৈরি করার ব্লকের পরে এই লাইনগুলো যোগ করুন:
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
✅ The Spruce Eats অনুযায়ী, একটি bushel-এর ওজন উৎপাদনের ধরন অনুযায়ী পরিবর্তিত হয়, কারণ এটি একটি ভলিউম পরিমাপ। "উদাহরণস্বরূপ, একটি bushel টমেটোর ওজন 56 পাউন্ড হওয়া উচিত... পাতা এবং সবুজ শাক বেশি জায়গা নেয় কম ওজন নিয়ে, তাই একটি bushel পালং শাকের ওজন মাত্র 20 পাউন্ড।" এটি বেশ জটিল! চলুন bushel থেকে পাউন্ড রূপান্তর করার ঝামেলা এড়িয়ে bushel অনুযায়ী দাম নির্ধারণ করি। তবে কুমড়ার bushel নিয়ে এই অধ্যয়নটি দেখায় যে আপনার ডেটার প্রকৃতি বোঝা কতটা গুরুত্বপূর্ণ!
এখন, আপনি bushel পরিমাপের ভিত্তিতে ইউনিট অনুযায়ী দাম বিশ্লেষণ করতে পারেন। ডেটা আবার প্রিন্ট করলে আপনি দেখতে পাবেন এটি কীভাবে মানক হয়েছে।
✅ আপনি কি লক্ষ্য করেছেন যে অর্ধ-bushel হিসেবে বিক্রি হওয়া কুমড়াগুলো খুবই ব্যয়বহুল? আপনি কি এর কারণ খুঁজে বের করতে পারেন? ইঙ্গিত: ছোট কুমড়াগুলো বড়গুলোর তুলনায় অনেক বেশি ব্যয়বহুল, সম্ভবত কারণ একটি বড় ফাঁপা পাই কুমড়ার দ্বারা নেওয়া অব্যবহৃত জায়গার তুলনায় bushel-এ অনেক বেশি ছোট কুমড়া থাকে।
ভিজ্যুয়ালাইজেশন কৌশল
ডেটা বিজ্ঞানীর ভূমিকা হলো তারা যে ডেটার সাথে কাজ করছেন তার গুণমান এবং প্রকৃতি প্রদর্শন করা। এটি করতে তারা প্রায়ই আকর্ষণীয় ভিজ্যুয়ালাইজেশন তৈরি করেন, যেমন প্লট, গ্রাফ এবং চার্ট, যা ডেটার বিভিন্ন দিক দেখায়। এইভাবে, তারা সম্পর্ক এবং ফাঁকগুলো চাক্ষুষভাবে প্রদর্শন করতে সক্ষম হন যা অন্যথায় খুঁজে পাওয়া কঠিন।
🎥 উপরের ছবিতে ক্লিক করুন এই পাঠের জন্য ডেটা ভিজ্যুয়ালাইজ করার একটি সংক্ষিপ্ত ভিডিও দেখতে।
ভিজ্যুয়ালাইজেশন ডেটার জন্য সবচেয়ে উপযুক্ত মেশিন লার্নিং কৌশল নির্ধারণ করতেও সাহায্য করতে পারে। একটি স্ক্যাটারপ্লট যা একটি রেখা অনুসরণ করে বলে মনে হয়, উদাহরণস্বরূপ, এটি নির্দেশ করে যে ডেটা একটি লিনিয়ার রিগ্রেশন অনুশীলনের জন্য উপযুক্ত।
একটি ডেটা ভিজ্যুয়ালাইজেশন লাইব্রেরি যা Jupyter নোটবুকে ভালো কাজ করে তা হলো Matplotlib (যা আপনি আগের পাঠেও দেখেছেন)।
ডেটা ভিজ্যুয়ালাইজেশনের আরও অভিজ্ঞতা পেতে এই টিউটোরিয়ালগুলো দেখুন।
অনুশীলন - Matplotlib নিয়ে পরীক্ষা করুন
আপনি যে নতুন ডেটাফ্রেম তৈরি করেছেন তা প্রদর্শনের জন্য কিছু মৌলিক প্লট তৈরি করার চেষ্টা করুন। একটি মৌলিক লাইন প্লট কী দেখাবে?
-
ফাইলের শীর্ষে, Pandas আমদানির নিচে Matplotlib আমদানি করুন:
import matplotlib.pyplot as plt
-
পুরো নোটবুকটি পুনরায় চালান।
-
নোটবুকের নিচে একটি সেল যোগ করুন যাতে ডেটা একটি বক্স হিসেবে প্লট করা যায়:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
এটি কি একটি কার্যকর প্লট? এটি সম্পর্কে কি কিছু আপনাকে অবাক করে?
এটি বিশেষভাবে কার্যকর নয় কারণ এটি শুধুমাত্র একটি নির্দিষ্ট মাসে আপনার ডেটাকে পয়েন্টের একটি বিস্তৃতিতে প্রদর্শন করে।
এটি কার্যকর করুন
চার্টগুলোকে কার্যকর ডেটা প্রদর্শন করতে, সাধারণত আপনাকে ডেটাকে কোনোভাবে গ্রুপ করতে হয়। চলুন একটি প্লট তৈরি করার চেষ্টা করি যেখানে y অক্ষটি মাস দেখায় এবং ডেটা ডেটার বিতরণ প্রদর্শন করে।
-
একটি গ্রুপড বার চার্ট তৈরি করতে একটি সেল যোগ করুন:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
এটি একটি আরও কার্যকর ডেটা ভিজ্যুয়ালাইজেশন! এটি মনে হয় যে কুমড়ার সর্বোচ্চ দাম সেপ্টেম্বর এবং অক্টোবর মাসে ঘটে। এটি কি আপনার প্রত্যাশার সাথে মিলে যায়? কেন বা কেন নয়?
🚀চ্যালেঞ্জ
Matplotlib যে বিভিন্ন ধরনের ভিজ্যুয়ালাইজেশন অফার করে তা অন্বেষণ করুন। কোন ধরনের ভিজ্যুয়ালাইজেশন রিগ্রেশন সমস্যার জন্য সবচেয়ে উপযুক্ত?
পোস্ট-লেকচার কুইজ
পর্যালোচনা এবং স্ব-অধ্যয়ন
ডেটা ভিজ্যুয়ালাইজ করার বিভিন্ন উপায় দেখুন। উপলব্ধ বিভিন্ন লাইব্রেরির একটি তালিকা তৈরি করুন এবং নোট করুন কোনটি নির্দিষ্ট ধরনের কাজের জন্য সবচেয়ে ভালো, যেমন 2D ভিজ্যুয়ালাইজেশন বনাম 3D ভিজ্যুয়ালাইজেশন। আপনি কী আবিষ্কার করেন?
অ্যাসাইনমেন্ট
অস্বীকৃতি:
এই নথিটি AI অনুবাদ পরিষেবা Co-op Translator ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না।