CoolFace
Apppublic

P-Tech/UnsupervisedLearning

sourceHugging Facegpl-3.0updated 2y agoView on Hugging Face
1likes
app.R1276 linesDownload Raw Back to root
1library(shiny)2library(shinyjs)3library(bslib)4library(dplyr)5library(ggplot2)6library(tm)7library(SnowballC)8library(plotly)9library(dplyr)10library(tidyr)11library(igraph)12library(ggraph)13library(reshape2)14library(SnowballC)15library(RColorBrewer)16library(syuzhet)17library(cluster)18library(Rtsne)19library(umap)20library(MASS)21library(koRpus)22library(openxlsx)23library(tools)24library(shinyWidgets)25#library(readxl)26library(scales)27library(caret)28library(BBmisc)29library(glmnet)30library(pROC)31library(ROCR)32library(car)33library(ResourceSelection)34library(tree)35library(ggplotify)36library(lmtest)37library(gridExtra)38library(patchwork)39library(caret)40library(randomForest)41library(gbm)42library(earth)43library(broom)44library(rlang)45library(ggdendro)46library(pastecs)47library(forecast)48library(scales)49if (!require("caret")) install.packages("caret", dependencies = TRUE)50library(caret)51library(BBmisc)52library(glmnet)53library(pROC)54library(ROCR)55library(car)56library(ResourceSelection)57library(tree)58library(ggplotify)59library(lmtest)60library(gridExtra)61library(patchwork)62library(caret)63library(randomForest)64library(gbm)65library(earth)66library(broom)67library(rlang)68library(ggdendro)69library(pastecs)70library(dbscan)71library(fpc)72library(factoextra)73library(scales)74library(openxlsx)75library(arules)76library(arulesViz)77library(viridis)78library(kohonen)79library(purrr)80library(rvest)81library(Rtsne)82library(shinydashboard)83options(width = 150)84options(digits = 4, scipen = 1000000000)85options(shiny.maxRequestSize=30*1024^2)86 87 88 89ui <- fluidPage(90  theme = bs_theme(version = 5, bootswatch = "spacelab"),91  useShinyjs(),  # Initialize shinyjs92  titlePanel("PtteM Data Science"),93  tags$head(tags$link(rel = "stylesheet", href="https://fonts.googleapis.com/css?family=Montserrat:100,300,400,700&display=swap"),94            tags$style(HTML("95        body, h1, h2, h3, h4, h5, h6, .nav, p, a, .shiny-input-container {96        font-family: 'Montserrat'; /* Font type for the title attribute */97        font-weight: 385;98        color: #007c9e !important;99      }100        * {101        font-family: 'Montserrat', sans-serif;102        font-weight: 385; 103        color: #195576; /* Blue color */104      }105        body { 106        background-color: #f7f7f7; /* Light gray background */107        }108      .icon-btn {109        border: 1px solid #0d6efd; /* Example border: solid, 2 pixels, #555 color */110        border-radius: 15%; /* Circular border */111        color: #00969e; /* Icon color */112        font-family: 'Montserrat'; /* Font type for the title attribute */113        font-weight: 385;114        background-color: #f7f7f7;115        padding: 125px; /* Space around the icon */116        margin: 25px; /* Space around the button */117        font-size: 24px; /* Icon size */118        box-shadow: 0 2px 4px rgba(0,0,0,0.2);119      }120      .icon-btn:hover {121        color: #00969e; /* Icon color on hover */122        border-color: #007c9e;123        background-color: #ebfbfd;/* Border color on hover */124      }125           /* Add custom styles here */126      .shiny-input-container {127        margin-bottom: 15px;128      }129      .box {130        border: 1px solid #ddd;131        padding: 20px;132        border-radius: 50px;133        margin-bottom: 200px;134        gap: 200px;135        align-items: center;136      }137    #statsTable_wrapper {138      margin: 0 auto;139    }140    .shiny-output-error {141    border: 1px solid #FF0000; /* Red border on error */142    }143      /* If you want to change the font size of the tooltip, you can add custom CSS for the 'title' attribute's default styling. */144    "))),145  tags$head(146    # Include JavaScript to reload the page147    tags$script(HTML("148    document.addEventListener('DOMContentLoaded', function() {149    document.getElementById('myElement').style.color = '#0d6efd'; // Change to your desired color150  });151"))152  ),153  tags$head(154    tags$script(HTML("155      function reloadPage() {156        window.location.reload();157      }158    "))159  ),160  # Refresh button that calls the JavaScript function161  actionButton("refresh", "Refresh Analysis", onclick = "reloadPage();"),162  # Help Text or Information for the user163  helpText("Bu uygulama ile metin analizi başlığı altındaki veri bilimi fonksiyonlarına erişebilirsiniz."),164  #Unupervised Learning165        h2("Unsupervised Learning Section"),166        tabsetPanel(167          tabPanel("Principal Component Analysis",168                   sidebarLayout(169                     sidebarPanel(170                       fileInput("pcainput", "Choose a CSV or XLSX file", accept = c(".csv", ".xlsx")),171                       # Conditional panel for group selection172                       uiOutput("groupSelectUI"),173                       actionButton("loadpca", "Load Data"),174                       selectInput("independentVarpca", "Select Columns", choices = NULL, multiple = T),175                       actionButton("runpca", "Run PCA"),176                       HTML("<div>177  <h2>Ana Bileşen Analizi (PCA) Paneli</h2>178  179  <h3>Çıktı Nedir ve Neden Kullanılır?</h3>180  <p>Ana Bileşen Analizi (PCA), veri setlerindeki boyutluluğu azaltmak ve en önemli özellikleri belirlemek için kullanılan bir yöntemdir. Bu panel, kullanıcıların veri setlerindeki ana bileşenleri analiz etmelerine, önemli özellikleri keşfetmelerine ve veri setlerinin görselleştirilmesine olanak tanır.</p>181  182  <h3>Kullanım Adımları:</h3>183  <ol>184    <li><strong>Veri Dosyası Yükleme:</strong> Analize başlamak için bir CSV veya XLSX dosyası yükleyin.</li>185    <li><strong>Bağımsız Değişkenlerin Seçimi:</strong> Analizde kullanılacak bağımsız değişkenleri seçin.</li>186    <li><strong>PCA Çalıştırma:</strong> Ana bileşen analizini çalıştırın ve sonuçları inceleyin.</li>187  </ol>188  189  <h3>Kullanıcı Etkileşimi:</h3>190  <p>Kullanıcılar, veri setlerini yükleyebilir, analiz için değişkenleri seçebilir ve PCA sonuçlarını detaylı bir şekilde inceleyebilir. Panel, boyut indirgeme ve özellik seçimi konularında kullanıcıya rehberlik eder.</p>191  192  <h3>Veri Bilimi ve Makine Öğrenmesindeki Uygulamaları:</h3>193  <p>PCA, yüksek boyutlu veri setlerinin anlaşılmasını ve yorumlanmasını kolaylaştırır. Özellikle, çok sayıda değişken içeren veri setlerinde, önemli özellikleri belirlemek ve veri setlerini daha basit hale getirmek için kullanılır.</p>194  195  <h3>Desteklenen Dosya Tipleri ve Seçenekler:</h3>196  <p>Panel, CSV (.csv) ve Excel (.xlsx) formatlarını destekler, bu da kullanıcıların farklı veri kaynaklarından kolaylıkla veri yüklemesine olanak tanır.</p>197  198  <h3>Sonuçların Yorumlanması:</h3>199  <p>PCA sonuçları, veri setindeki değişkenler arasındaki ilişkileri ve veri setinin ana bileşenlerini ortaya koyar. Bu, veri setinin daha basit bir şekilde anlaşılmasını ve analiz edilmesini sağlar.</p>200  201  <ul>202    <li><strong>Model Özeti:</strong> PCA modelinin temel özellikleri ve bileşenlerinin açıkladığı varyans miktarı hakkında bilgiler sunar.</li>203    <li><strong>Bi Plot:</strong> Ana bileşenlerin ve değişkenlerin birbirleriyle olan ilişkisini görsel olarak gösterir. Bu, hangi değişkenlerin PCA sonuçlarını en çok etkilediğini anlamada yardımcı olur.</li>204  </ul>205  206  <p>PCA paneli, kullanıcıların veri setlerindeki temel yapıyı keşfetmelerine ve önemli özellikleri belirlemelerine yardımcı olan kapsamlı bir araçtır.</p>207</div>")208                     ),209                     mainPanel(210                       tabsetPanel(211                         tabPanel("Data Summary", verbatimTextOutput("dataSummarypca")),212                         tabPanel("PCA Output",213                                  tabsetPanel(214                                    tabPanel("Run PCA", verbatimTextOutput("runpca")),215                                    tabPanel("Bi Plot Columns", plotlyOutput("biPlotpca", width = "100%", height = "625px")),216                                  )217                         )218                       )219                     )220                   )221          ),222          tabPanel("K-Means Clustering",223                   sidebarLayout(224                     sidebarPanel(225                       fileInput("kmcinput", "Choose a CSV or XLSX file", accept = c(".csv", ".xlsx")),226                       actionButton("loadkmc", "Load Data"),227                       selectInput("targetkmc", "Select First Column", choices = NULL),228                       selectInput("independentVarkmc", "Select Second Column", choices = NULL),229                       numericInput("numCenterskmc", "Number of Clusters:", value = 3, min = 2),230                       actionButton("runkmc", "Run K-Means"),231                       HTML("<div>232  <h2>K-Ortalama Kümeleme Paneli</h2>233  234  <h3>Çıktı Nedir ve Neden Kullanılır?</h3>235  <p>K-Ortalama Kümeleme, veri setlerini benzer özelliklere göre gruplara ayırmak için kullanılan bir yöntemdir. Bu panel, kullanıcıların veri setlerindeki kümeleri analiz etmelerine, farklı grupları keşfetmelerine ve veri setlerinin kümeleme sonuçlarını görselleştirmelerine olanak tanır.</p>236  237  <h3>Kullanım Adımları:</h3>238  <ol>239    <li><strong>Veri Dosyası Yükleme:</strong> Analize başlamak için bir CSV veya XLSX dosyası yükleyin.</li>240    <li><strong>Değişkenlerin Seçimi:</strong> Kümelemede kullanılacak değişkenleri seçin.</li>241    <li><strong>Küme Sayısı Belirleme:</strong> Oluşturulacak kümelerin sayısını belirleyin.</li>242    <li><strong>K-Ortalama Kümeleme Çalıştırma:</strong> K-Ortalama Kümeleme algoritmasını çalıştırın ve sonuçları inceleyin.</li>243  </ol>244  245  <h3>Kullanıcı Etkileşimi:</h3>246  <p>Kullanıcılar, veri setlerini yükleyebilir, analiz için değişkenleri ve küme sayısını belirleyebilir ve K-Ortalama Kümeleme sonuçlarını detaylı bir şekilde inceleyebilir. Panel, kümeleme ve gruplandırma konularında kullanıcıya rehberlik eder.</p>247  248  <h3>Veri Bilimi ve Makine Öğrenmesindeki Uygulamaları:</h3>249  <p>K-Ortalama Kümeleme, veri setlerindeki doğal gruplandırmaları keşfetmek ve veri içgörülerini artırmak için yaygın olarak kullanılır. Özellikle, müşteri segmentasyonu, hedefleme ve benzer gruplar içindeki eğilimleri anlama gibi alanlarda tercih edilir.</p>250  251  <h3>Desteklenen Dosya Tipleri ve Seçenekler:</h3>252  <p>Panel, CSV (.csv) ve Excel (.xlsx) formatlarını destekler, bu da kullanıcıların farklı veri kaynaklarından kolaylıkla veri yüklemesine olanak tanır.</p>253  254  <h3>Sonuçların Yorumlanması:</h3>255  <p>K-Ortalama Kümeleme sonuçları, veri setindeki grupların merkezlerini, her bir kümenin içerdiği gözlem sayısını ve kümeler arasındaki benzerlik/dissimilarity ölçülerini içerir. Bu, veri setinin daha derin bir şekilde anlaşılmasını ve stratejik kararlar alınmasını sağlar.</p>256  257  <ul>258    <li><strong>Model Özeti:</strong> K-Ortalama Kümeleme modelinin temel özellikleri ve kümelerin özellikleri hakkında bilgiler sunar.</li>259    <li><strong>Kümeleme Grafiği:</strong> Oluşturulan kümelerin ve merkezlerinin görsel bir temsilidir. Bu, hangi gözlemlerin hangi kümeye ait olduğunu anlamada yardımcı olur.</li>260    <li><strong>Silüet Sonuçları:</strong> Kümeleme kalitesinin bir göstergesi olan silüet skorlarını içerir. Bu skorlar, kümelerin ne kadar iyi tanımlandığını ve ayrıldığını gösterir.</li>261  </ul>262  263  <p>K-Ortalama Kümeleme paneli, kullanıcıların veri setlerindeki doğal gruplandırmaları keşfetmeler264 265ine ve önemli özellikleri belirlemelerine yardımcı olan kapsamlı bir araçtır.</p>266</div>")267                     ),268                     mainPanel(269                       tabsetPanel(270                         tabPanel("Data Summary", verbatimTextOutput("dataSummarykmc")),271                         tabPanel("K-Means Output",272                                  tabsetPanel(273                                    tabPanel("Run K-Means", verbatimTextOutput("runkmc")),274                                    tabPanel("Clustering Plot", plotlyOutput("clusteringPlotkmc", width = "100%", height = "625px")),275                                    tabPanel("Silhouttte Results", plotlyOutput("silhouettePlotkmc", width = "100%", height = "625px"))276                                  )277                         )278                       )279                     )280                   )281          ),282          tabPanel("Hierarchical Clustering",283                   sidebarLayout(284                     sidebarPanel(285                       fileInput("hcinput", "Choose a CSV or XLSX file", accept = c(".csv", ".xlsx")),286                       actionButton("loadhc", "Load Data"),287                       selectInput("independentVarhc", "Select the Columns", choices = NULL, multiple = TRUE),288                       numericInput("numCentershc", "Number of Clusters:", value = 2, min = 2, max = 8),289                       actionButton("runavehc", "Run Average Linkage"),290                       actionButton("runcenhc", "Run Centroid Linkage"),291                       actionButton("runwddhc", "Run Ward D2 Linkage"),292                       actionButton("runmchc", "Run Mcquity Linkage"),293                       HTML("<div>294  <h2>Hiyerarşik Kümeleme Paneli</h2>295  296  <h3>Çıktı Nedir ve Neden Kullanılır?</h3>297  <p>Hiyerarşik Kümeleme, veri noktalarını adım adım birleştirerek veya bölererek hiyerarşik bir kümeler dizisi oluşturan bir yöntemdir. Bu panel, kullanıcıların veri setlerindeki doğal gruplamaları keşfetmelerine, farklı kümeleme yöntemlerini denemelerine ve sonuçları görselleştirmelerine olanak tanır.</p>298  299  <h3>Kullanım Adımları:</h3>300  <ol>301    <li><strong>Veri Dosyası Yükleme:</strong> Analize başlamak için bir CSV veya XLSX dosyası yükleyin.</li>302    <li><strong>Değişkenlerin Seçimi:</strong> Kümelemede kullanılacak değişkenleri seçin.</li>303    <li><strong>Küme Sayısı Belirleme:</strong> Oluşturulacak kümelerin sayısını belirleyin.</li>304    <li><strong>Kümeleme Yöntemlerini Çalıştırma:</strong> Ortalama, merkez, Ward D2 veya Mcquity bağlantı yöntemlerinden birini seçerek çalıştırın.</li>305  </ol>306  307  <h3>Kullanıcı Etkileşimi:</h3>308  <p>Kullanıcılar, veri setlerini yükleyebilir, analiz için değişkenleri ve küme sayısını belirleyebilir, farklı hiyerarşik kümeleme yöntemlerini deneyebilir ve sonuçları detaylı bir şekilde inceleyebilir.</p>309  310  <h3>Veri Bilimi ve Makine Öğrenmesindeki Uygulamaları:</h3>311  <p>Hiyerarşik Kümeleme, özellikle müşteri segmentasyonu, gen ifadesi analizi ve sosyal ağ analizi gibi alanlarda kullanılır. Bu yöntem, veri setlerindeki doğal gruplamaları ve ilişkileri keşfetmek için önemli bir araçtır.</p>312  313  <h3>Desteklenen Dosya Tipleri ve Seçenekler:</h3>314  <p>Panel, CSV (.csv) ve Excel (.xlsx) formatlarını destekler, bu da kullanıcıların farklı veri kaynaklarından kolaylıkla veri yüklemesine olanak tanır.</p>315  316  <h3>Sonuçların Yorumlanması:</h3>317  <p>Hiyerarşik Kümeleme sonuçları, dendrogramlar ve siluet analizleri aracılığıyla sunulur. Dendrogramlar, veri noktaları arasındaki ilişkilerin ve gruplamaların hiyerarşik yapısını gösterirken, siluet analizleri, kümelerin ne kadar iyi tanımlandığını ve ayrıldığını değerlendirir.</p>318  319  <ul>320    <li><strong>Model Özeti:</strong> Seçilen kümeleme yönteminin temel özellikleri ve kümelerin özellikleri hakkında bilgiler sunar.</li>321    <li><strong>Dendrogram:</strong> Veri noktaları arasındaki ilişkilerin ve gruplamaların hiyerarşik yapısını gösterir. Her bir kümeleme yöntemi için ayrı dendrogramlar sunulur.</li>322    <li><strong>Siluet Sonuçları:</strong> Kümeleme kalitesinin bir göstergesi olan siluet skorlarını içerir. Bu skorlar, kümelerin ne kadar iyi tanımlandığını ve ayrıldığını gösterir.</li>323  </ul>324  325  <p>Hiyerarşik Kümeleme paneli, kullanıcıların veri setlerindeki doğal gruplamaları keşfetmelerine ve önemli özellik326 327leri belirlemelerine yardımcı olan kapsamlı bir araçtır.</p>328</div>")329                     ),330                     mainPanel(331                       tabsetPanel(332                         tabPanel("Data Summary", verbatimTextOutput("dataSummaryhc")),333                         tabPanel("Hierarchical Clustering",334                                  tabsetPanel(335                                    tabPanel("Average Linkage",plotlyOutput("averageDendrogram", width = "100%", height = "825px")),336                                    tabPanel("Silhoutte Results", plotlyOutput("silhouettePlotHCave", width = "100%", height = "625px")),337                                    tabPanel("Centroid Linkage",plotlyOutput("centroidDendrogram", width = "100%", height = "825px")),338                                    tabPanel("Silhoutte Results", plotlyOutput("silhouettePlotHCcen", width = "100%", height = "625px")),339                                    tabPanel("Ward D2 Linkage", plotlyOutput("wdd2Dendrogram", width = "100%", height = "825px")),340                                    tabPanel("Silhoutte Results", plotlyOutput("silhouettePlotHCwdd2", width = "100%", height = "625px")),341                                    tabPanel("Mcquity Linkage", plotlyOutput("mcquDendrogram", width = "100%", height = "825px")),342                                    tabPanel("Silhoutte Results", plotlyOutput("silhouettePlotHCmc", width = "100%", height = "625px"))343                                  )344                         )345                       )346                     )347                   )348          ),349          tabPanel("DBSCAN Clustering",350                   sidebarLayout(351                     sidebarPanel(352                       fileInput("dbscaninput", "Choose a CSV or XLSX file", accept = c(".csv", ".xlsx")),353                       actionButton("loaddbscan", "Load Data"),354                       selectInput("independentVardbscan", "Select Columns", choices = NULL, multiple = T),355                       actionButton("rundbscandist", "Run kNN"),356                       actionButton("rundbscan", "Run DBSCAN"),357                       numericInput("numepsdbscan", "Type Optimum Epsilon:", value = 0),358                       HTML("<div>359  <h2>DBSCAN Kümeleme Paneli</h2>360  361  <h3>Çıktı Nedir ve Neden Kullanılır?</h3>362  <p>DBSCAN (Yoğunluk Tabanlı Mekansal Kümeleme Uygulamaları ile Gürültü), veri noktalarını yoğunluk temelinde kümeler halinde gruplandıran bir kümeleme algoritmasıdır. Bu panel, kullanıcıların yoğunluk tabanlı kümeleri keşfetmelerine ve gürültülü veri noktalarını ayırt etmelerine olanak tanır.</p>363  364  <h3>Kullanım Adımları:</h3>365  <ol>366    <li><strong>Veri Dosyası Yükleme:</strong> Analize başlamak için bir CSV veya XLSX dosyası yükleyin.</li>367    <li><strong>Değişkenlerin Seçimi:</strong> Kümelemede kullanılacak değişkenleri seçin.</li>368    <li><strong>kNN Mesafesinin Çalıştırılması:</strong> Optimum epsilon değerini belirlemek için kNN mesafesini çalıştırın.</li>369    <li><strong>DBSCAN Kümelemesini Çalıştırma:</strong> Belirlenen epsilon değeriyle DBSCAN kümelemesini çalıştırın.</li>370  </ol>371  372  <h3>Kullanıcı Etkileşimi:</h3>373  <p>Kullanıcılar, veri setlerini yükleyebilir, analiz için değişkenleri seçebilir, optimum epsilon değerini belirleyebilir ve DBSCAN algoritmasını kullanarak kümeleme yapabilir.</p>374  375  <h3>Veri Bilimi ve Makine Öğrenmesindeki Uygulamaları:</h3>376  <p>DBSCAN, özellikle düzensiz şekillerdeki kümeleri tanıyabilme ve aykırı değerleri (gürültüyü) dışlayabilme yeteneği nedeniyle, veri madenciliği, görüntü analizi ve biyoinformatik gibi alanlarda kullanılır.</p>377  378  <h3>Desteklenen Dosya Tipleri ve Seçenekler:</h3>379  <p>Panel, CSV (.csv) ve Excel (.xlsx) formatlarını destekler, bu da kullanıcıların farklı veri kaynaklarından kolaylıkla veri yüklemesine olanak tanır.</p>380  381  <h3>Sonuçların Yorumlanması:</h3>382  <p>DBSCAN Kümeleme sonuçları, kNN mesafe grafiği, kümeleme özeti, kümeleme görselleştirmesi ve siluet analizi aracılığıyla sunulur. kNN mesafe grafiği, optimum epsilon değerinin belirlenmesine yardımcı olur. Kümeleme özeti, oluşturulan kümeler ve her birindeki veri noktası sayısını içerir. Kümeleme görselleştirmesi, oluşturulan kümelerin dağılımını gösterir. Siluet analizi, kümelerin ne kadar iyi tanımlandığını ve ayrıldığını değerlendirir.</p>383  384  <ul>385    <li><strong>kNN Mesafe Grafiği:</strong> Optimum epsilon değerinin belirlenmesine yardımcı olan bir grafiği içerir.</li>386    <li><strong>Kümeleme Özeti:</strong> Oluşturulan kümelerin sayısını ve her birindeki veri noktası sayısını gösterir.</li>387    <li><strong>Kümeleme Görselleştirmesi:</strong> Oluşturulan kümelerin mekansal dağılımını gösterir.</li>388    <li><strong>Siluet Analizi:</strong> Kümeleme kalitesinin bir göstergesi olan siluet skorlarını içerir. Bu skorlar, kümelerin ne kadar iyi tanımlandığını ve ayrıldığını gösterir.</li>389  </ul>390  391  <p>DBSCAN Kümeleme Paneli, veri setlerindeki doğal kümeleri keşfetmek ve veri içgörülerini elde etmek için güçlü bir araçtır.</p>392</div>")393                     ),394                     mainPanel(395                       tabsetPanel(396                         tabPanel("Data Summary", verbatimTextOutput("dataSummarydbscan")),397                         tabPanel("DBSCAN Output",398                                  tabsetPanel(399                                    tabPanel("kNN Plot", plotOutput("rundbscandist", width = "100%", height = "625px")),400                                    tabPanel("Run DBSCAN", verbatimTextOutput("rundbscan")),401                                    tabPanel("Clustering Plot", plotlyOutput("clusteringPlotdbscan", width = "100%", height = "625px")),402                                    tabPanel("Silhoutte Result", plotlyOutput("silhouettePlotdbscan", width = "100%", height = "625px"))403                                  )404                         )405                       )406                     )407                   )408          ),409          tabPanel("Associated Rule Learning",410                   sidebarLayout(411                     sidebarPanel(412                       fileInput("arlinput", "Choose a CSV or XLSX file", accept = c(".csv", ".xlsx")),413                       actionButton("loadarl", "Load Data"),414                       selectInput("targetarl", "Select ID Column", choices = NULL),415                       selectInput("itemsColumn", "Select Basket Column", choices = NULL),416                       actionButton("runarl", "Run ARL"),417                       HTML("<div>418  <h2>İlişkisel Kural Öğrenimi Paneli</h2>419  420  <h3>Çıktı Nedir ve Neden Kullanılır?</h3>421  <p>İlişkisel Kural Öğrenimi (ARL), veri setlerindeki öğeler arasındaki ilişkileri ve sıklıkla birlikte gerçekleşen öğe setlerini keşfetmek için kullanılan bir veri madenciliği tekniğidir. Bu panel, Apriori algoritmasını kullanarak ilişkisel kuralları belirlemeye ve bu kuralların önemini değerlendirmeye yardımcı olur.</p>422  423  <h3>Kullanım Adımları:</h3>424  <ol>425    <li><strong>Veri Dosyası Yükleme:</strong> Analize başlamak için bir CSV veya XLSX dosyası yükleyin.</li>426    <li><strong>Değişkenlerin Seçimi:</strong> Analiz için ID ve sepet sütunlarını seçin.</li>427    <li><strong>ARL Çalıştırma:</strong> İlişkisel kural öğrenimini başlatmak için 'Run ARL' düğmesine tıklayın.</li>428  </ol>429  430  <h3>Kullanıcı Etkileşimi:</h3>431  <p>Kullanıcılar, veri setlerini yükleyebilir, analiz için değişkenleri seçebilir ve ARL algoritmasını çalıştırabilir. Elde edilen kurallar, önem sırasına göre sıralanır ve kullanıcıya sunulur.</p>432  433  <h3>Veri Bilimi ve Makine Öğrenmesindeki Uygulamaları:</h3>434  <p>ARL, perakende satış analizleri, ürün öneri sistemleri ve müşteri satın alma davranışlarının incelenmesi gibi alanlarda kullanılır. Bu yöntem, veri setlerindeki gizli ilişkileri ortaya çıkararak iş kararları için değerli içgörüler sağlar.</p>435  436  <h3>Desteklenen Dosya Tipleri ve Seçenekler:</h3>437  <p>Panel, CSV (.csv) ve Excel (.xlsx) formatlarını destekler, bu da kullanıcıların farklı veri kaynaklarından kolaylıkla veri yüklemesine olanak tanır.</p>438  439  <h3>Sonuçların Yorumlanması:</h3>440  <p>İlişkisel kural öğrenim sonuçları, madde frekans grafiği, Apriori algoritması çıktısı ve sıralı ARL çıktısı aracılığıyla sunulur. Madde frekans grafiği, veri setindeki öğelerin sıklığını gösterir. Apriori algoritması çıktısı, elde edilen kuralları ve bu kuralların destek, güven ve kaldıraç değerlerini içerir. Sıralı ARL çıktısı, kuralların önem sırasına göre sıralanmasını sağlar, bu da kullanıcıların en önemli kuralları kolaylıkla belirlemesine yardımcı olur.</p>441  442  <ul>443    <li><strong>Madde Frekans Grafiği:</strong> Veri setindeki öğelerin sıklığını gösterir.</li>444    <li><strong>Apriori Algoritması Çıktısı:</strong> Elde edilen kuralları ve bu kuralların destek, güven ve kaldıraç değerlerini içerir.</li>445    <li><strong>Sıralı ARL Çıktısı:</strong> Kuralların önem sırasına göre sıralanmasını sağlar.</li>446  </ul>447  448  <p>İlişkisel Kural Öğrenimi Paneli, veri setlerindeki ilişkisel kuralları keşfetmek ve veri içgörülerini elde etmek için güçlü bir araçtır449 450.</p>451</div>")452                     ),453                     mainPanel(454                       tabsetPanel(455                         tabPanel("ARL Plot", plotlyOutput("itemFreqPlot", width = "100%", height = "625px")),456                         tabPanel("Run Appriori", verbatimTextOutput("runarlapp")),457                         tabPanel("Sorted ARL Output", verbatimTextOutput("sortedARLOutput"))458                       )459                     )460                   )461          ),462 463          464        )465 466)467 468server <- function(input, output, session) {469 470  ##Unsupervised Learning471  ###Principal Component Analysis472  datapca <- reactiveVal(NULL)473  pca_model_reactive <- reactiveVal()474  read_data <- function(filepath) {475    ext <- tools::file_ext(filepath)476    if (ext == "csv") {477      read.csv(filepath, stringsAsFactors = FALSE)478    } else if (ext == "xlsx") {479      readxl::read_excel(filepath)480    } else {481      stop("Invalid file format. Please select a CSV or XLSX file.")482    }483  }484  485  clean_column_names <- function(dataframe) {486    colnames(dataframe) <- gsub("[^[:alnum:]_]", "", make.names(colnames(dataframe), unique = TRUE))487    return(dataframe)488  }489  # Load and clean data490  observeEvent(input$loadpca, {491    req(input$pcainput)492    file <- input$pcainput493    if (!is.null(file)) {494      # Reading and cleaning data495      data_df <- read_data(file$datapath)496      data_df <- clean_column_names(data_df)497      # Setting the reactive value498      datapca(data_df)499      # Updating UI elements500      updateSelectInput(session, "independentVarpca", choices = colnames(data_df))501    }502  })503  504  output$dataSummarypca <- renderPrint({505    req(datapca())506    summary(datapca())507  }) 508  509  pca_reactive <- eventReactive(input$runpca, {510    req(datapca(), input$independentVarpca)511    if (length(input$independentVarpca) == 0) {512      return(NULL)513    }514    data_pca <- datapca() %>%515      dplyr::select(all_of(input$independentVarpca)) %>%516      na.omit()517    if (nrow(data_pca) < 10) {518      return(NULL)519    }520    pca_model <- prcomp(data_pca, scale = TRUE)521    pca_model_reactive(pca_model)522    pca_model523  })524  525  observeEvent(input$runpca, { 526    req(pca_reactive())527    output$runpca <- renderPrint({528      pca_result <- pca_reactive()529      530      print(pca_result)531      532      # Print the summary of PCA results533      pca_summary <- summary(pca_result)534      print(pca_summary)535      536      # Interpretation for the users537      cat("Principal Component Analysis (PCA) Summary:\n")538      cat("The 'Proportion of Variance' indicates how much information (variance) is captured by each principal component.\n")539      cat("The 'Cumulative Proportion' indicates the total variance captured by all the components up to that point.\n")540      cat("\nFor example, if the first two principal components capture 70% of the variance, it means that these two components together represent most of the variability in the data.\n")541      cat("This can be used to reduce the dimensionality of the data, by considering only the first few principal components that capture most of the variance.\n")542      543      # Holland's criteria for deciding how many PCs to retain544      cat("\nHolland's Criteria for Retaining Principal Components:\n")545      cat("1) Ignore components where the next PC offers little increase in total variance explained.\n")546      cat("2) Include PCs up to a predetermined total percent variance explained, such as 90%.\n")547      cat("3) Ignore components whose variance explained is less than 1 with a correlation matrix, or less than average variance explained with a covariance matrix.\n")548      cat("4) Ignore the last PCs whose variance explained is all roughly equal.\n")549      550      # Holland's Criteria Implementation551      cat("\nHolland's Criteria for Retaining Principal Components:\n")552      553      # Criterion 1: Ignore PCs with little increase in total variance explained554      variance_increases <- diff(pca_summary$importance["Proportion of Variance", ])555      significant_increase_index <- which(variance_increases > 0.01)  # Adjust the threshold as needed556      if (length(significant_increase_index) > 0) {557        cat("Criterion 1: Consider PCs up to index ", max(significant_increase_index), "\n")558      }559      560      # Criterion 2: Total percent variance explained, such as 90%561      cumulative_variance <- pca_summary$importance["Cumulative Proportion", ]562      sufficient_variance_index <- which(cumulative_variance >= 0.9)[1]563      if (!is.na(sufficient_variance_index)) {564        cat("Criterion 2: Consider PCs up to index ", sufficient_variance_index, " to explain 90% of variance.\n")565      }566      567      # Criterion 3: Ignore components with variance explained less than average568      average_variance <- mean(pca_summary$importance["Proportion of Variance", ])569      sufficient_variance_index <- which(pca_summary$importance["Proportion of Variance", ] >= average_variance)570      if (length(sufficient_variance_index) > 0) {571        cat("Criterion 3: Consider PCs with variance greater than the average ", round(average_variance, 2), "\n")572      }573      574      # Criterion 4: Ignore last PCs with roughly equal variance explained575      # Implementation can be subjective and depends on the context. Typically involves looking at a scree plot.576      cat("Criterion 4: This part is subjective and depends on how you want to prioritize or combine the criteria.\n")577      # Final recommendation based on Holland's Criteria578      cat("\nFinal Recommendation based on Holland's Criteria:\n")579      # Combine and interpret the criteria here. 580      cat("Final: This part is subjective and depends on how you want to prioritize or combine the criteria.\n")581    })582  })583  584  585  observeEvent(input$runpca, { 586    req(datapca(), input$independentVarpca)587    # Get the data588    data_for_pca <- datapca()589    590    # Run PCA only on complete cases to avoid NAs591    complete_data <- data_for_pca[complete.cases(data_for_pca[input$independentVarpca]), input$independentVarpca]592    pca_result <- prcomp(complete_data, scale = TRUE)593    594    # Generate the biplot595    output$biPlotpca <- renderPlotly({596      fviz_pca_biplot(pca_result, label = "var",597                      addEllipses=TRUE, ellipse.level=0.95,598                      ggtheme = theme_minimal()) %>%599        ggplotly() %>% layout(dragmode = "select")  # Enable selection mode in plotly600    })601  })602  603  604  605  606  607  ###K-Means Clustering608  datakmc <- reactiveVal(NULL)609  kmc_model_reactive <- reactiveVal()610  # Load and clean data611  observeEvent(input$loadkmc, {612    req(input$kmcinput)613    file <- input$kmcinput614    if (!is.null(file)) {615      # Reading and cleaning data616      data_df <- read_data(file$datapath)617      data_df <- clean_column_names(data_df)618      619      # Setting the reactive value620      datakmc(data_df)621      622      # Updating UI elements623      updateSelectInput(session, "targetkmc", choices = colnames(data_df))624      updateSelectInput(session, "independentVarkmc", choices = colnames(data_df))625    }626  })627  628  629  output$dataSummarykmc <- renderPrint({630    req(datakmc())631    summary(datakmc())632  }) 633  634  observeEvent(input$runkmc, {635    req(datakmc(), input$targetkmc, input$independentVarkmc)636    637    withProgress(message = 'Model is being trained...', value = 0, {638      # Increment progress639      incProgress(0.1)  # Initial progress640      data_kmc <- datakmc() %>%641        dplyr::select(input$targetkmc, input$independentVarkmc) %>%642        na.omit()643      644      # Early return if conditions are not met645      if (length(input$targetkmc) == 0) {646        output$modelOutputkmc <- renderPrint({ "Please select the first variable." })647        return()648      }649      650      if (length(input$independentVarkmc) == 0) {651        output$modelOutputkmc <- renderPrint({ "Please select the second variable." })652        return()653      }654      655      incProgress(0.3)  # Increment progress656      if (nrow(data_kmc) < 10) {657        output$modelOutputkmc <- renderPrint({ "Dataset is too small after removing NA values." })658        return()659      }660      incProgress(0.6)  # Increment progress661      # Partition the data662      663      664      # Fit the Random Forest model665      x <- data_kmc %>% dplyr::select(input$targetkmc, input$independentVarkmc)666      z <- scale(x)667      num_clusters <- input$numCenterskmc668      kmc_model <- kmeans(z, num_clusters, nstart = 20)669      kmc_model_reactive(kmc_model)670      671      # Augment data with cluster assignments672      data_kmc$cluster <- kmc_model$cluster673      674      # Model summary675      output$runkmc <- renderPrint({676        print(kmc_model)677        678      })679      680      # Finalize progress681      incProgress(1.0)  # Complete the progress682    })683  }) 684  685  output$clusteringPlotkmc <- renderPlotly({686    req(kmc_model_reactive(), input$targetkmc, input$independentVarkmc)687    688    # Get the k-means model689    kmc_model <- kmc_model_reactive()690    691    # Get the data and add cluster assignments692    data_kmc <- datakmc() %>%693      dplyr::select(input$targetkmc, input$independentVarkmc) %>%694      na.omit()695    696    # Ensure the k-means model is valid697    if (is.null(kmc_model)) {698      print("K-means model is not available.")699      return()700    }701    702    # Prepare data for fviz_cluster703    # fviz_cluster requires a kmeans object and data used for clustering704    # Make sure data_kmc and kmc_model correspond to each other705    fviz_cluster(kmc_model, data = data_kmc, stand = FALSE, geom = "point", 706                 ellipse.type = "convex", 707                 palette = "jco", 708                 ggtheme = theme_minimal())709  })710  711  output$silhouettePlotkmc <- renderPlotly({712    req(kmc_model_reactive(), input$targetkmc, input$independentVarkmc)713    714    # Retrieve the k-means model715    kmc_model <- kmc_model_reactive()716    717    # Retrieve the data718    data_kmc <- datakmc() %>%719      dplyr::select(input$targetkmc, input$independentVarkmc) %>%720      na.omit()721    722    # Create the silhouette object723    silhouette_info <- silhouette(kmc_model$cluster, dist(data_kmc))724    725    # Visualize the silhouette plot726    fviz_silhouette(silhouette_info) + 727      labs(title = "Silhouette Plot for K-Means Clustering")728  })729  730  ###Hierarchical Clustering731  datahc <- reactiveVal(NULL)732  # Load and clean data733  observeEvent(input$loadhc, {734    req(input$hcinput)735    file <- input$hcinput736    if (!is.null(file)) {737      # Reading and cleaning data738      data_df <- read_data(file$datapath)739      data_df <- clean_column_names(data_df)740      741      # Setting the reactive value742      datahc(data_df)743      744      # Updating UI elements745      updateSelectInput(session, "independentVarhc", choices = colnames(data_df))746    }747  })748  749  750  output$dataSummaryhc <- renderPrint({751    req(datahc())752    summary(datahc())753  })  754  755  # Create reactive expressions for each method that trigger only when the corresponding button is clicked756  average_hc_reactive <- eventReactive(input$runavehc, {757    req(datahc(), input$independentVarhc)758    # Early return if conditions are not met759    if (length(input$independentVarhc) == 0) {760      output$modelOutputhc <- renderPrint({ "Please select the second variable." })761      return()762    }763    data_hc <- datahc() %>%764      dplyr::select(input$independentVarhc) %>%765      na.omit()766    if (nrow(data_hc) < 10) {767      output$modelOutputhc <- renderPrint({ "Dataset is too small after removing NA values." })768      return()769    }770    # Partition the data771    hc_average <- hclust(dist(scale(data_hc)), method = "average")772    return(hc_average)773  })774  775  centroid_hc_reactive <- eventReactive(input$runcenhc, {  # Please make sure you have a separate button ID for centroid linkage776    req(datahc(), input$independentVarhc)777    # Early return if conditions are not met778    if (length(input$independentVarhc) == 0) {779      output$modelOutputhc <- renderPrint({ "Please select the second variable." })780      return()781    }782    data_hc <- datahc() %>%783      dplyr::select(input$independentVarhc) %>%784      na.omit()785    if (nrow(data_hc) < 10) {786      output$modelOutputhc <- renderPrint({ "Dataset is too small after removing NA values." })787      return()788    }789    hc_centroid <- hclust(dist(scale(data_hc)), method = "centroid")790    return(hc_centroid)791  })792  793  794  #Average Dendogram795  output$averageDendrogram <- renderPlotly({796    hc_average <- average_hc_reactive()797    req(datahc(), input$numCentershc)  # Ensure the scaled data and number of clusters are available798    hc_average <- hclust(dist(datahc()), method = "average")799    # Directly cut the dendrogram800    clusters <- cutree(hc_average, k = input$numCentershc)801    # Plot the dendrogram802    ggdendrogram(hc_average, rotate = FALSE) + 803      labs(title = "Average Linkage with Scaled Features") +804      geom_hline(yintercept = which.max(table(clusters)), linetype = "dashed")805  })806  807  output$silhouettePlotHCave <- renderPlotly({808    hc_average <- average_hc_reactive()809    req(datahc(), input$numCentershc)  # Ensure the scaled data and number of clusters are available810    # Compute hierarchical clustering with average linkage811    hc_average <- hclust(dist(datahc()), method = "average")812    # Cut the dendrogram to create cluster assignments813    clusters <- cutree(hc_average, k = input$numCentershc)814    # Compute the silhouette information815    silhouette_info <- silhouette(clusters, dist(datahc()))816    # Visualize the silhouette plot817    fviz_silhouette(silhouette_info) + 818      labs(title = "Silhouette Plot for Hierarchical Clustering (Average Linkage)")819  })820  821  #Centroid Dendogram822  output$centroidDendrogram <- renderPlotly({823    hc_centroid <- centroid_hc_reactive()824    req(datahc(), input$numCentershc)  # Ensure the scaled data and number of clusters are available825    hc_centroid <- hclust(dist(datahc()), method = "centroid")826    # Directly cut the dendrogram827    clusters <- cutree(hc_centroid, k = input$numCentershc)828    # Plot the dendrogram829    ggdendrogram(hc_centroid, rotate = FALSE) + 830      labs(title = "Centroid Linkage with Scaled Features") +831      geom_hline(yintercept = which.max(table(clusters)), linetype = "dashed")832  })833  834  output$silhouettePlotHCcen <- renderPlotly({835    hc_centroid <- centroid_hc_reactive()836    req(datahc(), input$numCentershc)  # Ensure the scaled data and number of clusters are available837    # Compute hierarchical clustering with centroid linkage838    hc_centroid <- hclust(dist(datahc()), method = "centroid")839    # Cut the dendrogram to create cluster assignments840    clusters <- cutree(hc_centroid, k = input$numCentershc)841    # Compute the silhouette information842    silhouette_info <- silhouette(clusters, dist(datahc()))843    # Visualize the silhouette plot844    fviz_silhouette(silhouette_info) + 845      labs(title = "Silhouette Plot for Hierarchical Clustering (Centroid Linkage)")846  })847  848  #ward.D2  Dendogram849  wardd2_hc_reactive <- eventReactive(input$runwddhc, {  # Please make sure you have a separate button ID for ward.D2 linkage850    req(datahc(), input$independentVarhc)851    # Early return if conditions are not met852    if (length(input$independentVarhc) == 0) {853      output$modelOutputhc <- renderPrint({ "Please select the second variable." })854      return()855    }856    data_hc <- datahc() %>%857      dplyr::select(input$independentVarhc) %>%858      na.omit()859    if (nrow(data_hc) < 10) {860      output$modelOutputhc <- renderPrint({ "Dataset is too small after removing NA values." })861      return()862    }863    hc_wardd2 <- hclust(dist(scale(data_hc)), method = "ward.D2")864    return(hc_wardd2)865  })866  867  868  output$wdd2Dendrogram <- renderPlotly({869    hc_wardd2 <- wardd2_hc_reactive()870    req(datahc(), input$numCentershc)  # Ensure the scaled data and number of clusters are available871    hc_wardd2 <- hclust(dist(datahc()), method = "ward.D2")872    # Directly cut the dendrogram873    clusters <- cutree(hc_wardd2, k = input$numCentershc)874    # Plot the dendrogram875    ggdendrogram(hc_wardd2, rotate = FALSE) + 876      labs(title = "Ward D2 Linkage with Scaled Features") +877      geom_hline(yintercept = which.max(table(clusters)), linetype = "dashed")878  })879  880  output$silhouettePlotHCwdd2 <- renderPlotly({881    hc_wardd2 <- wardd2_hc_reactive()882    req(datahc(), input$numCentershc)  # Ensure the scaled data and number of clusters are available883    # Compute hierarchical clustering with ward.D2 linkage884    hc_wardd2 <- hclust(dist(datahc()), method = "ward.D2")885    # Cut the dendrogram to create cluster assignments886    clusters <- cutree(hc_wardd2, k = input$numCentershc)887    # Compute the silhouette information888    silhouette_info <- silhouette(clusters, dist(datahc()))889    # Visualize the silhouette plot890    fviz_silhouette(silhouette_info) + 891      labs(title = "Silhouette Plot for Hierarchical Clustering (Ward D2 Linkage)")892  })893  894  #WPGMA  Dendogram895  mcqu_hc_reactive <- eventReactive(input$runmchc, {  # Please make sure you have a separate button ID for mcquitty linkage896    req(datahc(), input$independentVarhc)897    # Early return if conditions are not met898    if (length(input$independentVarhc) == 0) {899      output$modelOutputhc <- renderPrint({ "Please select the second variable." })900      return()901    }902    data_hc <- datahc() %>%903      dplyr::select(input$independentVarhc) %>%904      na.omit()905    if (nrow(data_hc) < 10) {906      output$modelOutputhc <- renderPrint({ "Dataset is too small after removing NA values." })907      return()908    }909    hc_mcqu <- hclust(dist(scale(data_hc)), method = "mcquitty")910    return(hc_mcqu)911  })912  913  914  output$mcquDendrogram <- renderPlotly({915    hc_mcqu <- mcqu_hc_reactive()916    req(datahc(), input$numCentershc)  # Ensure the scaled data and number of clusters are available917    hc_mcqu <- hclust(dist(datahc()), method = "mcquitty")918    # Directly cut the dendrogram919    clusters <- cutree(hc_mcqu, k = input$numCentershc)920    # Plot the dendrogram921    ggdendrogram(hc_mcqu, rotate = FALSE) + 922      labs(title = "Mcquity Linkage with Scaled Features") +923      geom_hline(yintercept = which.max(table(clusters)), linetype = "dashed")924  })925  926  output$silhouettePlotHCmc <- renderPlotly({927    hc_mcqu <- mcqu_hc_reactive()928    req(datahc(), input$numCentershc)  # Ensure the scaled data and number of clusters are available929    # Compute hierarchical clustering with mcquitty linkage930    hc_mcqu <- hclust(dist(datahc()), method = "mcquitty")931    # Cut the dendrogram to create cluster assignments932    clusters <- cutree(hc_mcqu, k = input$numCentershc)933    # Compute the silhouette information934    silhouette_info <- silhouette(clusters, dist(datahc()))935    # Visualize the silhouette plot936    fviz_silhouette(silhouette_info) + 937      labs(title = "Silhouette Plot for Hierarchical Clustering (Mcquity Linkage)")938  })939  940  ###Density-based spatial clustering of applications - DBSCAN941  datadbscan <- reactiveVal(NULL)942  dbscan_model_reactive <- reactiveVal()943  # Load and clean data944  observeEvent(input$loaddbscan, {945    req(input$dbscaninput)946    file <- input$dbscaninput947    if (!is.null(file)) {948      # Reading and cleaning data949      data_df <- read_data(file$datapath)950      data_df <- clean_column_names(data_df)951      952      # Setting the reactive value953      datadbscan(data_df)954      955      # Updating UI elements956      updateSelectInput(session, "independentVardbscan", choices = colnames(data_df))957    }958  })959  960  961  output$dataSummarydbscan <- renderPrint({962    req(datadbscan())963    summary(datadbscan())964  }) 965  966  #kNN Neighboring967  kNN_dbscan_reactive <- eventReactive(input$rundbscandist, {  # Please make sure you have a separate button ID for mcquitty linkage968    req(datadbscan(), input$independentVardbscan)969    # Early return if conditions are not met970    if (length(input$independentVardbscan) == 0) {971      output$modelOutputdbscan <- renderPrint({ "Please select the second variable." })972      return()973    }974    data_dbscan <- datadbscan() %>%975      dplyr::select(input$independentVardbscan) %>%976      na.omit()977    if (nrow(data_dbscan) < 10) {978      output$modelOutputdbscan <- renderPrint({ "Dataset is too small after removing NA values." })979      return()980    }981    dbscan_model <- scale(data_dbscan)982    return(dbscan_model)983  })984  985  output$rundbscandist <- renderPlot({986    dbscan_model <- kNN_dbscan_reactive()987    req(dbscan_model)988    989    # Assuming dbscan_model is scaled appropriately990    dists <- kNNdist(dbscan_model, k = 10)991    plot(dists, type='l', main="kNN distance")992    abline(h = 0.5, col = 'red', lty = 2)  # Example line, adjust based on elbow993    994    # Heuristic to find the elbow point995    diff_dists <- diff(dists)996    optimal_eps <- which.max(diff_dists)997    998    # Add a vertical line at the optimal eps value999    abline(v = optimal_eps, col = 'blue', lwd = 2)1000    1001    # Annotate the optimal eps value on the plot1002    text(x = optimal_eps, y = dists[optimal_eps], labels = paste("Eps:", round(dists[optimal_eps], 2)), pos = 4, col = 'blue')1003  })1004  1005  1006  observeEvent(input$rundbscan, {1007    req(datadbscan(), input$independentVardbscan)1008    1009    withProgress(message = 'Model is being trained...', value = 0, {1010      incProgress(0.1)1011      data_dbscan <- datadbscan() %>%1012        dplyr::select(input$independentVardbscan) %>%1013        na.omit()1014      1015      # Check for variable selection and data size1016      if (length(input$independentVardbscan) == 0 || nrow(data_dbscan) < 10) {1017        output$modelOutputdbscan <- renderPrint({ "Please check your variable selection and ensure the dataset is not too small." })1018        incProgress(1.0)1019        return()1020      }1021      incProgress(0.3)1022      # Fit the DBSCAN model1023      dbscan_model <- dbscan(data_dbscan, eps = input$numepsdbscan)1024      1025      # Combine data with cluster labels1026      clustering_results <- cbind(data_dbscan, cluster = dbscan_model$cluster)1027      incProgress(0.7)1028      # Save the clustering results in a reactive value1029      dbscan_model_reactive(clustering_results)1030      1031      # Model summary1032      output$rundbscan <- renderPrint({ print(dbscan_model) })1033      1034      incProgress(1.0)1035    })1036  })1037  1038  1039  # Use the clustering results for plotting1040  output$clusteringPlotdbscan <- renderPlotly({1041    clustering_results <- dbscan_model_reactive()1042    1043    if (is.null(clustering_results) || nrow(clustering_results) == 0) {1044      print("No data available for plotting.")1045      return()1046    }1047    1048    selected_columns <- input$independentVardbscan1049    1050    if (!"cluster" %in% names(clustering_results) || any(is.na(clustering_results$cluster))) {1051      print("Cluster assignments are missing or contain NA values.")1052      return()1053    }1054    1055    data_for_plot <- clustering_results[, selected_columns]1056    1057    # Create a pseudo clustering object for fviz_cluster1058    pseudo_cluster_obj <- list(1059      data = data_for_plot,1060      cluster = clustering_results$cluster1061    )1062    1063    # Visualization using fviz_cluster1064    fviz_cluster(pseudo_cluster_obj, geom = "point", stand = FALSE)1065    1066  })1067  1068  output$silhouettePlotdbscan <- renderPlotly({1069    clustering_results <- dbscan_model_reactive()1070    1071    if (is.null(clustering_results) || nrow(clustering_results) == 0) {1072      print("No data available for silhouette analysis.")1073      return()1074    }1075    1076    selected_columns <- input$independentVardbscan1077    1078    if (!"cluster" %in% names(clustering_results) || any(is.na(clustering_results$cluster))) {1079      print("Cluster assignments are missing or contain NA values.")1080      return()1081    }1082    1083    data_for_plot <- clustering_results[, selected_columns]1084    clusters <- clustering_results$cluster1085    1086    # Compute distance matrix if not already computed1087    dist_matrix <- dist(data_for_plot)1088    1089    # Compute silhouette values1090    sil_values <- silhouette(clusters, dist_matrix)1091    1092    # Visualization using fviz_silhouette1093    fviz_silhouette(sil_values)1094  })1095  1096  ###Associated Rule Learning1097  dataarl <- reactiveVal(NULL)  # Will hold the transactions object1098  buttonClicked <- reactiveVal(FALSE)1099  # Reactive value for storing the raw data1100  rawData <- reactiveVal(NULL)1101  1102  observeEvent(input$loadarl, {1103    req(input$arlinput)1104    # After reading the file1105    if (tools::file_ext(input$arlinput$datapath) == "csv") {1106      df <- read.csv(input$arlinput$datapath, stringsAsFactors = FALSE)1107    } else if (tools::file_ext(input$arlinput$datapath) == "xlsx") {1108      df <- readxl::read_excel(input$arlinput$datapath)1109    }1110    # Make sure df is a data frame and then store it1111    rawData(df)  # Assuming rawData is meant to store the raw data frame1112    1113    # Update UI for column selection1114    updateSelectInput(session, "targetarl", "Select ID Column", choices = colnames(df))1115    updateSelectInput(session, "itemsColumn", "Select Transaction Column", choices = colnames(df))1116    1117    buttonClicked(FALSE)  # Reset the button click status1118  })1119  1120  # Create a separate event for when the user confirms the column selection and clicks another action button to run ARL1121  observeEvent(input$runarl, {1122    req(rawData(), input$targetarl, input$itemsColumn)1123    print(str(dataarl()))  # Debug: Check the structure of dataarl()1124    df <- rawData()1125    # Directly read the uploaded file again for this action, for debugging1126    if (tools::file_ext(input$arlinput$datapath) == "csv") {1127      df <- read.csv(input$arlinput$datapath, stringsAsFactors = FALSE)1128    } else if (tools::file_ext(input$arlinput$datapath) == "xlsx") {1129      df <- readxl::read_excel(input$arlinput$datapath)1130    } else {1131      stop("Unsupported file type")1132    }1133    1134    # Now df is guaranteed to be a data frame here1135    selected_data <- df %>%1136      dplyr::select(dplyr::all_of(input$targetarl), dplyr::all_of(input$itemsColumn)) %>%1137      dplyr::arrange(dplyr::all_of(input$targetarl))1138    1139    # Assuming each row is a transaction with a single item1140    # Create a unique identifier for each transaction1141    selected_data <- selected_data %>%1142      group_by(!!sym(input$targetarl)) %>%1143      summarise(Items = paste(!!sym(input$itemsColumn), collapse = ", ")) %>%1144      ungroup()1145    1146    # Write the preprocessed data to a temporary file for read.transactions1147    temp_file <- tempfile(fileext = ".csv")1148    write.table(selected_data, temp_file, row.names = FALSE, quote = FALSE, sep = ",")1149    1150    # Now read the transactions from the temporary file1151    trans <- read.transactions(temp_file, format = "basket", sep = ",", rm.duplicates = TRUE)1152    1153    # Update the reactive value holding the transactions1154    dataarl(trans)1155    1156    buttonClicked(TRUE)1157    # Cleanup: Remove the temporary file1158    unlink(temp_file)1159  })1160  1161  1162  # Assuming 'data' is your data frame and 'itemDescription' is your items column1163  preprocess_data <- function(data, itemsColumn) {1164    req(rawData(), dataarl(), input$targetarl, input$itemsColumn)1165    df <- rawData()1166    # Ensure the column is a character to avoid issues with factors1167    data[[itemsColumn]] <- as.character(data[[itemsColumn]])1168    1169    # Remove unwanted characters such as new line characters and extra spaces1170    data[[itemsColumn]] <- gsub("\n", "", data[[itemsColumn]])1171    data[[itemsColumn]] <- gsub("\"", "", data[[itemsColumn]])1172    data[[itemsColumn]] <- trimws(data[[itemsColumn]]) # Trim white spaces1173    1174    return(data)1175  }1176  1177  # Render Item Frequency Plot1178  createItemFreqPlot <- function(transactions, topN = 35) {1179    freq <- itemFrequency(transactions, type = "absolute")1180    freq_df <- data.frame(items = names(freq), frequency = freq)1181    1182    freq_df <- freq_df[order(-freq_df$frequency), ][1:topN, ]1183    1184    # Generate a palette with as many colors as bars1185    colors <- scales::hue_pal()(topN)1186    1187    ggplot(freq_df, aes(x = reorder(items, -frequency), y = frequency, fill = items)) +1188      geom_bar(stat = "identity") +1189      scale_fill_manual(values = colors) +1190      xlab("Items") +1191      ylab("Frequency") +1192      coord_flip() +1193      theme(legend.position = "none")  # Optionally hide the legend1194  }1195  1196  1197  # Use preprocess_data in the eventReactive for plotData1198  plotData <- eventReactive(input$runarl, {1199    buttonClicked(TRUE)  # Set to true when button is clicked1200    req(rawData(), dataarl(), input$targetarl, input$itemsColumn)

Showing the first 1,200 of 1276 lines. Download the file for the rest.