Avancerad filtrering och analys
TechCorp vill identifiera medarbetare med hög potential för ledarskapsutbildning: unga anställda (under 30 år) som redan har löner på Mid- eller Senior-nivå. Det här kräver att du tar bort extremvärden, skapar kategoriska lönegraderingar från numeriska data och kombinerar flera filtervillkor. Dessa tekniker hanterar verkliga affärsfrågor som enkla filter inte klarar av.
Klasserna Table, Selection och StringColumn har redan importerats.
Den här övningen är en del av kursen
Importera data i Java
Övningsinstruktioner
- Ta bort extremvärden (lön < 40 000 \( eller > 250 000 \)).
- Räkna antalet borttagna rader efter filtreringen.
- Mappa löner till graderingarna
"Junior","Mid"och"Senior". - Filtrera fram
"Mid"/"Senior"-graderingar för anställda under 30 år.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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));
}
}