티스토리 뷰
python pandas와 비슷한(?) 기능을 가지고 있는 자바의 tablesaw를 사용해보려고 합니다.
자바에서도 CSV파일을 분석할 수 있다 ...!!!!!!!!!
tablesaw 사용을 위해
pom.xml dependencies에 tablesaw를 추가해줍니다
<dependency>
<groupId>tech.tablesaw</groupId>
<artifactId>tablesaw-core</artifactId>
<version>LATEST</version>
</dependency>
일단 첫번째로 tablesaw로 csv파일을 불러와봅니다.
FILE_PATH에는 파일 경로 및 파일명을 작성해주시면 됩니다.
import java.io.File;
import tech.tablesaw.api.Table;
String BASE_PATH = new File("").getAbsolutePath();
String FILE_PATH = BASE_PATH + "/src/main/resources/" + fileName;
Table tb = Table.read().csv(FILE_PATH);
System.out.println(tb);
저는 공공데이터포털에서
서울특별시_국민기초생활 수급자 동별 현황_07_31_2021.csv 파일을 다운받아서 넣어놨어요
한번 호출해보겠습니다 !
https://www.data.go.kr/data/15086093/fileData.do
짠
print로 출력한 내용이 아주 정상적으로 나온 것을 확인했어요
컬럼이 들어가있는 row는 자동적으로 ---------------------- 줄이 쳐져있네요 !
아래와 같이 head와 tail에 데이터 10개씩, 그리고 그 중간에 위치한 데이터들은 ... 으로 나오게 됩니다!
head, tail의 원하는 데이터만 뽑아올 수도 있어요
System.out.println(tb.first(20));
//System.out.println(tb.last(30));
데이터 행X열 shape를 출력해봅니다
String shape = tb.shape();
System.out.println(shape);
컬럼명 리스트를 출력해봅니다
List columns = tb.columnNames();
System.out.println(columns);
컬럼 데이터타입을 출력해봅니다
Table structure = tb.structure();
System.out.println(structure);
데이터 내용을 확인하기 위해서 기초통계를 내봅니다.
서울특별시_국민기초생활 수급자 동별 현황_07_31_2021.csv 파일에서 "수급권자수" 컬럼의 통계를 봐볼게요
Count, sum, Mean, Min, Max, Range, Variance, Std. Dev 까지 기초통계가 정상적으로 출력되었습니다.
Table summary = tb.column("수급권자수").summary();
//System.out.println(tb.column("수급권자수").summary());
원하는 통계만 설정해서 출력할 수도 있어요.
summarize를 활용해 "수급권자수" 컬럼의 mean, max, min을 구해봅니다.
평균 85.61959910913168명, 최대 2,022명, 최소 1명이 나왔네요
import static tech.tablesaw.aggregate.AggregateFunctions.*;
Table tb2 = tb.summarize(tb.nCol("수급권자수"), mean, max, min).apply();
//System.out.println(tb.summarize(tb.nCol("수급권자수"), mean, max, min).apply());
이번엔 "시군구"를 기준으로 평균 수급권자수를 구해봅니다
summarize 뒤에 .by(기준컬럼)을 붙여주면 됩니다.
기준컬럼을 여러개 둔다면 .by("a", "b", "c") 이렇게 작성!
System.out.println(tb.summarize("수급권자수", mean).by("시군구"));
특정컬럼이 아닌 테이블전체의 기초통계를 내고싶다면
tb.column().summary()가 아닌, tb.summary()를 사용!
tb.summary();
마지막으로 원하는 컬럼을 기준으로 데이터를 정렬해볼게요.
수급권자수 컬럼을 기준으로 오름차순된 것을 확인할 수 있습니다.
Table sort = tb.sortOn("수급권자수");
System.out.println(sort);
오름차순/내림차순 설정을 원한다면 AscendingOn, DescendingOn을 사용!
그 외에 시간범위에 대한 그룹화 등이 있습니다.
제 csv파일에는 시간범위 관련 컬럼이 없으므로 패스!
자세한 내용은 아래 출처(jtablesaw 깃헙)를 참고해주세요.
tb.summarize(amount, max).by(region, sales_datetime.month())
tb.summarize(amount, sales_datetime.timeWindows(ChronoUnit.MINUTE, 15)
https://jtablesaw.github.io/tablesaw/userguide/reducing.html
'프로그래밍 > Java' 카테고리의 다른 글
[java/spring] multiple checkbox request.getParameter (0) | 2022.06.28 |
---|---|
[java-Tablesaw] java jTablesaw tutorial 2! jTablesaw filter 필터링방법 (0) | 2022.05.19 |
[spring] java spring에서 파일업로드 시 MaxUploadSizeExceeded 오류 해결 (0) | 2022.05.17 |
[spring] spring web project에 mongoDB 연동하기 (0) | 2022.05.16 |
[java] 자바에서 이미지 배경색 투명으로 만드는 방법 (0) | 2022.04.05 |