Afsnit Py.3: Indlæsning, dataframe og matriks
Jeg vil beskrive to forskellige indlæsningssituationer. I den
første situation skal vi blot indlæse en følge af tal uden nogen speciel struktur.
Enten er alle tallene på første linje adskildt af et eller flere mellemrum, eller
også er der et enkelt tal på hver linje.
I denne situation bruger man
loadtxt fra
numpy:
np.loadtxt("filnavn")
hvilket giver en vektor med tallene.
I den anden datasituation er data organiseret i søjler, typisk med
søjleoverskrifter, og data i en række er adskildt af komma (typisk
vil datafilen have endelsen "csv"). Data indlæses med kommandoen
readcsv fra
pandas:
pd.readcsv("filnavn")
Hvis der ikke er søjleoverskrifter i datafilen, skal
man tilføje
header=None til kaldet.
Hvis første søjle indeholder rækkenavne, skal man tilføje
indexcol=0 til kaldet.
Hvis det indlæste er placeret i
mydata, er dette en pandas
dataframe. Man
kan tænke på dette som en liste af søjler (variable),
alle med samme længde.
Man kan få adgang til en søjle ved hjælp af dennes navn.
Hvis for eksempel der er en søjle med navnet
Soejle1, får man
denne med kommandoen
mydata.Soejle1 eller mydata['Soejle1']
Resultatet fra denne kommando har struktur af en søjle i en datatabel
(formelt er det en
pandas series). Hvis man vil have en
vektor med værdierne i søjlen, kan man skrive
mydata.Soejle1.values
Det første element i søjlen kan man få med kommandoen
mydata.Soejle1[0]. Alternativt, hvis
Soejle1
er den første søjle, kan man også bruge en matriksindeksering:
mydata.iloc[0,0].
I kodedelen nedenfor indlæses data fra en fil
Ind.csv med indholdet
Efter indlæsningen deles
Alder op i to datasæt alt efter køn.
Når data udskrives efter indlæsningen, vil
python indsætte et
rækkenummer
ud for hver række.
import pandas as pd
dat=pd.read_csv("Ind.csv")
print(dat)
| Koen Alder
| 0 Pige 7
| 1 Pige 2
| 2 Dreng 5
| 3 Dreng 7
| 4 Dreng 3
print(dat.Alder[dat.Koen=="Pige"])
| 0 7
| 1 2
| Name: Alder, dtype: int64
print(dat.Alder[dat.Koen=="Dreng"])
| 2 5
| 3 7
| 4 3
| Name: Alder, dtype: int64
print(dat.Alder.values[dat.Koen=="Dreng"])
| [5 7 3]
Man kan selv lave datatabeller inde i python. Dette er omtalt i
afsnit
6.6.
Py.3.1 Matricer
Ligesom data kan organiseres i vektorer i
python via
np.array (efter
import numpy as np), kan
data også organiseres i matricer,
det vil sige en struktur med et antal rækker og et antal søjler.
En matrix kan dannes ved at angive de enkelte rækker, for eksempel
en
matrix:
np.array([[x11,x12,x13],[x21,x22,x23]])
Ved at benytte
reshape kan den samme matrix også laves med kommandoen
array([x11,x12,x13,x21,x22,x23]).reshape((2,3))
import numpy as np
aMat=np.array([1,2,3,4,5,6,7,8,9,10,11,12]).reshape((3,4))
print(aMat)
| [[ 1 2 3 4]
| [ 5 6 7 8]
| [ 9 10 11 12]]
print(aMat.T) # aMat transponeret
| [[ 1 5 9]
| [ 2 6 10]
| [ 3 7 11]
| [ 4 8 12]]
print(aMat[2,3]) # indgang (3,4) (index starter i nul!)
| 12
print(aMat[2,:]) # række 3 som en vektor
| [ 9 10 11 12]
print(aMat[:,2]) # søjle 3 som en vektor
| [ 3 7 11]
print(aMat[:,2].shape) # den 3. søjle er en søjlevektor
| (3,)
print(aMat.reshape(-1)) # alle indgangene læst rækkevis
| [ 1 2 3 4 5 6 7 8 9 10 11 12]
print(np.max(aMat)) # maximum over alle indgange
| 12
print(np.mean(aMat)) # gennemsnit over alle indgange
| 6.5
print(aMat.sum(0)) # søjlesummer
| [15 18 21 24]
print(aMat.sum(1)) # rækkesummer
| [10 26 42]
print(aMat.max(0)) # maximum i hver søjle
| [ 9 10 11 12]
Matrix multiplikation af to matricer
og
beregnes med
matmul(A,B), og den
inverse af en kvadratisk matrix
fås med
linalg.inv(A).
import numpy as np
aMat=np.array([[1,2],[3,4]])
bMat=np.array([[1,2,3],[4,5,6]])
print(np.matmul(aMat,bMat))
| [[ 9 12 15]
| [19 26 33]]
print(np.linalg.inv(aMat))
| [[-2. 1. ]
| [ 1.5 -0.5]]
print(np.matmul(aMat,np.linalg.inv(aMat)))
| [[1.0000000e+00 0.0000000e+00]
| [8.8817842e-16 1.0000000e+00]]
v=np.array([1,2]) # dette er en vektor
print(np.matmul(v,aMat))
| [ 7 10]
print(np.matmul(aMat,v)) # numpy opfatter også v som en søjle
| [ 5 11]
w=v.reshape((1,2)) # w defineres som en matrix med en enkelt række
print(np.matmul(aMat,w))
| ValueError: ...
ForegåendeNæste