데이터 청년 캠퍼스/사전교육
[쉽게 따라하는 데이터 분석] 4강 - 6강
뚱뚜루뚱
2022. 7. 12. 01:33
4강. 데이터 구조 및 기초함수
데이터 구조
- 행 Row: 데이터 셋의 가로 영역(관측치)
- 열 Column: 데이터 셋의 세로 영역(변수)
- 데이터 값 Value: 관측 값
- 변수 Variable: 변할 수 있는 값
- 할당연산자: 변수를 할당할 때 <- 사용. Alt + ( - )를 누르면 자동 생성
변수명 생성 규칙
- 첫 글자는 반드시 영문자 또는 마침표만 사용
- 두 번째 글자부터는 영문자, 숫자, 밑줄 사용
- 대문자와 소문자 구분
- 빈칸 사용 불가
Script
- : (콜론): 시작 숫자와 마지막 숫자 사이의 1씩 증가하는 연속 값을 변수로 구성
- c( ): 데이터나 객체를 하나로 결합
x <- 10
print(x)
y <- c(1,2,3,4,5)
print(y)
exam <- c(1:19)
print(exam)
변수의 자료형
- 숫자형: 정수형 Integer, 실수형 Float
- 문자형 String
- 논리형 Boolean
- 특수값: 결측값 NA, 정의되지 않은 값 Null, 수학적으로 정의가 불가능한 값 NaN, 무한대 Inf
num <- c(1,2,-5, 11.7) #숫자형
chr <- c('MJ', 'Jane') #문자형
login <- c(TRUE, FALSE) #논리형
num_nan <- c(NaN, 3) #특수값
# str(): 데이터의 구조를 알려주는 함수
str(num)
str(chr)
str(logic)
str(num_nan)
변수에 저장된 값은 언제든지 변경 가능하다
# 변수값 변경
a <- 2
b <- 5
print(a+b)
a <- 'MJ'
print(a+b)
# 산술연산
a <- 2
a-b
a*b
a/b
a%/%b #나눗셈의 몫
a%%b #나눗셈의 나머지
a^b
기초 함수
어떤 데이터 값을 미리 정해둔 공식에 따라 처리 결과를 도출한다
- sum( )
- mean( )
- sd( )
- var( )
- median( )
- max( )
- min( )
- length( )
- range( )
test <- c(1:5)
sum(test)
mean(test)
sd(test)
var(test)
median(test)
max(test)
min(test)
length(test)
range(test)
sum(test)/length(test) # mean( )의 값과 동일
논리연산자
논리연산을 만족하면 True 출력, 그렇지 않으면 False 출력
인덱싱: [ ]로 표현
- <
- <=
- >
- >=
- ==
- !=
- | : 어느 한쪽이라도 TRUE면 TRUE
- &
1 > 3
5 < 10
d <- c(1,2,3,4,5,6,7,8,9)
d >= 5
d[d>=5]
sum(d>=5)
sum(d[d>=5])
logi_result <- d > 5 & d < 8
d[logi_result]
매트릭스 Matrix
모든 셀의 값이 동일한 자료형으로 이루어짐
matrix(입력값, nrow = 행의 수, ncol = 열의 수)
rownames( )
colnames( )
데이터 프레임 Data Frame
모든 셀의 값이 동일한 자료형이 아니어도 됨
data.frame(변수명1, 변수명2, 변수명3, ...)
# Matrix
score <- matrix(c(100,70,72,70,70,65,60,90,95,90,72,100), nrow=4, ncol=3)
print(score)
rownames(score) <- c('MJ', 'Jane', 'Tom', 'Jisoo')
colnames(score) <- c('Korea', 'Math', 'English')
print(score)
score[1,3]
score[2,2]
score[2,]
score[,3]
# DataFrame
Korean <- c(100,70,95)
Math <- c(70,65,90)
Grade <- c('우','미','수')
score_df <- data.frame(Korea, Math, Grade)
print(score_df)
score_df$Korean
score_df[,1]
score_df$Math
score_df[,3]
score_df$Korean[2]
score_df[2,1]
패키지 설치
유능한 기능을 가진 함수들을 묶은 함수 꾸러미
패키지 설치: install.packages(" ")
패키지 로드: library
5강. 데이터 수집과 저장
데이터 수집 장소
- 공공데이터 포털 https://www.data.go.kr/
- 서울 열린데이터 광장 https://data.seoul.go.kr/
- 부산 공공데이터 포털 https://data.busan.go.kr/
- 대구 데이터 허브 https://data.daegu.go.kr/
- 통계 데이터 센터 https://data.kostat.go.kr/
- 한국도로공사 공공데이터 포털 http://data.ex.co.kr/
- 보건의료빅데이터개방시스템 https://opendata.hira.or.kr/
- SKT 빅데이터허브
- KT 통신빅데이터 플랫폼 https://bdp.kt.co.kr/invoke/SOKBP3002/
- 금융빅데이터 플랫폼 https://www.bigdata-finance.kr/
- 데이터 스토어 https://www.datastore.or.kr/
R로 데이터 불러오기
- getwd( )
- setwd( )
- read.csv('파일명', header = TRUE ) # 작업공간에 파일이 저장되어 있다면 폴더 주소 생략가능
- read.table('파일명')
- read_excel('파일명') # readxl 패키지 필요
Data 저장하기
- write.csv(저장할 데이터프레임 이름, file = '저장할 파일명.csv')
- write.table(저장할 데이터프레임 이름, file = '저장할 파일명.txt', sep = ',', na = 'NA')
- write_xlsx(저장할 데이터프레임 이름, path = '저장할 파일명.xlsx') # writexl 패키지 설치 필요
6강. 데이터 정제 기법
데이터 파악 함수
- view( ) # 뷰어창에서 확인
- head( ) / tail( )
- str( ) # 데이터 구조, 변수 개수, 변수명, 관측치개수 등 미리보기
- dim( ) # 데이터 차원
- names( )
- colnames( ) # 열 이름
- ls( ) # 저장되어 있는 모든 객체 출력
- ls(객체명) # 객체 데이터 프레임 내 변수 명 출력
- rm(list=ls()) # 모든 객체 제거
데이터 전처리를 위한 dplyr 패키지
install.packages('dplyr')
library(dplyr)
- filter( ) # 지정한 조건식에 맞는 데이터 추출
- select( ) # 선택한 변수(열) 추출
- mutate( ) # 새로운 변수(열) 추가
- arrange( ) # 데이터 정렬(오름차순, 내림차순)
- distinct( ) # 중복된 값 제거
- group_by( ) # 데이터를 그룹으로 나누기
- summarise( ) # 수치형 값에 대한 요약통계량 계산
install.packages('hflights')
library(hflights)
hf <- hflights
filter(hf, Month==1, DayofMonth==1) # 월과 일 모두 1인 값(and) 추출
filter(hf, Month==1|Month==2) # 월이 1이거나 2인 값(or) 추출
select(hf, Year, Month, DayofWeek)
select(hf, Year:DayofWeek)
mutate(hf, gain=ArrDelay-DepDelay) #ArrDelay와 DepDelay의 차를 gain으로 저장
arrange(hf, Year, Month, DayofMonth) # dafault: ascending
arrange(hf, desc(Month))
distinct(hf, Year)
distinct(hf, Year, Month) # Year와 Month 모두 유일한 값
# 도착지연평균, 도착지연 최대 계산
summarise(hf, 지연평균=mean(ArrDelay), 지연최대=max(ArrDelay)) # default:na.rm=FALSE
summarise(hf, 지연평균=mean(ArrDelay, na.rm=TRUE), 지연최대=max(ArrDelay, na.rm=TRUE)) # na.rm: 결측값 제거
# TailNum을 기준으로 그룹화하여 그룹별 갯수, 그룹별 지연평균 계산
summarise(group_by(hf, TailNum), 갯수=n(), 지연평균=mean(ArrDelay, na.rm=TRUE))