헬창 개발자

판다스 매트플롯 다루기 본문

데이터 분석

판다스 매트플롯 다루기

찬배 2022. 2. 15. 17:31

이 페이지의 목적

  • Pandas 기본 사용법 이해
  • Matplotlib 기본 사용법 이해

Pandas

◾데이터 읽기

  • import : 모듈을 사용하기 위한 명령
    • import Module : 모듈을 사용하겠다.
    • import Module as md : 모듈을 사용할 때 md라는 이름으로 사용하겠다.
    • from Module import function : 모듈에 포함된 function이라는 함수만 사용하겠다.
  • pandas 사용
    • 파이썬의 강력한 분석 툴킷
    • 단일 프로세스에서 최대 효율
    • pandas는 통상 pd로 import
    • pandas DataFrame 구조 - index : 행, column : 열, value : 값

1. CSV 읽기

  • read_csv : csv 파일을 읽는 명령
  • 한글이 포함되어 있을 경우 encoding='utf-8' 옵션을 사용
import pandas as pd
# .. : 부모 디렉터리
# . : 현재 디렉터리
CCTV_Seoul = pd.read_csv("../data/01. Seoul_CCTV.csv", encoding="utf-8")
# 데이터의 상위 5개 데이터
# 데이터의 개수를 입력하여 원하는 만큼 볼 수 있다.
CCTV_Seoul.head()
# 데이터의 하위 5개 데이터
# 데이터의 개수를 입력하여 원하는 만큼 볼 수 있다.
# CCTV_Seoul.tail()

  • 컬럼 이름 조회 : columns, columns[인덱스]
  • 컬럼 이름 변경 : rename(columns={컬럼 : 변경할 이름}
  • inplace 옵션 : 작업을 진행한 데이터를 새 데이터로 반환할 지 현재 데이터에 적용할지 설정
    • False : 작업한 데이터 반환
    • True : 작업한 데이터 현재 데이터에 적용
# 컬럼명 확인
CCTV_Seoul.columns
CCTV_Seoul.columns[0]
# 컬럼명 변경
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0] : "구별"}, inplace=True)

2. 엑셀 읽기

  • read_excel : 엑셀 파일을 읽는 명령
pop_Seoul = pd.read_excel("../data/01. Seoul_Population.xls")
pop_Seoul.head()

  • 원하지 않는 행이 출력되므로 옵션을 통해 설정한다.
    • header : 시작할 행 지정
    • usecols : 읽어올 컬럼 지정(엑셀의 컬럼은 A,B,C,D,.. 등 영어로 이루어져있다.)
# 헤더와 사용할 컬럼 지정('계' 컬럼들만 사용)
pop_Seoul = pd.read_excel(
    "../data/01. Seoul_Population.xls", header=2, usecols="B, D, G, J, N"
)
pop_Seoul.head()

  • 컬럼 이름을 알아보기 쉽게 변경
pop_Seoul.rename(
    columns={
        pop_Seoul.columns[0] : "구별",
        pop_Seoul.columns[1] : "인구수",
        pop_Seoul.columns[2] : "한국인",
        pop_Seoul.columns[3] : "외국인",
        pop_Seoul.columns[4] : "고령자",
    },
    inplace=True,
)


◾Pandas 기초

  • pandas 통상 pd로, 수치해석적 함수가 많은 numpy는 np로 import
import pandas as pd
import numpy as np

1. Series()

  • Pandas 데이터형을 구성하는 기본 자료형
    • index와 value로 구성
    • 계산을 위해 한 가지 데이터 타입이 좋다
    • 딕셔너리로 인덱스 값을 지정할 수 있다.
s = pd.Series([1, 3, 5, np.nan, 6, 8])

# 딕셔너리
pd.Series({"Key":"Value"})

2. date_range()

  • 날짜(시간)을 사용할 수 있다.
dates = pd.date_range('20130101', periods=6)

3. DataFrame()

  • Pandas에서 가장 많이 사용되는 데이터형
    • index, column, value로 구성
    • 각 컬럼은 Series로 구성
  • 난수를 생성해 DataFrame 생성
data = np.random.randn(6, 4)
df = pd.DataFrame(data, index=dates, columns=["A", "B", "C", "D"])

  • df의 index, columns, values 조회
df.index

df.columns

df. values

  • describe : DataFrame의 기술통계 정보
    • df.describe()
  • 데이터 정렬 : sort_values(by=컬럼, ascending=Bool)
    • ascending = True : 오름차순
    • ascending = False : 내림차순
df.sort_values(by="B", ascending=False)

  • 컬럼 읽기 : df["컬럼"]

◾Pandas Slice

  • 특정 행 읽기 :df[n:m]
    • [n:m] : n부터 m-1까지
    • 인덱스나 컬럼의 이름으로 slice하는 경우 끝을 포함
  • loc[행, 열] : location
    • index명, column명을 이용해 행과 열을 선택하는 함수
  • iloc[행, 열] : index명, column명 대신 인덱스를 활용하여 행과 열을 선택하는 함수

◾Pandas Condition

  • 조건을 통해 원하는 값을 출력하는 것이 일반적 : df[조건]
  • NaN : Not a Number
  • A 컬럼의 값이 0 초과인 경우
  • 전체 값중 0 초과인 경우
  • 컬럼값 추가 : df[컬럼명]=[값]
    • 기존 컬럼이 없으면 추가하고 있다면 변경
  • isin() : 특정 요소가 있는지 확인

◾Pandas Remove

  • del df["컬럼"] : 컬럼 삭제
  • drop("컬럼 또는 인덱스", axis = 값) : axis 값에 따라 행 또는 열 삭제
    • axis = 0 : 가로
    • axis = 1 : 세로
    • 기본 axis는 0

◾Pandas Apply Function

  • apply() : 원하는 계산 수행
    • sum : 합, mean : 평균, min : 최소값, max : 최대값
    • numpy의 기능도 사용 가능
  • apply(np.cumsum) : 각 컬럼 값 누적합

◾데이터 병합

 

1. 데이터 병합 기초

  • pd.concat()
  • pd.join()
  • pd.merge()
  • merge를 이용해 데이터 병합
    • DataFrame끼리 병합이 빈번하므로 꼬이지않게 주의
    • 두 데이터 프레임에서 컬럼이나 인덱스를 기준으로 병합
    • 기준이 되는 컬럼이나 인덱스를 키라고 한다
    • 기준이 되는 키 값은 두 데이터 프레임에 모두 포함되어 있어야한다.
  • 테스트 데이터
left = pd.DataFrame(
    {
        "Key" : ["K0", "K4", "K2", "K3"],
        "A" : ["A0","A1","A2","A3"],
        "B" : ["B0","B1","B2","B3"]
    }
)

right = pd.DataFrame([
   {"Key":"K0", "C":"C0", "D":"D0"},
   {"Key":"K1", "C":"C1", "D":"D1"},
   {"Key":"K2", "C":"C2", "D":"D2"},
   {"Key":"K3", "C":"C3", "D":"D3"},
])
  • merge(df1, df2, on = '컬럼') : df1, df2를 '컬럼'을 기준으로 병합
    • on의 칼럼을 기준으로 공통된 값을 가지는 경우만 병합
  • merge(df1, df2, how="df1", on = '컬럼')
    • how의 df1에 on의 컬럼을 기준으로 df2 병합
    • df2의 값이 없는 경우 NaN을 추가
  • merge(df1, df2, how="outer", on = '컬럼')
    • df1, df2의 모든 데이터를 on의 컬럼을 기준으로 병합
    • 값이 없는 경우 NaN을 추가
  • merge(df1, df2, how="inner", on = '컬럼')
    • 기본적인 동작과 동일하게 값이 두 df에 있는 경우만 병합

Matplotlib

  • 파이썬의 대표 시각화 도구
  • import matplotlib.pyplot as plt 로 많이 사용
  • Juypter NoteBook의 경우 결과가 out session에 나타난다.
  • %matplotlib inline 옵션을 사용 : 결과창을 새 창에 열지 않고 현재 Jupyter Notebook 창에 출력
import pandas as pd
# matlab의 기능을 담아둔 것이 pyplot
import matplotlib.pyplot as plt
%matplotlib inline
# get_ipython().run_line_magic("matplotlib", "inline")
  • matplotlib 기본 형태
    • plt.figure() : 그래프에 대한 속성 설정
    • plt.plot([가로축], [세로축]) : 세로축, 가로축의 데이터 설정
    • plt.show() : 결과 출력
  • 삼각함수 그리기
    • numpy의 sin() 사용
      • np.arange(a,b,s) : a부터 b까지의 s간격의 데이터
      • np.sin(value) : 사인 함수
import numpy as np

t = np.arange(0, 12, 0.01)
def drawGraph():
    plt.figure(figsize=(10, 6))
# label : 해당 그래프의 이름
    plt.plot(t, np.sin(t), label='sin')
    plt.plot(t, np.cos(t), label="cos")
# grid : 그래프에 격자 표시
    plt.grid()
# legend : plot의 label 표시
    plt.legend(loc="upper right")
# xlabel : x축의 제목
    plt.xlabel("time")
# ylabel : y축의 제목
    plt.ylabel("Amplitude")
# title : 전체 그래프의 제목
    plt.title("Example of sinewave")
    plt.show()

  • 추가 실습
t = np.arange(0, 5, 0.5)

def drawGraph():
    plt.figure(figsize=(10,6))
    # r-- : r은 빨간색, --은 점선
    plt.plot(t, t, "r--")
    # bs : b는 파랑색, s는 사각형
    plt.plot(t, t ** 2, "bs")
    # g^ : g는 초록색, ^는 위 방향 화살표
    plt.plot(t, t ** 3, "g^")
    plt.show()

  • 다양한 스타일 지정
t = [0, 1, 2, 3, 4, 5, 6]
y = [1, 4, 5, 8, 9, 5, 3]

def drawGraph():
    plt.figure(figsize=(10,6))
    plt.plot(
        # x축
        t,
        # y축
        y,
        # 그래프 색상
        color = "green",
        # 그래프 스타일
        linestyle="dashed",
        # 마커 스타일
        marker="o",
        # 마커 색상
        markerfacecolor="blue",
        # 마커 사이즈
        markersize=12,
    )
    # x축과 y축의 범위 지정
    plt.xlim([-0.5, 6.5])
    plt.ylim([0.5,9.5])
    plt.show()

  • scatter() : 점 그래프
# scatter는 점을 뿌리듯이 그리는 그래프
t = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])

def drawGraph():
    plt.figure(figsize=(10, 6))
    plt.scatter(t, y)
    plt.show()

  • colormap : 값에 따라 색상 다르게 적용
colormap = t

def drawGraph():
    plt.figure(figsize=(10, 6))
    # marker : 점의 모양
    plt.scatter(t, y, s=50, c=colormap, marker=">")
    # colormap의 색상을 막대 그래프로 출력
    plt.colorbar()
    plt.show()

 

'데이터 분석' 카테고리의 다른 글

2. 서울시 범죄 현황 분석  (0) 2022.02.15
카카오 API, Folium 다루기  (0) 2022.02.15
1. 서울시 cctv 현황 분석  (0) 2022.02.15
환경 설정  (0) 2022.02.15
카카오 지도 API 발급 받는 방법  (0) 2022.01.16
Comments