ডাটাকে ‘অরগানাইজ’ করার কিছু প্র্যাকটিস
মনে আছে তো - আমরা ভালো মানের ডাটার কিছু বৈশিষ্ট্যের নিয়ে আলাপ করেছিলাম? সেটার এই পর্যায়ে ডাটাকে কিভাবে ‘অরগানাইজ’ করতে হয় সেটার একটা ভাল ধারণা থাকা উচিত। আমার দেখা মতে, এই ডাটাকে ঠিকমতো ‘অরগানাইজ’ অর্থাৎ কোন ধরনের ডেটাকে ‘ভার্টিক্যাল’ অথবা ‘হরাইজন্টাল’ অ্যাক্সিস লেভেলে ফেললে ব্যপারটা কাজ করবে সেটা নিয়ে আলাপ করতে চাই এখানে।
একটা টেবিলের কথা চিন্তা করুন। যেকোনো ডাটাকে শুরুতে ‘অরগানাইজ’ করা যায় তার সারি এবং কলামের উপর নির্ভর করে।
কলাম এবং সারি
ক. কলাম হচ্ছে যেখানে আমরা ডাটাকে লম্বালম্বিভাবে রাখি, অর্থাৎ যেকোনো ডাটাসেটের ভেতরে লম্বালম্বি কলামের ভেতরে ডাটার ফিচার অর্থাৎ ভেরিয়েবলগুলোকে রাখা হয়। এই ভ্যারিয়েবেল অর্থ হচ্ছে যেকোনো ডাটাসেটের বিভিন্ন ফিচার - যেমন, টাইটানিক ডাটাসেটের “ট্রেইন” ডাটাফ্রেমে বারোটা ফিচার অর্থাৎ বারোটা কলাম নিয়ে কাজ করে। সাধারণত, কলামে এই ফিচারগুলো রাখার ফলে বিভিন্ন ভ্যারিয়েবলের নামগুলো ফিচারের নাম ধরে বোঝা যায় জিনিসগুলো কি এবং এর ভিতরে কি আছে? আবারও বলছি - মনে আছে ভালো মানের ডাটার কিছু বৈশিষ্ট্যের কথা? টাইটানিক ডাটাসেটে নাম, বয়স, কোথা থেকে উঠেছেন. এধরনের ফিচারগুলো সেই ভেরিয়েবলের নাম থেকেই বোঝা যায়।
খ. এখানে ‘সারি’ মানে হচ্ছে ভূমির সাথে সমান্তরাল অর্থাৎ একটা টেবিলের উপরের কলামের বাম পাশ ধরে যেই সারিগুলোতে বিভিন্ন রেকর্ড রাখা হয় সেটার একেকটা ইউনিটকে সারি/রেকর্ড হিসেবে আমরা ব্যবহার করব এনালাইসিসে। একটা কোম্পানির কাস্টমার ডাটাবেজে কাস্টমারের নাম, বয়স, ঠিকানা, ইত্যাদি কলামে গেলেও এর সারিতে চলে আসছে সেই কোম্পানির কাস্টমারদের রেকর্ড, অর্থাৎ একেক কাস্টমারদের রেকর্ড একেকটা সারিতে। ধরা যাক, আমাদের কোম্পানিতে যদি ১০০০ কাস্টমার থাকেন, তাহলে সেই ডাটাসেটে ১০০০ সারি থাকবে। একেকটা সারি হচ্ছে একেকটা কাস্টমারের রেকর্ড। এদিকে কলাম হেডার হিসেবে যদি ফিচারের নাম চলে আসে, তাহলে সর্বমোট সারির সংখ্যা হবে ১০০১। ট্যাবলিউ এবং মাইক্রোসফট এক্সেল এবং ‘পাওয়ার বিআই’ ধরনের বিজনেস ইন্টেলিজেন্স প্লাটফর্মে এগুলোকে অনেক সময় ‘ভ্যালু’ বলা হয়।
একটা উদাহরন
আমরা কি এখানে একটা উদাহরন টানতে পারি? ধরুন - একটা পরিবার, সেই পরিবারের সদস্য সংখ্যা, তাদের বয়স, উচ্চতা এবং তাদের পছন্দের খাবার একটা টেবিলে ফেলতে চাই। সেটা কিভাবে ‘অরগানাইজ’ করা যায়? মানে, আমি বলছি সবচেয়ে সহজে কিভাবে আমরা ৪ জন সদস্যের একটা পরিবারের সবাইকে একটা টেবিলে ফেলতে পারি? এখানে ডাটাসেটের ফিচার হিসেবে নাম, বয়স, উচ্চতা এবং তার পছন্দের খাবার যদি ফিচার হিসেবে নিয়ে আসি, তাহলে এই ফিচারগুলো কোথায় যেতে পারে? অবশ্যই কলামে। ৪ জন সদস্যের নাম এবং আরো তথ্য অর্থাৎ রেকর্ডগুলো তাহলে কোথায় যেতে পারে? অবশ্যই ‘সারি’ হিসেবে। সেটাই আমরা এখন দেখছি ভিজ্যুয়ালি, একটা টেবিলে। সাইন্টিফিক্যালি এভাবেই ডাটা অরগানাইজ করতে হয়।
ছবি: টেবিল
আপনারা কি দেখলেন এখানে? এখানে প্রতিটা ভ্যারিয়েবল যাকে আমরা ‘ফিল্ড’ হিসেবে বলছি সেগুলোকে ‘অরগানাইজ’ করা হয়েছে কলামে। এখানে একেকটা কলাম হচ্ছে নাম, বয়স, উচ্চতা এবং তাদের পছন্দের খাবার। এখানে প্রতিটা সারি যাকে আমরা একেকটা এনালাইসিস ইউনিট হিসেবে ধরে নিচ্ছি। এই সারিগুলো একেকটা একেকজন মানুষের অর্থাৎ প্রতিটা সারি একজন মানুষকে ‘রিপ্রেজেন্ট’ করছে তাদের নাম, বয়স, উচ্চতা এবং পছন্দের খাবার নিয়ে। আমরা এখানে দেখছি শামিমা অন্তরা, যার বয়স ১৯ এবং ইনি ৫৩ ইঞ্চি লম্বা। সবচেয়ে বড় কথা হচ্ছে, উনি দই খেতে খুব পছন্দ করেন।
ভালো স্ট্রাকচারাল উদাহরন
ঠিক ধরেছেন। একটা ভালো ডাটা স্ট্রাকচার তৈরি করতে কলাম এবং সারিতে ‘কি’ ‘কি’ যেতে পারে সেটা জানা খুবই জরুরী। কোনটা সারিতে গেলে ভালো - আর কোনটা কলামে গেলে ভালো ইনসাইট পাওয়া যেতে পারে - সেটা না জানলে পরে সমস্যা হয় বেশি।
যেকোনো ডাটাসেটের প্রতিটা ভেরিয়েবল অর্থাৎ ‘ফিচার’ যাকে অনেক সময় আমরা ‘ফিল্ড’ হিসেবে ধরে থাকি সেগুলো যাবে একেকটা কলামে। একটা ফিচার - একটা কলাম। সবচেয়ে উপরের সারিটাকে আমরা সেই ভেরিয়েবল দিয়ে কলাম হেডার বানাতে পারি। আমাদের আগের টেবিলে নাম, বয়স, উচ্চতা এবং পছন্দের খাবার হচ্ছে আমাদের ফিল্ড এবং সবগুলো মিলিয়ে একটা কলাম হেডার।
প্রতিটা সারিতে আলাদা আলাদা করে যে রেকর্ড সেটা একেকজনের অবজারভেশন। আমরা এই রেকর্ডগুলোকে আলাদা আলাদা ইউনিট হিসেবে ধরে নেই। যেমন, এখানে প্রতিটা মানুষের কিছু বৈশিষ্ট্য নিয়ে একেকটা অবজারভেশন যা প্রতিটা মানুষকে আলাদাভাবে বুঝতে সাহায্য করছে। যেমন, অন্তরা একজন মাঝারি গড়নের সবেমাত্র তরুণী, যিনি দই পছন্দ করেন। এটার কিছু আলাদা ইম্প্লিকেশন আছে। যারা উঠতি বয়সের তরুণী, দই পছন্ধ করেন, তারা সবার সাথে মানিয়ে চলতে ভালবাসেন। এটা আসছে আলাদা ডাটা থেকে। (সেটা হতে পারে - সাইকোমেট্রিক প্রোফাইলিং ডাটাসেট)
সতর্কতাঃ আমার ৩০ বছরের অভিজ্ঞতা বলে কোন ‘স্পেসিফিক’ তথ্য কলাম এবং কোনটা সারিতে যাবে এটা শুরুতেই ঠিক না করা হলে (মানে না বুঝলে) পরবর্তীতে বড় সমস্যায় পড়তে হয়। আমি দেখেছি, ঠিকমতো ডাটা স্ট্রাকচার অর্থাৎ আসল ফরম্যাটে ডাটাকে ঠিকমত শুরুতেই স্ট্রাকচার না করতে পারলে পরবর্তীতে বছর বছর ধরে এই অসঙ্গতি সম্পন্ন টেবিল এবং ডাটা ফরম্যাটকে টানতে হয়। আপনারা দেখবেন - প্রচুর সরকারি এবং বেসরকারি টেবিল স্ট্রাকচার ঠিকমতো কলাম এবং সারি ফরম্যাট না করার ফলে পরবর্তীতে সেটাকে সফট্ওয়ারে নিয়ে এনালাইসিস করা সম্ভব হয় না। এটা সিস্টেমের বড় ক্ষতি।
আমি প্রচুর সময় দেখেছি, যে ধরনের ফিল্ডগুলোকে কলামে নেবার কথা - সেগুলোকে সারিতে নেবার ফলে প্রচুর ঝামেলা হয়। টাইটেলে কি কি যাবে সেটাকে সারিতে ফেললে তার পাশাপাশি কলাম হেডারে অর্ধেক অংশ এবং সারিতে বাকি অংশ নেবার ফলে পুরো প্রক্রিয়াটা আরো জটিল পর্যায়ে দাঁড়ায়। এক টেবিলে কোন কোন কলাম প্রযোজ্য, তার বাইরে অতিরিক্ত কলাম ডাটা এনালাইসিসকে সমস্যায় ফেলে। সবসময় ‘লেস ইজ মোর’। বেশি ডাটা মানেই ভালো না। অনেক সময় কলাম হেডারগুলোকে সাবটাইটেল হিসেবে ফরম্যাট করলে সেটাকে ঠিকমত কোথাও ফেলা যায় না। আমি এখানে শুরুতে কিছু অসংগতি সম্পন্ন টেবিল দেখাতে চাচ্ছিলাম তবে, পৃষ্ঠার সীমাবদ্ধতা লক্ষ্য করে সেটাকে বাদ দিয়েছি। গুগল করতে পারেন, “ডাটাবেজ ডিজাইন ব্যাড প্র্যাকটিসেস”। তবে মজার কথা হচ্ছে, পুরনো অসঙ্গতি সম্পন্ন টেবিলগুলোকে বর্তমানে ডাটা এনালাইসিস টুল যেমন ‘আর’ অথবা ‘পাইথন’ এবং বিভিন্ন বিজনেস অ্যানালিটিক্স টুল যেমন ট্যাবলিউ, পাওয়ার বিআই, মাইক্রোসফট এক্সেল, পাওয়ার কোয়েরি এডিটরের “ই টি এল” অর্থাৎ “এক্সট্রাক্ট ট্রানসফর্ম এবং লোড” পাইপলাইনে একটা ভালো স্ট্রাকচারের টেবিলে রূপান্তর করা যায়।
পুরানো অসঙ্গতিপূর্ণ টেবিলকে নতুনভাবে স্ট্রাকচার করা
আমাদের পুরানো টেবিল যদি অসঙ্গতিপূর্ণ হয় তাহলে সেটাকে নতুনভাবে স্ট্রাকচারে ফেলার জন্য আমাদের বিভিন্ন টুল ব্যবহার করার আগে সেটার আন্ডারলাইন সমস্যাটা বুঝতে হবে। ডাটাবেসকে নতুন করে স্ট্রাকচার করা জন্য সেটাকে কাগজে ফেলে কোথায় কোন ধরনের তথ্য গেলে ডাটা এনালাইসিস করতে সুবিধা হবে সেটা বুঝতে পারলেই কাজটা সহজ হবে। আমি এই কাজে কম্পিউটার কাছ থেকে দুরে থাকি হাজার মাইল। ডিজাইন সবসময় কাগজে ভালো। আমার বন্ধুদের কল্যানে গুগল, ফেইসবুক … অফিসগুলোতে দেখে এসেছি সনাতন কাগজের ড্রয়িংবোর্ডের দৌরাত্ব।
এরপরের অংশে আসে টুলের ব্যবহার। এ পর্যায়ে আমরা সেই ডাটা টেবিলে আসল ডাটাকে মডিফাই করার আগে ডাটাকে কাস্টমাইজ করা যেতে পারে তার ‘মেটা ডাটা’ দিয়ে। এগুলো এখন ঠিকমতো না বুঝলেও আমি বলছি কারণ, সামনের ভিডিওগুলোতে এই কথাগুলোকে কানেক্ট করতে সুবিধা হবে। আমাদের এই ‘মেটা ডাটা’ মানে এটার বিভিন্ন ধরনের নতুন ক্যালকুলেশন ফিল্ডগুলোকে পাল্টে নতুন নাম দেওয়া এবং এর পাশাপাশি কোন ডাটাকে কোথায় ফেলতে হবে সেটার ধারণাকে একটা পর্যায়ে আবার কাগজে ফেলা।
আবার কাগজ কেন?
আমি দেখেছি যে কোন ডাটা স্ট্রাকচারের শুরুতে - সেটাকে যদি আমরা কাগজ-কলমে ফেলি তাহলে মস্তিষ্ক সেটাকে ঠিকমতো এনালাইসিস করতে পারে। যেকোনো ধরনের ডাটা স্ট্রাকচার তৈরিতে শুরুতেই আমরা কাগজ-কলম নিয়ে বসবো। সত্যি বলছি, এখানেও কম্পিউটার আসবে অনেক পরে। শুরুতে কাগজ এবং পেন্সিল দিয়ে কোথায় কোন ডাটা ফেললে অর্থাৎ কোনটা কোনদিকে ফেললে আমাদের জন্য ডাটাকে এনালাইসিস এবং ‘আউটকাম’ পেতে সুবিধা হবে সেটা বের করতে পারলেই আমাদের কাজ সহজ হয়ে যাবে। দক্ষতার জন্য এধরনের কাস্টমাইজেশন সবাই করে থাকে, তাদের ডাটাবেজ যতই পুরনো হোক না কেন। এ ধরনের কাজ আমরা অহরহ দেখব বিজনেস এনালাইটিক্স টুলে।
একদম বেসিক লেভেল এ ডাটাকে ৩ ভাগে স্ট্রাকচার করা যায় এই মুহূর্তে -
১) কলাম থেকে সারিতে অথবা সারি থেকে কলামে “পিভটিং” (সামনে আসছি)
২) ফিল্ডকে আরো সাব লেভেলে ভাগ না করে ওখানেই ‘স্প্লিট’ করা
৩) সংখ্যা অথবা ক্যাটাগরিক্যাল ভেরিয়েবল হলে ডাটার চাহিদা অনুযায়ী নির্দিস্ট ফিল্ডে ডাটা ফেলা
চলুন সামনের চ্যাপ্টারে।