В комментарии к предыдущему посту, в котором мы писали скрипт для получения статистики с сайта coronavirus-monitor.info по городам, был задан вопрос, как реализовать получение данных и отрисовку графика по дням. Давайте посмотрим, как это можно сделать! Статью, как и прежде, постараюсь написать таким образом, чтобы воспользоваться ей мог любой человек, даже не знакомый с программированием вовсе.
Скрипт, как и прежде написан языке Python. Чтобы его запустить, потребуется установить Python с официального сайта.
Затем нужно запустить командную строку на своём компьютере и запустить последовательно команды pip install requests, pip install json, pip install matplotlib, дожидаясь установки каждого из этих компонентов. Так выглядит процесс установки необходимых для работы скрипта библиотек.
Затем необходимо нажать Пуск и найти установленный на первом этапе компонент IDLE (Python). В открывшемся окне нажимаем File->New File. В новое открывшееся окно помещаем код скрипта. Запустить его можно клавишей F5 (на вопрос "сохранить ли файл перед запуском" - нажимаем сохранить и выбираем удобное место).
Теперь к самому скрипту. Следующий код выводит график с количеством выявленных заражений по выбранному городу. Я разбил его на части, чтобы было удобнее понимать. Первая часть выглядит так:
import requests
import json
import matplotlib.pyplot as plt
В ней мы импортируем необходимые библиотеки для работы скрипта. (requests - для получения данных с интернет-ресурса, json - для работы с форматом представления данных json, matplotlib - для построения графиков). Далее мы получаем данные с интернет-ресурса и помещаем их в переменную alldata:
alldata = requests.get('https://coronavirus-monitor.ru/jquery-lite-9.js?a=12')
После чего заменяем в полученных данных выражение 'window.dataFromServer =' на пустое значение с помощью метода replace, а также обрезаем все лишние пробелы в начале и в конце файла методом strip.
C помощью json.loads преобразуем json формат в словарь Python и переходим по ключам словаря последовательно в непосредственно место, где находятся необходимые нам данные.
Создаём пустые списки z , c, confirmedd, ya, xa, dates. Их мы будем наполнять в позже.
alldata = requests.get('https://coronavirus-monitor.ru/jquery-lite-9.js?a=12')
data = alldata.text.replace('window.dataFromServer = ', '').strip()
shareddata = json.loads(data)['russianSubjects']['data']['subjects']
z = []
c = []
confirmedd = []
ya = []
xa = []
dates = []
Теперь найдём свой город в списке!
Нужно зайти вручную на ресурс https://coronavirus-monitor.ru/jquery-lite-9.js?a=12 , с помощью Сtrl+F5 найти как записан Ваш субъект РФ в файле, и скопировать его название в место, которое указано далее
[z.append(i['en']) for i in shareddata]
for i in z:
c.append(i)
if i == 'Voronezh region': # Сюда пишем свой город
break
Далее, наполним переменные данными о своём субъекте РФ. Переменные deaths и cured в этом коде не нужны. Но в них помещены данные, чтобы вы могли изменять график на "количество выписанных по дням" или "количество летальных исходов по дням".
shareddata= shareddata[len(c)-1]
subjects = shareddata['statistics']
cities = shareddata['en']
for subject in subjects:
deaths = subject['deaths'] # Данные по количеству летальных исходов
cured = subject['cured'] # Данные по количеству выписанных пациентов
confirmed = subject['confirmed']
date = subject['date'][:-14]
confirmedd.append(confirmed)
dates.append(date)
Записываем в listcities список формата [(количество заражений, дата), ( количество заражений, дата..], а затем сортируем этот список по дате.
listcities = list(zip(confirmedd, dates))
listcities.sort(key=lambda x: x[0])
Cнова записываем два списка: ya с количеством подтверждённых случаев заражения и xa с названиями соответствующих субъектов РФ.
[ya.append(n[0]) for n in listcities]
[xa.append(n[1]) for n in listcities]
Далее, если это необходимо, можно обрезать временной промежуток, за который хотите увидеть данные. Например, выведем данные за последние 10 дней.
ya = ya[-10:]
xa = xa[-10:]
И нарисуем сам график!
plt.bar(xa, ya)
plt.title('Количество выявленных заражений Covid-19 в субъектах России')
plt.xlabel('Наименование субъекта')
plt.ylabel('Количество заражений')
plt.xticks(rotation=90, horizontalalignment='left', fontsize=12)
plt.show()
Он будет выглядеть так:
Если Вы хотите увидеть разбор какого-то ещё скрипта по Вашим пожеланиям, напишите об этом в комментариях!
Понравилась статья? Не забудь поставить лайк и подписаться.