Skip to content

Notatki ze spotkań

Pawel Dulak edited this page Mar 5, 2020 · 2 revisions

Najnowsze u góry

2020-03-04 (#10)

Notatkę sporządził: Paweł

Obecnych 16 osób

Cel spotkania

Podczas spotkania budowaliśmy pierwsze działające pipeline - od zebrania przepisów ze stron z przepisami (za pomocą rozszerzenia do Chrome), przez przesłanie danych do serwera, scrapowanie stron na serwerze, aż po odesłanie "listy zakupów" zwrotnie do rozszerzenia w przeglądarce. Dane szły bez dalszej obróbki, chodziło o to żeby zobaczyć działanie całego procesu od początku do końca i przyjrzeć się "jakie klocki" są nam potrzebne.

Mając taki działający zestaw, możemy teraz pracować nad usprawnianiem jego fragmentów:

  • pisanie funkcji scrapujących to czego jeszcze nie scrapujemy (nowe strony)
  • wykrywanie składników potraw na stronach na których nie są one wydzielone (NLP Entity recognition)
  • grupowanie składników na liście zakupów (od najprostszych metod - np. alfabetycznie, po coraz bardziej rozwinięte klastrowanie)
  • wykrywanie i zamiana "nietypowych" składników na "typowe" na przykład "Budyń waniliowy bez cukry Winiary" na "Budyń waniliowy bez cukru"

Rzeczy organizacyjne do zrobienia po tym spotkaniu

  1. przygotować instrukcję dla nowych uczestników spotkań (slack, kanały, repozytorium)
  2. przygotować instrukcję do Git (fork, commit, push, pull request, update from upstream)

Zadanie domowe

Przygotować w swoim katalogu personal gotowy serwer flask który będzie potrafił współpracować z pluginem w Chrome - odebrać dane i odesłać listę zakupów. Na początek może odsyłać cokolwiek. Zadanie z gwiazdką - przygotować scraper współparcujacy z tym serwerem. Na ten moment mamy gotowe scrapery do Kuchni Lidla, Przepisy.pl oraz Winiary, polecam zatem inną stronę.

Składniki potrzebne do tej pracy:

  1. Rozszerzenie Chrome: https://github.com/dataworkshop/dw-cracow-project/tree/master/personal/PawelDulak/recipes_shopping_list/chrome_extension
  2. Gotowy serwer Flask z obsługą scrapingu na "przepisy.pl": https://github.com/dataworkshop/dw-cracow-project/tree/master/personal/PawelDulak/recipes_shopping_list/recipes_server

2020-02-19 (#9)

Notatkę sporządził: Paweł

Obecnych 12 osób

Cel spotkania

W pierwszej części spotkania Maciek przedstawił biblioteki NLP - stemmer i lematyzator, w drugiej zastanawialiśmy się nad pipeline dla naszego projektu z przepisami kulinarnymi, w trzeciej pracowaliśmy nad elementami pipeline.

Na początku spotkania Maciek https://github.com/dzieciou przedstawił nam stemmer i lematyzator działające w języku polskim. Posłuchaliśmy o ich wadach i zaletach, zobaczyliśmy w jaki sposób pracują. Zastanawialiśmy się jak mogą się przydać w realizacji naszego projektu kulinarnego.

W drugiej części spotkania układaliśmy pipeline aplikacji która z przepisów kulinarnych przygotuje listę zakupów. Szukaliśmy pomysłów i możliwych rozwiązań dla poszczególnych kroków w pracy takiej aplikacji. Dzieliliśmy się zadaniami (na pierwszy ogień - pluginy do Firefox i Chrome do zbierania URLi przepisów, prosty skrypt serwerowy odbierający dane z pluginu i odsyłający listę zakupów, scrappery do różnych stron z przepisami).

W ostatniej części spotkania pracowaliśmy w podgrupach nad pluginami i scrapperami.

Zadanie domowe:

  • poszukać stron z przepisami, strony dwóch typów - takie które mają wydzieloną listę składników potrawy oraz taką w których takiej wydzielonej listy nie ma. Zanotować adresy tych stron i kilku przykładowych przepisów.
  • w miarę możliwości napisać scraper do jednej lub kilku takich stron.

2020-02-05 (#8)

Notatkę sporządził: Paweł

Obecnych 5 osób

Cel spotkania

W związku z innym niż spodziewany składem osobowym, zmieniliśmy plany. Staraliśmy się nabyć trochę nowej wiedzy i ugruntować to co już wiemy.

Podczas spotkania pracowaliśmy nad prostym notebookiem "prognozowanie płci z imion". Zastanawialiśmy się nad tworzeniem cech i ich istotnością, sensem wykorzystania różnego typu bibliotek, dodawania lub usuwania cech itp. Rozmawialiśmy też o konkursach na Kaggle.

2020-01-22 (#7)

Notatkę sporządził: Paweł

Obecnych 14 osób

Cel spotkania

  • praca z danymi - składniki potraw - analiza danych, czyszczenie, grupowanie

Podczas spotkania próbowaliśmy różnych podejść do grupowania składników potraw - sprawdzaliśmy czy możemy i jak możemy zautomatyzować proces grupowania podobnych składników na listę zakupów. Testowaliśmy biblioteki do badania podobieństwa ciągów znaków, czyściliśmy dane z nieprzewidzianych i niepotrzebnych informacji, szukaliśmy słów które występują w opisach produktów a nie są istotne na etapie grupowania produktów. Natrafiliśmy na wiele ciekawych zagadnień związanych z NLP - niejednoznaczności w języku, rzeczy które są "oczywiste" dla kogoś kto posługuje się językiem, ale które nie są proste do "wytłumaczenia" komputerowi. Zastanawialiśmy się jakie grupowanie produktów ma sens (po podobnych nazwach, po umiejscowieniu w sklepie - na przykład warzywa razem, jeszcze według innych kryteriów) i jakie grupowanie jesteśmy w stanie uzyskać.

Na kolejnym spotkaniu spróbujemy zbudować prosty kompletny pipeline aplikacji (szukam polskiego określenia :) ). Chodzi o to żeby zbudować taki skrypt w Pythonie (na przykład w Jupyter Notebook) który na wejściu przyjmie adresy URL przepisów które nas interesują a na wyjściu poda listę zakupów. Nie chodzi o to żeby od razu uzyskać idealne rozwiązanie, ale zbudować prosty modułowy silnik, który zajmie się pobraniem danych z adresów URL, pogrupowaniem składników i na wyjściu poda nam listę zakupów w dowolnej formie (tekst, zmienna typu lista itp). Na takiej podstawie można budować coraz lepsze rozwiązania poprzez poprawianie, doskonalenie poszczególnych podzespołów.

Zadanie domowe: Wyszukanie na stronie przepisy.pl zestawu przepisów które składają się w przykładowy jadłospis. Było by dobrze żeby niektóre składniki w potrawach powtarzały sie. Dzięki temu będzie można popracować dalej nad grupowaniem składników i zobaczyć jak w praktyce działają elementy naszego rozwiązania.

2020-01-08 (#6)

Notatkę sporządził: Paweł

Obecnych 15 osób

Cel spotkania

Podczas spotkania zastanawialiśmy się nad krokami które chcemy podjąć w związku z projektem. Naszym celem jest przygotowanie rozwiązania, które na podstawie przepisów kulinarnych zbuduje listę zakupów. Chcemy żeby użytkownik mógł podać URLe do przepisów które chce zrealizować a nasz kod powinien znaleźć w przepisach potrzebne składniki, zebrać je w listę i odpowiednio przedstawić. Można więc roboczo podzielić pracę aplikacji na następujące etapy:

  1. zbieranie adresów URL do przepisów (od użytkownika)
  2. pobieranie treści przepisów i wyciąganie z nich składników potraw
  3. konsolidacja listy składników z różnych przepisów i utworzenie jednej listy zakupów

W rozmowie pojawiły się różne pomysły oraz przemyślenia na temat możliwych problemów. Aby uprościć pierwsze kroki w naszej pracy, chcemy początkowo pobierać dane tylko z określonych stron z przepisami. Chodzi o takie strony które podają listę składników jako osobny blok tekstu a także w niektórych przypadkach - jasno oddzielają nazwę produktu od jego ilości (gramatury).

Tutaj można obejrzeć więcej luźnych notatek ze spotkania

Zadanie domowe

Żeby mieć dane na których możemy zacząć pracować potrzebujemy dwóch rzeczy:

  1. stron na których przepisy są dobrze sformatowane (łatwe dla nas na początek)
  2. danych związanych ze składnikami przepisów Strona przepisy.pl prezentuje przepisy w sposób który powinien być łatwy do obróbki. Podobnie na stronie kuchnialidla.pl składniki powinny dać się dobrze pobrać. Na zadanie macie zatem przygotować scraper do składników przepisów i zapisać składniki z przynajmniej kilku przepisów do pliku CSV w formacie: URL, nazwa_skladnika, ilosc

Zadanie z gwiazdką: znaleźć inne strony z przepisami które podają składniki w przystępnej formie i przygotować scraper do tych stron. Zebrać dane z kilku przepisów.

Dla zapracowanych, Maciek przygotował przykładowe scrapery pracujące na Scrapy a Paweł przygotował prosty scraper do przepisy.pl działający na BeautifulSoup

2019-12-11 (#5)

Notatkę sporządził: Paweł

Obecnych 8 osób

Cel spotkania

  • badanie danych zebranych z Sejmu

Podczas spotkania pracowaliśmy nad analizą danych zebranych z Sejmu. Zestaw ciekawych wykresów i wyliczeń można zobaczyć na przykład tutaj: https://github.com/dataworkshop/dw-cracow-project/blob/master/personal/PawelDulak/data_analysis.ipynb

Opracowywanie dużej ilośći danych (ponad 6 milionów rekordów) nie było proste i czasami okazywało się trudne pod względem wydajności naszych laptopów. Pomagało dobre rozplanowanie kroków podczas analizy (najpierw zawężanie zakresu danych, później operacje arytmetyczne czy agregacja). Paweł Paszcza zwrócił uwagę że oryginalny plik z danymi jest przygotowany nieoptymalnie - za duże zmienne na małe wartości liczbowe, zmienne które były tekstem można zapisać jako kategorie - w ten sposób dało się znacznie poprawić wydajność i zmniejszyć wielkość danych w pamięci (i na dysku).

Nie znaleźliśmy ciekawych pomysłów na wykorzystanie danych sejmowych do przygotowania modelu. Na kolejnych spotkaniach planujemy zwrócić się w kierunku pomysłu wykorzystania NLP do pomocy przy przygotowywaniu listy zakupów.

Zadanie domowe

  • przygotować przykłady stron z przepisami z których możemy skorzystać przy budowaniu listy zakupów - wybieramy przepisy z różnych stron i będziemy się starać na ich podstawie zbudować listę zakupów.

2019-11-27 (#4)

Notatkę sporządził: Paweł

Obecnych 8 osób

Cel spotkania

  • ciąg dalszy scrapingu danych głosowań ze strony Sejmu

Podczas spotkania pracowaliśmy nad scrapingiem danych dotyczących konkretnych sesji parlamentu oraz konkretnych głosowań. Celem jest przygotowanie na kolejne spotkanie danych dla przynajmniej części głosowań w taki sposób, żeby dało się je analizować.

Zadanie domowe

  • przygotować listę rzeczy które chcemy wyciągnąć z danych sejmowych. Przykłady: ilość nieobecności konkretnego posła, rozkład nieobecności w czasie, rozkład głosowań w czasie itp.

2019-11-13 (#3)

Notatkę sporządził: Paweł

Obecnych 6 osób

Cel spotkania

  • przygotowanie pierwszego scrapingu danych głosowań ze strony Sejmu

Podczas spotkania przygotowaliśmy kod do pobrania listy posiedzeń Sejmu - podstawy do pobierania list głosowań. Rozmawialiśmy też krótko na temat naszych oczekiwanych celów. Wśród wymienianych celów pojawiły się:

  • do projektu "z przepisami kulinarnymi"
    • Sugerowanie potraw/dań/ciast z podobnymi składnikami
    • Układanie listy zakupów na podstawie przepisów z których chcemy skorzystać
    • Dobieranie przepisów do produktów które mam w lodówce
    • Automatyczne zamawianie produktów - jeśli na przykład jest dostępne API jakiegoś sklepu
  • do projektu "sejmowego"
    • Przewidywanie wyników głosowań nad poszczególnymi ustawami
    • just for fun
    • nauka analizy danych W trakcie spotkania przygotowaliśmy równolegle cztery silniki do pobierania i wstępnej obróbki danych, na razie tylko z jednej strony (Głosowania na posiedzeniach ósmej kadencji). Nie ustaliliśmy planu na kolejne spotkanie.

Zadanie domowe

  • przygotować notebook który pobierze dane głosowań z 7, 8 i 9 kadencji (obecnie dostępne) i przygotuje je w ramach jednego pliku CSV z linkami do stron na których rozpisane są głosowania w poszczególnych dniach.

2019-10-30 (#2)

Notatkę sporządził: Paweł

Obecnych 15 osób

Cel spotkania

  • pokazanie czym i jak będziemy się posługiwać w pierwszej części projektu (git, podstawy scrapingu)

Podczas spotkania Krzysiek pokazał jak będziemy posługiwać się Gitem i GitHubem w ramach pracy nad projektem. Piotrek przedstawił krótką analizę zebranych przez siebie danych sejmowych oraz problemów na które natrafił przy wyciąganiu danych z plików PDF. Oleg pokazał narzędzia BeautifulSoup oraz Scrapy, przedstawił podstawy scrapingu (pobierania danych ze stron internetowych) wraz z problemami na które się natknął i ich rozwiązaniami. Spotkanie zakończyliśmy rozmową na temat kolejnych kroków, planu na następne spotkanie i naszych przemyśleń na temat projektów.

Po spotkaniu wstępnie ustaliliśmy:

  • na kolejnym spotkaniu zajmiemy się kofiguracją Git u osób które potrzebują pomocy
  • na kolejnym spotkaniu zajmiemy się pozyskiwaniem danych do projektów
  • nie zapominamy o tym że możemy się też spotkać "przy piwie", prezentacyjnie albo po prostu żeby pogadać, niekoniecznie zawsze warsztatowo

Zadanie domowe

  • dołączyć do kanału #project_krakow gdyż tam będą właściwe informacje na temat projektu
  • zainstalować Git i przygotować własną kopię repozytorium
  • założyć sobie konto na GitHub (kto jeszcze nie ma) i podać swój login - dopiszemy do listy współpracowników w projekcie GitHub
  • założyć w swoim lokalnym repozytorium swój własny branch a następnie katalog /personal/[tutaj Twoj nick lub imie i nazwisko] na trzymanie swoich prywatnych kawałków kodu
  • zadanie z gwiazdką - próbować scrapingu
  • polecana lektura - Jak pobierać dane "delikatnie" How to Crawl the Web Politely

2019-10-15 (#1)

Notatkę sporządził: Paweł

Cel spotkania

  • Bootstrap/Kickoff projektu krakowskiego
  • Wspólna realizacja projektu dodatkowo ma poszerzyć naszą wiedzę i praktykę w zakresie Machine Learning oraz tematami pokrewnymi. Jeśli to możliwe ma też przysłużyć się innym.

Na spotkaniu zostały przedstawione dwa proponowane projekty:

Podczas rozmowy zauważyliśmy że głosy za realizacją obu projektów rozkładają się dosyć równo (8 za Przepisami, 7 za Polityką) i że nie ma mocnej polaryzacji grupy. Zauważyliśmy też że pewne prace można wykonać niezależnie od wybranego projektu albo wręcz dla obu z nich (zbieranie danych, wstępna obróbka itd).

Poruszone kwestie:

  • warto żebyśmy zebrali możliwe cele dla każdego z projektów (zastanowili się dlaczego je robimy, jaki cel nam przyświeca) i wybrali dla każdego z projektów początkową drogę realizacji (pierwsze kroki do celu)
  • warto żeby poza spotkaniami warsztatowymi (kiedy staramy się wykonywać kolejne kroki przy realizacji projektu) były też czasem spotkania bez kodowania - bardziej luźne rozmowy, spotkanie "przy piwie"
  • w momencie kiedy trafimy na problem który będzie nam ciężko przeskoczyć, można zaprosić do pomocy eksperta z danej domeny
  • potrzebujemy wprowadzenia do języka Python (żeby usprawnić prace nad kodem i nie walczyć z językiem)
  • potrzebujemy wprowadzenia do narzędzia Git (żeby radzić sobie z repozytorium dla naszego projektu, ustalić pewne podstawowe zasady współpracy)
  • warto mieć osobny kanał Slack do komunikacji stricte w ramach projektu (więcej informacji poniżej)

Po spotkaniu wstępnie ustaliliśmy:

  • Ula utworzyła nowy kanał do komunikacji w projekcie: #project_krakow będziemy tutaj wrzucać takie informacje które mogą być przydatne w ramach projektu, fragmenty kodu źródłowego itp
  • Do kolejnego spotkania (planowanego na 30 października 2019) w ramach zadania domowego zapoznajemy się z wprowadzeniem do Pythona i narzędzi ML zawartego w dwóch filmach:
  • Także do czasu kolejnego sopotkania zastanawiamy się nad tym jaki każdy z nas widzi cel dla proponowanych przez nas projektów
  • Na spotkaniu 30 października 2019 proponowany jest następujący plan działań:
    • rozmowa o celach projektów (raczej krótka)
    • wprowadzenie do narzędzia Git
    • wprowadzenie do narzędzia Scrappy (scrapping stron internetowych) - poprowadzi Oleg, prezentacja w języku angielskim
    • praca nad kodem do pobierania danych ze stron które są interesujące w ramach naszego projektu