-
Notifications
You must be signed in to change notification settings - Fork 1
ДЗ №2. Функціональні нефункціональні вимоги. Дані та бібліотеки.
- Визначення функціональних та нефункціональних вимог до програми
- Опис даних
- Модулі та бібліотеки для роботи з даними в програмі
-
API повинен за запитом користувача повертати json файл з парами команд, та коефіцієнтами на перемогу кожної з них.
-
Сервіс повинен мати опцію додавання нових файлів, щоб статистична модель аналізувала якомога більш актуальну інформацію.
-
Сервіс має надавати можливісь включати, або виключати певні роки чи файли з моделі.
-
За запитом користувача можна буде отримати відповідь, на основі лише статистичних даних з певного відрізку часу.
-
API не повинен використвувати сторонні API, а працювати лише з даними, що зберігаються локально на одному сервері з основним модулем.
-
Завдяки вищезгаданому, час обробки запиту буде мінімальний, робота буде відбуватись безперебійно, та незалежно.
-
Програма повинна виконувати всі обчислення та аналіз без доступу до мережі інтернет.
-
Вимога до безпеки: на результати обробики і виводу безпосередньо впливати має лише адміністратор. Після виконання запиту, програма повинна повернутись до первісного стану, видаливши всі дані про адресата(користувача).
-
Вимога до програмного забезпечення:
Згідно з найпершою нефункціональною вимогою, програма не повинна залежати ані від сторонніх API, ані будь-якими іншими сервісами в інтернеті. Все що потрібно моїй програмі- статистичні дані, які зберігаються локально на сервері з розширенням .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.`
Повний список з поясненням кожної абревіатури можна знайти тут.
-
pandas- програмна бібліотека №1 в мові програмування Python для маніпулювання даними та їх аналізу. В моєму випадку корисна тим, що можна легко зчитувати дані з .csv, .xls, .sql, .json файлів. Також pandas дозволає створити двовимірну структуру даних, в якій наявні назви стовпців та рядки, у яких розміщені значення, які відповідають цим колонкам. Також можна легко та дуже ефективно маніпулювати даними, зокрема зливати колекції, сортувати їх, накладати булеві маски і т.д.
-
numpy- бібліотека мови програмування Python для наукових обчислень, яка досволяє створювати масиви. Очевидна перевага numpy-массиву над звичайним вбудованим масивом полягає в тому, що:
- Всі елементи мають бути однакового типу, і це в свою чергу гарантує виграш в пам'яті, затраченій для зберігання масиву
- Numpy здатен створювати n-вимірні масиви, з якими легко працювати
- Математичні операції над елементами в рази швидші ніж у звичайних масивах за рахуок багатоканальності(операції виконуются паралельно)
- Взаємодіє на низькому рівні з бібліотекою Scikit-learn для швидшої реалізації алгоритмів машинного навчання.
-
matplotlib- чергова бібліотек мови Python для створення статичних, анімованих та інтерактивних візуалізацій. Дуже добре взаємодіє з Numpy та Pandas, адже був написаний під роботу з Numpy-масивами. Я використовутиму 2D візуалізації, а саме гістограми, поточкові графіки(scatter plots), діаграми та спектральні діаграми.
-
datetime- вбудована бібліотека для роботи з часом та датою в Python. Дає можлливість зручно перетворювати одні типи дат в інші
-
flask- популярний фреймворк для розробки вебсайтів. Окрім його ефективності та простоти використання порівняно з більш функціональним конкурентом django, він використовує шаблони Jinja2, та містить достатньо розширень для розвернення повноцінного вебсайту.
-
Scikit-learn- Python бібліотека, яка найширше розповсюджена для Machine Learning. Ця бібліотека підтримує дуже широкий спектр важливих алгоритмів машинного навчання. Містить докладну документацію, та багато доступних ресурсів для її вивчення онлайн.