1 # SPDX-FileCopyrightText: 2023 Xavier Bordoy
3 # SPDX-License-Identifier: MIT
5 # Biblioteca per a tenir diverses funcions amb ruby
8 # Mòdul per als exercicis d'Estadística
10 ## Retorna la llista de freqüències absolutes de la llista passada com a paràmetre
11 def self.taula_frequencies(llista)
14 llista.uniq.each do |valor|
15 taulafreq[valor] = llista.select {|i| i == valor }.length
18 return taulafreq.sort.to_h
19 # Format {valor => freq, ...}
22 ## Retorna la llista de freqüències relatives de la llista passada com a paràmetre
23 def self.taula_frequencies_relatives(llista)
25 # Calculem la taula de freqüències absolutes
26 taulafreq = taula_frequencies(llista)
28 # I ara la taula de freqüències relatives
29 taulafreqrel = Hash.new
31 taulafreq.each do |valor, freq|
32 taulafreqrel[valor] = (freq/total.to_f).round(3)
36 # Format {valor => freqrel, ...}
40 ## Retorna la moda de la llista passada com a paràmetre
41 def self.moda(llista, cadenaformat=", ")
42 # Seleccion les freqüències
43 frequencies = taula_frequencies(llista).values
44 return frequencies.each_index.select {|index| frequencies[index] == frequencies.max}.map {|i| taula_frequencies(llista).keys[i] }.join(cadenaformat)
45 # Format Moda_1 <cadenaformat> Moda_2 <cadenaformat> etc.
48 ## Retorna la mediana de la llista passada com a paràmetre
49 def self.mediana(llista)
51 return llista.sort[llista.length/2]
53 return ((llista.sort[llista.length/2-1]+llista.sort[llista.length/2])/2.0)
57 ## Retorna la mitjana aritmètica de la llista passada com a paràmetre
58 def self.mitjana(llista)
59 return llista.sum.fdiv(llista.size).round(3)
62 ## Retorna la desviació mitjana de la llista passada com a paràmetre
63 def self.desviacio_mitjana(llista)
65 auxiliar = Array.new()
67 auxiliar.push((p - m).abs)
70 return mitjana(auxiliar)