Frekvenstabeller i Python
Python er et flott verktøy for å lage og analysere frekvenstabeller. Med enkle lister, for-løkker og standardbiblioteket kan du organisere data, telle forekomster og beregne statistiske verdier på en enkel og effektiv måte.
Hva kan du lære i dette kapittelet
- Hvordan lage en frekvenstabell i Python med grunnleggende metoder
- Bruke for-løkker for å telle forekomster
- Beregne relativ frekvens og kumulativ frekvens
- Generere en liste med verdier basert på en frekvenstabell
- Bruke statistics-modulen for å beregne statistiske verdier
Lage en enkel frekvenstabell i Python
En frekvenstabell viser hvor ofte ulike verdier forekommer i et datasett. I Python kan du lage frekvenstabeller enkelt ved å telle forekomster i en liste.
Metode 1: Telle forekomster med en for-løkke
Denne metoden bruker en for-løkke for å telle forekomster av hver verdi i datasettet.
Steg-for-steg:
- Definer datasettet som en liste
- Finn unike verdier i datasettet
- Telle forekomster av hver unik verdi
# Opprette eksempeldata: antall mål per kamp
goals_data = [2, 1, 0, 3, 2, 0, 1, 2, 4, 2, 1, 3, 0, 2, 2, 1, 1, 2, 1]
# Finn unike verdier
unique_values = []
for value in goals_data:
if value not in unique_values:
unique_values.append(value)
# Sorter de unike verdiene
unique_values.sort()
# Telle forekomster av hver verdi
frequencies = []
for value in unique_values:
count = 0
for data_point in goals_data:
if data_point == value:
count += 1
frequencies.append(count)
# Skriv ut frekvenstabell
print("Frekvenstabell:")
print("Verdi | Frekvens")
print("--------------")
for i in range(len(unique_values)):
print(f"{unique_values[i]} | {frequencies[i]}")
# Resultat:
# Frekvenstabell:
# Verdi | Frekvens
# --------------
# 0 | 3
# 1 | 5
# 2 | 8
# 3 | 2
# 4 | 1
Metode 2: Bruke innebygde Python-funksjoner
Denne metoden bruker Pythons innebygde funksjoner som list.count() for å telle forekomster.
# Opprette eksempeldata
goals_data = [2, 1, 0, 3, 2, 0, 1, 2, 4, 2, 1, 3, 0, 2, 2, 1, 1, 2, 1]
# Finn unike verdier og sorter dem
unique_values = sorted(set(goals_data))
# Lag en frekvenstabell med count-metoden
frequencies = [goals_data.count(value) for value in unique_values]
# Skriv ut frekvenstabell
print("Verdi | Frekvens")
print("--------------")
for i in range(len(unique_values)):
print(f"{unique_values[i]} | {frequencies[i]}")
# Beregn totalt antall observasjoner
total = sum(frequencies)
print(f"Totalt antall: {total}")
Tips:
Python har flere nyttige innebygde funksjoner for å jobbe med lister:
set()
finner unike verdier i en listelist.count()
teller forekomster av en verdisorted()
sorterer verdiene i stigende rekkefølgesum()
summerer alle verdiene i en liste
Beregne relativ og kumulativ frekvens
La oss utvide frekvenstabell-eksempelet til å inkludere relativ og kumulativ frekvens.
# Opprette eksempeldata
goals_data = [2, 1, 0, 3, 2, 0, 1, 2, 4, 2, 1, 3, 0, 2, 2, 1, 1, 2, 1]
# Finn unike verdier og sorter dem
unique_values = sorted(set(goals_data))
# Lag frekvensdata
frequencies = [goals_data.count(value) for value in unique_values]
total = sum(frequencies)
# Beregn relativ frekvens (andeler)
relative_frequencies = [count / total for count in frequencies]
# Beregn kumulativ frekvens
cumulative_frequencies = []
current_sum = 0
for count in frequencies:
current_sum += count
cumulative_frequencies.append(current_sum)
# Beregn kumulativ relativ frekvens
cumulative_relative = [cum / total for cum in cumulative_frequencies]
# Skriv ut komplett frekvenstabell
print("Verdi | Frekvens | Rel.Frekv | Kum.Frekv | Kum.Rel.Frekv")
print("---------------------------------------------------")
for i in range(len(unique_values)):
print(f"{unique_values[i]} | {frequencies[i]} | {relative_frequencies[i]:.4f} | {cumulative_frequencies[i]} | {cumulative_relative[i]:.4f}")
# Resultat:
# Verdi | Frekvens | Rel.Frekv | Kum.Frekv | Kum.Rel.Frekv
# ---------------------------------------------------
# 0 | 3 | 0.1579 | 3 | 0.1579
# 1 | 5 | 0.2632 | 8 | 0.4211
# 2 | 8 | 0.4211 | 16 | 0.8421
# 3 | 2 | 0.1053 | 18 | 0.9474
# 4 | 1 | 0.0526 | 19 | 1.0000
Søylediagram med matplotlib (valgfri bonus)
For de som vil utforske visualisering, kan matplotlib-biblioteket brukes:
import matplotlib.pyplot as plt
# Fra dataene over
x = unique_values
y = frequencies
# Opprette søylediagram
plt.figure(figsize=(10, 6))
plt.bar(x, y, color='skyblue')
plt.xlabel('Antall mål')
plt.ylabel('Frekvens')
plt.title('Frekvensfordeling av antall mål per kamp')
plt.xticks(x)
plt.grid(axis='y', linestyle='--', alpha=0.7)
# Legg til verdier over søylene
for i, v in enumerate(y):
plt.text(i, v + 0.1, str(v), ha='center')
plt.show()
Her er et søylediagram som viser frekvensfordelingen av antall mål per kamp:
Beregne statistikk fra en frekvenstabell
Ofte har vi data i form av en frekvenstabell der hver verdi forekommer et bestemt antall ganger. La oss se hvordan vi kan beregne statistiske mål fra en slik tabell.
from statistics import mean, median, mode, pstdev
# Frekvenstabell som liste av tupler: (verdi, frekvens)
frekvenstabell = [(0, 8), (1, 5), (2, 6), (4, 3)]
# Konvertere frekvenstabell til liste med rådata
liste = []
for verdi, frekvens in frekvenstabell:
liste += frekvens*[verdi]
print(f"Generert liste: {liste}")
# Output: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 4, 4, 4]
# Nå kan vi beregne statistikk
print(f"Gjennomsnitt: {mean(liste):.2f}")
print(f"Median: {median(liste)}")
print(f"Typetall: {mode(liste)}")
print(f"Standardavvik: {pstdev(liste):.2f}")
print(f"Antall verdier: {len(liste)}")
print(f"Minste verdi: {min(liste)}")
print(f"Største verdi: {max(liste)}")
# En kortere måte med list comprehension
liste2 = [verdi for verdi, frekvens in frekvenstabell for _ in range(frekvens)]
print(f"Liste laget med list comprehension: {liste2}")
Interaktivt eksempel
Prøv deg frem med frekvenstabeller! Endre tallene i koden under og se hvordan både utregningen og diagrammet oppdateres.
Praktisk eksempel: Karakterfordeling
La oss si at vi har en karakterfordeling i en klasse: 3 elever fikk karakteren 3, 5 elever fikk karakteren 4, 10 elever fikk karakteren 5, og 2 elever fikk karakteren 6.
from statistics import mean, median, mode
# Karakterfordeling
karakterer = [3, 4, 5, 6]
antall = [3, 5, 10, 2]
# Generer liste med alle karakterer
alle_karakterer = []
for i in range(len(karakterer)):
for j in range(antall[i]):
alle_karakterer.append(karakterer[i])
# Beregn statistikk
print(f"Alle karakterer: {alle_karakterer}")
print(f"Gjennomsnitt: {mean(alle_karakterer):.2f}")
print(f"Median: {median(alle_karakterer)}")
print(f"Typetall: {mode(alle_karakterer)}")
print(f"Antall elever: {len(alle_karakterer)}")
# For å telle opp antall som fikk karakter 5 eller bedre
antall_over_4 = 0
for karakter in alle_karakterer:
if karakter >= 5:
antall_over_4 += 1
print(f"Antall med karakter 5 eller 6: {antall_over_4}")
print(f"Andel med karakter 5 eller 6: {antall_over_4/len(alle_karakterer):.2f}")
Bonus: Avansert visualisering
For de som ønsker å utforske videre, kan du bruke matplotlib for å visualisere både frekvens og kumulativ frekvens i samme diagram:
import matplotlib.pyplot as plt
# Fra dataene i frekvenstabellen
x = verdier
y_frekvens = frekvenser
y_kumulativ = cumulative_frequencies
# Opprette figur med to y-akser
fig, ax1 = plt.subplots(figsize=(10, 6))
# Søylediagram for frekvens
bars = ax1.bar(x, y_frekvens, color='skyblue', alpha=0.7, label='Frekvens')
ax1.set_xlabel('Verdier')
ax1.set_ylabel('Frekvens', color='royalblue')
ax1.tick_params(axis='y', labelcolor='royalblue')
# Legg til en sekundær y-akse for kumulativ frekvens
ax2 = ax1.twinx()
ax2.plot(x, y_kumulativ, color='red', marker='o',
linestyle='-', linewidth=2, label='Kumulativ frekvens')
ax2.set_ylabel('Kumulativ frekvens', color='red')
ax2.tick_params(axis='y', labelcolor='red')
plt.title('Frekvens og kumulativ frekvens')
# Kombiner legends
lines, labels = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines + lines2, labels + labels2, loc='upper left')
plt.tight_layout()
plt.show()
Her er et diagram som viser både frekvens og kumulativ frekvens:
Oppsummering
I dette kapittelet har du lært hvordan du kan:
- Lage frekvenstabeller med grunnleggende Python
- Beregne relativ og kumulativ frekvens
- Generere en liste med alle verdier basert på en frekvenstabell
- Bruke statistics-modulen for å beregne gjennomsnitt, median, typetall og standardavvik
- Bruke for-løkker og if-setninger for å analysere data
Disse ferdighetene gir deg et solid grunnlag for statistisk analyse med Python, og du kan nå bruke dem til å analysere dine egne datasett.