Ohjaus 1: Tuuliresurssien karakterisointi
Ohjauksessa harjannutaan tuulitietojen tarkasteluun MATLABia apuna käyttäen. Aineistoa käytetään Kemian laitoksen katolla sijaitsevalla Davis Weather -sääasemalla vuonna 2007 tehtyjä havaintoja erityisesti tuulen nopeudesta ja suunnasta.
Harjoituksessa käytettävä aineisto on ladattavissa os. otos07.mat
Harjoituksen aluksi:
- Luo työasemalle hakemisto c:\MyTemp\FYSS481\ohjaus1 ja kopio havaintoaineisto tähän hakemistoon.
- Käynnistä MATLAB napsauttamalla Start -painiketta. Kirjoita hakuruutuun MATLAB ja valitse sitten tulosluettelosta MATLAB R2013a.
- MATLAB in käynnistyttä siirry luomaasi työhakemistoon antamalla Command Window ikkunassa komento cd c:\MyTemp\FYSS481\ohjaus1.
- Siirry suorittamaan annettuja tehtäviä. Ohjauksen aikana suoritettavat tehtävät on kirjoitettu harmaalle alustalle ja ne suoritetaan Command Window ikkunassa.
Contents
Tuulitietojen esittäminen aikasarjana
Tietyllä korkeudella suoritetut tuulimittaukset on tallennettu taulukkoon:

load otos07; % Ladataan tuulitiedot v = WindSpeed; % Kopioidaan tuulen nopeushavainnot uuteen taulukkoon d = WindDir; % Kopioidaan tuulen suuntahavainnot uuteen taulukkoon n = size(v) % Otoskoko tuulen nopeushavainnoista
n =
452055 1
Piirretään kuvaaja tuulen nopeushavaintojen aikasarjasta:
plot(v,'-') xlabel('Aika') ylabel('Tuulen nopeus, m/s')
Kategoristen muuttujien frekvenssijakauma: Tuulen suunta
Oletetaan aluksi, että muuttuja
on luokka-asteikon muuttuja. Olkoot sen mahdooliset arvot eli luokituksessa käytettvät luokat
. Luokan
frekvenssi on luku, joka ilmoittaa, kuinka monta kertaa arvo
esiintyy aineistossa. Tälle frekvenssille käytetään merkintää
. Muuttujan
frekvenssijakauma kertoo kaikkien luokkien frekvenssit. Luokan
suhteellinen frekvenssi on luku
. Nämä luvut muodostavat suhteellisen frekvenssijakauman.
Taulukkoon d on tallennettu havaintoaineisto tuulen suunnasta tarkasteluvälillä. Tuulen suunta ilmoitetaan ilmansuuntana, josta tuuli tulee. Tuulen suunta havaintojen luokitteluun on käytetty 17 luokkaa
. Luokka
on varattu havainnoille, kun ilma on tyyni. Luokat
ovat vastaavasti sektorit N, NNE, NE, \ldots, NW, NNW niiden luonnollisessa järjestyksessä ilman suunnan mukaan.
Määritellään luokkien arvot taulukkoon E ja piirretään tuulen suunnan frekvenssijakauma MATLABin hist funktiolla.
E = 0:16 hist(d,E) title('Tuulen suunta') xlabel('Luokka') ylabel('Frekvenssi')
E =
Columns 1 through 13
0 1 2 3 4 5 6 7 8 9 10 11 12
Columns 14 through 17
13 14 15 16
Määritellään ensin luokkien
suhteelliset frekvenssit hist funktiolla ja tallennetaan frekvenssit taulukkoon
. Tämän jälkeen voimme laskea luokkien suhteelliset frekvenssit
jakamalla frekvenssit niiden summalla
.
f = hist(d,E) n = sum(f) p = f./n
f =
Columns 1 through 6
20284 25199 24409 15132 21692 10330
Columns 7 through 12
9127 13460 19860 44263 68254 54863
Columns 13 through 17
36191 19086 10996 17955 40954
n =
452055
p =
Columns 1 through 7
0.0449 0.0557 0.0540 0.0335 0.0480 0.0229 0.0202
Columns 8 through 14
0.0298 0.0439 0.0979 0.1510 0.1214 0.0801 0.0422
Columns 15 through 17
0.0243 0.0397 0.0906
Suhteellisen frekvenssijakauman graafinen esitys saadaan MATLABin bar funktiolla:
bar(E,p) title('Tuulen suunta') xlabel('Luokka') ylabel('Suhteellinen frekvenssi')
Prosenttinen frekvenssijakauma saadaan, kun suhteelliset frekvenssit ilmaistaan prosentteina niiden summasta
.
bar(E,100*p) title('Tuulen suunta') xlabel('Luokka') ylabel('Prosenttinen frekvenssi, %')
Numeeristen muuttujien frekvenssijakauma: Tuulen nopeus
Jos muuttujalla on paljon mahdollisia arvoja suhteessa havaintojen lukumäärään, jäävät frekvenssit pieniksi ja tällöin aineisto on luokiteltava.
Oletetaan, että aineisto halutaan luokitella
luokkaan. Tällöin valitaan aluksi reaaliluvut
ja
siten ,että väli
sisältää kaikki luokiteltavan muuttujan
havaitut arvot. Tämä väli jaetaan
osaväliin
. Merkitään
. Luokan
frekvenssi on niiden havaintoaineistossa olevien havaintojen lukumäärä, joilla muuttujan
arvo on välillä
. Muuttujan
frekvenssijakaumailmaisee kaikkien luokkien
fekvenssit.
Tarkastellaan taulukkoon
kerättyjä tuulen nopeuksia. Koska tuulen nopeuden pienin arvo on aina 0, asetetaan
. Etsitään suurin
:n arvo havaintoaineistosta MATLABin max funktiolla ja pyöristetään löytynyt arvo ylöspäin lähimpään kokonaislukuun.
c0 = 0.0 % Asetetaan c_0 = 0 ck = max(v) % Etsitään v:n suurin arvo ck = ceil(ck) % Pyöristetään ck:n arvo ylöspäin lähimpään kokonaislukuun
c0 =
0
ck =
15.2000
ck =
16
Valitaan osavälien lukumäärä
ja muodostetaan taulukko luokista
keskimmäiset arvot. Valitaan
siten, että osavälien pituus on aluksi l = 0,5 m/s käyttäen yhtälöä

l = 0.25 k = (ck - c0)/l + 1 I = linspace(c0,ck,k)
l =
0.2500
k =
65
I =
Columns 1 through 7
0 0.2500 0.5000 0.7500 1.0000 1.2500 1.5000
Columns 8 through 14
1.7500 2.0000 2.2500 2.5000 2.7500 3.0000 3.2500
Columns 15 through 21
3.5000 3.7500 4.0000 4.2500 4.5000 4.7500 5.0000
Columns 22 through 28
5.2500 5.5000 5.7500 6.0000 6.2500 6.5000 6.7500
Columns 29 through 35
7.0000 7.2500 7.5000 7.7500 8.0000 8.2500 8.5000
Columns 36 through 42
8.7500 9.0000 9.2500 9.5000 9.7500 10.0000 10.2500
Columns 43 through 49
10.5000 10.7500 11.0000 11.2500 11.5000 11.7500 12.0000
Columns 50 through 56
12.2500 12.5000 12.7500 13.0000 13.2500 13.5000 13.7500
Columns 57 through 63
14.0000 14.2500 14.5000 14.7500 15.0000 15.2500 15.5000
Columns 64 through 65
15.7500 16.0000
Nyt voimme luokitella taulukossa v olevat havainnot luokkiin
ja määritettyä muuttujan
fekvenssijakauman käyttäen MATLABin hist funktiota. Lasketaan myöskin suhteellinen frekvenssijakauma.
f = hist(v,I) % Tuulen nopeuden frekvenssit n = sum(f) % Havaintojen lukumäärä p = f./n % Tuulen nopeuden suhteelliset frekvenssit
f =
Columns 1 through 6
50230 0 56174 0 43596 36827
Columns 7 through 12
0 39492 0 42531 0 39423
Columns 13 through 18
33539 0 27453 0 21876 0
Columns 19 through 24
16670 0 12277 0 8812 6238
Columns 25 through 30
0 4389 0 3279 0 2399
Columns 31 through 36
1723 0 1371 0 1036 0
Columns 37 through 42
808 0 568 418 0 313
Columns 43 through 48
0 197 0 156 103 0
Columns 49 through 54
66 0 35 0 23 0
Columns 55 through 60
23 0 2 5 0 2
Columns 61 through 65
0 1 0 0 0
n =
452055
p =
Columns 1 through 7
0.1111 0 0.1243 0 0.0964 0.0815 0
Columns 8 through 14
0.0874 0 0.0941 0 0.0872 0.0742 0
Columns 15 through 21
0.0607 0 0.0484 0 0.0369 0 0.0272
Columns 22 through 28
0 0.0195 0.0138 0 0.0097 0 0.0073
Columns 29 through 35
0 0.0053 0.0038 0 0.0030 0 0.0023
Columns 36 through 42
0 0.0018 0 0.0013 0.0009 0 0.0007
Columns 43 through 49
0 0.0004 0 0.0003 0.0002 0 0.0001
Columns 50 through 56
0 0.0001 0 0.0001 0 0.0001 0
Columns 57 through 63
0.0000 0.0000 0 0.0000 0 0.0000 0
Columns 64 through 65
0 0
Piirretään tuulen nopeuden frekvenssijakauman ja suhteellisen frekvenssijakauman kuvaajat.
bar(I,f) title('Tuulen nopeus') xlabel('Tuulen nopeus, m/s') ylabel('Frekvenssi') bar(I,f) title('Tuulen nopeus') xlabel('Tuulen nopeus, m/s') ylabel('Suhteellinen frekvenssi')
Muuttujan
summafrekvenssit
määritellään asettamalla

Summafrekvenssi
kertoo, kuinka monella populaatioyksiköllä havaintoaineistossa muuttujan
arvo on pienempi tai yhtäsuuri kuin
. Summajakaumassa (engl. cumulative frequency distribution) kerrotaan muuttujan eri arvoihin liittyvät summafrekvenssit. Suhteellista summafrekvenssijakaumaa kutsutaan myös otoskertymäfunktioksi.
F = zeros(1,k); % Alustetaan summafrekvenssien taulukko for i=1:k % Määritetään summafrekvenssien arvot if i==1 F(i) = f(i); else F(i) = F(i - 1) + f(i); end end
Piirretään summafrekvenssijakauman summakäyrä:
plot(I+0.5*l,F) title('Tuulen nopeus') xlabel('Tuulen nopeus, m/s') ylabel('Summafrekvenssi')
Muuttujan
suhteellinen summafrekvenssit
määritellään asettamalla

P = zeros(1,k); % Alustetaan suhteellisten summafrekvenssien taulukko for i=1:k % Määritetään suhteellisten summafrekvenssien arvot if i==1 P(i) = p(i); else P(i) = P(i - 1) + p(i); end end
Piirretään suhteellisen summafrekvenssijakauman summakäyrä
plot(I+0.5*l,P) title('Tuulen nopeus') xlabel('Tuulen nopeus, m/s') ylabel('Suhteellinen summafrekvenssi')
Otoksen jakauman tunnusluvut: Keskiluvut
Fekvenssijakaumaan sisältyvä informaatio voidaan taulukoinnin ja kuvallisen esityksen lisäksi tiivistää yhteen ja useampaan tunnuslukuun (engl. statistics).
Jakauman sijainnin tunnuslukuja:
- Moodi (engl. mode) on se muuttujan arvo, jonka frekvenssi jakaumassa on suurin. Muuttujan
moodille käytetään merkintää
tai pelkästään
. Moodi on suomeksi tyyppiarvo. - Mediaani (engl. median) vaatii vähintää järjestettävän mittauksen. Muuttujan
mediaani,
tai vain
, on se muuttujan arvo tai luokka, jonka alapuolella (mediaani mukaanlukien) jää ainakin puolet havaintoarvoista ja yläpuolelle (mediaani mukaanlukien) samin ainakin puolet havaintoarvoista. - Keskiarvot: Jos muuttujan
havainnot ovat
on näiden havaintojen (aritmeettinen) keskiarvo (engl. arithmetic mean)
$.
v_Mo = mode(v) % Otoksen moodi v_Md = median(v) % Otoksen mediaani v_Mu = mean(v) % Otoksen aritmeettinen keskiarvo
v_Mo =
0.4000
v_Md =
1.8000
v_Mu =
2.2488
Otoksen jakauman tunnusluvut: Hajontaluvut
Hajontalukujen avulla kuvataan aineistossa esiintyvän vaihtelun määrää. Niiden avulla voidaan ilmaista, kuinka voimakkaasti mittaustulokset vaihtelevat havaintoyksiköstä toiseen tai missä määrin ne keskittyvät keskiluvun läheisyyteen.
Jakauman vaihtelun tunnuslukuja:
- Keskihajonta (engl. standard deviation) on tärkein sovelluksissa käytetty hajontaluku. Keskihajonnan neliötä kutsutaan varianssiksi (engl. variance). Keskihajonnan ja varianssin laskemiseen käytetään eri kaavoja riippuen siitä, onko kyseessä koko populaatio vai otos.
- Variaatiokerroin (engl. coefficient of variation) kerrotaan sadalla, jolloin saatu luku kertoo montako prosenttia keskihajonta on otoksen keskiarvosta. Sen avulla voidaan vertailla erilaisten jakaumien keskittymistä.
- Vinous (engl. skewness) on jakauman symmetrian mitta.
sigma = std(v,1) % Koko populaation keskihajonta s = std(v,0) % Otoksen keskihajonta CV = 100.0*(s/v_Mu) % Variaatiokerroin gamma = skewness(v) % Jakauman vinous
sigma =
1.8491
s =
1.8491
CV =
82.2252
gamma =
1.0668
Harjoitus: Tuuliruusu
th = (0:22.5:360)*pi/180; r = I; [TH,R] = meshgrid(th,r); [X,Y] = pol2cart(TH,R); F = zeros(length(I),length(th)); for s = 1:16 idx = find(d == s); fs = hist(v(idx),I); fs = fs./sum(fs); for i=1:k if i==1 Fs(i) = fs(i); else Fs(i) = Fs(i-1) + fs(i); end end F(:,s) = Fs'; end F(:,end) = F(:,1); figure h = polar([0 2*pi],[0 8]); view([90 -90]) delete(h) hold on contour(X,Y,F,[0.5:0.15:1],'ShowText','on') hold off