728x90
반응형

 이전 포스트에서 판다스(Pandas)가 무엇인지 간단한 소개와 판다스의 대표적인 데이터 타입인 데이터 프레임(DataFrame)과 시리즈(Series)를 살펴보았다.

 이번 포스트는 판다스의 상징인 데이터 프레임을 만드는 방법에 대해 알아보도록 하겠다.

 

 

데이터 프레임 만들기

1. 판다스 가져오기

  • 판다스를 사용하기 앞서 먼저 판다스를 설치하고 판다스를 사용하겠다고 선언해보자.
  • Python 모듈 설치는 크게 Anaconda를 사용하여 일반적으로 사용하는 Pandas를 포함한 각종 라이브러리를 한 번에 다운로드하는 방법이 있고, pip를 이용해서 다운로드하는 방법이 있다.
  • 해당 방법을 서술하기엔 그 내용이 꽤 길고 헷갈리기 쉽기 때문에 Pandas를 비롯한 각종 라이브러리를 설치하는 방법이 적힌 이전 포스트로 가는 참조를 걸어놓겠다.
  • 참고 1 - 라이브러리 설치 방법: "Python 필요한 모듈들을 설치해보자"
  • 참고 2 - Anaconda 설치 방법: "Python 파이썬과 아나콘다"
  • 참고 3 - 오프라인 환경에서 라이브러리 설치 방법: "Python 오프라인 환경에서 파이썬 패키지를 설치해보자"
  • 위 방법대로 Pandas를 정상적으로 설치하였다는 전제하에 Pandas에 대해 학습해보도록 하겠다.
# Import module
import pandas as pd
  • Python에서 #은 주석을 만드는 특수 문자로 코드(Syntax) 앞에 입력 시, 해당 행의 명령어들을 주석 처리한다.
  • import pandas as pd는 문자 그대로 "import(수입하다) pandas as(처럼) pd"로, pandas를 가지고 오는데 pd라는 문자로 가지고 온다는 의미이다.
  • Python은 특정 라이브러리 내 함수를 사용하려면 "라이브러리.함수()" 이런 식으로 코드를 짜게 되는데, pandas는 제법 긴 단어이므로 pd라는 간결한 단어로 라이브러리를 의미하겠다는 소리다.
  • 일반적으로 pandas는 pd라 사용하니 pd로 쓰도록 하자.

 

 

 

 

2. 데이터 프레임 함수 설명

  • pandas에서 제공하는 DataFrame API에서 DataFrame이 가지고 있는 파라미터(Parameter)는 다음과 같다.
  • pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
  • data: list나 numpy에서 제공하는 array, dictionary 등을 받는다. 간단하게 생각해서 행렬이나 벡터를 Data로 사용할 수 있다고 생각하면 된다.
  • index: 이전 포스트에서 말했듯, pandas의 데이터 프레임이나 시리즈의 특징은 index를 갖는다는 것이다. 그리고 사용자가 원하는 index를 부여할 수 있다. 지정하지 않은 경우, 자동으로 range(0, len(data))에 해당하는 index가 생성된다.
  • columns: 열, 즉 변수의 이름이다.
  • dtype: DataFrame 안에 들어갈 데이터의 type을 결정한다. DataFrame의 장점은 변수 별로 다른 dtype이 들어갈 수 있는 것이므로, 특수한 경우가 아닌 이상 지정 안 한다.
  • copy: DataFrame의 특징 중 하나인, Data의 종속성에 대한 부분인데, 이는 나중에 다루도록 하겠다. 크게 신경 쓰지 않아도 된다.

 

 

 

 

3. 행렬(2-d array)을 사용해서 데이터 프레임 만들기

  • 2-d array는 2차원 배열을 의미하며, 우리에게 친숙한 행렬이 2-d array다.
  • 머신러닝 라이브러리인 sklearn에서 제공하는 붓꽃 데이터를 이용해서 행렬을 보도록 하자.
import numpy as np
from sklearn.datasets import load_iris
  • numpy는 선형 대수학에 특화된 라이브러리로 다른 포스팅에서 자세히 다룰 테니 일단 넘어가자(당장 쓰지 않더라도 Pandas를 쓸 때는 꼭 numpy도 import 해놓는 습관을 들여놓자. 나중에 아주 많이 쓰게 될 것이다.)
  • from sklearn.datasets import load_iris는 sklearn의 dataset이라는 모듈에서 load_iris라는 함수만 가져오겠다는 뜻이다. 특정 라이브러리에서 한, 두 개의 함수만 필요한 경우에 사용하는 방법이다.
>>> iris = load_iris()
>>> iris
{'data': array([[5.1, 3.5, 1.4, 0.2],
        [4.9, 3. , 1.4, 0.2],
        [4.7, 3.2, 1.3, 0.2],
        [4.6, 3.1, 1.5, 0.2],
        [5. , 3.6, 1.4, 0.2],
        [5.4, 3.9, 1.7, 0.4],
        
...

lustering system finds 3 classes in the data.\n   - Many, many more ...',
 'feature_names': ['sepal length (cm)',
  'sepal width (cm)',
  'petal length (cm)',
  'petal width (cm)'],
 'filename': 'C:\\Users\\gooop\\anaconda3\\lib\\site-packages\\sklearn\\datasets\\data\\iris.csv'}
  • 해당 블로그에서 >>> 는 코드 실행을 의미하며, 앞에 >>>가 없는 것은 출력된 결과를 의미한다. 한 셀 안에 >>>가 없는 경우, 출력된 결과가 없기 때문에 >>>를 쓰지 않은 것이다.
  • load_iris()를 실행 시, dictionary가 출력된다. dictionary는 여러 종류의 데이터를 key:value로 담을 수 있는 사전이다.
  • dictionary를 key로 조회 시, 원하는 value만 볼 수 있다.
# iris data에 있는 key를 보자
>>> iris.keys()
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename'])
  • iris 데이터가 가지고 있는 key를 보면, data, target, frame 등 여러 key가 존재하는 것을 알 수 있다.
  • 여기서 "data"는 iris data를 의미한다.
  • "feature_names"는 변수의 이름이다.
>>> iris["data"]
array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2],
       
...

       [6.7, 3. , 5.2, 2.3],
       [6.3, 2.5, 5. , 1.9],
       [6.5, 3. , 5.2, 2. ],
       [6.2, 3.4, 5.4, 2.3],
       [5.9, 3. , 5.1, 1.8]])
  • 데이터가 매우 크므로 중간을 생략하였다. 위 데이터 같이 행과 열로 2개의 차원(dimension)이 존재하는 데이터를 2차원 배열 2-d array라고 한다.
>>> iris["feature_names"]
['sepal length (cm)',
 'sepal width (cm)',
 'petal length (cm)',
 'petal width (cm)']
  • 칼럼 이름은 list로 출력되었다.
  • 위 두 데이터를 사용해서 데이터 프레임을 생성해보자.
>>> iris_DF = pd.DataFrame(data=iris["data"], columns=iris["feature_names"])

  • DataFrame은 주피터 노트북 기준 한 번에 60개의 행이 조회되며, 아래에 있는 150 rows x 4 columns는 150개의 행과 4개의 열을 가진 데이터라는 것을 의미한다.
>>> iris_DF.values
array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2],
       
...

       [6.7, 3. , 5.2, 2.3],
       [6.3, 2.5, 5. , 1.9],
       [6.5, 3. , 5.2, 2. ],
       [6.2, 3.4, 5.4, 2.3],
       [5.9, 3. , 5.1, 1.8]])
  • DataFrame.values 함수를 사용하면, DataFrame을 2-d array로 돌릴 수 있다. 꽤 중요한 기능이니 꼭 숙지하도록 하자.

 

 

 

 

4. list를 사용해서 데이터 프레임 만들기

  • 이번엔 list를 이용해서 데이터 프레임을 만들어보자.
  • list는 Python에서 대표적인 Data를 담는 그릇이다.
>>> name_list = ["박명수", "유재석", "노홍철", "길", "정준하", "정형돈", "하하"]
>>> math_list = [65, 95, 70, 80, 100, 85, 60]
>>> english_list = [75, 80, 85, 90, 65, 75, 100]
>>> exam = pd.DataFrame({"name":name_list, "math":math_list, "english":english_list})
>>> exam

  • 데이터 프레임은 위 결과처럼 각 변수(열) 별로 다른 dtype이 들어갈 수 있다.

 

 

 

 

5. Dictionary를 사용해서 데이터 프레임 만들기

  • Dictionary는 모든 형태의 데이터를 Key:value의 형태로 담을 수 있는 데이터 타입이다.
  • Dictionary의 형태는 조금만 편집해서 바로 Json으로 사용할 수 있을 정도로 Json과 굉장히 유사하다.
  • Dictionary의 value들이 모두 list 또는 array이고, 그 길이가 동일하다면, DataFrame으로 만들 수 있다.
    (길이가 다르다면, 오류가 뜬다)
>>> Raw_dict = {
>>>     "name":["박명수", "유재석", "노홍철", "길", "정준하", "정형돈", "하하"],
>>>             "math":[65, 95, 70, 80, 100, 85, 60],
>>>             "english":[75, 80, 85, 90, 65, 75, 100],
>>>             "class":[1, 2, 1, 2, 2, 2, 1]
>>> }

>>> Raw_dict

{'name': ['박명수', '유재석', '노홍철', '길', '정준하', '정형돈', '하하'],
 'math': [65, 95, 70, 80, 100, 85, 60],
 'english': [75, 80, 85, 90, 65, 75, 100],
 'class': [1, 2, 1, 2, 2, 2, 1]}
DF = pd.DataFrame(Raw_dict)
DF

  • Dictionary는 key와 value로 이루어져 있으므로, 별도의 컬럼 이름을 지정해주지 않아도 DataFrame으로 쉽게 전환이 가능하다.
  • 반대로 DataFrame을 Dictionary로 변환하는 것 역시 굉장히 간단하다.
>>> DF.to_dict()
{'name': {0: '박명수', 1: '유재석', 2: '노홍철', 3: '길', 4: '정준하', 5: '정형돈', 6: '하하'},
 'math': {0: 65, 1: 95, 2: 70, 3: 80, 4: 100, 5: 85, 6: 60},
 'english': {0: 75, 1: 80, 2: 85, 3: 90, 4: 65, 5: 75, 6: 100},
 'class': {0: 1, 1: 2, 2: 1, 3: 2, 4: 2, 5: 2, 6: 1}}
  • DataFrame.to_dict(): 해당 함수를 사용하면 DataFrame을 dictionary로 바로 전환할 수 있다.

 

 

 

 지금까지 DataFrame을 만드는 방법에 대해 알아보았다. 다음 포스트에서는 데이터 프레임의 부위별 이름에 대해 알아보도록 하겠다.

728x90
반응형
728x90
반응형

데이터 프레임(Data Frame)

지난 포스트에선 데이터프레임의 생성과 데이터프레임의 정보를 파악하는 법에 대하여 공부해보았다.

이번 포스트에선 데이터프레임에서 새로운 컬럼을 생성하는 방법과 데이터 프레임에 접근하는 법에 대해 공부해보도록 하자.

 

 

 

데이터 프레임 접근

  • 데이터 프레임은 색인과 행과 열의 이름을 통해서 접근할 수 있다.
  • df$colname
    : "데이터프레임$컬럼이름"을 이용하면 데이터프레임에서 원하는 데이터에 접근할 수 있다.
  • df[r, c, drop = TRUE]
    : 데이터프레임 df의 r행, c열의 컬럼에 저장된 데이터를 가지고 올 수 있다.
    r과 c를 벡터로 지정하여 다수의 행과 컬럼을 동시에 가져올 수 있으며, 색인과 행 이름, 열 이름을 지정할 수도 있다. r과 c중 하나만 입력하는 경우, 예를 들어 c 하나만 넣은 경우엔 해당 열에 대한 모든 행 데이터를 가지고 온다.
    • r과 c중 하나만 불러오는 경우, 해당하는 행과 열 데이터만 해당 컬럼의 데이터 타입으로 가지고 오는데, 이러한 형 변환을 원하지 않는 경우엔 drop = FALSE로 지정하면 된다.
  • 인덱싱 방법은 다음과 같다.
    • df$col1
      : 데이터 프레임 df에서 col1 컬럼을 가지고 온다.
    • df[1,]
      : 데이터 프레임 df에서 1번째 행을 가지고 온다.
    • df[c(1,3), 2]
      : 데이터 프레임 df에서 1, 3번째 행을 가지고 오고, 2번째 컬럼을 가지고 온다.
    • df[ , c(2:5)]
      : 데이터 프레임 df에서 2~5번까지 컬럼을 가지고 온다.
    • df[ , -c(2:5)] == df[ , c(-2:-5)]
      : 데이터 프레임 df에서 2~5번 컬럼을 제외하고 가지고 온다.
    • df[ , c("math", "science")]
      : 데이터 프레임 df에서 math와 science 컬럼만 가지고 온다.
  • 위 인덱싱 방법말고도 다른 함수들을 조합해서 가지고 올 수는 있으나, 위 방법만으로도 충분하다.
  • 위 인덱싱 방법들을 응용하여, 내가 가지고 오고 싶은 데이터만 가지고 와보자.
# 데이터 프레임에서 내가 원하는 값만 가지고 와보자.
vt1 = c("민철", "재성", "기훈", "현승", "현택", "윤기" ,"재빈", "현희", "미선", "선화")
vt2 = c(70, 60, 50, 80, 90, 80, 65, 75, 90, 80)
vt3 = c(80, 70, 85, 65, 55, 70, 75, 80, 65, 75)
vt4 = c(75, 80, 90, 75, 85, 75, 80, 85, 80, 85)

exam = data.frame("name" = vt1, "math" = vt2, "english" = vt3, "science" = vt4)
# exam에서 math컬럼만 가지고 오자.
exam$math
##  [1] 70 60 50 80 90 80 65 75 90 80
  • indexing을 하는 경우, 데이터 타입이 바뀔 수 있으므로 주의해야한다.
# exam에서 1번째 행만 가지고 오자.
exam[1,]
##   name math english science
## 1 민철   70      80      75
# exam에서 1, 3행과 2번 컬럼만 가지고 오자.
exam[c(1,3),  2]
## [1] 70 50
# exam에서 2, 3, 4 행과 name, math 컬럼만 가지고 오자.
exam[c(2, 3, 4), c("name", "math")]
##   name math
## 2 재성   60
## 3 기훈   50
## 4 현승   80
# exam에서 3번째 컬럼만 제외하고 가지고 오자.
exam[, -c(3)]
##    name math science
## 1  민철   70      75
## 2  재성   60      80
## 3  기훈   50      90
## 4  현승   80      75
## 5  현택   90      85
## 6  윤기   80      75
## 7  재빈   65      80
## 8  현희   75      85
## 9  미선   90      80
## 10 선화   80      85

 

 

 

 

새로운 컬럼 추가

  • 데이터 프레임에 새로운 컬럼(변수)를 추가하는 방법은 R 자체의 Base 함수를 쓰거나, dplyr과 같은 데이터 핸들링 패키지를 쓰는 방법 등이 있다.
  • 이번 포스트에선 R의 Base 함수를 이용해서 새로운 컬럼을 추가해보자.
  • 데이터 프레임은 indexing 방법이었던, "$변수이름"에 새로운 벡터를 추가하여 컬럼을 추가할 수 있다.
# 컬럼을 추가해보자.
vt1 = c("민철", "재성", "기훈", "현승", "현택", "윤기" ,"재빈", "현희", "미선", "선화")
vt2 = c(70, 60, 50, 80, 90, 80, 65, 75, 90, 80)
vt3 = c(80, 70, 85, 65, 55, 70, 75, 80, 65, 75)
vt4 = c(75, 80, 90, 75, 85, 75, 80, 85, 80, 85)

exam = data.frame("name" = vt1, "math" = vt2, "english" = vt3, "science" = vt4)
# Korean 이라는 과목을 추가해보자
exam$Korean <- c(70, 85, 90, 80, 65, 75, 80, 75, 85, 70)
head(exam)
##   name math english science Korean
## 1 민철   70      80      75     70
## 2 재성   60      70      80     85
## 3 기훈   50      85      90     90
## 4 현승   80      65      75     80
## 5 현택   90      55      85     65
## 6 윤기   80      70      75     75
# 총점을 추가해보자.
exam$total <- exam$math + exam$english + exam$science + exam$Korean
head(exam)
##   name math english science Korean total
## 1 민철   70      80      75     70   295
## 2 재성   60      70      80     85   295
## 3 기훈   50      85      90     90   315
## 4 현승   80      65      75     80   300
## 5 현택   90      55      85     65   295
## 6 윤기   80      70      75     75   300
# 평균점수를 구해보자.
exam$mean <- exam$total/4
head(exam)
##   name math english science Korean total mean
## 1 민철   70      80      75     70   295 73.75
## 2 재성   60      70      80     85   295 73.75
## 3 기훈   50      85      90     90   315 78.75
## 4 현승   80      65      75     80   300 75.00
## 5 현택   90      55      85     65   295 73.75
## 6 윤기   80      70      75     75   300 75.00

 

 

 

지금까지 데이터프레임에 대한 아주 기초적인 학습을 해보았다.

데이터프레임은 지금까지 다룬 내용으로만 끝내기엔, 활용처가 매우 많기 때문에, 다음 포스트인 list형에 대해 학습을 마치고 데이터 핸들링으로 가장 유명한 패키지인 dplyr에 대해 공부를 하면서, 보다 심도 깊게 다뤄보도록 하겠다.

728x90
반응형

'R > Basic' 카테고리의 다른 글

R(기초) 데이터 타입 판별과 타입 변환  (0) 2020.06.22
R(기초) 리스트(List)  (0) 2020.06.22
R(기초) 데이터프레임(Data Frame)(1부)  (0) 2020.06.21
R(기초) 배열(Array)  (0) 2020.06.19
R(기초) 행렬(Matrix)(3부)  (0) 2020.06.19
728x90
반응형

데이터 프레임(Data Frame)

이번 포스트에선 R 데이터 타입의 꽃인 데이터프레임에 대해 학습해보겠다. 데이터프레임은 R에서 가장 중요한 자료형으로, 우리에게 익숙한 액셀의 스프레드시트와 같이 표 형태로 정리한 모습을 가지고 있다.

데이터프레임은 R에서 가장 많이 쓰이는 데이터 타입이며, 대용량의 데이터를 다루기엔 비효율적이라서 빅데이터 분석 시엔 fread를 비롯한 다른 데이터 타입을 사용하지만, 이 역시 기본적으로 데이터 프레임과 비슷한 형태를 가지고 있으며, 다루는 방법 역시 데이터 프레임과 비슷하다.

 

Data Frame의 기본적인 형태

  • 데이터 프레임은 행렬과 같은 모습을 하고 있지만, 행렬과 다르게 다양한 변수, 관측치(Observations), 범주(Category) 등을 표한하기 위해 특화되어 있다.
  • 행렬은 하나의 데이터 타입밖에 사용하지 못하지만, 데이터 프레임은 여러 가지 데이터 타입을 혼용하여 사용할 수 있다.
  • 데이터 프레임의 각 열(Column)별 행(Row)의 길이는 모두 동일하다.
  • 데이터 프레임의 행(Row, Record)은 데이터의 대상이 되는 객체 하나하나 이다.
  • 데이터 프레임의 열(Columns, Variable)은 데이터 대상이 되는 객체의 속성을 나타내는 값이다.
    각각의 Columns은 행렬과 달리 다양한 변수 타입을 가질 수 있다.

 

 

데이터프레임을 만들어보자

  • 데이터 프레임은 벡터, 행렬로 만들 수 있다.
  • 행렬을 그대로 데이터 프레임에 넣거나, 길이가 동일한 벡터들을 컬럼 하나하나에 배정하여 생성하면 된다.
  • data.frame()
    : 데이터 프레임을 생성한다.
  • 주요 Parameter
    : data.frame(stringsAsFactors: 문자열을 자동으로 요인(Factor)형으로 변환해준다.)
    • data.frame에서 중요한 Parameter는 stringsAsFactors말고는 딱히 없다. data.frame에서 다른 Parameter들에 대한 내용을 읽어보고자 한다면, data.frame 코드를 치고 F1을 눌러서 보도록 하자.
    • stringsAsFactors는 간단하지만, 상당히 중요한 Parameter로, 말 그대로 문자열을 요인(Factor)으로 바꿔주는 Parameter이다. 만약 string형인 열을 이용해서 새로운 변수를 만들어내거나, 특정 문자열을 분리해내는 작업을 하지 않는다면, 해당 Parameter를 TRUE로 두어 모두 Factor형으로 바꾸는 것이 유리하다.
    • 그러나, 문자열에 대하여 어떠한 조작을 하는 경우엔, Factor형으론 조작이 매우 힘드므로, 가능하다면 해당 Parameter를 FALSE로 두는 것을 추천한다.

 

1) 벡터를 이용해서 데이터프레임을 만들어보자.

# 벡터로 데이터프레임을 만들어보자
vt1 = c("민철", "재성", "기훈", "현승", "현택")
vt2 = c(70, 60, 50, 80, 90)
vt3 = c(80, 70, 85, 65, 55)

df1 = data.frame(vt1, vt2, vt3)
df1
##    vt1 vt2 vt3
## 1 민철  70  80
## 2 재성  60  70
## 3 기훈  50  85
## 4 현승  80  65
## 5 현택  90  55
  • 데이터 프레임 안에 길이가 동일한 벡터를 넣어주면 된다.
  • 길이가 다른 벡터를 함께 넣는 경우 에러가 뜨며 데이터프레임이 생성되지 않는다.
  • 각 컬럼의 이름은 벡터의 이름으로 정해진다.

 

2) 행렬을 이용해서 데이터프레임을 만들어보자.

# 행렬로 데이터프레임을 만들어보자
vt = c("민철", "재성", "기훈", "현승", "현택", 70, 60, 50, 80, 90, 80, 70, 85, 65, 55)
mat = matrix(vt, ncol = 3, byrow = FALSE)

data.frame(mat)
##    X1  X2  X3
## 1 민철  70  80
## 2 재성  60  70
## 3 기훈  50  85
## 4 현승  80  65
## 5 현택  90  55
  • 데이터 프레임 안에 행렬을 넣어주면 된다.
  • 각 컬럼의 이름은 X1, X2, X3...와 같은 방식으로 생성된다.
  • 행렬은 하나의 변수 타입만 가질 수 있으므로, 행렬을 데이터 프레임으로 바꾸는 경우, 하나의 속성만 가진 형태로 데이터프레임이 만들어진다.
str(data.frame(mat))
'data.frame':	5 obs. of  3 variables:
 $ X1: chr  "민철" "재성" "기훈" "현승" ...
 $ X2: chr  "70" "60" "50" "80" ...
 $ X3: chr  "80" "70" "85" "65" ...
  • 그러니 되도록이면 행렬로 데이터프레임을 만들기보다는 벡터를 이용해서 만들도록 하자.
  • 만약 행렬로 만들어야한다면, 데이터프레임 생성 후, 각 컬럼의 변수 타입을 모두 바꿔주도록 하자.

 

 

 

데이터 프레임 변수의 이름을 바꿔보자.

  • 이번엔 데이터 프레임 컬럼의 이름을 바꿔보자.
  • 데이터 프레임 컬럼 이름 변경은 2가지 방법이 있다.

1) 데이터 프레임 생성 시, 벡터의 이름을 설정해준다.

# 벡터로 데이터프레임을 만들어보자
vt1 = c("민철", "재성", "기훈", "현승", "현택")
vt2 = c(70, 60, 50, 80, 90)
vt3 = c(80, 70, 85, 65, 55)

data.frame("name" = vt1, "math" = vt2, "english" = vt3)
##   name math english
## 1 민철   70      80
## 2 재성   60      70
## 3 기훈   50      85
## 4 현승   80      65
## 5 현택   90      55

 

2) 생성된 데이터 프레임의 이름을 바꿔준다.

  • colnames()
    : data의 column의 이름들을 가지고 온다.
# 변수명을 바꿔보자.
vt1 = c("민철", "재성", "기훈", "현승", "현택")
vt2 = c(70, 60, 50, 80, 90)
vt3 = c(80, 70, 85, 65, 55)

df = data.frame(vt1, vt2, vt3)
colnames(df)
## [1] "vt1" "vt2" "vt3"
  • colnames(df)를 하면, dataframe의  column 이름들을 가지고 온다.
colnames(df) <- c("name", "math", "english")
df
  • colnames(df)에 벡터로 새로운 컬럼의 이름을 부여해보자.
##   name math english
## 1 민철   70      80
## 2 재성   60      70
## 3 기훈   50      85
## 4 현승   80      65
## 5 현택   90      55

 

3) 행의 이름을 바꿔주자.

  • 데이터프레임은 행을 index로 활용할 수 있으며, 행에 변수를 넣을 수도 있다.
  • 단 행의 이름은 절대 중복되서는 안된다.
  • 그러므로, ID를 만들어서 넣거나, 기존의 행 번호를 그대로 사용하도록 하자.
  • rownames()
    : data의 행 이름들을 가지고 온다.
# 행의 이름을 바꿔보자
vt1 = c("민철", "재성", "기훈", "현승", "현택")
vt2 = c(70, 60, 50, 80, 90)
vt3 = c(80, 70, 85, 65, 55)

df = data.frame(vt1, vt2, vt3)
rownames(df)
## [1] "1" "2" "3" "4" "5"
# 데이터프레임의 vt1을 row의 이름으로 사용해보자
rownames(df) <- df[,1]

# 데이터프레임에서 첫번째 컬럼과 행의 이름이 동일하므로, 첫번째 컬럼은 제거해서 가지고 와보자.
df[,-1]
##      vt2 vt3
## 민철  70  80
## 재성  60  70
## 기훈  50  85
## 현승  80  65
## 현택  90  55
  • 이번에 사용한 코드들을 보면, 행렬에서 다뤘던 indexing과 동일한 것을 볼 수 있다.
  • 행렬도 데이터프레임처럼 행의 이름과 열의 이름을 동일한 방법으로 바꿀 수 있다.
  • 데이터프레임의 Indexing에 대해선 다음 포스트에서 더 자세히 다뤄보도록 하겠다.

 

 

 

데이터 프레임의 정보를 살펴보자.

  • 이번엔 데이터프레임의 기본적인 정보를 살펴보는 방법을 보자.
  • str()
    : 데이터프레임의 차원과 각 열에 대한 정보 출력
  • head()
    : 일반적인 데이터프레임은 매우 크므로, 모두 보는 것은 힘들다. head()를 사용하면, 맨 위에서 n개(기본값 6)의 행을 가지고 온다. 데이터프레임을 보고자 한다면, head()를 이용해서 보도록 하자.
  • tail()
    : head()와 반대로 데이터프레임의 맨 아래에서 n개(기본값 6)의 행을 가지고 온다. tail()을 이용하면, 데이터프레임의 맨 아래 부분에 어떠한 특이사항이 있는지를 눈으로 쉽게 확인할 수 있다.
  • summary()
    : 데이터프레임에 있는 변수별 기술통계량을 볼 수 있다.
    변수 타입이 연속형변수인 경우에는 최소값, 최대값, 사분위 수, 평균을 볼 수 있다.
    변수 타입이 문자형과 같은 범주형 변수인 경우에는 변수의 길이, Class, Mode 등을 볼 수 있다.
    (Mode는 R의 기본 배경이 된 언어인 S language와 호환성을 가진 언어로, 간단하게 말하면 과거 버전의 타입 분류 방법이라고 생각하면 된다. R을 사용할 땐, Class가 우선이라고 간략하게 생각하고, Class에만 신경 쓰도록 하자.)
  • dim()
    : 데이터프레임의 차원별 길이를 볼 수 있다.
    데이터 프레임은 행과 열 2개의 차원으로 구성되어 있으며, dim() 함수를 이용하면 행의 수, 열의 수를 볼 수 있다.
  • View()
    : 데이터프레임을 데이터 뷰어창에서 볼 수 있다.
    데이터프레임 뿐만 아니라 행렬, 벡터 등도 볼 수 있다.
# 데이터 프레임의 구조를 살펴보자.
vt1 = c("민철", "재성", "기훈", "현승", "현택", "윤기" ,"재빈", "현희", "미선", "선화")
vt2 = c(70, 60, 50, 80, 90, 80, 65, 75, 90, 80)
vt3 = c(80, 70, 85, 65, 55, 70, 75, 80, 65, 75)

df = data.frame("name" = vt1, "math" = vt2, "english" = vt3)
df
##    name math english
## 1  민철   70      80
## 2  재성   60      70
## 3  기훈   50      85
## 4  현승   80      65
## 5  현택   90      55
## 6  윤기   80      70
## 7  재빈   65      75
## 8  현희   75      80
## 9  미선   90      65
## 10 선화   80      75
# 데이터 프레임의 차원과 각 열에 대한 정보를 알아보자.
str(df)
## 'data.frame':    10 obs. of  3 variables:
##  $ name   : chr  "민철" "재성" "기훈" "현승" ...
##  $ math   : num  70 60 50 80 90 80 65 75 90 80
##  $ english: num  80 70 85 65 55 70 75 80 65 75
# 데이터 프레임의 위부터 n행까지 추출한다(기본값은 6).
head(df, n = 5)
##   name math english
## 1 민철   70      80
## 2 재성   60      70
## 3 기훈   50      85
## 4 현승   80      65
## 5 현택   90      55
# 데이터 프레임의 아래부터 n행까지 추출한다(기본값은 6).
tail(df, n = 5)
##    name math english
## 6  윤기   80      70
## 7  재빈   65      75
## 8  현희   75      80
## 9  미선   90      65
## 10 선화   80      75
# 변수별 요약통계량 출력
summary(df)
##      name                math          english     
##  Length:10          Min.   :50.00   Min.   :55.00  
##  Class :character   1st Qu.:66.25   1st Qu.:66.25  
##  Mode  :character   Median :77.50   Median :72.50  
##                     Mean   :74.00   Mean   :72.00  
##                     3rd Qu.:80.00   3rd Qu.:78.75  
##                     Max.   :90.00   Max.   :85.00
# 데이터 프레임의 차원별 길이 출력
dim(df)
## [1] 10  3
# 데이터 뷰어로 데이터 프레임을 보자.
View(df)

  • View() 함수를 이용하는 경우, 데이터 프레임을 데이터 뷰어라는 새로운 창에서 크게 볼 수 있다.
  • R에서 매우 큰 데이터 프레임을 head()나 tail()가 아닌 그 자체로 불러오는 경우, R이 뻗어버릴 수 도 있지만(너무 큰 데이터를 표현하면, 부하가 매우 크므로, 가능한 dataframe 이름만 쳐서 가지고 오는 행동은 하지 말자) View를 사용해서 데이터 뷰어에서 보면 R이 뻗지는 않는다.
    (물론, 데이터의 크기가 너무 크므로, 보는 것이 굉장히 불편하긴 하다.)

 

 

지금까지 데이터프레임을 만들고 데이터프레임의 기본적인 정보를 보는 법에 대해 학습해보았다.

다음 포스트에선 데이터프레임에 새로운 변수를 추가해보거나, Indexing 하는 방법 등을 공부해보자.

728x90
반응형

'R > Basic' 카테고리의 다른 글

R(기초) 리스트(List)  (0) 2020.06.22
R(기초) 데이터프레임(DataFrame)(2부)  (0) 2020.06.22
R(기초) 배열(Array)  (0) 2020.06.19
R(기초) 행렬(Matrix)(3부)  (0) 2020.06.19
R(기초) 행렬(Matrix)(2부)  (0) 2020.06.19

+ Recent posts