## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# Computing Statistical Functions

## Problem

You need to compute averages, variances, and standard deviations.

## Solution

Three types of averages are used by statisticians: the mean (layperson’s average), the median, and the mode.

The mean is trivial—simply sum using Recipe 2.6 and divide by the count.

The median is the number that falls in the middle of the set of numbers when they are sorted. If the count is even, then the mean of the two middle numbers is generally taken:

```<xsl:template name="math:median">
<xsl:param name="nodes" select="/.."/>
<xsl:variable name="count" select="count(\$nodes)"/>
<xsl:variable name="middle" select="ceiling(\$count div 2)"/>
<xsl:variable name="even" select="not(\$count mod 2)"/>

<xsl:variable name="m1">
<xsl:for-each select="\$nodes">
<xsl:sort data-type="number"/>
<xsl:if test="position(  ) = \$middle">
<xsl:value-of select=". + (\$even * ./following-sibling::*)"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>

<!-- The median -->
<xsl:value-of select="\$m1 div (\$even + 1)"/>
</xsl:template>```

Handling the even case relies on the Boolean-to-number conversion trick used in several other examples in this book. If the number of nodes is odd, `\$m1` ends up being equal to the middle node, and you divide by 1 to get the answer. On the other hand, if the number of nodes is odd, `\$m1` ends up being the sum of the two middle nodes, and you divide by two to get the answer.

The mode is the most frequently occurring element(s) in a set of elements that need not be numbers. If ...

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required