|
48 | 48 | "## Harjoitus - DataFramen luonti\n",
|
49 | 49 | "\n",
|
50 | 50 | "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`." |
53 | 54 | ]
|
54 | 55 | },
|
55 | 56 | {
|
|
65 | 66 | {
|
66 | 67 | "cell_type": "markdown",
|
67 | 68 | "id": "3cfd0549-f677-43b3-9eda-0182a8a27ef0",
|
68 |
| - "metadata": {}, |
| 69 | + "metadata": { |
| 70 | + "jp-MarkdownHeadingCollapsed": true |
| 71 | + }, |
69 | 72 | "source": [
|
70 | 73 | "## Ratkaisu"
|
71 | 74 | ]
|
|
88 | 91 | "source": [
|
89 | 92 | "## DataFramesta GeoDataFrameksi\n",
|
90 | 93 | "\n",
|
91 |
| - "Muutetaan lightnings-DataFrame nyt GeoDataFrameksi:" |
| 94 | + "Muutetaan `lightnings`-DataFrame nyt GeoDataFrameksi:" |
92 | 95 | ]
|
93 | 96 | },
|
94 | 97 | {
|
|
197 | 200 | "id": "1f6c04d5-d59c-4f35-88e2-3b533d7b6678",
|
198 | 201 | "metadata": {},
|
199 | 202 | "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", |
201 | 204 | "\n",
|
202 | 205 | "1. Aseta ensin `geo_lightnings`-GeoDataFrame wgs 84 koordinaattijärjestelmään (`set_crs`). Epsg-koodi on 4326.\n",
|
203 | 206 | "2. Uudelleenprojisoi (`to_crs`) vasta kun koordinaattijärjestelmä on asetettu. Ylikirjoita `geo_lightnings`-muuttuja uudella epsg 3067 -versiolla."
|
|
254 | 257 | "\n",
|
255 | 258 | "Lasketaan seuraavaksi salamahavaintojen määrät kunnittain.\n",
|
256 | 259 | "\n",
|
257 |
| - "Luetaan ensin kunta-aineisto geodataframeen:" |
| 260 | + "Luetaan ensin kunta-aineisto GeoDataFrameen:" |
258 | 261 | ]
|
259 | 262 | },
|
260 | 263 | {
|
|
319 | 322 | "\n",
|
320 | 323 | "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",
|
321 | 324 | "\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", |
323 | 326 | "\n",
|
324 |
| - "1. Käytä geopandasin `sjoin`-funktiota (`gpd.sjoin`)\n", |
| 327 | + "1. Käytä geopandasin `sjoin`-funktiota (`gpd.sjoin`).\n", |
325 | 328 | "2. Valitse parametreihin `left_df` ja `right_df` halutut GeoDataFramet, eli: `left_df=geo_lightnings` ja `right_df=municipalities`.\n",
|
326 | 329 | "3. Haluamme tiedon sen perusteella, minkä kunnan sisällä havainto on. Valitse siis predikaatiksi, eli `predicate`-parametrin arvoksi, `\"within\"`.\n",
|
327 | 330 | "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 | 473 | "lightning_counts.head()"
|
471 | 474 | ]
|
472 | 475 | },
|
| 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 | + }, |
473 | 486 | {
|
474 | 487 | "cell_type": "markdown",
|
475 | 488 | "id": "0b1e4263-18f4-4967-bf94-d973876ce1e7",
|
|
478 | 491 | "Nimetään vielä sarakkeet hieman selkeämmin. Tämä onnistuu esimerkiksi antamalla uudet sarakenimet listana:"
|
479 | 492 | ]
|
480 | 493 | },
|
| 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 | + }, |
481 | 505 | {
|
482 | 506 | "cell_type": "code",
|
483 | 507 | "execution_count": null,
|
484 | 508 | "id": "d1e5c678-c912-4704-99c6-d397f28c8192",
|
485 | 509 | "metadata": {},
|
486 | 510 | "outputs": [],
|
487 | 511 | "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" |
490 | 515 | ]
|
491 | 516 | },
|
492 | 517 | {
|
493 | 518 | "cell_type": "markdown",
|
494 | 519 | "id": "2f47cfc1-24da-4b49-bf92-4b0157a7a662",
|
495 | 520 | "metadata": {},
|
496 | 521 | "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" |
498 | 555 | ]
|
499 | 556 | },
|
500 | 557 | {
|
|
508 | 565 | " left=municipalities,\n",
|
509 | 566 | " right=lightning_counts,\n",
|
510 | 567 | " left_on=\"nimi\",\n",
|
511 |
| - " right_on=\"nimi\",\n", |
| 568 | + " right_on=\"municipality\",\n", |
512 | 569 | " how=\"left\",\n",
|
513 | 570 | ")\n",
|
514 | 571 | "municipalities"
|
|
523 | 580 | "\n",
|
524 | 581 | "Tarkistetaan analyysimme nopealla visualisoinnilla kuntakohtaisista havaintomääristä.\n",
|
525 | 582 | "\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." |
527 | 584 | ]
|
528 | 585 | },
|
529 | 586 | {
|
|
0 commit comments