Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- import seaborn as sns
- df = pd.read_csv('btw21_strukturdaten.csv',delimiter=';', skiprows=8)
- res = pd.read_csv('kerg2_00286.csv', delimiter=';', skiprows=9)
- # erstmal daten maskieren
- mask = (res['Wahlart'] == 'BT') * \
- (res['Wahltag'] == '26.09.2021') * \
- (res['Gebietsart'] == 'Wahlkreis') * \
- (res['Gruppenart'] == 'Partei') * \
- (~res['Prozent'].isna()) * \
- (res['Stimme'] == 2) * \
- (res['Gruppenname'].map(lambda g: g in ['CDU', 'SPD', 'GRÜNE', 'DIE LINKE', 'FDP', 'AfD']))
- res = res[mask]
- res['Prozent'] = np.array(res['Prozent'].map(lambda s: float(s.replace(',', '.'))))
- criteria = ['Verfügbares Einkommen der privaten Haushalte 2018 (EUR je EW)',
- 'Arbeitslosenquote Februar 2021 - Männer',
- 'Kindertagesbetreuung am 01.03.2020 - Betreute Kinder 3 bis unter 6 Jahre (Betreuungsquote)',
- 'Bevölkerungsdichte am 31.12.2019 (EW je km²)',
- 'PKW-Bestand am 01.01.2020 - PKW insgesamt (je 1000 EW)']
- df = df[['Wahlkreis-Nr.'] + criteria] # ausdünnen
- res = res[['Gruppenname', 'Gebietsnummer', 'Prozent']]
- # Mittelwerte und Standardabweichungen für Skalierung
- scales = res.groupby('Gruppenname', as_index=False).aggregate({'Prozent': [np.mean, np.std]})
- # Prozente skalieren in "Standardabweichungen weg vom Mittelwert"
- res['Prozent_relativ'] = res.groupby('Gruppenname')['Prozent'].apply(lambda x: (x - x.mean()) / x.std())
- df2 = df.merge(res, left_on='Wahlkreis-Nr.', right_on='Gebietsnummer') # Strukturdaten und Ergbenis zusammenführen
- for c in criteria:
- g = sns.FacetGrid(df2, col="Gruppenname")
- # g.map(sns.scatterplot, "Prozent_relativ", "Verfügbares Einkommen der privaten Haushalte 2018 (EUR je EW)", alpha=.05)
- g.map(sns.scatterplot, "Prozent_relativ", c, alpha=.08, marker='.')
- g.add_legend()
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment