diff --git a/harjoitukset/Harjoitus_1_(Pandas).ipynb b/harjoitukset/Harjoitus_1_(Pandas).ipynb
index 482841be042ba15aa9ff891313a46c721d260c3f..207e89217ae5534657ad4c3d5f22805e33adef34 100644
--- a/harjoitukset/Harjoitus_1_(Pandas).ipynb
+++ b/harjoitukset/Harjoitus_1_(Pandas).ipynb
@@ -18,12 +18,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Lisää tarvittavat kirjastot ja lue `testidata.csv` niminen tiedosto DataFrame-objektiin"
+    "#### Tehtävä 1. Lisää tarvittavat kirjastot ja lue `testidata.csv` niminen tiedosto DataFrame-objektiin"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -34,12 +34,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tulosta DataFrame-objektin viisi viimeistä riviä"
+    "#### Tehtävä 2. Tulosta DataFrame-objektin viisi viimeistä riviä"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -50,12 +50,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tulosta datan sarakkeiden otsikot list-objektina"
+    "#### Tehtävä 3. Tulosta datan sarakkeiden otsikot list-objektina"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -66,12 +66,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tulosta `sarake2`:n pituus"
+    "#### Tehtävä 4. Tulosta `sarake2`:n pituus"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -82,12 +82,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tulosta datan ensimmäinen rivin tiedot"
+    "#### Tehtävä 5. Tulosta datan ensimmäinen rivin tiedot"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -98,12 +98,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Pudota datasta  `Unnamed: 0` niminen sarake ja todenna lopputulos valitsemallasi tavalla"
+    "#### Tehtävä 6. Pudota datasta  `Unnamed: 0` niminen sarake ja todenna lopputulos valitsemallasi tavalla"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -114,12 +114,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Poista rivit, jos sarakkeessa `sarake1` esiintyy arvo 0.2 tai pienempi"
+    "#### Tehtävä 7. Poista rivit, jos sarakkeessa `sarake1` esiintyy arvo 0.2 tai pienempi"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -130,12 +130,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tulosta `sarake1` sarakkeen minimi- ja maksimiarvo"
+    "#### Tehtävä 8. Tulosta `sarake1` sarakkeen minimi- ja maksimiarvo"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -146,12 +146,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tee ensimmäisen rivin ensimmäisen sarakkeen arvosta nan"
+    "#### Tehtävä 9. Tee ensimmäisen rivin ensimmäisen sarakkeen arvosta nan"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -162,12 +162,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tallenna lopputulos data_export.csv-nimiseen tiedostoon (tiedostoa hyödynnetään seuraavassa harjoituksessa)."
+    "#### Tehtävä 10. Tallenna lopputulos data_export.csv-nimiseen tiedostoon (tiedostoa hyödynnetään seuraavassa harjoituksessa)."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
diff --git a/harjoitukset/Harjoitus_2_(Pandas).ipynb b/harjoitukset/Harjoitus_2_(Pandas).ipynb
index 8dd457e2af22bec0318b222d5026549892f6d640..e2caf5e23d6dea09d4b05d9d2ec9cfd23bbc6665 100644
--- a/harjoitukset/Harjoitus_2_(Pandas).ipynb
+++ b/harjoitukset/Harjoitus_2_(Pandas).ipynb
@@ -11,7 +11,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Lue edellisen harjoituksen lopussa tallennetun data_export.csv-tiedoston sisältö dataframeen siten, että Unnamed 0 -saraketta ei synny tiedoston lukemisen yhteydessä."
+    "#### Tehtävä 1. Lue edellisen harjoituksen lopussa tallennetun data_export.csv-tiedoston sisältö dataframeen siten, että Unnamed 0 -saraketta ei synny tiedoston lukemisen yhteydessä."
    ]
   },
   {
@@ -27,7 +27,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Pudota rivit, joissa esiintyy nan-arvo"
+    "#### Tehtävä 2. Pudota rivit, joissa esiintyy nan-arvo"
    ]
   },
   {
@@ -43,7 +43,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Muuta viidennen ja kymmenennen rivin kaikiksi arvoiksi nan"
+    "#### Tehtävä 3. Muuta viidennen ja kymmenennen rivin kaikiksi arvoiksi nan"
    ]
   },
   {
@@ -59,7 +59,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tulosta nan-arvojen määrä jokaisesta sarakkeesta DataFrame-objektista"
+    "#### Tehtävä 4. Tulosta nan-arvojen määrä jokaisesta sarakkeesta DataFrame-objektista"
    ]
   },
   {
@@ -75,7 +75,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Täytä edellä tehdyt nan-arvot lineaarisella interpolaatiolla"
+    "#### Tehtävä 5. Täytä edellä tehdyt nan-arvot lineaarisella interpolaatiolla"
    ]
   },
   {
@@ -91,7 +91,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Vaihda `sarake1`:n viimeiseksi arvoksi 94 ja `sarake3`:n viimeiseksi arvoksi 45"
+    "#### Tehtävä 6. Vaihda `sarake1`:n viimeiseksi arvoksi 94 ja `sarake3`:n viimeiseksi arvoksi 45"
    ]
   },
   {
@@ -107,7 +107,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Lisää uusi sarake DataFrame-objektiin (`sarake4`), joka koostuu sarakkeiden `sarake1` ja `sarake3` summasta"
+    "#### Tehtävä 7. Lisää uusi sarake DataFrame-objektiin (`sarake4`), joka koostuu sarakkeiden `sarake1` ja `sarake3` summasta"
    ]
   },
   {
@@ -123,7 +123,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Resetoi DataFrame-objektin indeksi ja tulosta rivien määrä"
+    "#### Tehtävä 8. Resetoi DataFrame-objektin indeksi ja tulosta rivien määrä"
    ]
   },
   {
@@ -139,7 +139,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tee DataFrame-objektin mittainen aikasarjadata haluamallasi aikavälillä ja tee siitä indeksisarake"
+    "#### Tehtävä 9. Tee DataFrame-objektin mittainen aikasarjadata haluamallasi aikavälillä ja tee siitä indeksisarake"
    ]
   },
   {
@@ -155,7 +155,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Muuta `sarake1` kaikki arvot merkkijonoiksi, joissa jokainen nolla on korvattu isolla 'ND'-kirjainyhdistelmällä."
+    "#### Tehtävä 10. Muuta `sarake1` kaikki arvot merkkijonoiksi, joissa jokainen nolla on korvattu isolla 'ND'-kirjainyhdistelmällä."
    ]
   },
   {
@@ -171,7 +171,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tee DataFrame-objektista kopio, jonka sarakkeiden nimet on muutettu seuraaviksi : `sarake5`, `sarake6`, `sarake7`, `sarake8`. Tämän jälkeen tee yksi iso DataFrame-objekti, joka koostuu alkuperäisestä DataFramesta sekä kopiosta niin, että ne on lisätty vierekkäin.\n",
+    "#### Tehtävä 11. Tee DataFrame-objektista kopio, jonka sarakkeiden nimet on muutettu seuraaviksi : `sarake5`, `sarake6`, `sarake7`, `sarake8`. Tämän jälkeen tee yksi iso DataFrame-objekti, joka koostuu alkuperäisestä DataFramesta sekä kopiosta niin, että ne on lisätty vierekkäin.\n",
     "\n",
     "\n",
     "| sarake1        | sarake2           | sarake3  | sarake4 | sarake5      | sarake6 | sarake7 | sarake8 |\n",
@@ -192,7 +192,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Sijoita `sarake5`:n viimeinen arvo muuttujaan sekä `sarake3`:n viimeinen arvo erilliseen muuttujaan juuri tehdystä DataFrame-objektista merkkijonomuodossa. Yhdistä kyseiset muuttujat merkkijonona ja poista kaksi viimeistä merkkiä lopputuloksesta. Lopuksi poista kaikki pisteet `.`."
+    "#### Tehtävä 12. Sijoita `sarake5`:n viimeinen arvo muuttujaan sekä `sarake3`:n viimeinen arvo erilliseen muuttujaan juuri tehdystä DataFrame-objektista merkkijonomuodossa. Yhdistä kyseiset muuttujat merkkijonona ja poista kaksi viimeistä merkkiä lopputuloksesta. Lopuksi poista kaikki pisteet `.`."
    ]
   },
   {
diff --git a/harjoitukset/Harjoitus_3_(Rest).ipynb b/harjoitukset/Harjoitus_3_(Rest).ipynb
index 0ad93367bf6281f6586e2bb12ae7281094666df9..1750579dbe495a21d1b03d6ccbf3863e0985621d 100644
--- a/harjoitukset/Harjoitus_3_(Rest).ipynb
+++ b/harjoitukset/Harjoitus_3_(Rest).ipynb
@@ -40,7 +40,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Lisää käytettävät kirjastot ja muodosta rajapinnan url-osoite päätteellä `/description/`"
+    "#### Tehtävä 1. Lisää käytettävät kirjastot ja muodosta rajapinnan url-osoite päätteellä `/description/`"
    ]
   },
   {
@@ -56,7 +56,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tee get-pyyntö osoitteeseen ja varmista, että haku onnistuu ja vastauskoodina on 200"
+    "#### Tehtävä 2. Tee get-pyyntö osoitteeseen ja varmista, että haku onnistuu ja vastauskoodina on 200"
    ]
   },
   {
@@ -72,7 +72,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tallenna vastaus muuttujaan listana, joiden elementit ovat json-muodossa"
+    "#### Tehtävä 3. Tallenna vastaus muuttujaan listana, joiden elementit ovat json-muodossa"
    ]
   },
   {
@@ -88,7 +88,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Valitse list-objektista viimeisin json-tietue, jonka `service_id`-avaimen arvo on 10473 (10473 arvoja on kolme) ja sijoita kyseisen json-tietueen `id`-avaimen arvo muuttujaan."
+    "#### Tehtävä 4. Valitse list-objektista viimeisin json-tietue, jonka `service_id`-avaimen arvo on 10473 (10473 arvoja on kolme) ja sijoita kyseisen json-tietueen `id`-avaimen arvo muuttujaan."
    ]
   },
   {
@@ -104,7 +104,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tee uusi get-pyyntö samaan osoitteeseen kuin aiemmin (myös päätepiste pysyy samana), mutta ota edellisessä kohdassa valittu muuttuja (muuttuja joka sisältää `id`:n arvon) huomioon pyynnössä"
+    "#### Tehtävä 5. Tee uusi get-pyyntö samaan osoitteeseen kuin aiemmin (myös päätepiste pysyy samana), mutta ota edellisessä kohdassa valittu muuttuja (muuttuja joka sisältää `id`:n arvon) huomioon pyynnössä"
    ]
   },
   {
@@ -120,7 +120,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tulosta vastauksesta `title`-avaimen arvo"
+    "#### Tehtävä 6. Tulosta vastauksesta `title`-avaimen arvo"
    ]
   },
   {
@@ -150,7 +150,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Hae Digitrafficin rajapinnasta palvelun ohjeiden mukaan tiedot junalle päivältä 06.06.2018, jonka numero on 1"
+    "#### Tehtävä 7. Hae Digitrafficin rajapinnasta palvelun ohjeiden mukaan tiedot junalle päivältä 06.06.2018, jonka numero on 1"
    ]
   },
   {
@@ -166,7 +166,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Muodosta edellisen tehtävän get-pyynnön tuloksesta DataFrame (koko Junan 1 päivän 06.06.2018 datasta), jos yksikin `scheduledTime`-avaimen arvo on ennen aikaleimaa '2018-06-06T06:00:00.000Z'."
+    "#### Tehtävä 8. Muodosta edellisen tehtävän get-pyynnön tuloksesta DataFrame (koko Junan 1 päivän 06.06.2018 datasta), jos yksikin `scheduledTime`-avaimen arvo on ennen aikaleimaa '2018-06-06T06:00:00.000Z'."
    ]
   },
   {
@@ -182,7 +182,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tulosta ainoa rivi generoidusta DataFrame-objektista, jos sellainen muodostetaan."
+    "#### Tehtävä 9. Tulosta ainoa rivi generoidusta DataFrame-objektista, jos sellainen muodostetaan."
    ]
   },
   {
diff --git a/harjoitukset/Harjoitus_4_(SQLite).ipynb b/harjoitukset/Harjoitus_4_(SQLite).ipynb
index 6a2cac0389dc581b56d44e3dcb008a0c850862d9..929f3618e99ff0f0f79a32aef994e2637274b265 100644
--- a/harjoitukset/Harjoitus_4_(SQLite).ipynb
+++ b/harjoitukset/Harjoitus_4_(SQLite).ipynb
@@ -11,7 +11,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Lisää tarvittavat kirjastot ja tee `testi.db` niminen tietokanta (SQLite3)"
+    "#### Tehtävä 1. Lisää tarvittavat kirjastot ja tee `testi.db` niminen tietokanta (SQLite3)"
    ]
   },
   {
@@ -27,7 +27,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Luo yhteys tietokantaan"
+    "#### Tehtävä 2. Luo yhteys tietokantaan"
    ]
   },
   {
@@ -43,7 +43,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Tee tietokantaan seuraavanlainen taulu, jonka nimi on `henkilotaulu`:\n",
+    "#### Tehtävä 3. Tee tietokantaan seuraavanlainen taulu, jonka nimi on `henkilotaulu`:\n",
     "    \n",
     "| Nimi        | Ika           | Kengankoko  |\n",
     "| ------------- |-------------| -----|\n",
@@ -66,7 +66,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Kun Taulu on tehty, niin hae taulu Pandasin DataFrame-objektiin ja lisää siihen sarake `Hatunkoko`, jonka jälkeen täytä se valitsemillasi arvoilla"
+    "#### Tehtävä 4. Kun Taulu on tehty, niin hae taulu Pandasin DataFrame-objektiin ja lisää siihen sarake `Hatunkoko`, jonka jälkeen täytä se valitsemillasi arvoilla"
    ]
   },
   {
@@ -82,7 +82,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Tee taulusta kopio, jonka nimi on `henkilotaulukopio` ja lisää siihen rivi valitsemillasi arvoilla"
+    "#### Tehtävä 5. Tee taulusta kopio, jonka nimi on `henkilotaulukopio` ja lisää siihen rivi valitsemillasi arvoilla"
    ]
   },
   {
@@ -98,7 +98,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Tallenna lopuksi tietokannan muutokset ja sulje yhteys"
+    "#### Tehtävä 6. Tallenna lopuksi tietokannan muutokset ja sulje yhteys"
    ]
   },
   {
diff --git a/harjoitukset/Harjoitus_5_(Regex).ipynb b/harjoitukset/Harjoitus_5_(Regex).ipynb
index a6e1ba54d0cfffb99024846b33ef6242ecee17f5..be7d47cbbccdd4e8dae2c664accef392324dc223 100644
--- a/harjoitukset/Harjoitus_5_(Regex).ipynb
+++ b/harjoitukset/Harjoitus_5_(Regex).ipynb
@@ -27,7 +27,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Lisää tarvittavat kirjastot"
+    "#### Tehtävä 1. Lisää tarvittavat kirjastot"
    ]
   },
   {
@@ -43,7 +43,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Etsi tekstistä kuinka monta kertaa sana `ipsum` esiintyy"
+    "#### Tehtävä 2. Etsi tekstistä kuinka monta kertaa sana `ipsum` esiintyy"
    ]
   },
   {
@@ -59,7 +59,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Etsi tekstistä kuinka monta kertaa merkkijono (ei siis sana!) `ipsum` esiintyy"
+    "#### Tehtävä 3. Etsi tekstistä kuinka monta kertaa merkkijono (ei siis sana!) `ipsum` esiintyy"
    ]
   },
   {
@@ -75,7 +75,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Hae tekstistä kaikki sanan `Excepteur` jälkeen (Huom: sanaa Excepteur ei oteta tulla mukaan tulosteeseen!)"
+    "#### Tehtävä 4. Hae tekstistä kaikki sanan `Excepteur` jälkeen (Huom: sanaa Excepteur ei oteta tulla mukaan tulosteeseen!)"
    ]
   },
   {
@@ -91,7 +91,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Etsi kaikki sanat, jotka ovat sulkujen `()` sisällä"
+    "#### Tehtävä 5. Etsi kaikki sanat, jotka ovat sulkujen `()` sisällä"
    ]
   },
   {
@@ -107,7 +107,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Valitse kaikki sanat, jotka päättyvät merkkeihin `at`."
+    "#### Tehtävä 6. Valitse kaikki sanat, jotka päättyvät merkkeihin `at`."
    ]
   },
   {
@@ -123,7 +123,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Etsi sanat, jotka sisältävät merkkijonon `olo`, mutta eivät ala tai pääty kyseisellä merkkijonolla"
+    "#### Tehtävä 7. Etsi sanat, jotka sisältävät merkkijonon `olo`, mutta eivät ala tai pääty kyseisellä merkkijonolla"
    ]
   },
   {
@@ -139,7 +139,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Etsi seuraava tekstistä kaikki osoitteet, jotka ovat muotoa ip-osoite:porttinumero (esim. 192.168.1.1:8080) ilman staattista hakua tai `r'\\[.*?\\]'`/vastaavaa kaiken hakasulkeiden sisältä palauttavaa syntaksia."
+    "#### Tehtävä 8. Etsi seuraava tekstistä kaikki osoitteet, jotka ovat muotoa ip-osoite:porttinumero (esim. 192.168.1.1:8080) ilman staattista hakua tai `r'\\[.*?\\]'`/vastaavaa kaiken hakasulkeiden sisältä palauttavaa syntaksia."
    ]
   },
   {
@@ -173,4 +173,4 @@
  },
  "nbformat": 4,
  "nbformat_minor": 2
-}
+}
\ No newline at end of file
diff --git a/harjoitustyo/harjoitustyo.ipynb b/harjoitustyo/harjoitustyo.ipynb
index 1408065528984c73ff8df108f94a03e97090794e..6d0029a8e112949ebedbec4627946f856756775a 100644
--- a/harjoitustyo/harjoitustyo.ipynb
+++ b/harjoitustyo/harjoitustyo.ipynb
@@ -11,20 +11,20 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Vaihe 1:"
+    "## Vaihe 1"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Hae Digitrafficin REST-rajapintapalvelusta (JSON-formaatissa) aktiiviset junat pääteosoitteella `/live-trains` Helsingin asemalta, joiden hakuparametrit ovat seuraavat:\n",
+    "#### Tehtävä 1. Hae Digitrafficin REST-rajapintapalvelusta (JSON-formaatissa) aktiiviset junat pääteosoitteella `/live-trains` Helsingin asemalta, joiden hakuparametrit ovat seuraavat:\n",
     "* arrived_trains=10\n",
     "* departed_trains=10\n",
     "* include_nonstopping=False\n",
     "\n",
     "\n",
-    "#### Tämän jälkeen lue kyseinen data Pandasin dataframeen ilman muokkaamista, jolloin sarakkeiden otsikot ovat seuraavanlaiset:\n",
+    "#### Tehtävä 2. Tämän jälkeen lue kyseinen data Pandasin dataframeen ilman muokkaamista, jolloin sarakkeiden otsikot ovat seuraavanlaiset:\n",
     "\n",
     " `cancelled`,\n",
     " `commuterLineID`,\n",
@@ -54,7 +54,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Poista kaikki muut sarakkeet paitsi `timeTableRows` ja `trainNumber`"
+    "#### Tehtävä 3. Poista kaikki muut sarakkeet paitsi `timeTableRows` ja `trainNumber`"
    ]
   },
   {
@@ -70,7 +70,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Tämän jälkeen pura `timeTableRows` sarakkeen arvot jokaisesta junasta erikseen (sarakkeen arvo jokaiselle junalle sisältää useampia JSON-objekteja) ja lisää dataan mukaan junan tiedot yksilöivä `trainNumber`"
+    "#### Tehtävä 4. Tämän jälkeen pura `timeTableRows` sarakkeen arvot jokaisesta junasta erikseen (sarakkeen arvo jokaiselle junalle sisältää useampia JSON-objekteja) ja lisää dataan mukaan junan tiedot yksilöivä `trainNumber`"
    ]
   },
   {
@@ -86,7 +86,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Pudota sitten seuraavat sarakkeet datasta: `causes`, `estimateSource`, `liveEstimateTime`, `differenceInMinutes`, `commercialStop` ja `trainReady`"
+    "#### Tehtävä 5. Pudota sitten seuraavat sarakkeet datasta: `causes`, `estimateSource`, `liveEstimateTime`, `differenceInMinutes`, `commercialStop` ja `trainReady`"
    ]
   },
   {
@@ -102,7 +102,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "#### Täytä jokaisen rivin sarakkeen `actualTime` puuttuvat arvot `scheduledTime` -sarakkeen arvolla."
+    "#### Tehtävä 6. Täytä jokaisen rivin sarakkeen `actualTime` puuttuvat arvot `scheduledTime` -sarakkeen arvolla."
    ]
   },
   {
@@ -118,9 +118,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Vaihe 2:\n",
+    "## Vaihe 2\n",
     "\n",
-    "#### Pura tämän kansion sisällä olevan `data.html` -tiedoston `table`-elementin solujen arvot käyttäen regex-syntaksia ja yhdistä ne vaiheessa 1 luotuun dataframeen. Huom: tehtävässä tulee käyttää vain regexiä (Esim. Pandasin read_html()-metodin käyttö on kielletty)!"
+    "#### Tehtävä 7. Pura tämän kansion sisällä olevan `data.html` -tiedoston `table`-elementin solujen arvot käyttäen regex-syntaksia ja yhdistä ne vaiheessa 1 luotuun dataframeen. Huom: tehtävässä tulee käyttää vain regexiä (Esim. Pandasin read_html()-metodin käyttö on kielletty)!"
    ]
   },
   {
@@ -136,9 +136,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### Vaihe 3:\n",
+    "## Vaihe 3\n",
     "\n",
-    "#### Tee SQLite tietokanta ja lisää sinne vaiheessa 2 luotu dataframe.\n"
+    "#### Tehtävä 8. Tee SQLite tietokanta ja lisää sinne vaiheessa 2 luotu dataframe.\n"
    ]
   },
   {