취뽀 기록

#열심히 살자 #취업 #공부

Python/[시각화]

[matplotlib] 그래프 시각화(보조축, 2축 그래프, 히스토그램, 산점도)

hyunnn_00 2023. 6. 18. 22:02
# 라이브러리 불러오기
import pandas as pd
import matplotlib.pyplot as plt

# 데이터 불러오기
df = pd.read_excel('/content/drive/MyDrive/hana1/data/남북한발전전력량.xlsx',
                   engine = 'openpyxl')
                   
# 북한 데이터 추출
df_north = df.iloc[5:]

# 데이터 전처리
df_north = df_north.drop('전력량 (억㎾h)', axis = 1)
df_north = df_north.set_index('발전 전력별')
df_north = df_north.T

# 전력 증감율 계산
df_north = df_north.rename(columns = {'합계':'총발전량'})

df_north['전년총발전량'] = df_north['총발전량'].shift(1)

# 증감율 = ((금년총발전량 - 전년총발전량) / 전년총발전량)*100
# 총발전량 = 금년총발전량
df_north['증감율'] = ((df_north['총발전량'] - df_north['전년총발전량'])
                    /df_north['전년총발전량'])*100

 


보조축(2축 그래프)
# 한글 폰트 설정
plt.rc("font", family = "NanumGothic")

# 스타일 서식
plt.style.use("ggplot")

# 마이너스 기호 출력
plt.rcParams['axes.unicode_minus'] = False

# axe 객체
# 수력, 화력 발전에 대한 누적 막대 그래프
ax1 = df_north[['수력', '화력']].plot(kind = 'bar', stacked = True, figsize = (12,6))
ax2 = ax1.twinx() # x 축 공유

# 증감율에 대한 선 그래프
ax2.plot(df_north.index, df_north['증감율'], color = 'green', marker = 'o', label = '증감율')

# y 축 범위 조정
ax1.set_ylim(0, 500)
ax2.set_ylim(-60, 40)

# 차트 제목
plt.title("북한 전력 발전량")

# 축 이름
ax1.set_xlabel('기간(연도)')
ax1.set_ylabel('발전량')
ax2.set_ylabel('증감율')

# 범례
ax1.legend(loc = 'upper left')
ax2.legend(loc = 'best')

#
plt.show()

 

 

히스토그램

# kind = 'hist' 옵션 지정

# 라이브러리 불러오기
import pandas as pd
import matplotlib.pyplot as plt

# 데이터 불러오기
# csv 파일 불러오기 + 열 이름이 없음(header = None)
df = pd.read_csv('/content/drive/MyDrive/hana1/data/auto-mpg.csv', header = None)

# 열 이름 지정
df.columns = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight',
              'acceleration', 'model_year', 'origin', 'car_name']

 

# 한글 폰트 설정
plt.rc("font", family = "NanumGothic")

# 스타일 서식
plt.style.use("ggplot")

# 히스토그램
df['mpg'].plot(kind = 'hist',
               bins = 15, # 구간 개수
               color = 'aquamarine',
               figsize = (5,3))

# 차트 제목
plt.title("자동차 연비 히스토그램")

# x 축 이름
plt.xlabel("연비")

#
plt.show()

 

 

산점도

# kind = 'scatter' 옵션 지정

# c <- 점의 color 옵션

# s <- 점의 size 옵션

 

# 스타일 서식
plt.style.use("ggplot")

# 산점도
df.plot(kind = 'scatter',
        x = 'mpg',
        y = 'weight',
        c = 'tomato', # 색상
        s = 10, # 크기
        figsize = (6,3))

# 차트 제목
plt.title("차중과 연비의 산점도")

#
plt.show()

 

 

버블 차트

# alpha 옵션으로 투명도 지정

# 버블 차트 = 원의 크기로 그리기
# 스타일 서식
plt.style.use("ggplot")

# 산점도
df.plot(kind = 'scatter',
        x = 'mpg',
        y = 'weight',
        c = 'tomato', # 색상
        s = 'displacement', # 크기
        alpha = 0.2,
        figsize = (8,5))

# 차트 제목
plt.title("차중, 연비, 배기량의 버블 차트")

#
plt.show()

 

# 연속형 변수

# 변수 3개 => 숫자형 변수 원의 색상으로 그리기 '

# 원의 색상으로 그리기
# 스타일 서식
plt.style.use("ggplot")

# 산점도
df.plot(kind = 'scatter',
        x = 'mpg',
        y = 'weight',
        c = 'displacement', # 색상
        cmap = 'plasma', # 컬러맵
        s = 10, # 크기
        alpha = 0.2,

        figsize = (8,5))
# 차트 제목
plt.title("차중, 연비, 배기량의 버블 차트")

#
plt.show()

 

 

# 범주형 변수

# 원의 색상으로 그리기 - 범주형 변수
# 스타일 서식
plt.style.use("ggplot")

# 산점도
df.plot(kind = 'scatter',
        x = 'mpg',
        y = 'weight',
        c = 'origin', # 색상
        cmap = 'plasma', # 컬러맵
        s = 10, # 크기
        alpha = 0.2,
        figsize = (8,5))

# 차트 제목
plt.title("차중, 연비, 배기량의 버블 차트")

#
plt.show()

 

 

파이 차트(원 그래프)
# origin 별로 sum 데이터 만들기
df['count'] = 1
df_origin = df.groupby('origin').sum()
df_origin.index = ["USA", "EU", "JAP"]

# 스타일 서식
plt.style.use("ggplot")

# 파이 차트
df_origin['count'].plot(kind = 'pie',
                        figsize = (10, 5),
                        # autopct = '%.1f', # 소수점 첫째자리 숫자만 표시
                        autopct = '%.1f%%', # 소수점 첫째자리로 % 와 함께 표시
                        colors = ['red','blue','yellow'], # 각 조각의 색상
                        startangle = 0) # 시작 위치

# 차트 제목
plt.title("origin 에 대한 원 그래프")

# 범례
plt.legend(loc = 'best')

#
plt.show()

 

 

상자 수염 그림(박스플롯)
# origin 별로 연비 데이터 만들기
mpg_1 = df[df['origin'] == 1]['mpg']
mpg_2 = df[df['origin'] == 2]['mpg']
mpg_3 = df[df['origin'] == 3]['mpg']

# 그림 객체
fig = plt.figure(figsize = (10, 5))
ax = fig.add_subplot(1,1,1)

# 수직 상자 그림
ax.boxplot(x = [mpg_1, mpg_2, mpg_3],
           labels = ['USA', 'EU', 'JAP'])
plt.show()

 

 

# 수평 상자그림

 

# 그림 객체
fig = plt.figure(figsize = (10, 5))
ax = fig.add_subplot(1,1,1)

# 수평 상자 그림
ax.boxplot(x = [mpg_1, mpg_2, mpg_3],
           labels = ['USA', 'EU', 'JAP'],
           vert = False)
plt.show()