| 8 | | - [python_scripts/script_finki.py](python_scripts/script_finki.py): ETL скрипта во која се извршуваат три pipelines за да се пополни базата. Изворите се CSV/JSON датотеки: |
| 9 | | 1. Од **!StatsBomb** се превземаат Match, Lineup и Event (со тоа и Event_type и Event_attribute). Полиња што изворот ги нема се генерираат: `Player.date_of_birth`, `Stadium.capacity`, `Stadium.year_built`. |
| | 8 | - [attachment:seeding_script.py seeding_script.py]: ETL скрипта во која се извршуваат три pipelines за да се пополни базата. Изворите се CSV/JSON датотеки: |
| | 9 | 1. Од **!StatsBomb** се превземаат Match, Lineup и Event (со тоа и Event_type и Event_attribute). Полиња што изворот ги нема се генерираат: Player.date_of_birth, Stadium.capacity, Stadium.year_built. |
| 11 | | 3. **football-data** додава коефициенти и судии. Се откриваат bookmaker тројки (на пр. `B365H/B365D/B365A` - B365 е bookmaker, додека H,D,A се коефициентите за да победи домашниот тим, нерешено или гостинскиот тим соодветно). За секој ред се барa постоечки натпревар од !StatsBomb, ако нема — се прескокнува. Реалните коефициенти се запишуваат, а потоа за секој натпревар се пресметуваат просечни веројатности (1/odds преку букмејкери), па се синтетизира серија „Generated" на секои 10 минути од натпреварот( финалниот SB-резултат се распределува линеарно низ 90 минути и веројатностите се поместуваат пропорционално на тековната голова разлика). Судиите добиваат генерирани датуми на раѓање и држави бидејќи овие податоци не се достапни во изворот. |
| | 11 | 3. **football-data** додава коефициенти и судии. Се откриваат bookmaker тројки (на пр. **B365H/B365D/B365A** - B365 е bookmaker, додека H,D,A се коефициентите за да победи домашниот тим, нерешено или гостинскиот тим соодветно). За секој ред се барa постоечки натпревар од !StatsBomb, ако нема — се прескокнува. Реалните коефициенти се запишуваат, а потоа за секој натпревар се пресметуваат просечни веројатности (1/odds преку букмејкери), па се синтетизира серија „Generated" на секои 10 минути од натпреварот( финалниот SB-резултат се распределува линеарно низ 90 минути и веројатностите се поместуваат пропорционално на тековната голова разлика). Судиите добиваат генерирани датуми на раѓање и држави бидејќи овие податоци не се достапни во изворот. |
| 27 | 28 | - **`vw_head_to_head`** — Head‑to‑head по пар (2 тима): број на меѓусебни средби, победи/нерешени/порази, вкупно голови, датум на последен меѓусебен средба и резултатот од истата. |
| 28 | 29 | - **`vw_season_overview`** — Сезонски преглед по (дивизија, сезона): вкупно натпревари/голови, просек голови по меч, најголема голова разлика, најмногу комбинирани голови во еден меч и просечна посета (скенирани билети). |
| 29 | 30 | - **`vw_utilization`** — Искористеност на стадион по сезона: натпревари, капацитет × натпревари (понуда на седишта), издадени/скенирани билети, процент на скенирање, искористеност (sell‑through) просечна цена и вкупен приход од билети. |
| 30 | 31 | - **`vw_match_summary`** — Една редица по натпревар со основни податоци (сезона/дивизија, тимови, стадион, судија) и агрегати од табелата Event: резултат и картони (жолти/црвени/вкупно). |