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.

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ą!

Data science – początek przygody

Kiedy postanowiłam wystartować z tematem data science w konkursie nie bardzo wiedziałam od czego zacząć. Na pewno temat siedział mi w głowie od dawna, ale brakowało czasu, żeby się z tym na szerszą skalę zapoznać. Gdzieś na konferencjach zdarzyło mi się obejrzeć rożne ciekawe prezentacje z tym tematem związane, ale na tym sprawa się kończyła do tej pory. Wiedziałam też, że chciałabym zapoznać się też z Pythonem jeśli chodzi o programowanie kwestii z data science związanych.

Zaczęłam więc najprościej jak się dało czyli od wpisania w Google „data science python” 🙂 I tak trafiłam na całkiem fajną stronę www.edx.org i program Microsoftu, na który składa się szereg kursów związanych z data science: Microsoft Professional Program Certificate in Data Science. Jest wśród nich oczywiście właśnie szukany przeze mnie Python: Introduction to Python for Data Science oraz Programming with Python for Data Science.

Postanowiłam zacząć od początku i przerobić cały ten program aby dowiedzieć się jak najwięcej o całości tematu. Póki co podoba mi się to, że używane są narzędzia Microsoftu takie jak Excel czy BI. Fajne jest też to, że kursy są darmowe chyba, że chcemy uzyskać certyfikat na zakończenie – wówczas musimy zapłacić. Są one podzielone na części po których należy wykonać labolatorium – offline a także test – offline. Na koniec każdego kursu jest egzamin.

Druga strona na jaką trafiłam właśnie na początku poszukiwań to z kolei związana głównie z programowaniem – w R oraz w Pythonie to Datacamp. Tam z kolei mamy krótkie filmiki na temat kolejnych zagadnień języka a po nich kilka interaktywnych ćwiczeń. Bardzo mi się ta forma podoba, ponieważ nie jest nudno. Tutaj również wiele kursów jest darmowych a certyfikacja płatna.

Trzeba było też znaleźć jakiś pomysł do zakodowania by zrealizować go w ramach konkursu. I tutaj również z pomocą przyszło Google, które wręcz zalało mnie pomysłami oraz źródłami danych, które można wykorzystać. To o czym chciałabym tutaj wspomnieć to Kaggle. Tutaj możemy znaleźć całą masę rzeczy przydatnych w przygodzie z data science – zbiory danych do przetwarzania, zawody gdzie możemy podzielić się prognozami jakie udało nam się stworzyć a nawet znaleźć pracę jako Data Scientist:)

Na początek czuję się miło przytłoczona ogromem tematu, ponieważ jest cała masa fajnych źródeł do zdobycia wiedzy a to jest dokładnie to co lubię. Jeśli znacie jakie stronki warte uwagi w tym temacie dajcie znać w komentarzach.