데이터 시각화는 실무에서 정말 필수다. 발표할 때 ppt를 잘 만들어야 하듯이, 데이터를 시각화하여 한 눈에 알아볼 수 있도록 보여주는 것은 매우 중요하다. matplotlib으로 간단한 시각화에 대해 배워보자.

     

    matplotlib

    matplotlib은 matlab을 사용해 봤다면 쉽게 사용할 수 있는 라이브러리다.

    아니어도 쉽게 배울 수 있으니 아래에서 한번 살펴보자.

     

    환경 준비

    1) 라이브러리

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt	# matplotlib의 pyplot을 불러오는 것

    2) 데이터

    공기 질 정보를 불러오겠다.

    path = 'https://raw.githubusercontent.com/DA4BAM/dataset/master/airquality_simple2.csv'
    data = pd.read_csv(path)
    data['Date'] = pd.to_datetime(data['Date'])
    data.info()

    null(NaN) 데이터가 없으므로 그대로 사용하자

    기본 차트 그리기

    이제 차트를 그려보자.

     

    차트 그리기

    plt.plot(data['Temp'])	# Temp의 차트를 그린다
    plt.show()	# 화면에 띄우기

    이렇게 차트를 그리고 보고서나 발표 때 첨부하면...  교수님께 대차게 까이게 된다.

    x축이 뭔지, y축이 뭔지, 아무것도 알 수가 없다. 심지어 코드를 작성한 나도 x축이 뭔지 모르겠다. 그냥 그래프구나, 하고 이해할 수 없는 그림이 되는 것이다.

     

    x축, y축 지정하기

    # (1)
    plt.plot(data['Date'], data['Temp'])	# x축을 Date, y축을 Temp로 지정
    plt.show()
    # (2)
    plt.plot('Date', 'Temp', data = data)	# data에 있는 Date를 x축, Temp를 y축으로 지정
    plt.show()
    어.. x축이 날짜긴 한데.. 이렇게 제출하면 당연히 안될 것 같다는 생각이 든다

     

    기본 차트 꾸미기

    이제 차트를 꾸며보자.

    x축, y축 이름 지정 및 차트 타이틀

     
    xlabel(x축이름), ylabel(y축이름), title(제목)
    plt.plot(data['Date'], data['Temp'])
    
    plt.xticks(rotation = 20)       # x축 값들 방향을 20도 틀어서 표시
    plt.xlabel('Date')              # x축 이름
    plt.ylabel('Temperature')             # y축 이름
    plt.title('Daily Temperature')   # 타이틀
    
    plt.show()
    처음보단 보기 좋은 차트가 되었다!

     

    선 스타일 조정

     색은 color = '색', 선 스타일은 linestyle='스타일', 값 모양(마커)은 marker='모양' ---------> 예시로 살펴보자
    plt.plot(data['Date'], data['Temp']
             ,color='cyan'                # 색
             , linestyle='dashdot'          # 라인스타일
             , marker='>')                 # 마커(모양)
    
    plt.xlabel('Date') 
    plt.ylabel('Temperature')
    plt.title('Daily Temperature')
    plt.xticks(rotation=20)
    
    plt.show()

     

    여러 그래프 겹쳐서 그리기

    그래프를 한 화면에 여러 개를 그려야 할 때가 있다. 한번 그려보자. 이럴 때는 plt.plot()을 여러개 해주면 된다.

    # 첫번째 그래프
    plt.plot(data['Date'], data['Ozone'], color='red', linestyle='dotted', marker='o')
    # 두번째 그래프
    plt.plot(data['Date'], data['Temp'], color='cyan', linestyle='-', marker='^')
    
    plt.xlabel('Date') 
    plt.ylabel('Ozone')
    
    plt.title('Daily Air Info')
    plt.xticks(rotation=45)
    
    # 한번에 보여주기
    plt.show()

    문제는, 어떤게 Temp고 어떤게 Ozone인지 알 수가 없다...

     

     

    범례 & 그리드 추가

     

    차트에 label 값을 추가하여 어떤 그래프인지 알려줄 수 있다. 범례는 legend로 추가한다.

    plt.plot(data['Date'], data['Ozone'], color='red', linestyle='dotted', marker='o', label = 'Ozone') 
    plt.plot(data['Date'], data['Temp'], color='cyan', linestyle='-', marker='^', label = 'Temp')
    
    plt.xlabel('Date') 
    plt.title('Daily Air Info')
    
    plt.legend(loc = 'upper right')    # loc: 위치
    plt.grid()
    plt.xticks(rotation=20)
    
    
    plt.show()

    이제 어떤 그래프가 어떤 것에 해당하는지 알 수 있다!

     

     

    추가 기능들

     

     

    df.plot()

     

    데이터프레임을 바로 plot할 수 있다.

    data.plot(x = 'Date', y = ['Temp', 'Ozone'], title = 'Daily Air Info')
    plt.legend()
    plt.grid()
    plt.show()

     

     

     

    축 범위 조정 - xlim, ylim

     

    xlimit, ylimit으로 해석하면 이해하기 쉽다.

     

    dict1 = {'v1': [1,2,3,4,5], 'v2': [2,4,6,3,2], 'v3':[9,6,1,6,2]}
    
    plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'v3')
    plt.plot('v1', 'v2', 'cyan', data = dict1, label = 'v2')
    plt.xlim(0, 6)
    plt.ylim(0, 5)
    plt.grid()
    plt.show()
    
    
    ############# 축 범위 조정
    
    dict1 = {'v1': [1,2,3,4,5], 'v2': [2,4,6,3,2], 'v3':[9,6,1,6,2]}
    
    plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'v3')
    plt.plot('v1', 'v2', 'cyan', data = dict1, label = 'v2')
    plt.xlim(0, 6)
    plt.ylim(0, 10)
    plt.grid()
    plt.show()

     

    축 범위를 조정하여 그래프가 잘리지 않도록 나타낼 수 있다.

     

    그래프 크기 조정 - .figure(figsize=)

     

    default size는 (6.4, 4.4)

    plt.figure(figsize = (3, 2))

    크기 조정은 예시 그림 없이 넘어가겠다.

     

     

    수평선, 수직선, 텍스트 추가

     

    dict1 = {'v1': [1,2,3,4,5], 'v2': [2,4,6,3,2], 'v3':[9,6,1,6,2]}
    
    plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'v3')
    plt.plot('v1', 'v2', 'cyan', data = dict1, label = 'v2')
    plt.xlim(0, 6)
    plt.ylim(0, 10)
    
    plt.axhline(4.2, color = 'pink', linestyle = ':')
    plt.axvline(2.5, color = 'grey', linestyle = '--')
    
    plt.text(1.1, 2.5, 'graph')
    
    plt.grid()
    plt.show()

     

     

    이처럼 다양한 기능이 많으니 잘 활용해서 보기 좋은 그래프를 그려보자.

     

    subplot

    subplot은 여러 그래프를 나눠서 그릴 수 있는 유용한 기능이다. 

    plt.subplot(row, column, index)

    row는 행 수, column은 열 수, index는 순서(몇 번째)를 나타낸다.

    dict1 = {'v1': [1,2,3,4,5], 'v2': [2,4,6,3,2], 'v3':[9,6,1,6,2]}
    
    plt.subplot(2,1,1)
    plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'v3')
    
    plt.subplot(2,1,2)
    plt.plot('v1', 'v2', 'cyan', data = dict1, label = 'v2')
    
    plt.xlim(0, 6)
    plt.ylim(0, 10)
    
    plt.grid()
    
    plt.tight_layout()
    
    plt.show()

    이런 식으로 이미지 하나에 그래프를 나눠서 그릴 수 있다.

    여러 차트들

    직선 차트 뿐만 아니라 히스토그램, 산점도 등도 다 그릴 수 있다.

     

    히스토그램

    plt.hist(data['Temp'])
    plt.show()

     

    Density plot

    import seaborn as sns
    sns.kdeplot(data['Temp'])
    plt.show()

    Boxplot

    plt.boxplot(data['Temp'])
    plt.show()

     

    산점도

    plt.scatter(data['Temp'], data['Ozone'])
    plt.show()

    S

    Barplot

     

    data['Weekday'] = data['Date'].dt.weekday
    sns.barplot(x='Weekday',y='Ozone', data = data)
    plt.show()

    'AIVLE' 카테고리의 다른 글

    [KT AIVLE 3기] 이변량분석  (0) 2023.02.10
    [KT AIVLE 3기] 단변량분석  (0) 2023.02.09
    [KT AIVLE 3기] 시계열 데이터 처리  (0) 2023.02.09
    [KT AIVLE 3기] 데이터 처리 - day 1  (0) 2023.02.08
    [KT AIVLE 3기] Python - Numpy & Pandas  (0) 2023.02.07
    Posted by 저본