Goals
- view, head, tail, dim, str, summary, ggplot2::mpg, as.data.frame
- dplyr 패키지, rename, 변수(컬럼) 추가, 조건 함수(ifelse), table 함수, hist 함수
Notes
# 데이터 분석 기초!!
#Global Env. 삭제
>rm(list= ls())
#csv 파일 열어서 데이터 프레임 생성 삭제
>exam = read.csv('data/csv_exam.csv')
# 데이터 프레임의 모든 데이터들을 출력
>exam
#viewer 창에서 데이터들을 확인
>View(exam)
# 오른쪽에 데이터 창에서 네모를 클릭하면 View를 통한 표가 나타난다.
# 데이터 프레임에서 처음에 나오는 일부 데이터만 출력
> head(exam)
id class math english science
1 1 1 50 98 50
2 2 1 60 97 60
3 3 1 45 86 78
4 4 1 30 98 58
5 5 2 25 80 65
6 6 2 50 89 98
>> n의 기본 값 : 6
> head(exam, n = 3)
id class math english science
1 1 1 50 98 50
2 2 1 60 97 60
3 3 1 45 86 78
tail(exam)
id class math english science
15 15 4 75 56 78
16 16 4 58 98 65
17 17 5 65 68 98
18 18 5 80 78 90
19 19 5 89 68 87
20 20 5 78 83 58
>>n의 기본 값 : 6
# 데이터 프레임의 차원(dimension): 행(관측치)과 열(변수)의 갯수
> dim(exam)
[1] 20 5
> dim(exam)[1] # 데이터 프레임의 행의 갯수
[1] 20
> dim(exam)[2] # 데이터 프레임의 열의 갯수
[1] 5
> dimension <- dim(exam)
> dimension[1] # 데이터 프레임의 행의 갯수
[1] 20
> dimension[2] # 데이터 프레임의 열의 갯수
[1] 5
# 데이터 프레임의 구조(structure)를 확인
> str(exam) 데이터수 변수갯수
'data.frame': 20 obs. of 5 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ class : int 1 1 1 1 2 2 2 2 3 3 ...
$ math : int 50 60 45 30 25 50 80 90 20 50 ...
$ english: int 98 97 86 98 80 89 90 78 98 98 ...
$ science: int 50 60 78 58 65 98 45 25 15 45 ...
변수명 변수타입
# 요약 통계량(기술 통계량, descriptive statistics)
> summary(exam)
id class math english science
Min. : 1.00 Min. :1 Min. :20.00 Min. :56.0 Min. :12.00 min. 최솟값
1st Qu.: 5.75 1st Qu.:2 1st Qu.:45.75 1st Qu.:78.0 1st Qu.:45.00 1st Quartile. 1사분위 (오름차순 정렬에서 25%)
Median :10.50 Median :3 Median :54.00 Median :86.5 Median :62.50 median. 중간값(50%). 2사분위 (오름차순 50%)
Mean :10.50 Mean :3 Mean :57.45 Mean :84.9 Mean :59.45 mean. 평균
3rd Qu.:15.25 3rd Qu.:4 3rd Qu.:75.75 3rd Qu.:98.0 3rd Qu.:78.00 3rd Quartile. 3사분위. (오름차순 75%)
Max. :20.00 Max. :5 Max. :90.00 Max. :98.0 Max. :98.00 max. 최댓값
Median이 86.5인 이유. 자료수가 20(짝수)이므로 10번학생과 11번학생의 평균을 냄.
#ggplot2패키지에는 mpg 데이터 프레임이 있다.
#as.data.frame(변수)
변수가 데이터 프레임이면, 데이터 프레임을 반환
변수가 데이터 프레임이 아니고, 데이터프레임으로 변환가능하면
데이터프레임을 생성해서 리턴
> mpg = as.data.frame(dimension)
> dimension
[1] 20 5
> mpg # dimension을 frame 화 해주었다.
1 20
2 5
- dplyr 디플라이어 패키지
#데이터 가공(조작)을 위한 패키지 설치
install.packages('dplyr')
#설치한 패키지를 검색경로에 추가
> library(dplyr)
#검색경로에 로딩된 패키지 확인
> search()
[1] ".GlobalEnv" "package:dplyr" "package:readxl" "package:ggplot2" "tools:rstudio"
[6] "package:stats" "package:graphics" "package:grDevices" "package:utils" "package:datasets"
[11] "package:methods" "Autoloads" "package:base"
새롭게 경로 추가한 패키지가 기존 패키지와 겹치는 함수명을 가질 때, 가장 최근에 추가된 패키지의 함수가 발현됨.
stats의 filter, lag 함수를 사용하려면 stats::filter, stats::lag 로 사용해야 함.
filter, lag 단독 사용하면 dplyr 패키지의 함수가 실행된다.
# 변수의 이름들을 의미가 있는 이름으로 바꿔서
나중에 데이터분석을 할 때 편리하게 함.
>rename( 데이터프레임, 바꿀변수이름 = 원래변수이름 )
df = data.frame(v1 = c(1,2,3) , v2 = c(11,22,33))
> df
v1 v2
1 1 11
2 2 22
3 3 33
> rename(df,id=v1)
id v2
1 1 11
2 2 22
3 3 33
> df ㄴ> rename함수는 /변수의 이름을 바꾼/ 새로운 데이터 프레임을 생성해서 리턴한다.
v1 v2 원본 데이터 프레임은 변경 x
1 1 11
2 2 22
3 3 33
> df = rename(df,id=v1)
> df
id v2
1 1 11
2 2 22
3 3 33
# 새로운 변수(컬럼) 추가
데이터프레임$추가할변수 <- 벡터값
> df_score = data.frame(id=c(1,2,3),
math = c(90, 80, 100),
kor = c(70, 80, 90))
> df_score
id math kor
1 1 90 70
2 2 80 80
3 3 100 90
> df_score$total = df_score$math+ df_score$kor
> df_score
id math kor total
1 1 90 70 160
2 2 80 80 160
3 3 100 90 190
# mpg 데이터 프레임에서 시내 주행 연비(cty)와 고속도로 주행 연비(hwy)의 평균을 계산해서
mpg에 avg_mpg 변수를 추가
> head(mpg)
manufacturer model displ year cyl trans drv cty hwy fl class
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact
4 audi a4 2.0 2008 4 auto(av) f 21 30 p compact
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact
> mpg$avg_mpg = (mpg$cty + mpg$hwy)/2
> head(mpg)
manufacturer model displ year cyl trans drv cty hwy fl class avg_mpg
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact 23.5
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact 25.0
3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact 25.5
4 audi a4 2.0 2008 4 auto(av) f 21 30 p compact 25.5
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact 21.0
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact 22.0
#새로 작성된 평균 연비 변수(컬럼)의 기술 통계량
> summary(mpg$avg_mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.50 15.50 20.50 20.15 23.50 39.50
# 조건 함수(ifelse) 이용
# 위에서 계산된 평균 연비(avg_mpg)의 값이
# 30 이상이면 1등급,
# 20 이상 30 미만이면 2등급
# 20 미만이면 3등급
mpg$f_grade <- ifelse(mpg$avg_mpg>=30, 1, ifelse(mpg$avg_mpg>=20,2,3))
> head(mpg)
manufacturer model displ year cyl trans drv cty hwy fl class avg_mpg f_grade
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact 23.5 2
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact 25.0 2
3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact 25.5 2
# 1,2,3 등급 차량들의 갯수
hist(mpg$f_grade)
# ifelse(조건식, 조건식이 참일 때 반환할 값, 조건식이 거짓일 때 반환할 값)
> x <- -100
> result <- ifelse(x>0, 'positive', ifelse(x==0, 'zero','minus'))
> result
[1] "minus"
# ifelse() 함수는 스칼라와 벡터 모두 적용 가능
> df <- data.frame(id = c(1,2,3,4,5),
score = c(100,95,88,73,61))
> df$grade1 <- ifelse(df$score >=80, "Pass","Fail")
> df
id score grade1
1 1 100 Pass
2 2 95 Pass
3 3 88 Pass
4 4 73 Fail
5 5 61 Fail
> df$grade2 <- ifelse(df$score >=90, "A",
ifelse(df$score>=80,"B",
ifelse(df$score>=70,"C",
ifelse(df$score>=60,"D",F))))
> df
id score grade1 grade2
1 1 100 Pass A
2 2 95 Pass A
3 3 88 Pass B
4 4 73 Fail C
5 5 61 Fail D
# 1, 2, 3 등급 차량들의 갯수
> table(mpg$f_grade) # 도수분포표(frequency table)
1 2 3
10 118 106
> hist(mpg$f_grade) # 히스토그램(막대 그래프)
'R > R기초' 카테고리의 다른 글
R06_ 데이터 정제 (0) | 2019.10.08 |
---|---|
R05_데이터 합치기 (0) | 2019.10.04 |
R04_ 데이터 전처리 (0) | 2019.10.02 |
R02_CSV, 엑셀파일에서 데이터 프레임 만들기 (0) | 2019.09.27 |
R01_ R 설치후 초기 설정, 기초, 인덱스, 함수, 데이터 프레임, csv 등 (0) | 2019.09.23 |