Skąd brać dane do projektów data science? Czyli webscraping.

Webscraping – co to takiego?

Jest to proces automatycznego pobierania stron internetowych i wyciągania z nich interesujących nas informacji. Ponieważ dzieje się to automatycznie zajmuje to oczywiście mniej czasu niż gdybyśmy to chcieli zrobić ręcznie.

Od czego zacząć?

Najważniejsze co musimy zrobić chcąc skorzystać z danych umieszczonych na jakiejś stronie to upewnienie się, że jej warunki użytkowania nam na to pozwalają.
Jeśli już mamy taką stronę, której zawartość możęmy wykorzystać musimy się zastanowić jakie dane są nam potrzebne. Nastepnie z pomocą przyjdzie nam opcja Inspect (Zbadaj) w przeglądarce. Pozwoli nam ona w wygodny sposób przejrzeć strukturę HTML.

Kiedy ustalimy strukturę stron, które nas interesują jesteśmy gotowi napisać automat. W Pythonie z pomocą przyjdą nam takie biblioteki jak:

URLOPEN

Jest to funkcja modułu urllib.request, który umożliwia pobieranie stron z danego URL. Korzystamy z niej w bardzo prosty sposób:

page = urlopen("Url którego zawartość chcemy pobrać).read()

W ten sposób w zmiennej page mamy zawartość danej strony.

BEAUTIFULSOUP4

Ta biblioteka ułatwia przechodzenie po strukturze HTML. Na przykład, by wybrać wszystkie punkty danej listy wywołamy coś takiego:

data = BeautifulSoup(html, "lxml")
listelements = data.find_all("li")

Gdy już będziemy mieli dane, to możemy użyć biblioteki pandas, o której już tutaj wspominałam. Pozwala ona analizować dane w bardzo wygodny sposób.

Mogą nam się również przydać wyrażenia regularne i tutaj z przyda nam się operator Re, który również znajdziemy w Pythonie.  Pozwala on między innymi na wyszukiwanie i dopasowywanie tekstów do wzorca.

Kiedy już zdobędziemy dane, wyciągniemy co trzeba, obrobimy by format nam odpowiadał możemy użyć klasy DictWriter aby zapisać je w formacie CSV albo modułu do Sqlite by zapisać dane w bazie.

Przetwarzanie danych w data science

Jednym z podstawowych wyzwań jakie stoją przed data scientistami jest odpowiednia analiza zbiorów danych. Czasami takimi rzeczami zajmują się data analyst, ale jednak dla obu specjalności wiedza o tym jak postępować ze zbiorami danych jest bardzo ważna.

Po pierwsze przydaje się wiedza biznesowa na temat danych z jakimi ma się do czynienia, po to by zrozumieć, co poszczególne kolumny tabeli, którą dostaliśmy reprezentują. Czasem może to wymagać jakiegoś rozeznania w temacie. Tutaj możę się przydać też cecha, którą każdy data scientist powinien posiadać – czyli ciekawość. Im lepiej poznamy dany temat tym lepiej będziemy w stanie przeanalizować dane i uzyskać z nich przydatne wyniki. Przyda się też komunikatywność – aby informacje na temat danych zdobyć od ludzi, którzy wiedzę biznesową posiadają.

Po drugie – ważne jest, by zastanowić się, które z posiadanych przez nas danych mogą mieć wpływ na wynik, którego szukamy oraz jakie te korelacje mogą być. Jeśli na przykład chcemy przewidzieć wzrost czytelnictwa w danej grupie wiekowej będzie nas interesował wiek oraz ilość przeczytanych książek w ciągu roku. Ale niekoniecznie będzie nas interesował region czy płeć czytelników. Dlatego też już na wstępie pewne dane możemy wyciąć, jeśli wiemy, że do wyniku nas nie przybliżą.

Trzecia rzecz – dane nie zawsze są uporządkowane i kompletne. Możemy się spotkać z tabelami w których brakuje danych dla jakiejś kolumny w pewnym procencie wierszy. Co wtedy? Podejścia są różne – jeśli procent takich danych jest mały można pokusić się o usunięcie tych wierszy. Jednak jeśli danych nie mamy dużo i nie chcemy niczego usuwać częstą praktyką jest wstawienie w puste miejsca mediany wartości z danej kolumny. Spotkałam się też z uzupełnianiem pustych miejsc wartością średnią.

Ostatnie – często by dane łatwiej się przetwarzało pozbywamy się wartości tekstowych i zamieniamy je na wartości liczbowe. I tak na przykład gdy mamy kolumnę przechowującą płeć w formacie F lub M, możemy ja zamienić na reprezentację za pomocą cyfr 1 i 0.

Nadal w kosmicznym klimacie – Jupyter

Ostatnio w czasie kursu o którym wspomniałam w poprzednim wpisie – Dataquest miałam okazję zapoznać się narzędziem jakim jest Jupyter.
Jest to środowisko często używane w świecie data science. Mamy w nim do dyspozycji konsolę w której możemy wywoływać kolejne komendy, ale jest to dość rozbudowana konsola przypominając raczej rich text editor. W wersji online wygląda to mniej więcej tak:

Jupyter

W polu z zieloną obwódką możemy wywoływać polecenia. Przykład totalnie prosty:

Jupyter

Każde z tych pól to tzw komórka (cell). Aby po wpisaniu do niej dany kod się wywołał musimy nacisnąć Shift + Enter. W moim przypadku pokazanym powyżej wyglądało to tak:

Wpisałam a = 3, Shift + Enter, b = 4, Shift + Enter, c = a*b, Shift + Enter, print(c), Shift + Enter.

I tak dostałam wynik mnożenia liczb, które sobie zdefiniowałam. Oczywiście można by to wszystko umieścić w jednej komórce i wówczas wcisnąć Shift + Enter. Wyglądało by to wtedy tak:

Jupyter

Co jest fajne i ciekawe w tej konsoli, to że każdą komórkę w każdej chwili możemy zmienić. Czyli w tym pierwszym przykładzie mogłabym na przykład zmienić linijkę b = 4 na b = 5 i wywołać wszystko jeszcze raz. Jednak nie musiałabym przechodzić komórka po komórce i klikać Shift + Enter, ale mam w menu do dyspozycji coś takiego:

Jupyter

Wówczas możemy wybrać opcję „Run All” albo odpowiednio do potrzeb którąś z innych i zawartość komórek wywoła się hurtowo. Komórki na których pracujemy możemy również dowolnie przesuwać w górę i w dół, usuwać albo dodawać w dowolnym miejscu.

Jeśli chodzi o języki nie jesteśmy ograniczeni do Pythona. Jupiter pozwala nam korzystać z różnych języków:

Jupyter

Na zrzucie ekranu widać „Notebook” – o co chodzi? Otóż, jest to zbiór dokumentów, które mogą zawierać zarówno kod jak i wykresy czy tekst. Wybieramy język dla danego notesu aby Jupiter wiedział czego ma użyć do wywołania naszego kodu. Notesy możemy zapisywać na dysku:

Jupyter

By je później odczytać bądź komuś przesłać.

Wygląda na to, że Jupyter to całkiem fajne narzędzie i będę z niego jeszcze wiele razy korzystać podczas nauki:)

 

Data Science – nowe materiały

Niby druga notka nie musi być w temacie konkursowym, ale jakoś tak mi dziś wyszło. Koniecznie chciałam napisać o pewnym nowym znalezisku jakie odkryłam w zeszłym tygodniu. Mianowicie po pierwsze artykuł
„Building a data science portfolio: Storytelling with data”, który krok po krok opowiada jak zacząć przygodę z danymi i Pythonem. Genialny, tylko bardzo długi. Artykuł pochodzi z bardzo ciekawego bloga Dataquest. Jest to platforma do nauki pod hasłem „Become a Data Scientist – Learn by writing code, working with data, and building projects in your browser”. Są tam trzy ścieżki: Data Scientist, Data Analyst i Data Engineer. Jedną z nich wybiera się na początku i następnie realizuje kolejne misje. Logo portalu to rakieta, więc wszystko jest utrzymane w klimacie nieco kosmicznym, co chyba świetnie pasuje do Data Science.

Tryb nauki wygląda bardzo fajnie, bo jest troszkę tekstu do przeczytania, po czym instrukcje do zrealizowania w okienku z Pythonem. Jest to dużo bardziej dynamiczny tryb nauki niż Edx i chyba bardziej mi odpowiada. Nie wiem jeszcze jak dokładnie wygląda ewentualna certyfikacja, bo póki co korzystam z wersji darmowej, ale opłaty są miesięczne/roczne, więc całkiem inaczej niż w Edx, gdzie ostatnio certyfikacja podrożała dwukrotnie.

Chwilowo zatem próbuję swoich sił w misjach Dataquest. Bardzo podoba mi się tam też to, że jest dużo zadań „z życia” – na przykład misje typu „Guided Project: Using Jupyter Notebook. Learn how to perform analysis and communicate results with Jupyter notebook.” albo „Guided Project: Explore U.S. Births. Practice the basics of Python by analyzing births in the U.S.” No ale Edx z kolei ma korzystanie z Azure Machine Learning:) Tak więc mocno się uzupełniają.

 

Python w Data Science

Poprzednio pisałam o statystyce i Excelu, ale to co mnie interesuje najbardziej, to jednak programowanie. Dziś jednak będzie krótko, ponieważ temat, którego poznania się podjęłam jest naprawdę ogromny:)

Dlaczego wybrałam Pythona nie R? Chyba już wspomniałam, iż zależało mi na tym, żeby to był język, który mogę wykorzystać też do czegoś innego. Zresztą w zeszłym roku, właśnie tuż przed rozpoczęciem poprzedniej edycji Daj się poznać miałam swoje pierwsze podejście do Pythona, ale w postaci Django. Ostatecznie jednak w konkursie zdecydowałam się na realizację aplikacji androidowej, bo jej tematyka była ciekawsza.

I tak w Pythonie do tej pory poznałam dwie dość ciekawe rzeczy związane z Data Science: NumPy i Pandas.

NumPy – w dużym skrócie

Jest to moduł/rozszerzenie do Pythona, które umożliwia nam operacje na macierzach i wielowymiarowych tablicach. Jest to zatem niesamowicie przydatne w przypadku przetwarzania danych.
Jedną z podstawowych rzeczy, które często są używane przy pracy z danymi to typ ndarray – jest to tablica, która w odróżnieniu od tablic wbudowanych w Pythona pozwala na przechowywanie danych tylko jednego typu oraz muszą mieć z góry zdefiniowany rozmiar. Dzięki temu tak skonstruowane tablice są dużo bardziej wydajne. W przypadku dużych ilości przetwarzanych danych naprawdę ma to znaczenie.

Pandas – w dużym skrócie

Jest to biblioteka, która dostarcza funkcjonalności związanych z przetwarzaniem danych i ich analizą. Za jej pomocą możemy dokonywać podobnych operacji jak te o których pisałam w poprzednim wpisie poświęconym tematowi Data Science – wyznaczać wartości średnie, mediany, odchylenia standardowe itd. Możemy również agregować dane na różne sposoby, tworzyć pivoty a także rysować wykresy. Właściwie realizując lekcje z Pandas robiłam niemalże to samo co wcześniej w lekcjach z Excela związanymi z przetwarzaniem danych.

NumPy i Pandas mają całą masę funkcjonalności – wielu z nich na pewno jeszcze nie znam, ale wszystko przede mną!