Skip to content

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

Max edited this page May 19, 2020 · 12 revisions

Навігація

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

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

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

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

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

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

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

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

  • 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. Ця бібліотека підтримує дуже широкий спектр важливих алгоритмів машинного навчання. Містить докладну документацію, та багато доступних ресурсів для її вивчення онлайн.