일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 미국 배당주
- 애브비
- 알트리아
- 스플렁크
- 자격증
- ABBV
- 정보처리기사 데이터베이스
- 준전문가
- 매도
- 2019년
- 서교공
- 매수
- 데이터분석
- DPZ
- at&t
- ADsP
- 도미노피자
- 미국주식
- JNJ 주식
- 배당주
- 빅데이터
- 정보처리기사 필기
- 서울교통공사
- 존슨앤존슨
- 전자계산기 구조
- 분석
- 장기투자
- 미국 주식
- It
- 분석기획
- Today
- Total
My Log
[ADsP #7] 데이터 분석 1장 - R 기초와 데이터마트(1) 본문
* 시작하기에 앞서 본 게시물에 포함된 내용은 한국데이터산업진흥원에서 발행한 [데이터 분석 전문가 가이드, 2019년 2월 8일 개정]
에 근거한 것임을 밝힙니다.
1. 분석 환경의 이해
가. 통계 패키지 R
- 통계 분석 과정에서 수행되는 복잡한 계산이나 시각화 기법을 쉽게 사용할 수 있도록 설계된 무료 소프트웨어
- 기본으로 제공되는 기능 외에도 사용자들이 직접 제작한 패키지를 이용하여 무수히 많은 기능들을 사용할 수 있도록 확장 가능
- 상용 소프트웨어나 출력물에 견주어 뒤쳐지지 않는 강력한 시각화 요소
- R의 선택 기준
SAS | SPSS | R | |
프로그램 비용 | 유료, 고가 | 유료, 고가 | 오픈소스 |
설치 용량 | 대용량 | 대용량 | 적음 |
다양한 모듈지원 및 비용 | 별도 구매 | 별도 구매 | 오픈소스 |
최근 알고리즘 및 기술 반영 | 느림 | 다소 느림 | 매우 빠름 |
학습자료 입수의 편의성 | 유료 도서 위주 | 유료 도서 위주 | 공개 논문 및 자료 많음 |
질의를 위한 공개 커뮤니티 | NA | NA | 매우 활발 |
나. R의 역사
- 1993년 뉴질랜드 Ross Inaka와 Robert Gentleman에 의해 개발된 소프트웨어
- AT&T에서 개발한 통계 프로그래밍 언어인 S언어 기반
- S보다 한 단계 발전되었다는 의미에서 알파벳 S보다 앞선 R을 차용했다는 의미를 포함
- S로 작성된 대부분의 코드를 실행시킬 수 있었으며, UNIXㆍWindowsㆍLinuxㆍMac OS를 지원하며 발전
다. R의 특징
- 그래픽 처리
→ 상용 소프트웨어에 버금가는 상당한 수준의 그래프와 그림을 그릴 수 있다.
→ 사용자가 세부적인 부분까지 직접 지정하여 섬세한 작업을 수행할 수 있다.
→ 고해상도 이미지를 생산하면서 처리 시간이 매우 빠르다.
→ 보고서 작성이나 발표 자료 작성 시에도 유용하게 사용할 수 있다.
- 데이터 처리 및 계산능력
→ 벡터, 행렬, 배열, 데이터 프레임, 리스트 등 다양한 형태의 데이터 구조를 지원한다.
→ 복잡한 데이터 구조 내의 개별 데이터에 접근하는 절차가 간단하여 큰 데이터를 핸들링하기 간편하다.
- 패키지
→ 사용자들이 스스로 개발하는 새로운 함수들을 패키지의 형태로 내려받아 사용할 수 있다.
→ 이러한 확장성 덕분에 다른 통계 프로그램에 비해 최신 이론이나 기법을 사용해보기가 더 쉽다.
라. R 설치 방법
- R 공식 웹페이지인 https://r-project.org에서 무료로 R을 다운로드 받고 설치할 수 있다.
마. R Studio
- R Studio는 R을 사용하는 통합 개발 환경 중의 하나이다.
- R을 조금 더 간편하고 확장된 기능을 가지는 환경에서 실행할 수 있다.
- R Studio 역시 무료로 사용할 수 있고 다양한 운영체제를 지원한다.
- 공식홈페이지인 https://www.rstudio.com에서 다운로드 받을 수 있다.
2. 분석 환경의 기본 사용법
가. R과 R Studio의 구성
1) R의 구성
- 메뉴바
- 단축 아이콘 툴바
- R 콘솔
- 스크립트 창
2) R Studio의 구성
- 스크립트 창
- R 콘솔
- 환경 및 히스토리
- 현재 문서들이 저장되는 폴더나 R을 이용해 그린 그림들, 불러온 패키지들과 도움말 등을 별도의 한 영역에서 확인할 수 있다.
나. R 패키지 설치하기
- R 패키지를 통해 최신 통계 이론을 적용한 분석을 실시할 수도 있고, 복잡한 그래프 설정에 대해 미리 정의된 패키지로 손쉽게 작업할 수 있다. 또한, 기본 프로그램 R에서 지원하지 않는 명령어나 함수를 사용할 수 있으며 유용한 데이터셋이 내장되어 있는 패키지를 이용할 수도 있다.
1) 설치 방법
- R : [메뉴 - 패키지툴] > [CRAN 미러사이트 지정] > [설치할 패키지 선택]
- R Studio : [우측 하단 인터페이스 - Packages 탭] > [Install 선택] > [패키지 이름 입력]
- 명령어를 사용한 설치
> install.packages("패키지 이름")
> library(패키지 이름)
다. R 도움말
- '?'나 'help' 명령어를 통해 도움말을 불러올 수 있다.
ex) par 함수에 대한 도움말 불러오기
> ?par
> help(par)
3. R 언어와 문법
가. R의 데이터 구조
1) 벡터
- 벡터 데이터 구조는 하나 이상의 스칼라 원소들을 갖는 단순한 형태의 집합을 의미한다.
- 벡터 데이터 내에 들어갈 수 있는 원소는 숫자, 문자, 논리 연산자 등이 될 수 있다.
- 기본적으로 열벡터가 만들어진다.
- 명령어 c를 이용해 선언할 수 있다. ('c'는 concentration, 연결을 의미한다.)
> x = c(1, 10, 24, 40)
> y = c("사과", "바나나", "오렌지")
> z = c(TRUE, FALSE, TRUE)
> x <- c(1, 10, 24, 40)
> y <- c("사과", "바나나", "오렌지")
> z <- c(TRUE, FALSE, TRUE)
- 논리연산자를 입력할 때는 반드시 모든 글자를 대문자로 기입해야 한다.
- 논리연산자 벡터 z를 숫자형 벡터처럼 사용할 때, TRUE는 1, FALSE는 0을 할당받는다.
- 벡터의 결합
> xy <- c(x, y)
> xy
[1] "1" "10" "24" "40" "사과" "바나나" "오렌지"
- 같은 형식의 벡터가 결합하면 이전의 벡터 형식과 동일
- 결합하는 벡터에 문자형 벡터가 포함되면 결과 벡터는 문자형 벡터가 된다.
2) 행렬
- 기본적으로 열우선 방식
- 명령어 matrix를 사용
> matrix(벡터, [ ncol | nrow | byrow ])
* ncol : 열의 개수를 지정
* nrow : 행의 개수를 지정
* byrow : T값이면 행우선 방식으로 변경
> mx = matrix(c(1,2,3,4,5,6) , ncol=2)
> mx
[ , 1] [ , 2]
[ 1 , ] 1 4
[ 2 , ] 2 5
[ 3 , ] 3 6
- 행렬 합치기
명령어 rbind : 행을 추가하는 형태로 데이터 결합
> r1 = c(10, 10)
> rbind(mx, r1)
[ , 1] [ , 2]
1 4
2 5
3 6
r1 10 10
명령어 cbind : 열을 추가하는 형태로 데이터 결합
> c1 = c(20, 20, 20)
> cbind(mx, c1)
c1
[ 1 , ] 1 4 20
[ 2 , ] 2 5 20
[ 3 , ] 3 6 20
3) 데이터 프레임
- 행렬과 유사한 2차원 목록의 데이터 구조이다.
- 다루기가 쉽고 한 번에 많은 정보를 담을 수 있어 R에서 가장 많이 사용된다.
- 행렬과는 달리, 각 열이 서로 다른 데이터 타입을 가질 수 있기 때문에 데이터의 크기가 커져도 사용자가 다루기 수월하다.
- 명령어 data.frame을 사용하여 여러 개의 벡터를 하나의 데이터 프레임으로 합칠 수 있다.
> income = c(100, 200, 150, 300, 900)
> car = c("kia", "hyundai", "kia", "toyota", "lexus")
> marrige = c(FALSE, FALSE, FALSE, TRUE, TRUE)
> mydat = data.frame(income, car, marrige)
> mydat
income car marriage
1 100 kia FALSE
2 200 hyundai FALSE
3 150 kia FALSE
4 300 toyota TRUE
5 900 lexus TRUE
나. 외부 데이터 불러오기
1) csv 파일 불러오기
- 명령어 read.table
read.table("csv파일 경로", [header | seq ]
* 파일의 경로는 \\ 또는 /를 사용한다.
* header : T값을 입력하면 csv파일의 첫 줄을 변수명으로 지정할 수 있다.
* seq : 데이터가 어떤 값으로 구분되어 있는지 지정해준다.
> data1 <- read.table("D:\\DATA\\example.csv", header=T, sep=",")
- 명령어 read.csv
read.table과 유사하지만, sep 옵션을 통해 구분자를 명시할 필요가 없다.
2) txt 파일 불러오기
- 명령어 read.table에서 sep 옵션을 사용하지 않으면 txt파일을 불러올 수 있다.
- 구분자를 명시하지 않았기에 txt파일 자체가 구분자나 형식 등을 잘 지켜서 작성되어 있어야 한다.
> data2 <- read.table("D:/DATA/example.txt")
3) 엑셀 파일(xls/xlsx) 불러오기
가. 엑셀을 csv파일 형식으로 저장하여 1) csv 파일 불러오기 방식을 이용하는 방법
나. 엑셀 파일을 직접 불러올 수 있는 패키지를 설치하는 방법
> library(RODBC) # 패키지 열기, "" 없는 것에 유의
> new <- odbcConnectExcel("c:\\data\\mydata") # 엑셀파일의 경로 입력(확장자 생략)
> yourdata <- sqlFetch(new, "Sheet1") # 엑셀파일의 워크시트 이름 입력(대소문자 구별)
> close(new)
다. R의 기초 함수
1) 수열 생성
- rep 함수(a, b) : a를 b번 반복하는 숫자벡터 생성
> rep ( 1 , 3 )
[1] 1 1 1
- seq 함수(a, b, [ by | length ]) : a부터 시작하여 b까지 1씩 증가하는 숫자벡터 생성
* by : 숫자 n을 입력하여 n씩 증가하는 수열을 생성한다.
* length : 숫자 n을 입력하여 전체 수열의 개수가 n개가 되도록 증가값을 자동으로 생성한다.
> seq ( 1 , 3 )
> 1:3
[1] 1 2 3
> seq ( 1 , 11 , by=2 )
[1] 1 3 5 7 9 11
> seq ( 1 , 10 , length=4 )
[1] 1 4 7 10
- rep 함수의 인자로 seq 함수를 사용할 수 있다.
> rep ( 2 : 5 , 3 )
[1] 2 3 4 5 2 3 4 5 2 3 4 5
2) 벡터간 사칙연산
- 연산하는 벡터의 길이가 같아야 한다.
> a=1:10
> a
[1] 1 2 3 4 5 6 7 8 9 10
> a+a
[1] 2 4 6 8 10 12 14 16 18 20
> a-a
[1] 0 0 0 0 0 0 0 0 0 0
> a*a
[1] 1 4 9 16 25 36 49 64 81 100
> a/a
[1] 1 1 1 1 1 1 1 1 1 1
3) 행렬곱과 역행렬
- 행렬곱
* 행렬 A(m, l)와 행렬 B(l, n)이 있을 때, 행렬곱 AB는 m x n 이 된다.
이때, l 의 값이 같아야 한다.
- 전치행렬
* 행과 열을 i, j로 표현할 때, i와 j 값이 같은 행렬 값들을 기준으로 뒤집은 행렬
* 행과 열의 개수가 뒤바뀐다.
- 역행렬
* 행렬 A와 B가 'A x B = 1' 이 되는 관계에 있을 때, 행렬 B는 행렬 A의 역행렬이라 한다.
* solve 명령어를 통해 역행렬을 계산할 수 있다.
> a=c(2, 7, 3) # 숫자 벡터 a 생성 (3행 1열의 벡터)
> a
[1] 2 7 3
> t(a) # 전치행렬 (1행 3열의 벡터)
[ , 1 ] [ , 2 ] [ , 3 ]
[ 1 , ] 2 7 3
> A= a%*%t(a) # 행렬곱(%*%) (3행 3열의 벡터)
> A
[ , 1 ] [ , 2 ] [ , 3 ]
[ 1 , ] 4 14 6
[ 2 , ] 14 49 21
[ 3 , ] 6 21 9
> A * 2 # 스칼라 곱(*)
[ , 1 ] [ , 2 ] [ , 3 ]
[ 1 , ] 8 28 12
[ 2 , ] 28 98 42
[ 3 , ] 12 42 18
> solve(A) # A의 역행렬
4) 기초 통계값 계산
- mean / var / sd 함수 : 주어진 벡터의 평균, 분산, 표준편차를 계산
- sum / median / log 함수 : 주어진 벡터의 합, 중앙값, 자연로그를 계산
- summary 함수 : 주어진 벡터의 각 사분위수와 최소값, 최대값, 중앙값, 평균을 계산
* 숫자 벡터 외의 벡터에 사용 시 해당 대상에 대한 정보를 요약해주는 기능을 한다.
- cov / cor 함수 : 두 벡터의 공분산과 상관계수 계산
라. R의 데이터 핸들링
1) 벡터형 변수
- 벡터 뒤에 대괄호 [ ] 를 붙여 숫자를 지정하여, 원하는 값을 불러온다.
> b = c ("a", "b", "c", "d", "e")
> b [2] # 2번째 값
[1] "b"
> b [-2] # 2번째 값을 제외한 벡터
[1] "a" "c" "d" "e"
> b [ c( 2 , 3 ) ] # 2, 3번째 값
[1] "b" "c"
2) 행렬/데이터 프레임 변수
- 행렬형 변수나 데이터 프레임 변수에 대해서도 대괄호를 통해 특정요소의 참조가 가능하다.
- 원하는 행, 열, 행과열 / 제외하려는 행, 열을 선택할 수 있으나, [ -m , -n ] 의 형태로 하나의 원소만을 제외할 수는 없다.
> mydat [ 3 , 2 ] # 3행 2열의 값
> mydat [ , 2 ] # 2열의 값
> mydat [ 4 , ] # 4행의 값
마. 반복 구문과 조건문
1) for 문
- 괄호 안의 조건 하에서 중괄호 { } 안의 구문을 반복실행
(예) 1부터 100까지의 합
> isum = 0
> for ( i in 1 : 100 ) {
+ isum = isum + i
+ }
> cat ( "1부터 100까지의 합 = ", isum, "\n")
1부터 100까지의 합 = 5050
2) while 문
- for 문과 마찬가지로 주어진 조건 하에서 중괄호 { } 안의 구문을 반복실행
- for 문과 달리 몇 회 반복할지 미리 정해지지 않음
(예) 1부터 100까지의 합
> isum = 0
> i = 1
> while ( i < 101 ) {
+ isum = isum + i
+ i = i + 1
+ }
> cat ( "1부터 100까지의 합 = ", isum, "\n")
1부터 100까지의 합 = 5050
3) if~else 문
- if 조건문은 특정 조건이 만족되는 경우 이후의 구문을 실행, 만족하지 않는 경우 else 이하의 구문을 실행
(예) 80점 이상이면 A 출력, 80점 미만이면 B 출력
> score = 83
> if ( score >= 80 ) cat("A\n")
+ else cat("B"\n)
A
바. 사용자 정의 함수
- function 명령어를 이용하여 사용자가 직접 함수를 구성할 수 있다.
- 형식
> 함수명 = function ( x , y , z ) {
+ ...
+ ...
+ }
사. 기타 유용한 기능들
1) paste
- 문자열을 하나로 붙여주는 명령어
- 'sep = ' 옵션을 통해 구분자를 삽입할 수 있다.
> number = 1 : 10
> alphabet = c ( "a", "b", "c" )
> paste ( number, alphabet)
[1] "1a" "2b" "3c" "4a" "5b" "6c" "7a" "8b" "9c" "10a"
> paste ( number , alphabet , sep=" to the " )
[1] "1 to the a" "2 to the b" "3 to the c" "4 to the a" "5 to the b"
[6] "6 to the c" "7 to the a" "8 to the b" "9 to the c" "10 to the a"
2) substr
- 주어진 문자열에서 특정 문자열을 추출하는 명령어
> substr ( "BigDataAnalysis" , 1, 4 )
[1] "BigD"
> country = c ("Korea" , "Japan" , "China" , "France " , "Spain" )
> substr ( country , 1 , 3 )
[1] "Kor" "Jap" "Chi" "Fra" "Spa"
3) 데이터 구조 변환
- as.data.frame(x) : 데이터 프레임 형식으로 변환
as.list(x) : 리스트 형식으로 변환
as.matrix(x) : 행렬 형식으로 변환
as.vector(x) : 벡터 형식으로 변환
as.factor(x) : 팩터 형식으로 변환
- 강제 형변환에 의해 표시될 수 없을 때는, 결측치인 'NA'가 출력되며 경고문 발생
- 데이터 프레임을 행렬로 변환할 경우, 원소들은 모두 문자형으로 전환된다.
4) 문자열 -> 날짜 변환
- as.Date("yyyy-mm-dd") 함수 이용
"yyyy-mm-dd" 형식의 문자열이 아닐경우, format 옵션으로 형식을 지정한다.
> as.Date ( "01/13/2015" , format="%m/%d/%Y" )
[1] "2015-01-13"
5) 날짜 -> 문자열 변환
- format 함수와 as.character 함수를 이용해 날짜를 문자열로 변환한다.
> format(Sys.Date()) # Sys.Date() : 현재 날짜를 반환
[1] "2019-08-11"
> as.character(Sys.Date())
[1] "2019-08-11"
- format 함수의 옵션
> format(Sys.Date(), format="%m/%d/%Y")
[1] "08/11/2019"
> format(Sys.Date(), '%a') # 요일 출력
> format(Sys.Date(), '%b') # 월 출력
> format(Sys.Date(), '%m') # 두자리 숫자의 월 출력
> format(Sys.Date(), '%d') # 두자리 숫자의 일 출력
> format(Sys.Date(), '%y') # 두자리 숫자의 연도 출력
> format(Sys.Date(), '%Y') # 네자리 숫자의 연도 출력
4. R 언어의 그래픽 기능
가. 산점도 그래프
- x변수와 y변수의 값을 한눈에 살펴볼 수 있도록 평면에 점을 찍어 표현
- plot(x, y) 또는 plot(y~x) 함수를 사용한다.
나. 산점도 행렬
- 여러 가지 변수들에 대해서 각각의 산점도를 한눈에 살펴볼 수 있도록 확장된 산점도 행렬
- pairs 명령어를 이용한다.
( 'main =' 옵션 : 최상단에 제목 표기 / 'pch =' 옵션 : 점의 모양 변경 / 'bg =' 옵션 : 데이터에 따른 색상 부여)
다. 히스토그램과 상자 그림
- 히스토그램과 상자 그림을 통해 자료의 분포를 손쉽게 확인할 수 있다.
- hist(x) 함수를 통해 히스토그램을 생성하며, 'prob=T' 옵션으로 상대도수로 변경이 가능하다.
기본적으로 세로축에 도수가 표기된다.
- 상자 그림은 boxplot(x) 함수를 통해 생성할 수 있다.
'자격증 기록 > ADsP(데이터분석 준전문가)' 카테고리의 다른 글
[ADsP #9] 데이터 분석 2장 - 통계 분석 (1) (0) | 2019.08.19 |
---|---|
[ADsP #8] 데이터 분석 1장 - R 기초와 데이터마트(2) (0) | 2019.08.12 |
[ADsP #6] 데이터 분석 기획 2장 - 분석 마스터 플랜 (0) | 2019.08.05 |
[ADsP #5] 데이터 분석 기획 1장 - 데이터 분석 기획의 이해 (0) | 2019.08.04 |
[ADsP #4] 데이터이해 3장 - 가치 창조를 위한 데이터 사이언스와 전략 인사이트 (0) | 2019.08.03 |