-
3주 2일차 TIL 정리웅진 STARTERS 부트캠프 2023. 2. 21. 18:03
3주 2일차에는 R의 활용과 데이터 핸들링, 대략적인 시각화에 대해 학습하였다.
※ 연산자 ※
1. 산술 연산자
- 더하기: +
- 빼기: -
- 곱하기: *
- 나누기: /
- 제곱: ^
- 나머지: %%
- 몫: %/%2. 비교 연산자: 파이썬과 동일
3. 논리 연산자
- 벡터화된 논리곱
c(T,T) & c(F,T)
- 벡터화되지 않은 논리곱
c(T,T) && c(F,T)
- 벡터화된 논리합
c(T,T) | c(F,T)
- 벡터화되지 않은 논리합
c(T,T) || c(F,T)
- 논리부정
!T
* 벡터화: 요소끼리 비교함
eg) c(1,2,3)과 c(4,5,6)이 있으면 1,4 2,5, 3,6을 비교해 3개의 결과 출력
벡터화되지 않은 논리곱을 실행할 때 다음과 같은 오류메시지도 같이 떴다. 4. 벡터 / 매트릭스의 연산
c(1,2,3) + c(4,5,6)
※ 조건문 ※
1. if문: if, else if, else 사용
if(flight[i]>mean(flight)){ result <- c(result,airline[i]) }
2. 삼항연산자( ifelse )
score <- c(30,80,65, 95) result <- ifelse( score >= 50, '합격', '불합격') print(result)
3. switch문: 입력값과 비교값이 같으면 실행 // 비교값 부분엔 문자만 들어갈 수 있다.
x = "age" y = "bye" switch(x,'hi'='hello','age'=25,'3'='숫자','NULL') switch(y,'hi'='hello','age'=25,'3'='숫자','NULL')
4. which문: 조건에 해당하는 입력 벡터 내부 값의 인덱스 출력
score <- c(30,90,75,82) which(score == 90) which(score >= 50)
- which문을 활용한 특정 데이터 추출
# 샘플데이터 data <- airquality # 7월 31일 데이터 data[which((data$Month==7)&(data$Day=31)),]
※ 반복문 ※
1. for: python과 문법 상에서 차이가 있다. (괄호치는 조건이 다름)
for(i in c(1,2,3)){ print(i) }
2. while: python과 문법 상에서 차이가 있다. (괄호치는 조건이 다름)
while (i < 100){ i <- i * 2 print(i) }
※ 기타 함수 ※
1. 결측치가 있는 데이터 파악: is.na( 데이터 ) (논리형으로 반환)
# 샘플데이터 불러오기 data <- airquality # 결측치 여부 확인( T / F ) is.na(data7$Ozone) # 결측치 개수 파악 sum(is.na(data7$Ozone))
2. 작업경로 찾기: getwd()
3. 작업 경로의 파일 리스트 보기: dir()
getwd() # 작업경로 찾기 dir() # 작업경로의 파일들 보기
4. 데이터 형식 보기: class( 데이터 )
5. 크기 보기(데이터 차원 보기): dim( 데이터 )
class(data) dim(data)
6. 마지막 차원의 데이터개수: length( 데이터 )
7. 데이터프레임 정보: str( 데이터 )
length(data) # 마지막 차원의 데이터개수 str(data) # 크기, 미리보기 값 제공
8. 데이터 표로 보기: View( 데이터 ) * V 대문자 주의
View(data) # 표로 데이터 볼 수 있음
새로운 탭으로 열린다.
※ 사용자 정의 함수 ※
- 함수 선언
함수명 <- function( 변수 ){ 내용 } 이 기본구조이다.
# D_Day계산하는 함수 D_Day <- function(year, month, day){ today <- Sys.Date() inputDayString <- paste(year,month,day,sep='-') inputDay <- as.Date(inputDayString) Ddays <- difftime(today, inputDay) return(as.integer(Ddays)) } print(D_Day(2022, 01, 01))
※ 데이터 불러오기 ※
1. txt 불러오기: read.table(파일명, header=T, sep="",col.names=c(),na.string="")
- header: 데이터 첫 행에 열 변수명이 있으면 TRUE, 없으면 FALSE
- sep: 구분자 지정
- col.names: 열 변수명의 임의 설정(header가 TRUE이면 할 필요 없음)
- na.string: 결측치를 의미하는 문자가 어떤 것인지 지정
2. csv 불러오기: read.csv(파일명, header=T,col.names=c(),na.string="")
- header, col.names, na.string이 read.table과 동일.
3. excel 불러오기: read.xlsx( )
- readxl패키지를 인스톨해 사용해야 불러오기 가능.
- sheet가 여러 개인 경우, sheet명 지정(미지정시 첫 번째 sheet)
- range: 데이터를 불러올 범위
- col_names: 위의 header와 동일
- col_types: 위의 col_names와 동일
- na: 위의 na.string과 동일
※ 데이터프레임의 추출 ※
- 데이터프레임의 행을 기준으로 모든 열 추출:
데이터프레임 [ 행, ]
# 7월 31일 데이터 data[which((data$Month==7)&(data$Day=31)),]
- 데이터프레임 열을 기준으로 모든 행 추출:
데이터프레임 [ ,열 ]
# Ozone데이터 data[,'Ozone']
- 데이터프레임 행과 열을 모두 지정해 추출
데이터프레임 [ 행, 열 ]
# 7월 31일의의 Ozone, Solar.R data[which((data$Month==7)&(data$Day=31)),c('Ozone','Solar.R')]
or
data[which((data$Month==7)&(data$Day=31)),c(1,2)]
※ 그래프 그리기 ※
1. 산점도와 직선그래프: plot( )
plot(1:length(data), # x축 값 data, # y축 값 type='l', # 그래프 타입(p: 점, l: 선, b: 점&선) main="1991-1998 Europe Stock Daily Closing Price", # 그래프제목 xlab ='day', # xlabel ylab = 'price', # ylabel # ylim = c(90,180) # y축의 값 범위 # xlim = c(1990,2000) # x축의 값 범위 )
- 다음과 같이 plot으로 설정을 해둔 다음 line을 이용해 다중그래프를 그릴 수도 있다.
data <- as.numeric(AirPassengers) length(data) y1949 <- data[1:12] y1950 <- data[13:24] plot(y1949,type='o',pch=19,col='red',ylim=c(90,180),xlab='Month',ylab='passengers') # lines로 다중그래프 그리기 가능 lines(y1950,type='o',pch=19,col='blue') # 범례 표시 legend('topright',legend=c('1949y','1950y'),fill=c('red','blue'))
2. 파이 차트: pie( )
data <- c(40,23,34) label <- c('A','B','C') pie(data, label=label # 레이블 지정 # init.angle=0 # 시작각도 조정 # radius=1 # 원의 크기 조절 ) # 범례 표시 legend('topright',legend=label,fill=c('white','skyblue','pink'))
3. 히스토그램: hist( )
data <- airquality hist(data$Temp, # 들어갈 데이터 breaks=20, # 범주 개수 freq=F # 결과 출력값 기준(T: 횟수 / F: 비율(density)) )
4. 박스플롯: boxplot( )
data = c(2,1,4,5,6,7,8,23,3,4,46,4,17,6,9,12,35,56,7,8,23,2,12,21) boxplot(data, # boxwex=NULL # 상자 넓이 조정 )
※ 그룹 토의 및 멘토링 내용 정리 ※
1. 멘토링에서 질문한 내용은 이번 주엔 없었다.
2. 그룹 토의에서 나온 내용: 이중그래프에서 축을 공유할 경우 x축을 안 쓰고 y축만 작성해도 되는 것으로 생각하던 조원이 있어 이에 대해 토의해 보았는데, 결과적으로는 축을 0부터 쓸 경우 공유해도 문제가 없는 것이었다. 해당 그래프는 x축이 연도이다 보니 1900정도부터 시작했는데, 함께 그려진 line그래프는 x축이 0에 가까이 있어 표시되었지만 xlim때문에 잘려서 보였던 것이었다.
3.리뷰: 멘토링 내용으로 다양한 실습을 진행했고, 본문 내용에 동시에 첨부하였다! 양이 방대하다 보니 정리가 필요했는데, 멘토링 시간에 진행한 간략한 핵심 정리가 큰 도움이 되었다. R과 파이썬이 겹치는 내용이 많다 보니 학습하기에 어려움은 크게 없었지만, 미묘하게 다른 부분들을 신경쓰다 보니 오히려 어려운 부분도 있었던 것 같다. 이후 실습 부분을 해가며 점진적으로 체화시키고자 한다.
'웅진 STARTERS 부트캠프' 카테고리의 다른 글
3주 4일차 TIL 정리 (0) 2023.02.23 3주 3일차 TIL 정리 (0) 2023.02.22 3주 1일차 TIL 정리 (2) 2023.02.20 유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 2주차 학습 일지 (0) 2023.02.19 2주 5일차 TIL 정리 (4) 2023.02.17