PYTHON LIBRARY/Matplotlib Library

Python 데이터 시각화 : Matplotlib와 Seaborn 으로 Plot, Bar 차트 그리기

신강희 2024. 4. 15. 00:52
728x90

# Pandas를 통해서 가공한 데이터를 가지고 차트로 데이터 시각화를 할수있다

 

Tidy Data : 데이터 분석과 시각화에 적합한 형식으로 데이터를 정리한 것

  • each variable(변수) is a column (컬럼은 형식)
  • each observation(하나의 행 => 행은 데이터) is a row
  • each type of observational unit is a table

 

< Matplotlib >

# 파이썬에서 2D 그래픽을 생성하는 데 사용되는 라이브러리

# 다양한 유형의 그래프와 플롯을 만들 수 있으며, 데이터 분석 및 시각화 작업에서 널리 사용된다

# ref : 참고 레퍼런스

https://matplotlib.org/gallery.html#scales

https://seaborn.pydata.org/

 

# 가장 많이 사용하는 차트 라이브러리 두가지 => 메트플롯 립, 시본 상단 링크는 해당 차트 설명서

 

< 가장기본적인 Plot >

# 임포트

import matplotlib.pyplot as plt

import numpy as np

 

# 간단한 예제를 그려보자 (0,0) (1,1) (2,2) (3,3) (4,4)

# x와 y값이 동일하게 비례하는 데이터의 차트를 그려보자.

 

x = np.arange(0, 9+1)

x

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

 

y = x

y

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

 

plt.plot(x, y)

 

# 차트를 이미지 파일로 다운받는법 .savefig('파일명.확장자')
plt.savefig('test1.jpg')

 

# plt.show() 명령어를 적어서 작성한 그래프가 출력되도록 해주어야함.

plt.show()

 

< Bar Charts >

# 이제 실제 데이터를 가지고 차트를 그려보자.

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb

 

# 새로운 데이터를 가지고와 df 변수로 메모리에 업로드

pd.read_csv('../data/pokemon.csv')
df = pd.read_csv('../data/pokemon.csv')
df

 

# 항상 새로운 데이터를 불러오면 기본적인 분석을 시행

df.describe()

 

df.shape

(807, 14)

 

# 제너레이션 id 값을 확인해보자. => 중복값이 있으므로 카테고리컬 데이터구나 확인

df['generation_id']

0      1
1      1
2      1
3      1
4      1
      ..
802    7
803    7
804    7
805    7
806    7
Name: generation_id, Length: 807, dtype: int64

 

df['generation_id'].nunique()

7

 

df['generation_id'].unique()

array([1, 2, 3, 4, 5, 6, 7], dtype=int64)

 

# 제너레이션 id 별로 캐릭터는 몇개씩 있나?

df['generation_id'].value_counts()

generation_id
5    156
1    151
3    135
4    107
2    100
7     86
6     72
Name: count, dtype: int64

 

< 위의 결과를 차트로 그리는 방법 >

# 특정 컬럼이 카테고리컬 데이터일때,
# 각 value 별로 몇개씩 있는지를 차트로 한번에 나타내고 싶을때
# seaborn 의 countplot 함수 사용.

 

# seaborn.countplot(data = 사용할 데이터 변수, x= 컬럼)

# df 데어터의 generation_id 컬럼을 차트로 그려줘

 

sb.countplot(data= df, x= 'generation_id')
plt.show()

 

# 색 바꾸기
sb.color_palette()

 

# 우리눈에는 색별로 보이지만 컴퓨터 입장에선 list형식의 숫자데이터임

# 그러므로 원하는 색깔의 인덱스 숫자를 함수뒤에 [ ] 호출해주면됨

# 그린 차트에 붙여넣어야 하므로 변수로 지정하여 원하는 색을 불러옴

 

base_color = sb.color_palette()[1]

 

# 파라미터 x 축 뒤에 , color= 로 색 지정
sb.countplot(data=df, x= 'generation_id' , color=base_color)
plt.show()

 

# 차트가 들쑥날쑥하여 정렬 시키고 싶을땐

# 정렬할때는 판다스 시리즈의 인덱스 순서를 그대로 가져와서 사용하면 되기 때문에 value_counts().index를 사용

 

df['generation_id'].value_counts().index

Index([5, 1, 3, 4, 2, 7, 6], dtype='int64', name='generation_id')

 

# 해당 순서들의 인덱스 값을 변수로 저장
base_order = df['generation_id'].value_counts().index

 

# 아까 생성한 바차트 코드의 파라미터안 컬러 뒤에 순서 order 로 정렬
sb.countplot(data=df, x= 'generation_id' , color=base_color , order=base_order)
plt.show()

 

# 차트 정렬을 반대로 하고 싶으면 슬라이싱에서 사용했었던 : : -1 사용( 자주 쓰니 기억할것!!)
reverse_order = base_order[ : : -1]

 

sb.countplot(data=df, x= 'generation_id' , color=base_color , order=reverse_order)
plt.show()

 

< type_1을 바차트로 작성해보자 >

# (1) 항목이 많아서 x 축 문구가 겹치는 문제 발생 이럴땐 .xticks() 사용
sb.countplot(data= df, x= 'type_1' , color=base_color, order=base_order)

 

# x 축 문구가 길어 겹치면 문구에 기울기를 줄수 있음

# 문구를 60도 기울여서 출력시켜줘

plt.xticks(rotation=60)

 

plt.show()

 

# (2) x축 문구가 넘치니 해결하는 방법 두번째 => x 축을 y 축으로 사용

sb.countplot(data= df, y= 'type_1' , color=base_color, order=base_order)
plt.show()

 

# type1 종류가 많은데 몇개지?
df['type_1'].nunique()

18

 

# 범위 지정 : 데이터가 많은, 상위 10개만 차트로 보여주세요. => order 변수에 범위 지정

sb.countplot(data= df, y= 'type_1' , color=base_color, order=base_order[0:9+1])
plt.show()

 

다음장에서 계속

반응형