Datenanalyse Teil II - Visualisierungen#

Natalie Widmann#

Wintersemester 2024 / 2025

Universität Leipzig

Ziel#

  • Wiederholung und Aufgaben zur Datenanalyse mit Pandas

  • Grundlagen der Datenvisualisierungen

Datenpipeline

# 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

df.head(n)

Zeigt die ersten n Zeilen des DataFrames an. Standardmäßig 5 Zeilen.

df.info()

Gibt eine Übersicht über die Struktur des DataFrames, einschließlich Datentypen.

df.describe()

Liefert deskriptive Statistiken für numerische Spalten.

df.columns

Listet alle Spaltennamen des DataFrames auf.

df.index

Zeigt den Index des DataFrames an.

df.dtypes

Zeigt die Datentypen jeder Spalte an.

df.sort_values(by='Spalte')

Sortiert den DataFrame basierend auf einer bestimmten Spalte.

df.groupby('Spalte')

Gruppiert den DataFrame nach einer Spalte und ermöglicht Aggregationen.

df.apply()

Wendet eine Funktion auf Spalten oder Zeilen an.

df['Spalte'].unique()

Gibt die eindeutigen Werte in jeder Spalte zurück.

df['Spalte'.value_counts()

Zählt die Häufigkeit von Werten in einer Spalte.

df['Spalte'].mean()

Berechnet den Durchschnitt der Werte in der Spalte.

df['Spalte'].min()

Gibt den kleinsten Wert in der Spalte zurück.

df['Spalte'].max()

Gibt den größten Wert in der Spalte zurück.

df['Spalte'].sum()

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.

  1. Berechne die Anzahl der Naturkatastrophen pro Jahr

  1. 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

data

Der DataFrame, der umstrukturiert werden soll.

values

Die Spalte, deren Werte aggregiert werden sollen (optional, wenn aggfunc ohne spezifische Werte arbeitet).

index

Die Spalte(n), die die Zeilen der Pivot-Tabelle darstellen.

columns

Die Spalte(n), die die Spalten der Pivot-Tabelle darstellen.

aggfunc

Die Aggregationsfunktion, die auf die Werte angewendet wird, z. B. sum, mean, size.

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()