Skip to content

Instantly share code, notes, and snippets.

@02JanDal
Last active November 13, 2019 12:25
Show Gist options
  • Save 02JanDal/1d7de055f7645bef5ca757467afbb85e to your computer and use it in GitHub Desktop.
Save 02JanDal/1d7de055f7645bef5ca757467afbb85e to your computer and use it in GitHub Desktop.
Python för Geodata
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "MK8vXs3lKhKc"
},
"source": [
"# Avsnitt 1.1: Lära känna IPython/Jupyter/Collaboratory\n",
"\n",
"Mig kan du dubbeklicka på för att ändra innehållet i!\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "YZ4k9GtxLVpP",
"outputId": "b2e9464f-985d-427a-cab4-cd1769dea98b"
},
"outputs": [],
"source": [
"# Jag är en cell som innehåller Pythonkod, du kan köra mig genom och se resultatet genom att:\n",
"# 1. Klicka på mig och sedan trycka Ctrl+Enter eller Alt+Enter (skapar även en ny cell direkt under)\n",
"# 2. Klicka på Play-knappen till vänster\n",
"print(\"Hello World!\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "gVwX-jFlL77I",
"outputId": "2661c8f0-d050-41d7-907f-9ebe9ea39764"
},
"outputs": [],
"source": [
"# Om sista raden i en kodcell ger ett värde kommer du även få se det\n",
"3 + 5"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "Qz1UcF82MGXh",
"outputId": "d07c310b-b677-4fa9-e770-937dc07958e0"
},
"outputs": [],
"source": [
"# Dock inte för andra rader, och print returnerar inget (None)\n",
"9 + 2\n",
"print(\"Inget matteresultat här inte!\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 72
},
"colab_type": "code",
"id": "h4b1Tt7hMQLF",
"outputId": "b050007d-02d3-4666-c7b3-7f798b44ea40"
},
"outputs": [],
"source": [
"# Med print kan du dock se flera resultat\n",
"print(5 + 2)\n",
"print(\"hej\" * 3)\n",
"print([4, 2, 3])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "jkx9XwubM50A"
},
"outputs": [],
"source": [
"# Celler hänger ihop!\n",
"a = 3"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "U8nDl1g5M6PF",
"outputId": "a0b3a453-7b91-488c-840a-8603362441ef"
},
"outputs": [],
"source": [
"print(a)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "IWkXeOqDK9SJ"
},
"source": [
"# Avsnitt 1.2: Variabler, värden och datatyper\n",
"\n",
"Välj mellan att använda `print` eller att ha uträkningen på sista raden för att lösa uppgifterna"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "pZyOwutBNEAi"
},
"source": [
"## Uppgift 1.2.1: Räkna ut antalet fingrar i rummet, samt minst en _bra_ kommentar"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "WUNAEzNcQaP6",
"outputId": "4bc6218d-c1a7-43d7-c8f6-fe88ba26407d"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "784w4DdDQeFp"
},
"source": [
"## Uppgift 1.2.2: Byt ut alla förekomster av `{}` mot något passande"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "iI-zLuQ7RH9v"
},
"outputs": [],
"source": [
"byggnader = [4, 7, 2, 3]\n",
"antal_byggnader {} len(byggnader)\n",
"print('Det har hittats ' + {} + ' byggnader')"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "ozNIYxjWRfYX"
},
"source": [
"# Avsnitt 1.3: Funktioner"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "zgnU7nZ9SFiL"
},
"source": [
"## Uppgift 1.3.1: Skriv en funktion som beräknar volymen av en boll\n",
"\n",
"* Tips: Formeln du behöver är \\begin{equation}\n",
"V_{klot} = \\frac{{4 * \\pi * r^3 }}{3}\n",
"\\end{equation} där radien är i meter och volymen i kubikmeter\n",
"* Tips: Om du inleder med raden `import math` kan du sedan skriva `math.pi` för att få ett exakt värde för π\n",
"* Tips: Exponenter skriver du som `x**y` i Python"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
},
"colab_type": "code",
"id": "bW-Lc372TFGk",
"outputId": "0ba43be7-a543-485c-f04a-58e4abd70f53"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "6ECi_GMFText"
},
"source": [
"## Uppgift 1.3.2: Använd din funktion för att beräkna storleken av boll med radien 3 meter"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "GP01BraqT6ZD"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "Fwk_Qp1PT7FX"
},
"source": [
"## Uppgift 1.3.3: Använd din funktion för att skriva en ny funktion som beräknar summan av volymerna av ett givet antal bollar av samma radius, och använd den för att beräkna den summerade volumen av 6 bolar med radien 2 meter"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "DPUAs1tpUIYE"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "zcGxCr-_ULKJ"
},
"source": [
"# Avsnitt 1.4: Listor, Loopar & If-satser"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "H38OxUvmUUWK"
},
"source": [
"## Uppgift 1.4.1: Skapa en lista med 3-5 tal\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "EiPg8iREVHzU"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "aj43bdCSXscf"
},
"source": [
"## Uppgift 1.4.2: Använd If-statser för att skriva ut olika meddelanden beroende på om din lista innehåller 3, 4 eller 5 element\n",
"\n",
"Tips: Den inbyggda funktionen `len` ger dig antalet element i en lista\n",
"\n",
"OBS: Prova också lägga till eller ta bort element i din lista och köra båda celler igen för att se att du faktiskt skriver ut olika meddelanden\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "ehNkVtVaVKKH"
},
"source": [
"## Uppgift 1.4.3: Använd din volymfunktion och `print` (ett anrop till `print` för varje element i listan) för att beräkna volymen för bollar med radierna i din lista"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "4NPfTz8_VclE"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "P7wZdmQMVbfu"
},
"source": [
"## Uppgift 1.4.4: Använd din volymfunktion för att skapa en ny lista med samtliga volymer, skriv sedan ut summan av värdena i den listan\n",
"\n",
"Tips: Den inbyggda funktionen `sum` beräknar summan av värdena i en sekvens (t.ex. en lista)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "76swsK5qV-c7"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "srwceJfTV-5k"
},
"source": [
"## Uppgift 1.4.5: Upprepa 1.4.4 men med den givna listan och spara endast volymer större än 50 m<sup>3</sup> i den nya listan"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 127
},
"colab_type": "code",
"id": "bf-3QpeSWOxw",
"outputId": "6a428474-f105-4da2-d2f1-bd27e56ad4e9"
},
"outputs": [],
"source": [
"radier = [4, 2, 7, 1, 3, 2]\n",
"# fortsätt din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "2W5HmVejWu6B"
},
"source": [
"## Bonusuppgift 1.4.6: Upprepa 1.4.4 och 1.4.5 men använd dig av list comprehensions istället för vanliga loopar\n",
"\n",
"Fundera även på när vanliga loopar respektive comprehensions är att föredra. Finns det någon bra regel?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "SYuxClatYhHa"
},
"source": [
"# Avsnitt 1.5: Fler samlingstyper"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "j2PbLnQGYqaj"
},
"source": [
"## Uppgift 1.5.1: Skapa en `list`, ett `set`, en `tuple` och en `dict` med minst 2-3 värden vardera\n",
"\n",
"Prova gärna använda olika datatyper (heltal, flyttal, strängar, boolska värden, även samlingstyper)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "ybGQPBbYY4T_"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "OVIxEQhjY4_l"
},
"source": [
"## Uppgift 1.5.2: Lägg till ett värde i vardera variabel du just skapat\n",
"\n",
"Gick det med alla?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "oeMGA0UhZHAN"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "XSz-4RFOZHmU"
},
"source": [
"## Uppgift 1.5.3: Ta bort ett värde och uppdatera ett annat med vardera variabel\n",
"\n",
"Vilka gick det med?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "GTXA52LLZVQ9"
},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "QWL5OZeMZV_N"
},
"source": [
"## Uppgift 1.5.4: Använd `print` i en loop för att skriva ut alla värden i ditt `dict`\n",
"\n",
"Tips:\n",
"* `my_dict.items()` returnerar en lista (eller för att vara helt korrekt, en \"generator\") av tuplar i formen `(key, value)`\n",
"* Du kan direkt \"packa upp\" tuplar i en `for` loop såhär: `for a, b in [(3, 4), (1, 5), (6, 4)]:`"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Avsnitt 1.6: Klasser"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Uppgift 1.6.1: Byt ut alla `{}` så att det blir en korrekt Python-klass"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"{} Byggnad:\n",
" def {}init{}(self, width, height):\n",
" self._width = width\n",
" {} = height\n",
" \n",
" def omkrets({}):\n",
" return {}width * 2 + {} * 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Uppgift 1.6.2: Skapa en instans av byggnadsklassen med valfria dimensioner, och beräkna omkretsen"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Uppgift 1.6.3: Redigera byggnadsklassen ovan genom att lägga till en funktion som beräknar arean, och beräkna sedan arean för din byggnadsinstans\n",
"\n",
"Tips: Behöver du göra något mer än att ändra i klassdefinitionen och sedan anropa den nya funktionen här?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Avsnitt 1.7: Mer om strängar"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Uppgift 1.7.1: Skriv några valfria rader kod som använder sig av funktionerna `replace`, `split` och `join`\n",
"\n",
"Är lista den enda möjliga datatypen som kan ges till `join`?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Uppgift 1.7.2: Använd `format` för att skapa en textsträng som innehåller din byggnads (från avsnitt 1.6) area och omkrets _på olika rader_"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Avsnitt 1.8: Avslut\n",
"\n",
"\n",
"\n",
"Nu ska du få prova använda flera av de saker du lärt dig vid dessa övningar.\n",
"\n",
"* Slutresultatet måste innehålla anrop till samtliga funktioner/metoder du skapat\n",
"\n",
"Gör __en__ av följande uppgifter:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Uppgiftsalternativ 1.8.1: Byggnad och lägenhet\n",
"\n",
"* Skapa en ny klass för en byggnad\n",
"* Denna gång ska du inte spara bredd/längd utan istället x/y-koordinater. Exempel på koordinatlistor:\n",
"```python\n",
"[(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]\n",
"[(5, 5), (10, 5), (10, 10), (5, 10), (5, 5)]\n",
"```\n",
"* Klassen ska ha minst metoderna `area` och `omkrets`\n",
"\n",
"Tips:\n",
"* Du hittar en formel för att beräkna en polygons area [här](https://www.mathopenref.com/coordpolygonarea.html)\n",
"* Liksom `pi` hittar du funktionen `sqrt` (kvadratroten) i modulen `math`\n",
"\n",
"Gör så många av dessa som du hinner:\n",
"\n",
"* Skapa subklasser för bostadsbyggnad respektive komplementbyggnad\n",
"* Skapa en enkel klass för en lägenhet med minst 2 attribut\n",
"* Lägg till en lägenhetslista i en byggnadsklass. Vilken byggnadsklass passar den bäst i?\n",
"* Lägg till funktioner för att hantera lägenhetslistan (minst lägg till och ta bort)\n",
"* Skapa en lista med några bostadsbyggnader och med 0-2 lägenheter vardera, använd sedan `print` in en loop för att skriva ut byggnaderna i tabellform med kolumnerna _area_, _omkrets_ och _antal lägenheter_\n",
"\n",
"* Om du gjort samtliga av dessa har du använt både komposition och arv. Men vilken är vilken?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Uppgiftsalternativ 1.8.2: Geometrier och attributtabeller\n",
"\n",
"Du kommer ni skapa ett mycket simpelt GIS.\n",
"\n",
"* Skapa klasserna `Object` och `Polygon` där `Object` är en grundklass för alla olika typer av geometrityper och där `Polygon` är en subklass av `Object`\n",
"* Lägg till attribut för koordinater. Vilken/vilka klasser passar detta i? Exempel på koordinatlistor:\n",
"```python\n",
"[(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]\n",
"[(5, 5), (10, 5), (10, 10), (5, 10), (5, 5)]\n",
"```\n",
"* Lägg till metoderna `area` och `omkrets` i `Polygon` klassen\n",
"\n",
"Tips:\n",
"* Du hittar en formel för att beräkna en polygons area [här](https://www.mathopenref.com/coordpolygonarea.html)\n",
"* Liksom `pi` hittar du funktionen `sqrt` (kvadratroten) i modulen `math`\n",
"\n",
"Gör så många av dessa som du hinner:\n",
"\n",
"* Skapa en ytterligare subklass av `Object` för punktobjekt\n",
"* Ge objekten användardefinerbara attribut samt metoder för att lägga till, ändra och ta bort dem. Vilken samlingstyp passar bra för detta?\n",
"* Skapa en funktion som givet en lista av polygoner lägger till de användardefinerbara attributen _area_ och _omkrets_ med värden enligt respektive funktion, och sedan returnerar listan\n",
"* Skapa en lista med några polygoner med varierande koordinater och använd den funktion du skapade i förgående steg för att ge dem attributen _area_ och _omkrets_, använd sedan `print` in en loop för att skriva ut objekten med deras attribut i tabellform"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# din kod här"
]
}
],
"metadata": {
"colab": {
"collapsed_sections": [],
"name": "Python för Geodata Övning 1.ipynb",
"provenance": [],
"toc_visible": true,
"version": "0.3.2"
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment