Mayoral Appointee Salaries

by Devon Ankar for class DSE 6000 @ Wayne State University

Salary information for all mayoral appointees

Anyone who lives or works in Detroit pays taxes to the city, so we want to know where that money is going. We want to find key facts about where our taxpayer dollars are going.

Question: Which departments have the highest mean salaries?

Initial hypothesis: Mayor's Office will have the highest mean salary

In [18]:
import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt
import seaborn as sns

salaries = pd.read_csv('Mayoral_Appointee_Salaries.csv', encoding = "ISO-8859-1")

salaries.head(10)
Out[18]:
LAST NAME FIRST NAME TITLE DEPARTMENT/AREA CITY SALARY CONTRACTOR ADDITIONAL GRANT SUPPORT TOTAL SALARY GRANT SUPPORTER Note
0 Ali Mona Deputy District Manager Mayor's Office $59360.31 NaN $0.00 $59360.31 NaN NaN
1 Anderson Janet G. Deputy Director General Services $122939.00 NaN $0.00 $122939.00 NaN NaN
2 Azar Letty District Manager Mayor's Office $82736.97 NaN $0.00 $82736.97 NaN NaN
3 Barnett Jasmine Director of Constituent Affairs Mayor's Office $56999.99 NaN $0.00 $56999.99 NaN NaN
4 Barnhill Bryan C II Chief Talent Officer Mayor's Office $114728.25 NaN $0.00 $114728.25 NaN NaN
5 Beckham Charles Group Executive of Neighborhoods Mayor's Office $151214.00 NaN $0.00 $151214.00 NaN NaN
6 Bell Jr. David Director Buildings and Safety Engineering $154977.00 NaN $0.00 $154977.00 NaN NaN
7 Blanks-Smart Miriam Director Administrative Hearings $115568.00 NaN $0.00 $115568.00 NaN NaN
8 Brown Gary Director Water and Sewerage $175001.00 NaN $0.00 $175001.00 NaN NaN
9 Brundidge Ron Director Public Works $139219.00 NaN $0.00 $139219.00 NaN NaN
In [19]:
salaries.columns
Out[19]:
Index(['LAST NAME', 'FIRST NAME', 'TITLE', 'DEPARTMENT/AREA', 'CITY SALARY',
       'CONTRACTOR', 'ADDITIONAL GRANT SUPPORT', 'TOTAL SALARY',
       'GRANT SUPPORTER', 'Note'],
      dtype='object')
In [20]:
print(salaries['CITY SALARY'].head(10))
0     $59360.31
1    $122939.00
2     $82736.97
3     $56999.99
4    $114728.25
5    $151214.00
6    $154977.00
7    $115568.00
8    $175001.00
9    $139219.00
Name: CITY SALARY, dtype: object
In [21]:
salaries['CITY SALARY'] = [float(x.strip("$")) for x in salaries['CITY SALARY']]
print(salaries['CITY SALARY'].head(10))
0     59360.31
1    122939.00
2     82736.97
3     56999.99
4    114728.25
5    151214.00
6    154977.00
7    115568.00
8    175001.00
9    139219.00
Name: CITY SALARY, dtype: float64
In [22]:
print(salaries['ADDITIONAL GRANT SUPPORT'].head(10))
0    $0.00
1    $0.00
2    $0.00
3    $0.00
4    $0.00
5    $0.00
6    $0.00
7    $0.00
8    $0.00
9    $0.00
Name: ADDITIONAL GRANT SUPPORT, dtype: object
In [23]:
salaries['ADDITIONAL GRANT SUPPORT'] = [float(x.strip("$")) for x in salaries['ADDITIONAL GRANT SUPPORT']]
print(salaries['ADDITIONAL GRANT SUPPORT'].head(10))
0    0.0
1    0.0
2    0.0
3    0.0
4    0.0
5    0.0
6    0.0
7    0.0
8    0.0
9    0.0
Name: ADDITIONAL GRANT SUPPORT, dtype: float64
In [29]:
n = 20

filtered_salaries = salaries.filter(['DEPARTMENT/AREA','CITY SALARY'])
grouped_by_dept = filtered_salaries.groupby(['DEPARTMENT/AREA'],as_index=True).mean().sort_values(['CITY SALARY'], ascending=False);

plt.ticklabel_format(style='plain', axis='x')
data=grouped_by_dept.nlargest(n,'CITY SALARY')
sns.barplot(y=data.index, x=data['CITY SALARY'])
grouped_by_dept['CITY SALARY'] = grouped_by_dept.apply(lambda x: "{:,}".format(round(x['CITY SALARY'])), axis=1)

grouped_by_dept.head(n)
Out[29]:
CITY SALARY
DEPARTMENT/AREA
Police 248,228.0
Office of the Chief Financial Officer 230,625.0
Health Department 205,001.0
Housing Revitalization 184,400.0
Department of Innovation and Technology 176,505.0
Water and Sewerage 174,626.0
Human Resources - Labor Relations 155,406.0
Civil Rights, Inclusion and Opportunity 155,072.0
Transportation 155,002.0
Buildings and Safety Engineering 154,977.0
Planning and Development 154,967.0
Human Resources 151,226.0
Detroit Building Authority 147,088.0
Human Resources 144,986.0
Greater Detroit Resources Recovery Authority 143,427.0
Law 143,161.0
Municipal Parking 139,537.0
Fire 137,846.0
Sustainability 132,644.0
General Services 131,077.0

Initial hypothesis was Mayor's Office will have the highest mean salary - this is definitely false! Highest mean salaries are in Police, Office of the CFO, Health Dept.

Additional question: Which departments have the highest total additional grant support?

In [33]:
n = 4

filtered_salaries = salaries.filter(['DEPARTMENT/AREA','ADDITIONAL GRANT SUPPORT'])
grouped_by_dept = filtered_salaries.groupby(['DEPARTMENT/AREA'],as_index=True).sum().sort_values(['ADDITIONAL GRANT SUPPORT'], ascending=False);

plt.ticklabel_format(style='plain', axis='x')
data=grouped_by_dept.nlargest(n,'ADDITIONAL GRANT SUPPORT')
sns.barplot(y=data.index, x=data['ADDITIONAL GRANT SUPPORT'])
grouped_by_dept['ADDITIONAL GRANT SUPPORT'] = grouped_by_dept.apply(lambda x: "{:,}".format(round(x['ADDITIONAL GRANT SUPPORT'])), axis=1)

grouped_by_dept.head(n)
Out[33]:
ADDITIONAL GRANT SUPPORT
DEPARTMENT/AREA
Detroit Economic Growth Corporation/Association 279,000.0
Mayor's Office 55,000.0
Planning and Development 30,000.0
Administrative Hearings 0.0

Detroit Economic Growth has the overwhelming majority of the grant support. (The Detroit Economic Growth Corporation (DEGC) is responsible for several aspects of economic development, including commercial/industrial development and small business promotion, including Motor City Match.) This is to be expected because it is an entire corporation/association and not an individual department. Does Detroit Economic Growth receive a city salary?

In [34]:
salaries[salaries['DEPARTMENT/AREA'] == 'Detroit Economic Growth Corporation/Association']['CITY SALARY']
Out[34]:
53    0.0
Name: CITY SALARY, dtype: float64

It appears that Detroit Economic Growth does not receive a city salary. Then it is expected that it receives grant support instead.

Additional question: Which titles have the highest mean city salaries?

In [35]:
n = 10

filtered_salaries = salaries.filter(['TITLE','CITY SALARY'])
grouped_by_dept = filtered_salaries.groupby(['TITLE'],as_index=True).mean().sort_values(['CITY SALARY'], ascending=False);

plt.ticklabel_format(style='plain', axis='x')
data=grouped_by_dept.nlargest(n,'CITY SALARY')
sns.barplot(y=data.index, x=data['CITY SALARY'])
grouped_by_dept['CITY SALARY'] = grouped_by_dept.apply(lambda x: "{:,}".format(round(x['CITY SALARY'])), axis=1)

grouped_by_dept.head(n)
Out[35]:
CITY SALARY
TITLE
Chief of Police 248,228.0
Chief Financial Officer 230,625.0
Executive Management Team - Mayor's Office (Group Executive of Operations) 225,884.0
Executive Director and Health Officer 205,001.0
Chief Information Officer 176,505.0
Deputy Director/Chief Engineer Officer 174,250.0
Director of Government Affairs 155,072.0
Chief of Staff 155,072.0
Chief Operating Officer and Senior Counsel 155,072.0
Group Executive for Jobs and Economy 154,993.0

Chief of Police and CFO have the highest salaries.

Conclusions

Initial hypothesis was Mayor's Office will have the highest mean salary - this is definitely false! Highest mean salaries are in Police, Office of the CFO, Health Dept.

Detroit Economic Growth has the overwhelming majority of the grant support. It appears that Detroit Economic Growth does not receive a city salary.

Chief of Police and CFO have the highest salaries based on title.

Unfortunately, there are no variables here about which we can investigate possible correlations.