My Profile Photo

Ratul Minhaz


I am a web developer based in Dhaka, Bangladesh. I use Python for data wrangling. I want to be an omniglot.


ডেটা সাইন্সে হাতে খড়ি - ৩

API দিয়ে অনায়াসে অনেক অনেক তথ্য সংগ্রহ করতে পারা যেমন অনেক কাজের একটা ব্যাপার কিন্তু তেমনি মাঝে মাঝে এত তথ্য নিয়ে বেসামাল অবস্থায় পড়তে হয়। দেখা যায় যে কোন তথ্য হয়ত আমরা যেমনভাবে চাই তেমন ভাবে নেই, যেমন এই প্রোজেক্টের ক্ষেত্রে আমাদের দরকার অ্যাকাউন্টের বয়স, কিন্তু আমরা পাচ্ছি অ্যাকাউন্ট তৈরীর তারিখ। তাই তথ্য সংগ্রহের পরের ধাপ হল তথ্য বিশ্লেষণ এবং পরিপাটি করা।

এই টিউটোরিয়ালটি ডেটা সাইন্সে হাতে খড়ি সিরিজের তৃতীয় পর্ব। অন্যান্য পর্ব:
1. প্রস্তুতি
2. ডেটা সংগ্রহ
3. বিশ্লেষণ (<– আপনি এখন এখানে)
4. ভিজুয়ালাইজেশন

গত পর্বে আমরা দেখেছি গিটহাবের API ব্যবহার করে কিভাবে ইউজারদের পাবলিক ডেটা সংগ্রহ করা যায়। পর্বের শেষে আমরা যে কোডটি লিখেছিলাম তা দিয়ে ইউজারদের নাম, আইডি, প্রোফাইলের ঠিকানা, পাবলিক রেপোজিটরির সংখ্যা এবং অ্যাকাউন্ট তৈরীর তারিখ জানতে পেরেছিলাম। এ পর্বে এই তথ্যগুলো বিশ্লেষণ করব আমরা।

তথ্য বিশ্লেষণ

পর্ব ২ এর কোডটি চালালে টার্মিনালে এভাবে ইউজারদের তথ্য দেখানোর কথা:

name: Kenneth Reitz
id: 119893
html_url: https://github.com/kennethreitz
public_repos: 87
created_at: 2009-08-26T21:17:47Z

এই তথ্য পর্যবেক্ষণ করে কিছু পয়েন্ট বের করা সম্ভব:

  • আর্মিন সবার আগে অ্যাকাউন্ট তৈরী করেছে (২০০৮ সালে)
  • সবচেয়ে কম প্রোজেক্ট আছে ডনের (২৫টি প্রোজেক্ট)
  • প্রোজেক্ট করার হার সবচেয়ে কম ইয়াকুবের (বছর প্রতি ৭টি)

আমাদের মূল লক্ষ্য ছিল অ্যাকাউন্টের বয়সের তুলনায় কার কতগুলো প্রোজেক্ট আছে তার গ্রাফ বানানো, X-axis বরাবর থাকবে রেপোজিটরির সংখ্যা আর Y-axis বরাবর বয়স। API থেকে পাওয়া তথ্য দেখে আমরা বলেই দিতে পারছি কে কবে তৈরী করেছে অ্যাকাউন্ট, কিন্তু কম্পিউটার তো আর সেটা পারে না। created_at এর মানগুলো খেয়াল করলে দেখবেন তারিখ এবং সময়ে দুটোই একসাথে একটা স্ট্রিং হিসাবে পাচ্ছি আমরা। এই স্ট্রিংটাকে পাইথনের বিল্টিন datetime ফরমেটে নিলে তারিখ এবং সাল আলাদা করা যাবে। এরকম স্ট্রিং থেকে তারিখ বের করতে dateutil মডিউল থেকে তারিখের parser.parse() ব্যবহার করা হয়। সাল বের করার পর বর্তমান সাল থেকে বিয়োগ করে অ্যাকাউন্টের বয়স বের করা তো মামুলি ব্যাপার, ক্লাস টু এর বাচ্চাও বলে দিতে পারবে। বর্তমান সাল পাওয়া যাবে datetime.date মডিউলের ‍ today() ফাংশনটায়।

সবার আগে মডিউলগুলো যোগ করুন কোডের শুরুতে:‌

import dateutil
from datetime.date import today

users এর লুপ শুরুর আগে বর্তমান তারিখ জমা রাখুন:

now = today()

তারপর properties এর লুপটার পর created_at এর পার্সিং এবং বয়স বের করুন:

date = dateutil.parser.parse(page_info["created_at"])
age = (now.year - creation_date.year)
print("age: {}".format(age))

এবার কোড রান করলে প্রতিটা ইউজারের তথ্যের শেষে age দেখা যাবে এভাবে:

name: Kenneth Reitz
id: 119893
html_url: https://github.com/kennethreitz
public_repos: 87
created_at: 2009-08-26T21:17:47Z
age: 7

এ পর্যন্ত করা হয়ে গেলে গ্রাফ করার জন্য যা যা দরকার ছিল তথ্য, সবই আমাদের বের করা হয়ে গেছে। কেনেথ, আর্মিন আর ইয়াকুবের মোট পাবলিক রেপোজিটরি যথাক্রমে ৮৭টি, ১৪৩টি এবং ৪৩টি। এগুলো X-axis এর মান। অন্য দিকে তাদের অ্যাকাউন্টের বয়স যথাক্রমে ৭ বছর, ৮ বছর এবং ৬ বছর। এগুলো আমাদের গ্রাফের Y-axis এর মান। এখন শুধু বাকি ডেটা ভিজুয়ালাইজেশন (পর্ব ৪) এ গ্রাফটা বানানো! এ পর্বের সম্পূর্ণ কোড এখানে: