개발은 처음이라 개발새발

df.plot() 데이터프레임 그래프 그리기 - 1 본문

파이썬/판다스

df.plot() 데이터프레임 그래프 그리기 - 1

leon_choi 2022. 6. 26. 13:00
반응형

판다스는 데이터 분석뿐만 아니라 그래프를 통해 데이터의 시각화 역시 가능한 라이브러리인대요. 이번 시간에는 "df.plot()" 을 통해 데이터프레임의 데이터를 시각화 그래프로 표현하는 법을 배우겠습니다. 그렇다면 우선 데이터를 먼저 불러와야 겠죠. 지난 판다스 데이터 분석 자료실을 소개드린 적이 있는데요. 그중 "남북한발전전량.xlsx"을 활용해보겠습니다. 자료실이 궁금하신 분들은 아래의 링크를 통해 확인해주세요.

 

https://data-so-hard.tistory.com/15

 

파이썬 머신러닝 판다스 데이터 분석 자료실

오늘은 파이썬 교재 중 데이터 분석에 필요한 판다스에 대해 공부할 수 있는 교재와 예제를 다운 받을 수 있는 사이트를 추천드리려고 합니다. 우선 교재는 아래의 링크에 해당하는 교재입니다.

data-so-hard.tistory.com

 

데이터를 불러와야 겠죠. 코딩을 적어보겠습니다. 

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('./남북한발전전력량.xlsx', engine='openpyxl')  # 데이터프레임 변환

import pands as pd 하단에 "import matplotlib.pyplot as plt" 라는 문구가 있는데요. 이는 또하나의 그래프 라이브러리인 matplotlib입니다. 이번 시간에 포스팅할 df.plot과는 다른 라이브러리이지만 제가 코딩을 출력하는 비주얼 스튜디오 코드(Visual Studio Code)에서는 matplotlib를 불러와야 df.plot의 그래프도 그릴 수 있기에 함께 적었습니다. 그래프를 그리기 위해서는 우선적으로 데이터가 어떻게 생겼는지 확인해 볼 필요가 있습니다. 남북한발전전력량 표를 확인해보겠습니다. 

그래프를 보면 index 0번과 5번에 각각 남한, 북한이 있고 발전량의 합계및 종류, 연도별 발전량을 확인할 수 있습니다. 여기서 저희는 이번에 남한, 북한의 합계 발전량만 추출한 건데요. 이를 위해서는 지난번 포스팅했던 iloc와 loc를 통해 추출할 수 있습니다. 

 

***loc와 iloc 포스팅 글

loc와 iloc 1편 https://data-so-hard.tistory.com/3

loc와 iloc 2편 https://data-so-hard.tistory.com/4

loc와 iloc 3편 https://data-so-hard.tistory.com/5?category=976314 

 

우선 이번에는 iloc를 활용해 보겠습니다. df.iloc의 데이터 추출 구조는 df.iloc[인덱스 번호, 컬럼 번호] 입니다. 이를 바탕으로 인덱스 번호를 먼저 파악해보면 0번에 남한과 연도별 발전전량 합계가 있고 5번에는 북한과 북한의 연도별 발전전량 합계가 있습니다. 그렇다면 인덱스 번호는 0,5 두개가 필요합니다. 이럴 때는 대괄호 안에 대괄호를 하나 더 추가해 적습니다. 그렇다면 인덱스 번호 부분은  df.iloc[[0,5],컬럼 번호]가 되겠습니다. 

 

컬럼은 어떻게 할까요? 컬럼의 경우는 연도별 합계 전력량만 필요하니 전력량, 발전, 전력별은 필요 없고 컬럼 번호 3번인 1991 이후부터가 필요합니다.

 

이럴 때는 어떻게 해야 할까요? 우선 인덱스처럼 특정 번호만 두개만 필요한 것이 아닌 1991부터 2016까지의 "범위"가 필요합니다.  판다스에서 특정 항목의 범위가 필요할 때는 " : " 를 활용해 슬라이싱을 합니다. 지금 우리는 컬럼 번호 3번부터 끝까지가 필요하니 마지막 범위는 정할 필요가 없습니다. 그래서 이럴 땐 " 3 : " 으로 표현하면 됩니다. 그렇다면 df.iloc는 df.iloc[[0,5],3:] 가 됩니다. 그러면 지금까지의 코딩과 결과를 보겠습니다.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('./남북한발전전력량.xlsx', engine='openpyxl')  # 데이터프레임 변환
print(df)
print('\n')

df_ns = df.iloc[[0,5], 3:]  # 남북한 연도별 발전전량 합계 추출
print('\n')

이렇게 결과가 나왔습니다. 하지만 뭔가 빠진 느낌입니다. 바로 어디가 남한인지, 북한인지 알수가 없습니다. 물론 저희는 앞에서 0번이 남한이고 5번이 북한의 연도별 발전 전량 합계인 것을 파악해 추출해낸 거지만 그래프를 그리기 위해서는 인덱스를 0, 5가 아닌 남과 북으로 변경해야 합니다. 이럴 땐 df.index를 활용합니다. 그러면 코드를 적어보겠습니다.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('./남북한발전전력량.xlsx', engine='openpyxl')  # 데이터프레임 변환
print(df)
print('\n')

df_ns = df.iloc[[0,5], 3:]  # 남북한 연도별 발전전량 합계 추출

df_ns.index = ['South', 'North'] # 행 인덱스 변경
print('\n')
print(df_ns)

이렇게 인덱스 변경까지 완료 했는데요. 그래프를 그리기 전 마지막으로 해야 할 것은 column들의 자료형 변환입니다. 열 이름들을 정수형을 변환시켜줘야 하는데요. 백준 포스팅에서 자주 사용했던 map(int) 매소드를 적용하면 됩니다. 그리고 이제 표를 그릴 코딩을 적어주면 되는데요. 표의 결과까지 확인해보겠습니다. 

 

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('./남북한발전전력량.xlsx', engine='openpyxl')  # 데이터프레임 변환
print(df)
print('\n')

df_ns = df.iloc[[0,5], 3:]  # 남북한 연도별 발전전량 합계 추출

df_ns.index = ['South', 'North'] # 행 인덱스 변경
print('\n')
print(df_ns)

df_ns.columns = df_ns.columns.map(int) # 컬럼 정수형으로 변환

print(df_ns.head())

df_ns.plot() #표 생성
plt.show()

네 이렇게 데이터프레임에서 표그리기 기본을 모두 완료했습니다. 표 이미지를 보게되면 표는 생성됐지만 뭔가 시각 적으로 와닿지 않는 표가 생성됐습니다. 다음 시간에는 이를 가지고 좀 더 확실한 시각효과를 줄 수 있는 표를 만들어보도록 하겠습니다. 

반응형