# POOSE 23
## OrgaDinge
## Todo
### Phase Alpha:
- [x] Bestehende REST Schnittstellen dokumentieren und vervollständigen
- [x] Service Unit Tests 2/3
- [x] **Stage 1** (im wesentlichen keine REST API Tests)
- [x] Projekt bauen
- [x] Unittests für Komponenten des Subservice *Pipeline* definieren und implementieren; **Hinweis:** **für einzelne Komponenten existieren bereits einige
- [x] Docker Image pro Subdienst baut
- [x] **Stage 2** (viele REST API Tests für Subservices)
- [x] Subdienstspeziefische Unittests definieren und implementieren; **Hinweis:** für Subservice *Pipeline* existieren bereits einige
- [ ] Ensemblemodul vervollständigen (Teil des Subservice *Pipeline*)
### Phase Beta:
- [x] Subdienst Interaktive Webpipeline hinzufügen (Planung hier, Implementierung evtl mit in Phase Gamma)
- [ ] Erste Schritte der interaktiven Webpipeline sollen (nichtinteraktive) Statistiken erzeugen.
- [ ] Daten laden: Deskriptive Statistiken (mind. Min, Max, Median, Varianz, Boxplot, Violinplot, Dichtefunktion (geglättet))
- [ ] Feature Extraction: 2D Plot von Feature1/Feature2 (inkl. korrekter Beschriftung)
- [ ] Eventuell:
- [ ] Scatterplot nach Feature Extraktion (PCA, TSNE, NCA) ([3D Plot](https://plotly.com/python/3d-scatter-plots/))
- [ ] Weitere Schritte sollen mind. geplant werden
- [ ] Subdienst Statistik hinzufügen
- [ ] Auswahl von zu betrachtenden Daten
- Auf Basis von Generator
- Optimal: Auf Basis von mehreren Filtern (s. ["Dataset Filters"](https://shapash-demo.ossbymaif.fr/) in diesem Beispiel)
- [ ] [Scatterplot](https://plotly.com/python/line-and-scatter/) x: Nutzerdefinierte Statistik a, y: Nutzerdefinierte Statistik b, Farbe: Nutzerdefinierte Statistik/Kategorie c (z.b. MCC oder Label), Shape: Nutzerdefinierte Kategorie d (z.B. welcher Filter wurde verwendet)
- [ ] Optimal: Klassenhistogram auf Basis von vom Nutzer gewählten Bereichen im Scatterplot
- [ ] [Parallel Coordinates Plot](https://plotly.com/python/parallel-coordinates-plot/) welcher MCC in Abhängigkeit von gewählten Pipeline Parametern darstellt (z.b. gewähltes Filterverfahren, Epochenzahl + Lernrate vom MLP)
- [ ] Korrelation gewählter Hyperparameter und MCC, Precision, Recall
- [ ] Wir speichern unter anderem die Laufzeit, die sinnvoll visualisiert werden sollte
- [ ] Eventuell: Für Machine Learning Verfahren für welche wir schrittweise Statistiken während des Trainings berechnen: Lineplot mit Schritt auf der x-Achse und nutzergewählte Statistik (z.b. Genauigkeit auf der y-Achse)
- [ ] Confusion Matrix für nutzergewählten Job
- [ ] Service Unit Tests 3/3
- [ ] Stage 3 (Zusammenspiel der Subservices unittesten, d.h. FATDATA als Dienst unittesten)
## Fragen
- Ist es gewollt, dass man im ingest Projekt keine Issues erstellen kann?
- Nein, und sollte inzwischen behoben sein
## Probleme
- [x] **Behoben** || **Mac (Doch nicht nur Mac) spezifischer Fehler mit dem Ingest Server:**
Das Problem sind die **.DS_Store** Dateien, die von MacOS automatisch erstellt werden. In ingest.py->build_session_registry wird diese beim Start des Services automatisch in eine Session-Datei umbenannt.
Nach dem Einfügen dieser paar Zeilen funktioniert alles :)
```python
if file.startswith("."):
print("Deleting hidden file: " + file)
os.remove(file_path)
continue
```
```bash
ERROR: Traceback (most recent call last):
general-ingest-1 | File "/ingest/./ingest.py", line 656, in init
general-ingest-1 | build_session_registry(settings.session_directory)
general-ingest-1 | File "/ingest/./ingest.py", line 377, in build_session_registry
general-ingest-1 | if file_name in g_uuid_registry else None, 'session': json.load(open(os.path.join(settings.session_directory, file_name), 'r'))})
general-ingest-1 | File "/usr/lib/python3.10/json/__init__.py", line 293, in load
general-ingest-1 | return loads(fp.read(),
general-ingest-1 | File "/usr/lib/python3.10/codecs.py", line 322, in decode
general-ingest-1 | (result, consumed) = self._buffer_decode(data, self.errors, final)
general-ingest-1 | UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 3131: invalid start byte
```