Skip to content
Snippets Groups Projects
Loading_Files.ipynb 9.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • {
     "cells": [
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "# Handling Different File Formats in Python: Loading and Saving\n",
        "\n",
        "<br/>\n",
        "<br/>\n",
        "\n",
        "Dieses Notebook finden Sie hier: https://scm.cms.hu-berlin.de/ibi/python/-/blob/master/programmierspass/Loading_Files.ipynb\n",
        "\n",
        "<br/>\n",
        "\n",
        "![CC-BY-NC](https://scm.cms.hu-berlin.de/ibi/python/-/raw/master/img/cc-by-nc.png)\n",
        "\n",
        "Dieses Notebook ist als freies Werk unter der Lizenz [Creative Commons Attribution-NonCommercial 3.0 Unported](http://creativecommons.org/licenses/by-nc/3.0/) verfügbar. Sie dürfen die Inhalte kopieren, verteilen und verändern, solange Sie die Urheber nennen und sie nicht für kommerzielle Zwecke nutzen."
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "## Was ist es und worum geht es?\n",
        "\n",
        "Zur **Analyse von Daten** ist es wichtig, dass **die Daten zunächst in Python geladen** werden, um sie anschließend verarbeiten zu können. Dies kann entweder aus einer lokalen Datei am PC oder direkt von einer Webseite erfolgen. Die erste Herausforderung besteht darin, dass es **viele verschiedene Dateiformate** gibt, die jeweils ihre eigene Struktur und Darstellung haben und dabei ihre Besonderheiten aufweisen.\n",
        "\n",
        "In diesem Notebook schauen wir uns an, wie man verschiedene Dateiformate in Python lädt und wieder abspeichert.\n",
        "\n",
        "Folgende Dateiformate werden abgedeckt:\n",
        "- csv (Comma-separated values)\n",
        "- tsv (Tab-separated values)\n",
        "- json (JavaScript Object Notation)\n",
        "- html (HyperText Markup Language)\n",
        "- xls/xlsx (Excel spreadsheets)\n",
        "- xml (Extensible Markup Language)\n",
        "- tar/gz (compressed files)\n",
        "\n",
        "\n"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "### CSV (Comma-separated values) und tsv (Tab-separated values)\n",
        "\n",
        "\n",
        "`csv`- und `tsv`-Dateien sind ähnlich, da sie Textdateien sind, die (in der Regel) strukturierte Daten enthalten, normalerweise in Form von Tabellen. Die Daten sind zeilenweise organisiert, wobei jede Zeile einen separaten Datensatz darstellt, der mehrere Datenfelder enthält, die in Spalten in der Tabelle stehen. \n",
        "Die Trennung der Datenfelder erfolgt durch ein besonderes `Trennzeichen`, bei `csv`-Dateien ist dies ein Komma (`,`), bei `tsv`-Dateien ein Tab (`\\t`). Theoretisch kann man auch ein anderes Trennzeichen verwenden.\n",
        "\n",
        "Hinweis: In `csv`-Dateien, die Zahlen im deutschen Format enthalten (d.h. die Dezimalstellen werden durch ein Komma getrennt: `100,00` statt `100.00`), ist das Trennzeichen oft ein Semikolon (`;`) und nicht ein Komma.\n",
        "\n",
        "Beispiel:\n",
        "\n",
        "| Stadt                          | Postleitzahl | Fläche (km²) | bev_insg |   bev_m |   bev_w |\n",
        "|--------------------------------|--------------|-------------:|---------:|--------:|--------:|\n",
        "| Berlin - Stadt                 | 10178        |       891.12 |  3677472 | 1807826 | 1869646 |\n",
        "| Hamburg - Freie und Hansestadt | 20038        |       755.09 |  1853935 |  907682 |  946253 |\n",
        "| München - Landeshauptstadt     | 80313        |        310.7 |  1487708 |  725594 |  762114 |\n",
        "| Köln - Stadt                   | 50667        |       405.01 |  1073096 |  521939 |  551157 |\n",
        "| Frankfurt am Main - Stadt      | 60311        |       248.31 |   759224 |  374525 |  384699 |"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import pandas\n",
        "\n",
        "# top50_german_cities.csv\n",
        "# top50_german_cities.tsv\n"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import csv\n"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import tsv\n"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "### XLS/XLSX (EXCEL Dateien)\n",
        "\n",
        "Excel kennt wohl jeder. Keine Einführung notwendig.\n"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import pandas as pd\n",
        "\n",
        "# top50_german_cities.xlsx\n"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "###  JSON (JavaScript Object Notation )\n",
        "\n",
        "`json`-Dateien sind ein weit verbreitetes Format für den Austausch von Daten im Internet. Sie sind eine Form von Textdateien, die Daten in einem lesbaren Format speichern. `json` steht für JavaScript Object Notation und das Format basiert auf JavaScript-Objekten.\n",
        "\n",
        "Eine `json`-Datei besteht aus Key-Value-Paaren, die miteinander durch Kommas getrennt sind. Die `keys` sind meist Zeichenketten, die in doppelten Anführungszeichen stehen, und die `values` können verschiedene Datentypen sein, wie Zahlen, Strings, Objekte oder Arrays/Listen.\n",
        "\n",
        "Das JSON-Format ermöglicht es, Daten einfach zu lesen und zu schreiben und es ist ein Standard für den Datenaustausch in vielen Web-API's.\n",
        "\n",
        "Beispiel (hash/dictionary/object):\n",
        "\n",
        "\n",
        "```\n",
        "{\n",
        "  \"Berlin - Stadt\": {\n",
        "    \"Postleitzahl\": 10178,\n",
        "    \"Fläche (km²)\": 891.12,\n",
        "    \"bev_insg\": 3677472,\n",
        "    \"bev_m\": 1807826,\n",
        "    \"bev_w\": 1869646\n",
        "  },\n",
        "  ...\n",
        "}\n",
        "  \n",
        "```\n",
        "\n",
        "Beispiel (array/list):\n",
        "\n",
        "```\n",
        "[\n",
        "  {\n",
        "    \"Stadt\": \"Berlin - Stadt\",\n",
        "    \"Postleitzahl\": 10178,\n",
        "    \"Fläche (km²)\": 891.12,\n",
        "    \"bev_insg\": 3677472,\n",
        "    \"bev_m\": 1807826,\n",
        "    \"bev_w\": 1869646\n",
        "  },\n",
        "  ...\n",
        "]\n",
        "```"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import pandas\n",
        "\n",
        "# top50_german_cities_array.json \n",
        "# top50_german_cities_hash.json"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import json\n"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "### HTML (Hypertext Markup Language)\n",
        "\n",
        "HTML (Hypertext Markup Language) ist eine Programmiersprache zur Strukturierung von Webseiten.\n",
        "Wir schauen uns im Folgenden an, wie man sehr einfach Tabellen aus Webseiten in Python laden kann ohne die Tabelle oder die Webseite herunterzuladen und anschließend schauen wir nochmal auf das allgemeine Laden von html Dateien in Python.\n",
        "\n",
        "1. HTML-Tabellen in Webseiten:\n",
        "https://de.wikipedia.org/wiki/Liste_der_Gro%C3%9Fst%C3%A4dte_in_Deutschland"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import pandas\n",
        "\n",
        "# https://de.wikipedia.org/wiki/Liste_der_Gro%C3%9Fst%C3%A4dte_in_Deutschland"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "2. allgemeine HTML Seiten abrufen und in Python lesen"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import requests"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "from bs4 import BeautifulSoup"
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "XML (Extensible Markup Language) ist eine Programmiersprache zur Beschreibung und Übertragung von Daten. Eine XML-Datei kann Daten in einer hierarchischen Struktur speichern, in der jedes Element ein anderes Element enthalten kann.\n",
        "\n",
        "Mit Pandas kann man eine XML-Datei lesen, indem man die Methode read_xml() verwendet. Diese Methode kann eine XML-Datei einlesen und in ein Pandas-DataFrame umwandeln. Man muss allerdings angeben, welches Element als Wurzelelement verwendet werden soll, da die XML-Datei sonst nicht richtig eingelesen werden kann."
       ]
      },
      {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
        "### tar/gz (Archivformate)\n",
        "\n",
        "Tar/gz Dateien sind Archivformate (genauso wie zum Beispiel .zip), die mehrere Dateien in einer einzigen Datei komprimieren und speichern. Diese Archivformate werden oft verwendet, um Daten effizient zu übertragen oder zu sichern, da sie den Speicherplatz sparen und die Übertragungszeit verkürzen.\n"
       ]
      },
      {
       "cell_type": "code",
       "execution_count": null,
       "metadata": {},
       "outputs": [],
       "source": [
        "import tarfile\n",
        "import pandas \n",
        "\n",
        "# top50_german_cities.tar.gz\n",
        "\n",
        "with tarfile.open(\"top50_german_cities.tar.gz\", \"r:gz\") as tar:\n",
        "    members = tar.getmembers()\n",
        "    for member in members:\n",
        "        print(pandas.read_xml(member.name).head(1))"
       ]
      }
     ],
     "metadata": {
      "language_info": {
       "name": "python",
       "pygments_lexer": "ipython3"
      }
     },
     "nbformat": 4,
     "nbformat_minor": 2
    }