
Intro to GIS Programming | Week 11: Data Analysis with Xarray
AI Summary
Xarray یک کتابخانه پایتون برای کار با دادههای چندبعدی است. در این درس، مفاهیم پیشرفتهتری مانند رسم نمودار، تحلیل گروهی و عملیات پنجرهای معرفی میشوند.
**مقدمه و مرور مفاهیم پایه:**
Xarray برای کار با دادههای چندبعدی طراحی شده است. این کتابخانه از دو ساختار داده اصلی استفاده میکند: DataArray و Dataset. DataArray یک آرایه با برچسب و ابعاد است، در حالی که Dataset میتواند شامل چندین DataArray باشد. مثال رایج، دادههای دما است که دارای ابعاد مکانی (عرض جغرافیایی، طول جغرافیایی) و زمانی است. این دادهها میتوانند به صورت یک مکعب داده با چندین دوره زمانی در نظر گرفته شوند. Dataset میتواند متغیرهای مختلفی مانند دما، سرعت باد و رطوبت خاک را در خود جای دهد. Xarray امکان انجام عملیات آماری، تجمیع، گروهبندی و رسم نمودار را فراهم میکند.
**باز کردن و کار با مجموعه دادهها:**
برای شروع، باید یک مجموعه داده را باز کنیم. این کار با استفاده از `xr.open_dataset()` انجام میشود. پس از باز کردن مجموعه داده، میتوانیم به متغیرهای مختلف درون آن دسترسی پیدا کنیم. برای مثال، اگر متغیر دما نام "air" داشته باشد، میتوانیم با `ds['air']` یا `ds.air` به آن دسترسی پیدا کنیم. این کار یک DataArray را به ما میدهد که میتوانیم عملیات مختلفی روی آن انجام دهیم.
**محاسبه و رسم میانگین دما:**
در این بخش، نحوه محاسبه و رسم میانگین دما توضیح داده میشود. مجموعه داده مورد استفاده شامل دادههای دما از سال 2013 تا 2014 با بازههای زمانی 6 ساعته است. برای محاسبه میانگین دما در طول زمان، از متد `.mean()` روی DataArray دما استفاده میشود و ابعاد مورد نظر برای تجمیع مشخص میشود. در این مورد، میانگینگیری بر روی بعد زمان انجام میشود تا دمای متوسط برای هر مکان در طول دوره دو ساله به دست آید. نمودار حاصل، توزیع دمای متوسط در سراسر ایالات متحده را نشان میدهد.
**انتخاب یک پیکسل خاص:**
برای دستیابی به دمای یک مکان خاص، نیاز به استفاده از مختصات (عرض جغرافیایی و طول جغرافیایی) داریم. این کار با استفاده از متد `.sel()` انجام میشود. به عنوان مثال، `mean_temp.sel(latitude=260, longitude=40)` دمای متوسط را برای مختصات مشخص شده بازیابی میکند. اگر مختصات دقیقاً در دادهها وجود نداشته باشد، میتوانیم از آرگومان `method='nearest'` استفاده کنیم تا نزدیکترین نقطه داده را انتخاب کند.
**محاسبه حداکثر دما:**
علاوه بر میانگین، میتوانیم حداکثر دما را نیز محاسبه کنیم. دو روش برای محاسبه حداکثر وجود دارد:
1. **حداکثر میانگین بلندمدت:** با استفاده از `mean_temp.max()`، حداکثر مقدار از دمای متوسط بلندمدت به دست میآید. این مقدار نشاندهنده بالاترین دمای متوسط در طول دوره زمانی است.
2. **حداکثر واقعی در طول سری زمانی:** با استفاده از `temp.max(dim='time')`، حداکثر دما در هر نقطه مکانی در طول کل سری زمانی محاسبه میشود. این مقدار به طور قابل توجهی بالاتر از حداکثر میانگین بلندمدت است، زیرا نشاندهنده بالاترین دمای ثبت شده در هر لحظه است.
تفاوت این دو روش با یک مثال درآمد مقایسه میشود: درآمد متوسط خانوار در مقابل حداکثر درآمد یک خانوار. این تفاوت نشان میدهد که چگونه نحوه محاسبه میتواند نتایج را به شدت تحت تأثیر قرار دهد.
**مقایسه بصری میانگین و حداکثر دما:**
برای درک بهتر تفاوت بین میانگین و حداکثر دما، نمودارهای مربوط به هر دو با استفاده از مقیاس رنگی یکسان رسم میشوند. نمودار حداکثر دما، مناطق قرمز بیشتری را نشان میدهد که نشاندهنده دماهای بالاتر است. این موضوع اهمیت انتخاب مقیاس رنگی و محدوده مناسب برای تفسیر صحیح دادهها را برجسته میکند.
**رسم نمودار سری زمانی:**
میتوانیم سری زمانی دما را برای یک مکان خاص رسم کنیم. این کار با انتخاب یک عرض جغرافیایی و طول جغرافیایی مشخص و سپس رسم DataArray مربوطه انجام میشود. نمودار حاصل، تغییرات دما را در طول دو سال در یک مکان خاص نشان میدهد و الگوهای فصلی را به خوبی آشکار میکند.
**تمرین: رسم دما برای ناکسویل، تنسی:**
به عنوان یک تمرین، از شرکتکنندگان خواسته میشود تا دمای ناکسویل، تنسی را رسم کنند. این امر شامل یافتن مختصات جغرافیایی ناکسویل و تبدیل طول جغرافیایی به مقیاس 0-360 درجه است. سپس با استفاده از این مختصات، سری زمانی دما رسم میشود. همچنین، با تغییر عرض جغرافیایی، تأثیر آن بر الگوی دما مقایسه میشود. نشان داده میشود که دما در نزدیکی استوا تغییرات کمتری دارد، در حالی که در مناطق قطبی تغییرات فصلی بسیار شدیدتر است.
**ساختار داده در Xarray:**
ساختار داده در Xarray شامل متغیرها، ابعاد و مختصات است. متغیرها دادههای اصلی هستند (مانند دما)، ابعاد نشاندهنده ابعاد دادهها (مانند زمان، عرض جغرافیایی) و مختصات برچسبهایی برای ابعاد هستند (مانند تاریخ، مختصات جغرافیایی). Xarray امکان دسترسی به دادهها را با استفاده از برچسبها (مختصات) فراهم میکند که بسیار راحتتر از استفاده از اندیسهای عددی در NumPy است.
**عملیات در سطح Dataset:**
عملیات مانند میانگینگیری را میتوان مستقیماً روی کل Dataset انجام داد. این به این معنی است که اگر Dataset شامل چندین متغیر باشد، میانگینگیری برای همه متغیرها به طور همزمان انجام میشود. این ویژگی باعث صرفهجویی در زمان و کدنویسی میشود.
**تفاوت Xarray و NumPy:**
تفاوت اصلی بین Xarray و NumPy در نحوه دسترسی به دادهها است. NumPy از اندیسهای عددی استفاده میکند که میتواند گیجکننده باشد، به خصوص برای دادههای زمانی یا مکانی. Xarray با استفاده از برچسبها (مختصات) این مشکل را حل میکند و دسترسی به دادهها را بسیار آسانتر و بصریتر میسازد. به عنوان مثال، دسترسی به دمای اول جولای با استفاده از تاریخ "2013-07-01" بسیار سادهتر از شمارش اندیس مربوطه در یک آرایه NumPy است.
**انتخاب مبتنی بر مختصات و زمان:**
Xarray امکان انتخاب دادهها را بر اساس مختصات مکانی و زمانی فراهم میکند. میتوان دادهها را برای یک تاریخ یا محدوده زمانی خاص انتخاب کرد. همچنین، برای مواقعی که زمان یا مختصات دقیقاً در دادهها وجود ندارد، میتوان از روش "نزدیکترین" (nearest) برای انتخاب دادههای مجاور استفاده کرد.
**انتخاب مبتنی بر محدوده و شرط:**
علاوه بر انتخاب دقیق، میتوان دادهها را بر اساس محدوده (مانند انتخاب ماههای خاص) یا شرط (مانند دمای بالاتر از یک حد معین) انتخاب کرد. این قابلیت امکان تحلیلهای شرطی و استخراج زیرمجموعههای خاصی از دادهها را فراهم میکند.
**عملیات گروهی (Group By):**
یکی از قابلیتهای قدرتمند Xarray، عملیات "گروه بندی بر اساس" (group by) است. به عنوان مثال، میتوان دادههای دما را بر اساس فصل (زمستان، بهار، تابستان، پاییز) گروهبندی کرد و میانگین دما را برای هر فصل محاسبه و رسم نمود. این کار با چند خط کد ساده انجام میشود و نیازی به محاسبه دستی ماهها برای هر فصل نیست.
**پنجره لغزان (Rolling Window):**
برای هموارسازی دادههای سری زمانی که نوسانات زیادی دارند (مانند دادههای بورس یا دما)، میتوان از پنجره لغزان استفاده کرد. این روش میانگین متحرک را برای یک دوره زمانی مشخص محاسبه میکند و باعث کاهش نوسانات و آشکار شدن روند کلی میشود. با تغییر اندازه پنجره، میتوان میزان همواری را تنظیم کرد.
**میانگین وزنی:**
Xarray همچنین امکان محاسبه میانگین وزنی را فراهم میکند. این بدان معناست که میتوان وزنهای متفاوتی را به نقاط داده مختلف اختصاص داد تا در محاسبه میانگین تأثیر بیشتری داشته باشند. این قابلیت برای موارد پیشرفتهتر تحلیل دادهها مفید است.
**ذخیره و بارگذاری مجموعه دادهها:**
پس از انجام تحلیلها، میتوان نتایج را با استفاده از متد `.to_netcdf()` در قالب NetCDF ذخیره کرد. این مجموعه دادههای ذخیره شده را میتوان بعداً با استفاده از `xr.open_dataset()` دوباره بارگذاری و تحلیل کرد.
**نتیجهگیری:**
Xarray یک ابزار بسیار انعطافپذیر و قدرتمند برای کار با دادههای چندبعدی است. این کتابخانه با ارائه ساختارهای دادهای بصری و توابع تحلیلی متنوع، فرآیند تحلیل و بصریسازی دادههای علمی را به طور قابل توجهی ساده میکند. درک مفاهیم پایه مانند DataArray و Dataset، و همچنین قابلیتهای پیشرفتهتر مانند انتخاب مبتنی بر مختصات، عملیات گروهی و پنجره لغزان، برای استفاده مؤثر از Xarray ضروری است. تمرین با دادههای واقعی و آزمایش قابلیتهای مختلف، کلید تسلط بر این ابزار است.