Datenanalyse Teil II - Visualisierungen#
Natalie Widmann#
Wintersemester 2024 / 2025
Universität Leipzig
Ziel#
Wiederholung und Aufgaben zur Datenanalyse mit Pandas
Grundlagen der Datenvisualisierungen
# Install a pip package im Jupyter Notebook
!pip3 install pandas
import pandas as pd
pd.set_option('display.float_format', '{:.2f}'.format)
Load Data#
data_url = "https://data.humdata.org/dataset/74163686-a029-4e27-8fbf-c5bfcd13f953/resource/c5ce40d6-07b1-4f36-955a-d6196436ff6b/download/emdat-country-profiles_2024_12_02.xlsx"
data = pd.read_excel(data_url, engine="openpyxl")
data
Data Cleaning#
# Data Cleaning
data = data.drop(index=0)
cols = ['Year', 'Total Events', 'Total Affected', 'Total Deaths', 'Total Damage (USD, adjusted)']
for col in cols:
data[col] = pd.to_numeric(data[col])
cols = ['ISO', 'Disaster Group', 'Total Damage (USD, adjusted)', 'CPI']
data.drop(cols, axis=1, inplace=True)
data
Recap - Die Wichtigsten Pandas Funktionen#
Funktion |
Beschreibung |
---|---|
|
Zeigt die ersten |
|
Gibt eine Übersicht über die Struktur des DataFrames, einschließlich Datentypen. |
|
Liefert deskriptive Statistiken für numerische Spalten. |
|
Listet alle Spaltennamen des DataFrames auf. |
|
Zeigt den Index des DataFrames an. |
|
Zeigt die Datentypen jeder Spalte an. |
|
Sortiert den DataFrame basierend auf einer bestimmten Spalte. |
|
Gruppiert den DataFrame nach einer Spalte und ermöglicht Aggregationen. |
|
Wendet eine Funktion auf Spalten oder Zeilen an. |
|
Gibt die eindeutigen Werte in jeder Spalte zurück. |
|
Zählt die Häufigkeit von Werten in einer Spalte. |
|
Berechnet den Durchschnitt der Werte in der Spalte. |
|
Gibt den kleinsten Wert in der Spalte zurück. |
|
Gibt den größten Wert in der Spalte zurück. |
|
Berechnet die Summe aller Werte in der Spalte. |
Groupby#
Die groupby-Funktion in Pandas wird verwendet, um Daten in Gruppen basierend auf einem oder mehreren Spaltenwerten zu organisieren. Auf diesen Gruppen können dann weitere Funktionen wie Berechnungen oder Transformationen angewendet werden.
Der Ablauf#
Gruppieren: Daten werden nach bestimmten Spaltenwerten gruppiert.
Anwenden: Auf jede Gruppe wird eine Operation (z. B. sum, mean, count) angewendet.
Kombinieren: Die Ergebnisse werden in einem neuen DataFrame oder Series zusammengefasst.
Wie viele Menschen waren je Naturkatastrophentyp betroffen?
Wie viele Menschen sind pro Jahr von Naturkatastrophen betroffen?
Wie viele Menschen sind in Deutschland pro Jahr und Katastrophentyp betroffen?
Apply#
Die apply-Funktion in Pandas wird verwendet, um eine benutzerdefinierte Funktion auf jede Zeile oder Spalte eines DataFrames oder auf jeden Wert einer Serie anzuwenden. Sie bietet Flexibilität, komplexe Berechnungen oder Transformationen effizient durchzuführen.
Syntax#
df['Spalte'].apply(func)
def process_country(value):
return value.lower().strip()
process_country(' aeDWEASF ')
data['Country'].apply(process_country)
Aufgaben#
Wie viele Naturkatastrophen gab es in Deutschland seit 2000?
Wann und was waren die schlimmsten Naturkatastrophen in Deutschland?
Wie viele Menschen waren insgesamt in Deutschland von Naturkatastrophen betroffen?
Wie viele Menschen waren insgesamt in Deutschland von Naturkatastrophen betroffen?
Wie viele Menschen sind 2024 in Deutschland bei Naturkatastrophen ums Leben gekommen?
Bei welchen Katastrophen in Deutschland starben mehr als 15 Personen?
Wie oft kommen die einzelnen Naturkatastrophentypen in Deutschland vor?
Einführungen in Datenvisualisierungen#
Ziel:
schnelle Visualisierung
besseres Verständnis der Daten
Schärfung und Überprüfung der Thesen
Nicht
schöne publizierbare Visualisierung
Matplotlib#
Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python.
Matplotlib makes easy things easy and hard things possible.
Install matplotlib:
!pip3 install --upgrade pip
!pip3 install --upgrade Pillow
!pip3 install matplotlib
import matplotlib.pyplot as plt
data['Disaster Type'].value_counts()
data['Disaster Type'].value_counts().plot(kind='bar')
data['Disaster Type'].value_counts().plot(kind='pie')
Plot mit Titel, X- und Y-Achse#
disaster_counts = data.groupby('Disaster Type')['Total Events'].sum()
disaster_counts.plot(kind='bar', color='skyblue', title='Anzahl an Naturkatastrophen nach Typ seit 2000')
plt.xlabel('Disaster Type')
plt.ylabel('Number of Events')
plt.show()
Aufgabe
Erstelle ein Diagramm das zeigt, wie sich die Anzahl an Naturkatastrophen pro Jahr entwickelt hat.
Berechne die Anzahl der Naturkatastrophen pro Jahr
Erstelle ein BarChart mit den Jahren auf der x-Achse und der Anzahl auf der y-Achse
Wie hat sich die Anzahl der Betroffenen Menschen über die Jahre entwickelt?
Pivot Table#
Die pivot_table-Funktion in Pandas dient dazu, Daten umzustrukturieren und zu aggregieren. Sie funktioniert ähnlich wie Pivot-Tabellen in Excel und wird häufig verwendet, um Daten in einer übersichtlicheren Form darzustellen.
Syntax
pd.pivot_table(data, values, index, columns, aggfunc)
Begriff |
Beschreibung |
---|---|
|
Der DataFrame, der umstrukturiert werden soll. |
|
Die Spalte, deren Werte aggregiert werden sollen (optional, wenn |
|
Die Spalte(n), die die Zeilen der Pivot-Tabelle darstellen. |
|
Die Spalte(n), die die Spalten der Pivot-Tabelle darstellen. |
|
Die Aggregationsfunktion, die auf die Werte angewendet wird, z. B. |
data.pivot_table(
index='Year', columns='Disaster Type', values='Total Events', aggfunc='sum', fill_value=0
)
data.pivot_table(
index='Country', columns='Disaster Type', values='Total Events', aggfunc='mean', fill_value=0
)
Stacked Bar Chart#
disaster_counts = data.pivot_table(
index='Year', columns='Disaster Type', values='Total Events', aggfunc='sum', fill_value=0
)
# stacked bar chart
disaster_counts.plot(kind='bar', stacked=True, figsize=(10, 6), colormap='tab10')
plt.title('Naturkatastrophen pro Jahr und Typ')
plt.xlabel('Jahr')
plt.ylabel('Anzahl')
plt.legend(title='Typen', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()
Karte#
summary = data.groupby('Country')['Total Events'].sum().reset_index()
summary.head()
import plotly.express as px
fig = px.choropleth(
summary,
locations="Country",
locationmode="country names",
color="Total Events",
title="Anzahl an Naturkatastrophen pro Land",
color_continuous_scale=px.colors.sequential.Plasma
)
# Increase figure size
fig.update_layout(
width=1000,
height=800
)
fig.show()