According to this data : Current Employee Names, Salaries, and Position Titles on City Of Chicago Data Portal https://data.cityofchicago.org/;
The Chicago government employees 32,160 employees, and pays approximately $2,429,980,941.36 in annual salaries.
Google Charts API was used.
CLICK ON Pictures FOR Focus. (temporary courtesy of imgur)
All Employees.
Let’s remove distinct Position-Titles with Less Then 10 Employees, and the position title of Police Officer from the data.
(20 or more), and, (200 or less); employee counts within a position title.
(10 or more), and,( 50 or less); employee counts within a position title.
C#
int counter = 0;
string line;
Dictionary<string, int> dCount = new Dictionary<string, int>();
Dictionary<string, decimal> dSalTotal = new Dictionary<string, decimal>();
Dictionary<string, LinkedList> dDeps = new Dictionary<string, LinkedList>();
System.IO.StreamReader file =
new System.IO.StreamReader("C:\\AAAChicagoEmployees\\Current_Employee_Names__Salaries__and_Position_Titles (1).csv");
while ((line = file.ReadLine()) != null)
{
string[] parts = line.Split(',');
try
{
string name = parts[2];
name = Regex.Replace(name, "'", "");
string dep = parts[3];
decimal sal = decimal.Parse(parts[4].TrimStart('$') );
if ( dCount.ContainsKey(name ) )
{
int a = dCount[name];
a += 1;
dCount[name] = a;
decimal b = dSalTotal[name];
b += sal;
dSalTotal[name] = b;
LinkedList c = dDeps[name];
c.AddLast(dep);
dDeps[name] = c;
}
else
{
dCount.Add(name, 1);
dSalTotal.Add(name, sal);
LinkedList newDepList = new LinkedList();
newDepList.AddLast(dep);
dDeps.Add(name, newDepList);
}
}
catch (Exception x)
{
//header line
}
counter++;
}
file.Close();
Dictionary<string, decimal> dAveOrder = new Dictionary<string, decimal>();
foreach (KeyValuePair<string, int> item in dCount.OrderBy(key => key.Value))
{
if (item.Value >= 10 && item.Value <= 50)
{
decimal aveSal = dSalTotal[item.Key] / item.Value;
dAveOrder.Add(item.Key, aveSal);
}
}
string json = "";
foreach (KeyValuePair<string, decimal> item in dAveOrder.OrderBy(key => key.Value))
{
Hashtable frequencyHash = new Hashtable();
LinkedList uniqueList = new LinkedList();
foreach (var element in dDeps[item.Key])
{
if (uniqueList.Contains(element))
{
int elementCount = int.Parse(frequencyHash[element].ToString());
elementCount++;
frequencyHash[element] = elementCount;
}
else
{
uniqueList.AddLast(element);
frequencyHash.Add(element, 1);
}
}
int max = 0;
string sMaxDep = "";
foreach (string element in frequencyHash.Keys)
{
int iDep = int.Parse(frequencyHash[element].ToString());
if (iDep > max)
{
max = iDep;
sMaxDep = element;
}
}
if (item.Key == "POLICE OFFICER")
{ }
else
{
json += "[ '" + item.Key + "', " + dCount[item.Key] + " , " + item.Value + " ,'" + Regex.Replace(sMaxDep, "'", "") + "' , " + item.Value + " ],\r\n";
}
}
System.IO.StreamWriter fileWrite = new System.IO.StreamWriter("c:\\AAAChicagoEmployees\\data.txt");
fileWrite.WriteLine(json);
fileWrite.Close(); |
int counter = 0;
string line;
Dictionary<string, int> dCount = new Dictionary<string, int>();
Dictionary<string, decimal> dSalTotal = new Dictionary<string, decimal>();
Dictionary<string, LinkedList> dDeps = new Dictionary<string, LinkedList>();
System.IO.StreamReader file =
new System.IO.StreamReader("C:\\AAAChicagoEmployees\\Current_Employee_Names__Salaries__and_Position_Titles (1).csv");
while ((line = file.ReadLine()) != null)
{
string[] parts = line.Split(',');
try
{
string name = parts[2];
name = Regex.Replace(name, "'", "");
string dep = parts[3];
decimal sal = decimal.Parse(parts[4].TrimStart('$') );
if ( dCount.ContainsKey(name ) )
{
int a = dCount[name];
a += 1;
dCount[name] = a;
decimal b = dSalTotal[name];
b += sal;
dSalTotal[name] = b;
LinkedList c = dDeps[name];
c.AddLast(dep);
dDeps[name] = c;
}
else
{
dCount.Add(name, 1);
dSalTotal.Add(name, sal);
LinkedList newDepList = new LinkedList();
newDepList.AddLast(dep);
dDeps.Add(name, newDepList);
}
}
catch (Exception x)
{
//header line
}
counter++;
}
file.Close();
Dictionary<string, decimal> dAveOrder = new Dictionary<string, decimal>();
foreach (KeyValuePair<string, int> item in dCount.OrderBy(key => key.Value))
{
if (item.Value >= 10 && item.Value <= 50)
{
decimal aveSal = dSalTotal[item.Key] / item.Value;
dAveOrder.Add(item.Key, aveSal);
}
}
string json = "";
foreach (KeyValuePair<string, decimal> item in dAveOrder.OrderBy(key => key.Value))
{
Hashtable frequencyHash = new Hashtable();
LinkedList uniqueList = new LinkedList();
foreach (var element in dDeps[item.Key])
{
if (uniqueList.Contains(element))
{
int elementCount = int.Parse(frequencyHash[element].ToString());
elementCount++;
frequencyHash[element] = elementCount;
}
else
{
uniqueList.AddLast(element);
frequencyHash.Add(element, 1);
}
}
int max = 0;
string sMaxDep = "";
foreach (string element in frequencyHash.Keys)
{
int iDep = int.Parse(frequencyHash[element].ToString());
if (iDep > max)
{
max = iDep;
sMaxDep = element;
}
}
if (item.Key == "POLICE OFFICER")
{ }
else
{
json += "[ '" + item.Key + "', " + dCount[item.Key] + " , " + item.Value + " ,'" + Regex.Replace(sMaxDep, "'", "") + "' , " + item.Value + " ],\r\n";
}
}
System.IO.StreamWriter fileWrite = new System.IO.StreamWriter("c:\\AAAChicagoEmployees\\data.txt");
fileWrite.WriteLine(json);
fileWrite.Close();