Averages/Median: Difference between revisions

m (added whitespace to the task's preamble, used a larger font to better show the formulae, changed some ONES to elements.)
Line 2,203:
else /* an even number of elements */
median = (a(n/2) + a(trunc(n/2)+1) )/2;</lang>
 
 
=={{header|PowerShell}}==
This function returns an object containing the minimal amount of statistical data, including Median, and could be modified to take input directly from the pipeline.
including Median, and could be modified to take input directly from the pipeline.
 
All statistical properties could easily be added to the output object.
 
<lang PowerShell>
function GetMeasure-StatisticData
{
[CmdletBinding()]
[OutputType([doublePSCustomObject])]
Param
(
[Parameter(Mandatory=$true, Position=0)]
[ValidateNotNullOrEmpty( Position=0)]
[double[]]
$VectorData
)
 
} Begin
$Vector = $Vector | Sort-Object
 
if ($Vector.Count % 2)
{
$medianfunction =Get-Mode $Vector([double[Math]::Floor(]$Vector.Count/2Data)]
Sum : 31.6 {
if ($Data.Count -gt ($Data | Select-Object -Unique).Count)
{
$groups = $Data | Group-Object
 
return ($groups | Sort-Object -Property Count -Descending |
Where-Object {$_.Count -eq $groups[0].Count} |
ForEach-Object {[double]$_.Name})
}
else
{
return $null
}
}
 
function Get-StandardDeviation ([double[]]$Data)
{
$variance = 0
$average = $Data | Measure-Object -Average | Select-Object -Property Count, Average
 
foreach ($number in $Data)
{
$variance += [Math]::Pow(($number - $average.Average),2)
}
 
return ([Math]::Sqrt($variance / ($average.Count-1)))
}
 
function Get-Median ([double[]]$Data)
{
if ($VectorData.Count % 2)
{
return $Data[[Math]::Floor($Data.Count/2)]
}
else
{
return ($Data[$Data.Count/2], $Data[$Data.Count/2-1] | Measure-Object -Average).Average
}
}
}
elseProcess
{
$medianData = ($Vector[$Vector.Count/2], $Vector[$Vector.Count/2-1]Data | MeasureSort-Object -Average).Average
}
 
$Data | Measure-Object -MinimumMaximum -MaximumMinimum -Sum -Average |
$Vector |
Select-Object -Property Count, Minimum, Maximum, Sum, Average |
Measure-Object -Minimum -Maximum -Sum -Average |
Sum,
Select-Object -Property Count, Minimum, Maximum, Sum, Average |
Minimum,
Add-Member -MemberType NoteProperty -Name Median -Value $median -PassThru
Maximum,
@{Name='Range'; Expression={$_.Maximum - $_.Minimum}},
@{Name='Mean' ; Expression={$_.Average}} |
Add-Member -MemberType NoteProperty -Name Median -Value (Get-Median $medianData) -PassThru |
Add-Member -MemberType NoteProperty -Name StandardDeviation -Value (Get-StandardDeviation $Data) -PassThru |
Add-Member -MemberType NoteProperty -Name Mode -Value (Get-Mode $Data) -PassThru
}
}
</lang>
<lang PowerShell>
GetMeasure-StatisticData -Vector4, 5.1, 2.6, 6.47, 7, 7, 8.8, 4.61, 4.1, 1, 2, 3
</lang>
{{Out}}
<pre>
Count : 6
Minimum : 2.6
Maximum : 8.8
Sum : 31.6
Average : 5.26666666666667
Median : 4.85
</pre>
Get the median only
<lang PowerShell>
(Get-Statistic -Vector 5.1, 2.6, 6.4, 8.8, 4.6, 4.1).Median
</lang>
{{Out}}
<pre>
Count : 612
4.85
Sum : 52
Minimum : 2.61
Maximum : 8.8
Range : 7
Mean : 4.33333333333333
Median : 4.855
StandardDeviation : 2.67423169368609
Mode : {1, 7}
</pre>
Median only:
A list with an odd number of values:
<lang PowerShell>
(GetMeasure-StatisticData -Vector4, 5.1, 2.6, 8.7, 7, 7, 8, 4.61, 4.1, 1, 2, 3).Median
</lang>
{{Out}}
<pre>
4.65
</pre>
 
308

edits