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