13 KiB
Budowanie modelu regresji za pomocą Scikit-learn: przygotowanie i wizualizacja danych
Infografika autorstwa Dasani Madipalli
Quiz przed wykładem
Ta lekcja jest dostępna w języku R!
Wprowadzenie
Teraz, gdy masz już narzędzia potrzebne do rozpoczęcia budowy modeli uczenia maszynowego za pomocą Scikit-learn, możesz zacząć zadawać pytania dotyczące swoich danych. Pracując z danymi i stosując rozwiązania ML, bardzo ważne jest, aby umieć zadawać właściwe pytania, aby w pełni wykorzystać potencjał swojego zbioru danych.
W tej lekcji dowiesz się:
- Jak przygotować dane do budowy modelu.
- Jak używać Matplotlib do wizualizacji danych.
Zadawanie właściwych pytań dotyczących danych
Pytanie, na które chcesz uzyskać odpowiedź, określi, jakie algorytmy ML zastosujesz. Jakość odpowiedzi, którą uzyskasz, będzie w dużej mierze zależała od charakteru danych.
Spójrz na dane dostarczone do tej lekcji. Możesz otworzyć ten plik .csv w VS Code. Szybki przegląd od razu pokazuje, że są puste pola oraz mieszanka ciągów znaków i danych numerycznych. Jest też dziwna kolumna o nazwie 'Package', w której dane to mieszanka wartości takich jak 'sacks', 'bins' i inne. Dane są, mówiąc wprost, trochę chaotyczne.
🎥 Kliknij obrazek powyżej, aby obejrzeć krótki film o przygotowywaniu danych do tej lekcji.
W rzeczywistości rzadko zdarza się, aby otrzymać zbiór danych, który jest całkowicie gotowy do użycia w modelu ML. W tej lekcji nauczysz się, jak przygotować surowy zbiór danych za pomocą standardowych bibliotek Pythona. Poznasz również różne techniki wizualizacji danych.
Studium przypadku: 'rynek dyni'
W tym folderze znajdziesz plik .csv w katalogu głównym data
o nazwie US-pumpkins.csv, który zawiera 1757 wierszy danych o rynku dyni, posortowanych według miast. Są to surowe dane wyciągnięte z Raportów Standardowych Rynków Terminalnych dla Upraw Specjalnych dystrybuowanych przez Departament Rolnictwa Stanów Zjednoczonych.
Przygotowanie danych
Te dane są w domenie publicznej. Można je pobrać w wielu oddzielnych plikach, po jednym dla każdego miasta, ze strony internetowej USDA. Aby uniknąć zbyt wielu oddzielnych plików, połączyliśmy wszystkie dane miejskie w jeden arkusz kalkulacyjny, więc dane zostały już trochę przygotowane. Teraz przyjrzyjmy się im bliżej.
Dane o dyniach - wstępne wnioski
Co zauważasz w tych danych? Już widziałeś, że jest to mieszanka ciągów znaków, liczb, pustych pól i dziwnych wartości, które trzeba zrozumieć.
Jakie pytanie możesz zadać tym danym, korzystając z techniki regresji? Na przykład: "Przewidzieć cenę dyni na sprzedaż w danym miesiącu". Patrząc ponownie na dane, zauważysz, że trzeba wprowadzić pewne zmiany, aby stworzyć strukturę danych potrzebną do tego zadania.
Ćwiczenie - analiza danych o dyniach
Użyjmy Pandas (nazwa pochodzi od Python Data Analysis
), narzędzia bardzo przydatnego do kształtowania danych, aby przeanalizować i przygotować dane o dyniach.
Najpierw sprawdź brakujące daty
Najpierw musisz podjąć kroki, aby sprawdzić brakujące daty:
- Przekształć daty na format miesięczny (są to daty w formacie amerykańskim, więc format to
MM/DD/YYYY
). - Wyodrębnij miesiąc do nowej kolumny.
Otwórz plik notebook.ipynb w Visual Studio Code i zaimportuj arkusz kalkulacyjny do nowej ramki danych Pandas.
-
Użyj funkcji
head()
, aby zobaczyć pierwsze pięć wierszy.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ Jakiej funkcji użyłbyś, aby zobaczyć ostatnie pięć wierszy?
-
Sprawdź, czy w bieżącej ramce danych są brakujące dane:
pumpkins.isnull().sum()
Są brakujące dane, ale może nie będą miały znaczenia dla tego zadania.
-
Aby ułatwić pracę z ramką danych, wybierz tylko potrzebne kolumny, używając funkcji
loc
, która wyodrębnia z oryginalnej ramki danych grupę wierszy (przekazanych jako pierwszy parametr) i kolumn (przekazanych jako drugi parametr). Wyrażenie:
w poniższym przypadku oznacza "wszystkie wiersze".columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
Po drugie, określ średnią cenę dyni
Zastanów się, jak określić średnią cenę dyni w danym miesiącu. Jakie kolumny wybrałbyś do tego zadania? Podpowiedź: będziesz potrzebować 3 kolumn.
Rozwiązanie: oblicz średnią z kolumn Low Price
i High Price
, aby wypełnić nową kolumnę Price, i przekształć kolumnę Date, aby pokazywała tylko miesiąc. Na szczęście, zgodnie z powyższą kontrolą, nie ma brakujących danych dotyczących dat ani cen.
-
Aby obliczyć średnią, dodaj następujący kod:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ Możesz wydrukować dowolne dane, które chcesz sprawdzić, używając
print(month)
. -
Teraz skopiuj przekształcone dane do nowej ramki danych Pandas:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
Wyświetlenie ramki danych pokaże ci czysty, uporządkowany zbiór danych, na którym możesz zbudować nowy model regresji.
Ale chwila! Coś tu jest dziwnego
Jeśli spojrzysz na kolumnę Package
, dynie są sprzedawane w wielu różnych konfiguracjach. Niektóre są sprzedawane w miarach '1 1/9 bushel', inne w '1/2 bushel', niektóre na sztuki, inne na funty, a jeszcze inne w dużych pudełkach o różnych rozmiarach.
Dynie wydają się bardzo trudne do ważenia w sposób spójny
Zaglądając do oryginalnych danych, interesujące jest to, że wszystko, co ma Unit of Sale
równe 'EACH' lub 'PER BIN', ma również typ Package
na cal, na pojemnik lub 'każda'. Dynie wydają się bardzo trudne do ważenia w sposób spójny, więc przefiltrujmy je, wybierając tylko dynie z ciągiem 'bushel' w kolumnie Package
.
-
Dodaj filtr na początku pliku, pod początkowym importem .csv:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
Jeśli teraz wydrukujesz dane, zobaczysz, że masz tylko około 415 wierszy danych zawierających dynie sprzedawane na buszel.
Ale chwila! Jest jeszcze jedna rzecz do zrobienia
Czy zauważyłeś, że ilość buszli różni się w zależności od wiersza? Musisz znormalizować ceny, aby pokazać ceny za buszel, więc wykonaj kilka obliczeń, aby je ujednolicić.
-
Dodaj te linie po bloku tworzącym ramkę danych
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)
✅ Według The Spruce Eats, waga buszla zależy od rodzaju produktu, ponieważ jest to miara objętości. "Buszel pomidorów, na przykład, powinien ważyć 56 funtów... Liście i zielenina zajmują więcej miejsca przy mniejszej wadze, więc buszel szpinaku waży tylko 20 funtów." To wszystko jest dość skomplikowane! Nie przejmujmy się przeliczaniem buszli na funty i zamiast tego wyceńmy je na buszel. Całe to badanie buszli dyni pokazuje jednak, jak ważne jest zrozumienie natury swoich danych!
Teraz możesz analizować ceny za jednostkę na podstawie ich miary buszla. Jeśli wydrukujesz dane jeszcze raz, zobaczysz, jak zostały ujednolicone.
✅ Czy zauważyłeś, że dynie sprzedawane na pół buszla są bardzo drogie? Czy potrafisz wyjaśnić dlaczego? Podpowiedź: małe dynie są znacznie droższe niż duże, prawdopodobnie dlatego, że jest ich znacznie więcej na buszel, biorąc pod uwagę niewykorzystaną przestrzeń zajmowaną przez jedną dużą pustą dynię na ciasto.
Strategie wizualizacji
Częścią roli naukowca danych jest demonstrowanie jakości i charakteru danych, z którymi pracuje. Aby to zrobić, często tworzą interesujące wizualizacje, takie jak wykresy punktowe, słupkowe czy liniowe, pokazujące różne aspekty danych. W ten sposób mogą wizualnie pokazać relacje i luki, które w przeciwnym razie byłyby trudne do odkrycia.
🎥 Kliknij obrazek powyżej, aby obejrzeć krótki film o wizualizacji danych do tej lekcji.
Wizualizacje mogą również pomóc w określeniu techniki uczenia maszynowego najbardziej odpowiedniej dla danych. Na przykład wykres punktowy, który wydaje się podążać za linią, wskazuje, że dane są dobrym kandydatem do ćwiczenia regresji liniowej.
Jedną z bibliotek wizualizacji danych, która dobrze działa w notatnikach Jupyter, jest Matplotlib (którą widziałeś również w poprzedniej lekcji).
Zdobądź więcej doświadczenia z wizualizacją danych w tych samouczkach.
Ćwiczenie - eksperymentowanie z Matplotlib
Spróbuj stworzyć podstawowe wykresy, aby wyświetlić nową ramkę danych, którą właśnie stworzyłeś. Co pokaże podstawowy wykres liniowy?
-
Zaimportuj Matplotlib na początku pliku, pod importem Pandas:
import matplotlib.pyplot as plt
-
Uruchom ponownie cały notatnik, aby odświeżyć.
-
Na dole notatnika dodaj komórkę, aby narysować dane jako wykres pudełkowy:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
Czy ten wykres jest użyteczny? Czy coś cię w nim zaskakuje?
Nie jest szczególnie użyteczny, ponieważ pokazuje jedynie rozkład punktów w danym miesiącu.
Uczyń go użytecznym
Aby wykresy pokazywały użyteczne dane, zazwyczaj trzeba jakoś pogrupować dane. Spróbujmy stworzyć wykres, na którym oś y pokazuje miesiące, a dane przedstawiają rozkład.
-
Dodaj komórkę, aby stworzyć grupowany wykres słupkowy:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
To jest bardziej użyteczna wizualizacja danych! Wydaje się wskazywać, że najwyższe ceny dyni występują we wrześniu i październiku. Czy to odpowiada twoim oczekiwaniom? Dlaczego tak lub dlaczego nie?
🚀 Wyzwanie
Zbadaj różne typy wizualizacji oferowane przez Matplotlib. Które typy są najbardziej odpowiednie dla problemów regresji?
Quiz po wykładzie
Przegląd i samodzielna nauka
Przyjrzyj się różnym sposobom wizualizacji danych. Sporządź listę różnych dostępnych bibliotek i zanotuj, które są najlepsze do określonych typów zadań, na przykład wizualizacji 2D vs. 3D. Co odkrywasz?
Zadanie
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczeniowej AI Co-op Translator. Chociaż dokładamy wszelkich starań, aby zapewnić dokładność, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z korzystania z tego tłumaczenia.