Chcesz zgłębić tajniki analizy danych za pomocą języka naturalnego? Odkryj, jak to zrobić, wykorzystując potencjał biblioteki PandasAI w Pythonie.
W dzisiejszym świecie, gdzie dane odgrywają zasadniczą rolę, ich dogłębne zrozumienie i efektywna analiza stają się kluczowe. Tradycyjne metody analizy mogą być jednak skomplikowane i czasochłonne. W tym miejscu wkracza PandasAI, rewolucjonizując podejście do analizy danych, umożliwiając interakcję z nimi za pomocą intuicyjnego języka naturalnego.
PandasAI działa poprzez tłumaczenie Twoich pytań na konkretny kod, który umożliwia analizę danych. Opiera się na potężnych możliwościach biblioteki Pandas w Pythonie. PandasAI to rozszerzenie funkcjonalności Pandas, znanego narzędzia do manipulacji danymi, wzbogacone o funkcje generatywnej sztucznej inteligencji. Jej celem jest raczej wzmocnienie, a nie zastąpienie Pandas.
PandasAI wprowadza interaktywny aspekt do pracy z Pandas, a także innymi popularnymi bibliotekami do analizy danych. Pozwala to na komunikację z danymi przy użyciu zapytań w języku naturalnym.
W tym przewodniku krok po kroku przeprowadzimy Cię przez proces konfiguracji Pandas AI, jego praktycznego zastosowania na rzeczywistym zbiorze danych, tworzenia wizualizacji, poznawania przydatnych skrótów, oraz omówienia mocnych i słabych stron tego potężnego narzędzia.
Po zakończeniu tego samouczka będziesz w stanie przeprowadzać analizę danych w sposób prostszy i bardziej intuicyjny, wykorzystując do tego celu język naturalny.
Zapraszamy do odkrycia fascynującego świata analizy danych za pomocą języka naturalnego z PandasAI!
Konfiguracja środowiska
Aby zacząć korzystać z PandasAI, należy najpierw zainstalować bibliotekę.
W tym przykładzie korzystam z Jupyter Notebook, ale możesz użyć również Google Collab lub VS Code, w zależności od preferencji.
Jeśli planujesz korzystać z zaawansowanych modeli językowych (LLM) Open AI, niezbędne jest również zainstalowanie pakietu SDK Open AI Python, co zapewni płynne działanie.
# Instalacja Pandas AI !pip install pandas-ai # Pandas AI wykorzystuje modele językowe OpenAI, dlatego konieczna jest instalacja OpenAI Python SDK !pip install openai
Teraz zaimportujmy niezbędne biblioteki:
# Importowanie niezbędnych bibliotek import pandas as pd import numpy as np # Importowanie PandasAI i jego komponentów from pandasai import PandasAI, SmartDataframe from pandasai.llm.openai import OpenAI
Kluczowym aspektem korzystania z PandasAI jest klucz API. Narzędzie obsługuje różne modele językowe (LLM) i LangChains, które służą do generowania kodu na podstawie zapytań w języku naturalnym, co sprawia, że analiza danych staje się bardziej przystępna i intuicyjna.
PandasAI jest bardzo wszechstronne i współpracuje z różnymi modelami, takimi jak Hugging Face, Azure OpenAI, Google PALM czy Google VertexAI. Każdy z tych modeli wnosi unikalne zalety, zwiększając możliwości PandasAI.
Aby móc korzystać z tych modeli, niezbędne są odpowiednie klucze API. Uwierzytelniają one żądania i umożliwiają korzystanie z zaawansowanych modeli językowych w zadaniach analizy danych. Pamiętaj, aby mieć je pod ręką podczas konfigurowania PandasAI do swoich projektów.
Klucz API możesz pobrać i wyeksportować jako zmienną środowiskową.
W kolejnym etapie dowiesz się, jak korzystać z PandasAI z różnymi modelami językowymi (LLM) z OpenAI i Hugging Face Hub.
Wykorzystanie zaawansowanych modeli językowych
Model językowy (LLM) można wybrać, tworząc jego instancję i przekazując ją do konstruktora SmartDataFrame lub SmartDatalake, lub też można go zdefiniować w pliku konfiguracyjnym pandasai.json.
Jeśli model wymaga jednego lub więcej parametrów, możesz je przekazać konstruktorowi lub ustawić w pliku pandasai.json w parametrze llm_options, jak w poniższym przykładzie:
{ "llm": "OpenAI", "llm_options": { "api_token": "API_TOKEN_GOES_HERE" } }
Jak korzystać z modeli OpenAI?
Aby skorzystać z modeli OpenAI, musisz mieć klucz API OpenAI. Możesz go uzyskać tutaj.
Mając klucz API, możesz go użyć do utworzenia instancji obiektu OpenAI:
#Zaimportowaliśmy wszystkie niezbędne biblioteki w poprzednim kroku llm = OpenAI(api_token="my-api-key") pandas_ai = SmartDataframe("data.csv", config={"llm": llm})
Pamiętaj, aby zastąpić „my-api-key” swoim oryginalnym kluczem API.
Alternatywnie, można ustawić zmienną środowiskową OPENAI_API_KEY i utworzyć instancję obiektu OpenAI bez przekazywania klucza API:
# Ustaw zmienną środowiskową OPENAI_API_KEY llm = OpenAI() # nie trzeba przekazywać klucza API, zostanie odczytany ze zmiennej środowiskowej pandas_ai = SmartDataframe("data.csv", config={"llm": llm})
Jeśli korzystasz z serwera proxy, możesz określić parametr openai_proxy podczas tworzenia instancji obiektu OpenAI lub ustawić zmienną środowiskową OPENAI_PROXY.
Ważne: podczas korzystania z PandasAI do analizy danych za pomocą klucza API, istotne jest monitorowanie zużycia tokenów, aby efektywnie zarządzać kosztami.
Chcesz wiedzieć, jak to zrobić? Wykorzystaj poniższy kod do zliczenia tokenów, aby uzyskać jasny obraz ich zużycia i związanych z tym kosztów. To pozwoli Ci skutecznie zarządzać zasobami i uniknąć nieoczekiwanych opłat.
Liczbę tokenów zużytych przez podpowiedź możesz obliczyć w następujący sposób:
"""Przykład użycia PandasAI z ramką danych pandas""" from pandasai import SmartDataframe from pandasai.llm import OpenAI from pandasai.helpers.openai_info import get_openai_callback import pandas as pd llm = OpenAI() # conversational=False ma pokazywać mniejsze zużycie i koszty df = SmartDataframe("data.csv", {"llm": llm, "conversational": False}) with get_openai_callback() as cb: response = df.chat("Oblicz sumę PKB krajów Ameryki Północnej") print(response) print(cb)
Otrzymasz wyniki podobne do tych:
# Suma PKB krajów Ameryki Północnej wynosi 19 294 482 071 552. # Zużyte tokeny: 375 # Tokeny podpowiedzi: 210 # Tokeny ukończenia: 165 # Całkowity koszt (USD): 0,000750 USD
Jeśli Twój budżet jest ograniczony, pamiętaj o śledzeniu całkowitego kosztu!
Jak korzystać z modeli Hugging Face?
Aby korzystać z modeli HuggingFace, potrzebujesz klucza API HuggingFace. Konto HuggingFace możesz utworzyć tutaj, a klucz API uzyskasz tutaj.
Mając klucz API, możesz go użyć do utworzenia instancji jednego z modeli HuggingFace.
Obecnie PandasAI obsługuje następujące modele HuggingFace:
- Starcoder: bigcode/starcoder
- Falcon: tiiuae/falcon-7b-instruktaż
from pandasai.llm import Starcoder, Falcon llm = Starcoder(api_token="my-huggingface-api-key") # lub llm = Falcon(api_token="my-huggingface-api-key") df = SmartDataframe("data.csv", config={"llm": llm})
Alternatywnie, możesz ustawić zmienną środowiskową HUGGINGFACE_API_KEY i utworzyć instancję obiektu HuggingFace bez konieczności przekazywania klucza API:
from pandasai.llm import Starcoder, Falcon llm = Starcoder() # nie trzeba przekazywać klucza API, zostanie odczytany ze zmiennej środowiskowej # lub llm = Falcon() # nie trzeba przekazywać klucza API, zostanie odczytany ze zmiennej środowiskowej df = SmartDataframe("data.csv", config={"llm": llm})
Starcoder i Falcon to modele LLM dostępne w Hugging Face.
Skonfigurowaliśmy pomyślnie środowisko i nauczyliśmy się, jak używać modeli LLM OpenAI i Hugging Face. Przejdźmy teraz do analizy danych.
Wykorzystamy zbiór danych Big Mart Sales, który zawiera informacje o sprzedaży różnych produktów w różnych oddziałach Big Mart. Zbiór danych składa się z 12 kolumn i 8524 wierszy. Link do zbioru danych znajdziesz na końcu artykułu.
Analiza danych za pomocą PandasAI
Teraz, gdy zainstalowaliśmy i zaimportowaliśmy niezbędne biblioteki, możemy przejść do załadowania zestawu danych.
Załaduj zbiór danych
Model LLM można wybrać, tworząc jego instancję i przekazując go do SmartDataFrame. Link do zbioru danych znajdziesz na końcu artykułu.
#Załadowanie zbioru danych z dysku path = r"D:\Pandas AI\Train.csv" df = SmartDataframe(path)
Użyj modelu LLM OpenAI
Po załadowaniu danych zamierzamy użyć modelu OpenAI LLM do korzystania z PandasAI.
llm = OpenAI(api_token="API_Key") pandas_ai = PandasAI(llm, conversational=False)
Wszystko gotowe! Spróbujmy teraz wykorzystać podpowiedzi.
Wyświetl pierwsze 6 wierszy zbioru danych
Spróbujmy wyświetlić pierwsze 6 wierszy, podając odpowiednią instrukcję:
Result = pandas_ai(df, "Pokaż pierwsze 6 wierszy danych w formie tabeli") Result
Pierwsze 6 wierszy danych
To było bardzo szybkie! Mamy wgląd w zbiór danych.
Generowanie statystyk opisowych DataFrame
# Aby uzyskać statystyki opisowe Result = pandas_ai(df, "Pokaż opis danych w formie tabeli") Result
Opis
W kolumnie Item_Weigth mamy 7060 wartości, co sugeruje brakujące dane.
Wyszukiwanie brakujących wartości
Istnieją dwa sposoby wyszukiwania brakujących wartości za pomocą Pandas AI.
#Znajdź brakujące wartości Result = pandas_ai(df, "Pokaż brakujące wartości danych w formie tabeli") Result
Znajdowanie brakujących wartości
# Skrót do czyszczenia danych
df = SmartDataframe('data.csv') df.clean_data()
Ten skrót umożliwia oczyszczenie danych w ramce danych.
Teraz uzupełnijmy brakujące wartości.
Uzupełnianie brakujących wartości
#Uzupełnij brakujące wartości result = pandas_ai(df, "Wypełnij kolumnę Item Weight medianą, a braki w Item outlet size modą. Pokaż brakujące wartości danych w formie tabeli") result
Uzupełnione wartości null
To przydatna metoda do uzupełniania brakujących wartości, ale podczas tego procesu natrafiłem na pewne trudności.
# Skrót do uzupełniania wartości null
df = SmartDataframe('data.csv') df.impute_missing_values()
Ten skrót umożliwia przypisanie brakujących wartości w ramce danych.
Usuwanie wartości null
Jeśli chcesz usunąć wszystkie wartości null z ramki danych, możesz wypróbować tę metodę.
result = pandas_ai(df, "Usuń wiersze z brakującymi wartościami, z inplace=True") result
Analiza danych jest istotna do identyfikowania trendów, zarówno krótkoterminowych, jak i długoterminowych, co może być nieocenione dla firm, rządów, naukowców i osób prywatnych.
Spróbujmy określić ogólny trend sprzedaży na przestrzeni lat od powstania placówek.
Określanie trendu sprzedaży
#Określanie trendu sprzedaży result = pandas_ai(df, "Jaki jest ogólny trend sprzedaży na przestrzeni lat od powstania placówek?") result
Sprzedaż na przestrzeni lat (wykres liniowy)
Początkowe tworzenie wykresu było nieco wolne, ale po ponownym uruchomieniu jądra i ponownym wykonaniu operacji, działało szybciej.
# Skrót do tworzenia wykresów liniowych
df.plot_line_chart(x = ['a', 'b', 'c'], y = [1, 2, 3])
Ten skrót umożliwia utworzenie wykresu liniowego ramki danych.
Być może zastanawiasz się, dlaczego trend jest spadkowy. Wynika to z braku danych za lata 1989-1994.
Określenie roku z najwyższą sprzedażą
Sprawdźmy, który rok charakteryzował się najwyższą sprzedażą.
#Określanie roku z najwyższą sprzedażą result = pandas_ai(df, "Wyjaśnij, w których latach sprzedaż była największa") result
Zatem rok z najwyższą sprzedażą to 1985.
Chcę jednak ustalić, który typ produktu generuje najwyższą średnią sprzedaż, a który najniższą.
Najwyższa i najniższa średnia sprzedaż
#Określanie najwyższej i najniższej średniej sprzedaży result = pandas_ai(df, "Który typ produktu generuje najwyższą średnią sprzedaż, a który najniższą?") result
Produkty skrobiowe (Starchy Foods) osiągają najwyższą średnią sprzedaż, natomiast inne najniższą. Jeśli zależy Ci na zwiększeniu sprzedaży, możesz podjąć odpowiednie kroki.
Świetnie! Teraz sprawdzę rozkład sprzedaży w różnych placówkach handlowych.
Rozkład sprzedaży w różnych placówkach
Mamy cztery typy placówek: Supermarket typu 1/2/3 i sklepy spożywcze.
#Rozkład sprzedaży w różnych typach placówek od ich powstania response = pandas_ai(df, "Zwizualizuj rozkład sprzedaży w różnych typach placówek od ich powstania, za pomocą wykresu słupkowego o rozmiarze (13,10)") response
Rozkład sprzedaży w różnych placówkach
Jak już wspominaliśmy, szczyt sprzedaży przypadł na rok 1985, a na tym wykresie widać największą sprzedaż w supermarketach typu 3 w 1985 roku.
# Skrót do tworzenia wykresu słupkowego
df = SmartDataframe('data.csv') df.plot_bar_chart(x = ['a', 'b', 'c'], y = [1, 2, 3])
Ten skrót umożliwia utworzenie wykresu słupkowego ramki danych.
# Skrót do tworzenia histogramu
df = SmartDataframe('data.csv') df.plot_histogram(column = 'a')
Ten skrót umożliwia utworzenie histogramu ramki danych.
Sprawdźmy teraz, jaka jest średnia sprzedaż produktów o „niskiej zawartości tłuszczu” i „regularnej” zawartości tłuszczu.
Określanie średniej sprzedaży dla produktów z zawartością tłuszczu
#Określanie indeksu wiersza na podstawie wartości kolumny result = pandas_ai(df, "Jaka jest średnia sprzedaż produktów z niską i regularną zawartością tłuszczu?") result
Tworzenie takich podpowiedzi umożliwia porównywanie dwóch lub więcej produktów.
Średnia sprzedaż dla każdego typu produktu
Chcę porównać wszystkie produkty pod względem średniej sprzedaży.
#Średnia sprzedaż dla każdego typu produktu result = pandas_ai(df, "Jaka jest średnia sprzedaż dla każdego typu produktu w ciągu ostatnich 5 lat? Użyj wykresu kołowego o rozmiarze (6,6)") result
Wykres kołowy średniej sprzedaży
Wszystkie segmenty wykresu kołowego wyglądają podobnie, ponieważ dane sprzedaży są zbliżone.
# Skrót do tworzenia wykresu kołowego
df.plot_pie_chart(labels = ['a', 'b', 'c'], values = [1, 2, 3])
Ten skrót umożliwia utworzenie wykresu kołowego ramki danych.
5 typów produktów z najwyższą sprzedażą
Chociaż porównaliśmy już wszystkie produkty pod względem średniej sprzedaży, chcę teraz zidentyfikować 5 produktów z najwyższą sprzedażą.
#Określanie 5 produktów o najwyższej sprzedaży result = pandas_ai(df, "Jakie są 5 typów produktów o najwyższej średniej sprzedaży? Przedstaw w formie tabeli") result
Zgodnie z oczekiwaniami, Starchy Foods (produkty skrobiowe) to najlepiej sprzedający się produkt pod względem średniej sprzedaży.
5 typów produktów z najniższą sprzedażą
result = pandas_ai(df, "Jakie są 5 typów produktów o najniższej średniej sprzedaży?") result
Możesz być zaskoczony, widząc napoje bezalkoholowe w kategorii najniżej sprzedających się. Trzeba jednak pamiętać, że dane te obejmują tylko rok 2008, a trend na napoje bezalkoholowe nasilił się kilka lat później.
Sprzedaż kategorii produktów
Tutaj zamiast „typ produktu” użyłem słowa „kategoria produktu”, a PandasAI nadal generuje wykresy, pokazując, że rozumie podobne pojęcia.
result = pandas_ai(df, "Pokaż skumulowany wykres słupkowy sprzedaży różnych kategorii produktów za ostatni rok obrotowy") result
Sprzedaż typu produktu
Pozostałe skróty znajdziesz tutaj.
Należy zauważyć, że podczas formułowania podpowiedzi i instrukcji dla PandasAI, otrzymujemy wyniki oparte wyłącznie na konkretnej podpowiedzi. Nie analizuje on wcześniejszych podpowiedzi, aby zapewnić dokładniejsze odpowiedzi.
Jednakże, za pomocą agenta czatu, można również osiągnąć tę funkcjonalność.
Agent czatu
Agent czatu pozwala prowadzić dynamiczne konwersacje, w których agent zachowuje kontekst przez całą dyskusję. Dzięki temu interakcja jest bardziej interaktywna i efektywna.
Kluczowe funkcje wspierające tę interakcję to przechowywanie kontekstu, dzięki czemu agent pamięta historię rozmowy, co umożliwia płynną interakcję uwzględniającą kontekst. Można skorzystać z metody pytań wyjaśniających, aby poprosić o doprecyzowanie dowolnego aspektu rozmowy. Dodatkowo, dostępna jest metoda wyjaśniająca, która pozwala uzyskać szczegółowe wyjaśnienie, w jaki sposób agent doszedł do konkretnego rozwiązania lub odpowiedzi, zapewniając transparentność i wgląd w proces podejmowania decyzji przez agenta.
Możesz inicjować rozmowy, szukać wyjaśnień, aby zwiększyć efektywność interakcji z agentem czatu!
from pandasai import Agent agent = Agent(df, config={"llm": llm}, memory_size=10) result = agent.chat("Jakie jest 5 produktów z najwyższą ceną detaliczną (MRP)?") result
W przeciwieństwie do SmartDataframe czy SmartDatalake, agent śledzi stan konwersacji i może odpowiadać na wieloetapowe zapytania.
Przejdźmy do zalet i wad PandasAI.
Zalety PandasAI
Korzystanie z Pandas AI niesie ze sobą wiele korzyści, które czynią go wartościowym narzędziem do analizy danych, takich jak:
- Przystępność: PandasAI upraszcza analizę danych, czyniąc ją dostępną dla szerokiego grona użytkowników. Każdy, niezależnie od umiejętności technicznych, może dzięki niemu wyciągać wnioski z danych i odpowiadać na pytania biznesowe.
- Zapytania w języku naturalnym: Możliwość bezpośredniego zadawania pytań i uzyskiwania odpowiedzi za pomocą zapytań w języku naturalnym ułatwia eksplorację i analizę danych. Ta funkcja pozwala efektywnie korzystać z danych nawet osobom nietechnicznym.
- Funkcja czatu z agentem: Funkcja czatu umożliwia interaktywną komunikację z danymi, podczas gdy funkcja czatu z agentem wykorzystuje historię poprzednich rozmów do udzielania odpowiedzi zależnych od kontekstu. To promuje dynamiczne i konwersacyjne podejście do analizy danych.
- Wizualizacja danych: PandasAI oferuje wiele opcji wizualizacji danych, takich jak mapy cieplne, wykresy punktowe, słupkowe, kołowe, liniowe i wiele innych. Te wizualizacje pomagają w zrozumieniu i prezentacji wzorców i trendów w danych.
- Skróty oszczędzające czas: Dostępność skrótów i funkcji oszczędzających czas usprawnia proces analizy danych, pomagając użytkownikom pracować wydajniej.
- Obsługa różnych formatów plików: PandasAI obsługuje różne formaty plików, w tym CSV, Excel, Arkusze Google i inne. Ta elastyczność pozwala użytkownikom pracować z danymi z różnych źródeł i w różnych formatach.
- Niestandardowe podpowiedzi: Użytkownicy mogą tworzyć niestandardowe podpowiedzi za pomocą prostych instrukcji i kodu Pythona. Ta funkcja pozwala dostosować interakcję z danymi do konkretnych potrzeb i zapytań.
- Zapisywanie zmian: Możliwość zapisywania zmian w ramkach danych gwarantuje, że praca zostanie zachowana i można w dowolnym momencie wrócić do analizy i ją udostępnić.
- Niestandardowe odpowiedzi: Opcja tworzenia niestandardowych odpowiedzi umożliwia użytkownikom definiowanie konkretnych zachowań lub interakcji, co czyni narzędzie jeszcze bardziej wszechstronnym.
- Integracja z modelami językowymi: PandasAI obsługuje różne modele językowe, w tym Hugging Face, Azure, Google Palm, Google VertexAI i LangChain. Ta integracja zwiększa możliwości narzędzia i umożliwia zaawansowane przetwarzanie i zrozumienie języka naturalnego.
- Wbudowana obsługa LangChain: Wbudowana obsługa modeli LangChain dodatkowo poszerza zakres dostępnych modeli i funkcjonalności, zwiększając głębię analizy i wyciąganych wniosków.
- Zrozumienie nazw: PandasAI wykazuje zdolność rozumienia korelacji między nazwami kolumn a terminologią z życia codziennego. Na przykład, nawet jeśli w podpowiedziach użyjesz terminu „kategoria produktu” zamiast „typ produktu”, narzędzie nadal jest w stanie dostarczyć trafne wyniki. Ta elastyczność w rozpoznawaniu synonimów i mapowaniu ich do odpowiednich kolumn danych zwiększa komfort i adaptacyjność narzędzia do zapytań w języku naturalnym.
Choć PandasAI ma wiele zalet, posiada również pewne ograniczenia, o których użytkownicy powinni wiedzieć:
Ograniczenia PandasAI
Oto kilka ograniczeń, które zaobserwowałem:
- Wymagania dotyczące klucza API: Do korzystania z PandasAI niezbędne jest posiadanie klucza API. Jeśli nie masz wystarczających środków na koncie OpenAI, możesz nie móc korzystać z usługi. Warto jednak wiedzieć, że OpenAI oferuje nowym użytkownikom 5 dolarów kredytu, co ułatwia rozpoczęcie pracy z platformą.
- Czas przetwarzania: Usługa może czasami opóźniać dostarczanie wyników z powodu dużego obciążenia lub przeciążenia serwera. Użytkownicy powinni być przygotowani na potencjalny czas oczekiwania podczas wysyłania zapytań.
- Interpretacja podpowiedzi: Choć system pozwala na zadawanie pytań za pomocą podpowiedzi, jego zdolność do wyjaśniania odpowiedzi może nie być jeszcze w pełni rozwinięta, a jakość wyjaśnień może być różna. Ten aspekt PandasAI może być w przyszłości udoskonalony.
- Wrażliwość podpowiedzi: Użytkownicy muszą zachować ostrożność podczas formułowania podpowiedzi, ponieważ nawet drobne zmiany mogą prowadzić do różnych wyników. Ta wrażliwość na frazowanie i strukturę podpowiedzi może wpły