23번째 EDA 1. Pandas, matplotlib 기초 스터디 노트

이망치·2023년 5월 6일
0

EDA 실습

목록 보기
3/11
post-thumbnail

EDA 1 프로젝트를 진행하면서 필요한 Pandas와 matplotlib 기초 정리

Pandas 기초

  • Python에서 R만큼의 강력한 데이터 핸들링 성능을 제공하는 모듈
  • 단일 프로세스에서는 최대 효율
  • 코딩이 간소하고 응용가능한 엑셀로 받아들여도 됨
  • 누군가 스테로이드 맞은 엑셀로 표현
# pandas, numpy import
import pandas as pd
import numpy as np
  • Series
    index와 value로 이루어져 있습니다.
    한 가지 데이터 타입만 가질 수 있습니다.
# 다양한 방법으로 사용
pd.Series([1,2,3,4])
pd.Series([1,2,3,4], dtype=np.float64)
pd.Series([1,2,3,4], dtype=str)
pd.Series(np.array([1,2,3,4]))
pd.Series({'Key':'Value'})
  • 날짜 데이터
# 일정 날짜 부터 periods를 이용하여 기간 설정
datas = pd.date_range('20210101', periods=6)
datas
  • DataFrame
    pd.Series()
    - index, value
    pd.DataFrame()
    - data, index, column
data = np.random.randn(6,4)
df = pd.DataFrame(data, index = datas, columns = ['A', 'B', 'C', 'D'])

  • 데이터 프레임 정보 탐색
df.head() # 데이터 프레임 위에서부터 지정까지
df.tail() # 데이터 프레임 아래에서부터 지정까지
df.index # 데이터 프레임 인덱스보기
df.columns # 데이터 컬럼 인덱스보기
df.values # 데이터 값 인덱스보기
df.info() # 데이터 정보 보기
df.describe() # 데이터 요약정보 보기
  • 데이터 정렬
df.sort_values(by='B', ascending=False, inplace=True)
# B컬럼 기준으로 내림차순으로 정렬
  • 데이터 선택
# 한개 컬럼 선택
df["A"]
# 두개 이상 컬럼 선택
df[['A','B']]
  • offset index
    [n:m] : n부터 m-1 까지
    인덱스나 컬럼의 이름으로 slice하는 경우는 끝을 포함합니다.
df[0:3]
df["2021-01-01":"2021-01-04"]
# loc: loation
# index 이름으로 특정 행, 열을 선택합니다.
df.loc[:,["A", "B"]] # 모든 행 A,B열
df.loc["2021-01-01":"2021-01-04", ["A", "D"]]
# iloc: inter location
# 컴퓨터가 인식하는 인덱스 값으로 선택
df.iloc[3]
df.iloc[3,2]
df.iloc[3:5, 0:2]
  • condition
# A 컬럼에서 양수만 선택
df["A"]>0
df[df["A"]>0]
df[df>0]
  • 컬럼추가
df["E"] = ["Zero","One", "two", "three","four",'five']
df
# isin()특정 요소가 있는지 확인
df["E"].isin(["two"])
df[df["E"].isin(["two","four","five"])]
  • 특정 컬럼제거
    del
    drop()
del df["E"]
df.drop(["D"],axis=1)# axis = 0 가로 axis = 1 세로
df.drop(["2021-01-06"])
  • apply
df["A"].apply("sum")
df["A"].apply("mean")
df["A"].apply("max"), df["A"].apply("min")
df["A"].apply(np.sum)
df["A"].apply(np.mean)
df["A"].apply(np.std)
def plusminus(n):
    return "plus" if n > 0 else "minus"
df["A"].apply(plusminus)
df["A"].apply(lambda n: "plus" if n > 0 else"minus")

데이터 프레임 병합

  • pandas에서 데이터 프레임을 병합하는 방법
    pd.concat()
    pd.merge()
    pd.join()

pd.merge()
두 데이터 프레임에서 컬럼이나 인덱스를 기준으로 잡고 병합하는 방법으로 기준이 되는 컬럼이나 인덱스를 키값이라고 하고 기준이 되는 키값은 두 데이터 프레임에 모두 포함되어 있어야 한다.

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"}])
                     
pd.merge(left, right, how="outer" , on="key")

matplotlib 기초

# matplotlib, 그래프를 그리기 위해 한글설정
import matplotlib.pyplot as plt
from matplotlib import rc
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False # 그래프에서 마이너스 기호가 표시되도록 하는 설정
rc("font", family="Malgun Gothic")
%matplotlib inline
  • 기본 bar 차트
  • 삼각함수 그리기
    np.arange(a,b,s): a에서 b까지 s의 간격으로
    np.sin(value)
  • 그래프 커스텀
  • scatter plot
# 바차트
plt.figure(figsize=(10,6))
plt.plot([0,1,2,3,4,5,6,7,8,9],[1,1,2,3,4,2,3,5,-1,3])
plt.show()

# 삼각함수
def drawGraph():
    plt.figure(figsize = (10,6))
    plt.plot(t, np.sin(t),label = "sin")
    plt.plot(t, np.cos(t),label = "cos")
    plt.grid()
    plt.title("Example of sinwave")
    plt.xlabel("time")
    plt.ylabel("Ampplitude") #진폭
    plt.legend(loc="upper right") #범례
    plt.show()
    
drawGraph()

# 그래프 커스텀
t= [0,1,2,3,4,5,6]
y= [1, 4, 5, 8, 9, 5, 3]
def drawgGraph():
    plt.figure(figsize=(10,6))
    plt.plot(t, y, color= "green", linestyle="dashed", marker="o", markerfacecolor="blue", markersize=12)
    plt.grid()
    plt.xlim([-0.5, 7])
    plt.ylim([0.5, 9.5])
    plt.show()
    
drawGraph()

# scatter 차트
t = np.array(range(0,10))
y = np.array([9,8,7,9,8,3,2,4,3,4])
def drawScatter():
    
    plt.figure(figsize=(10,6))
    plt.scatter(t, y)
    plt.grid()
    plt.show()
    
drawScatter()

후기

pandas와 matplotlib에 많은 기능이 있는것 같은데 아직 활용이 어렵다. 함수들에 인자들이 많은데 그걸 다 기억할 수 있을지 걱정이다. 새로운게 너무 빨리 들어와서 뒤죽박죽 정리가 안되는 느낌 끙..

이글은 제로베이스 데이터 취업스쿨의 강의자료 일부를 발췌하여 작성되었습니다.

profile
데이터 공부합니다

0개의 댓글