Advent of Code 🎁

  • Advent of Code 🎁

    Posted by Rafał Kowalski on 2024-12-01 at 19:42

    Cześć 🙂
    Dziś pierwszy dzień adwentu – czasu oczekiwania na 🎄 Boże Narodzenie. Z tej okazji w wielu środowiskach technologicznych organizowane są tzw. “Advent of Code” 🎁, czyli codzienne wyzwania programistyczne.

    Nie ukrywam, że kiedyś brałem udział w takich wyzwaniach, rozwijając i pogłębiając swoją wiedzę z zakresu Pythona 🐍. W tym roku chciałbym do tego wrócić, ale tym razem szukam czegoś dedykowanego Data Engineerom 💾.

    Czy znacie wersje, w których można rozwiązywać krótkie zadania z zakresu przetwarzania danych w Pythonie, Pandasie, PySparku, SQL-u lub innych technologiach używanych w szeroko pojętej branży danych? 💡 Szukam wyzwań programistycznych 👨‍💻

    Marek replied 2 weeks, 6 days ago 4 Members · 15 Replies
  • 15 Replies
  • Marek

    Organizer
    2024-12-02 at 11:06
    224 Punkty

    Hej! Pomysł wydaje mi się fajny. Sam myślałem nad tym, żebyśmy w Akademii organiowali różne wyzwania, więc cieszę się, że jest potencjał :D.

    Poszukałem trochę w zewnętrznych źródłach czy jest coś związanego z inżynierią danych, ale niewiele znalazłem. Wydaje mi się, że “małe zadania” są tutaj o tyle trudne, że zwykle albo trzeba zaangażować coś większego (technologie, dane) albo też sam problem zwykle jest na tyle spory, że zajmuje dużo więcej czasu niż 1 dzień.

    Ale! Myślę, że możemy spontanicznie coś zorganizować, co Ty na to? Mogę pokminić nad zadankami i wrzucać je codziennie tu na grupę.

    Kilka spostrzeżeń i pytań:

    • Pewnie zadania byłyby w sporej mierze ze sparka – można rozwiązywać w pysparku albo w scali, javie, whatever. Ale spark jest wdzięczny, bo nie trzeba angażować serwera, a da się wykminić sporo rzeczy “lokalnie” i do logicznej rozkminy.
    • Czy zwykle zadania są powiązane, czy raczej to zbiór iluś zupełnie osobnych rzeczy?
    • Można by dawać programistyczne, ale też “architektoniczne” – np. “jak rozwiążesz architekturę do systemu który ma takie wymagania biznesowe: XXX YYY ZZZ”
    • Możemy się tu dzielić kodem;-)
    • Do sparka można wykorzystać też sporo rzeczy, które już są zawarte w “Fundamencie Sparka”, co sądzisz? Plus taki, że są sprawdzone, są już pomysły, możemy dzielić się rozwiązaniami bo to samo można napisać na kilka sposobów:-)
    • Można też stricte językowe – i do wykorzystania scala java lub python. Ciekawe jak to samo można zrobić w różnych językach;>

    Ohh, otworzyłeś puszkę pandory w moim umyśle 😀

  • Rafał Kowalski

    Member
    2024-12-02 at 11:11
    80 Punkty

    Cieszę się, że udało mi się namieszać 😉

    Skoro twierdzisz, że takie zadanka byłyby dłuższe, to może przejdźmy na system “kościelny” – tzn. jedno zadanko na tydzień — ogłoszenie w poniedziałek i czas na realizację do niedzieli.

    Rozwiązaniami możemy się dzielić wstawiając linki do repo na GH w komentarzach oraz dodać dodatkowy wątek z podpowiedziami, dyskusją na temat zadania gdyby ktoś utknął w trakcie rozwiązywania 🙂

    • Marek

      Organizer
      2024-12-02 at 11:17
      224 Punkty

      A tak też w sumie można. W sumie, bardziej myślałem o tym, że to jeden z powodów dla których nie ma takich wyzwań w data engineeringu, ale sądzę że “mniejsze” też by się dało. Ale może faktycznie przekminienie jakiegoś zestawu danych i wyciągnięcie z niego ciekawych rzeczy byłoby fajne.

      A co powiesz nad dwoma w tygodniu? Jedno stricte programistyczne i jedno architektoniczne, pozwalające na wyćwiczenie wyobraźni “z lotu ptaka”?

      • Rafał Kowalski

        Member
        2024-12-02 at 11:23
        80 Punkty

        Można prowadzić 2 kalendarze jednocześnie — programistyczny i architektoniczny.

        Co do częstotliwości to ona też nie musi być stała, a np. na końcu zadania masz rozpisany czas “Następne zadanie pojawi się za X dni”

        Tak teraz myślę, że wielką wartością byłoby gdyby cały kalendarz spinał się w całość, taki jeden “projekt”, którego rozwiązaniem można by się podzielić w internecie 🙂

        • Marek

          Organizer
          2024-12-02 at 11:29
          224 Punkty

          To byłoby ekstra, tylko trzeba byłoby przekminić już naprawdę bardzo solidnie. Ale to jest do zrobienia!

          Dajmy sobie jeszcze chwilkę, niech się inni wypowiedzą. Mamy tu kilka osób, którym niekiedy głowa kipi od pomysłów (Ej, @dczerniawko @mwasalski @datadwarf – o was mówię! I nie tylko :D) więc chętnie usłyszę ich perspektywę.

          A ja w między czasie będę sobie kminić jak zrobić cały projekt z kilku tego typu elementów. Bo to faktycznie byłoby coś meeega pro.

          • Wojtek Zdziebkowski

            Member
            2024-12-02 at 11:58
            111 Punkty

            Jak dla mnie ekstra pomysł, a właśnie też widziałem, że nie ma nic takiego związanego z data engineeringiem. Pomysł spięcia tego w jeden projekt jak najbardziej pasuje, ale nie pogardzę też małymi zadaniami. Można by zapożyczyć jakieś data sety z kaggle i do nich ułożyć jakieś zadanie. System tygodniowy wydaje się chyba najrozsądniejszy i wtedy można to kontynuować dalej niż do świąt.

            • Marek

              Organizer
              2024-12-02 at 12:01
              224 Punkty

              Panowie, a może nie spinać tego ze świętami tylko właśnie z końcem roku? Taki “Projekt: Grudzień”. Na sylwestra czy kiedyś tam, spotkamy się razem i zaprezentujemy sobie nawzajem nasze dzieła 😀

            • Rafał Kowalski

              Member
              2024-12-02 at 12:05
              80 Punkty

              Też fajny pomysł. Można potem takie coś odpalać cyklicznie nawet w dłuższym czasie, np. na kwartał…

              Po spotkaniu myślę, że można by przedstawić wybrane rozwiązania (oczywiście za zgodą twórców) np. na YT lub LI (jako promocja ABD i osoby, która taki projekt wykonała)

            • Wojtek Zdziebkowski

              Member
              2024-12-02 at 12:11
              111 Punkty

              +1 Jestem za !

            • Marek

              Organizer
              2024-12-02 at 12:59
              224 Punkty

              Oh yeah, ja też jestem za.

  • Daria Czerniawko

    Member
    2024-12-02 at 18:39
    27 Punkty

    Cześć! 🙂

    Jestem jak najbardziej za! Od samego początku rozmyślałam nad takimi wyzwaniami – dla mnie jest to jeden z lepszych sposobów na naukę.

    Zgadzam się z Wami, że lepiej to rozłożyć na dłuższe okresy.
    Pomysł na rozgraniczenie na miesiące wydaje się mieć największy sens.
    Dodatkowo możemy też poruszyć kwestie DevOpsowania, programowania itp, bo one jak najbardziej przydadzą się w DE 🙂 Można to fajnie rozłożyć tematycznie i stopniowo rozwijać różne umiejętności.

    Jeśli chodzi o zbiory danych, to faktycznie mamy ich pod dostatkiem – Kaggle, Open Data czy różne API – idealnie nadają się do takich ćwiczeń.

    Dodatkowo przygotowałam kilka propozycji wyzwań, które mogą się wpisać w taki tematyczny podział. Co myślisz o czymś takim?

    Grudzień ze Sparkiem:

    Załaduj duży plik CSV do PySparka i oblicz sumę wartości w wybranej kolumnie.
    Zaimplementuj funkcję MapReduce, aby policzyć słowa w zestawie danych tekstowych.
    Wykryj anomalie w dużych danych – rekordy odbiegające od średniej o więcej niż 3 odchylenia standardowe.
    Skonwertuj dane do formatu Parquet i sprawdź, jak zmienia się rozmiar i szybkość przetwarzania.

    Styczeń z architekturą:

    Zbuduj prosty pipeline ETL, który pobiera dane z API, przetwarza w Pythonie i ładuje do bazy danych.
    Zaimplementuj automatyczne uruchamianie przetwarzania danych w Airflow.
    Przygotuj koncepcję architektury danych dla małej aplikacji – jakie bazy, narzędzia i technologie byś użył/a?
    Porównaj różne formaty danych (JSON, Avro, Parquet) pod kątem wydajności.

    Luty z analizą danych:

    Przygotuj ranking klientów na podstawie ich zamówień w SQL-u lub Pandasie.
    Wypełnij brakujące wartości w zestawie danych (średnią, medianą lub modelem predykcyjnym).
    Przygotuj wizualizację trendów z danych sprzedażowych lub pogodowych.
    Zidentyfikuj najczęściej występujące ścieżki użytkowników w danych z logów kliknięć.

    Dajcie znać, czy coś takiego by Ci pasowało!

    Jeżeli chodzi o takie małe wyzwania, to tak jak Marek powiedział, trzeba mieć do tego duże zaplecze i nie jest to teraz do ogranięcia 🙁

    Jedynie co mogę polecić to LeetCode, HackerRank do jakiś szybkich wyzwań, ale wiadomo to nie będzie czyste DE.

    • Wojtek Zdziebkowski

      Member
      2024-12-03 at 09:25
      111 Punkty

      O Wow! Mi się bardzo podobają te przykłady, wydaje się do ogarnięcia dla kogoś kto jest gdzieś na początku, ale też do głębszego pomajstrowania dla bardziej zaawansowanych.

    • Marek

      Organizer
      2024-12-03 at 09:57
      224 Punkty

      Myśleliśmy, żeby uwinąć się z takim wyzwaniem w grudniu – do sylwestra, a na nowy rok się spotkać i pokazać co tam wyszło. Co sądzisz? 😀

      Myślę o takim czymś, żeby wykminić jeden prosty projekt, do zrobienia ze sparkiem głównie, na swojej maszynie. I podzielić projekt na części. I co kilka dni nowe zadanie, które buduje kolejny element projektu. Ale myślę też, że fajnie, gdyby dało się je zrobić w izolacji – jeśli gdzieś czegoś nie zrobiłeś/aś, i tak da się wykonać zadanie.

      I albo w wątku albo w postach, prezentowalibyśmy nasze repo.

      Dodatkowy element – możemy dołączyć nasze code review. Każde z nas mogłoby załączyć merge request i dać do przejrzenia reszcie.

      Sam chciałbym wziąć udział :D. Nie wiem czy wszystkie zadania będę implementował, bo czekam na release mojego najmłodszego projektu – Czarusia – do rodziny :D. I lada dzień już może się to wydarzyć;-). Ale co do zasady, chętnie pokodzę.

      Jeszcze myślę, żeby kolejne zadania ogłaszać też na zewnątrz, ale przegadać, robić CR itd. już na Akademii:-)

      • Daria Czerniawko

        Member
        2024-12-05 at 16:20
        27 Punkty

        Ogromne gratulacje!

        Nic dodać, nic ująć!
        Działajmy! 😊

        • Marek

          Organizer
          2024-12-05 at 17:36
          224 Punkty

          Już niebawem! Bądź czujna 😎

Zaloguj się aby odpowiedzieć