여러 기관에서 나오는 데이터들을 제공하는 포털, API 인증키 등을 사용 신청 후 데이터들을 받아볼 수 있음
-
해당 하는 API 페이지에서 Docs를 받아볼 수 있음, 입력값 및 출력값 포함
-
DOM 구조:
html
,xml
과 같이 root 밑에 트리 구조로 이루어진 구조
- 지도 데이터를 받아볼 수 있음
- 카카오맵 등도 비슷한 API를 제공
HTML 문서에서 정보를 추출하고 가공하여 원하는 정보를 뽑아오는 일
robots.txt
를 통해 제한될 수 있음- 저작권 확인 필요
다중 변수 데이터를 2차원 평면상에 시각화 할 수 있는 도구
fmsb
패키지 설치 필요
install.packages('fmsb')
library(fmsb)
score = c(80,60,70,80,50)
min.score = rep(100, 5)
max.score = rep(0, 5)
ds = rbind(max.score, min.score, score)
ds = data.frame(ds)
colname(cs) = c("국어", "영어", "수학", "물리", "음악")
radarchart(ds)
radarchart(ds,
pcol='dark green',
pfcol=rgb(0.2,0.5,0.5.0.5),
plwd=3,
cglcol='grey',
cglty=1,
cglwd=0.1,
axisype=1,
seg=4,
axislabcol='grey',
caxislabels=seq(0,100,25))
라이브러리명: ggplot2
관계가 없어보이는 데이터에서 관계를 찾아 시각화
install.packages('wordcloud')
library(wordcloud)
word = c("홍길동", "강감찬", "이순신", "유관순", "을지문덕")
frequency = c(851, 222, 431, 234, 542)
wordcloud(word, frequency, colors = rainbow(length(word)))
v1 = c(1,7,6,8,4,5,3,2)
v1
v1 = sort(v1) # 값 정렬 함수
v1
v2 = sort(v1, decreasing=T)
v2
order(v1) # 인덱스 정렬 함수
iris[order(iris$Sepal.Length),] # 오름차순 정렬
iris[]
임의 추출을 하되 재현 가능한 결과가 필요한 경우 샘플링을 시행
sample(1:20, size = 5)
x = 1:100
y = sample(x , size=10, replace=FALSE)
y
idx = sample(1:nrow(iris), size=50, replace=F)
iris.50 = iris[idx,]
dim(iris.50)
주어진 데이터 값에서 몇 개씩 짝을 지어 추출하는 작업, combn()
함수 사용
combn(1:5, 3) # 1~5 에서 3개를 뽑는 조합
aggregate(iris[,-5], by=list(iris$Species), FUN=mean)
install.packages("treemap")
library("treemap")
data(GNI2014)
head(GNI2014)
treemap(GNI2014,
index = c("continent", "iso3"),
vSize="population",
vColor="GNI",
type="value",
title="World's GNI")
data$column
-
상관계수: 상관 관계를 수치로 나타낸 -1에서 1의 값
0
인 경우, X, Y 사이는 상관성을 찾기 어려움+
인 경우 X, Y가 반비례, 음의 상관 관계-
인 경우 X, Y가 비례, 양의 상관 관계
-
함수:
cor()
-
상관관계 != 인과관계
plot(pressure$temperature,
pressure$pressure,
main = '온도와 기압',
xlab = '온도(화씨)',
ylab = '기압')
st = data.frame(state.x77)
head(st)
plot(st)
cor(st)
- 확보한 데이터를 가공하여 분석에 적합한 형태로 만드는 과정
- 현실에서는 정리된 데이터 셋을 바로 얻는 경우가 많지 않음
- 결측값: 수집되지 않았거나 잘못 측정된 값 (NA로 표현)
- 처리 방법:
- 제거/제외
z = c(1,2,3,NA,5,NA,8)
sum(z) # 오류
is.na(z) # NA 여부 확인
sum(is.na(z)) # NA 개수 확인
sum(z, na.rm=TRUE) # NA 삭제 후 sum
- 추정/치환
z1 = c(1,2,3,NA,5,NA,8)
z2 = c(5,8,3,NA,3,NA,7)
z1[is.na(z1)] = 0 # NA를 0으로 치환
z3 = as.vector(na.omit(z2)) # NA를 제거하고 새로운 벡터를 생성
for (i in 1:ncol(x)) {
this.na = is.na(x, [i])
cat(colnames(x)[i], '\t', sum(this.na), '\n')
}
rowSums(is.na(x))
sum(rowSums(is.na(x)) > 0)
sum(is.na(x))
month = 1:12
late = c(5,8,7,9,4,6,12,13,8,6,6,4)
late2 = c(5,7,4,3,5,2,6,6,3,5,2,3)
plot(month, # x data
late, # y data
main='지각생 통계',
type='l', # 그래프 종류
lty=1, # 선 종류
lwd=1, # 선 굵기
xlab'Month',
ylab='Late cnt')
lines(month, late2, type='b',col='blue')
dist = cars[,2]
boxplot(dist, main='자동차 제동거리')
wt = mtcars$wt
mpg = mtcars$mpg
plot(wt, mpg,
main='중량-연비 그래프',
xlab='중량',
ylab='연비',
col='red',
pch=19)
- 다중 산점도
vars = c('mpg','disp','draw','wt')
target = mtcars[,cars]
head(target)
plot(target, main='Multi plots')
iris.2 = iris[,3:4]
levels(iris$Species)
group = as.numeric(iris$Species)
color = c('red','green','blue')
plot(iris.2,
main = 'iris plot',
pch=c(group),
col=color[group])
- 문제 정의 및 계획
- 데이터 수집
- 데이터 정제 및 전처리
- 데이터 탐색
- 데이터 분석
- 결과 보고
-
단일 변수: 1개의 변수
- 도수분포표
- 막대그래프
- 원그래프
- 히스토그램
- 선그래프
- 상자 그림
-
다중 변수: 2개 이상의 변수
- 매트릭스
- 데이터 프레임
- 산점도
- 상관계수
- 나무지도
- 방사형차트
favorite = c('winter', 'summer', 'spring', 'fall')
ds <- table(favorite)
barplot(ds, main = 'Favorite Season', col = 'blue', names=c('가을','봄','겨울','여름'), las=3)
age.A = c(13709,10974,7879,5000,4250)
age.B = c(13709,10974,7879,5000,4250)
age.C = c(13709,10974,7879,5000,4250)
ds = rbind(age.A, age.B, age.C)
colnames(ds) = c('1970','1990','2010','2030','2050')
ds
barplot(ds, main='인구 추정')
head(cars)
dist = cars[,2]
hist(dist, name = 'cars')
hist(iris.Sepal.Lengh,main='Sepal.length',col='orange')
pie(table(mtcars$cy1), main'mtcars', col=topo.colors(3), radius=2)
par(mfrow=c(1,1), mar=c(5,4,4,3)+1) # 화면 분할
install.packages('plotrix')
pie3D(ds, main="선호 계절", col = c('brown','green','red','yellow'), radius=1)
sink('result.txt', append = T) # 파일로 입력 시작
sink() # 파일로 입력 중지
read.table('data.txt', header = T, sep = ' ')
job.type = 'A'
if (job.type == 'B') {
bonus = 200
} else {
bonus = 100
}
print(bonus)
ifelse(a>b, a, b)
which(score==69)
which(score>=85)
which.min(score)
sum = 0
for (i in 1:100) {
sum = sum + i
}
print(sum)
while(T) {
print('infinity')
}
apply(iris[,1:4], 1, mean) # 행 방향으로 함수 적용
apply(iris[,1:4], 2, mean) # 열 방향으로 함수 적용
source('ss.R')
myfunc = function(x, y) {
val.sum = x + y
val.mul = x * y
return (list(val.sum, val.mul))
}
score = matrix(c(90,85,60,78,60,55,23,13,55,78,99,40), nrow=4)
matrix(1:20,4,5)
rownames(score) = c("John", "Doe", "Mark", "Jame")
colnames(score) = c("English", "Math", "Science")
colnames(score)[2]
dim(score) : 행과 열의 개수 보이기
head(score) : 앞부분 일부 보기
tail(score) : 뒷부분 일부 보기
colSums(iris[,-5])
colMeans(iris[,-5])
rowSums(iris[,-5])
rowMeans(iris[,-5])
IR.1 = subset(iris, Species="setosa")
class(iris)
is.matrix(iris)
is.data.frame(iris)
data.frame(iris)
as.martix(iris[,1:4])
print(iris)
cat(x, '\n')
- iris 셋: 붗꽃 샘플 데이터
getwd() : 작업 폴더 알아내기
setwd('C:\RWorks') 작업 폴더 설정하기
air = read.csv('airquality.csv', header = T)
read.xlsx("air.xlsx", header = T, sheetIndex = 1)
ls()
: 변수 목록 확인하기rm(foobar)
: 변수 지우기range()
: 벡터 범위 구하기length()
: 벡터 길이 구하기sum()
: 합factor(벡터)
: 따옴표 trim
- 리스트
- 데이터 프레임
- 범주형 자료: 문자열 등, 산술 연산 불가
- 수치형 자료: 산술 연산 가능
벡터끼리 산술 연산이 가능
JS와 비슷하다.
1차원 배열. 벡터는 여러개의 자료형을 저장할 수 없으나 리스트는 가능. 리스트 안에 벡터를 넣을 수 있음
list(name='Tom', age='25', student='TRUE')
2차원 배열. 매트릭스는 한가지 자료형만 저장할 수 있으나 데이터 프레임은 서로 다른 종류의 데이터 저장이 가능함.
- 매트릭스
value <- matrix(1:20, nrow=4, ncol=5)
- cbind, rbind
값 추출은 파이썬 방식과 비슷
다른 언어에서의 라이브러리와 동일
- 설치하기
install.packages("package name")
- 사용하기
library(package name)
- 패키지 설치 전 패키지 목록 (Packages) 에서 이미 설치되어 있는지 확인할 것
함수 이름 앞에 ? 를 붙여서 실행하면 도움말이 나온다.
예: ?max()
sys.time()
: 현재 시간을 불러옴log(x = 100, base = 10)
: 로그 함수 (기본 밑 e)print("value")
: 출력cat("a", "b")
: 합치기mean(values)
: 산술 평균
- 대입:
a <- 10
- 호출:
a
- 첫 글자는 영문이나 마침표로 시작, 영문자 일반적
- 두번째 부터는 영문자, 숫자, 마침표, 밀줄(_) 사용 가능
- 변수명에서 대문자와 소문자는 별개의 문자 취급
- 변수명 중간에 빈 칸을 넣을 수 없음
- 숫자형: 1,2,3,10,-4 (실수 포함)
- 문자형:
"문자"
- 논리형:
TRUE
,FALSE
NULL
: 정의 되어 있지 않음NA
: 결측값NaN
: 수학적 정의 불가Inf
,-Inf
: 무한대
타 언어의 배열 같은 역할, 변수에는 하나의 값만이 들어감. 방향과 길이를 가진 그 벡터와 헷갈리지 않도록 주의할 것
- 문법:
c(값들)
,시작:끝
(range) - 예시:
score <- c(68, 29, 15, 95, 93, 83, 50:65)
- 각 자료형 별의 벡터를 만들 수 있다.
sep(시작,끝,간격)
: Py range와 비슷rep(반복할 것, times=횟수)
: 반복문rep(반복할 벡터, each=횟수)
: 벡터용 반복문names(벡터)
: 변수 이름 출력paste(a, b, sep='delimeter')
: a + b 해서 새로운 벡터에 저장
- 인덱스 시작이 1 이다.
- 문법:
이름[인덱스]
- 예:
v1[2] <- 3
- 다양한 패키지 제공
- 데이터 분석에 사용되는 함수들을 종류별로 묶어 패키지 형태로 제공
- 그래프 기능을 제공함
R Studio
제공 (IDE)
- Windows, Mac, Linux
- 무료
- 데이터 처리
- 전체 영역을 4등분함
- 소스 영역: 소스를 입력할 수 있는 영역
- 환경 영역: R 명령문이 실행되는 동안 만들어지는 변수나 자료 구조를 보여주는 영역
- 콘솔 영역: 자바스크립트 콘솔 처럼 직접 명령문을 입력할 수 있는 구역
- 파일 영역: 윈도우의 파일 탐색기와 동일한 역할을 하는 영역
+
: 더하기-
: 빼기*
: 곱하기/
: 나누기%%
: 나머지^
: 제곱
#
뒤에 기록
max()
min()
등 다양한 함수 존재
다른 언어에서 라이브러리와 동일