Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 시간형식
- loess
- 응용이 보이는 선형대수
- pandas
- pandas # 월말 날짜 # 마지막 주 # 날짜계산 # 시계열 # 마지막 주 금요일
- 빈 데이터프레임 #pandas #데이터전처리
- 시계열데이터셋
- 시계열
- adf_test
- 플로틀리
- timeseries decomposition
- 크롤링자동화
- np.split
- 날짜파싱
- 음수값 #전처리 #선형보간 #pandas #데이터 #데이터분석
- 시간형식변환
- 시계열분해
- 파이프라인전처리
- seaborn # kdeplot # 데이터분석
- 시계열 #reindex #인덱스 확장 #datetime index #index extention # 데이터전처리
- 년월일 데이터
- Python
- 시계열모듈
- 이수역 양식집
- 오제이튜브
- 확률
- stl
- 짧은 시계열 # 금융시계열
- 리눅스개념
- 시계열시각화
Archives
- Today
- Total
데이터분석과 개발
[Pandas] 데이터 음수값 없애기 본문
* 공부한 것을 정리한 글이므로 틀린 내용이 있을 수 있습니다.
* 더 좋은 방법 또는 틀린부분이 발견될 시 계속 수정하며 업데이트 할 예정입니다.
오늘 정리해볼 전처리는 데이터의 음수값을 없애고 간단한 선형 보간법으로 데이터를 채워넣는 과정입니다.
일단 제가 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")
'AI(시계열) > 데이터 전처리' 카테고리의 다른 글
[pandas] if 문으로 빈 데이터프레임 거르기 (0) | 2023.03.16 |
---|---|
[pandas] 데이터프레임 날짜 인덱스 늘리기(reindex) (0) | 2023.03.16 |
[Pandas] 년,월,일 따로 있는 데이터 읽기 : parse_dates, date_parser, index_col (0) | 2023.01.08 |
[전처리] 전처리 파이프라인 구축하기(1) (0) | 2023.01.07 |