ডাটা ক্লিনিং এবং ফরম্যাটিং
Last updated
Last updated
There is no fully automated Data Science. You need to get your hands dirty.
-Kamil Bartocha
এক্সপ্লোরেটরি ডাটা এনালাইসিসের মাধ্যমে আমরা ইতিমধ্যে জেনে গিয়েছি যে আমাদের ডাটাসেটের কোথায় কোথায় কি কি সমস্যা আছে। এর উপর ভিত্তি করে আমরা আমাদের ডাটাসেটের কোথায় কোথায় কি কি পরিবর্তন করব সেই সম্বন্ধেও কয়েকটি সিদ্ধান্ত নিয়ে ফেলেছি। এই যে আমরা ডাটাসেটকে উল্টে পাল্টে দেখে তার সমস্যা গুলো সনাক্ত করে তারপর ডাটাসেটকে ঘষে মেজে ঠিকঠাক করব, এটাই হল ডাটা ক্লিনিং এবং ফরম্যাটিং।
১ম এবং ২য় সিদ্ধান্ত নিয়ে শুরু করি।
সিদ্ধান্ত ১ঃ যেহেতু Cabin ভেরিয়েবলটির সিংহভাগ ডাটা মিসিং এবং অবশিষ্ট ডাটার মধ্যেও প্রচুর ডুপ্লিকেশনে আছে সেহেতু মডেল তৈরির সময় আমরা এই ভেরিয়েবলটি বিবেচনা করা থেকে বাদ দিতে পারি। কেন একটু ভাবুন তো? ডাটাই তো নেই, আবার অবশিষ্টাংশ ডাটার অধিকাংশই একি রকমের তাহলে মেশিন শিখবে কি দেখে আর পার্থক্য করবেই বা কি দেখে।
সিদ্ধান্ত ২ঃ Cabin ভেরিয়েবলের মতন Ticket ভেরিয়েবলটিও আমরা বাদ দিতে পারি অতিরিক্ত ডুপ্লিকেশন থাকার কারনে।
তাহলে Cabin এবং Ticket ভেরিইয়েবলের কলাম দুইটা আমরা আমাদের ডাটাসেট থেকে ফেলে দিতে পারি। এখন কথা হল আমাদের কাছে কিন্তু দুইটা ডাটাসেট আছে। একটা train ডাটাসেট এবং আরেকটি হল test ডাটাসেট। কোনটা থেকে ফেলবো বা বাদ দিব? আসলে আমরা দুইটা থেকেই বাদ দিব। কারন মডেলকে আমরা যে যে ভেরিয়েবল বা ফিচার দিয়ে ট্রেইন করব, মডেল তো সেগুলো বাদে অন্য আর কোন ফিচার চিনবেনা, এবং ঠিক সেই সেই ফিচার এর সাহায্যেই মডেলটি আমাদের টার্গেট ভেরিয়েবল প্রেডিক্ট করবে , আর সেহেতু আমরা মডেলকে টেস্ট ও করব একই ফিচার দিয়ে। নিচের কোডের মাধ্যমে আমরা এই দুইটা ভেরিয়েবলকে আমাদের ডাটাসেটগুলো থেকে বাদ দিয়ে দিচ্ছি।
দেখি ডাটাসেটে কি পরিবর্তন হল।
দেখা যাচ্ছে এখন আর ডাটাসেটে Cabin বা Ticket নামে কোন ভেরিয়েবল নেই।
[ নোটঃ যে কোন মেথডের নামের মাধ্যমেই অধিকাংশ ক্ষেত্রে তার কাজটি বোঝা যায়। কিন্তু তবুও, মেথডের সম্পর্কে বিস্তারিত জানতে help() মেথডের সাহায্য নিন, আর তাছাড়া গুগল মামা তো আছেনই ]
চলে যাই ৩য় সিদ্ধান্তে।
সিদ্ধান্ত ৩ঃ যেহেতু Age এবং Embarked ভেরিয়েবলগুলোর অল্প কিছু ডাটা মিসিং সেহেতু আমরা মিসিং ডাটা গুলো 'ফিল আপ' করার চেষ্টা করব।
Age ভেরিয়েবলের ক্ষেত্রে মিসিং ডাটাগুলোর জন্য আমরা বয়সের ডাটার মিডিয়ান ভ্যালুকে ব্যবহার করতে পারি। কন্টিনিউয়াস ভেরিয়েবলের মিসিং ডাটা বের করার জন্য এটাই আপাত দৃষ্টিতে সবচেয়ে সহজ উপায়। কোড দেখুন নিচে।
ডাটাসেটের প্রতিটা পরিবর্তনই head() এবং tail() মেথড দিয়ে চেক করে দেখুন।
সিদ্ধান্ত ৪ঃ Name এবং PassengerID এই দুইটি ভেরিয়েবল ও আমরা বাদ দিতে পারি। সূক্ষ্ম ভাবে যদি আমরা চিন্তা করি তাহলে এইটুকু আমরা উপলব্ধি করতে পারি যে এই দুইটা ভেরিয়েবল এর সাথে মানুষের বাঁচা কিম্বা মরার কোন সম্পর্ক থাকতে পারেনা।
আপনি নিজেই এখন পারবেন ডাটাসেট থেকে ভেরিয়েবল বাদ দিতে। Cabin আর Ticket ভেরিয়েবলদুটি কিভাবে বাদ দিয়েছিলাম লক্ষ্য করুন।
সিদ্ধান্ত ৫ঃ এছাড়াও যেহেতু Sex এবং Embarked ভেরিয়েবল দুইটি ক্যাটাগরিকাল কিন্তু তাদের ডাটা টাইপ string সেহেতু আমরা এই দুইটি ভেরিয়েবলের ডাটা টাইপ কে string থেকে integer এ পরিবর্তন বা ম্যাপিং করতে পারি। প্রেডিকশন মডেল এলগোরিদমগুলোর দক্ষতা বৃদ্ধির জন্য এই কনভার্শন জরুরী।
Embarked ভেরিয়েবলের ক্ষেত্রে "S" = 0, "C" = 1, "Q" = 2 এভাবে স্ট্রিং থেকে ইন্টিজারে মাপিং করতে পারি।
তাহলে মডেল তৈরির জন্য এবং মডেলকে টেস্ট করার জন্য আমাদের ডাটাসেটগুলো কে আমরা ক্লিন এবং ফরম্যাট করে ফেললাম।
[নোটঃ সিদ্ধান্ত ৬-৮ আমরা পরবর্তী অধ্যায় আলোচনা করব। কারন এগুলো ডাটা ক্লিনিং কিম্বা ফরম্যাটিং এর ক্যাটাগরিতে পড়েনা।]
Embarked ভেরিয়েবলের ক্ষেত্রে আমরা ফাঁকা ঘর গুলো "S" দিয়ে ফিল আপ করতে পারি। যেহেতু ডাটাসেটে "S" এর ফ্রিকুয়েন্সি সবচেয়ে বেশি।
Sex ভেরিয়েবলের ক্ষেত্রে আমরা "male" = 0 এবং "female" = 1 এভাবে স্ট্রিং থেকে ইন্টিজারে মাপিং করতে পারি।