5.4

Tabele i CSV

Pytania o dane po ludzku

STRESZCZENIE

Jak analizować pliki z danymi.

Arkusz ze sprzedażą z dwóch lat. Kilkaset wierszy, dwanaście kolumn, w tym trzy, o których nikt już w firmie nie pamięta, po co powstały. Szef łapie Cię przy ekspresie: "który klient nam najbardziej spadł względem zeszłego roku?"

Wiesz, co to znaczy. Tabela przestawna. Filtry. Dwie kolumny pomocnicze. Pół popołudnia, przy założeniu, że pamiętasz jeszcze, gdzie Excel chowa tabelę przestawną, bo ostatnią robiłeś w marcu.

Możesz zamiast tego wrzucić plik do chatbota i zapytać dokładnie tymi słowami, których użył szef. Odpowiedź przyjdzie w minutę.

I tu jest haczyk. Ta odpowiedź może być policzona albo zmyślona, a na ekranie jedna od drugiej różni się dokładnie niczym. Obie mają przecinek w dobrym miejscu i ten sam pewny ton. Article image

Chatbot czyta tabelę na dwa sposoby

To najważniejsza rzecz w całym rozdziale.

Sposób pierwszy: model czyta plik jak zwykły tekst i przewiduje, jaka odpowiedź jest prawdopodobna. Tak działa domyślnie. Pytasz "ile mam wierszy z Warszawą", dostajesz liczbę, która wygląda rozsądnie. Czasem nawet trafia. To jak kelner, który zamiast położyć porcję na wadze, mierzy ją wzrokiem i mówi "będzie ze czterysta gramów". Zwykle nie kłamie. Ale nie zważył.

Sposób drugi: model pisze kilka linijek kodu w Pythonie, uruchamia je na Twoim pliku i podaje wynik. Wtedy 4127 to naprawdę 4127, bo program to policzył.

W Claude nazywa się to analizą danych, w ChatGPT trybem analitycznym (kiedyś Advanced Data Analysis), Gemini ma swoją nazwę. Nazwy zmieniają się co pół roku, mechanizm pod spodem ten sam.

Poznasz po zwijanym okienku z kodem albo po komunikacie, że narzędzie analizuje plik. Jeśli tego nie ma, a liczba jest, to liczba przyszła z wyobraźni.

Więc pisz wprost:

Policz to kodem, nie szacuj na oko.
Pokaż mi kod, którego użyłeś.

Kodu nie musisz rozumieć. Ma po prostu być. Tak samo jak nie trzeba znać budowy wagi, żeby zauważyć, że kelner jej nie użył.

Kwadrans na posprzątanie pliku

Arkusze robimy dla ludzkiego oka. Scalone komórki w nagłówku, żeby ładnie wyglądało. Wiersz RAZEM w środku, bo akurat tam pasował. Pusty wiersz dla oddechu. Trzy odcienie żółtego, których znaczenia nie pamięta już nikt, łącznie z autorką, która odeszła z firmy w 2023.

Zanim wrzucisz plik, zrób kopię i posprzątaj.

Jeden wiersz nagłówka, na samej górze. Nie musi mieć tytułu nad tabelą czy też logo. To nic nie wniesie.

Nazwij kolumny po ludzku. sprzedaz_netto_pln mówi wszystko. Kol4 nie mówi nic, więc chatbot będzie zgadywał, co tam trzymasz.

Zapisz jako CSV UTF-8, jeśli dane siedzą w jednej zakładce. Plik z ośmioma arkuszami, makrami i formatowaniem warunkowym też się otworzy. Tylko po co.

I tutaj się możesz wkurzyć. Jeżeli analizujesz jednorazowo plik to po prostu go wrzuć takim jaki masz. Jeżeli będziesz robił to wielokrotnie to lepiej posprzątać. Poświęcisz czas raz, ale oszczędzisz tokeny i prawdopodobnie zwiększysz skuteczność za każdym razem.

Najpierw rozpoznanie terenu

Kusi, żeby wejść z buta i od razu zapytać o wynik. Lepiej sprawdzić, czy maszyna widzi ten sam plik, co Ty.

Załączam plik sprzedaz_2024_2025.csv.
Zanim cokolwiek policzymy, opisz mi go:
- ile ma wierszy i kolumn
- jak nazywa się każda kolumna i jaki typ danych zawiera
- jaki jest zakres dat
- ile pustych wartości jest w każdej kolumnie
- pokaż 5 przykładowych wierszy

Policz to kodem. Nic nie zgaduj.

Trzydzieści sekund, a wychodzą rzeczy, o których nie miałeś pojęcia. Że 340 wierszy nie ma przypisanego handlowca. Że dane kończą się na listopadzie, bo grudzień ktoś wyeksportował osobno i zapomniał o tym wspomnieć. Że kolumna z kwotami jest tekstem, o czym przed chwilą.

Wyszłoby i tak. Tylko później i przy ludziach.

Teraz pytaj normalnie

Cała zaleta tej roboty polega na tym, że nie musisz tłumaczyć pytania na język formuł.

Który klient miał największy spadek obrotu w 2025 wobec 2024?
Podaj kwotę i procent.
Pokaż mi 10 produktów, które generują najwięcej przychodu,
i osobno 10, które generują najwięcej zwrotów.
Ilu klientów kupiło raz i nigdy nie wróciło?
Jaka to część całego obrotu?

I moje ulubione pytanie do zbioru, którego jeszcze nie znam:

Znajdź w tych danych 5 rzeczy, które wyglądają dziwnie albo podejrzanie.
Anomalie, wartości odstające, niespójności.
Przy każdej pokaż konkretne wiersze.

To ostatnie potrafi zaskoczyć. Zamówienie na minus czterdzieści tysięcy. Klient występujący w siedmiu wariantach pisowni. Wtorek z obrotem dziesięć razy wyższym niż zwykle, bo ktoś wkleił dane dwa razy.

Pułapki, w które wchodzi każdy

Puste komórki. Średnia z kolumny, w której 300 z 4000 pól świeci pustką, to średnia z 3700 wierszy. Albo z 4000, jeśli program wstawił tam zera. Różnica bywa spora i nigdzie jej nie widać.

Warianty tej samej nazwy. "Kowalski Sp. z o.o.", "Kowalski sp. z o. o.", "KOWALSKI" i "Kowalski " ze spacją na końcu. Dla Ciebie jeden klient, dla programu czterech osobnych. Obrót rozjeżdża się na cztery kawałki, żaden nie łapie się do pierwszej dziesiątki i Twój największy klient po prostu znika z zestawienia.

Duplikaty. Eksport z dwóch systemów, które zachodzą na siebie jednym miesiącem. Sprzedaż nagle rośnie i wszyscy się cieszą aż do pierwszego pytania z księgowości.

Jeden prompt załatwia całą trójkę:

Sprawdź jakość tych danych:
- ile pustych wartości w każdej kolumnie
- ile duplikatów całych wierszy
- w kolumnie "klient" pokaż nazwy, które prawdopodobnie
  oznaczają tę samą firmę zapisaną inaczej
Nie poprawiaj nic sam. Tylko pokaż, co znalazłeś.

Ostatnie zdanie stoi tam nieprzypadkowo. Chatbot chętnie posprząta dane po swojemu, wyrzuci 12 wierszy jako błędne i nie uzna za stosowne o tym wspomnieć.

Suma kontrolna, czyli pół minuty

Zanim weźmiesz jakąkolwiek liczbę na spotkanie, zrób jedno.

Zapytaj o sumę głównej kolumny i o liczbę wierszy. Potem otwórz plik w Excelu, zaznacz tę samą kolumnę i spójrz na pasek na dole, gdzie Excel sam z siebie pokazuje sumę.

Zgadza się co do złotówki? Reszta analizy stoi na czymś twardym.

Nie zgadza się? Wszystko z tej rozmowy idzie do kosza. Nie ratuj pojedynczych wniosków, bo skoro podstawa poleciała, poleciało też to, co na niej postawiono.

Wiem, że to jak sprawdzanie paragonu pozycja po pozycji pod kasą. Dla ważnych "zakupów" warto sprawdzić.

Zanim wrzucisz plik z firmy

Tabele bywają gorsze od dokumentów, bo dane osobowe leżą w nich hurtowo i w równiutkich kolumnach. Baza klientów z mailami i telefonami. Lista płac z nazwiskami. Eksport z CRM-u razem z notatkami handlowców o tym, kto jest trudny i z kim lepiej nie rozmawiać po piętnastej.

Dobra wiadomość: do analizy te kolumny są zwykle zbędne. Chcesz wiedzieć, jak sprzedaż rozkłada się po regionach i miesiącach. Do tego numer telefonu pani Grażyny z Kutna nie jest potrzebny. Usuń kolumny z danymi osobowymi, zostaw ID albo etykietę "Klient 001", licz dalej.

Pełna rozmowa o tym nas czeka później.

I taka porada. Może Cię kusić by wrzucić plik i poprosić: zanonimizuj mi dane w tym pliku. To niczym nie będzie się różniło od wrzucenia pliku od razu do analizy. Dane polecą w to samo miejsce. No chyba, że użyjesz lokalnego modelu, który nie żyje w chmurce. To co innego.

Kiedy plik nie wejdzie

Sto tysięcy wierszy z pełną historią zamówień to już nie jest materiał na czat. Trafisz na limit rozmiaru albo na analizę, która urywa się w połowie.

Masz trzy wyjścia. Wyeksportować węższy wycinek, tylko te kolumny i miesiące, które Cię obchodzą. Zagregować dane w Excelu do poziomu miesiąca albo kategorii i wrzucić dopiero to. Albo poprosić o gotowy skrypt i puścić go u siebie na całości.

Gdzie dokładnie biegnie granica między "wrzuć do czatu" a "otwórz Excela i nie kombinuj", o tym później.

Spróbuj sam

Weź plik, który znasz na pamięć. Budżet domowy, wyciąg z konta za pół roku, eksport sprzedaży, cokolwiek, gdzie z góry wiesz, jakie liczby powinny wyjść.

Wrzuć, poproś o opis zawartości, zadaj trzy pytania, sprawdź sumę.

Ta znajomość danych jest tu całym sensem ćwiczenia. Zobaczysz moment, w którym maszyna trafia idealnie, i moment, w którym równie pewnym głosem podaje bzdurę. Na obcym pliku drugiego nie wyłapiesz, bo brzmi identycznie jak pierwszy.

Udostępnij kurs: