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 – czego ja się tu uczę?

Tak jak już wcześniej wspomniałam uczę się korzystając z programu Microsoft Professional Program Certificate in Data Science

Pierwszy kurs

Pierwszy kurs pt Data Science Orientation zawiera trochę informacji i wprowadzenia na temat tego co się będzie działo w programie oraz jak sobie zaplanować cały kurs by jak najwięcej z niego skorzystać i móc zrobić certyfikat na jego zakończenie. Jest to o tyle ważne, że mamy dokładnie miesiąc na skończenie kursu jeśli już go zaczęliśmy. Jeśli nie zdążymy właściwie nic wielkiego się nie skończy, ale jeśli będziemy chcieli uzyskać certyfikat będziemy musieli przejść wszystkie testy, które pojawiają się na zakończenie poszczególnych modułów oraz test końcowy.

Data Scientists

W tym pierwszym kursie bardzo podobała mi się część w której są wywiady z ludźmi pracującymi jako Data Scientist, gdzie opowiadają trochę o swoje pracy, tym czego od nich wymaga i co w niej lubią. Jedna z osób powiedziała coś takiego, że fascynuje ją iż nigdy nie wie czego dowie się analizując jakieś dane. Jest to zawsze niespodzianka i wielka zagadka. Myślę, że podzielam ten pogląd. Zawsze, gdy patrzę na jakieś analizy, dema i widzę jak różne informacje pojawiają się na koniec jest jest to dla mnie zawsze zaskakujące.

Excel Power

Poznałam również Excela od innej strony. Do tej pory kojarzył mi się z nudnym narzędziem. Tymczasem w trakcie tego pierwszego kursu miałam okazję nauczyć się analizować dane za jego pomocą korzystając z takich funkcji jak:

  • Formatowanie warunkowe (Conditional Formatting), które pozwala na formatowanie komórek odpowiednio do zbioru danych w danej kolumnie. W ten sposób można na przykład pokolorować te komórki, gdzie znajdują się dane z Top 10 lub Top 10%, podobnie – Bottom 10 lub Bottom 10% aby móc jednym spojrzeniem zauważyć które komórki zawierają dane wartości. Można również automatycznie wyróżnić wartość największą lub najmniejszą.
  • Slicer – jest to pewne rozszerzenie filtrów, które możemy mieć na poszczególnych kolumnach. Jednak różni się tym, iż w jednym możemy mieć dane tylko do jednej kolumny z wartościami filtru dla niej właśnie. Dzięki temu możemy filtrować dużo szybciej.
  • Oprócz tego dużo różnych wykresów. W szczególności ważny jest histogram oraz wykres punktowy.
    Histogram pozwala nam na zilustrowanie jak dane w zbiorze się rozkładają. Przykład z mojej nauki:
    HistogramWidać na nim, że danych z zakresu 68 – 86 jest w moim zbiorze równo 2, danych z zakresu 86 – 104 jest 12, 102 – 122 jest 9 itd.
    Histogramy są tutaj o tyle ważne, że pozwalają wykryć nieprawidłowości w danych – jeśli na przykład któregoś „prostokąta” brakuje. Te zakresy oraz ilość prostokątów ustalamy sobie dowolnie zależnie od naszych potrzeb.
    Z kolei wykres punktowy może nam pomóc w poszukiwaniu korelacji między dwoma wartościami. W ćwiczeniach z kursu szukałam korelacji pomiędzy sprzedażą napojów a ilością rozdanych ulotek i tak wyglądał mój wykres:
    Wykres punktowyAkurat ten wykres potwierdza korelację pomiędzy tymi dwoma rzeczami, ponieważ punkty układają się dość blisko siebie a przy tym idą od lewego dolnego punktu do górnego prawego. Mówi się również, że w tym przypadku korelacja jest pozytywna – wzrostowa. Gdyby dane układały się od lewej górnej części do prawej dolnej – byłaby to korelacja negatywna.
  • Ciekawym typem wykresy jest też taki, którego nigdy wcześniej nie widziałam – czyli: wykres pudełkowy (Box and Whisker). Jest to wykres, który wygląda na przykład tak:
    Co tutaj widzimy?
    Ilość sprzedanych napojów cytrynowych mieści się w zakresie od pomiędzy 60 a 80 i między 160 a 180 – bliżej 180. Podobnie w przypadku pomarańczowych – zaczyna się nieco ponad 40 i kończy pomiędzy 120 a 140. Zatem wartości maksymalne i minimalne zaznaczone są poprzez poziome kreski zwane również wąsami.
    A co z prostokątami? Jakbyśmy spojrzeli na to pod kątem 90 stopni to można zauważyć, że zajmują one pewien zakres wartości – lewy bok znajduje się około 100 i wyznaczony jest przez pierwszy kwartyl a prawy bok wyznaczany jest przez trzeci kwartyl. Pierwszy kwartyl to zbiór danych, które położone są poniżej 25%. Natomiast trzeci to dane znajdujące się powyżej 75%. Przykładowe dane na temat sprzedaży jakie miałam do dyspozycji na temat napojów cytrynowych to: 97, 98, 110, 134, 159, 103, 143, 123, 134, 140, 162, 130, 109, 122, 98, 81, 115, 131, 122, 71, 83, 112, 120, 121, 156, 176, 104, 96, 100, 88, 76. Jeśli ktoś chciałby sobie to jakoś bardziej poanalizować, to może się przydać:)
  • Używane są również wykresy słupkowe, liniowe i dużo rzadziej – kołowe.

Statystyka

Pojawiły się też pojęcia ze statystyki – zarówno te, które pamiętam ze studiów jak i takie o których słyszałam pierwszy raz albo o nich zapomniałam;)

  • Średnia – termin, którego chyba nie trzeba wyjaśniać:)
  • Mediana – wartość środkowa poniżej i powyżej której znajduje się dokładnie taka sama liczba danych.
  • Dominanta – wartość najczęściej występująca w danym zbiorze
  • Rozstęp/zakres – różnica między największą i najmniejszą wartością w zbiorze
  • Wariancja – informacja na temat zróżnicowania danych w zbiorze
  • Odchylenie standardowe – informacja na temat jak bardzo dane są różne od średniej w danym zbiorze
  • Błąd standardowy – odchylenie standardowe średnich z prób
  • Kurtoza – informacja na temat tego na ile dane są zbliżone do średniej
  • Współczynnik skośności – pomaga określić czy dane są równo rozłożone po obu stronach średniej czy może któreś dane leżą dalej od średniej
  • T-Test – pozwala nam porównać ze sobą dwa zbiory danych

Uff, trochę tego jest – wszystkie trudniejsze pojęcia podlinkowałam do Wikipedii. Notka urosła długa, więc Python zostanie na następną okazję. Natomiast jeszcze muszę wspomnieć, że oczywiście danych do ćwiczeń z kursu nie musiałam preparować sama – więc nie rozdawałam ulotek, nie sprzedawałam napojów ani nic takiego:) Dane były do ściągnięcia w ramach kursu:) Czy pochodzą z życia? Kto to wie. Ale na potrzeby kursu sprawdziły się całkiem nieźle.

Live Unit Testing w Visual Studio 2017 vs dotCover + ReSharper

W komentarzu do postu na temat Live Unit Testing w nowym Visual Studio pojawiło się pytanie o porównanie go z dotCover. Musiałam zrobić małe rozeznanie, ponieważ przyznam, że dotCover niestety nie miałam okazji nigdy używać na codzień w pracy. Jednak jakiś czas temu się nim bawiłam.

Zatem do rzeczy – owszem dotCover daje nam bardzo podobne możliwości do Live Testing, ale Live naprawdę jest Live – o tym będzie za chwilkę.

Jednak jest płatny i idzie w parze z ReSharperem jako pakiet ReSharper Ultimate. Ceny zaczynają się od 89 euro – wersja roczna dla indywidualnych użytkowników przedłużających licencję po trzecim roku. Kończą gdzieś w okolicach 399 euro. Wszystko też zależy od tego czy to licencja roczna czy płacimy z góry za miesiąc. Więcej informacji znajdziecie tutaj. Tymczasem w Visual Studio dostajemy Live Testing w pakiecie. Niestety jak słusznie w komentarzu zauważył @rbl – opcja ta jest dostępna tylko w wersji Enterpise i z taką też się w żadnej firmie w której pracowałam nie spotkałam – był co najwyżej Professional. Różnica w cenie między Professional a Enterpise jest znaczna – pierwsze to kilka tysięcy dolarów, drugie kilkaset. Pełny cennik tutaj.

DotCover podobnie jak LiveUnitTesting dostarcza nam informacji na temat pokrycia kodu bezpośrednio w edytorze. Tutaj widzimy testy, które przechodzą:

Live Unit Testing - Coverage

Jeśli nie będą przechodziły ikonki z lewej zmienią kolor na czerwony.

Pierwsze co zauważyłam jeśli chodzi o różnice, to dotCover nie obsługuje MSTest. Moje okienko Continous Testing Session z testami w MSTest wyglądało tak:

Dot Cover - MSTest

Czyli troszkę jakby działa, bo widać, że testy przechodzą, ale Coverage niestety nie jest uzupełniony. Kiedy zmieniłam testy na NUnit od razu zrobiło się lepiej:

DotCover - NUnit

Pod prawym klikiem na pasku z procentami mamy przycisk który pozwala nam szybko rzucić okiem na listę testów wchodząc w skład danej części.

Ale skąd się wzięło to okienko Continous Testing Session? Otóż w menu ReSharpera mamy opcję, która go uruchamia.

Live Unit Testing

Kiedy już włączymy, możemy skonfigurować uruchamianie tych testów:

Live Unit Testing

Zatem możemy sprawić, że uruchomią się podczas każdego zapisu lub podczas każdego budowania aplikacji. I tutaj właśnie pojawia się główna różnica – Live Unit Testing wbudowane w VS 2017 naprawdę jest Live, ponieważ by testy się uruchomiły nie musimy niczego zapisywać ani budować. Zmieniamy kod, czekamy chwilkę (mniej niż sekunda) i od razu w konsoli widzimy, że testy się uruchomiły. Co do tego „czekania chwilkę”, to właśnie w pewien sposób może się okazać to dla nas trochę uciążliwe jeśli na przykład tylko zamyśliliśmy się nad kodem a on już nam testy włącza. Znalazłam ustawienie o nazwie „Testcase Timeout”, ale nie jestem pewna za co odpowiada – nie udało mi się tego znaleźć. Natomiast jego zmiana nie miała wpływu na odległość czasu pomiędzy przestaniem pisać a włączeniem testów.

Jeszcze jeśli chodzi o obsługiwanie MSTest, NUnit i XUnit – to Live Unit Testing byłam w stanie sprawdzić jedynie na MSTest, ponieważ o ile Microsoft mówi, że działa z NUnit i XUnit tylko wystarczy doinstalować rozszerzenie, to jednak nie mówi jakie dokładnie i moje próby różnych skończyły się fiaskiem:(

Dużą różnicą są też wykresy pokrycia kodu, które w tej, jak widać na zrzucie ekranu powyżej, zgrabnej formie, daje nam DotCover. Live Unit Testing daje nam tylko informacje w edytorze kodu, gdzie mamy pokrycie a gdzie nie.

I jeszcze odpowiadając na pytanie z komentarza – wersję Enterprise zainstalowałam w wersji RC i z niej właśnie pochodzą zrzuty ekranu zrobione już parę miesięcy temu na potrzeby prezentacji z tego tematu.

Co nowego w Visual Studio – część 4

Witajcie w kolejnej części cyklu na temat nowości w Visual Studio.Poprzednie części cyklu znajdziecie tutaj:
Co nowego w Visual Studio 2017 – część 1
Co nowego w Visual Studio 2017 – część 2
Co nowego w Visual Studio 2017 – część 3

Visual Studio wreszcie miało swoją premierę 7 marca, ale cykl na temat nowości jeszcze trwa. Niektórzy boją się instalować, ponieważ to taka wczesna wersja i może być problem z wieloma rzeczami. W takim razie na początek dzisiaj chciałabym się podzielić z Wami moimi doświadczeniami z VS 2017 a także z VS2015 w wersji RC. Przyznam, że używałam ich jedynie w zastosowaniach domowych w czasie gdy były RC, ale nie napotkałam na żadne nieoczekiwane problemy ze strony środowisk. Co więcej, używając VS w wersji 2015 tworzyłam kod do nagrań z kursem Helionu, który zrobiłam jakiś czas temu. Tak więc sporo kodu na nim powstało. Co do VS 2017 było tej zabawy dużo mniej. Zdaję sobie sprawę, że wiele rzeczy może zależeć od architektury komputera i tego co już mamy na nim zainstalowane.  No ale na Windows w wersji RC to już bym się nie zdecydowała:)

A teraz do rzeczy – dziś powiemy sobie o kolejnej funkcjonalności, która bardzo mi się podoba, mianowicie tzw „Live Unit Testing”. Jest to coś co pozwala nam mieć ciągły podgląd na to czy naszym radosnym kodowaniem nie zepsuliśmy jakiegoś testu oraz na szybkie przejrzenie, gdzie testów nam brakuje.

Najpierw musimy sobie tą opcję włączyć. Nie jest ona niestety dostępna w wersji Community. Znajdziemy ją w menu Test:

Enable Live Unit Testing

Gdy mamy ją włączona w okienku Output zobaczymy coś takiego:

Live Unit Testing Output

A w okienku edytora:

VS2017LiveUnitTesting2

Kreski mówią nam o tym, ze nie mamy żadnych Unit Testów dotyczących tego kawałka kodu. Możemy je szybko dodać klikając prawym klawiszem myszy pod którym mamy opcję, która otworzy nam takie oto okienko:

Add Unit Test

Możemy nawet nic nie zmieniać i kliknąć OK. Wówczas niebieskie kreseczki zmienią w czerwone krzyżyki, ponieważ testy już mamy, ale nie przechodzą:

Live Unit Testing - New Test

Jeśli uzupełnimy metodę poprawnie działającym i przechodzącym testem krzyżyki zmienią się na zielone fajeczki:

Live Unit Testing - Passing Test

W kodzie który testuje ten test również zmienią się na zielone:

Live Unit Testing - Green

Jeśli teraz w którymś momencie zepsujemy test zielone wskaźniki zmienią się z powrotem na czerwone.

Można się nieco przestraszyć tym co się stanie jeśli włączymy Live Unit Testing a mamy bardzo dużą solucję z dużą ilością projektów oraz testów. Otóż możemy włączyć tą funkcjonalność tylko dla poszczególnych projektów zawierających testy – na przykład tych dotyczących kodu nad którym w danym momencie pracujemy.

 

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.