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로 다시 그려줌.
그러면 아래와 같은 그래프가 나옴
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도 같이 사용해보도록 계획 중
ㅇㅅㅇ
요새는 로또 예상번호 무료로 받는곳도 있음
https://naver.me/xDJ1BoNV
나도 여기서 예상번호 받아서 했는데
바로 3등 떠서ㄷㄷ 속는셈 치고 한번더 해볼라고함