[java] OpenCSV를 사용하여 CSV 파일의 데이터를 임의로 피벗하는 방법은?

CSV(Comma-Separated Values) 파일은 데이터를 컴마(,)로 구분하여 저장하는 파일 형식입니다. Java에서는 OpenCSV 라이브러리를 사용하여 CSV 파일을 읽고 쓸 수 있습니다. 이 블로그 포스트에서는 OpenCSV를 사용하여 CSV 파일의 데이터를 피벗하는 방법을 알아보겠습니다.

1. OpenCSV 라이브러리 불러오기

첫째로, Maven을 사용하거나 OpenCSV JAR 파일을 다운로드하여 프로젝트에 추가합니다.

2. CSV 파일 읽기

먼저, CSV 파일을 읽어서 데이터를 가져옵니다. OpenCSV의 CSVReader를 사용하여 파일을 엽니다.

String csvFile = "example.csv";
CSVReader reader = new CSVReader(new FileReader(csvFile));

List<String[]> rows = reader.readAll();

3. 피벗 테이블 생성

다음으로, 가져온 데이터를 기반으로 피벗 테이블을 생성합니다. 피벗 테이블은 데이터를 재구성하여 행과 열을 바꾸고 집계 함수로 값을 계산하는 것입니다.

Map<String, Map<String, Double>> pivotTable = new HashMap<>();

// 첫 번째 행은 열 이름이므로 제외합니다.
for (int i = 1; i < rows.size(); i++) {
    String[] row = rows.get(i);
    String rowKey = row[0]; // 행의 값을 가져옵니다.

    for (int j = 1; j < row.length; j++) {
        String columnKey = rows.get(0)[j]; // 열의 값을 가져옵니다.

        if (!pivotTable.containsKey(columnKey)) {
            pivotTable.put(columnKey, new HashMap<>());
        }

        double value = Double.parseDouble(row[j]);

        pivotTable.get(columnKey).put(rowKey, value);
    }
}

4. 피벗 테이블 출력

마지막으로, 생성한 피벗 테이블을 출력합니다. 예를 들어, 콘솔에 출력하는 방법은 다음과 같습니다.

for (Map.Entry<String, Map<String, Double>> columnEntry : pivotTable.entrySet()) {
    String columnKey = columnEntry.getKey();
    Map<String, Double> rowMap = columnEntry.getValue();

    for (Map.Entry<String, Double> rowEntry : rowMap.entrySet()) {
        String rowKey = rowEntry.getKey();
        double value = rowEntry.getValue();

        System.out.println(columnKey + ", " + rowKey + ", " + value);
    }
}

참고 자료