1 changed files with 0 additions and 142 deletions
@ -1,142 +0,0 @@ |
|||
package java01; |
|||
|
|||
import java.util.*; |
|||
import java.util.stream.Collectors; |
|||
|
|||
public class DataAnalyzer { |
|||
private DataCleaner cleaner; |
|||
|
|||
public DataAnalyzer() { |
|||
this.cleaner = new DataCleaner(); |
|||
} |
|||
|
|||
// 统计技能词频
|
|||
public Map<String, Integer> analyzeSkillFrequency(List<Job> jobs) { |
|||
Map<String, Integer> skillMap = new HashMap<>(); |
|||
|
|||
for (Job job : jobs) { |
|||
String skills = job.getSkills(); |
|||
if (skills != null && !skills.isEmpty()) { |
|||
String[] skillArray = skills.split(" "); |
|||
for (String skill : skillArray) { |
|||
if (!skill.isEmpty()) { |
|||
skillMap.put(skill, skillMap.getOrDefault(skill, 0) + 1); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 按词频排序
|
|||
return skillMap.entrySet().stream() |
|||
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed()) |
|||
.collect(Collectors.toMap( |
|||
Map.Entry::getKey, |
|||
Map.Entry::getValue, |
|||
(e1, e2) -> e1, |
|||
LinkedHashMap::new |
|||
)); |
|||
} |
|||
|
|||
// 分析薪资与经验的关系
|
|||
public Map<String, Double> analyzeSalaryByExperience(List<Job> jobs) { |
|||
Map<String, List<Integer>> experienceSalaryMap = new HashMap<>(); |
|||
|
|||
for (Job job : jobs) { |
|||
String experience = job.getExperience(); |
|||
int minSalary = cleaner.extractMinSalary(job.getSalary()); |
|||
int maxSalary = cleaner.extractMaxSalary(job.getSalary()); |
|||
int avgSalary = (minSalary + maxSalary) / 2; |
|||
|
|||
if (!experience.isEmpty() && avgSalary > 0) { |
|||
experienceSalaryMap.computeIfAbsent(experience, k -> new ArrayList<>()).add(avgSalary); |
|||
} |
|||
} |
|||
|
|||
// 计算每个经验级别的平均薪资
|
|||
Map<String, Double> result = new HashMap<>(); |
|||
for (Map.Entry<String, List<Integer>> entry : experienceSalaryMap.entrySet()) { |
|||
double avgSalary = entry.getValue().stream().mapToInt(Integer::intValue).average().orElse(0); |
|||
result.put(entry.getKey(), avgSalary); |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
|
|||
// 分析薪资与学历的关系
|
|||
public Map<String, Double> analyzeSalaryByEducation(List<Job> jobs) { |
|||
Map<String, List<Integer>> educationSalaryMap = new HashMap<>(); |
|||
|
|||
for (Job job : jobs) { |
|||
String education = job.getEducation(); |
|||
int minSalary = cleaner.extractMinSalary(job.getSalary()); |
|||
int maxSalary = cleaner.extractMaxSalary(job.getSalary()); |
|||
int avgSalary = (minSalary + maxSalary) / 2; |
|||
|
|||
if (!education.isEmpty() && avgSalary > 0) { |
|||
educationSalaryMap.computeIfAbsent(education, k -> new ArrayList<>()).add(avgSalary); |
|||
} |
|||
} |
|||
|
|||
// 计算每个学历级别的平均薪资
|
|||
Map<String, Double> result = new HashMap<>(); |
|||
for (Map.Entry<String, List<Integer>> entry : educationSalaryMap.entrySet()) { |
|||
double avgSalary = entry.getValue().stream().mapToInt(Integer::intValue).average().orElse(0); |
|||
result.put(entry.getKey(), avgSalary); |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
|
|||
// 分析不同地点的薪资水平
|
|||
public Map<String, Double> analyzeSalaryByLocation(List<Job> jobs) { |
|||
Map<String, List<Integer>> locationSalaryMap = new HashMap<>(); |
|||
|
|||
for (Job job : jobs) { |
|||
String location = job.getLocation(); |
|||
int minSalary = cleaner.extractMinSalary(job.getSalary()); |
|||
int maxSalary = cleaner.extractMaxSalary(job.getSalary()); |
|||
int avgSalary = (minSalary + maxSalary) / 2; |
|||
|
|||
if (!location.isEmpty() && avgSalary > 0) { |
|||
locationSalaryMap.computeIfAbsent(location, k -> new ArrayList<>()).add(avgSalary); |
|||
} |
|||
} |
|||
|
|||
// 计算每个地点的平均薪资
|
|||
Map<String, Double> result = new HashMap<>(); |
|||
for (Map.Entry<String, List<Integer>> entry : locationSalaryMap.entrySet()) { |
|||
double avgSalary = entry.getValue().stream().mapToInt(Integer::intValue).average().orElse(0); |
|||
result.put(entry.getKey(), avgSalary); |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
|
|||
// 获取薪资分布
|
|||
public Map<String, Integer> analyzeSalaryDistribution(List<Job> jobs) { |
|||
Map<String, Integer> salaryDistribution = new HashMap<>(); |
|||
|
|||
for (Job job : jobs) { |
|||
int avgSalary = (cleaner.extractMinSalary(job.getSalary()) + cleaner.extractMaxSalary(job.getSalary())) / 2; |
|||
|
|||
String salaryRange; |
|||
if (avgSalary < 5000) { |
|||
salaryRange = "5K以下"; |
|||
} else if (avgSalary < 10000) { |
|||
salaryRange = "5K-10K"; |
|||
} else if (avgSalary < 15000) { |
|||
salaryRange = "10K-15K"; |
|||
} else if (avgSalary < 20000) { |
|||
salaryRange = "15K-20K"; |
|||
} else if (avgSalary < 30000) { |
|||
salaryRange = "20K-30K"; |
|||
} else { |
|||
salaryRange = "30K以上"; |
|||
} |
|||
|
|||
salaryDistribution.put(salaryRange, salaryDistribution.getOrDefault(salaryRange, 0) + 1); |
|||
} |
|||
|
|||
return salaryDistribution; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue