Changes between Version 1 and Version 2 of DatabaseCreation


Ignore:
Timestamp:
05/02/26 10:28:14 (5 hours ago)
Author:
231091
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseCreation

    v1 v2  
    11== 2A: DDL
    2 - [ddl.sql](ddl.sql)
     2- [attachment:ddl.sql ddl.sql]
    33
    44==  2B: Полнење на табели со податоци
     
    66
    77=== ETL скрипта
    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.
    1010   **Coach_assignment** не се дадени директно во изворот, скриптата ги пресметува датумите така што се собираат прво  информациите за Coach на тимовите поединично (по натпревар) и потоа според датумите на натпреварите се прави проценка на почетокот и крајот на еден договор (Coach_assignment).
    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 минути и веројатностите се поместуваат пропорционално на тековната голова разлика). Судиите добиваат генерирани датуми на раѓање и држави бидејќи овие податоци не се достапни во изворот.
    1212  4. **Transfermarkt** ги полни трансферите и валуациите за играчите кои се веќе внесени од !StatsBomb.
    1313
     
    1515=== SQL скрипти
    1616За некои од табелите нема никакви информации, па тие се генерираат одделно преку SQL скрипти:
    17 - [generators/seat_generator.sql](generators/seat_generator.sql): Генерира седишта (Seat) според капацитетот на стадионот.
     17- [attachment:seat_generator.sql seat_generator.sql]: Генерира седишта (Seat) според капацитетот на стадионот.
    1818
    19 - [generators/ticket_generator.sql](generators/ticket_generator.sql): Се избира случаен fill_rate за секој натпревар и според тоа се пресметуваат зафатените седишта за кои се издадени билети (Ticket).
     19- [attachment:ticket_generator.sql ticket_generator.sql]: Се избира случаен fill_rate за секој натпревар и според тоа се пресметуваат зафатените седишта за кои се издадени билети (Ticket).
    2020
    21 - [generators/contract_generator.sql](generators/contract_generator.sql): Генерира договори за играчи (Player_contract) според Lineup и Match табелите.
     21- [attachment:contract_generator.sql contract_generator.sql]: Генерира договори за играчи (Player_contract) според Lineup и Match табелите.
    2222
    23 - [generators/sponsor_generator.sql](generators/sponsor_generator.sql): Прво вметнува 24 компании (Sponsor), а потоа ги доделува на тимовите, така што секој тим во една сезона има 1-3 спонзори (Sponsor_deal).
     23- [attachment:sponsor_generator.sql sponsor_generator.sql]: Прво вметнува 24 компании (Sponsor), а потоа ги доделува на тимовите, така што секој тим во една сезона има 1-3 спонзори (Sponsor_deal).
    2424
    2525
    2626== Погледи (Views)
     27[attachment:views.sql views.sql]
    2728- **`vw_head_to_head`** — Head‑to‑head по пар (2 тима): број на меѓусебни средби, победи/нерешени/порази, вкупно голови, датум на последен меѓусебен средба и резултатот од истата.
    2829- **`vw_season_overview`** — Сезонски преглед по (дивизија, сезона): вкупно натпревари/голови, просек голови по меч, најголема голова разлика, најмногу комбинирани голови во еден меч и просечна посета (скенирани билети).
    2930- **`vw_utilization`** — Искористеност на стадион по сезона: натпревари, капацитет × натпревари (понуда на седишта), издадени/скенирани билети, процент на скенирање, искористеност (sell‑through) просечна цена и вкупен приход од билети.
    3031- **`vw_match_summary`** — Една редица по натпревар со основни податоци (сезона/дивизија, тимови, стадион, судија) и агрегати од табелата Event: резултат и картони (жолти/црвени/вкупно).
    31 - **`vw_team_season_table`** — Табела по (сезона, тим): одиграни, победи/нерешени/порази, дадени/примени, гол-разлика и бодови (3/1/0), пресметано од резултатите по натпревари.
     32- **`vw_team_season_table`** — Табела по (сезона, тим): одиграни, победи/нерешени/порази, дадени/примени, гол-разлика и бодови, пресметано од резултатите по натпревари.
    3233- **`vw_player_season_stats`** — Статистика по (играч, сезона) за тимот во кој имал најмногу настапи: настапи/стартерски/влегувања, проценка на минути, голови, асистенции и жолти/црвени картони.