---
# System prepended metadata

title: POOSE 23

---

# 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
    ```
    
