Data Science/R

[R] 기본 요약 정리 ( data frame , 데이터 읽기/쓰기 , apply() 함수 , 데이터 찾기 )

Acdong 2020. 5. 12. 19:02
728x90

데이터 프레임 ( Data frame )

데이터 프레임은 숫자형 벡터 ,문자형 벡터 등

서로 다른 형태의 데이터를 2차원 데이터 테이블 형태로 묶을 수 있는 자료구조이다.

 

데이터프레임 만들기

data,frame() 함수를 이용하여 만든다.

ciry <- c("Seoul","Tokyo","Washington")       #문자로 이루어진 벡터
rank <- c(1,3,2)                                             #숫자로 이루어진 벡터
city.info <- data.frame(city, rank)                #데이터프레임 생성
city.info                                                         #city,info의 내용 출력

데이터프레임에서 데이터를 벡터로 추출하기 

 

df[["Temp"]] , df[[2]] , df$age 

 

데이터 프레임 추출 

 

df[2], df["age"] 

 

벡터생성인자 : stringAsFactor = T ( 기본 값 T )

True 이면 문자열을 factor로 저장하고 False 이면 char 형태로 저장


iris 데이터 셋

데이터프레임을 다루는 방법을 연습하기 위해 R에서 제공하는 데이터 셋

150그루의 붓꽃에 대해 4개의 분야의 측정 데이터와 품종 정보를 결합하여 만든 데이터셋

 

iris 데이터 출력해보기

iris          # 전체 데이터 출력

iris[,c(1:2)]                                                 #1,2열의 모든 데이터
iris[,c(1,3,5)]                                              #1,3,5열의 모든 데이터 
iris[,c("Sepal.Length",Specoes")]               #1,5 열의 모든 데이터
iris[1:5,]                                                     #1~5행의 모든 데이터
iris[1:5,c(1,3)]                                             #1~5행의 데이터 중 1,3 열의 데이터

행렬(matrix) , 데이터프레임의 내용 확인

rownames() 행의 이름을 출력한다.
colnames() 열의 이름을 출력한다.
dim() 행과 열의 개수를 출력한다.
nrow() 행의 개수를 출력한다.
ncol() 열의 개수를 출력한다.
head() 시작부분에 있는 일부데이터(5개)의 내용을 출력한다.
tail() 끝부분에 있는 데이터 중 일부를 출력한다.
str() 매트릭스, 데이터프레임의 요약 정보를 출력한다.
unique() 그룹(종류)의 값이 저장된 벡터에서 중복을 제외하고 그룹 확인한다.
table() 그룹(종류)의 값이 저장된 벡터에서 각 그룹별로 몇 개의 관측치가 존재하는지 출력한다 ( 도수분포표 )

행렬(matrix), 데이터프레임 다루기

colSums() 열별 합계를 출력한다.
rowSum() 행별 합계를 출력한다.
colMeans() 열별 평균을 출력한다.
rowMeans() 행별 평균을 출력한다.
t() 행방향과 열방향을 변환한다.
subset() 조건에 맞는 행을 추출한다.
class() 자료구조를 확인한다.
is.matrix() 행렬(matrix) 여부를 확인한다.
is.data.frame() 데이터프레임 여부를 확인한다.

subset() 함수 예시

 

IR <- subset(iris, Species=="setosa")

# IR 변수에 iris 중 Species 가 "setosa" 인 것들만 추출해서 담아라

# 품종 열의 값이 "setosa"인 열만 추출하라는 의미이다.

 

행렬(matrix)와 데이터프레임에 대한 산술연산 주의점

 

a 행렬과 b 행렬을 더하는 연산을 하면 동일 위치에 있는 값들 끼리 더하는 연산으로 실행된다.

단 , 행렬간 산술연산을 하려면 두 매트릭스의 크기(행과 열의 개수)가 같아야 한다.


행렬과 데이터프레임의 자료구조 변환

* 자료구조를 같게 변환해줘야 연산을 할 수 가있다.

#행렬을 데이터 프레임으로 변환

st <- data.frame(state.x77)
head(st)
class(st)

#데이터프레임을 행렬로 변환

iris.m <- as.matrix(iris[,1:4])
head(iris.m)
class(iris.m)

파일 데이터 읽기/쓰기

파일 형식 변환

R에서는 .xlsx 포맷의 엑셀파일을 직접 읽을 수도 있지만,

보통 .csv 포맷의 엑셀 파일을 많이 이용하므로 이에 대해 연습하기로 한다.

엑셀에서 해당 데이터 파일을 열고 [파일] 메뉴에서 [다른 이름으로 저장]을 선택한후, 저장할 [파일 형식]을 'CSV'(쉼표로분리하는 파일형식) 로 바꾸어 저장하여 R에서 사용한다.

 

파일 데이터 읽기

setwd("D:/path...")                                             #작업 폴더 지정
air <- read.csv("airquality.csv", header=T)        #.csv 파일 읽기

head(air)                                                           # 상위데이터만 추출 ( 미리보기 )

파일 데이터 쓰기

setwd("D:/path...")                                              #작업 폴더 지정
my.iris <- subset(iris, Species='Setosa')              #Setosa 품종 데이터만 추출
write,csv(my.iris, "my_iris.csv",row.names=F)     #csv 파일에 저장하기

header = T 는 읽어올 파일의 첫 번째 줄은 값이 아닌 열의 이름이라는 뜻이다.

실제데이터는 두 번째 줄부터이다.

 

만일 첫 번째 줄이 열의 이름이 아닌 값으로 시작을 한다면 header=F 와 같이 지정하면 된다.

 

na.strings='a'('a' 저장된 문자열들은 NA로 저장)

특정 문자열은 결측값 처리하게된다.

 

변수이름 부여하기

names(df1) <- c("id","name","gender"....)

특정 변수이름만 변경

names(df1)[7] <- "blood"

 

txt 파일 불러오기

txt 파일은 read.table() 함수 이용

header=FALSE 기본 설정

read.table("c:/data/adsp_name.txt",header=T,sep=";")
read.table() header 옵션이 기본 F로 고정 ( txt 파일은 header 를 변수이름으로 사용하지 않는 것이 기본)
sep은 변수간 구분이 세미콜론,빈칸,등이 있을 때 사용한다 ( 위 예시는 ; 로 구분 )

apply() 함수

반복 작업이 필요한 경우에는 반복문을 적용하면 되는데, 반복 작업의 대상이 메트릭스나 데이터프레임의 행 또는 열 인 경우는 for 문이나 while 문 대신에 apply() 함수를 이용할 수 있다.

 

R 은 처리 속도의 문제 때문에 for 문이나 while 문보다는 apply() 함수를 권장하고있다.

 

apply( 데이터셋 , 행/열방향 지정, 적용 함수)

 

매개변수의 의미

  • 데이터셋

    반복 작업을 적용할 대상 매트릭스나 데이터프레임의 이름을 입력한다.

  • 행/열방향 지정

    행방향 작업의 경우 1, 열방향 작업의 경우 2를 지정한다.
  • 적용 함수

    반복 작업의 내용을 알려주는 것으로 , R 함수나 사용자 정의 함수를 지정한다.

apply() 함수 적용

apply(iris[,1:4], 1 , mean)            #row 방향으로 평균을 구하는 함수 적용
apply(iris[,1:4], 2, mean)            #col 방향으로 평균을 구하는 함수 적용

조건의 맞는 데이터의 위치 찾기

score <- c(76 , 84, 69, 50, 95, 60, 82, 71, 88, 84)      # 데이터 입력
which(score==69)                                                       # 성적이 69 인 학생은 몇 번째에 있나                            3을 반환
which(score>=85)                                                       # 성적이 85 이상인 학생은 몇 번째에 있나                     5와 9를 반환
max(score)                                                                  # 최고 점수는 몇 점인가                                                95를 반환
which.max(score)                                                        # 최고 점수는 몇 번째에 있나                                        5를 반환
min(score)                                                                   # 최저 점수는 몇 점인가                                                50을 반환
which.max(score)                                                        # 최저 점수는 몇 번째에 있나                                        4를 반환

 

 

반응형