1. Matplotlib :그래프를 그리기 위한 기본 모듈.

Terminal에,

python -m pip install -U matplotlib

import matplotlib.pyplot as plt

pyplot 모듈을 plt로 정의해서 사용. 

 

2. 한글 지원 설정

matplotlib은 기본적으로 한글 지원이 안되므로 한글지원을 위해 

한글 가능한 폰트를 지정해준다. 

from matplotlib import font_manager, rc
f_path ="C:\Windows\Fonts\HYWULM.ttf" # 한글가능한 폰트 아무거나
font_name=font_manager.FontProperties(fname=f_path).get_name()
rc('font', family=font_name)

 

3. 그래프 그리기 기초

 

plt.figure(figsize=(10,6))  : 그래프 창 설정

plt.plot(x,y) : xy축 그래프 그리기 (x, y 값은 미리 지정할 것)

plt.grid()  : 격자 그리기

plt.show()  : 그래프 출력.  plt.plot() 과 plt.show() 사이에 정의된 플롯 모두 출력한다. 

 

plt.title('그래프 제목')

plt.xlabel('x축')

plt.ylabel('y축')

plt.legent()   : 레전드 딱지

 

 

4. Subplot 활용하기. 

 

matplotlib는 아래와 같이 크게 두 가지 방법으로 사용할 수 있습니다.

stateless API (objected-based)

stateful API (state-based)

 

stateless 방법은 내가 지정한 figure, 내가 지정한 ax에 그림을 그리는 방법이고,

stateful 방법은 현재의 figure, 현재의 ax에 그림을 그리는 방법입니다.

* figure : 그래프를 그릴 공간(종이) / ax(axes) : 그 공간 중 지금 내가 사용할 부분

 

 

* figure 와 ax 객체를 생성하는 방법

    #1. fig = plt.figure() : ax 없는 빈 figure 생성 (후에 ax를 추가해줘야함)

    #2. fig, ax = plt.subplots() : 하나의 ax 만을 가지는 하나의 figure 생성

    #3. fig, axes = plt.subplots(2,2) : 4개(2*2)이 ax들을 가지는 하나의 figure 생성

 

*책 Ch2.4 서울시 청소년 정신건강 분석

Report.xls
0.01MB

1. 엑셀 데이터 불러오기

 

raw_data= pd.read_excel ( '경로' , usecols="####", names=###)  :

 

1) pd.read_excel : 경로의 엑셀을 데이터 프레임 'raw_data'에 저장 

2) usecols, userows : 엑셀에서 어느 행 혹은 어느 열을 불러올지 선택 가능.

3) names= 행의 이름 

 

col_names= ['스트레스','스트레스남학생','스트레스여학생','우울감','우울남학생','우울여학생','자살생각률','자살남학생','자살여학생'] #컬럼 이름 정의
raw_data= pd.read_excel('C:\\Users\\ASUS\\Downloads\\Report.xls', header=1, usecols="C:K", names=col_names)

 

2. dataframe 데이터 정렬 

 

새로운 행 추가 :  df.loc[1]= 100- df.loc[0]   (기존의 행을 참조하여 연산 결과로 df.loc[1]을 새로 추가)

새로운 열 추가 :  df['@@']= ['##', '###']    (하나의 값을 넣으면 해당 열 모든 값이 하나의 값으로 중복되어 입력)

인덱스 설정 : df.set_index( ' 인덱스명 ' , drop=True/False, inplace= True/False)  (기존 기본지정 인덱스 버릴지 말지)

 

raw_data.loc[1]=100-raw_data.loc[0]  # 데이터 프레임의 열을 나타낼 때, loc[i] 로 나타낼 수 있음.
raw_data['응답']=['그렇다','아니다'] # loc 없이 그냥 chr or str 형식이면 일반적으로 column을 나타냄
raw_data.set_index('응답',drop=True, inplace=True) # 인덱스를  위에서 정의한 컬럼인 '응답' 으로 지정. inplace = 기존의 인덱스 0,1,2,.. 를 이걸로 대체한다. drop = 기존 인덱스는 버린다.

* inplace=True :

raw_data=raw_data.set_index(~  이렇게 하지 않으면, raw_data 값에 새로 인덱스 설정한 값이 저장되지 않는다. 

inplace=True 는 앞에 'raw_data=' 를 붙이지 않아도 raw_data 값이 갱신되게 해준다. 

 

특정 컬럼 지우기 : .drop(columns=' 컬럼 이름' , inplace=True)

not_exercise.drop(columns='기간', inplace=True)

특정 컬럼만 불러오기: .copy() 사용 

not_ex_gen=not_exercise[not_exercise['대분류']=='성별'].copy()

 

 

 

3. 그래프 그리기 

import matplotlib.pyplot as plt

 

파이 차트 : df['컬럼 이름']. plot.pie

다른 영역 간 간격 : explode=[ ]

raw_data['스트레스'].plot.pie(explode=[0,0.02]) # plot 모듈의 pie 차트 기능. explode : 다른 영역 간 간격

 

여러 플롯 그리는 경우

 

plt 모듈에서 subplots ( 행, 열, figsize=(가로, 세로))

 

f= figure, ax= axis 속성

그래프 제목 : ax[i]. set_title

그래프 라벨 : ax[i].ylabel

 

subplots 혹은 plot 으로 시작하여 

plt.show() 로 끝남 둘 사이의 plot들을 모두 출력 

f, ax = plt.subplots(1,3, figsize=(16,8)) # 1행 3열의 플롯을 그린다. f는 figure, ax는 axes 속성 지정

raw_data['스트레스'].plot.pie(explode = [0, 0.02], ax=ax[0], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[0].set_title('스트레스를 받은 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[0].set_ylabel('')

raw_data['우울감'].plot.pie(explode = [0, 0.02], ax=ax[1], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[1].set_title('우울증을 경험한 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[1].set_ylabel('')

raw_data['자살생각률'].plot.pie(explode = [0, 0.02], ax=ax[2], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[2].set_title('자살을 고민한 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[2].set_ylabel('')

plt.show()

 

 

 

 

[풀 코드]


import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import font_manager, rc
f_path ="C:\Windows\Fonts\HYWULM.ttf" # matplotlib 에서 한글지원하도록 해주는 폰트
font_name=font_manager.FontProperties(fname=f_path).get_name()
rc('font', family=font_name)

# f. ~ 으로 나타내는 것은 print해보면 해당 값이 아닌 주소 값임을 알 수 있다.


col_names= ['스트레스','스트레스남학생','스트레스여학생','우울감','우울남학생','우울여학생','자살생각률','자살남학생','자살여학생'] #컬럼 이름 정의
raw_data= pd.read_excel('C:\\Users\\ASUS\\Downloads\\Report.xls', header=1, usecols="C:K", names=col_names ) #pandas의 read_excel을 사용해, 데이터를 데이터 프레임으로 가져옴
# 기존 엑셀의 C:K 까지의 컬럼을 가져옴. 컬럼 이름은 col_names
raw_data.loc[1]=100-raw_data.loc[0]  # 데이터 프레임의 열을 나타낼 때, loc[i] 로 나타낼 수 있음.
raw_data['응답']=['그렇다','아니다'] # loc 없이 그냥 chr or str 형식이면 일반적으로 column을 나타냄
raw_data.set_index('응답',drop=True, inplace=True) # 인덱스를  위에서 정의한 컬럼인 '응답' 으로 지정. inplace = 기존의 인덱스 0,1,2,.. 를 이걸로 대체한다. drop = 기존 인덱스는 버린다.


raw_data['스트레스'].plot.pie(explode=[0,0.02]) # plot 모듈의 pie 차트 기능. explode : 다른 영역 간 간격

f, ax = plt.subplots(1,3, figsize=(16,8)) # 1행 3열의 플롯을 그린다. f는 figure, ax는 axes 속성 지정

raw_data['스트레스'].plot.pie(explode = [0, 0.02], ax=ax[0], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[0].set_title('스트레스를 받은 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[0].set_ylabel('')

raw_data['우울감'].plot.pie(explode = [0, 0.02], ax=ax[1], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[1].set_title('우울증을 경험한 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[1].set_ylabel('')

raw_data['자살생각률'].plot.pie(explode = [0, 0.02], ax=ax[2], autopct='%1.1f%%') # 데이터, 그래프 내부
ax[2].set_title('자살을 고민한 적 있다. ')# a[0]: 서브플롯 3개중 첫번째 플롯의 속성. label, axis 등 축 관련 속성
ax[2].set_ylabel('')

plt.show()

'파이썬 > Pandas' 카테고리의 다른 글

CSV 파일 만들기, 불러오기  (0) 2022.01.12
Matplotlib 설치와 그래프 그리기 기초  (0) 2022.01.11
Pandas 설치와 Data Frame의 기초  (0) 2022.01.11

+ Recent posts