如何在另一个表中显示每个簇中“kondisi”列有多少个值 1,2,3?

问题描述 投票:0回答:1

This image is the example of the dataset

所以我向 ChatGPT 和另一个 AI 助手询问了这个问题,但结果是 0。

This image is table to show what i want

因此,从关于表格的图像中显示我想要的内容,“Baik”列表示数据集中的“kondisi”列中有多少个数字 1,与“sedang”相同: 2 ; “buruk”:3;

下面是我尝试修复的代码,因为结果是 0 :

<h4>Jumlah Cluster</h4>
<table class="table table-border">
  <thead>
    <th>Cluster</th>
    <th>Jumlah</th>
    <th>Baik</th>
    <th>Sedang</th>
    <th>Buruk</th>
  </thead>
  <tbody>
    <?php
    if ($this->session->userdata("kmeans_result") !== NULL) {
      $res = array();
      $kondisiCounts = array();
      foreach ($this->session->userdata("kmeans_result") as $key) {
        if (!isset($res[$key[1]])) {
          $res[$key[1]] = 1;
        } else {
          $res[$key[1]]++;
        }

        // Check if 'kondisi' key exists and access it safely
        $kondisi = $key['kondisi'] ?? 0;

        // Count Kondisi values
        $clusterId = $key[1];
        if (!isset($kondisiCounts[$clusterId])) {
          $kondisiCounts[$clusterId] = array('Baik' => 0, 'Sedang' => 0, 'Buruk' => 0);
        }
        // Increment the count based on the Kondisi value
        if ($kondisi === 1) {
          $kondisiCounts[$clusterId]['Baik']++;
        } elseif ($kondisi === 2) {
          $kondisiCounts[$clusterId]['Sedang']++;
        } elseif ($kondisi === 3) {
          $kondisiCounts[$clusterId]['Buruk']++;
        }
      }

      foreach ($res as $key => $val) {
        ?>
        <tr>
          <td><?=$key?></td>
          <td><?=$val?></td>
          <td><?=$kondisiCounts[$key]['Baik'] ?? 0?></td>
          <td><?=$kondisiCounts[$key]['Sedang'] ?? 0?></td>
          <td><?=$kondisiCounts[$key]['Buruk'] ?? 0?></td>
        </tr>
        <?php
      }
    }
    ?>
  </tbody>
</table>

数据集来自会话:$this->session->userdata("kmeans_result")

下面是显示结果并成为第一张图像中的数据集的代码,当我向 AI 询问时,我使用此代码作为参考,但他们的解决方案仍然在每列中给出结果 0 :

<h4>Hasil Cluster K-Means</h4>
                <div class="table-responsive" id="export">
                  <table class="table table-border">
                    <thead>
                      <?php
                        foreach ($this->session->userdata("process_datasetindex") as $n => $v) {
                          if($n==0){
                            $obj = $v;
                          }
                          ?>
                          <th><?=$v?></th>
                          <?php
                        }
                      ?>
                      <th>Cluster</th>
                    </thead>
                    <?php
                    if($this->session->userdata("kmeans_result")!==NULL){
                      $resk = $this->session->userdata("kmeans_result");
                      aasort($resk,1);
                      foreach ($resk as $key) {
                        ?>
                        <tr>
                          <td><?=$key[0]?></td>
                          <?php
                           foreach ($this->session->userdata("process_datasetindex") as $n => $v) {
                             if($n>0){
                               $attr = array_column($this->session->userdata("process_dataset"),$v,$obj);
                               ?>
                               <td><?=$attr[$key[0]]?></td>
                               <?php
                             }

                           }
                          ?>
                          <td><?=$key[1]?></td>
                        </tr>
                        <?php
                      }
                    }
                    ?>
                  </table>
php dataset cluster-analysis k-means
1个回答
0
投票

Nvm 我现在知道答案了,原来数据在不同的会话中位于不同的数组中,因此用于计算该集群中的数据的数据位于会话内部:

$this->session->userdata("kmeans_result")
。 但包括“kondisi”在内的其他数据都在里面
$this->session->userdata("process_dataset")

因此,首先我合并数组并计算 1,2,3 的每个簇中“kondisi”列中有多少数据 1,2,3。完整代码:

<table class="table table-border">
                  <thead>
                      <th>Cluster</th>
                      <th>Kondisi Baik</th>
                      <th>Kondisi Sedang</th>
                      <th>Kondisi Buruk</th>
                  </thead>
                  <?php
                  if ($this->session->userdata("kmeans_result") !== NULL && $this->session->userdata("process_dataset") !== NULL) {
                      // Get the data from both session variables
                      $kmeansResult = $this->session->userdata("kmeans_result");
                      $processDataset = $this->session->userdata("process_dataset");
                      
                      // Create an associative array to store cluster assignments based on the timestamp
                      $clusterAssignments = array();
                      foreach ($kmeansResult as $result) {
                          $timestamp = $result[0];
                          $cluster = $result[1];
                          $clusterAssignments[$timestamp] = $cluster;
                      }
                      
                      // Initialize arrays to keep track of 'kondisi' counts for each cluster
                      $clusterKondisiCounts = array();
                      
                      // Iterate through the dataset to count 'kondisi' values for each cluster
                      foreach ($processDataset as $data) {
                          $timestamp = $data['tanggaljam'];
                          $kondisi = $data['kondisi'];
                          
                          // Get the cluster assignment for the current data point
                          $cluster = $clusterAssignments[$timestamp];
                          
                          // Initialize the count for the cluster if it doesn't exist
                          if (!isset($clusterKondisiCounts[$cluster])) {
                              $clusterKondisiCounts[$cluster] = array(0, 0, 0);
                          }
                          
                          // Increment the count for the corresponding 'kondisi' value
                          $clusterKondisiCounts[$cluster][$kondisi - 1]++;
                      }
                      
                      // Display the counts in the table
                      foreach ($clusterKondisiCounts as $cluster => $counts) {
                      ?>
                      <tr>
                          <td><?= $cluster ?></td>
                          <td><?= $counts[0] ?></td>
                          <td><?= $counts[1] ?></td>
                          <td><?= $counts[2] ?></td>
                      </tr>
                      <?php
                      }
                  }
                  ?>
              </table>

© www.soinside.com 2019 - 2024. All rights reserved.