Esimerkki 3: Helsingin säätila vuosina 1829-2003

Käsittelyn kohteena on Helsingin (Kaisaniemi) kuukausittaiset keskilämpötilat ja sademäärät vuosina 1829-2003, jotka löytyvät Survon mukana tulevasta datatiedostosta HEL_TERA.SVO.

Tämä nykyisin 2098 havainnon aineisto näyttää loppuosaltaan seuraavalta:

*IND=ORDER,2077,2098 VARS=Year,Month,Temp,Rain
*FILE LOAD HEL_TERA
*DATA HEL_TERA*,A,B,C
C Year Month Temp Rain
A 2002  1    -2.7   64
* 2002  2    -0.4   49
* 2002  3     0.8   37
* 2002  4     5.3    7
* 2002  5    11.4   18
* 2002  6    16.0   68
* 2002  7    19.1   39
* 2002  8    19.4    6
* 2002  9    11.6    5
* 2002 10     1.5   33
* 2002 11    -1.9   63
* 2002 12    -7.1   11
* 2003  1    -8.6   46
* 2003  2    -5.1   12
* 2003  3    -1.2    9
* 2003  4     2.4   31
* 2003  5     9.1   69
B 2003  6    13.2   47

FILE MEDITiä sovelletaan tässä sikäli erikoisella tavalla, että - vaikka kyseessä on kuukausittainen aineisto - kaikki 12 kuukautta jokaiselta vuodelta esitetään yhdellä sivulla.
Kuukausittaiset tiedot, keskilämpötila (Temp) ja sademäärä (Rain) esitetään sekä taulukkona että profiilikuvina (punainen viiva) kuukausittaisia keskiarvoja (musta viiva) vastaan.
Kultakin vuodelta annnetaan ehdollisina, sanallisina kommentteina eräitä säätilaan liittyviä toteamuksia.

Aineistoa voi tässäkin tapauksessa selata esim. PgDn- ja PgUp-napein vuodesta vuoteen.
Seuraavassa tilanteessa on hakeuduttu vuoteen 2002 ja MILE MEDIT esittää silloin tiedot näin:

Monthly weather statistics in Helsinki shown by the FILE MEDIT operation of SURVO MM

Selityksiä

FILE MEDIT on aktivoitu komennolla

FILE MEDIT HEL_TERA,HELTERA2:HELSINKI
ja sivusto HELSINKI (yksi ainoa tammikuun suhteen ehdollistettu sivu) toimituskentässä HELTERA2 on määritelty seuraavasti:


Näiden rivien selityksiä
 11 *January=Month:1 / Definition of the condition
 12 *MEDIT:HELSINKI SIZE=32,82 PAGES=Page1
 13 *
 14 *PAGE Page1: CONDITION:January SUCRO:MEDITS
 15 * 
 16 *   Monthly
 17 *   Mean temperature in Helsinki 1829-2000
 18 *   Rainfall (mm)    in Helsinki 1845-2000
 19 *   Data from Finnish Meteorological Institute
 20 *
 21 * Year: ####
 22 * Temperature (Celsius)     Rainfall (mm)
 23 : /
 24 : / These comment lines will not be displayed.
 25 : / In Year: #### above shadow PPPP protects the field during FILE MEDIT.
 26 : / Characters with shadow '+' are hidden.
 27 : / Characters with shadow '-' (as T01: etc. below) are deleted.
 28 : /
 29 *
 30 * January         T01: ###.#   R01: ###.#
 31 * February        T02: ###.#   R02: ###.#
 32 * March           T03: ###.#   R03: ###.#
 33 * April           T04: ###.#   R04: ###.#
 34 * May             T05: ###.#   R05: ###.#
 35 * June            T06: ###.#   R06: ###.#
 36 * July            T07: ###.#   R07: ###.#
 37 * August          T08: ###.#   R08: ###.#
 38 * September       T09: ###.#   R09: ###.#
 39 * October         T10: ###.#   R10: ###.#
 40 * November        T11: ###.#   R11: ###.#
 41 * December        T12: ###.#   R12: ###.#
 42 *
 43 * The warmest month was %1 (%2) and / %1=Mname1 %2=MaxTemp
 44 * the coldest was %1 (%2).          / %1=Mname2 %2=MinTemp
 45 * %1                                / %1=Summer1
 46 * %1 (%2 mm)                        / %1=Summer2 %2=Rsum
 47 *               
 48 *<START> data for sucro MEDITS
 49 :TEST=0 / Set this to 1 if you have problems with the code below!
 50 :         Then you can break the sucro (of the 2nd Survo) by '.'
 51 :REPLACE !,.,C      / Transform !!!!!!!!!!'s to border lines.   <ACT> 
 52 :REPLACE ?xx.x,-,C  / Convert to missing values.                <ACT>
 53 :REPLACE ?zz,-,C    / Convert to missing values.                <ACT>
 54 : / These are comment lines:
 55 : / Lines to be activated by the sucro (MEDIT) must be denoted by <ACT>.
 56 : / Page definitions must not contain any border lines.
 57 : / Therefore the first REPLACE converts !'s to .'s .
 58 : / Missing values for items indicated by xxx.x are represented
 59 : / as ?xx.x . Therefore the second REPLACE is needed for conversion
 60 : / to missing values (-). The same holds for the third REPLACE.
 61 : / FILE MEDIT will modify the data table HELSINKI for each year in turn.
 62 *DATA HELSINKI  
 63 *Month       Temp  Mtemp Rain Mrain  I  R
 64 *January     xxx.x -5.7  zzz   47.0  0 12 / x=Temp      z=Rain      %
 65 *February    xxx.x -6.2  zzz   37.2  0 11 / x=Temp[+1]  z=Rain[+1]  %
 66 *March       xxx.x -3.2  zzz   35.6  0 10 / x=Temp[+2]  z=Rain[+2]  %
 67 *April       xxx.x  2.2  zzz   37.6  0  9 / x=Temp[+3]  z=Rain[+3]  %
 68 *May         xxx.x  8.5  zzz   41.4  0  8 / x=Temp[+4]  z=Rain[+4]  %
 69 *June        xxx.x 14.1  zzz   46.1  0  7 / x=Temp[+5]  z=Rain[+5]  %
 70 *July        xxx.x 17.0  zzz   58.9  0  6 / x=Temp[+6]  z=Rain[+6]  %
 71 *August      xxx.x 15.6  zzz   74.1  0  5 / x=Temp[+7]  z=Rain[+7]  %
 72 *September   xxx.x 11.0  zzz   65.4  0  4 / x=Temp[+8]  z=Rain[+8]  %
 73 *October     xxx.x  5.8  zzz   69.4  0  3 / x=Temp[+9]  z=Rain[+9]  %
 74 *November    xxx.x  0.7  zzz   64.9  0  2 / x=Temp[+10] z=Rain[+10] %
 75 *December    xxx.x -3.2  zzz   55.3  0  1 / x=Temp[+11] z=Rain[+11] %
 76 *
 77 :GPLOT /FIX 1                                                   <ACT>
 78 :GPLOT HELSINKI / TYPE=HBAR VARS=Month(L),I(A) XLABEL= YLABEL=  <ACT>
 79 :              SCALE=-20(5)25  LEGEND=- HEADER= OUTFILE=A PEN=[Swiss(40)]
 80 :              WHOME=0.58*WX,45 WSIZE=0.4*WX,0.38*WY MODE=960,700
 81 :              XDIV=200,690,70 YDIV=65,505,130
 82 :              FILL(-1)=0.1,0.12,0.1,0 FILL(-2)=0.05,0.06,0.05,0
 83 :              FRAMES=F1,F2 F1=0,0,960,700,-1 F2=200,65,690,505,-2
 84 :!!!!!!!!!!
 85 :GPLOT HELSINKI,Mtemp,R                                         <ACT>
 86 :              XSCALE=-20(5)25 XLABEL= YLABEL=  HEADER= PEN=[Swiss(40)]
 87 :              YSCALE=0.5:_,12.5:_ INFILE=A OUTFILE=A
 88 :              LINE=[line_width(2)],1 POINT=0,5
 89 :              WHOME=0.58*WX,45 WSIZE=0.4*WX,0.38*WY    MODE=960,700
 90 :              XDIV=200,690,70 YDIV=65,505,130
 91 :!!!!!!!!!!
 92 :GPLOT HELSINKI,Temp,R                                          <ACT>
 93 :              HEADER=Profile_of_the_year_(red)__vs.__mean_profile_(black)
 94 :              TEXTS=T1 T1=[Swissb(50)][RED],Mean_temperature_(C),435,575
 95 *              YLABEL=[Swissb(50)][BLUE],%1 / %1=Year
 96 :              XSCALE=-20(5)25 XLABEL=  TOP=1             PEN=[Swiss(40)]
 97 :              YSCALE=0.5:_,12.5:_ INFILE=A
 98 :              LINE=[line_width(3)][RED],1 POINT=0,5
 99 :              WHOME=0.58*WX,45 WSIZE=0.4*WX,0.38*WY    MODE=960,700
100 :              XDIV=200,690,70 YDIV=65,505,130
101 :              GRID=[line_color(-1)],1000,1 FILL(-1)=0.1,0.1,0.1,0
102 :!!!!!!!!!!
103 :GPLOT /FIX 2                                                   <ACT>
104 :GPLOT HELSINKI / TYPE=HBAR VARS=Month(L),I(A) XLABEL= YLABEL=  <ACT>
105 :              SCALE=0(50)200  LEGEND=- HEADER= OUTFILE=B PEN=[Swiss(40)]
106 :              WHOME=0.58*WX,45+0.41*WY WSIZE=0.4*WX,0.38*WY MODE=960,700
107 :              XDIV=200,690,70 YDIV=65,505,130
108 :              FILL(-1)=0.12,0.1,0.1,0 FILL(-2)=0.06,0.05,0.05,0
109 :              FRAMES=F1,F2 F1=0,0,960,700,-1 F2=200,65,690,505,-2
110 :!!!!!!!!!!
111 :GPLOT HELSINKI,Mrain,R                                         <ACT>
112 :              XSCALE=0(50)200 XLABEL= YLABEL=  HEADER=   PEN=[Swiss(40)]
113 :              YSCALE=0.5:_,12.5:_ INFILE=B OUTFILE=B
114 :              LINE=[line_width(2)],1 POINT=0,5
115 :              WHOME=0.58*WX,45+0.41*WY WSIZE=0.4*WX,0.38*WY MODE=960,700
116 :              XDIV=200,690,70 YDIV=65,505,130
117 :!!!!!!!!!!
118 :GPLOT HELSINKI,Rain,R                                          <ACT>
119 :              HEADER=Profile_of_the_year_(red)__vs.__mean_profile_(black)
120 :              TEXTS=T1 T1=[Swissb(50)][BLUE],Rainfall_(mm),600,575
121 *              YLABEL=[Swissb(50)][BLUE],%1 / %1=Year
122 :              XSCALE=0(50)200 XLABEL=  TOP=1
123 :              YSCALE=0.5:_,12.5:_  LINE=[RED],1 INFILE=B PEN=[Swiss(40)]
124 :              LINE=[line_width[3][BLUE],1 POINT=0,5
125 :              WHOME=0.58*WX,45+0.41*WY WSIZE=0.4*WX,0.38*WY MODE=960,700
126 :              XDIV=200,690,70 YDIV=65,505,130
127 :              GRID=[line_color(-1)],1000,1 FILL(-1)=0.1,0.1,0.1,0
128 *<END> data of sucro MEDITS
129 *END of Page1
130 *
131 *Definitions for various items needed on the page: 
132 *T01=Temp[+0]   T05=Temp[+4]   T09=Temp[+8]
133 *T02=Temp[+1]   T06=Temp[+5]   T10=Temp[+9]
134 *T03=Temp[+2]   T07=Temp[+6]   T11=Temp[+10]
135 *T04=Temp[+3]   T08=Temp[+7]   T12=Temp[+11]
136 *
137 *R01=Rain[+0]   R05=Rain[+4]   R09=Rain[+8]
138 *R02=Rain[+1]   R06=Rain[+5]   R10=Rain[+9]
139 *R03=Rain[+2]   R07=Rain[+6]   R11=Rain[+10]
140 *R04=Rain[+3]   R08=Rain[+7]   R12=Rain[+11]
141 *
142 *Tmax=max(Temp[+5],Temp[+6],Temp[+7])
143 *Tmaxn=maxn(Temp[+5],Temp[+6],Temp[+7])
144 *U1=if(Tmax<16)then(1)else(U2)
145 *U2=if(Tmax<16.5)then(2)else(U3)
146 *U3=if(Tmax<19)then(3)else(U4)
147 *U4=if(Tmax<19.5)then(4)else(5)
148 *
149 *Summer1=$CLASS(Summer,U1)
150 *CLASSIFICATION Summer:
151 *1: Extremely cold summer!
152 *2: Summer was cold.
153 *3: Normal summer temperature.
154 *4: Warm summer!
155 *5: Summer was hot.
156 *END
157 *
158 *Rsum=Rain[+5]+Rain[+6]+Rain[+7]
159 *V1=if(Rsum<80)then(1)else(V2)
160 *V2=if(Rsum<140)then(2)else(V3)
161 *V3=if(Rsum<220)then(3)else(V4)
162 *V4=if(Rsum<300)then(4)else(V5)
163 *V5=if(Rsum<1000)then(5)else(0)
164 *
165 *Summer2=$CLASS(Rainfall,V1)
166 *CLASSIFICATION Rainfall:
167 *0: Rainfall not measured!
168 *1: Extremely dry summer!
169 *2: Dry summer!
170 *3: Normal rainfall in summer!
171 *4: Wet summer!
172 *5: Extremely rainy summer!
173 *END
174 *
175 *Tmaxn2=maxn(Temp[+4],Temp[+5],Temp[+6],Temp[+7],Temp[+8])
176 *MaxTempn=Tmaxn2+4   MaxTemp=round(Temp[MaxTempn-1],1)
177 *Mname1=$CLASS(Months,MaxTempn)
178 *Tminn2=minn(Temp,Temp[+1],Temp[+2],Temp[+9],Temp[+10],Temp[+11])
179 *MinTempn=if(Tminn2<4)then(Tminn2)else(Tminn2+6)
180 *                    MinTemp=round(Temp[MinTempn-1],1)
181 *Mname2=$CLASS(Months,MinTempn)
182 *
183 *CLASSIFICATION Months:
184 *1: January
185 *2: February
186 *3: March
187 *4: April
188 *5: May
189 *6: June
190 *7: July
191 *8: August
192 *9: September
193 *10: October
194 *11: November
195 *12: December
196 *END



Yllä riveillä

 11 *January=Month:1 / Definition of the condition
 12 *MEDIT:HELSINKI SIZE=32,82 PAGES=Page1
 13 *
 14 *PAGE Page1: CONDITION:January SUCRO:MEDITS
määritellään havainnon näyttämistä koskeva ehto (11) ja itse sivusto (12). Ainoa sivu (Page1) alkaa riviltä 14 ja se on ehdollinen siten, että kuukausiaineistosta näytetään vain Tammikuu-havainnot (CONDITION:January).
Sivulle saadaan kyllä sitten tietoja myös muista kuukausista käyttämällä VAR-operaatiosta tuttuja, viiveitä ja eteitä koskevia merkintöjä. Esim. Rain[+1] tarkoittaa tällöin helmikuun sademäärää (Kts. esim. rivejä 132-140).
Rivillä 14 merkintä SUCRO:MEDITS tarkoittaa, että sivua näytettäessä tullaan apuna käyttämään toista Survoa, joka tullaan käynnistämään aloitussukrolla MEDITS.
MEDITS on yksinkertaisuudestaan huolimatta hyvin yleinen sukro, sillä se saa ruokansa sivulta Page1 riveillä 48-128 tarjotussa muodossa ja jo pikaisen katselun perusteella voi päätellä, että ko. riveillä esiintyy jonkinlainen DATA-taulukko (DATA HELSINKI) ja piirroskaavioita.
Toinen Survo piirtää siten MEDITSin avulla sivulla näkyvät profiilikuvat. MEDITS muistuttaa ACTIVATE-sukroa, mutta nyt aktivoitavat rivit osoitetaan merkinnöin <ACT> (esim. rivit 51-53, 77-78), koska kontrollisarake halutaan säästää muihin tarkoituksiin.
Saat MEDITSin (SURVO MM ver. 1.36+) listauksen esille esim. komennolla
/TUTSHOW <Survo>\U\S\MEDITS
MEDITSin saa tietenkin tekemään "ihan mitä tahansa"; tämä lienee kuitenkin aika tyypillinen käyttötilanne. Toisaalta MEDITSin paikalle voi kehitellä muunkintyyppisiä sukroja, mutta uskoisin tämän riittävän useihin tarkoituksiin.
Toinen Survo saa aloitussukronsa tarvitsemat tiedot tilapäisen tekstitiedoston välityksellä. Rivit 48-128 tosin käsitellään kuten muutkin rivit eli esim. datataulukkoon HELSINKI (rivit 62-75) sijoitetaan nykyisen vuoden kuukausittaiset keskilämpötila- ja sademääräarvot. Näitä rivejä ei kuitenkaan näytetä lainkaan FILE MEDIT -sivulla vaan ne talletetaan tekstitedostoon, jonka toinen Survo (sukro MEDITS) kaappaa käyttöönsä ja toimii...
Sen sijaan rivit 15-47 ovat normaaleja FILE MEDIT:illä suoraan näytettäviä rivejä. Esim. vuoden eri kuukausien arvot näytetään riveiltä 30-41 ja ehdollisia, sanallisia kommentteja riveiltä 43-46.
Koska FILE MEDIT -sivuston määrittelykentässä ei saa olla pisteiden muodostamia, esim. piirtokaavioita erottavia rajaviivoja, sellaiset syntyvät siinä toisessa Survossa MEDITSin toimesta !!!!!!-riveistä REPLACE-komennoilla (rivi 51).
Siis pientä kikkailua joutuu harrastamaan tämmöisissä vaativammissa FILE MEDIT -sovelluksissa, jotka edellyttävät hiukan enemmän "ohjelmoivaa otetta" kuin Survon peruskäyttö.
Toisaalta datojen tämäntyyppinen esittely ja näyttely havainto havainnolta onnistuu tuskin yhtä helposti Survon muilla keinoilla, vaikka sopivilla sukroilla se olisi myös mahdollista. Muiden ohjelmistojen suhteen olen jäävi ottamaan mitään kantaa.
Takaisin tämän esimerkin alkuun
Takaisin esimerkkiluetteloon