https://gall.dcinside.com/mini/board/view/?id=programmer&no=62&page=1


이전꺼 이어서.. ㅇㅅㅇ


이제 해볼 일은 역시 R을 통해서 최근 30회차 정도의 나온 번호의 빈도수를 추출해보자.


일단 R 설치에 대해서는 생략, R을 설치하면 32bit와 64bit가 깔리는데...

jdbc 문제인지.. 32bit만 실행 가능해서 R 32bit 짜리 가지고 작업 진행


1. 먼저 R에서 오라클 JDBC를 사용하기 위해서... 라이브러리 부터 설치 한다.


install.packages("RJAVA")

install.packages("RJDBC")


2. 설치 되었다면.. R에서 jdbc 드라이브 세팅 및 쿼리를 실행하자.


jdbcDriver <- JDBC(driverClass = "oracle.jdbc.OracleDriver", classPath="ORACLE 설치위치/18.0.0/dbhomeXE/jdbc/lib/ojdbc8_g.jar")

con <- dbConnect(jdbcDriver, "jdbc:oracle:thin:@127.0.0.1:1521:xe", "ID","비번")


위의 것을 실행하면 오라클 접속 상태가 정상적이면 접속 완료


query<-"WITH W1 AS (

SELECT

MAX(idx) AS max_idx

FROM

TB_LOTTO_MST

)

SELECT

NO1,

NO2,

NO3,

NO4,

NO5,

NO6

FROM

TB_LOTTO_MST, W1

WHERE 1=1

AND idx BETWEEN W1.max_idx - 29 AND W1.max_idx

ORDER BY idx DESC"


result<-dbGetQuery(con, query)


이제 쿼리를 실행시켜서 최근 30회차 ( MAX -29 부터 MAX 까지 )의 번호들을 쿼리하여

result에 담는다.



2. 이제 추출된 숫자들에서 가장 많이 나온 숫자들을 알아보자.


frq <- 0


for(i in 1:45) {

frq[i] <- length(which(result==i))

print(paste0(i, ":", frq[i]))

}


frq 초기화 후에 frq에 번호와, 그 번호가 발생한 빈도를 담는다.



3. 추출한 번호들을 보기 쉽게 그래프로 그려보자.

일단 지금은 기본 기능인 plot을 이용해서 처리한다.


plot(frq[1:45], type="h", xlim = c(1,45), xaxt="n",

xlab="번호",

ylab="빈도",

)

axis(1, at = seq(1, 45, by = 1), cex.axis=0.7)


axis를 사용하지 않으면 숫자들이 모두 안나오기 때문에 axis로 다시 그려줌.

그러면 아래와 같은 그래프가 나옴



viewimage.php?id=3dafdf21f7d335ab6bad&no=24b0d769e1d32ca73deb86fa1bd8233c4185cf03acc3211a92c905c178a330a838387fa80e4dcb5e8e3a3473ef76ff71eeb3d1ecc0df840ced2af75e0284cbc53b4b48bfd0d797

3. 마지막으로 어떤 숫자가 많이 나왔는지.. 소트하기

frq

order(frq, decreasing=TRUE)


9 2 37 40 1 21 30 41 6 18 24 28 29 31 36 39 3 4 10 11 12 15 22 26 33 34 35 42 13 14 16 17 20 23 25 38 43 19 27 44 45 5 7 8 32


9, 2, 37, 40, 1, 21, 30, 41, 6, 18 이 지난 30회차에서 자주 나온 10위권 숫자임을 알 수 있다.



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
#install.packages("RJAVA")
#install.packages("RJDBC")
library(rJava)
library(RJDBC)
jdbcDriver <- JDBC(driverClass = "oracle.jdbc.OracleDriver", classPath="ORACLE 설치위치/18.0.0/dbhomeXE/jdbc/lib/ojdbc8_g.jar")
con <- dbConnect(jdbcDriver, "jdbc:oracle:thin:@127.0.0.1:1521:xe", "ID","비번")
query<-"WITH W1 AS (
SELECT
MAX(idx) AS max_idx
FROM
TB_LOTTO_MST
)
SELECT
NO1,
NO2,
NO3,
NO4,
NO5,
NO6
FROM
TB_LOTTO_MST, W1
WHERE 1=1
AND idx BETWEEN W1.max_idx - 29 AND W1.max_idx
ORDER BY idx DESC"
result<-dbGetQuery(con, query)
frq <- 0
for(i in 1:45) {
frq[i] <- length(which(result==i))
print(paste0(i, ":", frq[i]))
}
plot(frq[1:45], type="h", xlim = c(1,45), xaxt="n",
xlab="번호",
ylab="빈도",
)
axis(1, at = seq(1, 45, by = 1), cex.axis=0.7)
frq
order(frq, decreasing=TRUE)
cs


다음에는 좀 더 다른 잡다구리 통계를 내고 그것을 다시 DB에 저장 및 재가공 해보도록 하자.

몇몇 자료에 대해서는 동적으로 저장했다가 재사용해야 하는 경우도 있기 때문에

Redis도 같이 사용해보도록 계획 중

ㅇㅅㅇ