در این پست قصد داریم با استفاده از اطلاعات وبسایت بانک جهانی، روند تغییرات تولید ناخالص داخلی (GDP) کشورمون رو مصورسازی و روندیابی کنیم و به این بهونه یه کم (خیلی کم!) از فضای کار علوم داده در کار با کتابخونه Pandas رو ارائه بدیم به این امید که مخاطبانی که با پایتون آشنا هستن به این فضا علاقهمند بشن.
فقط این توضیح رو بدم که طبق اطلاعات ویکیپدیا:
«تولید ناخالص داخلی (Gross Domestic Product - GDP) مهمترین متغیری است که در تجزیه و تحلیلها و ارزیابیهای اقتصاد کلان از آن استفاده میشود و در ایران برابر با: کل ارزش ریالی محصولات نهایی تولیدشده توسط واحدهای اقتصادی مقیم کشور در دورهٔ زمانی معین (سالانه یا فصلی) است.»
برای شروع ابتدا باید دیتاستهای دانلود شده به فرمت csv رو بارگذاری کنیم. در اینجا نخستین چالشی که رخ میده اینه که دیتاستهای بانک جهانی چند سطر توضیح ابتدایی دارن (شکل زیر). یک راه ساده اینه در فایل دست ببریم و این چند خط توضیح رو پاک کنیم. اما این راهکار اصولی نیست چون قصد ما اینه که تا حد امکان همه چیز به صورت خودکار انجام بشه. برای همین با کمی جستجو متوجه میشیم که میشه از آرگومان skiprows استفاده کرد و توضیحات ابتدایی فایل رو کنار گذاشت.
بنابراین با دستور زیر فایل رو در یک دیتافریم Pandas بارگذاری میکنیم.
gdp_growth = pd.read_csv('gdp_growth.csv', skiprows=3)
با مختصری بررسی متوجه میشیم فایل بارگذاری شده ایراداتی داره (شکل بالا).
اول این که به وضوح مقادیر ناموجود (NaN) برای خیلی کشورها و سالها دیده میشه. برای حل این مشکل با متد fillna تلاش میکنیم همه مقادیر ناموجود رو با مقدار بعدی و اگه وجود نداشت با مقدار قبلی جایگزین کنیم.
مشکل دیگه اینه که مقادیر سالهای مختلف برای هر کشور در ستونهای مختلف وجود داره، در حالی که ما تمایل داریم هر سال در یک سطر قرار بگیره. برای حل این مشکل هم از متد transpose استفاده میکنیم تا جای سطر و ستونها عوض بشه.
همچنین اطلاعاتی اضافی در دیتافریم وجود داره که ما با استفاده از یک لیست فیلترشون میکنیم. اعضای این لیست نام سالهایی است (برای مثال 2015 به بعد) که مورد نیاز ماست.
برای حل سه مشکل بالا این چند تا دستور رو خواهیم داشت:
gdp_growth = gdp_growth.fillna(method="ffill").fillna(method="bfill") gdp_growth = gdp_growth.transpose() gdp_growth.columns = gdp_growth.iloc[0] filter_list = [str(x) for x in range(2015, 2021)] gdp_growth = gdp_growth.loc[filter_list]
در نهایت دیتافریم به شکل زیر در میاد:
اطلاعات کشور عزیزمون ایران به شکل زیر قابل نمایش هست:
حالا با استفاده از یک منحنی برازش خطی که در چند خط کد زیر قابل مشاهده است، روند خطی تغییرات GDP رو مشاهده میکنیم که متاسفانه شیب منفی داره یعنی به طور کلی از سال 2000 به بعد هر سال از رشد GDP کاسته شده.
X = np.arange(gdp_growth_iran.shape[0]).reshape(-1, 1) y = gdp_growth_iran.values linear_regressor = LinearRegression() linear_regressor.fit(X, y) Y_pred = linear_regressor.predict(X) gdp_growth_iran.plot() plt.plot(X, Y_pred, color='red')
حالا میایم همین کارهایی که بالا انجام دادیم رو برای شاخص GDP per capita انجام میدیم. این شاخص مقدار خام GDP بر حسب دلاره تقسیم بر جمعیت کشور. نتیجه شکل زیر میشه که مشخصاً روند خطی واسش مناسب نیست!
حالا با استفاده از کلاس PolynomialFeatures مقادیر ورودی رو به صورت چند جملهای درجه ۲ درمیاریم و سپس همون روند خطی رو اعمال میکنیم.
نتیجه شکل ناامیدکنندهای است که در ادامه میبینید...
در لیست کشورها، یک کشور به نام World دیده میشه که خوشبختانه ما رو از عملیات ریاضی میانگینگیری رها میکنه و میشه نتایج رو برای جهان به شکل زیر رسم کرد.
نمودار بالا نشون میده سفرهی اقتصاد جهانی بزرگ شده، هر چند چیزی که در این نمودار دیده نمیشه افزایش شدید نابرابری در سطح جهان هست. به طور کلی باید همیشه یادمون باشه دیتای ما ممکنه خیلی از واقعیتها رو نشون نده!
امیدوارم این میکرو پروژه کوتاه واستون جالب بوده باشه. لطفا من رو در لینکدین دنبال کنید تا در آینده احتمالاً بازم ازین مطالب منتشر کنم. فایل نوتبوک هم در پست مرتبط با این مطلب در لینکدین پیوست میشه.