일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터분석
- Word Cloud
- 파이썬
- 크롤링
- SQL
- Python
- 데이터
- scikit-learn
- selenium
- 시각화
- 형태소분석기
- 인공지능
- iNT
- Okt
- 태블로
- numpy
- pyspark
- ionehotencoding
- Udemy
- konlpy
- Tableau
- input
- 머신러닝
- 데이터 분석
- pandas
- Today
- Total
반전공자
R 통계분석 (1주차) 본문
데이터분석으로 진로를 결정하고 난 후 부전공으로 데이터테크놀로지 전공을 선택했고
이번 2021년 1학기에 데테 전공과목인 R 통계분석과 인공지능을 듣게 되었다!
이미 책 한권 가지고 다 배웠지만 이제 매주매주 강의를 듣고 난 후 정리하는 개념으로 하나씩 글을 써보려고 한다 ! ! !
# R이 할 수 있는 기능
- Data handling and storage : numeric, textual (데이터 처리, 저장)
- Matrix algebra (수학계산)
- high level data analytic and statistical functions (높은 수준의 데이터 분석, 통계 가능)
- 객체지향 , 그래픽
# R이 할 수 없는 기능
- 데이터베이스가 아니다. 하지만 DBMS에 연결은 가능하다.
- 그래픽 사용자 인터페이스가 없지만 JAVA, Tcltk에 연결 가능하다.
- 인터프리터 방식이라서 속도가 느리지만, C/C++ 코드를 호출할 수 있다.
- 스프레드시트가 없지만, 엑셀이나 msoffice에 연결할 수 있다.
< package 관련 Code >
search()
library(igraph)
install.packages("igraph")
< 기본 환경 설정 Code >
getwd() # 워킹디렉토리 확인
setwd() # 워킹디렉토리 설정
sink("output.txt") # 결과가 콘솔로 나오지 않고, output.txt로 다 기록됨. 다시 sink() : 콘솔창에 결과 나옴.
cat("Now, back to console") # 특정 문자열을 화면에 보여주기
< 연산자 >
1 + 1 # 덧셈
1 - 1 # 뺄셈
1 * 1 # 곱셈
1 / 1 # 나눗셈
4 %/% 2 # 정수 나눗셈
4 %% 2 # 나머지
4 ** 2 # 거듭제곱
sin(x), cos(x), tan(x) # 삼각함수
log(x) # 로그함수
exp(x) # 지수함수
sqrt(x) # 제곱근
abs(x) # 절댓값 함수
round(x, digit=y) # 반올림 함수 ( digit은 자릿수 계산 : 2라면, 소숫점 이하 두자리 / -2라면, 100 곱하기)
< 변수 관련 >
rm() # 변수삭제
ls() # 현재 사용중인 모든 변수 보기
rm(list=ls()) # 만들어놓은 모든 변수 삭제하기
< 데이터 확인 >
head() # 상위 여섯 행의 데이터만 보여주기
tail() # 하위 여섯 행의 데이터만 보여주기
summary() # 기본적 통계량
nrow() # 행 개수
ncol() # 열 개수
str() # 데이터의 구조 개관
# R의 데이터 타입
데이터 타입 | 구성차원 | 자료유형 | 복수데이터 유형 적용 여부 | |
벡터 (vector) | 1차원 | 수치/문자/복소수/논리 | 불가능 | 동일한 형태의 자료를 1차원 형태로 여러개 모아서 취급하는 데이터 형태 |
행렬 (matrix) | 2차원 | 수치/문자/복소수/논리 | 불가능 | 동일한 형태의 자료를 2차원 형태로 여러개 모아서 취급하는 데이터 형태 |
데이터 프레임 (dataframe) | 2차원 | 수치/문자/복소수/논리 | 가능 | 행렬과 비슷하지만, 각 컬럼별로 데이터의 형태가 다를 수 있다. |
배열 (array) | 2차원 이상 | 수치/문자/복소수/논리 | 불가능 | 행렬을 다차원으로 확장한 것 |
요인 (factor) | 1차원 | 수치/문자 | 불가능 | 벡터의 특수한 형태로, 설문조사의 선택 문항 등 카테고리를 저장할 수 있는 데이터 형태 |
시계열 (time series) | 2차원 | 수치/문자/복소수/논리 | 불가능 | 시간 등과 같이 일련의 시간 자료를 표현하는 자료구조 |
리스트 (list) | 2차원 이상 | 수치/문자/복소수/논리함수/표현식/ cell 등 | 가능 | 키, 값의 형태로 된 데이터를 처리하는 자료구조 |
# 벡터 ( vector)
- 1차원 형태로 동일한 타입의 자료로 구성됨.
< 벡터형 자료 생성 >
c() # 벡터형 자료 생성
N1 : N2 # N1부터 N2 까지 정수 생성
seq(from, to, by) # 일정한 구조/순차 데이터 생성 from - 시작점, to - 도착점, by - 간격지정
rnorm(5) # 0과 1 사이의 난수 5개 생성
v1 = c(1,2,3,4,5)
v1
[1] 1 2 3 4 5
v2 = -5:5
v2
[1] -5 -4 -3 -2 -1 0 1 2 3 4 5
v3 = seq(from=1, to=5, by=0.5)
v3
[1] 1.0 1.5 2.0 2.5.3.0 3.5 4.0 4.5 5.0
v4 = rnorm(20)
v4
[1] -0.26265376 0.69699690 -1.04770092 -0.08899560 0.77102554 0.25054514 0.06108554
[8] 0.52577478 -0.21252034 1.36094245 1.19080089 -0.13898075 0.42186481 -0.07582389
[15] -0.66613589 0.98162983 0.13467192 0.85875722 1.77487097 -0.67898348
>
< 벡터형 자료 기본 연산 >
mean(v1) # 평균
[1] 3
order(v1) # 오름차순
[1] 1 2 3 4 5
rev(v1) # 내림차순
[1] 5 4 3 2 1
sd(v2) # 표준편차
[1] 3.316625
length(v4) # v4의 길이
[1] 20
sort(v4) # 오름차순으로 정렬하기
sort(v4, decreasing = TRUE) # 내림차순으로 정렬하기
range(v4) # 최솟값과 최댓값만 보여주기 (범위)
< 벡터형 자료 조작 >
x = c(1,4,6,8,9)
# python과 다르게 0부터 세지 않고 1부터 셈.
x[2]
[1] 4
x[-2] # x의 두번째 값 빼고 다 보여줘
[1] 1,6,8,9
x[3] = 4 # 세번째 값을 4로 바꾸기
x[2<x & x<5] # 2<x<5 값을 구하기
# x의 두번째 자리에 32를 넣고, 네번째 자리에 24를 넣기
y = raplace(x, c(2,4), c(32, 24))
# x와 y를 합치기
w = append(x,y)
# x의 두번째 값 뒤에 y를 끼워넣기
z = append(x,y,after=2)
# 자리 별 합
c(1,2) + c(4,5)
[1] 5 7
< 집합 연산 >
x = c(1,2,3)
y = c(4,5,6)
x == y
[1] FALSE FALSE FALSE
union(x,y) # x, y의 합집합
intersect(x,y) # x, y의 교집합
setdiff(x,y) # x, y의 차집합
setequal(x,y) # x, y 같은지 확인
[1] FALSE
is.element(3,x) # x에 3이 있는지 확인
< 문자 자료 벡터 >
(x = rep(c("a","b","c"), times=4))
[1] "a" "b" "c" "a" "b" "c" "a" "b" "c" "a" "b" "c"
unique(x) # 유일한 원소만 뽑기
match(x,c("a")) # x 안에 "a"가 있는지 확인 / a 아닌 자리에는 NA
[1] 1 NA NA 1 NA NA 1 NA NA 1 NA NA
y = c("d","e","f")
z = paste(x[1], y[3]) # x의 첫번째 값, y의 세번째 값 합치기
[1] "a f"
< 논리형 벡터 >
x = runif(5) # 난수 5개 생성하기
[1] 0.7572254 0.2213708 0.6589427 0.8715866 0.8817309
(0.4<=x)&(x<=0.7) # 0.4 <= x <= 0.7 값이라면 TRUE, 아니라면 FALSE
[1] FALSE FALSE TRUE FALSE FALSE
any(x>0.8) # 0.8을 초과하는 x 값이 하나라도 있다면 TRUE
[1] TRUE
all(x<0.7) # 모든 x값이 0.7을 넘는다면 TRUE
[1] FALSE
is.vector(x) # x의 자료형이 vector라면 TRUE
[1] TRUE
# 행렬 (matrix)
- 2차원 형태로 동일한 타입의 자료 생성
- 생성 : 벡터 데이터 생성 후 합치는 방식
row1 = c(1,2,3)
row2 = c(4,5,6)
row3=c(7,8,9)
mat1=rbind(row1, row2, row3) # 각 데이터를 행으로 넣기
mat
[,1] [,2] [,3]
row1 1 2 3
row2 4 5 6
row3 7 8 9
mat2 = cbind(row1, row2, row3) # 각 데이터를 열로 넣기
mat2
row1 row2 row3
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
< 문자형 행렬 데이터 생성 >
chars = c("a","b","c","d","e","f","g","h","i","j")
mat1 = matrix(chars) # chars를 행렬로 만들어줘! (기본형 : 아래로 늘여쓰기)
mat1
[,1]
[1,] "a"
[2,] "b"
[3,] "c"
[4,] "d"
[5,] "e"
[6,] "f"
[7,] "g"
[8,] "h"
[9,] "i"
[10,] "j"
mat2=matrix(chars, ncol = 5) # 아래로 늘여쓰는데 5개 열로 만들어줘! (10개 자료니까 2행x5열)
mat2
[,1] [,2] [,3] [,4] [,5]
[1,] "a" "c" "e" "g" "i"
[2,] "b" "d" "f" "h" "j"
## 열 기준으로 쓰여짐
< 행렬 데이터 조작 & 추출 >
mat3 = matrix(1:8, nrow=2) # 2행으로 8개 열 넣어줘! (2행 x 4열)
mat3
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
mat*3 # 각 값에 3을 곱하기
[,1] [,2] [,3]
vec1 3 6 9
vec2 12 15 18
mat3*c(10,20) # 1행엔 10씩 곱하고 2행엔 20씩 곱하기
[,1] [,2] [,3] [,4]
[1,] 10 30 50 70
[2,] 40 80 120 160
# 열과 행 이름 바꾸기
x = matrix(1:12, nrow=3, dimnames = list(c("R1","R2","R3"),
c("C1","C2","C3","C4")))
x
C1 C2 C3 C4
R1 1 4 7 10
R2 2 5 8 11
R3 3 6 9 12
x[7] # 7번째 값
[1] 7
x[1,] # 1행 추출
C1 C2 C3 C4
1 4 7 10
x[,2:4] # 모든 행에 대해서 2,3,4열 추출
C2 C3 C4
R1 4 7 10
R2 5 8 11
R3 6 9 12
x[,2] # 모든 행에 대해서 2열 추출 (세로로 있던 값을 단지 가로로 출력한 것일 뿐)
R1 R2 R3
4 5 6
x[,-2] # 모든 행에 대해서 2열만 빼고 모두 추출
C1 C3 C4
R1 1 7 10
R2 2 8 11
R3 3 9 12
# 데이터 프레임 (dataframe)
- 2차원 형태로 각 컬럼별로 다른 형태의 데이터를 가짐
- 생성 : 배열 데이터를 모아 구성함
# 데이터프레임 생성
no = c(1,2,3,4)
name = ("Apple","Banana","Peach","Berry")
prices = c(500, 200, 200, 50)
qty = c(5,2,7,9)
fruit = data.frame(No=no, Name=name, Prices=prices, QTY=qty)
fruit
No Name Prices QTY
1 1 apple 500 5
2 2 pear 200 2
3 3 banana 200 7
4 4 peach 50 9
rownames(fruit) = c("F1","F2","F3","F4") # 행 이름 변경하기
fruit
No Name Prices QTY
F1 1 apple 500 5
F2 2 pear 200 2
F3 3 banana 200 7
F4 4 peach 50 9
# 특정 행 추출
fruit["F1",]
No Name Prices QTY
F1 1 apple 500 5
# 특정 컬럼 추출
fruit $ Name
[1] "apple" "pear" "banana" "peach"
fruit$QTY
[1] 5 2 7 9
# 연속된 컬럼 추출
# 행 상관 없이 2, 3열을 추출
fruit[,2:3]
Name Prices
F1 apple 500
F2 pear 200
F3 banana 200
F4 peach 50
# *** 파생변수만들기 ***
fruit$TotalPrice = fruit$Price&fruit$QTY
fruit
No Name Prices QTY TotalPrice
F1 1 apple 500 5 TRUE
F2 2 pear 200 2 TRUE
F3 3 banana 200 7 TRUE
F4 4 peach 50 9 TRUE
# 요인 (Factor)
- 문자형 데이터가 저장되는 벡터의 일종
- 범주형 자료의 저장에 사용 : 저장하는 문자값들이 어떠한 종류를 나타내는 값일 때
- 장점 : 이미 지정된 값의 종류 이외의 값이 들어오는 것을 막을 수 있음
f = c('A','B','B','O','AB','A')
f_factor = factor(f)
f
[1] "A" "B" "B" "O" "AB" "A"
f_factor # 저장되는 값들에 따옴표가 붙지 않음.
[1] A B B O AB A
Levels: A AB B O # factor에 저장된 값들의 종류를 알아냄.
levels(f_factor)
[1] "A" "AB" "B" "O"
f[5] # f만 쓰면 " "가 붙음
[1] "AB"
f_factor[5] # factor 형식으로 바꾼 f를 쓰면 따옴표가 붙지 않음
[1] AB
Levels: A AB B O
f_factor[7]='C' # 원래 A, B, O, AB 만 요인으로 받아들여져 있는데 C를 넣으면 오류발생
Warning message:
In `[<-.factor`(`*tmp*`, 7, value = "C") :
invalid factor level, NA generated
as.integer(f_factor) # factor의 문자값을 숫자로 바꾸어 분석작업에 활용할 때
[1] 1 3 3 4 2 1 NA
# 리스트 ( list )
- (키, 값)의 형태로 데이터를 구성
- 생성
member = list(name="Lee",address="Seoul", tel="01088881111", ssn=010815)
member
#결과
$name
[1] "Lee"
$address
[1] "Seoul"
$tel
[1] "01088881111"
$ssn
[1] 10815
< 조작 >
member$name
[1] "Lee"
member[1:3] # 1행의 3열 정보 추출
# 결과
$name
[1] "Lee"
$address # 주소 정보 추출
[1] "Seoul"
$tel # 전화번호 정보 추출
[1] "01088881111"
# pay를 추가하고 그 값에 100을 넣기
member$pay=100
member
#결과
$name
[1] "Lee"
$address
[1] "Seoul"
$tel
[1] "01088881111"
$ssn
[1] 10815
$pay
[1] 100
'데이터분석 > R' 카테고리의 다른 글
# 데이터 분석 - 성별에 따른 월급 차이 분석 (0) | 2021.03.10 |
---|---|
R 통계분석 (2주차) (0) | 2021.03.10 |
R # 선 그래프 ( 상자 그림 ) (0) | 2021.02.25 |
R # 그래프 그리기 ( 선그래프 ) (0) | 2021.02.25 |
R # 그래프 그리기 (막대 그래프) (0) | 2021.02.24 |