Brooklyn-Bridge-Bike-lq

دوچرخه‌سواران منهتن: یک آشنایی با علم داده

علم داده یکی از سودمندترین کاربردهای برنامه‌نویسی هست. با میانگین حقوق پایه ۱۲۱ هزار دلار در سال، علم داده یکی از پردرآمدترین شاخه‌های برنامه‌نویسی و ریاضی هم هست.

در این خواندنی با تحلیل داده‌های رفت‌وآمد دوچرخه‌سواران در منطقه منهتنِ نیویورک با علم داده آشنا می‌شویم.

دوره برنامه‌نویسی ریاضی پیش‌نیاز این خواندنی هست.

تحلیل داده چیست؟

داده مجموعه‌ای از مشاهده‌ها از یک پدیده هست.

برای نمونه، بارش باران در شهر تهران را در نظر بگیر. پدیده، بارش باران در شهر تهران هست و مشاهده‌ها، مقدار بارش در هر روز هست. برای این مثال، داده ما برای یک سال شامل ۳۶۵ عدد هست که هر عدد مقدار بارش در یک روز سال است.

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

یا مثلا برنامه Google Maps بیشتر از ۲۰ پتابایت (۲۰ میلیون گیگابایت) داده‌ خام ذخیره‌شده دارد. با تحلیل این داده‌ها به رانندگان کمک می‌کند که برای انتخاب مسیر تصمیم‌گیری کنند.

data-city

صورت مسأله

منهتن یکی از گران‌ترین مناطق دنیا هست که سازمان‌ها و شرکت‌های بسیاری را در خود جای داده است. منهتن چون یک جزیره هست دارای پل‌های متعددی هم است.

به دلیل گران‌بودن پارکینگ در منهتن، خیلی‌ها برای رفت‌وآمد به منهتن از دوچرخه استفاده می‌کنند. چهارتا از پل‌های اصلی برای رسیدن به منهتن پل‌های بروکلین (Brooklyn)، منهتن (Manhattan)، ویلیامزبرگ (Williamsburg)، و کویینزبرو (Queensboro) هستند.

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

۱. چه روزی شلوغ‌ترین روز سال ۲۰۱۶ بود؟

۲. بارش باران و دمای هوا چه تأثیری بر روی تعداد دوچرخه‌سواران دارند؟

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

۴. در کدام روز هفته و ماه سال تعداد دوچرخه‌سواران از همه بیشتر می‌شود؟

داده خام

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

فرمت این داده CSV (مخفف Comma-Separated Values) هست که یعنی مقادیر با کاما از هم جدا شده‌اند. فایل را با برنامه Notepad باز کن. سطر اول نام متغیرهایی هست که اندازه‌گیری شده‌اند. سطرهای بعد، هر کدام، مقدار این متغیرها برای یک روز هستند.

Manhattan-Bridge-5

آماده‌سازی محیط توسعه

با پایتون نسخه ۳ در محیط پایچارم برنامه‌مون را می‌نویسیم و از ماژول‌های زیر هم استفاده می‌کنیم:

ماژول‌های os و csv: برای خواندن فایل CSV و تبدیل آن به یک لیست از دیکشنری‌ها

ماژول‌های matplotlib و seaborn:‌ برای رسم نمودارها

نحوه نصب ابزارهای بالا را می‌تونی در این خواندنی ببینی و انجام بدی.

پس از بازکردن پایچارم، فولدر nyc را برای پروژه انتخاب کن. یک فایل جدید پایتون به نام main هم در داخلش بساز.

اول باید ماژول‌ها را وارد کنیم:

خواندن و آماده‌سازی داده

داده ما شبیه یک جدول مرتب شده و دارای سطر و ستون است. این برای نمونه پنج سطر اول داده هست:

manhattan-data-five-rows

حالا فایل داده را از داخل پایتون می‌خوانیم و تبدیل به یک لیست از دیکشنری‌ها می‌کنیم:

برنامه بالا ابتدا فایل داده را باز می‌کند (open) و سپس خط‌ها را یکی‌یکی با روش پیمایش لیست می‌خواند و به صورت یک دیکشنری ذخیره می‌کند. هر دیکشنری یک سطر از فایل CSV هست.

آدرس فایل داده را می‌تونی مستقیم هم از کامپیوترت کپی و در data_file_path بگذاری.

پایتون همه مقادیر را با نوع رشته (string) می‌خواند. پس اونهایی که باید نوعشون عدد باشد را به integer یا float تبدیل کنیم. اول کلید اونها را در یک لیست می‌نویسیم و بعد با یک پیمایش، یکی‌یکی به نوع مورد نظر تبدیل می‌کنیم:

شلوغ‌ترین روز سال

برای این کار کافیه لیست دیکشنری‌ها را به ترتیب کلید Total از بزرگ به کوچک مرتب کنیم:

پس شلوغ‌ترین روز سال ۲۰۱۶ چه روزی بوده؟ در این روز در مجموع چند دوچرخه‌سوار از پل‌ها رد شدند؟ روزهای شلوغ بعد چطور؟

تأثیر بارش

می‌خواهیم ببینیم تعداد دوچرخه‌سواران در روزهای بارانی (rainy) چقدر با روزهای خشک (dry) فرق داره.

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

باید روزهای بارانی و غیربارانی را جدا کنیم و میانگین تعداد دوچرخه‌سواران در هر کدوم را حساب کنیم. میانگین یعنی مجموع کل دوچرخه‌سواران در روزهای بارانی را حساب کنیم و بعد تقسیم بر تعداد کل روزهای بارانی کنیم.

این میشه برنامه ما:

تابع sum و len به ترتیب مجموع و اندازه لیست را به دست میارند.

اطلاعات را وقتی با نمودار نمایش بدیم خیلی گویاتر می‌شوند.

بیا با استفاده از تابع barplot در ماژول seaborn میانگین‌های روزهای بارانی و خشک را که به دست آوردیم را رسم کنیم:

manhattan-rain-graph

تأثیر دمای هوا

داده ما دارای یک کلید به نام Temperature هست که دمای هوا به سانتیگراد در اون روز هست.

برنامه‌ای بنویس که روزهای سرد و گرم را از هم جدا کند و میانگین تعداد دوچرخه‌سواران در هر کدوم را حساب کند. مرز سرما را ۱۰ درجه بگذار. نمودارش را هم رسم کن.

در روزهای سرد میانگین تعداد دوچرخه‌سواران بیشتر هست یا کمتر؟ چقدر؟ در چه مرزی از دما این دو تقریبا برابر می‌شوند؟

شلوغ‌ترین پل‌ها

با یک حلقه بر روی لیست پل‌ها می‌تونیم تعداد دوچرخه‌سواران برای هر کدوم را جدا کنیم. و بعدش میانگین را حساب و در یک لیست دیکشنری جدید ذخیره کنیم.

اینطور:

manhattan-bridge-graph

کدام پل بیشترین ترافیک دوچرخه‌سواران را داره؟ کدام یک کمترین؟

شلوغ‌ترین روز هفته

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

manhattan-weekday-graph

در منهتن روزهای شنبه و یک‌شنبه آخر هفته و تعطیل هستند. در روزهای کاری دوچرخه‌سواران بیشتر هست یا تعطیل؟ جواب این سوال به ما میگه که هدف دوچرخه‌سواران بیشتر تفریحی هست یا کاری.

شلوغ‌ترین ماه سال

مثل برنامه شلوغ‌ترین روز هفته این را خودت بنویس. این لیست ماه‌هایی هست که در داده ما هست:

شلوغ‌ترین ماه کدام هست؟

فایل پایتون همه برنامه‌های بالا را می‌تونی از اینجا دانلود کنی.

ادامه

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

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

سایت‌هایی مثل Kaggle داده‌های جالبی دارند که حالا خودت می‌تونی دانلود و تحلیل کنی. پایتون ماژول‌هایی تخصصی مثل Pandas را هم داره که می‌تونی برای ادامه یاد بگیری.

اگر موضوع خاصی را هم برای خواندنی‌های آینده دوست داشتی پایین در بخش نظرها بنویس.

آیا دست به قلم داری و دوست داری برای پایلی خواندنی بنویسی؟ با ما تماس بگیر.

 

نظرات