Pandas 주로 데이터 분석 및 처리를 위해 쓰이는 오픈 소스 파이썬 라이브러리로, 행과 열로 이루어진 2차원 데이터를 효율적으로 가공/처리할 수 있는 다양한 기능을 제공한다. 판다스는 넘파이를 기반으로 작성되어 있어 넘파이 학습자라면 누구나 쉽게 접근할 수 있다.
Pandas 또한 앞서 배운 Numpy와 마찬가지로 파이썬의 기본 패키지가 아니라 따로 설치가 필요하지만 구글 코랩은 지원함
1차원 정보처리는 '시리즈'라면 2차원 정보처리는 데이터 프레임을 사용
*중요* 데이터 프레임
빅데이터 분석과 머신러닝 모델 구축시 주어진 데이터를 바로 사용하는경우보다 데이터를 원하는 형태로 변형하는
'전처리' 작업을 수행하는 경우가 더 많다. 해당작업을 통해 데이터를 사용하기 쉽고 이미지로 변환하기 쉬운 상태로 바꿀수 있다.
# 처리를 거치지않는 데이터(원본) = Raw data
raw_data ={
"name":["kim","lee",'park','choi'],
"age" : [25,28,31,36],
"height": [180,173,164,175],
"weight": [70,90,50,60]
}
data = pd.DataFrame(raw_data)
print("데이터 프레임")
print(data)
print("\n")
print("DF의 벨류")
print(data.values)
print("\n")
print("DF의 컬럼")
print(data.columns)
print("\n")
print("DF에 포함된 값의 발생횟수")
print(data.value_counts())
print("\n")
print("DF의 정보")
print(data.info())
print("\n")
#행접근
#data.loc[행이름]
print(data.loc[1])
print(data.iloc[1])
print("\n")
#열접근
#print(data.weight)
print(data["weight"])
print("\n")
#필터링하기 (조건식 넣기)
print("DF 조건식")
print(data[data["height"]> 170])
print("\n")
#앞,뒤 에서 몇번째 까지 정보보기
print(data.tail(2))
print(data.head(2))
print("\n")
위와 같이 데이터 프레임은 입력된 정보를 행과 열의 값을 엑셀과 같은 형태로 값을 저장하고 기록한다고 생각하면 편하다.
데이터프레임 이어붙이기
데이터 프레임은 기본벅으로 2차원 구조(행과 열)이므로 2개이상의 데이터 프레임을 사방에서 이어 붙일수 있다.
#pd.concat() : 행 또는 열 방향으로 데이터프레임 이어붙이기
#df.append() : 행 방향으로 데이터프레임 이어붙이기 / 메소드
print("데이터 프레임 이어붙이기")
raw_data1 = {
"fruit" : ["apple","banana","cherry","durian"],
"animal" : ["alpaca","bee","chicken","dolpin"]
}
raw_data2 = {
"fruit" : ["strawberry","kiwi","pineapple","mandarin"],
"crop" : ["corn","wheat","rye","barley"]
}
df1=pd.DataFrame(raw_data1)
df2=pd.DataFrame(raw_data2)
print(df1,end="\n\n")
print(df2,end="\n\n")
#행으로 이어붙이기
cc1 = pd.concat([df1,df2],axis=0)
print(cc1,end="\n\n")
#열로 이어붙이기
cc2 = pd.concat([df1,df2],axis=1)
print(cc2,end="\n\n")
#데이터프레임 병합
#데이터프레임의 병합(merge)명령 시에는 기준 인덱스와 병합 방식을 각각 지정하여
#두 데이터 프레임을 합칠수 있다. 병합방식 : inner(교집합), outer(합집합), left, right
print("데이터 프레임 병합")
mg = pd.merge(df1,df2, on="fruit",how="outer")
#on 에는 병합시 기준이 되는 키(공통 열)을 의미 /how는 병합방식을 의미한다.
print(mg,end="\n\n")
*중요*데이터 전처리(=데이터 클렌징)
데이터 원본(Raw data)을 곧장 사용하는 경우는 많지 않은데 이를 깨끗한 데이터로 확보하는 작업을 말한다.
Raw data에는 결측값, 이상값, 중복값 등의 데이터 분석에 방해되는 값이 있는데 이는 미리 조치를 취하는 것이 좋다.
앞서 이어 붙이기를 보면 결괏값에 NAN값이 나오는데 이는"Not a Number"의 약어로 None과 같은 의미로
누락된 값 즉, 결측값 의미한다.
이상값은 다른 대다수의 데이터와 동떨어진 값을 의미하고 주로 평균치로 대체한다.
중복값은 말 그대로 같은 정보가 여러 개인 것을 말한다. 이때도 평균치로 대체한다.
결측값, 이상값, 중복값을 처리하기 위한 기능은 df에 메소드로 들어가 있다.
# df.isnull() : 각 값의 결측 데이터 여부를 확인하는 함수
print(df, end="\n\n")
print(df.isnull(), end="\n\n")
# df.notnull() : 각 값의 결측 데이터 여부를 확인하는 함수
print(df.notnull(), end="\n\n")
# df.dropna() : 결측 데이터를 제거하는 함수
print(df.dropna(), end="\n\n")
# df.fillna() : 결측 데이터를 다른 값으로 대체하는 함수
print(df.fillna("C00"), end="\n\n")
# df.drop(): 행 또는 열을 제거하는 함수
print(df.drop([0,2,4]), end="\n\n")
# df.drop_duplicates() : 유일한 1개만 남기고 나머지 중복을제거하는 함수
print(df.filna('C00').drop_duplicates(), end="\n\n")
sort_values()는 Numpy에서도 나오는데 이는 정렬을 해주는 함수로 알아두면 알아두면 유용하게 사용할 수 있다.
매개변수( by = (정렬을 원하는 열) , ascending = (True or False : 오름차 or 내림차 ),
implace = ( True or False : 복사본 생성 안 함 or 복사본 생성) )
추가적으로
df. 뒤에 min(), max(), sum(), count()와 같은 것은 내부 데이터에서 최소, 최대, 총합, 값의 개수를 구하는 함수이다.
groupby()
: 함수는 데이터를 그룹 별로 분할하기 위해 사용하는 함수로 데이터 안에서 특정 그룹으로 분리하여 데이터 처리를 할 때 유용하게 사용할 수 있다.
group = df.groupby(by = '그룹명')
데이터 시각화
우리는 일상생활에서 특정 정보의 결과를 자료의 나열이 아닌 이미지화된 자료 즉 그래프와 같이 시각화된 데이터로 보게 된다. 이런 그래프와 같이 데이터의 형태를 바꾸는 것을 데이터의 시각화 라고한다.
파이썬에서는 대표적으로 matplotlib과 seaborn을 통해 쉽게 데이터의 시각화를 할 수 있다.
위의 두 모듈 또한 따로 설치가 필요하지만 코랩에서는 지원하기 때문에 import로 불러와주면 쉽게 사용이 가능하다.
import matplotlib.pyplot as plt
#그래프 만들기 + 데이터(x,y) 추가하기
# .plot([],[]) : x축 y축
plt.plot([1,2,4],[4,2,1],label= "sample")
# 부가 정보 추가하기
plt.title("Just Sample")
plt.xlabel("x") #x축 레이블 추가
plt.ylabel("y") #y축 레이블 추가
plt.axis([0,10,0,5]) #축 범위 : x 범위 y범위
plt.legend() : #축 범례(지표) 추가
plt.grid() #그리드 추가
#코드 에디터에서 show()를 하지 않으면 표가
보이지 않는다. 코랩은 사용하지 않아도 보여줌
plt.show()
추가적으로 plot() 함수에 다양한 값을 통해 그래프의 특징을 바꿀 수 있다.
ex) plt.plot([1,2,4], [4,2,1], label= "sample", color = "원하는 색", marker = "마커 형태", linestyle = "선의 형태"
linewidth = "선두깨", makersize = "마커 크기")
해당 안에 들어갈 정보는 인터넷을 찾을 수 있는데 아래 사이트에 잘 정리가 되어 있으니 필요할 때 참고해 보면 된다.
https://greeksharifa.github.io/references/2023/05/12/matplotlib-usage/#% EB% A7%89% EB% 8C%80-%EA% B7% B8% EB% 9E%98% ED%94%84 bar
seaborn은 기본적으로 matplotlib을