====== Wprowadzanie do Data Mining ======
Laboratorium w semestrze letnim 2021/22 odbywa się we wtorki w godz. 13-15 w Pk1 WFAiIS.
Strona kursu w Moodle: https://moodle.umk.pl/WFAIIS/course/view.php?id=40
===== Zaliczenie zajęć =====
Zaliczenie zajęć odbywa się na podstawie rozwiązań zadań z laboratoriów. \\
Rozwiązania, w postaci notatników Jupyter (pliki *.ipynb), należy terminowo deponować na stronie [[https://moodle.umk.pl/WFAIIS/course/view.php?id=40|kursu w Moodle]]. \\
W celu uzyskania zaliczenia należy rozwiązać min. 50% zadań.
**Rozwiązanie muszą być wykonane samodzielnie. Nie jest dozwolone udostępnianie rozwiązań innym osobom**
===== Literatura =====
* Robert Layton, //Learning Data Mining with Python//, 2015 (2017 wydanie 2) - dostęp on-line z biblioteki z sieci UMK
* Pang-Ning Tan, Michael Steinbach, Anuj Karpatne, //Introduction to Data Mining (Second Edition)//, {{https://www-users.cs.umn.edu/~kumar001/dmbook/index.php|WWW}}
===== Plan =====
- Przegląd metod Data Mining
- Nie za długi wstęp do python, jupyter, numpy, pandas, matlibplot, scikit-learn, seaborn
- Analiza statystyczna danych, wizualizacja danych
* preprocessing: wykrywanie anomalii, braki w danych, dane odstające
- Regresja
* Liniowa oraz wielomianowa
* problem przeuczenia: underfitting/overfitting
- Klasyfikacja i ocena klasyfikatorów
* regresja logistyczna
* kNN
* drzewa decyzyjne
* SVM
* walidacja krzyżowa (cross validation)
- Analiza skupień
* k-means
* metody hierarchiczne, dendrogramy
* DBSCAN
- Text mining
* worek słów (BOW)
- Przetwarzanie obrazów
* PCA do kodowania obrazów
- Analiza szeregów czasowych (?)
===== Środowisko pracy =====
Zajęcia realizowane są w języku Python z wykorzystaniem notatników Jupyter.
W celu realizacji zadań można zainstalować na swoim komputerze środowisko programistyczne lub skorzystać z usług sieciowych umożliwiających edycję i uruchamianie notatników (Google Colab). Python oraz jupyter-notebook dostępne są również na serwerze studenckim ''polon7.fizyka.umk.pl''
==== Google Colab lub Binder (zalecane) ====
* [[https://colab.research.google.com/|Google Colab]]
* dostęp do GPU
* wymagane konto Google
* zmienione notatniki można zapisać na Dysku Google
* sesja aktywna dopóki jest otworzona w przeglądarce (max. 12h.)
* [[https://mybinder.org/|MyBinder]]
* tylko CPU, min. 1GB RAM
* nie wymaga autoryzacji
* brak możliwości zachowania zmian pomiędzy sesjami
* sesja do 6 h., przerywana gdy brak aktywności przez 10 min
==== Lokalnie na własnym sprzęcie ====
Notatniki z zajęć można uruchamiać lokalnie na własnych komputerach. Należy w tym celu skonfigurować środowisko Python i Jupyter Notebook lub JupyterLab
Wygodnie w tym celu użyć gotowej dystrybucji [[https://www.anaconda.com/products/individual|Anaconda]], która zawiera Pythona, Jupyter oraz wiele przydatnych pakietów.
* [[https://jupyter.readthedocs.io/en/latest/install/notebook-classic.html|Installing the classic Jupyter Notebook interface]]
* [[https://jupyterlab.readthedocs.io/en/stable/|JupyterLab]]
==== Serwery wydziałowe ====
Notatniki można również uruchamiać korzystając z serwera ''polon7'' dostępnego w sieci lokalnej WFAiIS.
Dostęp z zewnątrz sieci LAN wymaga aktualnego certyfikatu OpenVPN.
Pracę można wówczas wykonywać w środowisku graficznym po zalogowaniu za pomocą VNC.
Istnieje też możliwość przekierowania komunikacji z usługi ''jupyter'' uruchomionej na serwerze ''polon7'' poprzez tunel połączenia ''ssh'' tak aby notatnik obsługiwany był na lokalnej maszynie.
**Workflow 1: polon7 + VNC**
Uruchomienie serwera VNC na ''polon7''
- logujemy się do terminala serwera ''polon7'' za pomocą ''ssh''
- uruchamiamy serwer ''vncserver'' (przy pierwszym uruchomieniu ustalamy hasło do pulpitu) \\ $ vncserver
- zapamiętujemy podany adres i numer pulpitu. Adres powinien być postaci ''polon7.fizyka.umk.pl:3''
Uruchomienie notatników na pulpicie VNC
- za pomocą klienta VNC (np. ''vncviewer'') logujemy się do sesji w trybie graficznym używając adresu uzyskanego przy uruchamianiu serwera VNC (np. ''polon7.fizyka.umk.pl:3'') oraz ustawionego wówczas hasła
- pobieramy repozytorium git \\ $ git clone https://github.com/IS-UMK/WDM_2022/
- przechodzimy do katalogu z notatnikami i uruchamiamy usługę jupiter \\ $ jupyter-notebook
**Workflow 2: polon7 + przekierowanie usługi przez ssh**
Procedura przekierowania usługi jupyter z użyciem Putty: [[https://thedatafrog.com/en/articles/remote-jupyter-notebooks/|Remote jupyter notebooks with ssh port forwarding]]
- logujemy się za pomocą ''ssh'' do serwera ''polon7'' z przekierowaniem portu \\ $ ssh -L 8888:localhost:8888 user@polon7.fizyka.umk.pl
- klonujemy repozytorium \\ $ git clone https://github.com/IS-UMK/WDM_2022/
- z katalogu repozytorium uruchamiamy usługę hostującą notatniki bez otwierania przeglądarki \\ $ jupyter-notebook --no-browser --port 8888
Domyślnie notatnik uruchamia się na porcie 8888. W przypadku, gdy port ten jest zajęty należy wybrać inny, pamiętając o odpowiedniej modyfikacji opcji ''-L'' wcześniejszego polecenia ''ssh'' (''-L port:localhost:8888''')
- na lokalnym komputerze w przeglądarce przechodzimy pod adres [[http://localhost:8888]]
===== Laboratoria (notatniki) =====
{{page>zajecia:wdm:sidebar&noheader&nofooter}}
===== Kilka przydatnych odnośników =====
* [[https://www.python.org/|Python]] is a programming language that lets you work quickly and integrate systems more effectively
* [[https://www.learnpython.org/pl/|www.learnpython.org]]
* [[https://jupyter.org/|jupyter]] The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text.
* [[https://www.dataquest.io/blog/jupyter-notebook-tutorial/|Jupyter Notebook for Beginners: A Tutorial]]
* [[https://numpy.org/|NumPy]] NumPy is the fundamental package for scientific computing with Python
* [[https://numpy.org/devdocs/user/quickstart.html|NumPy tutorial]]
* [[https://pandas.pydata.org/|Pandas]] is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool
* [[https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html|10 minutes to pandas]]
* [[https://realpython.com/pandas-python-explore-dataset/#using-the-pandas-python-library|Using Pandas and Python to Explore Your Dataset]] by Reka Horvath
* [[https://scikit-learn.org/stable/|scikit-learn]] Simple and efficient tools for predictive data analysis
* [[https://matplotlib.org/|matplotlib]] comprehensive library for creating static, animated, and interactive visualizations in Python.
* [[https://github.com/rougier/matplotlib-tutorial|Matplotlib tutorial for beginner]] by Nicolas P. Rougier
* [[https://seaborn.pydata.org/|seaborn]]: statistical data visualization
* [[https://www.datacamp.com/community/tutorials/seaborn-python-tutorial|Python Seaborn Tutorial For Beginners]] by Karlijn Willems
* [[https://jakevdp.github.io/PythonDataScienceHandbook/04.14-visualization-with-seaborn.html|Visualization with Seaborn]] from Python Data Science Handbook by Jake VanderPlas