웹 기반으로 많이 사용되는 자바 언어에서 머신러닝을 사용하기 위한 작업이 필요할 경우가 있습니다.
머신러닝에 최적화된 언어가 파이썬이기 때문에 서로 연동을 해주기 위해서 여러 방법이 있습니다.
그 중에 간단히 파이썬으로 머신러닝한 데이터를 자바에서 활용하는 방법을 정리해보겠습니다.
Java에서 데이터 호출 후 Python으로 AI 모델 생성 방법
[Java] getSchedulerData Method
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
@Override
public Map<Integer, Object> getSchedulerData() throws Exception {
Map<Integer, Object> map = new HashMap<Integer, Object>();
try{
ProcessBuilder proBuilder = new ProcessBuilder("python", "/Data/getSchedulerData.py");
Process process = proBuilder.start();
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(process.getInputStream(),"utf-8"));
try {
int check = 0;
int length =0;
String line = "";
List<String> arrSt = new ArrayList<String>();
while((line = bufferReader.readLine()) != null){
String[] arr = line.split(" ");
if(line.contains("DATE")) {
if(check != 0) {
map.put(check, arrSt);
arrSt = new ArrayList<String>();
}
++check;
}else{
switch(check){
case 1:
arrSt.add(arr[arr.length-2]+" "+arr[arr.length-1]);
break;
default:
arrSt.add(arr[arr.length-1]);
break;
}
}
}
map.put(check, arrSt);
} finally {
try {
if(bufferReader != null) {
bufferReader.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}catch(Exception e){
System.out.println(e.toString());
}
return map;
}
|
cs |
우선 자바코드에서 ProcessBuilder 클래스를 사용합니다.
ProcessBuilder는 다른 외부 프로세스를 실행하여 버퍼에 저장 후 출력하는 형식을 가집니다.
ProcessBuilder에서 파이썬 파일명인 getSchedulerData.py를 넣어주고 Start를 해줍니다.
Process에 담긴 객체를 getInputStream을 이용하여 BufferedReader에 담아주고 출력해주기만 하면 됩니다.
while((line = bufferReader.readLine()) != null){
String[] arr = line.split(" ");
위에 코드가 데이터를 출력하는 부분인데 반복하면서 파이썬에서 받은 데이터를 한 행씩 읽어오는 부분입니다.
line을 이용하여 view단으로 전송하여 알맞게 활용하시면 됩니다!
[Pythod] getSchedulerData.py File
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import pandas as pd
from sklearn.ensemble import IsolationForest
import pymysql
host_name = '192.111.222.15'
host_port = 3306
username = 'id'
password = 'password'
database_name = 'database'
db = pymysql.connect(
host = host_name,
port = host_port,
user = username,
passwd = password,
db = database_name
)
SQL = "Query;"
df = pd.read_sql_query(SQL, db)
feature = df[['VALUE']].values
model = Model(...)
model.fit(feature)
pred = model.predict(feature)
df['ANOMALY'] = pd.Series(pred)
df['ANOMALY_SCORE'] = model.decision_function(feature)
print(df[['DATE']])
|
cs |
파이썬 파일인 getSchedulerData.py 의 코드 입니다.
pymysql를 임포트해주고 데이터베이스 정보를 변수에 담은 다음,
pymysql의 connect를 이용하여 데이터베이스의 정보와 쿼리를 read_sql_query 메서드를 이용하여 df에 담습니다.
그리고 머신러닝의 알고리즘 Model에 파라미터를 입력한 다음
model 객체에 넣어주고 fit을 통해 훈련을 진행합니다.
predict를 통해 예측값을 얻고 decision_function를 통해 예측값의 점수를 얻어 필요에 맞게 활용한 다음,
print로 데이터를 출력해주면 자바에서 출력한 데이터를 받을 수 있습니다.
정리
간단히 요약하자면 아래처럼 흘러갑니다.
1. 자바의 ProcessBuilder를 통해 파이썬 파일을 읽으면서 머신러닝을 학습한 데이터를 출력하고
2. 출력한 데이터를 BufferedReader를 통해 담은 다음
3. 행으로 출력되는 데이터를 입맛에 맞게 가공한 뒤에 사용자 화면에 보여준다.
이 패턴을 이용하여 비슷한 형태의 작업을 처리하면 도움이 되지 않을까 생각합니다!
'JAVA' 카테고리의 다른 글
[Java] 실시간 프로세스 바 구현 방법 (비동기 방식) (1) | 2024.12.05 |
---|---|
Java API 서버에서 응답&요청 2가지 예제 코드 (0) | 2024.07.12 |
[Java] 날짜 사이의 기간 데이터 구하는 방법 (0) | 2024.02.02 |
[Java] 프로그램 수행시간 측정방법 (0) | 2024.01.30 |
[Linux] Java 설치 및 환경변수 설정 방법 (0) | 2023.06.15 |
댓글