|
2 weeks ago | |
---|---|---|
.. | ||
solution | 2 weeks ago | |
README.md | 2 weeks ago | |
assignment.md | 2 weeks ago | |
notebook.ipynb | 2 weeks ago |
README.md
Bygg en regressionsmodell med Scikit-learn: förbered och visualisera data
Infografik av Dasani Madipalli
Quiz före föreläsningen
Den här lektionen finns tillgänglig i R!
Introduktion
Nu när du har verktygen du behöver för att börja bygga maskininlärningsmodeller med Scikit-learn, är du redo att börja ställa frågor till din data. När du arbetar med data och tillämpar ML-lösningar är det mycket viktigt att förstå hur man ställer rätt frågor för att verkligen utnyttja potentialen i din dataset.
I den här lektionen kommer du att lära dig:
- Hur du förbereder din data för modellbyggande.
- Hur du använder Matplotlib för datavisualisering.
Ställa rätt frågor till din data
Frågan du vill ha svar på avgör vilken typ av ML-algoritmer du kommer att använda. Och kvaliteten på svaret du får tillbaka beror starkt på datans natur.
Ta en titt på datan som tillhandahålls för den här lektionen. Du kan öppna denna .csv-fil i VS Code. En snabb överblick visar direkt att det finns tomma fält och en blandning av strängar och numerisk data. Det finns också en märklig kolumn som heter 'Package' där datan är en blandning av 'sacks', 'bins' och andra värden. Datan är faktiskt lite rörig.
🎥 Klicka på bilden ovan för en kort video om hur man förbereder datan för den här lektionen.
Det är faktiskt inte särskilt vanligt att få en dataset som är helt redo att användas för att skapa en ML-modell direkt. I den här lektionen kommer du att lära dig hur man förbereder en rå dataset med hjälp av standardbibliotek i Python. Du kommer också att lära dig olika tekniker för att visualisera data.
Fallstudie: 'pumpamarknaden'
I den här mappen hittar du en .csv-fil i rotmappen data
som heter US-pumpkins.csv som innehåller 1757 rader med data om marknaden för pumpor, sorterade i grupperingar efter stad. Detta är rådata som hämtats från Specialty Crops Terminal Markets Standard Reports som distribueras av United States Department of Agriculture.
Förbereda data
Denna data är offentlig. Den kan laddas ner i många separata filer, per stad, från USDA:s webbplats. För att undvika för många separata filer har vi sammanfogat all stadsdata till ett kalkylblad, så vi har redan förberett datan lite. Låt oss nu ta en närmare titt på datan.
Pumpadatan - tidiga slutsatser
Vad märker du om denna data? Du såg redan att det finns en blandning av strängar, siffror, tomma fält och märkliga värden som du behöver förstå.
Vilken fråga kan du ställa till denna data med hjälp av en regressionsmetod? Vad sägs om "Förutsäg priset på en pumpa som säljs under en viss månad". När du tittar på datan igen, finns det några ändringar du behöver göra för att skapa den datastruktur som krävs för uppgiften.
Övning - analysera pumpadatan
Låt oss använda Pandas (namnet står för Python Data Analysis
), ett verktyg som är mycket användbart för att forma data, för att analysera och förbereda denna pumpadata.
Först, kontrollera om det saknas datum
Du måste först ta steg för att kontrollera om det saknas datum:
- Konvertera datumen till ett månadsformat (dessa är amerikanska datum, så formatet är
MM/DD/YYYY
). - Extrahera månaden till en ny kolumn.
Öppna notebook.ipynb-filen i Visual Studio Code och importera kalkylbladet till en ny Pandas-dataram.
-
Använd funktionen
head()
för att visa de första fem raderna.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ Vilken funktion skulle du använda för att visa de sista fem raderna?
-
Kontrollera om det finns saknad data i den aktuella dataramen:
pumpkins.isnull().sum()
Det finns saknad data, men kanske spelar det ingen roll för den aktuella uppgiften.
-
För att göra din dataram enklare att arbeta med, välj endast de kolumner du behöver med hjälp av funktionen
loc
, som extraherar en grupp rader (angivna som första parameter) och kolumner (angivna som andra parameter) från den ursprungliga dataramen. Uttrycket:
i fallet nedan betyder "alla rader".columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
För det andra, bestäm genomsnittligt pris på pumpor
Fundera på hur du kan bestämma det genomsnittliga priset på en pumpa under en viss månad. Vilka kolumner skulle du välja för denna uppgift? Tips: du behöver 3 kolumner.
Lösning: ta genomsnittet av kolumnerna Low Price
och High Price
för att fylla den nya kolumnen Price, och konvertera kolumnen Date till att endast visa månaden. Lyckligtvis, enligt kontrollen ovan, finns det ingen saknad data för datum eller priser.
-
För att beräkna genomsnittet, lägg till följande kod:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ Känn dig fri att skriva ut vilken data du vill kontrollera med hjälp av
print(month)
. -
Kopiera nu din konverterade data till en ny Pandas-dataram:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
Om du skriver ut din dataram kommer du att se en ren och snygg dataset som du kan använda för att bygga din nya regressionsmodell.
Men vänta! Det är något konstigt här
Om du tittar på kolumnen Package
, säljs pumpor i många olika konfigurationer. Vissa säljs i mått som '1 1/9 bushel', andra i '1/2 bushel', vissa per pumpa, vissa per pound, och vissa i stora lådor med varierande bredd.
Pumpor verkar vara väldigt svåra att väga konsekvent
När man gräver i den ursprungliga datan är det intressant att allt med Unit of Sale
som är lika med 'EACH' eller 'PER BIN' också har Package
-typen per tum, per bin eller 'each'. Pumpor verkar vara väldigt svåra att väga konsekvent, så låt oss filtrera dem genom att välja endast pumpor med strängen 'bushel' i deras Package
-kolumn.
-
Lägg till ett filter högst upp i filen, under den initiala .csv-importen:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
Om du skriver ut datan nu kan du se att du endast får de cirka 415 rader med data som innehåller pumpor per bushel.
Men vänta! Det är en sak till att göra
Märkte du att bushel-mängden varierar per rad? Du behöver normalisera prissättningen så att du visar prissättningen per bushel, så gör lite matematik för att standardisera det.
-
Lägg till dessa rader efter blocket som skapar dataramen new_pumpkins:
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
✅ Enligt The Spruce Eats beror en bushels vikt på typen av produkt, eftersom det är ett volymmått. "En bushel tomater, till exempel, ska väga 56 pounds... Blad och gröna tar upp mer plats med mindre vikt, så en bushel spenat är bara 20 pounds." Det är allt ganska komplicerat! Låt oss inte bry oss om att göra en bushel-till-pound-konvertering, och istället prissätta per bushel. All denna studie av bushels av pumpor visar dock hur viktigt det är att förstå naturen av din data!
Nu kan du analysera prissättningen per enhet baserat på deras bushel-mått. Om du skriver ut datan en gång till kan du se hur den är standardiserad.
✅ Märkte du att pumpor som säljs per halv-bushel är väldigt dyra? Kan du lista ut varför? Tips: små pumpor är mycket dyrare än stora, förmodligen eftersom det finns så många fler av dem per bushel, med tanke på det oanvända utrymmet som tas upp av en stor ihålig pajpumpa.
Visualiseringsstrategier
En del av en dataspecialists roll är att demonstrera kvaliteten och naturen av datan de arbetar med. För att göra detta skapar de ofta intressanta visualiseringar, som diagram, grafer och tabeller, som visar olika aspekter av datan. På så sätt kan de visuellt visa relationer och luckor som annars är svåra att upptäcka.
🎥 Klicka på bilden ovan för en kort video om hur man visualiserar datan för den här lektionen.
Visualiseringar kan också hjälpa till att avgöra vilken maskininlärningsteknik som är mest lämplig för datan. Ett spridningsdiagram som verkar följa en linje, till exempel, indikerar att datan är en bra kandidat för en linjär regressionsövning.
Ett datavisualiseringsbibliotek som fungerar bra i Jupyter notebooks är Matplotlib (som du också såg i den föregående lektionen).
Få mer erfarenhet av datavisualisering i dessa tutorials.
Övning - experimentera med Matplotlib
Försök att skapa några grundläggande diagram för att visa den nya dataramen du just skapade. Vad skulle ett grundläggande linjediagram visa?
-
Importera Matplotlib högst upp i filen, under Pandas-importen:
import matplotlib.pyplot as plt
-
Kör om hela notebooken för att uppdatera.
-
Lägg till en cell längst ner i notebooken för att plotta datan som en box:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
Är detta ett användbart diagram? Överraskar något dig?
Det är inte särskilt användbart eftersom allt det gör är att visa din data som en spridning av punkter under en viss månad.
Gör det användbart
För att få diagram att visa användbar data behöver du vanligtvis gruppera datan på något sätt. Låt oss försöka skapa ett diagram där y-axeln visar månaderna och datan demonstrerar fördelningen av data.
-
Lägg till en cell för att skapa ett grupperat stapeldiagram:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
Detta är en mer användbar datavisualisering! Det verkar indikera att det högsta priset för pumpor inträffar i september och oktober. Motsvarar det dina förväntningar? Varför eller varför inte?
🚀Utmaning
Utforska de olika typerna av visualiseringar som Matplotlib erbjuder. Vilka typer är mest lämpliga för regressionsproblem?
Quiz efter föreläsningen
Granskning & Självstudier
Ta en titt på de många sätten att visualisera data. Gör en lista över de olika biblioteken som finns tillgängliga och notera vilka som är bäst för olika typer av uppgifter, till exempel 2D-visualiseringar kontra 3D-visualiseringar. Vad upptäcker du?
Uppgift
Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, vänligen notera att automatiska översättningar kan innehålla fel eller felaktigheter. Det ursprungliga dokumentet på dess originalspråk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning.