์ ํVS๋น์ ํ
๋น์ ํ ex) text > ์ ์ฒ๋ฆฌ (๋ถ์ฉ์ด ์ ์ ๋ฑ) > Rํต๊ณ ํจํค์ง > ์ถ๋ก ํต๊ณ, ํจํด, ๊ท์น
๋ฐ์ ํ ex) HTML > ์ ์ฒ๋ฆฌ> Rํต๊ณ ํจํค์ง > ์ถ๋ก ํต๊ณ, ํจํด, ๊ท์น
์ ํ ex) DB> Rํต๊ณ ํจํค์ง > ์ถ๋ก ํต๊ณ, ํจํด, ๊ท์น
์ ํ๋ฐ์ดํฐ ์ฒ๋ฆฌ
1. JDK & JRE ์ค์น : RJDBC ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ java ์ค์น
C:\ITWILL\2_Rwork\tools\jdk-8u151-windows-x64.exe ์ค์นํ์ผ ์ด์ฉ
2. ํจํค์ง ์ค์น
install.packages("rJava") # R์์ JAVA ์ฌ์ฉ ์ง์
install.packages("DBI") #DB Interface : SELECT๋ฌธ
install.packages("RJDBC") #R+DB์ฐ๋ (rJava์์กด์ฑ)
3. ํจํค์ง ๋ก๋ฉ : ์์๋ฅผ ์ง์ผ in memory์์ผ์ผ ํ๋ค
library(DBI)
Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jdk1.8.0_151') # JAVA ์ค์น ๊ฒฝ๋ก
library(rJava)
library(RJDBC) # rJava์ ์์กด์
4. Oracle ์ฐ๋ (Oracle 11g)
๋จ๊ณ1: driver ๊ฐ์ฒด (ํ๋ก๊ทธ๋จex.R,Pyton..๊ณผ DB๋ฅผ ์ฐ๊ฒฐ)
drv<-JDBC(driverClass="oracle.jdbc.driver.OracleDriver",
classPath="C:\\oraclexe\\app\\oracle\\product\\11.2.0\\server\\jdbc\\lib\\ojdbc6.jar")
๋จ๊ณ2 : db์ฐ๋(driver, url, user, password)
1๋จ๊ณ์์ ์ฐ๋ํ drv๋ฅผ ์ฐ๊ฒฐ
conn <- dbConnect(drv=drv,
url="jdbc:oracle:thin:@//127.0.0.1:1521/xe", #127~ ํฌํธ๋ฒํธ/DB์ด๋ฆ
user="scott",
password="tiger")
1.์ ์ฒด ํ
์ด๋ธ ์กฐํ
query = 'select*from tab'
dbGetQuery(conn, query) #DBI์์ ํจํค์ง
2. table ์์ฑ : DB(XE)์ ์ ์ฅ๋จ
query = "create table db_test(sid int, pwd char(4), name varchar(25), age int)"
mode(query) #"character":๋ฌธ์์ด
dbSendUpdate(conn, query) #RJDBC์์ ํจํค์ง. table์์ฑ ํจ์
dbGetQuery(conn, "select*from tab") #table์กฐํ
dbGetQuery(conn, "select*from emp") #table์ ๊ตฌ์กฐ ํ์ธ
3. DB๋ด์ฉ ์์
: dbSendUpdateํจ์(conn, query(=create/insert/update/delete))
1) INSERT๋ฌธ (๋ ์ฝ๋ ์ถ๊ฐ)
query = "INSERT INTO DB_TEST values(1001, '1234', 'ํ๊ธธ๋', 35)" #''์ ""๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง ''์ ๊ฒฝ์ฐ '๋ฌธ์์ด'๊ณผ ํผ์ฉ๋ ์ ์์.
dbSendUpdate(conn, query) #dbํจ์๋ฅผ ์จ์ผ ๋ฐ์๋จ
dbGetQuery(conn, "select*from DB_TEST") #์ถ๊ฐํ ๋ ์ฝ๋ ํ์ธ
2) UPDATE๋ฌธ
query = "UPDATE DB_TEST set name='๊น๊ธธ๋' WHERE sid = 1001"
dbSendUpdate(conn, query)
dbGetQuery(conn, "select*from DB_TEST")
3) DELETE๋ฌธ
query = "DELETE FROM DB_TEST where sid=1001"
dbSendUpdate(conn, query)
dbGetQuery(conn, "select*from DB_TEST")
4) table์ญ์
dbSendUpdate(conn, "DROP TABLE DB_TEST PURGE")
dbGetQuery(conn, "select*from tab")
5. table๋ถ๋ฌ์ค๊ธฐ
emp = dbGetQuery(conn, "select*from emp") #R์ ๊ฐ์ฒด๋ก ์ ์ฅ
str(emp) #data.frame์ผ๋ก ์์ฑ. num์ซ์ํ chr๋ฌธ์ํ
1) ํต๊ณํจ์ : ๋น์จ/๋ฑ๊ฐ ์ฒ๋
mean(emp$SAL) #2073.214
mean(emp$COMM) #NA
mean(emp$COMM, na.rm=T) #๊ฒฐ์ธก์น๋ฅผ ์ ์ธํ ๊ฐ๋ง ๊ตฌํ๊ธฐ. 550
summary(emp)
2) ์กฐ๊ฑด ์กฐํ
query = "select * from emp where sal>=2500 and job='MANAGER'" #๋
ผ๋ฆฌ์ฐ์ฐ์ and ์ฌ์ฉ. '๋ฌธ์์ด'์ ๋์๋ฌธ์ ๊ตฌ๋ถ
manager_2500 = dbGetQuery(conn, query)
manager_2500
professor : ์ ๊ต์
name_pay = dbGetQuery(conn, "select name, pay from professor
where position='์ ๊ต์'")
str(name_pay)
name_pay
barplot(name_pay$PAY, col='green', names.arg = name_pay$NAME) #names.arg:x์ถ ๋๊ธ๋ง๋ค ๊ต์๋ช
๋ถ์ด๊ธฐ
3) subquery ์ด์ฉํด์ ํน์ ๋ถ์์ ์ฌ์์ ๋ณด ์ถ๋ ฅ (SQL์์์ ๋์ผํ๊ฒ ์ฌ์ฉ)
* sub : dept, main : emp
dbGetQuery(conn, 'select * from dept')
query = "select ename, sal, job from emp
where deptno=
(select deptno from dept where dname='SALES')"
sales = dbGetQuery(conn, query)
sales
4) join : inner join
query = "select e.ename, e.job, d.*
from emp e, dept d
where e.deptno=d.deptno and e.ename like'%M%'"
* ์์ชฝ ํ
์ด๋ธ์์ ๋ถ์๋ฒํธ๊ฐ ๊ฐ์ (์กฐ์ธ์กฐ๊ฑด)
* and์ดํ : ์ด๋ฆ์ M์ด ํฌํจ๋์ด ์๋ ์ฌ์ (์ผ๋ฐ์กฐ๊ฑด๊ฑด)
join_df = dbGetQuery(conn, query)
join_df #R์ ๊ฐ์ฒด
5) GROUP BY : ๊ฐ ๋ถ์๋ณ ๊ธ์ฌ ํ๊ท , ํฉ๊ณ ๊ตฌํ๊ธฐ
query = "select deptno, avg(sal) avg_sal, sum(sal) tot_sal
from emp
group by deptno
order by deptno"
dept_group = dbGetQuery(conn, query)
dept_group
* select์ ์์ ๋ณ์นญ ์ค์ ๊ฐ๋ฅ
DB ์ฐ๊ฒฐ ์ข
๋ฃ
dbDisconnect(conn) #TRUE ์ข
๋ฃ
์ฐ์ต๋ฌธ์
01. ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ํตํด์ ํ
์ด๋ธ์ ํธ์ถํ๊ณ , SQL๋ฌธ์ ์ด์ฉํ์ฌ ๋ ์ฝ๋๋ฅผ ์กฐํํ์์ค.
[๋จ๊ณ 1] ์ฌ์ํ
์ด๋ธ(EMP)์ ๊ฒ์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ EMP_DF ๋ณ์๋ก ๋ถ๋ฌ์ค๊ธฐ
1) ์ ์ฒด ๋ ์ฝ๋ ์กฐํ
EMP_DF <- dbGetQuery(conn, "select * from EMP")
EMP_DF
2) ๋๋ ๋ถ์๋ณ ์กฐํ
EMP_DF2 <- dbGetQuery(conn, "select deptno, avg(sal) avg_sal
from EMP
group by deptno
order by deptno")
EMP_DF2
# DEPTNO AVG_SAL
#1 10 2916.667
#2 20 2175.000
#3 30 1566.667
๋จ๊ณ 2] EMP_DF ๋ณ์๋ฅผ ๋์์ผ๋ก ๋ถ์๋ณ ๊ธ์ฌ์ ํ๊ท ์ ๋ง๋์ฐจํธ๋ก ์๊ฐํ
1) ์ ์ฒด ๋ ์ฝ๋ ์กฐํ
๊ฐ ๋ถ์๋ณ SUBSET
dept10 <- subset(EMP_DF, DEPTNO == 10)
dept20 <- subset(EMP_DF, DEPTNO == 20)
dept30 <- subset(EMP_DF, DEPTNO == 30)
๊ฐ ๋ถ์๋ณ ๊ธ์ฌ ํ๊ท
dept10_sal <- mean(dept10$SAL)
dept20_sal <- mean(dept20$SAL)
dept30_sal <- mean(dept30$SAL)
[๋จ๊ณ 3] ๋ง๋์ฐจํธ๋ฅผ ๋์์ผ๋ก X์ถ์ ์ถ๋๊ธ์ ๋ถ์๋ช
์ผ๋ก ํ์ํ๊ธฐ
1) ์ ์ฒด ๋ ์ฝ๋ ์กฐํ
dept_sal_avg <- c(dept10_sal, dept20_sal, dept30_sal)
X์ถ ๋๊ธ : ๋ถ์ ์ด๋ฆ ํ์
bp <- barplot(dept_sal_avg, col = rainbow(3),
names.arg = c('10', '20', '30'), ylim = c(0, 3500))
text(x=bp, y=dept_sal_avg+80, round(dept_sal_avg, 3))
2) ๋ถ์๋ณ ์กฐํ ๊ฒฝ์ฐ
DEPT <- dbGetQuery(conn, "select * from DEPT")
table join : ๋ถ์๋ช
์ผ๋ก ํ์
library(plyr)
join_df <- join(EMP_DF2, DEPT, by='DEPTNO')
join_df
bp <- barplot(join_df$AVG_SAL, col = rainbow(3),
names.arg = join_df$DNAME, ylim = c(0, 3500))
text(x=bp, y=EMP_DF2$AVG_SAL+80, round(EMP_DF2$AVG_SAL, 3))
02. 'WARD' ์ฌ์์ ์์ฌ(MGR)์ ๋์ผํ ์ฌ์์ด๋ฆ, ์ง์ฑ
, ์ฐ๋ด์ ์ถ๋ ฅํ์์ค.
<์กฐ๊ฑด1> ์๋ธ์ฟผ๋ฆฌ ์ด์ฉ
query <- "select ename, job, sal from EMP
where MGR = (select MGR from EMP where ename = 'WARD')"
result <- dbGetQuery(conn, query)
<์กฐ๊ฑด2> ์ฐจํธ ๊ฒฐ๊ณผ ์ฐธ๊ณ
result
pie(result$SAL, labels = result$ENAME, col = rainbow(5),
main = "WARD ์ฌ์์ ์์ฌ์ ๊ฐ์ ์ฌ์๋ค์ ๊ธ์ฌ")
'๋ฐ์ดํฐ๋ถ์๊ฐ ๊ณผ์ > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DAY17. R ํต๊ณ๋ถ์์ ์ฐจ, ํต๊ณ๊ธฐ๋ณธ์ง์ (0) | 2021.10.07 |
---|---|
DAY16. R ๋น์ ํ๋ฐ์ดํฐ (ํ ํฝ/์ฐ๊ด์ด/๊ฐ์ฑ๋ถ์) (0) | 2021.10.06 |
DAY14. R EDA, ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ (0) | 2021.10.01 |
DAY13. R Basic (๋ฐ์ดํฐ ์๊ฐํ) (0) | 2021.09.30 |
DAY12. R Basic (์ ์ด๋ฌธ๊ณผ ํจ์) (0) | 2021.09.29 |