13 KiB
Sukurkite regresijos modelį naudodami Scikit-learn: paruoškite ir vizualizuokite duomenis
Infografiką sukūrė Dasani Madipalli
Prieš paskaitos testas
Ši pamoka pasiekiama R kalba!
Įvadas
Dabar, kai turite visus įrankius, reikalingus pradėti kurti mašininio mokymosi modelius su Scikit-learn, esate pasiruošę pradėti užduoti klausimus savo duomenims. Dirbant su duomenimis ir taikant ML sprendimus, labai svarbu mokėti užduoti tinkamus klausimus, kad galėtumėte maksimaliai išnaudoti savo duomenų potencialą.
Šioje pamokoje sužinosite:
- Kaip paruošti duomenis modelio kūrimui.
- Kaip naudoti Matplotlib duomenų vizualizacijai.
Tinkamų klausimų uždavimas savo duomenims
Klausimas, į kurį norite gauti atsakymą, nulems, kokio tipo ML algoritmus naudosite. Atsakymo kokybė labai priklausys nuo jūsų duomenų pobūdžio.
Pažvelkite į duomenis, pateiktus šiai pamokai. Šį .csv failą galite atidaryti VS Code. Greitai peržvelgus matyti, kad yra tuščių langelių, mišrių tekstinių ir skaitinių duomenų. Taip pat yra keista stulpelis „Package“, kuriame duomenys yra maišyti tarp „sacks“, „bins“ ir kitų reikšmių. Duomenys, tiesą sakant, yra gana netvarkingi.
🎥 Spustelėkite aukščiau esančią nuotrauką, kad peržiūrėtumėte trumpą vaizdo įrašą apie duomenų paruošimą šiai pamokai.
Iš tiesų, retai pasitaiko, kad duomenų rinkinys būtų visiškai paruoštas ML modelio kūrimui iš karto. Šioje pamokoje sužinosite, kaip paruošti neapdorotą duomenų rinkinį naudojant standartines Python bibliotekas. Taip pat išmoksite įvairių duomenų vizualizavimo technikų.
Atvejo analizė: „moliūgų rinka“
Šiame aplanke rasite .csv failą šakniniame data
aplanke, pavadintą US-pumpkins.csv, kuriame yra 1757 eilutės duomenų apie moliūgų rinką, suskirstytų pagal miestus. Tai yra neapdoroti duomenys, gauti iš Specialty Crops Terminal Markets Standard Reports, kuriuos platina Jungtinių Valstijų Žemės ūkio departamentas.
Duomenų paruošimas
Šie duomenys yra viešojoje erdvėje. Juos galima atsisiųsti iš USDA svetainės atskirais failais pagal miestus. Kad išvengtume per daug atskirų failų, sujungėme visus miestų duomenis į vieną skaičiuoklę, taigi jau šiek tiek paruošėme duomenis. Dabar pažvelkime į duomenis atidžiau.
Moliūgų duomenys - pirminės išvados
Ką pastebite apie šiuos duomenis? Jau matėte, kad yra mišrių tekstinių, skaitinių, tuščių ir keistų reikšmių, kurias reikia suprasti.
Kokį klausimą galite užduoti šiems duomenims, naudodami regresijos techniką? Pavyzdžiui: „Prognozuoti moliūgo kainą pardavimui tam tikrą mėnesį“. Pažvelgus į duomenis dar kartą, reikia atlikti tam tikrus pakeitimus, kad sukurtumėte tinkamą duomenų struktūrą šiai užduočiai.
Užduotis - analizuoti moliūgų duomenis
Naudokime Pandas (pavadinimas reiškia Python Data Analysis
), labai naudingą įrankį duomenų formavimui, kad analizuotume ir paruoštume šiuos moliūgų duomenis.
Pirma, patikrinkite, ar nėra trūkstamų datų
Pirmiausia turėsite patikrinti, ar nėra trūkstamų datų:
- Konvertuokite datas į mėnesio formatą (tai yra JAV datos, todėl formatas yra
MM/DD/YYYY
). - Ištraukite mėnesį į naują stulpelį.
Atidarykite notebook.ipynb failą Visual Studio Code ir importuokite skaičiuoklę į naują Pandas dataframe.
-
Naudokite
head()
funkciją, kad peržiūrėtumėte pirmas penkias eilutes.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ Kokią funkciją naudotumėte, kad peržiūrėtumėte paskutines penkias eilutes?
-
Patikrinkite, ar dabartiniame dataframe yra trūkstamų duomenų:
pumpkins.isnull().sum()
Yra trūkstamų duomenų, tačiau galbūt tai nesvarbu šiai užduočiai.
-
Kad jūsų dataframe būtų lengviau dirbti, pasirinkite tik reikalingus stulpelius, naudodami
loc
funkciją, kuri iš originalaus dataframe ištraukia eilutes (pateiktas kaip pirmas parametras) ir stulpelius (pateiktus kaip antras parametras). Ženklas:
žemiau reiškia „visos eilutės“.columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
Antra, nustatykite vidutinę moliūgo kainą
Pagalvokite, kaip nustatyti vidutinę moliūgo kainą tam tikrą mėnesį. Kokius stulpelius pasirinktumėte šiai užduočiai? Užuomina: jums reikės 3 stulpelių.
Sprendimas: paimkite vidurkį iš Low Price
ir High Price
stulpelių, kad užpildytumėte naują Price stulpelį, ir konvertuokite Date stulpelį, kad būtų rodomas tik mėnuo. Laimei, pagal aukščiau atliktą patikrinimą, nėra trūkstamų duomenų datoms ar kainoms.
-
Norėdami apskaičiuoti vidurkį, pridėkite šį kodą:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ Galite laisvai spausdinti bet kokius duomenis, kuriuos norite patikrinti, naudodami
print(month)
. -
Dabar nukopijuokite konvertuotus duomenis į naują Pandas dataframe:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
Spausdindami savo dataframe pamatysite švarią, tvarkingą duomenų rinkinį, kuriame galėsite kurti naują regresijos modelį.
Bet palaukite! Čia kažkas keisto
Jei pažvelgsite į Package
stulpelį, moliūgai parduodami įvairiomis konfigūracijomis. Kai kurie parduodami „1 1/9 bushel“ matavimo vienetais, kai kurie „1/2 bushel“ matavimo vienetais, kai kurie pagal moliūgą, kai kurie pagal svorį, o kai kurie didelėse dėžėse su skirtingais pločiais.
Moliūgus atrodo labai sunku sverti nuosekliai
Gilindamiesi į originalius duomenis, pastebėsite, kad viskas, kas turi Unit of Sale
reikšmę „EACH“ arba „PER BIN“, taip pat turi Package
tipą pagal colį, biną arba „each“. Moliūgus atrodo labai sunku sverti nuosekliai, todėl filtruokime juos, pasirinkdami tik tuos moliūgus, kurių Package
stulpelyje yra žodis „bushel“.
-
Pridėkite filtrą failo viršuje, po pradinio .csv importo:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
Jei dabar spausdinsite duomenis, pamatysite, kad gaunate tik apie 415 eilučių duomenų, kuriuose moliūgai pateikiami pagal bushel.
Bet palaukite! Dar vienas dalykas, kurį reikia padaryti
Ar pastebėjote, kad bushel kiekis skiriasi kiekvienoje eilutėje? Jums reikia normalizuoti kainas, kad būtų rodomos kainos pagal bushel, todėl atlikite keletą skaičiavimų, kad standartizuotumėte.
-
Pridėkite šias eilutes po bloko, kuris sukuria new_pumpkins dataframe:
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)
✅ Pasak The Spruce Eats, bushel svoris priklauso nuo produkto tipo, nes tai yra tūrio matavimo vienetas. „Pavyzdžiui, pomidorų bushel turėtų sverti 56 svarus... Lapai ir žalumynai užima daugiau vietos su mažesniu svoriu, todėl špinatų bushel yra tik 20 svarų.“ Tai gana sudėtinga! Nesivarginkime su bushel į svarus konversija, o vietoj to kainą skaičiuokime pagal bushel. Visa ši moliūgų bushel analizė, tačiau, parodo, kaip svarbu suprasti savo duomenų pobūdį!
Dabar galite analizuoti kainas pagal vienetą, remdamiesi jų bushel matavimu. Jei dar kartą spausdinsite duomenis, pamatysite, kaip jie yra standartizuoti.
✅ Ar pastebėjote, kad moliūgai, parduodami pagal pusę bushel, yra labai brangūs? Ar galite suprasti, kodėl? Užuomina: maži moliūgai yra daug brangesni nei dideli, tikriausiai todėl, kad jų yra daug daugiau viename bushel, atsižvelgiant į nepanaudotą vietą, kurią užima vienas didelis tuščiaviduris pyrago moliūgas.
Vizualizacijos strategijos
Duomenų mokslininko vaidmuo yra parodyti duomenų kokybę ir pobūdį, su kuriais jis dirba. Tam jie dažnai kuria įdomias vizualizacijas, tokias kaip sklaidos diagramos, grafikai ir lentelės, kurios parodo skirtingus duomenų aspektus. Tokiu būdu jie gali vizualiai parodyti ryšius ir spragas, kurių kitaip būtų sunku pastebėti.
🎥 Spustelėkite aukščiau esančią nuotrauką, kad peržiūrėtumėte trumpą vaizdo įrašą apie duomenų vizualizaciją šiai pamokai.
Vizualizacijos taip pat gali padėti nustatyti, kuris mašininio mokymosi metodas yra tinkamiausias duomenims. Pavyzdžiui, sklaidos diagrama, kuri atrodo kaip linija, rodo, kad duomenys yra tinkami linijinės regresijos užduočiai.
Viena duomenų vizualizacijos biblioteka, kuri gerai veikia Jupyter užrašuose, yra Matplotlib (ją taip pat matėte ankstesnėje pamokoje).
Gaukite daugiau patirties su duomenų vizualizacija šiame vadove.
Užduotis - eksperimentuokite su Matplotlib
Pabandykite sukurti keletą pagrindinių diagramų, kad parodytumėte naują dataframe, kurį ką tik sukūrėte. Ką parodytų pagrindinė linijinė diagrama?
-
Importuokite Matplotlib failo viršuje, po Pandas importo:
import matplotlib.pyplot as plt
-
Paleiskite visą užrašų knygelę iš naujo, kad atnaujintumėte.
-
Užrašų knygelės apačioje pridėkite langelį, kad duomenys būtų pateikti kaip dėžutė:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
Ar tai naudinga diagrama? Ar kas nors joje jus nustebina?
Ji nėra ypač naudinga, nes tiesiog rodo jūsų duomenis kaip taškų sklaidą tam tikrame mėnesyje.
Padarykite ją naudingą
Kad diagramos rodytų naudingus duomenis, paprastai reikia kažkaip grupuoti duomenis. Pabandykime sukurti diagramą, kur y ašis rodo mėnesius, o duomenys demonstruoja duomenų pasiskirstymą.
-
Pridėkite langelį, kad sukurtumėte grupuotą stulpelinę diagramą:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
Tai yra naudingesnė duomenų vizualizacija! Atrodo, kad didžiausia moliūgų kaina yra rugsėjį ir spalį. Ar tai atitinka jūsų lūkesčius? Kodėl arba kodėl ne?
🚀Iššūkis
Ištyrinėkite skirtingus vizualizacijos tipus, kuriuos siūlo Matplotlib. Kurie tipai yra tinkamiausi regresijos problemoms?
Po paskaitos testas
Apžvalga ir savarankiškas mokymasis
Pažvelkite į daugybę būdų vizualizuoti duomenis. Sudarykite sąrašą įvairių bibliotekų ir pažymėkite, kurios yra geriausios tam tikriems užduočių tipams, pavyzdžiui, 2D vizualizacijoms ir 3D vizualizacijoms. Ką atrandate?
Užduotis
Duomenų vizualizacijos tyrinėjimas
Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, atkreipiame dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudotis profesionalių vertėjų paslaugomis. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus aiškinimus, kylančius dėl šio vertimo naudojimo.