<jupyter_start><jupyter_text>Vorstände - EinzeldatenTabelle mit konkreten Bezügen für Personen, die unterteilt sind in Grundgehalt und erfolgsabhängige Bezüge. Größtenteils für NRW. Dazu ausgewählte Sparkassen in Hessen und für andere Bundesländer<jupyter_code>df = pd.read_csv('./data/jahresabschluss_vorstand.csv')
df_kerndaten = pd.read_csv('./data/jahresabschluss_kerndaten.csv')<jupyter_output><empty_output><jupyter_text>Wie hoch ist der Anteil erfolgsabhängiger Gehälter am Gesamtgehalt?  Die erfolgsabhängigen Bezüge für einen Vorstand werden immer erst im nächsten Jahr ausgewiesen, daher gelten die Werte von `erfolgsabhaengige_bezuege` von 2014 für den Zeitraum von 2013, in dem diejenige Person im Vorstand war.<jupyter_code># convert to date
df.since = pd.to_datetime(df.since)
df.until = pd.to_datetime(df.until)

# set year
df['year'] = df.until.map(lambda x: x.year)

# get "feste_bezuege" of year before
def get_salary(row):
    if row.year == 2014:
        lookup = df[(df.name == row['name']) & (df.year == 2013)]
        if len(lookup) == 1:
            return lookup.iloc[0].feste_bezuege

df['feste_bezuege_2013'] = df.apply(get_salary, axis=1)

# calculate quota
df['bezuege_quote_zu_2013'] = df.erfolgsabhaengige_bezuege / df.feste_bezuege_2013
df_bezuege_quota = df[(df.bezuege_quote_zu_2013 > 0) & (df.year == 2014)]
df_bezuege_quota.bezuege_quote_zu_2013.plot.hist(bins=20)<jupyter_output><empty_output><jupyter_text>Gibt es Anteile, die auffällig hoch sind?Empfehlung: nicht mehr als 15 %  Wie viele sind über der Verbandsempfehlung?<jupyter_code>len(df_bezuege_quota[df_bezuege_quota.bezuege_quote_zu_2013 > 0.15].index)
df_bezuege_quota[df_bezuege_quota.bezuege_quote_zu_2013 > 0.15].bezuege_quote_zu_2013.plot.hist(bins=20)<jupyter_output><empty_output><jupyter_text>Wer kriegt am meisten Bonus?<jupyter_code>df_bezuege_quota[df_bezuege_quota.bezuege_quote_zu_2013 > 0.15].sort_values('bezuege_quote_zu_2013', ascending=False)[[
        'sparkasse',
        'name',
        'feste_bezuege',
        'erfolgsabhaengige_bezuege',
        'bezuege_quote_zu_2013'
    ]][:15]<jupyter_output><empty_output><jupyter_text>Welche Sparkassen vergeben eine hohe Quote?<jupyter_code># groupy by sparkasse
df_bezuege_group = df_bezuege_quota[
    ['sparkasse', 'feste_bezuege_2013', 'erfolgsabhaengige_bezuege']
].groupby('sparkasse', as_index=False).sum()

# merge with sparkassen kerndaten data
df_spk = pd.merge(df_bezuege_group, df_kerndaten, on='sparkasse')

# calculate overall quota
df_spk['bezuege_quote_zu_2013'] = df_spk.erfolgsabhaengige_bezuege / df_spk.feste_bezuege_2013

# overview top 10
df_spk.sort_values('bezuege_quote_zu_2013', ascending=False)[
    ['sparkasse', 'feste_bezuege_2013', 'erfolgsabhaengige_bezuege', 'bezuege_quote_zu_2013']
][:10]
df_spk.bezuege_quote_zu_2013.plot.hist(bins=20)<jupyter_output><empty_output><jupyter_text>Wie unterscheidet sich diese Quote zwischen den Sparkassenverbänden?<jupyter_code>df_asso_states = pd.merge(df_bezuege_group, 
                   df_kerndaten[['sparkasse', 'anzahl_vorstaende_2013', 'verband', 'state']],
                   on='sparkasse')

df_asso_group = df_asso_states.groupby('verband', as_index=False).sum()

# get data per board member
df_asso_group['verguetung_per_member'] = df_asso_group.feste_bezuege_2013 / df_asso_group.anzahl_vorstaende_2013
df_asso_group['bezuege_per_member'] = df_asso_group.erfolgsabhaengige_bezuege / df_asso_group.anzahl_vorstaende_2013
df_asso_group['per_member_quota'] = df_asso_group.bezuege_per_member / df_asso_group.verguetung_per_member

df_asso_group<jupyter_output><empty_output><jupyter_text>Wie unterscheidet sich diese Quote zwischen den Bundesländern?<jupyter_code>df_state_group = df_asso_states.groupby('state', as_index=False).sum()

# get data per board member
df_state_group['verguetung_per_member'] = df_state_group.feste_bezuege_2013 / df_state_group.anzahl_vorstaende_2013
df_state_group['bezuege_per_member'] = df_state_group.erfolgsabhaengige_bezuege / df_state_group.anzahl_vorstaende_2013
df_state_group['per_member_quota'] = df_state_group.bezuege_per_member / df_state_group.verguetung_per_member

df_state_group<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10007147962830593, 'fraction_numerical': 0.035025017869907075, 'mean_word_length': 7.183235867446394, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 33, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '222866', 'license': 'MIT', 'n_tokens_mistral': 1782, 'n_tokens_neox': 1712, 'n_words': 245, 'path': 'sparkassen-vorstaende-einzeln.ipynb', 'repo_name': 'correctiv/sparkassen-notebooks', 'size': '4197'}