Результати виконання домашнього завдання №3 - SlavkoPrytula/Covid-19-Tracker GitHub Wiki
Table of Contents
- Опис ADT, які використовуються.
- FluADT.
- ScrapADT.
- CoronaADT.
- Діаграма абстрактних типів даних
- Приклади використання ADT
Опис АДТ, необхідних для вирішення завдання дослідження
Головною ціллю дослідження є порівняння статистики(смертей, хворих і людей, які виздоровіли) COVID-19 і сезонного грипу. З цілі випливає, що потрібно мати джерела з яких програма буде отримувати дані і абстрактні типи даних, які дозволять зберігати і ефективно працювати з ними.
ADT для грипу.
Після парсення веб сторінок з інформацією про грип з’явилась потреба в абстрактному типі даних, який би дозволив нею оперувати, бо стандартні типи даних python не змогли забезпечити простої взаємодії. Назва цього абстракного – FluADT.
FluADT
Передумови для створення:
Для оптимізації коду ми розбили процес парсення на окремі функції. Почергово викликати їх при зборі даних з кожної вебсторінки не оптимально, тому з'явилась перша причина розробки ADT. Після парсення веб сторінок з інформацією про грип користувач отримує "сирі" дані, які потрібно для початку перетворити в потрібний фомат, щоб проводити подальші операції з ними, ADT б дозволив централізувати процес збору і обробки статистики, тому з'явилась друга причина його створення. Після того, як ми отримали інструменти для отримання готової інформації з'явилась потреба в їх обробці та збереженні. Стандартні структури не змогли забезпечити зручної роботи з даними і це стало останньою причиною розробки ADT. Назва цього абстракного типу даних – FluADT.
Вимоги до вхідних даних:
-
Було б зручно, щоб FluADT забезпечував повну взаємодію з веб стрінкою і користувачу було б достатньо при створення екземпляру цього абстрактного типу вказати шлях до файлу з посиланнями на потрібні веб ресурси з даними. Також FluADT повинен забезпечувати роботу без вхідних даних, використовуючи складений на стадії його розробки список посилань на потрібні веб ресурси.
-
Файл, шлях до якого вказується при створенні екземпляру FluADT, повинен бути у форматі txt, а посилання в ньому повинні бути записаними по одному в рядок.
Операції для роботи з даними:
-
FluADT повинен мати методи, які очищують його і записує дані в нього, використовуючи відповідні вхідні дані:
-
clear() - метод , який очищує FluADT.
-
get_data() - записує у FluADT дані, викристовуючи попередньо записаний список з посиланнями.
-
get_data_file() - метод, який записує дані у FluADT, використовуючи файл з посиланнями.
-
-
FluADT повинен забезпечувати можливість отримувати статистичні дані за певний рік і для певного віку:
-
get_statistic_year() - метод, який повертає статистику для певного року.
-
get_statistic_year_age() - метод, який повертає статистику для певного року і віку.
-
-
FluADT повинен забезпечувати можливість отримувати кількість померлих, людей, які одужали і загальну кількість хворих за певний рік:
-
get_total_death() - метод, який повертає кількість померлих від грипу в певний рік.
-
get_total_recovered() - метод, який повертає кількість , людей, які одужали від грипу в певний рік.
-
get_total_illnesses() - метод, який повертає кількість померлих від грипу в певний рік.
-
-
FluADT повинен надавати можливість отримати середню кількість померлих від грипу за роки про які є інформація в абстракному типі даних.
-
get_avg_deaths() - метод, який повертає середню кількість померлих за роки про які інформації в певному екземплярі FluADT.
-
get_avg_recovered() - метод, який повертає середню кількість, людей, які одужали від грипу за роки про які інформації в певному екземплярі FluADT.
-
get_avg_illnesses() - метод, який повертає середню кількість хворих за роки про які інформації в певному екземплярі FluADT.
-
-
FluADT забезпечувати візуалізацію даних, які він містить.
-
str() - метод, який повертає статистичні дані в форматі стрічки.
-
draw() - метод, який візуалізовує інформацію екземпляру FluADT.
-
Алгоритм використання використання FluADT:
- Потрібно створити екземпляр FluADT, забезпечивши вимоги до вхідних даних.
- Після виконання першого пункту можна працювати з цим екземпляром, використовуючи всі способи взаємодії, які FluADT забезпечує.
На основі вище заданих вимог було реалізовано ADT, використовуючи інший абстрактний тип даних і структуру даних словник. Словник забезпечує швидкий і простий доступ до інформації(складність операції O(1)). Використання інших структур даних є недоцільним в цьому випадку, бо процес отримання даних буде незручним і складність цієї операції буде набагато більшою. До прикладу при використання стандартного списку складність отримання статистики грипу за певний рік була б O(n). Процес збору, обробки і зберігання даних з кожної вебсторінки реалізований на основі іншого ADT – ScrapADT.
ScrapADT
Передумови для створення:
Головною причиною стала потреба поділу розробки FluADT на різні рівні атракції. ScrapADT забезпечує збір, підготовку і відображення даних.
Вимоги до вхідних даних:
-
При створенні екземпляру цього ADT користувач повинен вказати посилання на вебсторінку з потрібною інформацією, з якої вона буде стягнута.
-
Посилання повинні бути на розділи з статистикою грипу на сайті cdc.gov (приклад: cdc.gov/flu/about/burden/2010-2011.html)
Операції для роботи з даними:
-
ScrapADT повинен забезпечувати простий і швидкий доступ до інформації.
-
ScrapADT повинен забепечувати візуалізацію даних, які в ньому знаходяться:
-
draw() - метод, який забезпечує візуалізацію даних.
-
str() - метод, який повертає статистичні дані в форматі стрічки.
-
Алгоритм використання використання ScrapADT:
- Потрібно створити екземпляр ScrapADT, забезпечивши вимоги до вхідних даних.
- Після виконання першого пункту можна працювати з цим екземпляром, використовуючи всі способи взаємодії, які ScrapADT забезпечує.
На основі вище згаданих вимог було реалізовано ADT, який використовує допоміжний клас FluData і структуру даних словник. Словник забезпечує швидкий і зручний доступ до екземплярів класу FluData(складність операції O(1)). Використання інших структур даних не є доцільним, бо складність операцій при роботі з даними буде вищою (O(n)), а сам процес не є зручним.
Class FluData:
Опис атрибутів:
age - вік людей, про яких екземпляр цього класу містить інформацію.
sympthoms – кількість людей, в яких були симптоми.
visits - кількість людей, які звернулись до лікаря.
hospitalizations - кількість людей, які були госпіталізовані.
deaths - кількість людей, які померли.
Опис методів:
+ to_list() - повертає список всіх аргументів
+ __str__() - метод, який повертає статистичні дані в форматі стрічки.
ADT для COVID-19
Використання методів АПІ, який надає статистичні дані COVID-19 , виявилось незручним. Тому було прийняте рішення розробити ADT, який би забезпечив зручну роботу з даними, відповідно до цілей дослідження.
CoronaADT
Передумови для створення:
Головною причиною створення CoronaADT стала потреба в абстрагуванні користувача від роботи з API і наданні потрібних інструментів для подальшого вирішення завдання дослідження.
Вимоги до вхідних даних:
- При створенні екземпляру CoronaADT повинна бути можливість вказати країну в форматі:
-
Назва країни повинна бути написана латиницею.
-
Назва країни повинна починатись з великої букви.
-
Назва країни повинна бути подана у вигляді стрічки(string).
і отримати можливість працювати з її статистичними даними.
- Повинна бути можливість створити екземпляр CoronaADT без вказання країни для роботи з загальними статистичними даними.
Операції для роботи з даними:
Якщо при створенні екземпляру CoronaADT не було вказано країну:
1.CoronaADT повинен надавати можливість отримати список країн, в яких були виявлені заражені:
- get_affected_countries() – повертає словник країн, в яких були виявлені заражені.
2.CoronaADT повинен надавати можливість отримати історію розвитку вірусу в певній країні:
- get_history_by_paticular_country() – метод, який повертає історію розвитку вірусу в певні крані.
3.CoronaADT повинен надавати можливість отримувати ситуацію в певній країні в певний день:
- get_history_by_paticular_country_by_date() – метод, який повертає ситуацію в певній країні в певний день
4.CoronaADT повинен надавати можливість отримувати кількість виявлених випадків у кожній країні:
- get_cases_by_country() – метод, який повертає кількість виявлених випадків у кожній країні.
5.CoronaADT повинен надавати можливість отримувати статистику в певному штаті США:
- get_johns_hopkins_latest_usa_statistic_by_state() – метод, який повертає статистику в певному штаті США.
6.CoronaADT повинен надавати можливість отримувати загальну статистику COVID-19:
- get_world_total_stat() – метод, який повертає загальну статистику COVID-19
Якщо при створенні екземпляру CoronaADT було вказано країну:
1.CoronaADT повинен забезпечувати всі вище згадані операції з даними.
2.CoronaADT повинен надавати можливість отримувати кількість виявлених випадків захворювання:
- get_infected() – повертає кількість інфікованих у вказаній країні.
3.CoronaADT повинен надавати можливість отримувати кількість смертей від COVID-19:
- get_deaths() – повертає кількість померлих у вказаній країні.
4.CoronaADT повинен надавати можливість отримувати кількість людей, які виздоровіли:
- get_recovered() – повертає кількість людей, які виздоровіли у вказаній країні.
5.CoronaADT повинен надавати можливість отримувати кількість нових випадків захворювань:
- get_new_cases() – повертає кількість нових випадків захворювань у вказаній країні.
6.CoronaADT повинен надавати можливість отримувати кількість хворих на даний момент:
- get_active_cases() – повертає кількість хворих на даний момент у вказаній країні.
7.CoronaADT повинен надавати можливість отримувати кількість нових випадків смертей:
- get_new_deaths() – повертає кількість нових випадків смертей у вказаній країні.
8.CoronaADT повинен надавати можливість отримувати кількість людей в критичному стані в даний момент:
- get_new_deaths() – повертає кількість людей в критичному стані в даний момент у вказаній країні.
9.CoronaADT повинен надавати можливість отримувати можливість отримати дату, в якій було виявлено айбільше нових випадків(дату піку захворюваності):
- get_new_deaths() – повертає дату піку захворюваності у вказаній країні.
10.CoronaADT повинен надавати можливість отримувати можливість отримати кількість хворих на одну квадтратну милю:
- get_new_deaths() – повертає кількість хворих на одну квадтратну милю у вказаній країні.
Алгоритм використання CoronaADT:
1.Потрібно створити екземпляр CoronaADT, забезпечивши вимоги до вхідних даних.
2.Після виконання першого пункту можна працювати з цим екземпляром, використовуючи всі способи взаємодії з даними, які CoronaADT забезпечує.
На основі вище згаданих вимог було розроблено ADT, який спрощує взаємодію між користувачем і API. Для збереження хосту і ключа CoronaADT використовує структуру даних стрічка. Статистичні дані абстрактний тип даних отримує за допомогою самого API при виклику певного методу.