본문 바로가기
A lot/경제

[경제통계] R프로그램 기초 정리 - 변수, qplot, 데이터프레임

by A ru 2022. 6. 5.
728x90

경제통계 공부시 다뤘던 R프로그램에 대해 정리한 내용입니다.

완전 기본적인 내용으로 부족한 부분이 많지만, 입문자들이 보기 편리할 것 같아 공유합니다.

 

 

R프로그램 (1~4)

.q() : R프로그램 종료

저장 a <- 1 b = 2 c <- 3 d <- 3.5
입력 a b c d
출력값 1 2 3 3.5
입력 a + b a + b + c 4 / b 5 * c
출력값 3 6 2 15

 

변수에 여러 값을 저장하는 방법

var1 <- c(1, 2, 5, 7, 8) : c안의 값 나열→ var1 입력시 [ 1 2 5 7 8 ] 출력

var2 <- c(1:5) : 1부터 5까지 나열 → var2 입력시 [ 1 2 3 4 5 ] 출력

var3 <- seq(1, 5) : 1부터 5까지 나열 → var3 입력시 [ 1 2 3 4 5 ] 출력

var4 <- seq(1, 10, by=2) : 1부터 2씩 증가하여 10까지 나열 → var4 입력시 [ 1 3 5 7 9 ] 출력

var<- seq(1, 10, by=3) : 1부터 3씩 증가하여 10까지 나열 → var 입력시 [ 1 4 7 10 ] 출력

var1 + 3 : 각 var1값에 3씩 추가됨 → 바로 [ 4, 5, 8, 10, 11] 출력

str1 <-“a” : 문구 저장시 무조건 “ “ 표시 해줄 것 → str1 입력시 [“a”] 출력

str2 <-“text” → str2 입력시 [“text”] 출력

str3 <-“Hello World!!” → str3 입력시 [“Hello Wold!!”] 출력

str4 <-“a”, “b”, “c” → str4 입력시 [“a” “b” “c”] 출력

str5 <-c(“Hello!”, “World”, “is”, “good!!!”) → str5 입력시 [“Hello!” “World” “is” “good!!!”] 출력

strl + 3 : 이항연산자에 수치가 아닌 연수라고 뜸 (오류!!)

x <-c(1, 2, 3) : 변수 만들기 → x 입력시 [1 2 3] 출력

                                           → mean(x) 입력시 [2] 출력 : 평균값

                                           → max(x) 입력시 [3] 출력 : x의 제일 큰 값

                                           → min(x) 입력시 [1] 출력 : x의 제일 작은 것

è paste() : 여러 문자들을 합쳐서 하나로 만드는 함수

è collapse =“,” : 단어들 합칠 때 쉼표 삽입

ex. paste(str5, collapse=”,”) → [“Hello!,World,is,good!!!”] 출력

paste(str5, collapse=” ”) → [“Hello! World is good!!!”] 출력(공백)

    paste(str5) → [“Hello!” “World” “is” “good!!!”] 출력

 

 

<qplot>

install.packages(“ggplot2”) : 패키지 다운로드   library(ggplot2) : 패키지 불러오기

x <- c(“a”, “a”, “a”, “b”, “c”) : 변수 생성

qplot(x) : 빈도 막대 그래프 출력(qplot=변수)

qplot2(data=mpg, x=hwy) : ggplot2에 있는 mpg라는 데이터를 불러옴

x축에 hwy(자동차가 고속도로에서 기름 한 단위단 넣을 때 몇 마일을 주행하는지 = 변수:hwy)

qplot2(data=mpg, x=cty) : ?

qplot2(data=mpg, x=drv, y=hwy) : 산포도 생성

 

qplot(data=mpg, x=drv, y=hwy, geom=”line”) : 선그래프로 바뀜(이전에는 산포도-점)

qplot(data=mpg, x=drv, y=hwy, geom=”boxplot”) : 박스플롯으로 바뀜

qplot(data=mpg, x=drv, y=hwy, geom=”line”) : 선그래프로 바뀜(이전에는 산포도-점)

qplot(data=mpg, x=drv, y=hwy, geom=”boxplot”) : 박스플롯으로 바뀜

뒤에 colour=drv (따옴표x) : 박스플롯에 색상 추가

(drv값이 달라짐에 따라서 박스플롯의 색상이 바뀌도록)

 

R프로그램 (5)

- 데이터 프레임: 행과 열로 구성된 표처럼 생김

 

- 제약된 시간에서 가장 유용한 정보를 뽑아내는 작업은 빅데이터의 가장 핵심적인 관건이다.

R창→ 4명의 학생들이 영어, 수학 시험을 본다.

eng<-c(90, 80, 60, 70) : 영어 점수 변수 생성 → eng 입력시 [90 80 60 70] 출력

math<-c(50, 60, 100, 20) : 수학 점수 변수 생성 → math 입력시 [50, 60, 100, 20] 출력

df_midterm<-data.frame(eng, match)

: eng, match 데이터 프레임을 생성하고, 새로운 변수 df_midterm에 할당하기

 

→ df_midterm 입력시 이와 같이 출력

 

class<-c(1,1,2,2) : 데이터 프레임에 새로운 변수 추가하기(몇 반에 있는 학생인지 추가하기) – 변수 생성

df_midterm<-data.frame(eng, match, class) : 맨 끝에 새로운 변수만 추가(덮어쓰기)

→ df_midterm 입력시 이와 같이 출력

 

- 데이터프레임을 만드는 이유? R로 하여금 이 데이터를 분석하게 하기 위함(이제 데이터가 준비되었으므로 분석해야할 차례)

mean(df_midterm$eng) : $표시가 들어감으로써 df_midterm이라는 데이터프레임을 정의를 하고

프레임 안에 있는 eng라는 변수를 불러낸다 (mean이란? 괄호 안 변수의 평균값)

→ mean(df_midterm$eng) 입력시 [75] 출력

→ mean(df_midterm$math) 입력시 [57.5] 출력

df_midterm2<-data.frame(eng=c(90, 40, 20, 10), math=c(90, 100, 20, 80), class=c(1, 1, 2, 1)

 :한번에 데이터프레임 불러옴 (만약 class=c(1,1,2,1,1)처럼 5명에 대한 정보면, 행의 개수와 달라서 오류)

 

R프로그램 (6) : 엑셀 파일을 R프로그램으로 불러오는 법

< readxl >

install.packages(“readxl”) : readxl이라는 패키지를 불러옴 > 서울 선택 > 부수적으로 필요한 패키지 자동 설치

library(readxl) : 패키지 불러오기(필수, 따옴표 필요x)

getwd(): 작업하고 있는 폴더의 경로를 알려주는 명령어(ex.”C:/Users/SSU/Documents”)

df_exam<-read_excel(“excel_exam.xlsx”) : 따옴표안에 파일명과 확장자까지 입력하여 엑셀 파일을 불러와서

변수 df_exam에 할당하는 작업

df_excel<-read_excel(“excel_exam.xlsx”, sheet=3) 엑셀의 3번째 시트 불러오기

 

mean(df_exam$math) : math 열에 있는 평균(총 21개 행 중에서 변수명을 제외한 20개 행의 평균)

mean(df_exam$science) : science 열에 있는 평균

df_exam<-read_excel(“excel_exam.xlsx”, col_name=F) : 첫번째 행을 변수명으로 인식하지 않도록 해주는 명령어

help read_excel  = ?read_excel : read_excel이라는 명령어에 대한 설명서가 뜸

R프로그램 (7) : R프로그램으로 만드는 그래프

<ggplot2>

install.packages(“ggplot2”) : ggplot2라는 패키지를 불러옴 > 서울 선택 > 부수적으로 필요한 패키지 자동 설치

- 산포도, 산점도, scatter plot

- ggplot2 먼저 배경이 되는 축을 선택한 다음 그래프 형태를 결정하고 부수적인 옵션을 추가

library(ggplot2) : 패키지 불러오기(따옴표 필요x)

내장되어 있는 mpg라는 데이터를 활용, 가로축은 displ (배기량), 세로축은 hwp (고속도로 연비)

ggplot(data=mpg, aes(x=displ, y=hwy)) : 그래프 기본 배경 불러오기 (aes:그래프를 위한 배경 설정 명령어)

→ 그래프 배경

 

ggplot(data=mpg, aes(x=displ, y=hwy))+geom_pint() : 모든 데이터를 다 표시해라(산점도를 그려라)

→ 관측값을 점으로 표시함 

 

이를 통해 배기량이 큰 자동차일수록 고속도로 연비가 낮아지는 경향이 있는 것을 파악할 수 있다.

ggplot(data=mpg, aes(x=displ, y=hwy))+geom_pint()+xlim(3,6) : x축의 범위를 3에서 6까지 한정하겠다

 

ggplot(data=mpg, aes(x=displ, y=hwy))+geom_pint()+xlim(3,6)+ylim(10,30)

: y축의 범위를 10에서 30까지 한정하겠다

 

R프로그램 (8) : 데이터 가공

<dplyr>

install.packages(“dplyr”) : dplyr이라는 패키지를 불러옴 > 서울 선택 > 부수적으로 필요한 패키지 자동 설치

                            - filter() : 행 추출               - select() : 열(변수) 추출                  - arrange() : 정렬

- mutate() : 변수 추가            - summarise() : 통계치 산출         - group_by() : 집단별로 나누기

                            - left_join() : 데이터 합치기 (열)             - bind_rows() : 데이터 합치기 (행)

exam<-read.csv(“csv_exam.csv”) : csv_exam이라는 csv파일 불러오기

library(dplyr) : 반드시 패키지를 한 번 불러와야 작동함

exam%>%filter(class==1) : exam을 정렬을 하는데 class가 1인 값만 출력한다(엑셀 필터 적용과 같음)

exam%>%filter(class!=4) : 1반 학생의 점수만 없애고 다른 반의 점수만 출력(1반만 제외)

exam%>%filter(math>50) : 수학점수가 50점 초과인 학생들만 출력

→전체 20명 중 10명만 출력 됨

 

 

 

exam%>%filter(math>=60) : 수학점수가 60점 이상인 학생들만 출력

exam%>%filter(math==1&math>=50) : 1반이면서 수학점수가 50점 이상인 학생들만 출력 →여러 조건 & (= 그리고)

exam%>%filter(math==2&english>=80) : 2반이면서 영어점수가 80점 이상인 학생들만 출력

exam%>%filter(math==2 | english>=80) : 2반이면서 영어점수가 80점 이상인 학생들만 출력 여러 조건 | (=이거나)

exam%>%filter(class==1 | class==3 | class==5) : 1, 3, 5반 학생 출력

exam%>%filter(class %in% c(1,3,5)) : 1, 3, 5반 학생 출력(위와 같음)

 

class1<-exam%>%filter(class==1) : class11반의 데이터 입력(데이터프레임 형식으로 들어간 것)

 

→class1 입력시 이와 같이 출력 / mean(class1$math) → [46.25] 출력

 

exam%>%select(math) : 특정 math열만 추출   

exam%>%select(english) : 특정 english열만 추출

exam%>%select(class, math, english) : class, math, english열만 추출

exam%>%select(-english) : english열만 제외하고 추출

→ math열도 추가로 제외하고 싶다면? -math, -english

 

exam %>%filter(class==1) %>%select(english) : 1반 학생의 영어 점수만 filter와 select 함께 이용하기

 

exam %>%

+filter(class==1) 위와 같은 결과가 나옴 / 보기 편리하게 행 구분이 가능

exam %>%select(id,math) %>%head : 전체 20명에 대한 id, math 데이터 중 처음 6개만 출력

exam %>%select(id,math) %>%head(10) : 전체 20명에 대한 id, math 데이터 중 처음 10개만 출력

exam %>%arrange(math) : 수학 점수를 기준으로 가장 낮은 점수부터 오름차순으로 정렬

exam %>%arrange(desc(math)) : 수학 점수를 기준으로 가장 높은 점수부터 내림차순으로 정렬

exam %>%arrange(class, math) : 반 정렬반 안에서 수학 점수 정렬

exam %>%mutate(total=math+English+science) : 새로운 변수()를 추가하는 명령문 mutate →total이라는 변수 추가

새로운 total 열 생성

exam %>%mutate(total=math+English+science, mean=(math+english+science)/3)

→total, mean 열 생성

 

exam %>%summarise(mean_math=mean(math) : mean_math라는 변수에 수학점수의 평균=mean(math)을 산출

 

exam %>%group_by(class) %>%summarise(mean_math=mean(math))

 : group by→1반부터 5반까지 그룹화 / 각 그룹()mean_math 산출

→total, mean 열 생성

> summarise(변수명=명령문) →저장
> 변수명 →입력
변수명
명령값(산출값) →변수명~명령값 출력
 

exam %>%group_by(class)

%>%summarise(mean_math=mean(math), sum_math=sum(math), median_math=median(math), n=n())

n은 단지 행 갯수를 세어주는 것이므로 별도의 변수명은 필요x

test1 <- data.frame(id=c(1,2,3,4,5), midterm=c(60,80,70,90,85))

test2 <- data.frame(id=c(1,2,3,4,5), midterm=c(70,83,65,95,80))

위에서 만든 데이터프레임 출력

 

total <- left_join(test1, test2, by=”id”) : id를 기준으로 합친 다음, total이라는 새로운 데이터프레임에 넣어주는 것

→x=1, y=2(id기준으로 왼쪽부터 test1, 2)

 

test2 <- data.frame(id=c(1,2,3,4,5), final=c(70,83,65,95,80)): test2 다시 정의

total <- left_join(test1, test2, by=”id”) : id를 기준으로

→ test2에 넣은 final이 추가됨

 

name <- data.frame(class=c(1,2,3,4,5), teacher=c(“kim”,”lee”, “park”, “choi”, “jung”))

exam_new <- left_join(exam, name, by=”class”) : class(우측)기준으로 왼쪽부터 exam, name 삽입

group_a <- data.frame(id=c(1,2,3,4,5), test=c(60,80,70,90,85))

group_b <- data.frame(id=c(6,7,8,9,10), test=c(70,83,65,95,100))

group_all <-bind_rows(group_a, group_b) : 각 데이터 프레임을 하나의 데이터 프레임으로

 

728x90

댓글