Afsnit 1.6: Introduktion til python

Python-logo fra https://www.python.org/community/logos/
I Introducerende statistik og dataanlyse med MATLAB skal nogle af jer 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.

Python som simpel lommeregner

Kør nedenstående kommando, og prøv egne små regnestykker ved at ændre på koden.
Tal kan placeres i variable som efterfølgende kan indgå i beregninger.
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.

Vektorer i python

I kodevinduet nedenfor dannes en vektor ved brug af kommandoen , hvor elementerne i vektoren skrives inden for de kantede parenteser og adskildt 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.
Indicering af elementerne i en vektor starter i python i 0. En vektor med elementer er derfor indekseret med tallene Et element, for eksempel det andet element, i en vektor kan findes ved at skrive x[1]. Alle elementerne i en vektor med index fra for eksempel 2 til 5 opnås ved at skrive x[2:6] Vektoren, der består af tallene kan dannes med kommandoen np.arange(3,10). 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 gentages 3 gange kan dannes med np.tile([1,2],3). Prøv igen, at gætte på resultatet af nedenstående beregning inden du trykker på compute.

Logiske udtryk i R

Gæt på, hvad du tror resultatet af nedenstående beregning bliver.
Prøv i stedet 3>2. Lad x=np.arange(1,5), og udregn x>2, x==2 og x!=2. Prøv også at udregne henholdsvis sum(x>2) og sum(x[x>2]).

Forklaring

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 med værdien "True".

Illustration af sandsynlighed i python

Som det fremgår af definitionen af -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å Når man siger, at sandsynligheden for krone er betyder dette, at hvis vi kaster mønten flere og flere gange, så vil frekvensen af krone komme tættere og tættere på 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.

Figurer i python

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).
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.
  1. Kommandoen np.arange(1,8) laver en vektor med tal: hvilken?
  2. Kommandoen np.tile(2,7) laver en vektor med tal: hvilken?
  3. Angiv farven der fremkommer ved tilføjelsen 'r'.
  4. Angiv punktsymbolet der fremkommer ved tilføjelsen 's'.

Svar: Figurindstillinger

  1. Kommandoen np.arange(1,8) laver vektoren 1,2,3,4,5,6,7.
  2. Kommandoen np.tile(2,7) laver vektoren 1,1,1,1,1,1,1.
  3. Angivelse af farve og punktsymbol: se afsnit Py.2.

Indlæse data i python

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 dette tilfælde vil "filnavn" have endelsen ".txt", og hver linje indeholder kun et enkelt tal. For strukturerede data skal I indlæse med kommandoen readcsv fra pandas: pd.readcsv("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 stukturen 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 readcsv.
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 datsættet, og dernæst angives datatypen for de tre søjler i datasættet.
  1. 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?
  2. Prøv dernæst at ændre print(apple) til print(apple["product"][apple.panelist=='a']). Kan du forklare, hvad der skrives ud?

Svar: Udtrække data

  1. 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.
  2. Kommandoen apple["product"] giver hele den sidste søjle i apple. Når der indsættes en sandhedsvektor på indeksplads, får vi udvalgt de elementer, hvor sandhedsvektoren er sand.

Egne funktioner i python

Nogle få gange i dette kursus vil jeg bede jer om at lave nogle beregninger, der ikke laves nemt med standardfunktioner i python. Til dette har jeg 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:

ForegåendeNæste