From 6cf6817fc544de14e7f8e1f7c9034488cb1f9ed9 Mon Sep 17 00:00:00 2001
From: Samuel <sekurh@utu.fi>
Date: Tue, 15 Apr 2025 11:08:16 +0300
Subject: [PATCH] =?UTF-8?q?Uusien=20ominaisuuksien=20klusterointi=20valmis?=
 =?UTF-8?q?=3F,=20raporttia=20eteenp=C3=A4in?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Ominaisuussuunnittelu.txt             |  5 +++-
 Raportti.txt                          | 13 ++++++---
 Uusien ominaisuuksien klusterointi.py | 38 +++++++++++++++++++++++----
 3 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/Ominaisuussuunnittelu.txt b/Ominaisuussuunnittelu.txt
index 4fefe99..a21ac8a 100644
--- a/Ominaisuussuunnittelu.txt
+++ b/Ominaisuussuunnittelu.txt
@@ -38,4 +38,7 @@ Neulaset suhteessa kokoon:
 
 data['Needle_Density'] = data['NeedleNo'] / data['VolumeIndex']
 
-Tämä auttaa tunnistamaan puulajeja.
\ No newline at end of file
+Tämä auttaa tunnistamaan puulajeja.
+
+----------------------------------------
+
diff --git a/Raportti.txt b/Raportti.txt
index fb42bfc..763316b 100644
--- a/Raportti.txt
+++ b/Raportti.txt
@@ -16,9 +16,16 @@ Käytimme Principal Component Analysis, eli pääkomponenttianalyysia, joka väh
 Näin data on jaettu kahteen pääkomponenttiin, x- ja y-akselille kuvaajalla.
 
 2. Ominaisuussuunnittelu  ##KESKEN
-Lisäsimme uusia ominaisuuksia 
-1. `kirjoita ominaisuus`: 
-2. `kirjoita ominaisuus`: 
+Lisäsimme uusia ominaisuuksia, jotka auttavat tunnistamaan eri tyyppejä.
+1. Käpyjen ja neulasten suhde ['Needles_per_Pine']: Tämän avulla voidaan tunnistaa eri puulajeja ja arvioida karkeasti kasvuympäristöä ja puun hyvinvointia.
+2. Puun tilavuuden likimäärä ['VolumeIndex']: 
+3. Kaarnan paksuus suhteessa korkeuteen ['Bark_to_Height']: 
+4. Käpytiheys ['Pine_Density']: 
+5. Neulastiheys ['Needle_Density']: 
+6. Korkeuden suhde ympärysmittaan ['Height_to_Circumference']:
+7. Neulasten määrä suhteessa kaarnan paksuuteen ['Needles_to_Bark']:
+
+Katso Ominaisuussuunnittelu.txt, sieltä näkee miten uudet ominaisuudet on johdettu.
 
 3. Muokatun datan klusterointi ## KESKEN
 Muokatun datan klusterointi tuotti selkeämmät klusterit, jotka erottelivat puut ominaisuuksien perusteella.
diff --git a/Uusien ominaisuuksien klusterointi.py b/Uusien ominaisuuksien klusterointi.py
index 9460d09..065ca9f 100644
--- a/Uusien ominaisuuksien klusterointi.py	
+++ b/Uusien ominaisuuksien klusterointi.py	
@@ -19,9 +19,12 @@ data['Height_to_Circumference'] = data['Height'] / data['Circumference'] # korke
 data['Needles_to_Bark'] = data['NeedleNo'] / data['BarkThickness'] # neulasten määrä suhteessa kaarnan paksuuteen
 
 print("Valitse klusterointiin käytettävät uudet ominaisuudet: ")
-print("1. Puun tilavuuden suhde neulasten kokonaismäärään (auttaa tunnistamaan puutyyppejä)") # features = ['VolumeIndex', 'Needle_Density']
-print("2. Käpyjen kokonaismäärän suhde puun tilavuuteen (auttaa tunnistamaan puiden iän ja lisääntymismahdollisuudet)") # features = ['Pine_Density', 'VolumeIndex']
-print("3. Exit")
+print("1. Puun tilavuuden suhde neulastiheyteen (auttaa tunnistamaan puutyyppejä)") # features = ['VolumeIndex', 'Needle_Density']
+print("2. Käpytiheyden suhde puun tilavuuteen (auttaa tunnistamaan puiden iän ja lisääntymismahdollisuudet)") # features = ['Pine_Density', 'VolumeIndex']
+print("3. Käpytiheyden suhde kaarnan paksuuteen (auttaa tunnistamaan puun iän ja lisääntymisvaiheen)")
+print("4. Neulastiheyden suhde käpytiheyteen (auttaa tunnistamaan 'lehtevät' ja lisääntymiskykyiset puut)")
+print("5. Kaikki uudet ominaisuudet (luonnollinen ryhmittely)")
+print("6. Exit")
 
 choice = input("Anna valitsemasi numero: ")
 
@@ -30,19 +33,44 @@ if choice == "1":
     X = data[features]
     title = "Eri puutyyppien tunnistus"
     xakseli = "Puun koko/tilavuus"
-    yakseli = "Neulasten määrä"
+    yakseli = "Neulastiheys"
 
 elif choice == "2":
     features = ['Pine_Density', 'VolumeIndex'] # Valitaan klusterointiin käytettävät attribuutit
     X = data[features]
     title = "Puiden ikä ja lisääntymismahdollisuudet"
-    xakseli = "käpyjen määrä"
+    xakseli = "Käpytiheys"
     yakseli = "Puun koko/tilavuus"
 
 elif choice == "3":
+    features = ['Pine_Density', 'BarkThickness'] # Valitaan klusterointiin käytettävät attribuutit
+    X = data[features]
+    title = "Puiden ikä ja lisääntymisvaihe"
+    xakseli = "Käpytiheys"
+    yakseli = "Kaarnan paksuus"
+
+elif choice == "4":
+    features = ['Needle_Density', 'Pine_Density'] # Valitaan klusterointiin käytettävät attribuutit
+    X = data[features]
+    title = "Lehtevät ja lisääntymiskykyiset puut"
+    xakseli = "Neulastiheys"
+    yakseli = "Käpytiheys"
+
+elif choice == "5":
+    features = ['Needles_per_Pine', 'Bark_to_Height', 'Pine_Density', 'Needle_Density',
+                'VolumeIndex', 'Height_to_Circumference', 'Needles_to_Bark'] # Valitaan klusterointiin käytettävät attribuutit
+    X = data[features]
+    title = "Luonnollinen ryhmittely"
+    xakseli = "Yhdistetyt ominaisuudet"
+    yakseli = "Yhdistetyt ominaisuudet"
+
+elif choice == "6":
     print("Lopetetaan...")
     exit()
 
+else:
+    print("Virheellinen valinta, yritä uudelleen.")
+    exit()
 
 # Skaalataan ominaisuudet
 scaler = StandardScaler()
-- 
GitLab