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가 있는 테이블 형태의 데이터인 것을 알 수 있다. 첫 열은 각 행의 번호이며 첫 줄의 speed와 dist는 각 열 이름이다.
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() # 일반 프로그램 실행에서는 반드시 필요한 구문이나, 주피터 노트북 실행에서는 생략이 가능하다.
출력:

다음은 패키지 seaborn의 함수 scatterplot으로 산점도를 그린 결과이다.
import matplotlib.pyplot as plt
import seaborn as sns
sns.scatterplot(x = cars.speed, y = cars.dist)
plt.show()
출력:

[!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의 열 cty는 mpg.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()
출력:

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