رفتن به نوشته‌ها

Category: برنامه‌نویسی و کار با داده

جایگاه علم داده در نجوم امروزی

بخش ششم از سری گفت‌وگوهای «پشت‌پرده نجوم»

«پشت‌پرده نجوم» عنوان یک سری از لایوهای اینستاگرامی هست که در آن با چند نفر از دانشجویان و اساتید دانشگاهی، درمورد تصویر درست علم نجوم و فرآیندها و اتفاقاتی که در عمل، در جامعه علمی در جریان است، گفت‌و‌گو شده و هم‌چنین کندوکاوی درمورد مسائل مهمی از قبیل روایتگری در علم و شبه‌علم داشته است.

امروزه با پیشرفت تکنولوژی، نقش داده‌ها در حوزه‌های مختلف علم، از‌جمله علم نجوم، بیش‌از‌پیش نمایان شده است. به‌نظر می‌رسد ابزار برنامه‌نویسی و شبیه‌سازی در آینده‌ای نزدیک، به یکی از مهارت‌های مهم و ضروری برای پژوهش در علم (نجوم) تبدیل شود؛ کما اینکه هم‌اکنون نیز تا حدی همین‌گونه است. در ششمین بخش از «پشت پرده علم» با علیرضا وفایی صدر، پژوهشگر فیزیک در مقطع پسا‌دکتری در IPM، در‌مورد جایگاه علم داده در نجوم امروزی گفت‌و‌گو کرده‌ایم. ویدیو و صوت این گفت‌وگو ضبط شده و در ادامه این متن می‌توانید آن را ببینید و بشنوید.

در علم نجوم امروزی، به‌دلیل ساخت تلسکوپ‌ها و آشکارساز‌های بزرگ متعدد ـ و ترکیب تلسکوپ‌های بزرگ با یکدیگر با استفاده از روش تداخل‌سنجی، برای ساخت تلسکوپ‌های مجازیِ حتی بزرگ‌تر ـ و هم‌چنین افزایش کیفیت و رزولوشن تصاویر دریافتی از آسمان، حجم داده‌ها بسیار افزایش پیدا کرده و کار با داده‌های کلان، به مسئله‌ای مهم تبدیل شده است. به‌عنوان مثال، برای ثبت اولین تصویر از یک سیاه‌چاله که سال پیش توسط تیم تلسکوپ افق رویداد منتشر شد، هشت آرایه‌ از تلسکوپ‌های رادیویی، حدود یک هفته رصد انجام دادند که منجر به دریافت داده‌ای با حجم حدود ۲۷ پتا‌بایت شد و کار انتقال، پاکسازی و تحلیل آن حدود ۲ سال طول کشید (برای اطلاعات بیشتر درمورد جزئیات ثبت این تصویر، این نوشته را بخوانید)! 

در گفت‌وگویمان با علیرضا وفایی‌صدر، به مسائل مختلفی در ‌زمینه نقش داده در نجوم پرداخته‌ایم؛ از جمله اینکه: چطور می‌توان داده‌های کلان را سرو‌سامان داد؟ ماشین‌‌ها (کامپیوترها) چه جنس کارهایی را در زمینه نجوم می‌توانند برای ما انجام دهند؟ همکاری‌های بین‌المللی چه نقشی در این زمینه دارند؟

بخش ششم «پشت‌ پرده نجوم»
ویدیوی گفت‌و‌گوی محمد‌مهدی موسوی (فیزیک‌پیشه) و علیرضا وفایی‌صدر (پژوهشگر فیزیک در مقطع پسادکتری در IPM) درمورد جایگاه علم داده در نجوم امروزی

به این گفت‌وگو گوش دهید:

یادگیری متلب و گنو اُکتاو

من معمولا از پایتون برای برنامه‌نویسی استفاده می‌کنم، چون پایتون آزاده، رایگانه و یه حالت آچار فرانسه‌طوری داره که کارهای مختلف میشه باهاش کرد. همین‌طور پایتون کتاب‌خونه‌های زیادی داره که برای کارهای مختلف علمی (محاسباتی) میشه ازشون استفاده کرد. خوبی این کتاب‌خونه‌ها اینه که به زبان‌های سطح پایین‌تری نوشته شدن به همین خاطر به قدر کافی سریع هستند! اگر هم کسی قصد کارهای تحلیل داده و یادگیری ماشین داشته باشه هم پایتون گزینه اوله، دست کم برای شروع! خلاصه همیشه به همه پیشنهاد می‌کنم که با پایتون شروع کنید و اگه کار دانشگاهی می‌کنید با پایتون ادامه بدین! از همه مهم‌تر وقتی شما با پایتون کد می‌زنید معمولا آدم‌هایی رو پیدا می‌کنید که مثل شما روی پروژه یا مسئله مشابهی کار کردن یا کار میکنند و از تجربیاتشون می‌تونید استفاده کنید یا ازشون سوال بپرسین.

با این وجود گاهی پیش میاد که آدم مجبور به استفاده از زبان‌های دیگه بشه. تجربه شخصی من اینه که عمده دانشگاهی‌ها به این دلیل مجبور میشن از یک زبان خاص استفاده کنند که به قدر کافی آدم‌های حرفه‌ای در تیمشون نیست! گاهی استاد و تیمی که پروژه‌ای رو پیش برده سال‌ها با یک زبان خاص کد زدند و ترجیحشون اینه که آدم‌های جدید هم با همون زبون ادامه بدن. راه کم‌دردسرتری هست معمولا، هر چند که گاهی می‌تونه به شدت احمقانه باشه! خلاصه ممکنه که هر کسی مجبور بشه سراغ زبان‌ها یا محیط‌های دیگه برنامه‌نویسی بره. یکی از این محیط‌ها متلب هست. توی لینوکس می‌تونید از Octave به جای متلب استفاده کنید و لذتش رو ببرید!

متلب یک محیط نرم‌افزاری برای انجام محاسبات عددی و یک زبان برنامه‌نویسی نسل چهارم است. واژهٔ متلب هم به معنی محیط محاسبات رقمی و هم به معنی خود زبان برنامه‌نویسی مورد نظر است که از ترکیب دو واژهٔ MATrix (ماتریس) و LABoratory (آزمایشگاه) ایجاد شده‌است. این نام حاکی از رویکرد ماتریس محور برنامه است، که در آن حتی اعداد منفرد هم به عنوان ماتریس در نظر گرفته می‌شوند.

گنو اُکتاو ( GNU Octave) زبان برنامه‌نویسی سطح بالایی است که بیشتر برای محاسبات عددی به کار می‌رود. این برنامه امکانات زیادی را از طریق رابط خط فرمان برای حل عددی مسائل خطی و غیر خطی می‌دهد. این برنامه را می‌توان جایگزین مناسبی برای همتای غیر آزاد خود متلب به حساب آورد.

ویکی‌پدیا

در ادامه یک سری منبع برای یادگیری متلب و اکتاو رو معرفی می‌کنم.

برای شروع

از بین این دوره‌ها، ببینید کدوم یکی به مذاقتون بیشتر خوش میاد:

برای محسابات عددی

به طور کلی

پیشنهاد من اینه که کلیات متلب رو یاد بگیرین و از منابع مختلف مربوط به کارتون استفاده کنید. مخصوصا از مثال‌های خود Mathworks استفاده کنید. مثلا اینجا ۵۰۰ تا مثال خیلی خوب برای ریاضیات، آمار و یادگیری ماشین هست. خوبه به این‌ها حتما نگاه کنید. حواستون باشه که به روی ایران بسته‌س و شما نیاز به چیزی برای دور زدن تحریم دارین که حتما راه‌های مختلفی بلدین براش!

این کتاب پر از مثال‌های خیلی قشنگه و اساسا آموزشش بر پایه مثال زدن. فصل اولش هم برای کسایی که آشنایی با متلب ندارن یک سری مثال آموزشی خوب داره.

خوبی این کتاب اینه که جواب تمرین‌ها رو هم داره و می‌شه به عنوان کتاب کمکی برای تدریس ازش استفاده کرد.

به عنوان پیشنهاد به دوستانی که معلم این درس یا درس‌های دیگه میشن : میتونید به جای حل‌تمرین سنتی پایه کلاس‌هاتون رو بر همچین چیزی بذارید. همین کار کوچیک میتونه تغییر محسوسی توی آموزش فیزیک به‌وجود بیاره. این کتاب نسخه‌ پایتونی هم داره!

تجربه شخصی در کارهای مربوط به تحلیل داده در بازار و نه دانشگاه!

من برای مدتی (۶ ماه) به‌خاطر امرار معاش و کسب تجربه وارد یه پروژه تحلیل داده به صورت پاره‌وقت شدم. درآمدش بد نبود و خوش هم می‌گذشت از یه جهت‌هایی! اگه شما تجربه‌ای در برنامه‌نویسی دارین یا ممکنه نیاز به کار پاره وقت داشته باشین یا اینکه کلا دوست داشته باشین که به صورت تفریحی از این کارا کنید، یه سری پیشنهاد دارم که بهتون کمک کنه وارد این شغل بشین.

فقط توجه کنید که این‌ها تجربه یه آدم حرفه‌ای نیست! تجربه کسی هست که فیزیک خونده و حالا می‌خواد یه کار پاره وقت رو تجربه کنه! کاری خارج از صنعت تست و کنکور و المپیاد. امیدوارم حرفه‌ای‌ها ببخشن و با نظرات خودشون این نوشته رو بهتر کنن.

فلسفهٔ پایتون خوانایی بالای برنامه‌های نوشته شده و کوتاهی و بازدهی نسبی بالای آن است.

۱) پایتون یاد بگیرید

پایتون بر هر درد بی‌درمان دواست. اینم سه تا دوره خوب فارسی:

💡 اگر پایتون رو شروع کردین، ادامه این نوشته رو بخونید!

دیگه وقتش رسیده که حرفه‌ای تر بشین! اولین قدم – به عنوان پیشنهاد – اینه که برین توی ژوپیتر نوت‌بوک کد بزنید، خیلی محیطش خوبه، همون‌جا کدو ران می‌کنید و خیلی راحته همه چیز. در هر مرحله هم خیلی راحت میشه کنترل کرد که دارین چیکار می‌کنید. برای آشنایی بیشتر مثلا این نوشته رو ببینید.

در ضمن گوگل یه چیزی درست کرده به اسم Google Colab که یه ژوپتر نوت بوک آنلاینه که میشه بری اونجا و آنلاین کد بزنی روی کامپیوترای گوگل! ۱۲ گیگ رم میده بهتون با یه پردازنده نسبتا معقول. gpu هم میده برای پردازش‌های موازی! خوبی این‌کار اینه که حتی با یه کامپیوتر ضعیف هم میشه راحت کد پایتون زد و مهم‌تر این‌که میشه کد رو به اشتراک بذاری و همزمان چند نفر توی یه پروژه مشارکت داشته باشند. در ضمن، هر چیزی که بشه روی کامپیوتر شخصی نصب کرد، به راحتی روی گوگل کولب هم نصب میشه. خودتون ببنید چیه دیگه! داخل خود پروژه هم کلی کد نمونه هست. فیلم آموزشی هم هست. اینجا هم یکمی توضیح هست برای گوگل کولب.

بین محیط‌هایی که میشه کد زد ژوپیتر رو بیشتر به این خاطر پیشنهاد می‌کنم چون که می‌تونید برین روی گوگل کولب و راحت زندگی کنید! به خصوص توی کار گروهی به جای این‌که هی به مردم توضیح بدین که دارین چیکار می‌کنید یا مثلا نمودارهاتونو مدام بخواین ذخیره کنید و جدا براشون بفرستین، راحت لینک گوگل کلب رو میدین و میگین خب همه چیز اینجا هست. از طرف دیگه شفاف هم هست دیگه همه چیز. بقیه هم کدتون رو می‌تونن دنبال کنند و این‌که خودتونم یه جوری مجبور میشین تمیز کد بزنید و مرتب کامنت گذاری کنید، توضیح بنویسید که بعدترش دچار مشکل نشین در ادامه پروژه. امکانات خیلی زیادی خلاصه هست.

۲) تحلیل داده به کمک پایتون

الان وقتشه که یه سری کورس تحلیل داده هم ببینید و یاد بگیرین (مهم‌ترین کتابخونه پایتون برای تحلیل داده Pandas هست). با دوره‌ آنلاین آشنا هستید؟!

دوره‌های پیشنهادی:

یک دوره جامع از دانشگاه میشیگان:

۳) آمار یاد بگیرید

اگه واقعا می‌خواین کار درست حسابی کنید باید درست آمار بدونید. این دوره رو پیشنهاد می‌کنم:

نکته مهم اینه که لزومی نداره که خیلی کورس ببینید یا کتاب بخونید! خیلی چیزا رو حین کار میشه یاد گرفت. ولی دونستن یه حداقل‌هایی کمک می‌کنه که شما سریع‌تر بتونید کار پیدا کنید یا موقع کار اصلا بدونید برای رفع مشکلتون چی باید سرچ کنید! فراموش نکنید که گوگل بهترین کمک‌دهنده شما در این مسیره. گوگل معلم خوبیه، ازش سوال بپرسید! راستی، این نوشته از جادی – به عنوان یک آدم حرفه‌ای و با سابقه – رو بخونید.