관리 메뉴

ilovechoonsik

[STARTERS 4기 TIL] R #2 (230221) 본문

STARTERS 4기 🚉/TIL 👶🏻

[STARTERS 4기 TIL] R #2 (230221)

춘시기좋아 2023. 2. 21. 19:52

 

📖 오늘 내가 배운 것

 

1. 연산자

2. 산술함수

3. 조건문

4. 반복문

5, 사용자 정의 함수

6. 데이터 내보내기

7. 데이터 가져오기

8. 데이터 확인 및 조작

9. 데이터 그리기

10. 분석 실습

11. dplyr 패키지 설치와 파이프 연산자

12. dplyr 주요 함수

13. 데이터 조작 및 실습

14. 마무리 퀴즈 및 정리

 

 

1. 연산자

1.1 산술 연산자?

- 프로그램이 산술적인 연산을 하도록 하는 연산자

 

종류

 

1.2 비교 연산자

- 두 데이터 사이의 크기 비교를 수행하는 연산자

> 결과는 논리형으로 리턴

 

 

1.3 비교 연산자

- 값 또는 자료구조 객체에 적용되는 논리기능 수행하는 연산자

> 결과는 논리형으로 리턴

 

벡터화? : 양쪽에 벡터가 들어왔을 때, 벡터의 원소 하나하나를 각각 비교해서 논리곱

벡터화 x? : 양쪽에 벡터가 들어왔을 때, 첫 번째 값만을 비교

3-4 : 논리합 > OR 둘 중 하나라도 참이라면 참 리턴

5 : 논리값 앞에 들어가 해당 논리에 역을 리턴

 

 

2. 산술함수 (내장함수)

2.1 산술함수

- Min : 입력 벡터 중 최소값 출력

- Max : 입력 벡터 중 최대값 출력

- Sum : 입력 벡터 중 총합 출력

- Prod : 입력 벡터 중 곱셈 값 출력

- Factorial : 입력받은 벡터에 대한 각각의 팩토리얼 값 출력

- Abs : 입력 값 절대값 출력

- Mean : 입력 벡터의 평균값 출력

- Median : 입력 벡터의 중간값 출력

- Range : 입력 벡터의 최소값 최대값 출력

: Mean + Max , 수치형 데이터 분석 시 범주 파악하기 용이

- Var : 입력 벡터의 평균에 대한 분산값 출력

- Sd : 입력 벡터의 평균에 대한 표준편차값 출력

 

2.2 문자열 관련 함수

- Paste : 값들을 하나의 문자열로 합치는 함수

: paste(c(1,2,3),c('번', '번', '번')) >> c('1번', '2번','3번')

- Rep : 데이터 영역의 값을 n번 반복

: rep(data,n) data로 초기화되는 길이가 n인 벡터 생성

 

# 데이터 입력
airline <- c("아시아나항공", "에어부산", "에어프레미아", "에어서울", "제주항공", "진에어", "대한항공", "티웨이항공")
flight <- c(1575, 481, 124, 354, 1197, 793, 1670, 859)
passenger <- c(249792, 90985, 29238, 71213, 203335, 133253, 250895, 146497)
freight <- c(3097.9, 516.7, 111.1, 273.1, 847.1, 763.2, 5406.1, 597.6)

# 각 항목의 총합, 평균 구하기기
# 계산 및 출력
total <- c(sum(flight), sum(passenger), sum(freight))
average <- total / length(flight) # length(): 입력된 매개변수의 크기 리턴
print(total)
print(average)

# flight가 평균보다 높은 항공사만 벡터로 출력
# 계산 및 출력
upperAvg_flight <- flight > mean(flight) # 평군 운항 실적과 항공사별 운항 실적 비교
result <- airline[upperAvg_flight] # airline 벡터 중 TRUE에 해당하는 index 값만 남김
print(result)

### "아시아나항공" "제주항공"     "대한항공"

 

3. 조건문

3.1 조건문?

지정한 조건에 해당할 때, 코드를 수행하는 구문

조건문 안에 들어가는 값은 반드시 논리값

 

3.2 if ~ else 문

scan() : 사용자로부터 데이터 입력받는 함수, 갑 입력 없이 엔터 누를 시, 입력 종료

 

3.3 ifelse 문 (삼항연산자)

# 다중조건식 적용하기 난해! 가독성 급격히 떨어지기 때문에 간단한, 중복되지 않는 조건문에서 사용

 

3.4 switch 문

if문 안에 입력 값, 비교 값 같다면 실행

 

3.5 which 문

# 조건에 맞는 데이터 인덱스를 리턴해주기 때문에 특정 데이터 샘플링 시 주로 사용

# 조건에 대한 비교만 존재, 조건에 대한 실행문 직접 구성할 수 없다!

# which문은 특정한 조건문의 비가 참이 된다면 이에 해당하는 인덱스 값을 리턴하는 단순한 함수로 봐도 된다

 

3.6 실습

#18 차시 실습 코드

#Q1
t <- scan()
if( t >= 30){
  print("더움")
} else if ( t >= 20 ){
  print("보통")
} else if (t >= 10 ){
  print("선선")
} else if (t >= 0 ){
  print("추움")
} else {
  print("매우 추움")
}

#Q2
data <- '매우 많이' # 가정
if(data == "매우 많이"){
  result <- 100
} else if (data == "많이"){
  result <- 70
} else if (data == "보통"){
  result <- 50
} else if (data == "조금"){
  result <- 30
} else {
  result <- 0
}
print(result)

#Q3
data <- "매우 많이" # 가정
result <- switch(data, "매우 많이"=100, "많이"=70, "보통"=50, "조금"=30, 0)
print(result)

#Q4
flight <- c(1575, 481, 124, 354, 1197, 793, 1670, 859)
# 벡터 연산이 가능한 ifelse로
result <- ifelse(result > 1000, "우수", "보통")
print(result)

#Q5
#데이터 입력
airline <- c('아시아나항공', '에어부산', '에어프레미아', '에어서울', '제주항공', '진에어', '대한항공', '티웨이항공')
flight <- c(1575, 481, 124, 354, 1197, 793, 1670, 859)

#계산 및 출력
index <- which(flight > mean(flight))       # c(1, 5, 7) 
print(index)
result <- airline[index]
print(result)                               # c(‘아시아나항공’, ‘제주항공’, ‘대한항공’)

 

4. 반복문

프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문

대부분 조건문과 함께 실행

 

4.1 for문

특정한 벡터 데이터 안에 있는 값들을 한 번씩 다 참조해서, 참조할 때마다 변수에 그 값을 집어넣는다

 

4.2 While문

 

4.3 Repeat 문

 

4.4 벡터 다루기 - 참조, 할당

반복문 사용하여 벡터 값 채우기

vec <- c(vec, i) : c 이용해서 vec + i

반복문이니까 처음에 선언한 빈 벡터에 i값이 증가되는 만큼 계속 추가됨

 

vec <- c(vec, 1) #vec() + 1 = vec(1)

vec <- c(vec, 2) #vec(1) + 2 = vec(1,2)

...

vec <- c(vec, 10) #vec(1,2,...9) + 10 = vec(1,2,3,...,10)

 

4.5 실습

#19차시 실습코드

#Q1
# min 직접 구현
data <- c(32, 45, 21, 10, 43)
min <- 99999999                       #충분히 큰 값으로 초기화
for( i in data){
  min <- ifelse( i < min, i, min) # 벡터 안에 값이 min보다 작다면, i 값을 min에 재할당, 아니라면 min 그대로 사용
}
print(min)

#Q2
for( i in data){
  if( i%%2 ==0 ) { #2의 배수라면
    print(TRUE)
  } else {
    print(FALSE)
  }
}


#Q3
# 홀수번째 값 sum 구현
data <- c(32, 45, 21, 10, 43)
sum <- 0                           # 홀수 자리 합 저장할 변수 초기화
i <- 1 # 데이터 인덱스 나타냄
while( i <= length(data)){
  if( i %% 2 == 1 ) {         # 홀수 라면
    sum <- sum + data[i]
  } 
  i <- i+1
}


#Q4
airline <- c('아시아나항공', '에어부산', '에어프레미아', '에어서울', '제주항공', '진에어', '대한항공', '티웨이항공')
flight <- c(1575, 481, 124, 354, 1197, 793, 1670, 859)
result <- c()

i <- 1
while(i <= length(airline)){
  if(flight[i] > mean(flight)){
    result <- c(result, airline[i])
  }
  i <- i + 1
}
print(result)

 

5. 사용자 정의 함수

5.1 사용자 정의 함수?

선택적 매개변수 사용하고 싶다면, 초기 값 지정 해놓기

 

5.2 다양한 예시

 

5.3 알아두면 좋은 특성

아무리 매개변수를 통해 값을 전달받았다 해도, 동일한 변수에 다른 값을 할당해 버리면 전달받은 값은 사라지고 동일하게 재할당이 된다. 해서 함수 안에 변수 넣을 때는 매개변수와 다른 이름 사용하기

 

 

5.4 파일에 함수 저장

불러오는 방법은 source 이용! 사용하면 해당 함수가 메모리에 올라감

 

5.5 실습

main.R 에서 airport.R을 선언, 함수 불러오기

main.R

더보기
#20차시 실습자료
#main.R

source('airport.R', encoding = 'UTF-8')

airline <- get_airline()
print(airline)

flight <- get_flight()
print(flight)

passenger <- get_passenger()
print(passenger)

freight <- get_freight()
print(freight)

airport <- get_airport()
print(airport)

result17 <- upperAgvAirline_17()
result18 <- upperAgvAirline_18()
result19 <- upperAgvAirline_19()
print(result17)
print(result18)
print(result19)

 

airport.R

더보기
#setwd('C:\\Users\\seong\\바탕 화면\\STARTERS\\2. R\\내 실습 파일')
#20차시 실습자료
#airport.R

#데이터 벡터 생성
airline <- c("아시아나항공", "에어부산", "에어프레미아", "에어서울", "제주항공", "진에어", "대한항공", "티웨이항공")
flight <- c(1575, 481, 124, 354, 1197, 793, 1670, 859)
passenger <- c(249792, 90985, 29238, 71213, 203335, 133253, 250895, 146497)
freight <- c(3097.9, 516.7, 111.1, 273.1, 847.1, 763.2, 5406.1, 597.6)

# 데이터 프레임 생성
airport <- data.frame('항공사 명'=airline, '운항(편)'=flight, '탑승객(수)'=passenger, '화물(톤)'=freight)
#airport
# 변수 get 함수 생성
get_airline <- function(){   return(airline) }
get_airline()
get_flight <- function(){   return(flight) }
get_passenger <- function(){   return(passenger) }
get_freight <- function(){   return(freight) }
get_airport <- function(){   return(airport) }


#평균 실적보다 높은 항공사 벡터 리턴 함수 들
upperAgvAirline_17 <- function(){
  upperAvg_flight <- flight > mean(flight) # c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE)
  result <- airline[upperAvg_flight]
  return(result)
}

upperAgvAirline_18 <- function(){
  index <- which(flight > mean(flight))    # c(1, 5, 7) 
  result <- airline[index]
  return(result)
}

upperAgvAirline_19 <- function(){
  result <- c()  
  i <- 1
  while(i <= length(airline) ){            # 데이터 모든 값 한번씩 참조
    if(flight[i] > mean(flight)){          # i 번째 항공사의 운항 실적이 평균보다 좋다면
      result <- c(result, airline[i])      # result 벡터에 i 번째 항공사 명 추가 
    }
    i <- i + 1
  }
  return(result)
}

 

6. 데이터 가져오기

6.1 데이터 형식

 

6.2 키보드 입력

 

6.3 로컬 파일

(1) 데이터 파일 확장자

 

(2) read.table

'

 

(3) read.csv

# read.csv는 read.table의 sep가 ','로 고정된 함수! csv가 많고, 자주 사용되기 때문

# data2 처럼 data2 처럼 col을 지정할 수 있다

 

(4) read.excel

# 매개변수가 좀 다르다! sheet, range

# sheet 여러 개 있을 수 있기 때문

# 엑셀은 행과 컬럼 이름이 존재, 때문에 몇 행 몇 열부터 읽을지에 대한 매개변수가 존

 

 

6.4 인터넷 파일

 

7. 데이터 내보내기

7.1 write.table

 

7.2 write.csv

# 가져올 때와 마찬가지로 sep 매개변수가 없다!

 

7.3 write.excel

 

8. 데이터 확인 및 조작

8.1 기본 확인 함수

dim : 데이터의 차원 확인

length마지막 차원 길이값

: $컬럼 => 해당 데이터 프레임의 컬럼 벡터 출력, 예시는 Orange 데이터 셋-Tree 컬럼의 크

head : 앞쪽 6개 데이터만 출력

tail : 뒤쪽 6개 데이터만 출력

str : 데이터의 class, 크기, 미리 보기 합쳐놓은 함수 

names입력으로 받은 데이터 프레임의 컬럼 이름들을 리턴

ViewRStudio 뷰어 창에서 데이터 확인! - V는 반드시 대문자

 

8.2 데이터 프레임 조작

(1) 행/열 추출

data.frame[행,열] : 데이터 프레임은 2차원이기 때문에 대괄호 안에 , 으로 데이터 공간 구분

, 기준으로 좌측 : 데이터 프레임 행에 대한 특정한 값들 조절하는 공간

, 기준으로 우측 : 컬럼에 대한 특정한 값들을 조절하는 공간

 

(2) 행/열 추출

이전 벡터 다루는 법에서, 벡터에 인자로 음수 주게 되면 해당 값을 제외하고 나머지 인자만 리턴한다고 했었는데

데이터 프레임도 동일!

 

(3) 기본 분석

- 데이터 크기, 통계치 등을 구하는 것 전부 분석

 

 

8.3 실습

#22차시 실습 자료

#Q1
data <- read.csv('TravelMode.csv')

head(data)
dim(data)   # (840 10)

length(data$choice)
names(data)
class(data)

# 데이터 특정 행/열 만 추출
data[c(1,2),]
data[1,seq(1:3)]
data$individual[1:6]

# 평균 분산 표준편차
travel <- data$travel
mean(travel) #평
var(travel) #분
sd(travel) #표

table(travel) # 값 등장 개수 확인 # value_counts()와 비슷

median(travel) #중간
range(travel) #min-max

quantile(travel) #사분위 수


#Q2-1
choice <- data$choice
print(choice)
choice_yes_index <- which(choice == "yes")
choice_yes_index
actual_data <- data[choice_yes_index,]  #choice값이 yes인 행과, 그 행들의 모든 열로 이루어진 데이터 프레임
head(actual_data)


#Q2-2
processed_data <- actual_data[,c(-1, -2, -4)] # x, individual, choice 칼럼은 필요없으므로 제거
head(processed_data)
str(processed_data)

#Q3
print(mean(processed_data$wait))
print(mean(processed_data$vcost))
print(mean(processed_data$travel))
print(mean(processed_data$gcost))
print(mean(processed_data$income))

#Q4
table(processed_data$mode)
table(processed_data$size)

#Q5
mode_table <- table(processed_data$mode)
mode_names <- names(mode_table)
mode_numeric <- as.numeric(mode_table)
bus_selected_count <- mode_numeric[which(mode_names == "bus")]  #bus가 선택된 횟수 저장
bus_selected_rate <- bus_selected_count/ sum(mode_numeric)
print(bus_selected_rate) # 약 14.3%

#Q6
size_table <- table(processed_data$size)
size_names <- names(size_table)
size_numeric <- as.numeric(size_table)
solo_selected_count <- size_numeric[which(size_names == "1")]  #1인 가구 수 저장
size_selected_rate <- solo_selected_count/ sum(size_numeric)
print(size_selected_rate) # 약 54.3%

 

9. 데이터 그리기

9.1 산점도, 그래프 그리기

(1) 기본 그래프

산점도 > 점 : type으로 지정

 

- 다중 그래프

 

 

 

- 범례 그리기

 

(2) 파이 차트

# 라벨 필수, 범주형 데이터에 특화

 

(3) 히스토그램

 

 

(4) 상자그림

이상치는 IQR 단위를 사용하여 구함

IQR : 1, 3사분위 값 사이의 거리

IQR에서 밖으로 1.5배 이상 벗어나면 이상치

 

10. 분석 실습

10.1 제주-김 비행기 실적

(1) 문제 및 해결 계획 수립

 

(2) 코드 및 결과

#Q1
#엑셀 로딩 패키지 다운로드
install.packages("readxl")
library(readxl)


#데이터 로딩

#C열에 항공명, L열에 화물 실적 데이터 존재
data <- read_excel("airport.xlsx", col_names = FALSE, range="R80C3:R85C12") # 80행 C열부터 85행 L열까지의 데이터 로딩
head(data)

#데이터에서 '항공사별 화물 실적'데이터를 추출
airportName <- data$...1  # 항공명
freight <- as.numeric(data$...10) # 화물 실적

# 추출한 데이터를 파이차트로 그림. (단, 항공사명, 비율 라벨 추가해야 함)
freight_percent<- freight / sum(freight) * 100
freight_percent <- round(freight_percent, digit=1) #round: 반올림 함수, 소숫점 1째자리에서 반올림
label_data <- paste(airportName, "(", freight_percent,"%", ")")
label_data
pie(freight, label=label_data)

 

10.2 코로나 예방접종 현황

(1) 문제 및 해결 계획 수립

 

(2) 코드 및 결과

#Q2
#데이터로딩
data <- read.csv("covid19.csv", header=F, skip=35, nrows=30) #header는 없으며, 앞의 35줄을 skip하고 그 다음부터 30줄을 로딩
dim(data)
data <- data[30:1,]                                          #데이터 위아래 뒤집기(reverse)

#9월 한달간 '당일 1차 접종자', '당일 2차 접종자‘ 데이터를 추출
#9월 한달간 '1차 접종률', '2차 접종률' 데이터를 추출

first_vaccine <- data$V3  #일일 1차 접종자 데이터 추출
second_vaccine <- data$V6 #일일 1차 접종자 데이터 추출
first_rate <- data$V5     # 1차 접종률 데이터 추출
second_rate <- data$V8     # 1차 접종률 데이터 추출

View(first_vaccine)

#화면분할 출력 2행 1열
par(mfrow = c(2,1))
# Plots 탭 크기 설정하기 애매 > 적절한 크기 window 띄우고 확인
windows(width=12, height=10)

plot(first_vaccine, type='o', col='red', pch=19, xlab="day", ylab="count", main="코로나 일일 백신 접종 수")
lines(second_vaccine, type='o', col='blue', pch=19)
legend("bottomright", legend=c('first', 'second'), fill=c("red", "blue"))

plot(first_rate, type='o', col='red', pch=19, xlab="day", ylab="rate(%)", ylim=c(20,80), main="총 백신 접종률 (%)")
lines(second_rate, type='o', col='blue', pch=19)
legend("bottomright", legend=c('first', 'second'), fill=c("red", "blue"))

 

 

10.3 시각화 실습 - TravelMode

(1) 문제 및 해결 계획 수립

 

(2) 코드 및 결과

#Q3

data <- read.csv('TravelMode.csv')
head(data)
dim(data)   # (840 10)
choice <- data$choice
choice_yes_index <- which(choice == "yes")
choice_yes_index
actual_data <- data[choice_yes_index,]  #choice값이 yes인 행과, 그 행들의 모든 열로 이루어진 데이터 프레임
head(actual_data)
processed_data <- actual_data[,c(-1, -2, -4)] # x, individual, choice 칼럼 제거
head(processed_data)
str(processed_data)        # 생성한 데이터셋 확인

#boxplot
boxplot_data <- processed_data[,c(-1, -4, -7)] #mode, travel, size 컬럼 제외
boxplot(boxplot_data)

#히스토그램
hist(processed_data$travel)

#파이차트
par(mfrow = c(1,2))
pie(table(processed_data$mode))
pie(table(processed_data$size))

 

 

11. dplyr 패키지 설치와 파이프 연산자

10.1 dplyr 패키지 소개

(1) 왜 중요?

 

현실의 데이터 더럽다 -> 전처리에 많은 시간 사용 -> 단순한 반복 작업 많고 힘듦

 

(2) 장점

 

- 전처리를 쉽게 해 준다

- 반복작업 줄여줌

- 처리 속도 빠름

- 파이프 연산자 제공 - 가독성, 메모리 효율성

 

10.2 파이프 연산자

(1) 파이프 연산자 소개

 

 

 

 

 

 

단축키

Ctrl + Shift + M

 

 

 

 

 

 

 

(2) 예시 및 장점

 

기본 R 코드 : 변수에 값을 할당하며 라인을 여러 개 사용

-> 불필요한 메모리 공간 사용

 

기본 R 코드 : 함수 중첩 사용

-> 나중에 함수가 여러 겹 중첩되면 가독성 떨어진다

 

파이프 연산자(%>%) 사용

 

 

기본 R 코드 : 변수에 값을 할당하며 라인을 여러 개 사용

-> 가독성 심각하게 떨어지고, 메모리 사용량도 불필요하게 많아진

 

기본 R 코드 : 함수 중첩 사용

-> 소괄호가 완전 많아! 가독성이 떨어진다

 

파이프 연산자(%>%) 사용

-> 전체적인 흐름 파악하기 쉽다

 

 

갑 조작을 위해 사용하는 함수가 많을수록 가독성 측면에서 장점

전처리 과정이 복잡할수록 코드 작성 및 이해가 편함

 

10.3 dplyr 유용한 함수 3가지

(1) rename

 

(2) arrange

 

(3) distinct

 

12. dplyr 주요 함수

12.1 예제 데이터 생성 #1 (임의의 과목 성적 데이터)

id <- as.character(c(2021001:2021010))
math <- c(100, 54, 36, 76, 54, 94, 15, 6, 34,64)
english <- c(95, 23, 11, 89, 50, 53, 70, 13, 60,90)
science <- c(99, 56, 43, 90, 34, 77, 43, 3, 85,72)
exam <- data.frame(id, math, english, science)
print(exam)

 

12.2 select

 

12.3 filter

 

12.4 mutate

 

퀴즈 코드

더보기
id <- as.character(c(2021001:2021010))
math <- c(100, 54, 36, 76, 54, 94, 15, 6, 34,64)
english <- c(95, 23, 11, 89, 50, 53, 70, 13, 60,90)
science <- c(99, 56, 43, 90, 34, 77, 43, 3, 85,72)
exam <- data.frame(id, math, english, science)
print(exam)

# exam 데이터프레임에서 science, math 출력
library(dplyr)
select(exam, science, math)

# exam에서 과학점수 70점 이상, 수학점수 50점 이하인 학생의 아이디 출력
exam %>% filter(science >= 70 & math <= 50) %>% select(id) %>% as.character() %>% print()

# 평균점수가 70이상 -> 합격 / 미만이면 불합격 가지는 pass 컬럼 추가
mutate(exam, pass= ifelse( (math+science+english)/3 >=70, '합격', '불합격')) #벡터 연산 가능한 ifelse! 조건 만족하면 합격, 불합격격

 

12.4 예제 데이터 생성 #2 (기존 데이터 수정)

 

12.5 group_by

 

12.6 summarize

 

퀴즈 코드

더보기
# 데이터셋 생성
id <- as.character( rep(c(2021001:2021010), tims=2) )
mid_math <- c(100, 54, 36, 76, 54, 94, 15, 6, 34,64)
final_math <- c(90, 80, 23, 67, 44, 72, 10, 45, 87,55)
math <- c(mid_math, final_math)
mid_english <- c(95, 23, 11, 89, 50, 53, 70, 13, 60,90)
final_english <- c(90, 32, 4, 74, 90, 23, 83, 52, 43,70)
english <- c(mid_english, final_english)
mid_science <- c(99, 56, 43, 90, 34, 77, 43, 3, 85,72)
final_science <- c(100, 79, 25, 65, 63, 75, 73, 66, 50, 83)
science <- c(mid_science, final_science)
examTerm <- rep(c('중간', '기말'), times=c(10,10))
exam2 <- data.frame(id, math, english, science, examTerm)
print(exam2)


# exam2의 examTerm 단위로 그룹을 묶고, 중간/기말 고사의 평균 수학 점수를 구하세요
group_exam <- group_by(exam2, examTerm)
group_exam
summarize(group_exam, mathAvg=mean(math))

 

정리하면

 

13. 데이터 조작 실습

13.1 데이터셋 소개 - gapminder

 

13.2 데이터 기본 정보 확인

install.packages("gapminder")
library(gapminder)
library(dplyr)
str(gapminder)
table(gapminder$continent)
table(gapminder$country)

str(gapminer) : 전반적 데이터 생김새

?gapminder : 패키지, 내장 데이터 셋은 ?를 통해 document 확인 가능!

table : 범주 데이터에 대한 count 값 확인

 

13.3 데이터 기본 통계값 분석

다양한 함수 중 시간 관계상 mean만 진행

# 대륙별 평균 GDP 계산
mean(pull(gapminder[gapminder$continent == "Africa", "gdpPercap"]))
mean(pull(gapminder[gapminder$continent == "Americas", "gdpPercap"]))
mean(pull(gapminder[gapminder$continent == "Asia", "gdpPercap"]))
mean(pull(gapminder[gapminder$continent == "Europe", "gdpPercap"]))
mean(pull(gapminder[gapminder$continent == "Oceania", "gdpPercap"]))

# 한국 평균 GDP 확인
mean(pull(gapminder[gapminder$country == "Korea, Rep.", "gdpPercap"]))


# dplyr 함수로 만들기
gapminder %>% filter(continent == "Africa") %>% select(gdpPercap) %>% pull() %>% mean()
gapminder %>% filter(continent == "Americas") %>% select(gdpPercap) %>% pull() %>% mean()
gapminder %>% filter(continent == "Asia") %>% select(gdpPercap) %>% pull() %>% mean()
gapminder %>% filter(continent == "Europe") %>% select(gdpPercap) %>% pull() %>% mean()
gapminder %>% filter(continent == "Oceania") %>% select(gdpPercap) %>% pull() %>% mean()

gapminder %>% filter(country == "Korea, Rep.") %>% select(gdpPercap) %>% pull() %>% mean()

 

gappminder는 tibble이라는 자료형을 갖는다.

pull() : tibble 자료형을 벡터 또는 데이터 프레임 자료형으로 형 변환하는 함수 

 

 

13.4 퀴즈

(Q1) group_by, summarize 함수를 사용하여 대륙별 평균 GDP 테이블을 생성하세요.

gdp_bycontinents <- gapminder %>% group_by(continent) %>% summarize(mean_gdpPercap=mean(gdpPercap))

 

(Q2) 아메리카대륙에 대한 데이터 프레임을 구하고, 총 몇 개의 행이 있는지 확인하세요.

America <- gapminder %>% filter(continent == 'Americas')
America %>% nrow #nrow : 데이터 프레임 행 개수 확인

# 답 : 300

 

 

(Q3) 아메리카대륙 인구가 3천만 이상인 데이터 프레임을 구하고, 해당 데이터 프레임의 ‘country’ 컬럼 별 행 개수를 구하세요.

 count 함수 사용
 count(data, 컬럼 명, sort=F): data에서 해당 컬럼 명의 요소 별 개수 리턴, sort=F는 큰 순서대로

America %>% filter(pop >= 30000000) %>% count(country, sort=T)

 

(Q4) Q3에서 확인한 결과, 아메리카대륙 중 55년 내내 인구 3천만 명 이상인 나라는 3곳입니다. Brazil, Mexico, United States의 연도 별 인구수를 한 그래프에 나타내세요. 

 plot의 ylim값은 c(세나라 인구 최소 값, 세나라 인구 최대 값)이 되도록 설정하세요.
 나라별로 다른 그래프 색을 가지도록 설정하세요.
 범례를 추가하세요

# y축 표시할 range 구하기 위해 나라 별 인구의 min, max 구하기
# 1. 세 나라의 데이터 확보
# 2. 인구 수 컬럼 선택
# 3. min, max 구하기기
min <- gapminder %>% filter(country == "Brazil" | country == "Mexico" | country == "United States") %>% select(pop) %>% min()
max <- gapminder %>% filter(country == "Brazil" | country == "Mexico" | country == "United States") %>% select(pop) %>% max()

# window 세팅
windows(width=10, height=10)

# 그래프 그리기
gapminder %>% filter(country == "Brazil") %>% select(year, pop) %>% plot(type='o', col="red", ylim=c(min,max))
gapminder %>% filter(country == "Mexico") %>% select(year, pop) %>% lines(type='o', col="blue")
gapminder %>% filter(country == "United States") %>% select(year, pop) %>% lines(type='o', col="green")
legend("topleft",legend=c("Brazil", "Mexico", "United States"), fill=c("red", "blue","green"))

 

14. 마무리 퀴즈 및 정리 실습

14.1 퀴즈

더보기

42254

 

14.2 실습

 

 


참조

https://statools.tistory.com/13

 

[R 강의] 10. 논리연산자 (and, or, not)

도구 R로 푸는 통계 10. 논리연산자 (and, or, not) 논리연산자에는 세 가지가 있습니다. and, or, not 입니다. 논리 연산의 결과는 TRUE 와 FALSE 라는 진리값입니다. 1. and 연산자 and연산자는 두 피연산자가

statools.tistory.com

https://kyun2.tistory.com/63

 

R에서 데이터 읽어들일 때 인코딩 조작 방법

R에서 데이터 읽어들일 때 인코딩 조작 방법 윈도우 환경에서 작성된 데이터 파일을 R에서 읽어들일 때 인코딩이 맞지 않아 에러가 뜨는 경우가 있습니다.> st2

kyun2.tistory.com

https://blog.naver.com/PostView.naver?blogId=pmw9440&logNo=221987404902 

 

3.63 R의 그래프 창크기(Graph Window) 조절하기

0. 차례 1. 들어가기 2. 그래프 창크기 조절하기 : windows() 함수 3. 요약 4. 참고자료(Reference) 1. 들...

blog.naver.com

 

 


💪🏻 앞으로 개선해야 할 점 (추가로 배워야 할 점)

 

📌 9 to 8 [ 강의 수강 > 이해 - 실습 > TIL ] 무한 반복

많은 양의 내용을 하루 만에 학습하다 보니 머릿속에서 정리가 안 된 상태이다

분석 흐름 따라가며 핵심적인 내용 추가로 정리하기

📌 이해하고 실습하는 것만 해도 시간이 너무 모자라 복-붙을 많이 했더니 TIL이 난잡하다.!

개선 방안을 고려해보자~~~~🐿️

 

 

 

#유데미, #유데미코리아, #유데미부트캠프, #취업부트캠프, #부트캠프후기, #스타터스부트캠프, #데이터시각화 #데이터분석 #태블로

Comments