Klasa 3 LO · 30 lekcji Modelowanie matematyczne

Lekcja 13 · Warsztat

CSV: od pliku do wykresu

Surowa tabela w pliku, potem Excel albo matplotlib. Bez scalonych komórek i kolorów zamiast liczb.

Po tej lekcji

Plik materialy/obecni.csv w podręczniku. To surowy dziennik: dzień i liczba obecnych. Pytanie: narysować obecność i nie zniszczyć oryginału, gdy dopiszemy procent.

Karta modelu: dane, założenia, parametry

WielkośćSymbolWartośćJednostkaSkąd się wzięłaRodzaj
Dzieńdzien1…5dzieńkolumna CSVdana
Obecniobecni28…29osobykolumna CSVdana
Separator—średnik—polski Excelzałożenie formatu
Procent frekwencji—obecni/32%tylko w kopii plikuwynik modelu, nie raw

Rodzaj: dana z dokumentu lub pomiaru; założenie — świadome uproszczenie; parametr — gałka, którą kręcimy w wariantach; wynik — to, co model ma policzyć.

dzien;obecni
1;28
2;27
3;30
4;25
5;29
import csv
import matplotlib.pyplot as plt

def wczytaj_obecnych(sciezka):
    dni, obecni = [], []
    with open(sciezka, encoding="utf-8") as f:
        reader = csv.DictReader(f, delimiter=";")
        for row in reader:
            dni.append(int(row["dzien"]))
            obecni.append(int(row["obecni"]))
    return dni, obecni

def wykres_obecnych(sciezka, tytul):
    dni, obecni = wczytaj_obecnych(sciezka)
    plt.plot(dni, obecni, marker="o")
    plt.title(tytul)
    plt.xlabel("Dzień")
    plt.ylabel("Osoby")
    plt.grid(True)
    plt.show()

wykres_obecnych("obecni.csv", "Obecni — dane z CSV")

Sprawdź się. Dlaczego kolory i scalanie psują CSV?

Ćwiczenia samodzielne

Zrób przynajmniej dwa. Wynik Excel i Python ma się zgadzać z kartką.

  1. Otwórz obecni.csv w Excelu i zrób wykres.
  2. Uruchom skrypt Pythona (plik obok skryptu, ten sam folder).
  3. Dodaj szósty dzień 31 osób — w CSV, potem odśwież oba wykresy.
  4. Zapisz kopię obecni_model.csv i tylko w kopii dodaj kolumnę procentu. Surowe dane zostają.
Odpowiedzi (dopiero po samodzielnej pracy)
  1. Separator średnik.
  2. Jeśli FileNotFoundError: ustaw katalog roboczy.
  3. obie listy długości 6.
  4. Zasada: raw vs model.