使用php查找数据数组的方差

使用php查找数据数组的方差,php,Php,我想找出值的方差,但找不到正确的均值。我添加了explode,因为在获取数组_sum()时,它显示了一个错误,即数组_sum()希望参数1为数组,字符串为给定的 <html><body> <?php $ap = '36.222.198.197.166.140'; $counte =0;$sum=0; $file_handle = fopen("results.csv", "r"); while ( $line_of_text = fgetc

我想找出值的方差,但找不到正确的均值。我添加了explode,因为在获取数组_sum()时,它显示了一个错误,即数组_sum()希望参数1为数组,字符串为给定的

 <html><body>
  <?php
  $ap = '36.222.198.197.166.140'; 
  $counte =0;$sum=0;
  $file_handle = fopen("results.csv", "r"); 
  while ( $line_of_text = fgetcsv($file_handle)){
  if ($line_of_text[2] == $ap) {
  $counte++;
   $van = explode(" ",$line_of_text[3]);
    $fMean = array_sum($van) / count($van);
   print_r ($van);
  }
  }
 fclose($file_handle);
?>
 </body></html>

您的数据不一致:

  • 前两行有逗号作为分隔符,而其他行没有
  • 第二行有一个以点结尾的IP地址
表达式
explode(“,$line_of_text[3])
毫无意义,因为
$line\u of_text[3]
是一个数字,而不是带有空格的东西。在这个结果上使用
count
也是没有意义的,因为您想要计算行数,而不是其中一个字段中的某个内容

以下是更正的版本:

$ap = '36.222.198.197.166.140'; 
$file_handle = fopen("results.csv", "r"); 
while ( $line_of_text = fgetcsv($file_handle)){
    if ($line_of_text[2] == $ap) $van[] = $line_of_text[3];
}
fclose($file_handle);
$fMean = array_sum($van) / count($van);
然后按如下方式计算方差:

$variance = array_sum(array_map(function ($x) use ($fMean) { 
    return pow($x - $fMean, 2);
}, $van)) / count($van);

你为什么要在第三场爆炸?这只是一个数字……我不确定你在第四列中解释了什么,例如在你的csv的最后一行,你有
-74
-66
-66
2.4_thresh
列中还是
5_thresh
?第2列第1行是36.222.198.197.166.140我想计算它在csv中出现了多少次,但每一次当它只是显示111时,应该是计数3,但显示111。我正在数组中转换。但是为什么要在循环中执行
array\u sum
?您需要首先构建所有值的数组,并在该数组上循环后求和。我在循环中执行,因为我必须在方差计算时使用$van或数组,因为对于方差,我使用$fVariance+=pow($line\u of_text[3]-$fMean,2);如果您在尚未确定平均值的情况下尝试计算方差,那么这将是一个错误的计算:为了知道平均值,您需要首先完成循环的所有迭代。在那之前你没有一个有效的平均数。你检查过我发布的代码了吗?谢谢,我知道我需要先找到fMean,这就是为什么我也在方差中使用它。但是如果($line_of_text[2]==$ap)在这种情况下,如果我需要找到$ap在csv中出现的次数,但我无法找到该计数值。计数($van)这一个。你测试过我提供的解决方案吗?您只需在循环后执行
count($var)
。我觉得你根本没看过我的答案。。。
$variance = array_sum(array_map(function ($x) use ($fMean) { 
    return pow($x - $fMean, 2);
}, $van)) / count($van);