<SQL>
SQL 이란? RDBMS에 저장된 데이터를 조작하고 쿼리(query)하기 위해 디자인된 간단한 컴퓨터 언어.
많은 회사들이 데이터를 SQL을 사용하는 RDBMS에 저장한다고 한다.
SQL을 제대로 연습하려면 RDBMS가 설치된 시스템을 찾고, 예제 데이터를 찾고, SQL 테이블을 CREATE TABLE 명령을 사용하여 설정하고, 데이터를 업로드 해야함.
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
SQL Tryit Editor v1.6
WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, Opera, and Edge(79). If you use another browser you will still be able to use our Try SQL Editor, but a different ver
www.w3schools.com
이런 웹페이지에서 연습할 수 있음.
<SQL에서 중요한 구문>
SELECT col1, col2, ... : 어떤 변수를 출력할지 지정. *는 모든 열을 출력한다.
FROM table_name: *쿼리 대상 테이블을 지정함
* 쿼리: 데이터베이스나 데이터 리포지토리 시스템에서 데이터나 정보를 요청하는 것
WHERE: 조건을 만족하는 행만 추출
ORDER BY: 결과를 주어진 변수의 크기 순서대로 출력함
GROUP BY: 지정된 범주형 변수로 결과를 그룹핑한다.
COUNT(*), AVG(x), SUM(x): 요약함수들. 순서대로 행의 수, 평균, 총합 등을 계산함. GROUP BY와 결합 시에는 각 그룹 안의 통계량을 계산함.
<R에서 SQL 연습하기>
1. spldf 패키지 설치
2. SQL 구문 따라해보기
install.packages("sqldf")
#이제 CRAN을 선택하라고 창이 뜬다. 언어 선택하는 것 같은데, Korea 선택하면 된다.
library(sqldf)
sqldf("select * from iris") # select * 는 모든 열을 출력하라는 것, from iris는 iris데이터로부터 라는 뜻
sqldf("select count(*) from iris") # count(*)는 행의 수를 세는 함수. iris 데이터로부터 행의 수 세라는 것
sqldf("select Species, count(*), avg([Sepal.Length]) # Species 열의 변수 출력, 행의 수를 세고, 'Sepal Length' 변수의 평균을 구한다.
from iris # iris 데이터로부터
group by Species") # 결과를 Species 별로 그룹핑 한다.
sqldf("select Species, [Sepal.Length], [Sepal.Width] # Species, Sepal.Length, Sepal.Width 변수 열을 출력
from iris #iris 데이터로부터
where [Sepal.Length] < 4.5 # Sepal.Length 값이 4.5보다 작은 것
order by [Sepal.Width]) # Sepal.Width 크기 순대로 정렬 (오름차순)
책에서 수치값, 문자값 변수명을 냅다 작은 따옴표로 다 묶어놔서 아무리 출력해도 결과가 이상하게 나왔음.
수치값 변수는 [ ] 대괄호로 묶어주자 ex) [Sepal.Length]
문자값 변수는 그냥 써도 된다.. ex) Species
<join 명령>
: 두 개의 테이블이 공유하는 열이 있을 때 그 열의 값을 사용하여 두 테이블을 결합하는 명령
1. inner join: 두 테이블 모두에 나타나는 값만을 사용해 합친다.
2. left join: 첫째 테이블에 나타나는 값을 모두 포함한다.
3. right join: left join의 반대. 둘째 테이블에 나타나는 값을 모두 포함.
4. outer join: 두 테이블에 나타나는 모든 값을 포함함.
> library(dplyr)
> (df1 <- data_frame(x=c(1,2), y=2:1)) # df1이라는 표 만들기
> (df2 <- data_frame(x=c(1,3), a=10, b="a")) # df2이라는 표 만들기
> sqldf("select *
+ from df1 inner join df2
+ on df1.x=df2.x") # 같은 x 값을 가진 행을 inner join함. 겹치는 행만 출력
> sqldf("select *
+ from df1 left join df2
+ on df1.x = df2.x") # 같은 x값을 가진 행을 left join 함. 같은 x값을 가진 행은 해당하는 값 다 적음
# df1에 df2가 일방적으로 붙은 것임 (같은 x값을 가진 것만 df2의 값이 붙음)
<RDBMS>
RDBMS는 자체 데이터 포맷을 사용한다. 저장된 데이터를 R로 읽어 들이는 방법은 2가지가 있다.
1. RDBMS의 커맨드라인 클라이언트(오라클-sqlplus, MySQL-mysql 등)나 GUI 클라이언트를 사용해 SQL 쿼리를 실행 -결과를 테이블 형태의 텍스트 파일을 추출 - R에서 read.table()을 사용
2. R에서 RDBMS에 적당한 라이브러리를 사용해서 연결할 수 있음.
오라클 - library(ROracle), MySQL-library(RMySQL), PostgreSQL-library(RPostgreSQL) 사용
일반적인 ODBC 프로토콜 지원하는 경우 - library(RODBC) 사용
이 중에서 선택하여 사용
<다른 소프트웨어 데이터 포맷 읽어 들이기>
- SAS, SPSS 등: 또한 자체 데이터 포맷을 사용함. 크게 두 가지 방법이 있음.
1. 해당 소프트웨어에서 데이터를 외부 텍스트 파일로 추출- R에서 read.table() 사용
2. R에서 적당한 라이브러리 사용. library(foregin)
- DBF 포맷으로 된 파일 읽기: DBF는 공간통계 데이터에서 많이 사용됨.
> install.packages("foreign")
> library(foreign) # 라이브러리 불러오기
x <- read.dbf(system.file("files/sids.dbf", packages="foreign")[1]) # dbf 데이터 불러오기
dplyr::glimpse(x) # 데이터 요약하기
summary(x) # 데이터 요약하기