Skip to content

Commit 06fa8f7

Browse files
committed
finalize exercise 4, fix #2
1 parent 7e93daf commit 06fa8f7

File tree

1 file changed

+70
-13
lines changed

1 file changed

+70
-13
lines changed

kurssimateriaali/4_paikkatietoanalyysi.ipynb

+70-13
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@
4848
"## Harjoitus - DataFramen luonti\n",
4949
"\n",
5050
"Lue datakansiossa oleva `lightnings.csv`-tiedosto pandas DataFrameksi.\n",
51-
"1. Vinkki: tee ensin tiedostopolku\n",
52-
"2. Vinkki: käytä `read_csv`-metodia"
51+
"1. Tee ensin tiedostopolku.\n",
52+
"3. Käytä pandasin `read_csv`-metodia.\n",
53+
"4. Lue tiedosto DataFrameen, tallenna DataFrame muuttujaan `lightnings`."
5354
]
5455
},
5556
{
@@ -65,7 +66,9 @@
6566
{
6667
"cell_type": "markdown",
6768
"id": "3cfd0549-f677-43b3-9eda-0182a8a27ef0",
68-
"metadata": {},
69+
"metadata": {
70+
"jp-MarkdownHeadingCollapsed": true
71+
},
6972
"source": [
7073
"## Ratkaisu"
7174
]
@@ -88,7 +91,7 @@
8891
"source": [
8992
"## DataFramesta GeoDataFrameksi\n",
9093
"\n",
91-
"Muutetaan lightnings-DataFrame nyt GeoDataFrameksi:"
94+
"Muutetaan `lightnings`-DataFrame nyt GeoDataFrameksi:"
9295
]
9396
},
9497
{
@@ -197,7 +200,7 @@
197200
"id": "1f6c04d5-d59c-4f35-88e2-3b533d7b6678",
198201
"metadata": {},
199202
"source": [
200-
"Projisoi salamahavainnot samaan koordinaattijärjestelmään, kuin kohta käytettävä kunta-aineisto (`epsg=3067`). Huomaa, että sijainnit ovat nyt asteita - aineisto on wgs 84 -koordinaatistossa. Emme siis voi suoraan asettaa ETRS89 / TM35FIN koordinaattijärjestelmää.\n",
203+
"Projisoi salamahavainnot samaan koordinaattijärjestelmään kohta käytettävän kunta-aineiston kanssa (`epsg=3067`). Huomaa, että sijainnit ovat nyt asteita - aineisto on wgs 84 -koordinaatistossa. Emme siis voi suoraan asettaa ETRS89 / TM35FIN koordinaattijärjestelmää.\n",
201204
"\n",
202205
"1. Aseta ensin `geo_lightnings`-GeoDataFrame wgs 84 koordinaattijärjestelmään (`set_crs`). Epsg-koodi on 4326.\n",
203206
"2. Uudelleenprojisoi (`to_crs`) vasta kun koordinaattijärjestelmä on asetettu. Ylikirjoita `geo_lightnings`-muuttuja uudella epsg 3067 -versiolla."
@@ -254,7 +257,7 @@
254257
"\n",
255258
"Lasketaan seuraavaksi salamahavaintojen määrät kunnittain.\n",
256259
"\n",
257-
"Luetaan ensin kunta-aineisto geodataframeen:"
260+
"Luetaan ensin kunta-aineisto GeoDataFrameen:"
258261
]
259262
},
260263
{
@@ -319,9 +322,9 @@
319322
"\n",
320323
"Nyt voimme edetä tekemään sijainteihin perustuvan liitoksen salamahavaintojen ja kuntien välillä. Tarkoituksena on, että saisimme jokaiseen salamaan tiedon siitä, minkä kunnan alueelle se iski.\n",
321324
"\n",
322-
"Tämä kannattaa toteuttaa `sjoin`, eli spatial join, -funktiolla. Yhdistetään siis salamahavaintoihin tieto kunnista, perusteena, että havainto on kunnan alueella.\n",
325+
"Tämä kannattaa toteuttaa GeoPandasin `sjoin`, eli spatial join, -funktiolla. Yhdistetään siis salamahavaintoihin tieto kunnista siten, että jokainen salamahavainto saa sen kunnan tiedot, jonka sisällä havainto sijaitsee.\n",
323326
"\n",
324-
"1. Käytä geopandasin `sjoin`-funktiota (`gpd.sjoin`)\n",
327+
"1. Käytä geopandasin `sjoin`-funktiota (`gpd.sjoin`).\n",
325328
"2. Valitse parametreihin `left_df` ja `right_df` halutut GeoDataFramet, eli: `left_df=geo_lightnings` ja `right_df=municipalities`.\n",
326329
"3. Haluamme tiedon sen perusteella, minkä kunnan sisällä havainto on. Valitse siis predikaatiksi, eli `predicate`-parametrin arvoksi, `\"within\"`.\n",
327330
"4. Haluamme tuloksena salamahavainnot, joihin on lisättynä tieto kunnasta, jonne salama on iskenyt. Annetaan siis `how`-parametrille arvoksi `\"left\"`: Näin tuloksena on vain salamahavainnot.\n",
@@ -470,6 +473,16 @@
470473
"lightning_counts.head()"
471474
]
472475
},
476+
{
477+
"cell_type": "code",
478+
"execution_count": null,
479+
"id": "d850e00d-24a7-475e-a3fc-18e3566f4e83",
480+
"metadata": {},
481+
"outputs": [],
482+
"source": [
483+
"type(lightning_counts)"
484+
]
485+
},
473486
{
474487
"cell_type": "markdown",
475488
"id": "0b1e4263-18f4-4967-bf94-d973876ce1e7",
@@ -478,23 +491,67 @@
478491
"Nimetään vielä sarakkeet hieman selkeämmin. Tämä onnistuu esimerkiksi antamalla uudet sarakenimet listana:"
479492
]
480493
},
494+
{
495+
"cell_type": "code",
496+
"execution_count": null,
497+
"id": "6783b486-63cf-4c3c-a560-0e6dc18afff0",
498+
"metadata": {},
499+
"outputs": [],
500+
"source": [
501+
"# Alkuperäiset sarakkeet\n",
502+
"lightning_counts.columns"
503+
]
504+
},
481505
{
482506
"cell_type": "code",
483507
"execution_count": null,
484508
"id": "d1e5c678-c912-4704-99c6-d397f28c8192",
485509
"metadata": {},
486510
"outputs": [],
487511
"source": [
488-
"lightning_counts.columns = [\"nimi\", \"lightning_count\"]\n",
489-
"lightning_counts.head()"
512+
"# Korvataan sarakkeet uusilla\n",
513+
"lightning_counts.columns = [\"municipality\", \"lightning_count\"]\n",
514+
"lightning_counts"
490515
]
491516
},
492517
{
493518
"cell_type": "markdown",
494519
"id": "2f47cfc1-24da-4b49-bf92-4b0157a7a662",
495520
"metadata": {},
496521
"source": [
497-
"Nyt voimme liittää salamahavaintojen kuntakohtaiset summat kunta-aineistoon kuntien nimen perusteella:"
522+
"## Harjoitus - liitos sarakkeen perusteella\n",
523+
"\n",
524+
"Nyt voimme liittää salamahavaintojen kuntakohtaiset summat kunta-aineistoon kuntien nimen perusteella.\n",
525+
"\n",
526+
"Summa-aineistossa (`lightning_counts`) on tieto kunnan nimestä sarakkeessa `municipality`, kun taas kunta-aineistossa kunnan nimi on sarakkeessa `nimi`. Näiden sarakkeiden perusteella voidaan yhdistää tieto niin, että kunta-aineistoon saadaan jokaiselle kunnalle tieto salamahavaintojen summasta.\n",
527+
"\n",
528+
"Huomaa, että tämä liitos ei ole millään tavalla spatiaalinen operaatio. Tuki sarakkeiden mukaan liittämiselle löytyykin pandasin `merge`-funktiosta.\n",
529+
"\n",
530+
"1. Käytä pandasin merge-funktiota (`pd.merge`).\n",
531+
"2. Valitse parametreihin `left` ja `right` halutut DataFramet, eli: `left=municipalities` ja `right=lightning_counts`.\n",
532+
"3. Haluamme liittää tietoa sarakkeiden perusteella. Nämä sarakkeet valitaan parametreilla `left_on` ja `right_on`. Valitsimme aiemmin vasemmaksi DataFrameksi kunnat (`municipalities`), joten `left_on=\"nimi\"`. Oikea DataFrame on salamasummat (`lightning_counts`), joten `right-on=\"municipality\"`.\n",
533+
"4. Haluamme tuloksena kunta-aineiston, jossa jokaisella kunnalla on tieto salamahavaintojen summasta. Annetaan siis how-parametrille arvoksi `\"left\"`: Näin tuloksena on vain kunta-aineisto.\n",
534+
"5. Kun liitos näyttää toimivan, voit ylikirjoittaa muuttujan `municipalities` tuloksena syntyvällä GeoDataFramella.\n"
535+
]
536+
},
537+
{
538+
"cell_type": "code",
539+
"execution_count": null,
540+
"id": "f0b5c44a-3ccd-4966-8c11-526ec7a4025d",
541+
"metadata": {},
542+
"outputs": [],
543+
"source": [
544+
"# Kirjoita ratkaisu\n"
545+
]
546+
},
547+
{
548+
"cell_type": "markdown",
549+
"id": "b9771266-57ca-4546-bab1-2de385a2eec0",
550+
"metadata": {
551+
"jp-MarkdownHeadingCollapsed": true
552+
},
553+
"source": [
554+
"## Ratkaisu"
498555
]
499556
},
500557
{
@@ -508,7 +565,7 @@
508565
" left=municipalities,\n",
509566
" right=lightning_counts,\n",
510567
" left_on=\"nimi\",\n",
511-
" right_on=\"nimi\",\n",
568+
" right_on=\"municipality\",\n",
512569
" how=\"left\",\n",
513570
")\n",
514571
"municipalities"
@@ -523,7 +580,7 @@
523580
"\n",
524581
"Tarkistetaan analyysimme nopealla visualisoinnilla kuntakohtaisista havaintomääristä.\n",
525582
"\n",
526-
"Tämä onnistuu antamalla `plot`-metodin `column`-parametrille arvoksi se sarakke, jonka arvot haluamme visualisoida kartalla."
583+
"Tämä onnistuu antamalla GeoDatFramen `plot`-metodin `column`-parametrille arvoksi se sarake, jonka arvot haluamme visualisoida kartalla."
527584
]
528585
},
529586
{

0 commit comments

Comments
 (0)