Python-logo fra https://www.python.org/community/logos/
I Statistisk Dataanlyse med Python skal I
bruge programpakken python til at lave de numeriske beregninger.
Med hensyn til download af python og relevante pakker henviser jeg til
indledningen til kapitel Py.
Python er modulopbygget, og de forskellige beregninger kræver derfor, at
de relevante dele af python importeres før beregningen.
Se eventuelt det skjulte punkt Import i start af pythonprogram i
indledningen til kapitel Py.
Kør nedenstående kommando, og prøv egne små regnestykker
ved at ændre på koden.
xxxxxxxxxx
1
print(2*(3+4)**2/7)
Messages
Tal kan placeres i variable som efterfølgende kan indgå i beregninger.
xxxxxxxxxx
1
x=2+5
2
y=3
3
print(3*(x+y))
Messages
Prøv at tilføje x=x+3 efter første linje i ovenstående
kodevindue. Hvad tror du, der sker?Det følgende kodevindue viser to måder at formatere et tal, der skrives ud.
Prøv i den sidste situation at ændre tallet, således at der kun er
3 nuller efter punktum.
I kodevinduet nedenfor dannes en vektor ved
brug af kommandoen np.array([]), hvor elementerne i vektoren skrives
inden for de kantede parenteser og adskilles af komma.
Operationer på
vektorer foregår typisk elementvis, såsom addition af to vektorer eller
produkt af to vektorer. Funktionen sum anvendt på en vektor
giver summen af alle elementerne i vektoren. Prøv, at gætte på
resultatet af nedenstående beregning inden du trykker på
compute. Prøv selv andre beregninger med vektorer som
for eksempel 3*x og x/y.
xxxxxxxxxx
1
importnumpyasnp
2
3
x=np.array([1,3,2])
4
y=np.array([-1,2,-2])
5
print(np.sum(x*y))
Messages
Indicering af elementerne i en vektor starter i python i
0. En vektor med k elementer er derfor indekseret med tallene
0,1…,k−1.
Et element, for eksempel det andet element,
i en vektor x kan findes ved at skrive
x[1]. Alle elementerne i en vektor x med index fra for
eksempel 2 til 5 opnås ved at skrive x[2:6]
Vektoren, der består af tallene 3,4,…,9, kan
dannes med kommandoen np.arange(3,10).
Vektoren, der består af tallene 0,1,2,3,4 kan
dannes med kommandoen np.arange(5).
Vektoren, der består af
tre 1-taller efterfulgt af fire 2-taller, kan dannes med
kommandoen np.repeat([1,2],[3,4]), og en vektor hvor
(1,2) gentages 3 gange kan dannes med np.tile([1,2],3).
Endelig vil kommandoen np.linspace(0,1,5) danne en vektor med
5 tal, hvor det første er 0 og det sidste er 1, od de 4 dannede
intervaller er lige lange (det vil sige, at vektoren består af tallene
0.0, 0.25, 0.5, 0.75 og 1.0).
Prøv igen, at gætte på
resultatet af nedenstående beregning inden du trykker på
compute.
I python resulterer et logisk udtryk i enten "True" eller "False".
I nogle situationer vil python opfatte "True" som 1 og
"False" som 0,
hvorfor vi kan addere disse. Når en True/False variabel indgår som indeks
i en vektor, vil python lave en reduceret vektor, der kun indeholder
indgangene, hvor den tilhørende indeksværdi er "True".
Som det fremgår af definitionen af p-værdi i afsnit
1.1, er dette
begreb baseret på sandsynligheder.
Her vil jeg lige minde jer om en
måde at forstå sandsynligheder på. Når jeg kaster en (ærlig)
mønt mange gange, forventer jeg, at frekvensen af krone vil være tæt på
21. Når man siger, at sandsynligheden for krone er 21,
betyder dette, at hvis vi kaster mønten flere og flere gange, så vil frekvensen
af krone komme tættere og tættere på 21.
Dette kan vi illustrere i python.
Prøv at køre koden. Hvad ser du? Prøv at ændre på p i
kaldet af random.choice.Funktionen random.choice kan bruges til på simpel vis at simulere
et kast med en terning. Kaldet
np.random.choice(4,100) simulerer 100 kast med en
firesidet terning. Resultatet er 100 tilfældige tal blandt 0,1,2,3.
Generelt bruger jeg ordet simulation, når jeg beder python
om at generere tilfældige udfald fra en fordeling.
En af styrkerne ved python er, at vi nemt kan lave figurer
af en god kvalitet.
Nedenfor kan I prøve en plotkommando for at se nogle af mulighederne
(brugen af plot er beskrevet i afsnit
Py.2).
xxxxxxxxxx
1
importnumpyasnp
2
importmatplotlib.pyplotasplt
3
4
plt.plot(np.arange(1,8),np.tile(2,7),'o')
5
plt.plot(1,1,'.k')
6
plt.plot(2,1,'^r')
7
plt.plot(3,1,'+g')
8
plt.plot(4,1,'xb')
9
plt.plot(5,1,'oc')
10
plt.plot(6,1,'sm')
11
plt.plot(7,1,'>y')
12
plt.show()
Messages
Når I har kørt ovenstående kommando, prøv da, ved at kigge på figuren,
at svare på følgende spørgsmål.
Kommandoen np.arange(1,8) laver en vektor med tal: hvilken?
Kommandoen np.tile(2,7) laver en vektor med tal: hvilken?
Angiv farven der fremkommer ved tilføjelsen 'r'.
Angiv punktsymbolet der fremkommer ved tilføjelsen
's'.
På kursushjemmesiden ligger en zip-fil med en række datasæt.
I skal hente denne fil og placere filerne med datasæt i en mappe
på jeres egen computer.
Når et datasæt ønskes indlæst, skal man enten angive stien til den mappe på
computeren, hvor datasættet ligger, eller også skal working directory
i python pege på den mappe, hvor datasættet ligger. I python kan man se det nuværende working directory ved at
bruge kommandoen import os og dernæst
print(os.getcwd()). Man kan skifte til en anden mappe
med kommandoen os.chdir(sti), hvor sti er stien hen til
den ønskede mappe. Dette er også omtalt i indledningen til
kapitel Py. For at indlæse et datasæt skal I i dette kursus bruge to forskellige
kommandoer. For en fil med en række tal uden struktur
bruges kommandoen loadtxt fra numpy:
np.loadtxt("filnavn").
I tilfældene hvor I skal bruge denne kommando, vil
"filnavn" altid have endelsen ".txt",
og hver linje vil indeholde lige mange tal adskilt af mellemrum.
For strukturerede data skal I bruge en indlæsningskommando fra modulet
pandas (efter modulet er importeret som pd).
Indlæsningskommandoen er
pd.read_csv("filnavn"). Det forudsættes
her, at filen indeholder data organiseret i søjler. Første række
i filen indeholder søjleoverskrifter. Hver række svarer til et
observationsnummer, og indgangene i rækken giver værdierne
svarende til de forskellige søjler for dette observationsnummer.
Dataværdierne er adskilt af komma. Disse datafiler vil altid have
endelsen ".csv". Hvis data er indlæst i strukturen mydata og
en af søjlerne har navnet soejlenavn kan man udtrække denne søjle
som mydata.soejlenavn.
Afsnit Py.3 indeholder yderligere
omtale af read_csv. I kodevinduerne i denne web-bog er der ikke adgang til filer
på en bestemt computer. Jeg viser derfor strukturen i et datasæt
gennem et datasæt, der kan hentes gennem python.
Data, der hentes, vedrører smagsvurderig af æbler. Der er fire æblesorter
og 20 smagsbedømmere, der hver smager på tre sorter. I nedenstående kodevindue
udskrives først hele datasættet, og dernæst angives datatypen
for de tre søjler i datasættet.
Prøv at ændre print(apple) til
print(apple.aftertaste). Prøv dernæst at ændre til
print(apple["aftertaste"]). Prøv endelig at ændre til
print(apple.aftertaste.values).
Kan du forklare forskellen?
Prøv dernæst at ændre print(apple) til
print(apple[apple.panelist=='a']) og dernæst til
print(apple[apple.panelist=='a']["product"]).
(Det er uheldigt, at en søjle i datatabellen her hedder "product", eftersom
pandas har en funktion product som kan anvendes på en datatabel.
Hvis man skrive apple.product får man derfor ikke som forventet
søjlen med navnet "product".)
Kan du forklare, hvad der skrives ud?
Data er indlæst i apple, som er organiseret i søjler. Den
første søjle kan enten udtrækkes som apple.aftertaste eller som
apple["aftertaste"], idet aftertaste er søjleoverskriften.
Resultatet af dette er stadig en søjle. I det sidste tilfælde, hvor
values tilføjes, bliver resultatet en vektor med
dataværdier.
Kommandoen apple[apple.panelist=='a'] giver
deltabellen med alle de rækker, hvor panelist har værdien "a".
Når der tilføjes ["product"], får man søjlen "product"
i denne deltabel.
Nogle af beregningerne hørende til dette kursus kan ikke
laves nemt med standardfunktioner i python.
Jeg har derfor lavet nogle nye funktioner, der
alle er defineret i filen pytFunktioner.py, som findes på
kursushjemmesiden (i zip-filen sammen med datasæt).
Denne fil skal placeres i jeres
working directory, og funktionerne er til rådighed, når I
har givet kommandoen "from pytFunktioner import *".
Filen pytFunktioner.py indeholder følgende funktioner:
Funktionerne bliver omtalt i de afsnit, hvor de først optræder.
Har man glemt, hvordan input til en funktion skal være, kan
man give kommandoen help(funktionsnavn).