Excel 数据恢复:自动填充缺失数据 (KNN 算法和时间规律)
为了实现自动识别每个月的数据组数,可以在 fillMissingData 方法中添加如下代码:
// 存储每个月的数据组数
List
这段代码会遍历每一行,解析日期并获取月份,如果月份发生变化,则将上一个月的数据组数添加到 groupCounts 列表中,最后将最后一个月的数据组数也添加到列表中。
接下来,可以使用 groupCounts 列表来判断每个月的数据组数,如果不够五组,则插入日期和数据。代码如下:
// 遍历每个月的数据组数 for (int i = 0; i < groupCounts.size() - 1; i++) { int startRow = groupCounts.get(i) + 1; // 当前月份的起始行 int endRow = groupCounts.get(i + 1); // 下一个月份的起始行 int rowCount = endRow - startRow; // 当前月份的数据组数 if (rowCount < 5) { // 如果数据组数不足五组 Date startDate = parseDate(sheet.getRow(startRow).getCell(0).getStringCellValue()); // 获取起始日期 Date endDate = parseDate(sheet.getRow(endRow - 1).getCell(0).getStringCellValue()); // 获取结束日期 int monthCount = getMonthCount(startDate, endDate); // 获取月份差 if (monthCount > rowCount) { // 如果缺失月份数大于当前月份的数据组数 for (int j = rowCount; j < 5; j++) { // 对每个缺失的月份进行处理,最多补到五组 Row newRow = sheet.createRow(startRow + j); // 创建新的行 Cell newCell = newRow.createCell(0); // 创建新的单元格 Date newDate = getNextMonth(startDate, j + 1); // 获取下一个月的日期 newCell.setCellValue(dateFormat.format(newDate)); // 将日期填入单元格 double avg = calculateKNN(sheet, startRow - 1); // 计算KNN邻近算法填充的值 if (avg > 0) { // 如果填充的值大于 0 Cell valueCell = newRow.createCell(1); // 创建新的单元格 valueCell.setCellValue(Double.parseDouble(df.format(avg))); // 将填充的值填入单元格 } } } } }
这段代码会遍历每个月的数据组数,如果数据组数不足五组,则根据起始日期和结束日期计算缺失的月份数,并在每个缺失的
原文地址: https://www.cveoy.top/t/topic/f2kR 著作权归作者所有。请勿转载和采集!