2. Другий етап виконання курсової роботи - MaxKmet/Migration_Ukraine_Project GitHub Wiki

Table of Contents

Функціональні вимоги до системи

  • Система дозволяє залежно від параметрів рік та область України отримати дані про:
    • Число прибулих осіб в області України
    • Число вибулих осіб з області України
    • Міграційний приріст/скорочення населення
  • Система дозволяє отримати коефіцієнт кореляції між двома наборами числових даних залежно від параметрів:
    • Область України
    • Рік/роки
    • Набори даних (напр. дохідність областей України)
  • Система дозволяє генерувати інтерактивну карту, на якій візуалізовано інформацію про області України залежно від параметрів. Більш яскравий відтінок маркеру означає вище значення параметру, що візуалізується.
    • Вхідні параметри:
      • Рік
      • Інформація, яку портібно візуалізувати (напр. міграційний приріст)
    • Вихідні дані:
      • Карта
  • Система дозволяє генерувати графік зміни заданого параметру області України з часом:
    • Вхідні дані:
      • Параметр (напр. міграційний приріст / коеф. кореляції міграційного приросту і дохідності)
    • Вихідні дані:
      • Графік
  • Система перевіряє всі введені дані на коректність:
    • Перевірка чи існує введена область України
    • Введений рік має бути доступний в базі даних
    • Додаткові набори даних мають бути доступні системі для опрацювання

Нефункціональні вимоги до системи

  • Операційні:
    • Система має працювати на операційній системі 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

⚠️ **GitHub.com Fallback** ⚠️