투케이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

 

155. (Oracle/오라클) CORR 사용해 피어슨 상관 분석 수행 실시 - 상관 계수 구하기 , 상관 중요도 계산

[개발 환경 설정] 개발 툴 : Toad 개발 언어 : Oracle [상관 분석 테이블 설명] [소스 코드] [결과 출력]...

blog.naver.com

 


 

반응형
Comments