Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (2023)

Syftet med detta dokument är att visa flera användningsfall av Verticapy Python-ramverket på Verticas analysdatabas.

De allmänna aspekterna som berör användningen av detta bibliotek kommer att diskuteras och de positiva och negativa aspekterna kommenteras.

Användningsfallen som skulle kunna ges kommer att visas, liksom ett par praktiska exempel programmerade i Python, som beskriver hur man bygger ett kluster och en slumpmässig skogsmodell med hjälp av vertikala.

Verticapy är ett Python-bibliotek fokuserat på att använda verktyg från klassiska Python-miljöer, såsom pandor eller scikit-learn-funktioner, i en miljö där exekveringar av data bearbetas direkt i Vertica. Detta innebär att data som lagras i den aldrig kopieras massivt till minnet på den lokala maskinen där vi arbetar med Python, vilket innebär att när man arbetar med stora mängder data kan skapandet av Machine Learning-modeller som är beräkningsmässigt mycket dyra utföras. på några sekunder.

Vi berättade nyligen för dig om nyheterna om den senaste versionen och hur du laddar ner den

I det här avsnittet kommer vi att diskutera allt relaterat till installationsprocessen av Verticapy-biblioteket i standard Python-miljö, som vi kommer att anta är Anaconda.

Först och främst måste du komma åt github-förvaret för detta bibliotek och vi kommer att ladda ner det i zip-format.

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (3)

Nästa steg kommer att packa upp zip-filen i önskad sökväg, i mitt fall "C:\Users\Administrator\OneDrive - stratebi.com\Documents\Vertica". Då måste vi öppna en terminal från Anaconda Navigator, med önskad Python-miljö.

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (4)

När vi har terminalen öppen går vi till sökvägen där vi tidigare har packat upp zip-filen, med följande kommando i mitt fall:

"cd C:\Users\Administrator\OneDrive - stratebi.com\Documentos\Vertica\VerticaPy-master ".

Nu installerar vi biblioteket med kommandot:

"python setup.py install".

Slutligen kan vi kontrollera att biblioteket redan är tillgängligt för användning genom att utföra kommandot:

"python -c "importera verticapy; print(verticapy.__version__)"". Om allt fungerar som det ska ska den version av Verticapy som körs visas på skärmen.

Det bör noteras att i mitt fall var datorn tvungen att startas om för att miljön skulle känna igen biblioteket.

I det här avsnittet kommer vi att implementera två maskininlärningsmodeller i Vertica genom verticapy Python-biblioteket. Vårt ramverk kommer att bestå av en Jupyter Notebook med en Python 3.8.11-miljö som körs under som innehåller verticapy-biblioteket.

Klustring på kunddimensionen

I det här praktiska exemplet kommer vi att skapa en klustermodell för klientdimensionen, för att gruppera klienter med hänsyn till årsinkomst, kön, ålder och den region där de bor.

Först och främst ska vi importera de nödvändiga biblioteken för detta exempel och indikera att vi vill använda den magiska funktionen "%%sql" för att göra sql-frågor från Jupyter Notebook:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (5)

Nu ska vi skapa en automatisk anslutning till databasen hos Vertica. Den här anslutningen kommer att användas varje gång vi kör en sql-fråga eller hänvisar till data som lagras av Vertica. I mitt fall är koden som behövs för att göra det:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (6)

Därefter kommer vi att skapa en tabell i Vertica med de data som vi behöver för att träna vår modell med den magiska funktionen "%%sql":

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (7)

Nu ska vi definiera ett vDataFrame-objekt som pekar på vår Vertica-tabell som vi just skapat:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (8)

För att klustringsmodellen ska fungera korrekt måste vi skapa dummyvariabler för varje kategori av varje kategorisk variabel, samt normalisera variabeln annual_income. Dessutom kommer vi att transformera variabeln customer_age och definiera tre grupper efter ålder. Från 18 till 30 år "ung", från 30 till 65 "vuxen" och från 65 till 120 "äldre". Dessa grupper har alltså skapats efter en kort explorativ analys av uppgifterna, där vi inser att det inte finns några register över personer under 18 år. Allt detta exekveras med koden:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (9)

Vi väljer nu de kolumner som vi ska använda, det vill säga alla i tabellen utom kundnyckeln:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (10)

För närvarande kan vi redan skapa klustringsmodellen, som i mitt fall kommer att skapa 5 kluster, och sätta den i träning med data:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (11)

Returnerar följande centra:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (12)

Slutligen, när vi har tränat modellen kan vi hitta vilket kluster individerna i vår tabell tillhör eller till och med förutsäga nya individer:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (13)

Random Forest med produktdimension

I det här avsnittet ska vi implementera den nödvändiga koden för att sätta en slumpmässig skog i drift.

Datan som vi kommer att använda för att träna denna modell finns i tabellen "product_dimension" i det "public" schemat i en lokal databas som kallas "datawarehouse" och som är värd hos Vertica.

Först och främst måste vi importera biblioteken som ska användas och indikera att vi vill använda den magiska funktionen "%%sql", för att kunna exekvera sql-frågor från Python-miljön på Vertica:

Därefter kommer vi att upprätta en automatisk anslutning till databasen i Vertica. Den här anslutningen kommer att användas varje gång vi kör en sql-fråga eller hänvisar till data som lagras av Vertica. I mitt fall är koden som behövs för att göra det:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (14)

Den slumpmässiga skogen som vi ska träna försöker få fram priset på en produkt från självkostnadspriset, tävlingens högsta pris och tävlingens lägsta pris. Därför kommer vi att skapa en tabell i Vertica med dessa testdata:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (15)

Nu ska vi skapa en vDataFrame som pekar på dessa data i Vertica, från vilken vi kommer att hämta vDataFrame "tåg" och "test". Dessa uppsättningar som behövs för att träna modellen har ett förhållande på 80 respektive 20 och är byggda med metoden "train_test_split" för vDataFrame-objektet:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (16)

Nu ska vi bara skapa den slumpmässiga skogsmodellen. I mitt fall med 250 träd får vi ett anständigt resultat, så koden för att implementera denna modell är följande:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (17)

Verticapy ger oss genom den slumpmässiga skogsklassen möjligheten att erhålla schemat för variablernas betydelse, där vi ser att kostnaden för produkten är obetydlig för att förutsäga produktens pris. Medan konkurrensens högre pris är den viktigaste faktorn:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (18)

När modellen är tränad förutspår vi testsetet:

Lär känna VerticaPy (Python-ramverket på Verticas analytiska databas) (19)

får ett rotmedelkvadratfel (mse):

Även om några av de mest använda klasserna från pandor och scikit-learn är "inkluderade" i Verticapy (de är inte exakt likadana), stöter du på flera problem när du använder dem. Den första är att när du arbetar med data direkt från databasen, för att omvandla texttypdata måste du använda en av de få funktioner som Verticapy tillhandahåller, eftersom du inte bara kan casta den till en Python-strängtyp. .

Ett annat problem vi hittade är att klasserna som har porterats till verticapy från scikit-learn lämnar några parametrar bakom sig, till exempel tillåter RandomForestRegressor dig inte att ändra något så enkelt och viktigt som felfunktionen. Ett annat problem uppstår från detta exempel, dokumentationen av Verticapy-klasserna. Om vi ​​kommer åt RandomForestRegressor-dokumentationen kan vi inte hitta vilken felfunktion modellen använder, så när denna modell används blir vi "blinda".

Med hänsyn till de positiva och negativa aspekterna ovan hittar jag ett användningsfall som jag tror skulle kunna ges till nämnda bibliotek. Den första uppstår i skapandet av en maskininlärningsmodell, när vi frågar oss om en modell kommer att fungera bra för en specifik datamängd. Genom att dra fördel av hastigheten för att bygga och träna modeller med detta bibliotek, kan verticapy användas för att snabbt distribuera en modell och titta på resultaten för att avgöra om problemet är åtgärdbart eller om ett annat perspektiv behöver tillämpas istället. Även om jag bedömer att den prediktiva statistiska modellen är genomförbar, anser jag att om det du letar efter är en robust och kraftfull lösning, så är inte verticapy i sin nuvarande version det lämpligaste alternativet på grund av bristen på flexibilitet som behövs för att bygga en modell korrekt, detta kommer säkert att ändras i framtida versioner.

Ett annat fall där verticapy kan vara till hjälp är när en process avser att läsa eller till och med transformera/rensa data som finns i Vertica, eftersom detta bibliotek påskyndar dessa uppgifter med Python-syntax.

Verticapy är ett verktyg med stor projektion, eftersom att ha funktionerna för bibliotek som pandor eller scikit-learn tillgängliga för att användas direkt på databasen i Vertica sparar mycket exekveringstid i maskininlärningsuppgifter eller databearbetning.

Det är dock sant att vi idag ser hur många klasser av detta bibliotek som fortfarande är i utvecklingsfasen och detta återspeglas i en dålig katalog över funktioner, där flexibiliteten som sklearn eller pandor ger är långt ifrån att uppnås över en infödd Python miljö.

I framtiden kan det vara möjligt att fullt ut implementera de mest använda klasserna, vilket ger ett nytt paradigm där det inte längre kommer att vara användbart att dumpa data från Vertica till en lokal maskin för att använda Python-bibliotek för databearbetning och analys. Annars, genom enkel kod i Python, kommer vi att kunna skicka Vertica de nödvändiga instruktionerna för att skapa valfri modell på källmaskinen där databasen är utplacerad.

Skapad av Data Ninjas-teamet klStratebi

References

Top Articles
Latest Posts
Article information

Author: Jonah Leffler

Last Updated: 14/11/2023

Views: 5475

Rating: 4.4 / 5 (45 voted)

Reviews: 92% of readers found this page helpful

Author information

Name: Jonah Leffler

Birthday: 1997-10-27

Address: 8987 Kieth Ports, Luettgenland, CT 54657-9808

Phone: +2611128251586

Job: Mining Supervisor

Hobby: Worldbuilding, Electronics, Amateur radio, Skiing, Cycling, Jogging, Taxidermy

Introduction: My name is Jonah Leffler, I am a determined, faithful, outstanding, inexpensive, cheerful, determined, smiling person who loves writing and wants to share my knowledge and understanding with you.