5.0.3 토이 데이터와 데이터프레임 활용

패키지 pydataset의 모든 내장 데이터

설치된 pydataset의 전체적인 정보를 얻기 위해 데이터셋 목록을 표시해 보자. 패키지 pydataset에서 데이터를 불러와 data()를 실행하면 데이터셋 식별자(dataset_id)와 제목(title)이 포함된 데이터프레임을 반환 받을 수 있다. 다음으로 패키지 pydataset에는 757개의 샘플 데이터가 있다는 것을 알 수 있다. 열 dataset_id는 데이터 셋의 식별자(ID)이며 열 title은 데이터 셋 이름이다.

from pydataset import data # pydataset 모듈에서 data 함수를 메모리에 올려 사용할 수 있도록 한다.

all_data = data()
all_data

출력 (예시):

    dataset_id                                              title
0   AirPassengers       Monthly Airline Passenger Numbers 1949-1960
1         BJsales                 Sales Data with Leading Indicator
2             BOD                         Biochemical Oxygen Demand
...
756    sleepstudy       Reaction times in a sleep deprivation study

[757 rows x 2 columns]

패키지 pydataset 내의 데이터 cars

간단한 데이터 셋인 cars의 내용을 알아보자. 자동차의 속도 speed와 정차 길이 dist가 있는 테이블 형태의 데이터인 것을 알 수 있다. 첫 열은 각 행의 번호이며 첫 줄의 speeddist는 각 열 이름이다.

cars = data('cars')
cars

출력 (예시):

    speed  dist
1       4     2
2       4    10
3       7     4
4       7    22 # 시속 7인 차가 정차하는데 22미터가 측정된 하나의 관측 값을 말한다
...
49     24   120
50     25    85

데이터 시각화 matplotlib을 사용해 산점도(scatter plot)를 그려보자. 다음 plt.scatter(x = cars.speed, y = cars.dist)로 데이터 cars에서 50개 데이터 좌표를 작은 원으로 그린 그림을 볼 수 있다.

import matplotlib.pyplot as plt

plt.scatter(x = cars.speed, y = cars.dist)
plt.show() # 일반 프로그램 실행에서는 반드시 필요한 구문이나, 주피터 노트북 실행에서는 생략이 가능하다.

출력: cars 산점도 matplotlib

다음은 패키지 seaborn의 함수 scatterplot으로 산점도를 그린 결과이다.

import matplotlib.pyplot as plt
import seaborn as sns

sns.scatterplot(x = cars.speed, y = cars.dist)
plt.show()

출력: cars 산점도 seaborn

[!TIP] 주피터 노트북에서 그림을 선명하게 그리기와 한글 설정

주피터 노트북 또는 VS Code의 반응형 윈도(Interactive Window)에서 matplotlib이나 seaborn의 그림을 선명하게 그리려면 다음을 설정한 이후에 그리도록 한다.

%config InlineBackend.figure_format = 'retina'

다음은 matplotlib에서 한글을 처리하기 위한 실행 시간 환경 설정(runtime configuration)을 의미한다. 인터프리터에서 실행 시간에 한 번만 실행되면 이후에 한글 지원이 가능하다.

import matplotlib.pyplot as plt

plt.rc('font', family='Malgun Gothic')
plt.rc('axes', unicode_minus=False)

위 문장은 다음 plt.rcParams[...] 설정 문장으로도 가능하다.

plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False

판다스의 데이터프레임

판다스가 지원하는 테이블 형태의 행과 열로 구성된 자료구조는 데이터프레임(DataFrame)이다. 다음 코드로 데이터 mpg(miles per gallon)의 데이터프레임 객체를 변수 mpg에 저장한 후, mpg의 메소드 head()mpg의 첫 5개의 행을 볼 수 있다.

mpg = data('mpg')
mpg.head()

출력 (예시):

  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
...

또한, 메소드 mpg.info()mpg가 234개 자동차 모델의 제조사(열 manufacturer)와 모델 이름(열 model), 도심 연비(열 cty)와 고속도로 연비(열 hwy) 등의 11개의 열로 구성된 데이터프레임인 것을 알 수 있다.

mpg.info()

출력 (예시):

<class 'pandas.core.frame.DataFrame'>
Int64Index: 234 entries, 1 to 234
Data columns (total 11 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   manufacturer  234 non-null    object 
 1   model         234 non-null    object 
 2   displ         234 non-null    float64
...
 8   hwy           234 non-null    int64  
...
dtypes: float64(1), int64(4), object(6)
memory usage: 21.9 KB

데이터프레임 mpg의 열 ctympg.cty로 참조한다. 다음 코드 sns.scatterplot(x = mpg.displ, y = mpg.cty, hue = mpg.drv)로 가로 x 축인 자동차 배기량(displ: displacement)에 따른 세로 y 축 도심 연비(cty: city)를 나타내는 산점도를 그릴 수 있다. 또한 인자 hue=mpg.drv를 지정해 각각의 데이터를 구동방식(drv)에 따라 구분한다. 자동차 구동방식 drv는 f(front-wheel drive, 전륜), r(rear wheel drive, 후륜), 4(4wd, 4륜) 등 3 종류가 있다.

import matplotlib.pyplot as plt
import seaborn as sns

sns.scatterplot(x = mpg.displ, y = mpg.cty, hue = mpg.drv)
plt.show()

출력: mpg 산점도

  • 구동장치가 앞에 있는 자동차가 도심 연비가 높다는 경향을 알 수 있다.
  • 자동차 배기량(displ)이 커질수록 도심 연비가 떨어지는 경향을 알 수 있다.
서브목차