Notice
Recent Posts
Recent Comments
Link
투케이2K
29. (spring/스프링) DB 데이터 사용해 자바 java 피어슨 상관 분석 수행 실시 - 프로시저 , 커서 , 상관 계수 본문
Spring
29. (spring/스프링) DB 데이터 사용해 자바 java 피어슨 상관 분석 수행 실시 - 프로시저 , 커서 , 상관 계수
투케이2K 2021. 9. 14. 08:22[개발 환경 설정]
개발 툴 : inteli j
개발 언어 : spring
[소스 코드]
// [post body json : Map 방식]
// [경로 지정 : http://localhost:7000/TEST_CAL_PRO]
// [json : {"user" : "1"} ]
@PostMapping("/TEST_CAL_PRO")
public String TEST_CAL_PRO(@RequestBody Map<String, String> param) {
System.out.println("\n");
System.out.println("============================");
System.out.println("[TEST_CAL_PRO] : [start]");
System.out.println("[request user] : " + String.valueOf(param.get("user")));
System.out.println("============================");
System.out.println("\n");
// [인풋으로 들어온 데이터 변수에 삽입]
String user = param.get("user");
// [DB 프로시저 실행 서비스 호출]
Map map = dbService.TEST_CAL_PRO(user);
// [MAP >> JSON 변환 실시]
JSONObject result = null;
String msg = "";
JSONArray curArray = null;
try{
// DB 프로시저 호출 결과 메시지 확인
result = new JSONObject(map);
if(result.has("msg")){
msg = String.valueOf(result.get("msg"));
}
// DB 프로시저 커서로 받은 데이터를 가지고 상관 분석 실시
if(result.has("cur")){
curArray = new JSONArray(String.valueOf(result.get("cur")));
}
}
catch (Exception e){
e.printStackTrace();
}
System.out.println("\n");
System.out.println("============================");
System.out.println("[TEST_CAL_PRO] : [프로시저 호출 데이터 확인]");
System.out.println("[cur] : " + String.valueOf(curArray.toString()));
System.out.println("[cur len] : " + String.valueOf(curArray.length()));
System.out.println("============================");
System.out.println("\n");
// [임시 고정 배열에 데이터 삽입 [컬럼 당 저장된 데이터 개수가 50개]
double T_AD_ARRAY[] = new double[50];
double T_PS_ARRAY[] = new double[50];
double T_GM_ARRAY[] = new double[50];
double T_ST_ARRAY[] = new double[50];
// [for 문을 돌면서 개별 컬럼 데이터를 각 배열에 맞게 삽입 실시]
for (int i=0; i<curArray.length(); i++){
try {
JSONObject rowJson = new JSONObject(curArray.get(i).toString());
T_AD_ARRAY[i] = Double.valueOf(String.valueOf(rowJson.get("T_AD")));
T_PS_ARRAY[i] = Double.valueOf(String.valueOf(rowJson.get("T_PS")));
T_GM_ARRAY[i] = Double.valueOf(String.valueOf(rowJson.get("T_GM")));
T_ST_ARRAY[i] = Double.valueOf(String.valueOf(rowJson.get("T_ST")));
}
catch (Exception e){
e.printStackTrace();
}
}
System.out.println("\n");
System.out.println("============================");
System.out.println("[TEST_CAL_PRO] : [컬럼 데이터 확인]");
System.out.println("[T_AD_ARRAY] [개별 컬럼 X 값] : " + Arrays.toString(T_AD_ARRAY));
System.out.println("\n");
System.out.println("[T_PS_ARRAY] [개별 컬럼 X 값] : " + Arrays.toString(T_PS_ARRAY));
System.out.println("\n");
System.out.println("[T_GM_ARRAY] [개별 컬럼 X 값] : " + Arrays.toString(T_GM_ARRAY));
System.out.println("\n");
System.out.println("[T_ST_ARRAY] [결과 데이터 Y값] : " + Arrays.toString(T_ST_ARRAY));
System.out.println("============================");
System.out.println("\n");
// [각 변수에 컬럼 별 상관 계수 결과 값 담는다]
double T_AD_VALUE = Correlation(T_AD_ARRAY, T_ST_ARRAY); // 상관 계수 계산 메소드 호출
double T_PS_VALUE = Correlation(T_PS_ARRAY, T_ST_ARRAY); // 상관 계수 계산 메소드 호출
double T_GM_VALUE = Correlation(T_GM_ARRAY, T_ST_ARRAY); // 상관 계수 계산 메소드 호출
double SUM_VALUE = T_AD_VALUE + T_PS_VALUE + T_GM_VALUE; // 개별 상관 계수 합계 값 저장
System.out.println("\n");
System.out.println("============================");
System.out.println("[TEST_CAL_PRO] : [상관 계수 값 및 중요도 확인]");
System.out.println("[SUM_VALUE] [상관 계수 합계] : " + String.format("%.2f", SUM_VALUE)); // 소수점 자름
System.out.println("[T_AD_VALUE] [개별 상관 계수] : " + String.format("%.2f", T_AD_VALUE)); // 소수점 자름
T_AD_VALUE = Double.valueOf(String.format("%.2f", (T_AD_VALUE/SUM_VALUE)*100));
System.out.println("[T_AD_PERC] [상관 중요도] : " + Math.round(T_AD_VALUE*10)/10.0); //소수점 1자리까지 반올림
System.out.println("[T_PS_VALUE] [개별 상관 계수] : " + String.format("%.2f", T_PS_VALUE)); // 소수점 자름
T_PS_VALUE = Double.valueOf(String.format("%.2f", (T_PS_VALUE/SUM_VALUE)*100));
System.out.println("[T_PS_PERC] [상관 중요도] : " + Math.round(T_PS_VALUE*10)/10.0); //소수점 1자리까지 반올림
System.out.println("[T_GM_VALUE] [개별 상관 계수] : " + String.format("%.2f", T_GM_VALUE)); // 소수점 자름
T_GM_VALUE = Double.valueOf(String.format("%.2f", (T_GM_VALUE/SUM_VALUE)*100));
System.out.println("[T_GM_PERC] [상관 중요도] : " + Math.round(T_GM_VALUE*10)/10.0); //소수점 1자리까지 반올림
System.out.println("============================");
System.out.println("\n");
return "";
}
// [상관 계수 구하는 메소드]
public static double Correlation(double[] xs, double[] ys) {
double sx = 0.0;
double sy = 0.0;
double sxx = 0.0;
double syy = 0.0;
double sxy = 0.0;
int n = xs.length;
for(int i = 0; i < n; ++i) {
double x = xs[i];
double y = ys[i];
sx += x;
sy += y;
sxx += x * x;
syy += y * y;
sxy += x * y;
}
// covariation
double cov = sxy / n - sx * sy / n / n;
// standard error of x
double sigmax = Math.sqrt(sxx / n - sx * sx / n / n);
// standard error of y
double sigmay = Math.sqrt(syy / n - sy * sy / n / n);
// correlation is just a normalized covariation
return cov / sigmax / sigmay;
}
[결과 출력]
[오라클 추가 설명 참고 사이트]
https://blog.naver.com/kkh0977/222503895385
반응형
'Spring' 카테고리의 다른 글
Comments