开始使用免费开始使用

高级筛选与分析

TechCorp 想为领导力发展项目识别高潜力员工:即年龄在 30 岁以下、但已经获得 Mid 或 Senior 薪资水平的员工。为此,您需要移除异常值,从数值型薪资生成类别型的薪资等级,然后组合多个筛选条件。相比简单筛选,这些技术能解决真实的业务问题。

TableSelectionStringColumn 类已为您导入。

本练习是课程的一部分

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

	}
}
编辑并运行代码