Geavanceerd filteren en analyseren
TechCorp wil high-potential medewerkers identificeren voor leiderschapsontwikkeling: jonge medewerkers (onder 30) die nu al Mid- of Senior-level salarissen verdienen. Daarvoor moet je uitschieters verwijderen, categorische salarisschalen maken op basis van numerieke data, en vervolgens meerdere filtercondities combineren. Met deze technieken kun je echte businessvragen aanpakken die je met eenvoudige filters niet oplost.
De klassen Table, Selection en StringColumn zijn alvast voor je geïmporteerd.
Deze oefening maakt deel uit van de cursus
Data importeren in Java
Oefeninstructies
- Verwijder uitschieters (salaris < $40K of > $250K).
- Tel hoeveel rijen er na het filteren zijn verwijderd.
- Koppel salarissen aan de schalen
"Junior","Mid"en"Senior". - Filter op
"Mid"/"Senior"én jonger dan 30 jaar.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
public class DataExploration {
public static void main(String[] args) {
// Start with the high earners table from previous exercises
Table employees = Table.read().csv("employees.csv");
// Remove outliers (salary < $40K or > $250K)
Selection outliers = employees.intColumn("Salary").isLessThan(____)
.or(employees.intColumn("Salary").isGreaterThan(____));
Table cleanedData = employees.____(outliers);
// Count rows removed after filtering
System.out.println("Employees after removing outliers: " + (employees.____() - cleanedData.____()));
// Map salaries to Junior, Mid, and Senior grades
StringColumn salaryGroup = cleanedData.intColumn("Salary").map(
salary -> {
if (salary < 100000) return "____";
else if (salary < 200000) return "Mid";
else if (salary >= 200000) return "____";
else return "Error";
},StringColumn::create).setName("SalaryGrade");
cleanedData = cleanedData.addColumns(salaryGroup);
// Filter for Mid/Senior grades under age 30
Selection highPotential = cleanedData.stringColumn("____")
.isEqualTo("Mid")
.or(cleanedData.stringColumn("SalaryGrade").isEqualTo("Senior"))
.and(cleanedData.intColumn("____").isLessThan(30));
Table highPotentialEmployees = cleanedData.where(____);
System.out.println(highPotentialEmployees.rowCount());
System.out.println(highPotentialEmployees.first(5));
}
}