티스토리 뷰

728x90
반응형

 

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

 

서울특별시_국민기초생활 수급자 동별 현황_07/31/2021

서울특별시 자치구, 동별 기초생계급여, 기초의료급여, 기초주거급여, 기초교육급여 수급자의 연령별 현황 자료를 제공합니다.

www.data.go.kr

 

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

 

tablesaw

Java dataframe and visualization library

jtablesaw.github.io

 

728x90
반응형
댓글