Za znatiželjne · nije nužno za pokretanje
Obilazak koda
Prolazak kroz svaku datoteku koda u projektu, običnim jezikom. Ako želiš samo pokrenuti stvari, dovoljna je stranica Kako pokrenuti — ovdje je „ispod haube".
1. Mini-rječnik koda (za čitanje snippeta)
Kod je pisan u Pythonu. Nekoliko pojmova dovoljno je da razumiješ isječke ispod:
| U kodu piše | Znači |
|---|---|
# nešto | Komentar — poruka za čovjeka; računalo ga preskače. |
import pandas | „Učitaj alat" (paket) koji ćemo koristiti. |
x = 5 | Varijabla — spremljena vrijednost pod imenom x. |
def ime(...): | Funkcija — imenovani „recept" koji nešto obavi kad ga pozoveš. |
for r in lista: | Petlja — ponovi isti posao za svaki element u listi. |
if uvjet: | Uvjet — napravi nešto samo ako je istina. |
DataFrame | Tablica u memoriji (kao list u Excelu), iz alata pandas. |
2. Struktura projekta
Ovako je posložena glavna mapa C:\GIT\selena:
selena\
├─ dokumentacija\ ← OVE web-stranice (upute)
├─ doprinos1_geolokacija\ ← NAŠ novi kod (regex vs LLM)
│ ├─ putanje.py ← sve putanje do podataka
│ ├─ geolokator_regex.py ← regex geolokator (mjesto + vrijeme)
│ ├─ napravi_gold_set.py ← pravi Excel za označavanje
│ └─ rezultati\ ← izlazi (gold_set_...xlsx)
├─ splitech\ ← podaci + stari notebookovi (analiza)
├─ vatrogasci\ ← podaci + karta naselja (.shp)
├─ .venv\ ← Python okruženje (ne dirati ručno)
├─ requirements.txt ← popis potrebnih paketa
├─ provjera_okruzenja.py ← provjeri da sve radi
├─ pokreni_jupyter.bat ← dupli klik = pokreni Jupyter
└─ otvori_upute.bat ← dupli klik = otvori ovu dokumentaciju
3. Kod okruženja (postavljanje)
requirements.txt — popis alata
Obična lista paketa koje projekt treba. Naredba pip install -r requirements.txt ih sve instalira odjednom:
pandas # rad s tablicama
geopandas # rad s kartama (shapefile)
scikit-learn # statistika, normalizacija
prophet # predviđanje vremenskih nizova
regex # napredni regularni izrazi
# anthropic # (kasnije) LLM za Doprinos 1
provjera_okruzenja.py — je li sve spremno?
Skripta koja redom pokuša učitati svaki paket i pročitati jednu tablicu i jednu kartu. Srce je jednostavna petlja:
paketi = ["pandas", "numpy", "geopandas", "prophet", ...]
for ime in paketi:
try:
modul = __import__(ime) # pokušaj učitati paket
print("OK ", ime, modul.__version__)
except Exception:
print("XX ", ime, "NEDOSTAJE") # ako ne uspije, javi
Na kraju pročita kartu naselja da potvrdi da i to radi:
import geopandas as gpd
gdf = gpd.read_file("vatrogasci/CROATIA_HR_Naselja_ADMIN3.shp")
print(len(gdf), "naselja") # ispiše: 6758 naselja
Ako skripta na kraju ispiše „SVE RADI", okruženje je ispravno postavljeno.
Pomoćne .bat datoteke — dupli klik
Da osoba ne mora pisati naredbe, dvije male datoteke rade to umjesto nje. pokreni_jupyter.bat sadrži:
cd /d "%~dp0" <- uđi u mapu gdje je ova datoteka
call ".venv\Scripts\activate.bat" <- uključi Python okruženje
jupyter notebook <- pokreni Jupyter
otvori_upute.bat je još jednostavniji — samo otvori ovu dokumentaciju u pregledniku:
start "" "%~dp0dokumentacija\index.html"
4. Kod geolokacije
putanje.py — gdje su podaci
Stari kod (Google Colab) imao je putanje poput /content/drive/MyDrive/... koje ovdje ne rade. Zato su sve putanje na jednom mjestu i računaju se automatski od mape projekta:
from pathlib import Path
# KORIJEN = glavna mapa projekta (dva nivoa iznad ove datoteke)
KORIJEN = Path(__file__).resolve().parent.parent
NASELJA_SHP = KORIJEN / "vatrogasci" / "CROATIA_HR_Naselja_ADMIN3.shp"
HVZ_CSV = KORIJEN / "splitech" / "posts_hvz2022.csv"
Zašto je ovo dobro: ako se cijela mapa premjesti na drugo računalo, putanje i dalje rade — ništa se ne mora ručno mijenjati.
geolokator_regex.py — glavni algoritam
Ovo je „mozak" regex pristupa (izvlači mjesto i vrijeme iz teksta). Detaljno je objašnjen, red-po-red, na stranici Doprinos 1 → Regex pristup. Ukratko radi u tri koraka: nađi riječi velikim slovom → usporedi s kartom od 6758 naselja → uzmi najmanje/najsličnije.
5. Kod gold seta
napravi_gold_set.py — priprema Excela za označavanje
Uzme uzorak tekstova, upiše regex prijedloge i sve spremi u lijep Excel. Dva ključna dijela:
Prepoznavanje požarnih objava (jednostavno, po ključnim riječima):
KLJUCNE = ["požar", "vatra", "intervenc", "dim", "teren", ...]
def je_pozar(tekst):
# vrati True ako tekst sadrži bilo koju ključnu riječ
return any(k in tekst for k in KLJUCNE)
Nasumični, ali ponovljivi uzorak (uvijek isti zahvaljujući „sjemenu" 42):
hvz = hvz.drop_duplicates(subset=["opis"]) # makni duplikate
uzorak = hvz.sample(n=90, random_state=42) # nasumično 90 izvješća
Napomena: baš ovaj je_pozar po ključnim riječima lovi i lažne pozitive (nogomet „Vatreni"). To je jedan od razloga zašto uspoređujemo s LLM-om koji razumije kontekst.
6. Naslijeđeni notebookovi (stari rad)
U folderima splitech\ i vatrogasci\ su Jupyter notebookovi (.ipynb) iz ranijeg rada. Oni sadrže izvornu analizu (statistika, korelacije, predviđanje), ali su pisani na Google Colabu, pa im putanje počinju s /content/drive/....
Ti stari notebookovi neće raditi „iz prve" dok se putanje ne prilagode lokalnima. Njihov koristan kod postupno prebacujemo u čiste, komentirane .py module (kao geolokator_regex.py). Za pregled što koji notebook radi vidi Mapu projekta.
Svaka .py datoteka i iznutra je bogato komentirana na hrvatskom — otvori je u bilo kojem uređivaču teksta ako želiš vidjeti puni kod.