Skip to content

ДЗ №2. Функціональні нефункціональні вимоги. Дані та бібліотеки.

Max edited this page May 9, 2020 · 12 revisions

Навігація

  1. Визначення функціональних та нефункціональних вимог до програми
  2. Опис даних
  3. Модулі та бібліотеки для роботи з даними в програмі

Визначення функціональних та нефункціональних вимог до програми

Функціональні вимоги

  1. API повинен за запитом користувача повертати json файл з парами команд, та коефіцієнтами на перемогу кожної з них.

  2. Окрім API, має бути доступний інтерфейс у вигляді веб-застосунку чи телеграм-бота для більш доступної візуальної репрезентації статистики

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

  4. Сервіс має надавати можливісь включати, або виключати певні роки чи файли з моделі.

  5. За запитом користувача можна буде отримати відповідь, на основі лише статистичних даних з певного відрізку часу.

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

  • API не повинен використвувати сторонні API, а працювати лише з даними, що зберігаються локально на одному сервері з основним модулем.

  • Завдяки вищезгаданому, час обробки запиту буде мінімальний, робота буде відбуватись безперебійно, та незалежно.

  • Програма повинна виконувати всі обчислення та аналіз без доступу до мережі інтернет.

  • Вимога до безпеки: на результати обробики і виводу безпосередньо впливати має лише адміністратор. Після виконання запиту, програма повинна повернутись до первісного стану, видаливши всі дані про адресата(користувача).

  • Вимога до програмного забезпечення:

    1. Сервіс повинен однаково працювати на всіх найпопулярніших операційних системах: Microsoft Windows, Apple macOS, Linux, Android та Apple's iOS.
    2. Система повинна мати опцію розширення (при наявністі новіших баз з статистичними даними).

Опис даних, з якими буле працювати програма

Згідно з найпершою нефункціональною вимогою, програма не повинна залежати ані від сторонніх API, ані будь-якими іншими сервісами в інтернеті. Все що потрібно моїй програмі- статистичні дані, які зберігаються локально на сервері з розширенням .csv

CSV

CSV (comma-separated value)- текстовий файл, в якому міститься таблична aінформація, а поля розділені спеціальними символами-розділювачами(комами). Такі файли мають ряд застосувань на практиці завдяки своїй простоті: відкривати такі файли можна за допомогою більшості мов програмування та текстових редакторів, та для імпортування потрбна мінімальна кількість пам'яті, порівняно з іншими типами файлів. .csv файл став стандартом в численних сферах людського життя, в тому числі і в Data Science.

Я планую використовувати декілька .csv файлів, завантажених звідси. Ось приклад читання одного з них:

import pandas as pd
import numpy as np
df = pd.read_csv('dataset/data/season-1819_csv.csv')
df.head(6)
| Div | Date       | HomeTeam     | AwayTeam       | FTHG | FTAG | FTR | HTHG | HTAG | HTR | Referee    | HS | AS | HST | AST | HF | AF | HC | AC | HY | AY | HR | AR | B365H | B365D | B365A | BWH  | BWD | BWA  | IWH  | IWD  | IWA  | PSH  | PSD  | PSA  | WHH  | WHD | WHA  | VCH  | VCD | VCA  | Bb1X2 | BbMxH | BbAvH | BbMxD | BbAvD | BbMxA | BbAvA | BbOU | BbMx>2.5 | BbAv>2.5 | BbMx<2.5 | BbAv<2.5 | BbAH | BbAHh | BbMxAHH | BbAvAHH | BbMxAHA | BbAvAHA | PSCH | PSCD | PSCA | 
|-----|------------|--------------|----------------|------|------|-----|------|------|-----|------------|----|----|-----|-----|----|----|----|----|----|----|----|----|-------|-------|-------|------|-----|------|------|------|------|------|------|------|------|-----|------|------|-----|------|-------|-------|-------|-------|-------|-------|-------|------|----------|----------|----------|----------|------|-------|---------|---------|---------|---------|------|------|------| 
| E0  | 10/08/2018 | Man United   | Leicester      | 2    | 1    | H   | 1    | 0    | H   | A Marriner | 8  | 13 | 6   | 4   | 11 | 8  | 2  | 5  | 2  | 1  | 0  | 0  | 1.57  | 3.9   | 7.5   | 1.53 | 4   | 7.5  | 1.55 | 3.8  | 7    | 1.58 | 3.93 | 7.5  | 1.57 | 3.8 | 6    | 1.57 | 4   | 7    | 39    | 1.6   | 1.56  | 4.2   | 3.92  | 8.05  | 7.06  | 38   | 2.12     | 2.03     | 1.85     | 1.79     | 17   | -0.75 | 1.75    | 1.7     | 2.29    | 2.21    | 1.55 | 4.07 | 7.69 | 
| E0  | 11/08/2018 | Bournemouth  | Cardiff        | 2    | 0    | H   | 1    | 0    | H   | K Friend   | 12 | 10 | 4   | 1   | 11 | 9  | 7  | 4  | 1  | 1  | 0  | 0  | 1.9   | 3.6   | 4.5   | 1.9  | 3.4 | 4.4  | 1.9  | 3.5  | 4.1  | 1.89 | 3.63 | 4.58 | 1.91 | 3.5 | 4    | 1.87 | 3.6 | 4.75 | 39    | 1.93  | 1.88  | 3.71  | 3.53  | 4.75  | 4.37  | 38   | 2.05     | 1.98     | 1.92     | 1.83     | 20   | -0.75 | 2.2     | 2.13    | 1.8     | 1.75    | 1.88 | 3.61 | 4.7  | 
| E0  | 11/08/2018 | Fulham       | Crystal Palace | 0    | 2    | A   | 0    | 1    | A   | M Dean     | 15 | 10 | 6   | 9   | 9  | 11 | 5  | 5  | 1  | 2  | 0  | 0  | 2.5   | 3.4   | 3     | 2.45 | 3.3 | 2.95 | 2.4  | 3.3  | 2.95 | 2.5  | 3.46 | 3    | 2.45 | 3.3 | 2.8  | 2.5  | 3.4 | 3    | 39    | 2.6   | 2.47  | 3.49  | 3.35  | 3.05  | 2.92  | 38   | 2        | 1.95     | 1.96     | 1.87     | 22   | -0.25 | 2.18    | 2.11    | 1.81    | 1.77    | 2.62 | 3.38 | 2.9  | 
| E0  | 11/08/2018 | Huddersfield | Chelsea        | 0    | 3    | A   | 0    | 2    | A   | C Kavanagh | 6  | 13 | 1   | 4   | 9  | 8  | 2  | 5  | 2  | 1  | 0  | 0  | 6.5   | 4     | 1.61  | 6.25 | 3.9 | 1.57 | 6.2  | 4    | 1.55 | 6.41 | 4.02 | 1.62 | 5.8  | 3.9 | 1.57 | 6.5  | 4   | 1.62 | 38    | 6.85  | 6.09  | 4.07  | 3.9   | 1.66  | 1.61  | 37   | 2.05     | 1.98     | 1.9      | 1.84     | 23   | 1     | 1.84    | 1.8     | 2.13    | 2.06    | 7.24 | 3.95 | 1.58 | 
| E0  | 11/08/2018 | Newcastle    | Tottenham      | 1    | 2    | A   | 1    | 2    | A   | M Atkinson | 15 | 15 | 2   | 5   | 11 | 12 | 3  | 5  | 2  | 2  | 0  | 0  | 3.9   | 3.5   | 2.04  | 3.8  | 3.5 | 2    | 3.7  | 3.35 | 2.05 | 3.83 | 3.57 | 2.08 | 3.8  | 3.2 | 2.05 | 3.9  | 3.4 | 2.1  | 39    | 4.01  | 3.83  | 3.57  | 3.4   | 2.12  | 2.05  | 38   | 2.1      | 2.01     | 1.88     | 1.81     | 20   | 0.25  | 2.2     | 2.12    | 1.8     | 1.76    | 4.74 | 3.53 | 1.89 | 

6 rows × 62 columns

Кожен поєдинок характеризується 62 колонками з різноманітною інформацією про матч. Ось розшифрування найважливіших з них:

Date = Match Date (dd/mm/yy); FTHG = Full Time Home Team Goals; FTAG = Full Time Away Team Goals; FTR = Full Time Result (H=Home Win, D=Draw, A=Away Win); HTR = Half Time Result (H=Home Win, D=Draw, A=Away Win); HS = Home Team Shots; AS = Away Team Shots; HST = Home Team Shots on Target; HHW = Home Team Hit Woodwork; HF = Home Team Fouls Committed.`

Повний список з поясненням кожної абревіатури можна знайти тут.

Модулі та бібліотеки для роботи з даними в програмі

  1. pandas- програмна бібліотека №1 в мові програмування Python для маніпулювання даними та їх аналізу. В моєму випадку корисна тим, що можна легко зчитувати дані з .csv, .xls, .sql, .json файлів. Також pandas дозволає створити двовимірну структуру даних, в якій наявні назви стовпців та рядки, у яких розміщені значення, які відповідають цим колонкам. Також можна легко та дуже ефективно маніпулювати даними, зокрема зливати колекції, сортувати їх, накладати булеві маски і т.д.

  2. numpy- бібліотека мови програмування Python для наукових обчислень, яка досволяє створювати масиви. Очевидна перевага numpy-массиву над звичайним вбудованим масивом полягає в тому, що:

    1. Всі елементи мають бути однакового типу, і це в свою чергу гарантує виграш в пам'яті, затраченій для зберігання масиву
    2. Numpy здатен створювати n-вимірні масиви, з якими легко працювати
    3. Математичні операції над елементами в рази швидші ніж у звичайних масивах за рахуок багатоканальності(операції виконуются паралельно)
    4. Взаємодіє на низькому рівні з бібліотекою Scikit-learn для швидшої реалізації алгоритмів машинного навчання.
  3. matplotlib- чергова бібліотек мови Python для створення статичних, анімованих та інтерактивних візуалізацій. Дуже добре взаємодіє з Numpy та Pandas, адже був написаний під роботу з Numpy-масивами. Я використовутиму 2D візуалізації, а саме гістограми, поточкові графіки(scatter plots), діаграми та спектральні діаграми.

  4. datetime- вбудована бібліотека для роботи з часом та датою в Python. Дає можлливість зручно перетворювати одні типи дат в інші

  5. flask- популярний фреймворк для розробки вебсайтів. Окрім його ефективності та простоти використання порівняно з більш функціональним конкурентом django, він використовує шаблони Jinja2, та містить достатньо розширень для розвернення повноцінного вебсайту.

  6. Scikit-learn- Python бібліотека, яка найширше розповсюджена для Machine Learning. Ця бібліотека підтримує дуже широкий спектр важливих алгоритмів машинного навчання. Містить докладну документацію, та багато доступних ресурсів для її вивчення онлайн.