Statistik med Python

For at kunne anvende statistik funktionerne skal vi importere to moduler: statistics og numpy.

import statistics as st
import numpy as np	

Deskriptorer

len()
Antal observationer
min()
Mindsteværdien
max()
Størsteværdien
st.mean()
Gennemsnit
st.median()
Median
st.mode()
Typetal

Her anvender jeg en liste over karakterer i en klasse med 10 elever

>>> import statistics as st
>>> import numpy as np
>>> klasse = [2,2,4,4,4,7,7,10,10,12]
>>> len(klasse)
10
>>> min(klasse)
2
>>> maklasse(klasse)
12
>>> st.mean(klasse)
6.2
>>> st.median(klasse)
5.5
>>> st.mode(klasse)
4	

Hvis der er mere end en observation, der det højeste antal af, f.eks. hvis der er 3 4'ere og 3 7'ere, så vil mode() svare med den første værdi. I dette tilfælde 4

Hvis du vil teste et datasæt om der er flere tal der kan være typetal kan du bruge st.multimode()

>>> klasse2 = [2,2,4,4,4,7,7,7,10,12]
>>> st.mode(klasse2)
4
>>> st.multimode(klasse2)
[4, 7]

Hvis du vil have en median, som er en del af datasættet kan du bruge st.median_low() og st.median_high().

>>> st.median(klasse)
5.5
>>> st.median_low(klasse)
4
>>> st.median_high(klasse)
7

Den første median (st.median()) bliver beregnet ved at tage de to tal i midten og dividere med 2, fordi det er et lige antal observationer: \( \frac {4+5} {2} = 5,5 \).

De to andre er tal fra selve datasættet.

Varians og spredning

st.stdev
Spredning ved stikprøver
st.variance()
Variansen ved stikprøver
st.pstdev()
Spredning ved populationer
st.pvariance()
Varians ved populationer
>>> st.stdev(klasse)
3.7564758898615485
>>> st.variance(klasse)
14.11111111111111
>>> st.pstdev(klasse)
3.541639433446495
>>> st.pvariance(klasse)
12.54320987654321

Percentiler

For at finde percentiler anvendes funktionen np.percentile(*DATASÆT*,*PERCENTIL*). Herunder findes kvartilsættet, altså 25%, 50% og 75%

>>> np.percentile(klasse,25)
4.0
>>> np.percentile(klasse,50)
5.5
>>> np.percentile(klasse,75)
9.25	

Varians og spredning

Deskriptor funktion
Varians (stikprøve) st.variance()
Spredning (stikprøve) st.stdev()
	>>> st.variance(x)
12.622222222222222
>>> st.stdev(x)
3.552776691859794	

Percentiler

	import statistics as st
import numpy as np

x = [2, 2, 4, 4, 4, 7, 7, 10, 10, 12]

print("Observationssæt: \n----------------\n{0}".format(x))

print("Percentilsæt:")

for i in range(10,101,10):

	print("Værden for den {0}. percentil er: {1}".format(i, round(np.percentile(x,i),1)))	

Output

	========================= RESTART: /home/tj/test.py =========================
Observationssæt: 
----------------
[2, 2, 4, 4, 4, 7, 7, 10, 10, 12]
Percentilsæt:
Værden for den 10. percentil er: 2.0
Værden for den 20. percentil er: 3.6
Værden for den 30. percentil er: 4.0
Værden for den 40. percentil er: 4.0
Værden for den 50. percentil er: 5.5
Værden for den 60. percentil er: 7.0
Værden for den 70. percentil er: 7.9
Værden for den 80. percentil er: 10.0
Værden for den 90. percentil er: 10.2
Værden for den 100. percentil er: 12.0

Læs mere om statistik

Program eksempler

Diskret data

_
_
Kode til diskret data
		import statistics as st
import numpy as np
import matplotlib.pyplot as plt

# https://docs.python.org/3/library/statistics.html

x = [2,2,4,4,4,7,7,10,10,12]

print("Observationssæt: \n----------------\n{0}".format(x))

#antal
print("\nAntal observationer: {0}".format(len(x)))

#gennemsnit
print("\nGennemsnit = {0}".format(st.mean(x)))
#median
print("\nMedian: {0}".format(st.median(x)))

#min og max værdi
print("\nMindste værdi: {0}".format(min(x)))

print("\nMaksimale værdi: {0}".format(max(x)))


try:
	st.mode(x)
	print("\nTypetal: {0}".format(st.mode(x)))
	
except:
	print("\nDer er ikke noget typetal (flere værdier med samme antal")

#Varians
print("\nVarians: {0}".format(round(st.variance(x),2)))

#Spredning
print("\nSpredning: {0}".format(round(st.stdev(x),2)))

# Finder unikke værdier
x_unik = np.unique(x)
# Finder antal for hver unik værdi
x_unik_antal = []
for i in x_unik:
	x_unik_antal.append(x.count(i))
	
#plotfunktionen
plt.xticks(x_unik, x_unik) 
plt.bar(x_unik,x_unik_antal, width=0.8)
plt.title("Kontinuert data")
plt.show()		
	

Kontinuert data

_
_
Kode til kontinuert data
		import statistics as st
import numpy as np
import matplotlib.pyplot as plt

x = [156,159,161,164,165,167, 168,171,173,173,174,176,177,177,179,179,180,181,183,183,185,187,192,194,198,201]

print("Observationssæt: \n----------------\n{0}".format(x))

#antal
print("\nAntal observationer: {0}".format(len(x)))
#gennemsnit
print("\nGennemsnit = {0}".format(round(st.mean(x),2)))
#median
print("\nMedian: {0}{1}".format(st.median(x),2))
#min og max værdi
print("\nMindste værdi: {0}".format(min(x)))
print("\nmaksimale værdi: {0}".format(max(x)))

startværdi = 150
spring = 10
x_ny = []

#ændrer datasættet til middelværdier ud fra startværdi og spring
for i in range(len(x)):
	if x[i]< startværdi+spring and x[i]>=startværdi:
		x_ny.append(startværdi+1/2*spring)
	else:
		startværdi += spring
		x_ny.append(startværdi+1/2*spring)
	
#print(x_ny)
	
try:
	st.mode(x_ny)
	print("\nTypeintervallet er: [{0} - {1}[".format(st.mode(x_ny)-spring/2,st.mode(x_ny)+spring/2))
except:
	print("\nDer er ikke noget typetal (flere værdier med samme antal")

#Varians
print("\nVarians: {0}".format(round(st.variance(x_ny),2)))
#Spredning
print("\nSpredning: {0}".format(round(st.stdev(x_ny),2)))
		
# Finder unikke værdier
x_unik = np.unique(x_ny)
# Finder antal for hver unik værdi
x_unik_antal = []
for i in x_unik:
	x_unik_antal.append(x_ny.count(i))
	
#plotfunktionen
plt.xticks(x_unik, x_unik) 
plt.bar(x_unik,x_unik_antal, width=0.8)
plt.title("Kontinuert data")
plt.show()