orangeplsda 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- orangeplsda-0.1.0/PKG-INFO +304 -0
- orangeplsda-0.1.0/README.md +278 -0
- orangeplsda-0.1.0/orangeplsda/__init__.py +10 -0
- orangeplsda-0.1.0/orangeplsda/oplsda_learner.py +324 -0
- orangeplsda-0.1.0/orangeplsda/plsda_learner.py +120 -0
- orangeplsda-0.1.0/orangeplsda/widgets/__init__.py +8 -0
- orangeplsda-0.1.0/orangeplsda/widgets/icons/OPLSDA.svg +11 -0
- orangeplsda-0.1.0/orangeplsda/widgets/icons/PLSDA.svg +11 -0
- orangeplsda-0.1.0/orangeplsda/widgets/owoplsda.py +313 -0
- orangeplsda-0.1.0/orangeplsda/widgets/owplsda.py +192 -0
- orangeplsda-0.1.0/orangeplsda.egg-info/PKG-INFO +304 -0
- orangeplsda-0.1.0/orangeplsda.egg-info/SOURCES.txt +16 -0
- orangeplsda-0.1.0/orangeplsda.egg-info/dependency_links.txt +1 -0
- orangeplsda-0.1.0/orangeplsda.egg-info/entry_points.txt +2 -0
- orangeplsda-0.1.0/orangeplsda.egg-info/requires.txt +3 -0
- orangeplsda-0.1.0/orangeplsda.egg-info/top_level.txt +1 -0
- orangeplsda-0.1.0/setup.cfg +4 -0
- orangeplsda-0.1.0/setup.py +42 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: orangeplsda
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: PLS-DA & OPLS-DA with S-Plot — classification, biomarker discovery, and orthogonal signal correction for Orange3
|
|
5
|
+
Author: Philipp Weller
|
|
6
|
+
Author-email: philipp.weller@googlemail.com
|
|
7
|
+
Project-URL: Source, https://github.com/philippweller/WellerLab/tree/main/orange-plsda-addon
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/philippweller/WellerLab/issues
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
Requires-Dist: Orange3>=3.40.0
|
|
16
|
+
Requires-Dist: numpy
|
|
17
|
+
Requires-Dist: scikit-learn
|
|
18
|
+
Dynamic: author
|
|
19
|
+
Dynamic: author-email
|
|
20
|
+
Dynamic: classifier
|
|
21
|
+
Dynamic: description
|
|
22
|
+
Dynamic: description-content-type
|
|
23
|
+
Dynamic: project-url
|
|
24
|
+
Dynamic: requires-dist
|
|
25
|
+
Dynamic: summary
|
|
26
|
+
|
|
27
|
+
# orange-plsda-addon
|
|
28
|
+
|
|
29
|
+
PLS-DA & OPLS-DA für **Orange3** — Leistungsstarke Klassifikations-Widgets für
|
|
30
|
+
die multivariate Analyse (Chemometrie, Biomarker-Findung).
|
|
31
|
+
|
|
32
|
+
- **PLS-DA** (Partial Least Squares Discriminant Analysis) — Klassifikation
|
|
33
|
+
mittels `PLSRegression` mit One-hot-kodiertem Ziel
|
|
34
|
+
- **OPLS-DA** (Orthogonal PLS-DA, Trygg & Wold 2002) — trennt prädiktive von
|
|
35
|
+
orthogonaler (klassen-unabhängiger) Variation
|
|
36
|
+
|
|
37
|
+
Beide Widgets erscheinen in Orange unter der Kategorie **PLS-DA**, direkt
|
|
38
|
+
neben dem eingebauten PLS-R.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## ⚡ Automatischer Installer (empfohlen)
|
|
43
|
+
|
|
44
|
+
Dieses Paket ist Teil des **WellerLab**-Monorepos
|
|
45
|
+
(`github.com/philippweller/WellerLab`). Der gemeinsame Installer
|
|
46
|
+
`orange-install.py` (auf Repo-Ebene) findet **Oranges eigenes Python**
|
|
47
|
+
automatisch und installiert das Paket korrekt (macOS / Windows / Linux). Kein
|
|
48
|
+
manuelles Pfad-Raten mehr:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# PLS-DA installieren:
|
|
52
|
+
python orange-install.py plsda
|
|
53
|
+
|
|
54
|
+
# NMR-Add-on installieren:
|
|
55
|
+
python orange-install.py nmr
|
|
56
|
+
|
|
57
|
+
# nur zeigen, welches Python erkannt wurde:
|
|
58
|
+
python orange-install.py --show
|
|
59
|
+
|
|
60
|
+
# bestehende Installation prüfen:
|
|
61
|
+
python orange-install.py --check plsda
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Läuft mit **jedem** Python (nur Standardbibliothek). Klappt die
|
|
65
|
+
Auto-Erkennung ausnahmsweise nicht:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
python orange-install.py --python /pfad/zum/orange/python
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
> ▶️ **Direkt ausführen ohne Clone** (das Add-on wird trotzdem via GitHub
|
|
72
|
+
> installiert):
|
|
73
|
+
> ```bash
|
|
74
|
+
> curl -fsSL https://raw.githubusercontent.com/philippweller/WellerLab/main/orange-install.py -o orange-install.py && python3 orange-install.py plsda
|
|
75
|
+
> ```
|
|
76
|
+
|
|
77
|
+
Das Tool bedient auch den **Windows-`--no-user`-Fall** automatisch, sodass
|
|
78
|
+
das Add-on in Oranges eigene `site-packages` landet statt in die unsichtbare
|
|
79
|
+
User-Site.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 📋 Voraussetzungen
|
|
84
|
+
|
|
85
|
+
| Voraussetzung | Hinweis |
|
|
86
|
+
|---|---|
|
|
87
|
+
| Orange3 ≥ 3.40 installiert | Unter **Hilfe → Über** die Version prüfen |
|
|
88
|
+
| Internet-Zugriff auf GitHub | zum Herunterladen des Repos |
|
|
89
|
+
|
|
90
|
+
> ⚠️ **Wichtig:** Es muss immer **Oranges eigenes Python** verwendet werden,
|
|
91
|
+
> nicht `/usr/bin/python3`! Sonst wird das Add-on in der falschen Python-Umgebung
|
|
92
|
+
> installiert und Orange findet es nicht.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 🔍 Oranges eingebettetes Python finden (wichtig!)
|
|
97
|
+
|
|
98
|
+
Der Pfad zu Oranges Python **hängt von der Orange-Version ab**. Je nachdem
|
|
99
|
+
ob Orange mit Python 3.11 oder 3.12 gebaut wurde, heißt das Binary
|
|
100
|
+
`python3`, `python3.11` oder `python3.12`.
|
|
101
|
+
|
|
102
|
+
**Sichere Methode — das echte Python-Binary lokalisieren:**
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
ls /Applications/Orange.app/Contents/Frameworks/Python.framework/Versions/
|
|
106
|
+
# zeigt z.B.: 3.12 und Current -> 3.12
|
|
107
|
+
|
|
108
|
+
# Dann das echte Binary finden:
|
|
109
|
+
find /Applications/Orange.app -name "python3*" -type f 2>/dev/null | grep -i bin
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Typische gültige Pfade (je nach Version):
|
|
113
|
+
|
|
114
|
+
| Orange mit | Python-Binary |
|
|
115
|
+
|---|---|
|
|
116
|
+
| Python 3.11 | `.../Versions/Current/bin/python3` |
|
|
117
|
+
| Python 3.11 (nur versioniert) | `.../Versions/Current/bin/python3.11` |
|
|
118
|
+
| Python 3.12 | `.../Versions/Current/bin/python3.12` |
|
|
119
|
+
| Intel-Mac mit 3.12 | `.../Versions/Current/bin/python3.12-intel64` |
|
|
120
|
+
|
|
121
|
+
> `Current` ist ein Symlink zur installierten Version (`Current -> 3.12`),
|
|
122
|
+
> funktioniert also in allen Fällen. Ersetze in den Befehlen unten
|
|
123
|
+
> `ORANGEPY` durch **den** gefundenen Pfad.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 🚀 Installation (Schritt für Schritt)
|
|
128
|
+
|
|
129
|
+
### macOS (Orange.app als `.app` installiert)
|
|
130
|
+
|
|
131
|
+
**Schritt 1 — Oranges eingebettetes Python prüfen:**
|
|
132
|
+
|
|
133
|
+
Öffne einen Terminal und führe aus (nutze den Pfad aus dem Abschnitt
|
|
134
|
+
[Oranges eingebettetes Python finden](#-oranges-eingebettetes-python-finden-wichtig);
|
|
135
|
+
je nach Orange-Version heißt das Binary `python3`, `python3.11` oder `python3.12`):
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
/Applications/Orange.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3.12 --version
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Es sollte eine Python-3.x-Version ausgeben. Notiere dir diesen Pfad — er wird
|
|
142
|
+
in den nächsten Schritten gebraucht (im Folgenden abgekürzt als `ORANGEPY`).
|
|
143
|
+
|
|
144
|
+
**Schritt 2 — Add-on von GitHub installieren:**
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
ORANGEPY=/Applications/Orange.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3.12
|
|
148
|
+
$ORANGEPY -m pip install git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Schritt 3 — Installation prüfen (optional, empfohlen):**
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
$ORANGEPY -c "from orangeplsda import PLSDALearner; print('OK')"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Wenn `OK` erscheint, ist das Paket korrekt installiert.
|
|
158
|
+
|
|
159
|
+
**Schritt 4 — In Orange öffnen:**
|
|
160
|
+
|
|
161
|
+
Orange starten. Die Widgets **PLS-DA** und **OPLS-DA** erscheinen in der
|
|
162
|
+
Widget-Leiste unter **PLS-DA**. Du musst Orange nicht neu starten — es reicht,
|
|
163
|
+
das Canvas-Fenster erneut zu öffnen.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
### Windows (Orange über den "Orange Command Prompt")
|
|
168
|
+
|
|
169
|
+
**Schritt 1 — Orange Command Prompt öffnen:**
|
|
170
|
+
|
|
171
|
+
Startmenü → *Orange* → *Orange Command Prompt* (bzw. *Qt Console*).
|
|
172
|
+
|
|
173
|
+
**Schritt 2 — Installieren:**
|
|
174
|
+
|
|
175
|
+
```cmd
|
|
176
|
+
python -m pip install git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Schritt 3 — Prüfen:**
|
|
180
|
+
|
|
181
|
+
```cmd
|
|
182
|
+
python -c "from orangeplsda import PLSDALearner; print('OK')"
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Schritt 4 — Orange öffnen** und unter **PLS-DA** nachschauen.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### Linux / Conda / Venv
|
|
190
|
+
|
|
191
|
+
**Schritt 1 — Umgebung aktivieren:**
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
conda activate orange # oder: source .venv/bin/activate
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Schritt 2 — Installieren:**
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
pip install git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Schritt 3 — Prüfen:**
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
python -c "from orangeplsda import PLSDALearner; print('OK')"
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Schritt 4 — Orange starten** und das Widget suchen.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 🔄 Updates einspielen (bei neuen Versionen)
|
|
214
|
+
|
|
215
|
+
Auf **jedem** Rechner, auf dem das Add-on installiert ist:
|
|
216
|
+
|
|
217
|
+
**Schritt 1 — aktuelle Version installieren (Überschreibt die alte):**
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# macOS
|
|
221
|
+
$ORANGEPY -m pip install --upgrade --force-reinstall git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
# Windows / Linux / Conda
|
|
226
|
+
python -m pip install --upgrade --force-reinstall git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Schritt 2 — Orange neu starten**, damit die neuen Widget-Versionen geladen werden.
|
|
230
|
+
|
|
231
|
+
> Hinweis: `--force-reinstall` wird empfohlen, da Orange die Widgets beim
|
|
232
|
+
> Canvas-Öffnen zwischenspeichert.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 🗑️ Deinstallation
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# macOS
|
|
240
|
+
$ORANGEPY -m pip uninstall orangeplsda -y
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# Windows / Linux / Conda
|
|
245
|
+
python -m pip uninstall orangeplsda -y
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Danach Orange neu starten — die Widgets sind verschwunden.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## 🧪 Kurzer Funktionstest (Entwickler)
|
|
253
|
+
|
|
254
|
+
Mit Oranges Python auf einem der mitgelieferten Datensätze:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
python -c "
|
|
258
|
+
from Orange.data import Table
|
|
259
|
+
from Orange.base import Model
|
|
260
|
+
from orangeplsda import PLSDALearner
|
|
261
|
+
from orangeplsda.oplsda_learner import OPLSDALearner
|
|
262
|
+
for L, kw in [(PLSDALearner, dict(n_components=2)),
|
|
263
|
+
(OPLSDALearner, dict(n_components=1, n_ortho=1))]:
|
|
264
|
+
t = Table('iris'); m = L(**kw)(t)
|
|
265
|
+
p, pr = m(t, ret=Model.ValueProbs)
|
|
266
|
+
print(L.__name__, round(float((p == t.Y.flatten()).mean()), 3), pr.shape)
|
|
267
|
+
"
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Erwartete Ausgabe (beispielhaft, kann leicht abweichen):
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
PLSDALearner 0.813 (150, 3)
|
|
274
|
+
OPLSDALearner 0.8 (150, 3)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 🛠️ Fehlerbehebung
|
|
280
|
+
|
|
281
|
+
| Problem | Lösung |
|
|
282
|
+
|---|---|
|
|
283
|
+
| "`python3` ist nicht vorhanden" / Datei nicht gefunden | Das Binary heißt je nach Orange-Version `python3`, `python3.11` oder `python3.12` (z.B. Orange mit Python 3.12). Mit `find /Applications/Orange.app -name "python3*" -type f` den echten Namen ermitteln. |
|
|
284
|
+
| `from orangeplsda import ...` schlägt fehl | Du hast `/usr/bin/python3` statt Oranges Python benutzt. Siehe Schritt 1 oben. |
|
|
285
|
+
| Widget erscheint nicht in Orange | Gelöschte `*.egg-info`/`__pycache__` prüfen; Orange vollständig neu starten; `pip show orangeplsda` ausführen. |
|
|
286
|
+
| `Host key verification failed` beim pip install | Läuft nur bei einem gepushten SSH-Workflow, nicht bei `git+https://`. Nutze die https-URL. |
|
|
287
|
+
| alte Version bleibt | `pip install --force-reinstall` verwenden (siehe Updates). |
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## 📦 Entwicklung / Repo lokal ausprobieren
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
git clone git@github.com:philippweller/orange-plsda-addon.git
|
|
295
|
+
cd orange-plsda-addon
|
|
296
|
+
# Editable-Install mit Oranges Python:
|
|
297
|
+
$ORANGEPY -m pip install -e .
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 📄 Lizenz
|
|
303
|
+
|
|
304
|
+
MIT © Philipp Weller
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# orange-plsda-addon
|
|
2
|
+
|
|
3
|
+
PLS-DA & OPLS-DA für **Orange3** — Leistungsstarke Klassifikations-Widgets für
|
|
4
|
+
die multivariate Analyse (Chemometrie, Biomarker-Findung).
|
|
5
|
+
|
|
6
|
+
- **PLS-DA** (Partial Least Squares Discriminant Analysis) — Klassifikation
|
|
7
|
+
mittels `PLSRegression` mit One-hot-kodiertem Ziel
|
|
8
|
+
- **OPLS-DA** (Orthogonal PLS-DA, Trygg & Wold 2002) — trennt prädiktive von
|
|
9
|
+
orthogonaler (klassen-unabhängiger) Variation
|
|
10
|
+
|
|
11
|
+
Beide Widgets erscheinen in Orange unter der Kategorie **PLS-DA**, direkt
|
|
12
|
+
neben dem eingebauten PLS-R.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## ⚡ Automatischer Installer (empfohlen)
|
|
17
|
+
|
|
18
|
+
Dieses Paket ist Teil des **WellerLab**-Monorepos
|
|
19
|
+
(`github.com/philippweller/WellerLab`). Der gemeinsame Installer
|
|
20
|
+
`orange-install.py` (auf Repo-Ebene) findet **Oranges eigenes Python**
|
|
21
|
+
automatisch und installiert das Paket korrekt (macOS / Windows / Linux). Kein
|
|
22
|
+
manuelles Pfad-Raten mehr:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# PLS-DA installieren:
|
|
26
|
+
python orange-install.py plsda
|
|
27
|
+
|
|
28
|
+
# NMR-Add-on installieren:
|
|
29
|
+
python orange-install.py nmr
|
|
30
|
+
|
|
31
|
+
# nur zeigen, welches Python erkannt wurde:
|
|
32
|
+
python orange-install.py --show
|
|
33
|
+
|
|
34
|
+
# bestehende Installation prüfen:
|
|
35
|
+
python orange-install.py --check plsda
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Läuft mit **jedem** Python (nur Standardbibliothek). Klappt die
|
|
39
|
+
Auto-Erkennung ausnahmsweise nicht:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
python orange-install.py --python /pfad/zum/orange/python
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
> ▶️ **Direkt ausführen ohne Clone** (das Add-on wird trotzdem via GitHub
|
|
46
|
+
> installiert):
|
|
47
|
+
> ```bash
|
|
48
|
+
> curl -fsSL https://raw.githubusercontent.com/philippweller/WellerLab/main/orange-install.py -o orange-install.py && python3 orange-install.py plsda
|
|
49
|
+
> ```
|
|
50
|
+
|
|
51
|
+
Das Tool bedient auch den **Windows-`--no-user`-Fall** automatisch, sodass
|
|
52
|
+
das Add-on in Oranges eigene `site-packages` landet statt in die unsichtbare
|
|
53
|
+
User-Site.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 📋 Voraussetzungen
|
|
58
|
+
|
|
59
|
+
| Voraussetzung | Hinweis |
|
|
60
|
+
|---|---|
|
|
61
|
+
| Orange3 ≥ 3.40 installiert | Unter **Hilfe → Über** die Version prüfen |
|
|
62
|
+
| Internet-Zugriff auf GitHub | zum Herunterladen des Repos |
|
|
63
|
+
|
|
64
|
+
> ⚠️ **Wichtig:** Es muss immer **Oranges eigenes Python** verwendet werden,
|
|
65
|
+
> nicht `/usr/bin/python3`! Sonst wird das Add-on in der falschen Python-Umgebung
|
|
66
|
+
> installiert und Orange findet es nicht.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 🔍 Oranges eingebettetes Python finden (wichtig!)
|
|
71
|
+
|
|
72
|
+
Der Pfad zu Oranges Python **hängt von der Orange-Version ab**. Je nachdem
|
|
73
|
+
ob Orange mit Python 3.11 oder 3.12 gebaut wurde, heißt das Binary
|
|
74
|
+
`python3`, `python3.11` oder `python3.12`.
|
|
75
|
+
|
|
76
|
+
**Sichere Methode — das echte Python-Binary lokalisieren:**
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
ls /Applications/Orange.app/Contents/Frameworks/Python.framework/Versions/
|
|
80
|
+
# zeigt z.B.: 3.12 und Current -> 3.12
|
|
81
|
+
|
|
82
|
+
# Dann das echte Binary finden:
|
|
83
|
+
find /Applications/Orange.app -name "python3*" -type f 2>/dev/null | grep -i bin
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Typische gültige Pfade (je nach Version):
|
|
87
|
+
|
|
88
|
+
| Orange mit | Python-Binary |
|
|
89
|
+
|---|---|
|
|
90
|
+
| Python 3.11 | `.../Versions/Current/bin/python3` |
|
|
91
|
+
| Python 3.11 (nur versioniert) | `.../Versions/Current/bin/python3.11` |
|
|
92
|
+
| Python 3.12 | `.../Versions/Current/bin/python3.12` |
|
|
93
|
+
| Intel-Mac mit 3.12 | `.../Versions/Current/bin/python3.12-intel64` |
|
|
94
|
+
|
|
95
|
+
> `Current` ist ein Symlink zur installierten Version (`Current -> 3.12`),
|
|
96
|
+
> funktioniert also in allen Fällen. Ersetze in den Befehlen unten
|
|
97
|
+
> `ORANGEPY` durch **den** gefundenen Pfad.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 🚀 Installation (Schritt für Schritt)
|
|
102
|
+
|
|
103
|
+
### macOS (Orange.app als `.app` installiert)
|
|
104
|
+
|
|
105
|
+
**Schritt 1 — Oranges eingebettetes Python prüfen:**
|
|
106
|
+
|
|
107
|
+
Öffne einen Terminal und führe aus (nutze den Pfad aus dem Abschnitt
|
|
108
|
+
[Oranges eingebettetes Python finden](#-oranges-eingebettetes-python-finden-wichtig);
|
|
109
|
+
je nach Orange-Version heißt das Binary `python3`, `python3.11` oder `python3.12`):
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
/Applications/Orange.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3.12 --version
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Es sollte eine Python-3.x-Version ausgeben. Notiere dir diesen Pfad — er wird
|
|
116
|
+
in den nächsten Schritten gebraucht (im Folgenden abgekürzt als `ORANGEPY`).
|
|
117
|
+
|
|
118
|
+
**Schritt 2 — Add-on von GitHub installieren:**
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
ORANGEPY=/Applications/Orange.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3.12
|
|
122
|
+
$ORANGEPY -m pip install git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Schritt 3 — Installation prüfen (optional, empfohlen):**
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
$ORANGEPY -c "from orangeplsda import PLSDALearner; print('OK')"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Wenn `OK` erscheint, ist das Paket korrekt installiert.
|
|
132
|
+
|
|
133
|
+
**Schritt 4 — In Orange öffnen:**
|
|
134
|
+
|
|
135
|
+
Orange starten. Die Widgets **PLS-DA** und **OPLS-DA** erscheinen in der
|
|
136
|
+
Widget-Leiste unter **PLS-DA**. Du musst Orange nicht neu starten — es reicht,
|
|
137
|
+
das Canvas-Fenster erneut zu öffnen.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### Windows (Orange über den "Orange Command Prompt")
|
|
142
|
+
|
|
143
|
+
**Schritt 1 — Orange Command Prompt öffnen:**
|
|
144
|
+
|
|
145
|
+
Startmenü → *Orange* → *Orange Command Prompt* (bzw. *Qt Console*).
|
|
146
|
+
|
|
147
|
+
**Schritt 2 — Installieren:**
|
|
148
|
+
|
|
149
|
+
```cmd
|
|
150
|
+
python -m pip install git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Schritt 3 — Prüfen:**
|
|
154
|
+
|
|
155
|
+
```cmd
|
|
156
|
+
python -c "from orangeplsda import PLSDALearner; print('OK')"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Schritt 4 — Orange öffnen** und unter **PLS-DA** nachschauen.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### Linux / Conda / Venv
|
|
164
|
+
|
|
165
|
+
**Schritt 1 — Umgebung aktivieren:**
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
conda activate orange # oder: source .venv/bin/activate
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Schritt 2 — Installieren:**
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
pip install git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Schritt 3 — Prüfen:**
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
python -c "from orangeplsda import PLSDALearner; print('OK')"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Schritt 4 — Orange starten** und das Widget suchen.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 🔄 Updates einspielen (bei neuen Versionen)
|
|
188
|
+
|
|
189
|
+
Auf **jedem** Rechner, auf dem das Add-on installiert ist:
|
|
190
|
+
|
|
191
|
+
**Schritt 1 — aktuelle Version installieren (Überschreibt die alte):**
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
# macOS
|
|
195
|
+
$ORANGEPY -m pip install --upgrade --force-reinstall git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Windows / Linux / Conda
|
|
200
|
+
python -m pip install --upgrade --force-reinstall git+https://github.com/philippweller/WellerLab.git@main#subdirectory=orange-plsda-addon
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Schritt 2 — Orange neu starten**, damit die neuen Widget-Versionen geladen werden.
|
|
204
|
+
|
|
205
|
+
> Hinweis: `--force-reinstall` wird empfohlen, da Orange die Widgets beim
|
|
206
|
+
> Canvas-Öffnen zwischenspeichert.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 🗑️ Deinstallation
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# macOS
|
|
214
|
+
$ORANGEPY -m pip uninstall orangeplsda -y
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
# Windows / Linux / Conda
|
|
219
|
+
python -m pip uninstall orangeplsda -y
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Danach Orange neu starten — die Widgets sind verschwunden.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 🧪 Kurzer Funktionstest (Entwickler)
|
|
227
|
+
|
|
228
|
+
Mit Oranges Python auf einem der mitgelieferten Datensätze:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
python -c "
|
|
232
|
+
from Orange.data import Table
|
|
233
|
+
from Orange.base import Model
|
|
234
|
+
from orangeplsda import PLSDALearner
|
|
235
|
+
from orangeplsda.oplsda_learner import OPLSDALearner
|
|
236
|
+
for L, kw in [(PLSDALearner, dict(n_components=2)),
|
|
237
|
+
(OPLSDALearner, dict(n_components=1, n_ortho=1))]:
|
|
238
|
+
t = Table('iris'); m = L(**kw)(t)
|
|
239
|
+
p, pr = m(t, ret=Model.ValueProbs)
|
|
240
|
+
print(L.__name__, round(float((p == t.Y.flatten()).mean()), 3), pr.shape)
|
|
241
|
+
"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Erwartete Ausgabe (beispielhaft, kann leicht abweichen):
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
PLSDALearner 0.813 (150, 3)
|
|
248
|
+
OPLSDALearner 0.8 (150, 3)
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 🛠️ Fehlerbehebung
|
|
254
|
+
|
|
255
|
+
| Problem | Lösung |
|
|
256
|
+
|---|---|
|
|
257
|
+
| "`python3` ist nicht vorhanden" / Datei nicht gefunden | Das Binary heißt je nach Orange-Version `python3`, `python3.11` oder `python3.12` (z.B. Orange mit Python 3.12). Mit `find /Applications/Orange.app -name "python3*" -type f` den echten Namen ermitteln. |
|
|
258
|
+
| `from orangeplsda import ...` schlägt fehl | Du hast `/usr/bin/python3` statt Oranges Python benutzt. Siehe Schritt 1 oben. |
|
|
259
|
+
| Widget erscheint nicht in Orange | Gelöschte `*.egg-info`/`__pycache__` prüfen; Orange vollständig neu starten; `pip show orangeplsda` ausführen. |
|
|
260
|
+
| `Host key verification failed` beim pip install | Läuft nur bei einem gepushten SSH-Workflow, nicht bei `git+https://`. Nutze die https-URL. |
|
|
261
|
+
| alte Version bleibt | `pip install --force-reinstall` verwenden (siehe Updates). |
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 📦 Entwicklung / Repo lokal ausprobieren
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
git clone git@github.com:philippweller/orange-plsda-addon.git
|
|
269
|
+
cd orange-plsda-addon
|
|
270
|
+
# Editable-Install mit Oranges Python:
|
|
271
|
+
$ORANGEPY -m pip install -e .
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 📄 Lizenz
|
|
277
|
+
|
|
278
|
+
MIT © Philipp Weller
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""
|
|
2
|
+
orangeplsda - PLS-DA (Partial Least Squares Discriminant Analysis) for Orange3.
|
|
3
|
+
|
|
4
|
+
Provides a classification learner and widget for PLS-DA.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .plsda_learner import PLSDALearner, PLSDAModel
|
|
8
|
+
from .oplsda_learner import OPLSDALearner, OPLSDAModel
|
|
9
|
+
|
|
10
|
+
__all__ = ["PLSDALearner", "PLSDAModel", "OPLSDALearner", "OPLSDAModel"]
|