高级筛选与分析
TechCorp 想为领导力发展项目识别高潜力员工:即年龄在 30 岁以下、但已经获得 Mid 或 Senior 薪资水平的员工。为此,您需要移除异常值,从数值型薪资生成类别型的薪资等级,然后组合多个筛选条件。相比简单筛选,这些技术能解决真实的业务问题。
Table、Selection 和 StringColumn 类已为您导入。
本练习是课程的一部分
Java 中的数据导入
练习说明
- 移除异常值(salary < $40K 或 > $250K)。
- 统计筛选后被移除的行数。
- 将薪资映射到
"Junior"、"Mid"和"Senior"等级。 - 筛选出年龄小于 30 岁且薪资等级为
"Mid"/"Senior"的员工。
交互式实操练习
通过完成这段示例代码来试试这个练习。
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));
}
}