2. Другий етап виконання курсової роботи - MaxKmet/Migration_Ukraine_Project GitHub Wiki
- Система дозволяє залежно від параметрів рік та область України отримати дані про:
- Число прибулих осіб в області України
- Число вибулих осіб з області України
- Міграційний приріст/скорочення населення
- Система дозволяє отримати коефіцієнт кореляції між двома наборами числових даних залежно від параметрів:
- Область України
- Рік/роки
- Набори даних (напр. дохідність областей України)
- Система дозволяє генерувати інтерактивну карту, на якій візуалізовано інформацію про області України залежно від параметрів. Більш яскравий відтінок маркеру означає вище значення параметру, що візуалізується.
- Вхідні параметри:
- Рік
- Інформація, яку портібно візуалізувати (напр. міграційний приріст)
- Вихідні дані:
- Карта
- Вхідні параметри:
- Система дозволяє генерувати графік зміни заданого параметру області України з часом:
- Вхідні дані:
- Параметр (напр. міграційний приріст / коеф. кореляції міграційного приросту і дохідності)
- Вихідні дані:
- Графік
- Вхідні дані:
- Система перевіряє всі введені дані на коректність:
- Перевірка чи існує введена область України
- Введений рік має бути доступний в базі даних
- Додаткові набори даних мають бути доступні системі для опрацювання
- Операційні:
- Система має працювати на операційній системі Windows
- Система має бути розроблена на мові Python
- Доступність:
- Будь-яка взаємодія з користувачем має займати не більше як 0.5 секунд
- Система має буди доступна 24 години, 365 днів на рік
- Точність:
- Обрахунок коефіціцієнту кореляції відбувається з точністю до тисячних
Запит на data.gov.ua, описаний у першому етапі курсової роботи повертає json у вигляді:
{'help': 'https://data.gov.ua/api/3/action/help_show?name=resource_show', 'success': True, 'result': {'cache_last_updated': None, 'package_id': 'eaef8537-d1a4-4006-b3a0-52cd501b3ede', 'datastore_active': False, 'id': '7ced64f1-865b-4f1e-a232-eaf7f3c6235a', 'size': 6858, 'file_hash_sum': 'ed15bd9419513934a6c91e1cf30f2ed0', 'state': 'active', 'hash': '', 'description': '', 'format': 'CSV', 'mimetype_inner': None, 'resource_revisions': [], 'url_type': 'upload', 'mimetype': 'text/csv', 'cache_url': None, 'name': '90.1 Міграційний рух населення України (осіб).csv', 'created': '2018-11-29T15:14:41.771830', 'url': 'https://data.gov.ua/dataset/eaef8537-d1a4-4006-b3a0-52cd501b3ede/resource/7ced64f1-865b-4f1e-a232- eaf7f3c6235a/download/90-1-migratsiinii-rukh-naselennia-ukrayini-osib.csv', 'last_modified': '2018-11-29T15:14:41.592966', 'position': 0, 'revision_id': 'bf1ecf5e-0f43-4f66-8447-c329a842c62b', 'resource_type': None}}
Цікавим для нас є поле ['result']['url'], так як воно містить посилання безпосередньо на дані у форматі csv.
Вважаючи, що r2 - це отримана відповідь на запит та виконавши код:
r2 = requests.get(url=BASE_REQUEST_URL, params=params_dataset)
req2 = json.loads(r2.text)
dataset_link = req2['result']['url']
print(req2)
r3 = requests.get(dataset_link)
return r3.text
Побачимо, що дані у csv файлі для опрацювання надані наступні колонки:
, Число прибулих 2010, Число вибулих 2010, "Міграційний приріст, скорочення (-) населення 2010", Число прибулих 2011, Число вибулих 2011, "Міграційний приріст, скорочення (-) населення 2011", Число прибулих 2012, Число вибулих 2012, "Міграційний приріст, ... Число прибулих 2017, Число вибулих 2017, "Міграційний приріст, скорочення (-) населення 2017"
Та рядки:
Україна Україна* Автономна Республіка Крим Вінницька Волинська Дніпропетровська Донецька** Житомирська Закарпатська Запорізька Івано-Франківська Київська Кіровоградська Луганська** Львівська Миколаївська Одеська Полтавська Рівненська Сумська Тернопільська Харківська Херсонська Хмельницька Черкаська Чернівецька Чернігівська м. Київ м. Севастополь***
У кінці файлу надано пояснення щодо умовних позначень:
"*Без урахування тимчасово окупованої території Автономної Республіки Крим і м. Севастополя. Інформація сформована на основі наявних адміністративних даних щодо зміни реєстрації місця проживання (за 2014–2017 роки без частини тимчасово окупованих територій Донецької та Луганської областей)." ** Починаючи з 2014 року інформація сформована без частини тимчасово окупованих територій.,,,,,,,,,,,,,,,,,,,,,,,, "***Включаючи м. Інкерман, смт Кача і сільські ради, підпорядковані міській раді.",,,,,,,,,,,,,,,,,,,,,,,,
Опис можливостей модулів, пакунків модулів, бібліотек, які будуть використовуватися для роботи з даними у програмі, що проектується
JSON - формат обміну даних, які ми отримуємо коли даємо запит за допомогою API. Цей формат нагадує по структурі словники у мові python.
Для переведення цього типу даних у власне словник буде використовуватися бібліотека json.
Для переведення стрічки тексту, яку ми отримуємо за допомогою API у словник варто використати метод json.loads(s)
Цей метод перетворює стрічку, закодовану в ASCII на словник. Якщо стрічка містить символи відмінні від ASCII, то кодування потрібно вказати або ж перекодувати стрічку.
CSV - файловий формат, котрий є відмежовувальним форматом для представлення табличних даних, у якому поля відокремлюються символом коми та переходу на новий рядок.[wikipedia]
Для роботи зі стрічкою, що містить csv файл, потрібно за допомогою методу io.StringIO перетворити стрічку на файлоподібний об'єкт. Після цього потрібно за допомогою методу csv.reader(f, delimiter=',')
, який приймає об'єкт-файл та повертає список string для кожної стрічки у файлі.
matplotlib - бібліотека на мові програмування Python для візуалізації даних двовимірної графікою.[wikipedia]
Метод matplotlib.pyplot.plot(x,y)
дозволяє будувати двовимірні графіки залежно від заданих координат x та y.
x, y : масиво-подібні елементи з числовими значеннями i-тому значенні х точки у масиві у відповідає і-те значення у масиві у.
Folium - бібліотека на мові Python, що дозволяє візуалізувати дані на ітерактивній карті світу.
Метод folium.Map()
створює нову пусту карту.
Метод folium.FeatureGroup(name="Map of Ukraine")
створює новий шар для візуалізації на карті
Метод
fg.add_child(folium.CircleMarker(location=(lat,long), radius=10, popup='', fill_color="green", color="green", fill_opacity=0.5))дозволяє додати нові об'єкти на шари візуалізації
map.add_child(fg)
дозволяє накласти створений шар на карту
Приклад використання відповідних модулів наведено в use_example.py