Co to robi
Program czyta plik CSV ze sprzedażą, sprawdza dane, liczy KPI, rysuje wykresy, zapisuje wyniki (CSV/Excel/JSON) i drukuje czytelne podsumowanie w konsoli.
1) Wymagania (co musisz mieć)
- Python 3.10+
- Biblioteki:
pip install pandas matplotlib openpyxlopenpyxljest tylko do zapisu Excela – jak nie chcesz Excela, możesz to pominąć i uruchomić z--no-excel.
2) Dane wejściowe (twój CSV)
Utwórz plik sprzedaz.csv i wklej np. to (UTF-8, przecinki):
data,miasto,produkt,ilosc,cena
2025-01-03,Warszawa,Kawa,3,18.5
2025-01-03,Gdańsk,Herbata,2,12
2025-01-05,Poznań,Kawa,1,19
2025-01-06,Warszawa,Czekolada,5,7.5
2025-01-07,Gdańsk,Kawa,4,18.5
2025-01-12,Warszawa,Herbata,3,12
2025-01-17,Poznań,Czekolada,10,7.5
2025-01-25,Warszawa,Kawa,6,18.5
3) Struktura katalogu (prosto)
projekt_raport/
app.py <- plik z kodem
sprzedaz.csv <- dane
out/ <- tu wylądują wyniki (folder zrobi się sam)
4) Jak uruchomić
W terminalu (będąc w folderze projektu):
python app.py --input sprzedaz.csv --out out
Dodatkowe opcje:
--sep ";"– jeśli CSV ma średniki,--encoding "cp1250"– jeśli masz inne kodowanie,--no-excel– jeśli nie chcesz pliku Excel.
Po uruchomieniu pojawi się folder out/ z:
dane_wzbogacone.csv(oryginał + wyliczony przychód, miesiąc),top_miasta.csv,top_produkty.csv,miesiecznie.csv,dziennie.csv,raport.xlsx(jeśli nie wyłączyłeś/aś),kpi.json(krótkie podsumowanie liczb),wykres_top_miasta.png,wykres_miesiecznie.png,wykres_dziennie.png.
5) Co robi kod – krok po kroku, po ludzku
(A) Wczytanie i walidacja
load_csv(...)– otwiera CSV. Jeśli pliku brak albo separator/kodowanie nie gra – dostaniesz jasny komunikat.validate_df(df):- sprawdza, czy są wymagane kolumny:
data, miasto, produkt, ilosc, cena, - czyści tekst: obcina spacje, ujednolica miasta (np.
warszawa→Warszawa), - zamienia kolumny na właściwe typy:
data→ daty,ilosc/cena→ liczby, - jeśli są braki (NaN) – wypisze ile i wyrzuci te wiersze,
- jeśli
ilosclubcenasą ujemne – usuwa takie rekordy (to „sanity check”).
- sprawdza, czy są wymagane kolumny:
Po tym kroku masz czysty, spójny zestaw danych.
(B) Wzbogacenie danych + KPI
enrich(df):- liczy
przychod = ilosc * cena, - robi kolumnę
miesiac(przydatne do raportów miesięcznych).
- liczy
compute_kpi(df):- zwraca słownik z liczbami:
sztuki_sum– suma sprzedanych sztuk,przychod_sum– łączny przychód,transakcje– ile wierszy (rekordów),srednia_cena– średnia cena,sredni_koszyk_pln– przychód / liczba transakcji.
- zwraca słownik z liczbami:
(C) Raporty tabelaryczne
build_reports(df)tworzy 4 tabele:top_miasta– przychód zgrupowany po mieście, malejąco,top_produkty– suma sztuk po produkcie, malejąco,miesiecznie– przychód per miesiąc (chronologicznie),dziennie– przychód per dzień (puste dni uzupełnione zerami).
(D) Zapisy wyników
save_outputs(...):- zapisuje wzbogacone dane do
dane_wzbogacone.csv, - zapisuje każdy raport do osobnego CSV,
- (opcjonalnie) pakuje wszystko do Excela (osobne arkusze),
- zapisuje KPI do
kpi.json(ładny, czytelny JSON).
- zapisuje wzbogacone dane do
(E) Wykresy
make_plots(...)tworzy 3 obrazki:- słupki:
Przychód wg miast, - linia:
Przychód miesięczny+ średnia krocząca (3), - linia:
Przychód dzienny.
- słupki:
- Każdy wykres ma tytuł i opisy osi; zapisywany jest do PNG.
(F) Czytelny wydruk w konsoli
print_console_summary(...)drukuje na ekran:- najważniejsze KPI w wierszach,
- TOP miasta z prostym „paskiem” (ASCII) – od razu widać, kto prowadzi.
6) Co zobaczysz w konsoli (przykładowo)
=== PODSUMOWANIE ===
Suma sztuk: 34
Suma przychodu: 715.50 PLN
Liczba transakcji: 8
Śr. cena: 14.69 PLN
Śr. wartość koszyka:89.44 PLN
TOP miasta (przychód):
Warszawa ████████████████████████████████████ ...
Gdańsk ██████████████████████ ...
Poznań ███████████████ ...
(paski są skalowane do najlepszego miasta, żeby było proporcjonalnie)
7) Typowe problemy i szybkie naprawy
- „Plik nie istnieje” – sprawdź ścieżkę i nazwę (
--input). - Złe separator/kodowanie – użyj
--sep ";"albo--encoding "cp1250". - Brakuje kolumn – CSV musi mieć:
data, miasto, produkt, ilosc, cena. - SettingWithCopyWarning – w kodzie modyfikujemy przez
loc, więc nie powinno wyskakiwać; jeśli dorobisz własne operacje, też używajdf.loc[...,"kol"] = .... - Excel nie zapisuje – doinstaluj
openpyxlalbo uruchom z--no-excel.
8) Jak to rozbudować (łatwe pomysły)
- Filtr dat: dodaj opcje
--date-from/--date-toi przed raportami wyfiltruj:df = df[(df["data"] >= data_od) & (df["data"] <= data_do)] - TOP-N: dorzuć
--top 10i bierz.head(top)przy drukowaniu/wykresach. - Tryb interaktywny: proste
input()z menu (np. „1 – TOP miasta, 2 – miesięcznie”). - Logi do pliku: moduł
loggingi zapis czasu + błędów doout/run.log. - Schemat w JSON/YAML: lista kolumn i typów – walidujesz przed obróbką.
9) Checklista przed wysłaniem raportu
- CSV otwiera się bez błędów (ścieżka, separator, kodowanie).
- Wymagane kolumny są; braki i ujemne wartości obsłużone.
- KPI mają sens (np. przychód nie ujemny).
- Wykresy mają tytuł i osie i zapisują się do PNG.
- Pliki CSV/Excel otwierają się w arkuszu bez „krzaczków” (UTF-8).
Masz już wszystko
Ta apka to gotowy szkielet. Wrzucasz swój CSV, odpalasz, a ona:
- sprząta dane,
- liczy KPI,
- buduje raporty/wykresy,
- zapisuje wyniki,
- drukuje podsumowanie.
Masz gotową mini-apkę raportową, która łączy umiejętności z całego kursu: wczytywanie i czyszczenie danych, logiczne decyzje i pętle, funkcje, moduły, wyjątki, operacje na plikach oraz podstawową analitykę i wizualizację. To nie jest „zabawka” — to szkielet, który łatwo rozbudujesz pod własne dane i potrzeby.
Dziękuję za wspólną drogę przez 15 odcinków.

