Результати виконання домашнього завдання №3 - SlavkoPrytula/Covid-19-Tracker GitHub Wiki

Table of Contents

  1. Опис ADT, які використовуються.
  2. FluADT.
  3. ScrapADT.
  4. CoronaADT.
  5. Діаграма абстрактних типів даних
  6. Приклади використання ADT

Опис АДТ, необхідних для вирішення завдання дослідження

Головною ціллю дослідження є порівняння статистики(смертей, хворих і людей, які виздоровіли) COVID-19 і сезонного грипу. З цілі випливає, що потрібно мати джерела з яких програма буде отримувати дані і абстрактні типи даних, які дозволять зберігати і ефективно працювати з ними.

ADT для грипу.

Після парсення веб сторінок з інформацією про грип з’явилась потреба в абстрактному типі даних, який би дозволив нею оперувати, бо стандартні типи даних python не змогли забезпечити простої взаємодії. Назва цього абстракного – FluADT.

FluADT

Передумови для створення:

Для оптимізації коду ми розбили процес парсення на окремі функції. Почергово викликати їх при зборі даних з кожної вебсторінки не оптимально, тому з'явилась перша причина розробки ADT. Після парсення веб сторінок з інформацією про грип користувач отримує "сирі" дані, які потрібно для початку перетворити в потрібний фомат, щоб проводити подальші операції з ними, ADT б дозволив централізувати процес збору і обробки статистики, тому з'явилась друга причина його створення. Після того, як ми отримали інструменти для отримання готової інформації з'явилась потреба в їх обробці та збереженні. Стандартні структури не змогли забезпечити зручної роботи з даними і це стало останньою причиною розробки ADT. Назва цього абстракного типу даних – FluADT.

Вимоги до вхідних даних:

  1. Було б зручно, щоб FluADT забезпечував повну взаємодію з веб стрінкою і користувачу було б достатньо при створення екземпляру цього абстрактного типу вказати шлях до файлу з посиланнями на потрібні веб ресурси з даними. Також FluADT повинен забезпечувати роботу без вхідних даних, використовуючи складений на стадії його розробки список посилань на потрібні веб ресурси.

  2. Файл, шлях до якого вказується при створенні екземпляру FluADT, повинен бути у форматі txt, а посилання в ньому повинні бути записаними по одному в рядок.

Операції для роботи з даними:

  1. FluADT повинен мати методи, які очищують його і записує дані в нього, використовуючи відповідні вхідні дані:

    • clear() - метод , який очищує FluADT.

    • get_data() - записує у FluADT дані, викристовуючи попередньо записаний список з посиланнями.

    • get_data_file() - метод, який записує дані у FluADT, використовуючи файл з посиланнями.

  2. FluADT повинен забезпечувати можливість отримувати статистичні дані за певний рік і для певного віку:

    • get_statistic_year() - метод, який повертає статистику для певного року.

    • get_statistic_year_age() - метод, який повертає статистику для певного року і віку.

  3. FluADT повинен забезпечувати можливість отримувати кількість померлих, людей, які одужали і загальну кількість хворих за певний рік:

    • get_total_death() - метод, який повертає кількість померлих від грипу в певний рік.

    • get_total_recovered() - метод, який повертає кількість , людей, які одужали від грипу в певний рік.

    • get_total_illnesses() - метод, який повертає кількість померлих від грипу в певний рік.

  4. FluADT повинен надавати можливість отримати середню кількість померлих від грипу за роки про які є інформація в абстракному типі даних.

    • get_avg_deaths() - метод, який повертає середню кількість померлих за роки про які інформації в певному екземплярі FluADT.

    • get_avg_recovered() - метод, який повертає середню кількість, людей, які одужали від грипу за роки про які інформації в певному екземплярі FluADT.

    • get_avg_illnesses() - метод, який повертає середню кількість хворих за роки про які інформації в певному екземплярі FluADT.

  5. FluADT забезпечувати візуалізацію даних, які він містить.

    • str() - метод, який повертає статистичні дані в форматі стрічки.

    • draw() - метод, який візуалізовує інформацію екземпляру FluADT.

Алгоритм використання використання FluADT:

  1. Потрібно створити екземпляр FluADT, забезпечивши вимоги до вхідних даних.
  2. Після виконання першого пункту можна працювати з цим екземпляром, використовуючи всі способи взаємодії, які FluADT забезпечує.

Приклад використання


На основі вище заданих вимог було реалізовано ADT, використовуючи інший абстрактний тип даних і структуру даних словник. Словник забезпечує швидкий і простий доступ до інформації(складність операції O(1)). Використання інших структур даних є недоцільним в цьому випадку, бо процес отримання даних буде незручним і складність цієї операції буде набагато більшою. До прикладу при використання стандартного списку складність отримання статистики грипу за певний рік була б O(n). Процес збору, обробки і зберігання даних з кожної вебсторінки реалізований на основі іншого ADT – ScrapADT.

Go to the top.

ScrapADT

Передумови для створення:

Головною причиною стала потреба поділу розробки FluADT на різні рівні атракції. ScrapADT забезпечує збір, підготовку і відображення даних.

Вимоги до вхідних даних:

  1. При створенні екземпляру цього ADT користувач повинен вказати посилання на вебсторінку з потрібною інформацією, з якої вона буде стягнута.

  2. Посилання повинні бути на розділи з статистикою грипу на сайті cdc.gov (приклад: cdc.gov/flu/about/burden/2010-2011.html)

Операції для роботи з даними:

  1. ScrapADT повинен забезпечувати простий і швидкий доступ до інформації.

  2. ScrapADT повинен забепечувати візуалізацію даних, які в ньому знаходяться:

    • draw() - метод, який забезпечує візуалізацію даних.

    • str() - метод, який повертає статистичні дані в форматі стрічки.

Алгоритм використання використання ScrapADT:

  1. Потрібно створити екземпляр ScrapADT, забезпечивши вимоги до вхідних даних.
  2. Після виконання першого пункту можна працювати з цим екземпляром, використовуючи всі способи взаємодії, які ScrapADT забезпечує.

Приклад використання


На основі вище згаданих вимог було реалізовано ADT, який використовує допоміжний клас FluData і структуру даних словник. Словник забезпечує швидкий і зручний доступ до екземплярів класу FluData(складність операції O(1)). Використання інших структур даних не є доцільним, бо складність операцій при роботі з даними буде вищою (O(n)), а сам процес не є зручним.

Go to the top.

Class FluData:

Опис атрибутів:

 age - вік людей, про яких екземпляр цього класу містить інформацію. 

 sympthoms – кількість людей, в яких були симптоми. 

 visits - кількість людей, які звернулись до лікаря. 

 hospitalizations - кількість людей, які були госпіталізовані. 

 deaths - кількість людей, які померли. 

Опис методів:

+ to_list() - повертає список всіх аргументів 

+ __str__() - метод, який повертає статистичні дані в форматі стрічки. 

Go to the top.

ADT для COVID-19

Використання методів АПІ, який надає статистичні дані COVID-19 , виявилось незручним. Тому було прийняте рішення розробити ADT, який би забезпечив зручну роботу з даними, відповідно до цілей дослідження.

CoronaADT

Передумови для створення:

Головною причиною створення CoronaADT стала потреба в абстрагуванні користувача від роботи з API і наданні потрібних інструментів для подальшого вирішення завдання дослідження.

Вимоги до вхідних даних:

  1. При створенні екземпляру CoronaADT повинна бути можливість вказати країну в форматі:
  • Назва країни повинна бути написана латиницею.

  • Назва країни повинна починатись з великої букви.

  • Назва країни повинна бути подана у вигляді стрічки(string).

і отримати можливість працювати з її статистичними даними.

  1. Повинна бути можливість створити екземпляр 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 при виклику певного методу.

Go to the top.

Діаграма для FluADT

Go to the top.

Приклади використання ADT: