Java代码来生成1万条6个特征和一个结果的数据,第一组数据随机生成,新一组数据是上一组数据的浮动在正负0.05之间,并将数据写入XLSX文件中。
时间: 2024-03-26 20:40:27 浏览: 15
好的,我可以为您提供Java代码来生成1万条6个特征和一个结果的数据,第一组数据随机生成,新一组数据是上一组数据的浮动在正负0.05之间,并将数据写入XLSX文件中。以下是代码示例:
```java
import java.io.File;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.util.Random;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class GenerateData {
private static final int ROWS = 10000; // 数据行数
private static final int FEATURES = 6; // 特征数
private static final String[] FEATURE_NAMES = {"feature1", "feature2", "feature3", "feature4", "feature5", "feature6"}; // 特征名称
private static final String RESULT_NAME = "result"; // 结果名称
private static final double FLUCTUATION = 0.05; // 浮动范围
public static void main(String[] args) {
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("data");
// 创建表头
Row headerRow = sheet.createRow(0);
for (int i = 0; i < FEATURES; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(FEATURE_NAMES[i]);
}
Cell resultCell = headerRow.createCell(FEATURES);
resultCell.setCellValue(RESULT_NAME);
// 生成第一组数据
Random random = new Random();
double[] previousFeatures = new double[FEATURES];
for (int i = 0; i < FEATURES; i++) {
double value = random.nextDouble();
previousFeatures[i] = new BigDecimal(value).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); // 保留两位小数
}
double previousResult = random.nextDouble();
Row previousRow = sheet.createRow(1);
for (int i = 0; i < FEATURES; i++) {
Cell cell = previousRow.createCell(i);
cell.setCellValue(previousFeatures[i]);
}
Cell previousResultCell = previousRow.createCell(FEATURES);
previousResultCell.setCellValue(new BigDecimal(previousResult).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); // 保留两位小数
// 生成新数据
for (int i = 2; i <= ROWS; i++) {
Row row = sheet.createRow(i);
double[] features = new double[FEATURES];
for (int j = 0; j < FEATURES; j++) {
double value = previousFeatures[j] + random.nextDouble() * FLUCTUATION * 2 - FLUCTUATION; // 生成浮动值
features[j] = new BigDecimal(value).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); // 保留两位小数
Cell cell = row.createCell(j);
cell.setCellValue(features[j]);
}
double result = previousResult + random.nextDouble() * FLUCTUATION * 2 - FLUCTUATION;
Cell resultCellData = row.createCell(FEATURES);
resultCellData.setCellValue(new BigDecimal(result).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); // 保留两位小数
previousFeatures = features;
previousResult = result;
}
// 写入XLSX文件
try {
FileOutputStream outputStream = new FileOutputStream(new File("data.xlsx"));
workbook.write(outputStream);
workbook.close();
System.out.println("数据已生成并写入文件!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在运行该代码后,您将在当前目录下找到名为" data.xlsx "的文件,其中包含1万行6个特征和一个结果的数据,第一组数据随机生成,新一组数据是上一组数据的浮动在正负0.05之间。