이번에는 Matplotlib 데이터 시각화 그래프에 대해 배워보겠다.
Matplotlib의 각 요소를 변경하면서 어떻게 그림이 달라지는지 살펴보겠다.
먼저 선으로 된 plot인 Line plot을 그려보겠다.
fig, ax = plt.subplots() 으로 정의를 해주고 subplots()에서 괄호가 공란이면 1개의 figure만 만들어준다.
그리고 x = np.arange(15)로 0부터 14까지 정의역을 정의할 수 있다.
y = x ** 2에서 x**2는 x^2 이므로 들어온 x값에 대한 제곱이 y값이 된다.
다음으로 ax.plot()에 많은 요소들을 넣어준다.
우선 x와 y를 넣어주고, line의 스타일을 정의할 수 있다. “:”은 그래프를 점으로 표시하는 것을 의미한다. 보면 선들이 점으로 연결된다.
marker=“*”을 통해 x값들에 별이 그려진 것을 확인할 수 있다.
그리고 color을 통해 line의 색깔을 지정할 수 있다.
그러면 Line style의 종류를 좀 더 자세히 알아보겠다.
위와 같이 하나의 plot안에 여러 개의 선을 그릴 수 있다.
ax.plot()으로 선을 그린다고 했다.
첫 번째는 정의역 x의 자리, 두 번째는 치역 y의 자리이다.
그래서 위에서부터 아래로 각각 파란색, 노란색, 초록색, 빨간색 선에 해당하는 코드이다.
(참고로 여기서 쓰인 선들의 색들은 선들을 구분하기 위해 쓰인 디폴트 색들이다.)
“-” -> 실선
“--” -> 파선
“-.” -> 1점 쇄선 (대시 점 선)
“:” -> 점선
그리고 위와 같이 색깔도 바꿀 수 있다.
다음으로 marker이다.
“.” -> 온점
“o” -> 동그라미
“v” -> 세모
“s” -> 네모
“*” -> 별
이제는 축의 경계를 조정해보겠다.
이때는 linspace()함수를 사용한다.
괄호안의 인자들의 순서는 start, end, step이다.
위의 예제에서 사인함수를 그려보기 위해 ax.plot(x, np.sin(x))로 사인함수를 그린다.
그리고 그 아래의 코드 두 개가 축의 경계를 조정하는 코드이다.
ax.set_xlim(-2, 12)는 x축의 limit 즉, 한계를 정하는 것으로 –2부터 12까지이다.
ax.set_ylim(-1.5, 1.5)는 y축의 limit 즉, 한계를 정하는 것으로 –1.5부터 1.5까지이다.
다음으로 범례를 추가해보겠다.
범례는 선들이 각각 무슨 선인지 표시해주는 역할을 한다.
먼저 ax.plot()에서 label=‘ ’으로 각각 무슨 선인지 적는다.
그리고 ax.set_xlabel 로 x축의 이름을 설정할 수 있고, ax.set_ylabel로 y축의 이름을 설정할 수 있다.
마지막으로 ax.legend()를 통해 범례를 띄운다.
loc=‘upper right’ 로 오른쪽 위에 띄우고, shadow로 그림자를 그리고 fancybox로 범례 박스의 모서리를 둥글게 만든다. borderpad는 범례 박스를 패드라고 하는데 이 패드의 크기를 의미한다.
다음으로 Bar와 Histogram에 대해 배워보겠다.
Bar plot은 말 그대로 Bar의 형태로 나타나는 것이다.
앞에서 했던 것과 동일하게 x = np.arange(10)으로 정의역을 0부터 9까지 만든다.
그리고 fig, ax = plt.subplots(figsize=(12, 4))에서 앞에서 subplots()을 공란으로 둔 것과 달리 figsize=(12, 4)를 넣었다. 이것으로 figure의 사이즈를 가로 12, 세로 4로 만든다.
그리고 아까와 다르게 ax.bar()함수를 이용해 Bar plot을 만든다.
이 bar plot을 아래와 같이 조금 더 세분화해서 그리면서 누적해서 그릴 수도 있다.
코드를 살펴보겠다.
np.random.rand(3)을 통해 0부터 1 사이의 값을 랜덤으로 3개 뽑는다.
이때의 데이터는 [x, y, z]로 한번에 묶어서 data로 저장하겠다.
for문이 돌면서 x에 대한 그래프가 만들어지고 y에 대한 그래프가 만들어지고 z에 대한 그래프가 만들어진다.
여기까지 그래프를 만들었고, 이제 x축에 대해 설정을 해보면 오른쪽에 ax.set_xticks(x_ax)로 x의 ticks를 설정한다.
그리고 ax.set_xticklabels를 통해 tick에 라벨을 붙여준다.
만약 이 코드가 없으면 그냥 0, 1, 2 로 라벨이 붙는다.
보기 좋도록 ax.set_xticklabels([“A”, “B”, “C”])를 해주면 A, B, C로 라벨이 붙는다.
이렇게 누적된 Bar의 plot을 그릴 때는 어디서부터 시작하는지 bottom을 지정해서 위로 쌓아올린다는 점을 알아두면 된다.
마지막으로 Histogram을 알아보겠다.
Histogram은 도수분포표라고 해서 도수들이 분포하고 있는 표를 의미한다.
데이터는 np.random.randn(1000)으로 1000개의 데이터를 랜덤하게 뽑아서 사용한다.
그리고 ax.hist()함수를 이용해 그리는데, 첫 번째 인자에는 데이터를 넣고, bins=50은 막대를 의미한다.
즉, 1000개의 랜덤한 데이터를 뽑았는데 이것을 몇 개로 나타낼 것인가에 대한 의미이다.
bins=50은 50개의 막대로 나타낸다는 의미이다.
Tip)
1.
아래 코드는, 하나의 도화지(figure)에 1*2의 모양으로 그래프를 그리도록 한다. 즉, 그래프를 2개 그리고, 가로로 배치한다는 의미이다.
axes[0]은 막대 그래프를, axes[1]은 히스토그램을 그린다.
2.
matplotlib 의 pyplot으로 그래프를 그릴 때, 기본 폰트는 한글을 지원하지 않는다. 아래는 한글을 지원하는 나눔바른고딕 폰트로 바꾼 코드이다.
import matplotlib.font_manager as fm
fname='./NanumBarunGothic.ttf'
font = fm.FontProperties(fname = fname).get_name()
plt.rcParams["font.family"] = font
이번에는 저번에 배운 Pandas를 이용해서 Pandas의 DataFrame이나 Series 데이터를 넣어서 Plot 그래프를 그리는 방법을 배워보겠다.
먼저 Line Plot을 그려보겠다.
코드를 보면 pd.read_csv()로 파일을 불러오는데 어떤 파일이냐면 미국 대통령들의 키가 들어있는 데이터이다.
이 DataFrame은 아래와 같이 구성되어있다.
임기의 순서가 order로 표시되어 있고 대통령의 이름(name), 키(height)가 들어있다.
ax.plot()에서 x값, y값 그리고 label과 같은 다른 조건들을 넣어준다.
여기서는 x자리에 임기 순서를 넣었고 키를 y값으로 넣었다.
여기서 보면 범례(legend)가 없는데 legend에 대한 코드가 없어서 그렇다.
그리고 set_xlabel, set_ylabel로 각각 x축, y축에 라벨을 설정한다.
이번에는 예제로 포켓몬스터 데이터를 가지고 scatter plot(산점도 그래프)를 그려보겠다.
위와 같이 DataFrame이 있다고 할 때 다음과 같은 코드를 이용해 불 타입과 물 타입 포켓몬들의 공격력과 방어력을 산점도로 표현할 수 있다.
먼저 두 번째 코드와 세 번째 코드를 이용해 Type 1 컬럼과 Type 2 컬럼 중 하나라도 각각 불과 물 속성에 해당하는 포켓몬이 있으면 그 포켓몬들을 가져온다.
그리고 ax.scatter()를 통해 산점도를 각각 그린다.
이렇게 그리면 아래와 같이 그래프가 나온다.
다시 볼만한 예제)
Pandas를 이용해 csv 파일을 불러와 시각화를 진행.
포켓몬에 대한 데이터가 담긴 csv 파일을 불러와서 공격 타입에 따라 다른 색상을 띠는 산점도 그래프를 그리고 라벨을 붙이기.
공격 능력치와 수비 능력치가 x와 y축으로 주어지고, 물 타입 포켓몬은 파란색, 불 타입 포켓몬은 빨간색으로 표현.
코드↓
결과↓
'인공지능 공부' 카테고리의 다른 글
[2021 NIPA AI 교육 - 응용 / 머신러닝] 01 자료 형태의 이해 (2) | 2021.08.19 |
---|---|
[2021 NIPA AI 교육 - 응용 / 머신러닝] 00 인공지능/머신러닝 개론 (2) | 2021.08.19 |
[2021 NIPA AI 교육 - 기본] 04 데이터 조작 및 분석을 위한 Pandas 심화 (0) | 2021.08.09 |
[2021 NIPA AI 교육 - 기본] 03 데이터 조작 및 분석을 위한 Pandas 기본 (1) | 2021.08.06 |
[2021 NIPA AI 교육 - 기본] 02 데이터 핸들링을 위한 라이브러리 NumPy (0) | 2021.08.05 |