EDA 1 프로젝트를 진행하면서 필요한 Pandas와 matplotlib 기초 정리
# pandas, numpy import
import pandas as pd
import numpy as np
# 다양한 방법으로 사용
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
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']]
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]
# 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 df["E"]
df.drop(["D"],axis=1)# axis = 0 가로 axis = 1 세로
df.drop(["2021-01-06"])
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")
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, 그래프를 그리기 위해 한글설정
import matplotlib.pyplot as plt
from matplotlib import rc
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False # 그래프에서 마이너스 기호가 표시되도록 하는 설정
rc("font", family="Malgun Gothic")
%matplotlib inline
# 바차트
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에 많은 기능이 있는것 같은데 아직 활용이 어렵다. 함수들에 인자들이 많은데 그걸 다 기억할 수 있을지 걱정이다. 새로운게 너무 빨리 들어와서 뒤죽박죽 정리가 안되는 느낌 끙..
이글은 제로베이스 데이터 취업스쿨의 강의자료 일부를 발췌하여 작성되었습니다.