데이터분석과 개발

[Pandas] 데이터 음수값 없애기 본문

AI(시계열)/데이터 전처리

[Pandas] 데이터 음수값 없애기

긍정적인마인드 2023. 3. 14. 00:41

* 공부한 것을 정리한 글이므로 틀린 내용이 있을 수 있습니다.

* 더 좋은 방법 또는 틀린부분이 발견될 시 계속 수정하며 업데이트 할 예정입니다.

 

오늘 정리해볼 전처리는 데이터의 음수값을 없애고 간단한 선형 보간법으로 데이터를 채워넣는 과정입니다.

일단 제가 10분동안 요리조리 만든 월단위 매출 2년 데이터입니다. 

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 2년치 매출 데이터
sales_list = [50,60,55,45,60,75,90,
              120,110,-5,-5,45,50,
              60,40,50,70,130,140,
              110,-5,-5,40,50]
              
# 월별 2년
date = pd.date_range(start="2021-01", end="2023-01", freq='M')
date

df = pd.DataFrame({"Sales":sales_list}, index=date)
df

 

제가 만든 데이터를 시각화 해보면

# 시각화
df.plot(figsize=(10,5), title="Retail Sales", marker='.')

이렇게 매출에 음수값이 들어간 걸 볼 수가 있습니다.

잘 안보이므로 음수값을 빨간색 점으로 표시를 해보겠습니다.

 

# 음수 인덱스
idx = np.where(df<0) # 결과값 (array[9,10,20,21],..)

fig,ax = plt.subplots(figsize=(10,5))
ax.plot(df.index, df['Sales'],marker='.')
ax.scatter(df.iloc[idx[0]].index, df['Sales'].iloc[idx[0]], marker='o', color='r')
ax.set_title("Retail Sales")

 

서론이 길었습니다. 데이터 전체의 음수값을 없애주려면 아래와 같이 정말 간단합니다.

다만 음수값을 없애고 어떻게 전처리 해줄지를 고민해야 하기 때문에 Nan값으로 대체하여 줍니다.

# 음수값 없애기
# 음수값을 Nan값으로 변환
df[df<0] = np.NaN

이후 다시 시각화를 진행해보면 아래와 같이 그래프에 빈값이 생기게 되네요

 

간단한 linear interpolation을 통해 전처리를 마치도록 하겠습니다.

시각화가 제일 어려웠던 것 같습니다!!

# 선형 보간
df_filled = df.interpolate(method="linear")

# 시각화
ax = df_filled.plot(figsize=(10,5), marker='.')
df_filled[df.isnull()].plot(ax=ax, marker='.', color='r', legend=None)
ax.set_title("Filled Retail Sales")