Всемирный банк выкладывает в открытый доступ тонны экономической статистики. Её можно скачивать, используя язык программирования Питон. Для этого Всемирный банк разработал питоновскую библиотеку wbank. Опишу как ею пользоваться. Писать буду так, чтобы получилось даже у человека, который из этого поста впервые узнал про Питон и Всемирный банк.
Полная документация (в этом посте она не понадобится)
---
Если вы не хотите программировать, то и не надо. Все данные можно получить и без питона и построить красивый график:
Вот, к примеру, ВВП России и Италии:
Ссылка на этот показатель. Там можно выбирать любые страны.
Но мы пойдём другим путём! Сложным! Этот путь позволяет строить графики любого вида и анализировать данные так гибко, как только вы захотите.
На выходе у нас получится такой график: ВВП по паритету крупнейших 10 стран мира. Скрипт сам понимает, какие страны крупнейшие:
1. Устанавливаем Питон с сайта python.org
2. Открываем встроенную среду разработки. Это блокнот, в котором можно писать код и запускать его:
Я этой средой разработки не пользуюсь, потому что она примитивная. Я использую Visual Studio 2019 (там есть питон) или Notepad++. Но для новичка подойдёт и эта.
3. Устанавливаем библиотеки, которые потребуются при работе: matplotlib, wbdata. Для этого запускаем чёрное окошко cmd.exe и пишем там:
pip install matplotlib (жмём Enter, ждём пока поставится)
а потом
pip install wbdata (жмём Enter, ждём пока поставится)
4. Подготовительная работа сделана. Теперь достаточно просто запустить код. Я его снабдил описанием почти в каждой строчке. Бросаем код в среду разработки (CTRL+V не работает, надо через Вставить)
Сохраняем код с любым названием, например вот так:
Жмём F5 или запускаем как у меня:
Всё должно заработать!
# -*- coding: utf-8 -*-
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
import wbdata as wb
from datetime import *
import time
import collections
import operator
indicator="NY.GDP.MKTP.PP.KD" #код нужного индикатора. В данном случае это ВВП по паритету. Этот код можно взять с сайта Всемирного банка. Буквы в конце адреса: https://data.worldbank.org/indicator/NY.GDP.MKTP.PP.KD
all_countries=[] #в этот список положим все страны, которые есть в базе Всемирного банка.
bulk_years={} #сюда положим все страны и годы, за которые есть история по этому показателю.
for item in wb.get_country(): #wb.get_country()-функция позволяет закачать описание всех стран.
region=item['region']['value'] #получаем географический регион
if region!='Aggregates': #если прилетела не страна, а "Страны Африки" или "Ближний Восток", то в описании этого параметра будет слово 'Aggregates'. Игнорируем такие данные. Нам нужны только страны.
all_countries.append(item['iso2Code']) #добавили в all_countries очередной тикер страны.
print('Получили список всех стран')
print(all_countries)
print("Начинаем закачку большого массива данных с сайта Всемирного Банка. Ожидайте...")
for item in wb.get_data(indicator=indicator):#функцией wb.get_data получаем огромный объём сырых данных по этому индикатору (там много не нужного). Там будут все страны и регионы, все годы по выбранному показателю+куча левых полей. Сюда снова прольются не только страны, но и регионы типа "Юго-Восточная Азия". Их надо будет выбрасывать.
id=item['country']['id'] #получаем id прилетевшей страны или региона.
if id in all_countries: #если этот id есть в нашем заготовленном списке стран all_countries, значит это страна. Мы его берём. Иначе - это регион, и он нам не нужен.
strana=item['country']['value'] #получаем название страны.
god=int(item['date']) #получаем прилетевший год
znach=item['value'] #получаем прилетевшее значение ВВП по паритету.
if znach: #в некоторых случаях в качестве ВВП прилетает не цифра, а None - нет значения. None игнорируем.
try: #в большом словаре bulk_years будут маленькие словари для каждой страны
bulk_years[strana][god]=znach
except KeyError:
bulk_years[strana]={}
bulk_years[strana][god]=float(znach)
#Первая очистка данных завершена. bulk_years содержит полезные данные: страна, год, ВВП за этот год.
#Очистка данных продолжается. Сейчас самый свежий год, за который есть данные - 2017. Но полно стран, у которых последний год, за который подсчитан ВВП - 2011, 2013 или ещё раньше. Нам надо взять самый свежий год и составить более короткий словарь: "страна : самый свежий ВВП"
country_values={} #это и будет словарь "страна : самый свежий ВВП"
for k,v in bulk_years.items(): #перебираем предыдущий словарь.
#здесь k - это страна, например Афганистан, v - мини-словарь "год : ВВП за этот год"
max_year=0 #задаём обнуление года
for x,y in v.items(): #перебираем мини-словарь. Ищем самый свежий год.
if x>max_year:
max_year=x
value=y
country_values[k]=float(value) #записываем ВВП за самый свежий год.
#Очистка данных полностью завершена. У нас получился словарь country_values с такими данными: {Страна : самый свежий ВВП}
print("Очистка завершена. Чистый словарь:")
for k,v in country_values.items():
print(k+" : "+str(v))
#теперь полученный чистый массив надо отсортировать по убыванию. Самые крупные страны в начале, самые мелкие в конце:
sorted_d = sorted(country_values.items(), key=operator.itemgetter(1), reverse = True)
#нам нужны не все страны, а только 10 самых крупных.
sorted_d=sorted_d[0:10] #это новый список из 10 самых крупных стран. Внутри списка сидят кортежи вида "страна, ВВП". Кортеж - это список, который нельзя изменить.
print("Самые крупные страны определены:")
print(sorted_d) #
x=[] #в этот список запишем названия стран. Это горизонтальная ось.
y=[] #в этот список запишем значения ВВП. Это вертиальная ось.
for _tuple in sorted_d: #перебираем кортежи внутри списка.
strana=_tuple[0] #получили страну
if strana=='Russian Federation':
strana='Russia'
pokazatel=_tuple[1] #получили ВВП
y.append(pokazatel) #записали ВВП для рисования на вертикальной оси.
x.append(strana) #записали страну для рисования на горизонтальной оси.
#Эта функция превратит триллионы на вертикальной оси в надписи 5 Trill, 10 Trill
def trillions(x, pos):
'The two args are the value and tick position'
return '$%1.1i Trill' % (x * 1e-12) #trillions
formatter = FuncFormatter(trillions)
fig, ax = plt.subplots()
ax.yaxis.set_major_formatter(formatter)
plt.xlabel('Страны', fontsize=10) #рисуем подпись на горизонтальной оси.
plt.ylabel('ВВП', fontsize=10)#рисуем подпись на вертикальной оси.
plt.bar(x, y) #формируем столбики диаграммы.
plt.title('ВВП по ППС (Всемирный банк), трлн.$', fontsize=20) #заголовок графика
for i, v in enumerate(x): #в центр каждого столбика запишем значение ВВП.
val=round(y[i]/1000000000000,1)
plt.text(i,y[i]/2, val, color='white', ha='center', fontweight='bold', fontsize=18)
plt.show() #показать график на экране.
#ВСЁ!
Удачи в освоении Питона!
Картинка с Италией прям в душу ударила.
Для программирования в браузере можете взять джаваскрипт, там все так же подключается как и в этом Вашем CSS.
Что дали, тем и пользуетесь, какие функции реализованы, такие доступны
ну давай-ка попробуй сделать тоже самое без wbdata api
я ещё jupyter notebook освоил. рекомендую.
позволяет исполнять код по кусочкам,
ставится не сложнее самого питона.
после этого можно импортить всякие датасайенс проекты прямо в виде jupyther notebook
big data is peace data
выдала значение None (пустота). Может быть у вас интернет прерывается и комп не может достучаться до сервера.
import wbdata as wb
что он интересно выдаст.print(wb.get_country())
На этом программа прервалась
Перепишите в таком виде:
И скорее всего заработает, но выдаст рейтинг вместе с регионами типа «Весь мир», «Страны Америки», «Ближний Восток»