مسیر یادگیری یک DataScientist

سلام دوستان این اولین پستم هست در جامعه متفاوت و پر از مطالب یاددهنده ویرگول.تو این پست میخوام درباره مسیر یادگیری کسی که میخواد به حوزه دیتاساینس ورود کنه صحبت کنم.یه جمله معروف هست از یکی از مطرح ترین دیتاساینتیست های دنیا اقای Joel Grus هست در مقدمه کتابش(Data Science from scratch) که میگه:دیتاساینس جذاب ترین شغل قرن 21امه.این حرفش یجورایی حقیقت داره اگه بخوایم بصورت کلی نگاه کنیم به قضیه چون هم پرستیژ خاص خودش رو داره هم پول سازه(هم واسه کمپانی هم واسه کسی که داره کارو انجام میده).شغل های متفاوتی تحت عنوان دیتا هست که میبینیم مثل مهندس داده ،آنالیزر داده(Data analyse).معمولا در کمپانی های خیلی بزرگ هرکدوم از اینا بصورت جدا روی تسک مورد نظرشون فکوس میکنن ولی در ایران مخصوصا و شرکت های کوچکتر معمولا میگن ما دیتاساینتیست میخوایم و توقع هم دارن که هم کار مهندسی داده و آنالیز و پیشبینی به عهده اون شخص باشه.اگه بخوام ساده بگم چرا اینقد دیتاساینس رو دور هستش دلیلش وجود دیتاست.خیلی ساده.حجم دیتای بیشتر،محبوبیت دیتاساینتیست ها بیشتر!! حدودا از سال های 2005 به اینور ما وارد عصر بیگ دیتا شدیم.مخصوصا از وقتی که فیسبوک کارش رو شروع کرد و انقلابی در زمینه tech بوجود اوورد.من نمیخوام درباره پروسه پیشرفت این شغل و اتفاقات مختلفی که از سال 2000 به اینور افتاد صحبت کنم میخوام مسیر یادگیریش رو که خیلی دربارش خوندم و وبینار دیدم و تجربه خودم به عنوان یا یادگیرنده علم داده صحبت کنم.واسه شروع باید بگم اصلا نیازی نیست در ریاضی خیلی خوب باشیم(باید یک سری کانسپت رو خوب بفهمیم) ولی اینکه میگن 10 سال تجربه در فیلد نزدیکش نیازه یا اینکه باید یه phd در computer science یا فیلد های مرتبط داشته باشیم و اینا بدونین کشکه.به عنوان کسی دارم اینو میگم که مسیر یادگیریش رو 4 ماهه شروع کردم و کلی تحقیق کردم همچنین خودمم دارم تو این فیلد کار میکنم.ببینین پروسه تبدیل شدن به یه دیتاساینتیست واقعا اینجوری نیس که در چمیدونم امار یا جبر خطی فول باشیم یا اینکه واقعا perfect باشیم در برنامه نویسی.البته که اگه باشیم خیلی خوبه ولی پروسه یادگیری خودش باعث میشه ما اینهارو هم یاد بگیریم و بهتر بشیم داخلش.واسه شروع باید بگم یکم برنامه نویسی باید بلد باشین.اگه بلد نیستین شروع کنین یادگیری و کد زدن.3 تا 6 ماه واسه برنامه نویسی وقت بزارین اگه بلد نیستین اگه هستین هم که چه بهتر.واسه ریاضی هم باید بگم واسه شروع چندتا مبحث خاص که تو دبیرستان هم یادش گرفتین کفایت میکنه:ماتریس و بردار،ضرب داخلی،ضرب خارجی،کوواریانس،واریانس،میانگین،مد،میانه،احتمال شرطی.شاید بگین اینا زیاد شد ولی واقعا زیاد نیست.کل اینارو تو دبیرستان بهمون گفتن.زبان هایی که تو دیتاساینس استفاده میشه python و R هستش.واسه انتخاب زبان برنامه نویسی بین این دوتا باید چندتا چیزو در نظر بگیرین.اول اینکه دیتاساینتس شاخه گسترده ای هست و بخش های گوناگونی داره که اصلیاش اینان: مهندسی داده،آنالیزر داده،ماشین لرنینگ.حقیقتش 85 درصد دیتاساینتیست های دنیا از پایتون استفاده میکنن و خب بنظرم طبیعیه.پایتون community بسیار بزرگی داره و راحته و تر تمیز.بهترین پکیج های ماشین لرنینگ(pytorch و tensorflow) واسه پایتون نوشته شدن.زبان R بیشتر واسه کسایی خوبه که میخوان کارای آماری انجام بدن و پکیج های آماری رو بیشتر استفاده کنن همچنین فیلدشون یکم از کامپیوتر ساینس دور هستش.پیشنهاد خودم پایتون هست.خودمم پایتون استفاده میکنم.واسه شروع پس شد:مباحث ساده جبر خطی مثل ماتریس بردار و ضرب های داخلی خارجی،مباحث اماری مثل واریانس،میانه،میانگین،مد،کوواریانس و مباحث احتمال مثل احتمال شرطی و قانون بیز.زبان برنامه نویسی هم ترجیحا پایتوناصل کار از اینجا شروع میشه.اگه میخواین بیشتر سمت مدیریت دیتا و دیتابیس برین که همون وظایف یه مهندس داده(Data Engineer)هستش،زبان sql رو یاد بگیرین.sql زبان کار با دیتابیس هاست.البته nosql هم داریم که یکم متفاوته ولی خانواده sql کاربرد اصلی رو داره.این هم واسه کسی که میخواد سمت مهندس داده بره یه مهارت ضروریه.حالا در ادامه کار چهارتا پکیج ضروری پایتون رو(اگه زبان انتخابی تون پایتون هست) باید یاد بگیرین : Numpy,Pandas,matplotlib,scipy.این چهارتا که ضروری ترین و بیس کاره ماست.numpy کتابخونه برای عملیات ریاضی(جبر خطی و امار احتمال) شامل ضرب ماتریس ها عملیات روی آرایه ها و غیره با این پکیج انجام میشه.واسه مدیریت دیتا فریم و پاکسازی دیتا که اصل کار ماست در شروع کار از pandas استفاده میکنیم.واسه رسم نمودارها و آنالیز داده از روی مصور سازی دیتا از matplotlib استفاده میکنیم.عملیات پیشرفته تر آمار که شامل تابع جرم احتمال،تابع چگالی احتمال،رگرسیون ها و غیره رو با scipy انجام میدیم که در بین این 4 تا اینو اخر یاد بگیرین.جذاب ترین قسمت کار اینجاشه که بخش مورد علاقه منه(درواقع تمرکز اصلی من اینجاست):یادگیری ماشین.ماشین لرنینگ یا همون یادگیری ماشین.یکی از مهمترین کار های ما در دیتاساینس ساختن مدل هایی هست که بتونه برای ما کار پیشبینی رو انجام بده تا بتونیم تصمیمات بهتری بگیریم.مثلا داده های فروش شرکت رو در جاهای مختلف شرکت جمع اوری میکنیم و عوامل موثر رو به عنوان feature(فیچر یا ویژگی)در نظر میگیریم.یه مدل یادگیری ماشین برای پیشبینی انتخاب میکنیم تا داده رو به خوردش بدیم و خروجی مناسب رو بهمون بده که مثلا اگه رنگ فلان جنس رو به آبی تغییر بدیم فروشش بیشتر میشه یا تو فلان استان فروشمون در آینده اینگونه هست.مثالم شاید زیاد خوب نبود شایدم خوب توضیحش ندادم.یکی از مهمترین دلایل پیشرفت نتفلیکس و پول raise کردن ناگهانیش استفاده مناسب از عناصر دیتاساینسی بخصوص یادگیری ماشین بود.ماشین لرنینگ شاخه ای از هوش مصنوعیه یا بهتره بگیم بزرگ ترین بخش هوش مصنوعی هستش که خلاصش اینه:یه مدل ریاضی طراحی میکنیم یه سری داده رو میدیم بهش تا بتونه یاد بگیره ازش و با دادن داده جدید بهش خروجی مورد علاقه مارو یا خروجی مناسب رو بهمون بده.برای یادگیری ماشین باید از الگوریتم های ساده تر شروع کرد.پیشنهاد خود من اینهاست برای شروع کار اینهاست:1- linear regression2-logistic regression3-decision tree4-random forests5-K-nearest-neighbours/knn6-k-means7- Support Vector Machine(svm)8-Principal Component Analysis(Dimension Reduction)این الگوریتما از مهمترین الگوریتمایی هستش که در شروع کار استفاده میکنیم.دو نوع تسک داریم در الگوریتم های ماشین لرنینگ: Regression و Classification.در تسک رگرسیون خروجی ما یه مقدار عددیه.مثلا قیمت خانه یا مثلا سن یک نفر و تمام خروجی های عددی.در تسک classification خروجی ما یک label هست.یک مثال بخوام بزنم مثلا یک ایمیل spam هست یا not spam یا یک تومور وخیم هست یا خوش خیم یا واسه مولتی تسکینگ خروجی ما بیشتر از دو label هست.اینو نیاز بود بگم.درمورد ماشین لرنینگ تو پست های آینده بیشتر توضیح میدم و کاملا باز میکنم قضیه رو.حالا تا اینجا که یادگرفتین و بهتره الگوریتما رو روی یه سری دیتاست امتحان کنین و نتیجه کار رو ببینین.پیشنهاد میکنم به جامعه بزرگ دیتاساینتیست های دنیا یعنی kaggle بپیوندین و حتی میتونین از کورس هاش بصورت رایگان برای استفاده کنین که شامل داکیومنت و تمرین هست.بعد از الگوریتم هایی که نام بردم یک سوال بزرگ پیش میاد:آیا نیازه که به Deep Learning ورود کنم و شبکه عصبی رو هم یاد بگیرم؟قطعا پاسخ بله هستش ولی توصیه اکید من اینه که اول الگوریتم های قدیمی ماشین لرنینگ که بالا نام بردم رو یاد بگیرین.ورود به Deep learning یا یادگیری عمیق یجورایی برگ برنده یک دیتاساینتیسته.چون با بیگ دیتا(دیتای بزرگ)سروکار داریم اینجاست که یادگیری عمیق خودنمایی میکنه و الگوریتمی بسیار قویتر از الگوریتم های قدیمیه.خیلی خلاصه مسیر یه دیتاساینتیست اینه واسه یادگیری.بعد از این ها واسه بروز بودن باید مقالات و پیپر های جدید رو خوند و الگوریتم های جدید تر رو پیاده سازی کرد.یه دیتاساینتیست همیشه باید بروز باشه و بهترین انتخاب هارو داشته باشه.در پست های بعد درباره موضوعات بیشتری مثل پاکسازی دیتا،تشریح مدل ها،راه های جلوگیری از overfitting(پیچیدگی مدل) و underfitting(ضعیف بودن مدل) که البته کانسپتاشون یکم نیاز به توضیح بیشتری داره توضیح میدم و راهکار های عملی برای پیشگیری از این مشکلات ارائه میکنم.امیدوارم استفاده برده باشین.وقت بزارین،سختی داره ولی ارزشش رو هم داره :)پست های دوست عزیزم @AmirMohammadPiran رو هم بخونین خالی از لطف نیست که در مسیر یادگیری ماشین لرنینگ،الگوریتم ها و منطقشون رو تشریح میکنه و خیلی هم خوب اینکارو انجام میده :))در پست های بعد درباره منابع یادگیری هم صحبت میکنم