실제 데이터를 활용한 EDA(Exploratory Data Analysis)
※ 수많은 양의 데이터를 한눈에 분석하기위한 방식이 필요.
사용 데이터 셋 sales_data : 한 브랜드의 2013.01 ~ 2015.10 까지 판매량을 조사한 데이터
1. 데이터 불러오기
import pandas as pd
sales = pd.read_csv('sales.csv')
2. 먼저 데이터가 어떻게 구성되어 있는지 확인해보자
sales.info()
sales.head()
※ 데이터의 유형에 맞게 Dtype을 변경해주는 작업도 필요하다. 해당 데이터 셋에서는 shop_id, item_id가 int 값이지만 범주형 데이터에 포함되어 평균, 최대값, 최빈값들이 의미가 없어 object로 변해도 무방하다.
3. 데이터 결측값 확인
데이터의 구성을 확인 후, 데이터 내의 결측값이 존재하는지 확인해줄 필요가 있다.
sales.isnull().sum()
※ 결측값 없음 확인
4. 데이터 분석
- 데이터 종류 확인(상점, 상품)
# 상점 종류, 상품 종류 확인
sales['shop_id'].unique()
sales['item_id'].unique()
# 상점의 개수, 상품의 개수
len(sales['shop_id'].unique())
len(sales['item_id'].unique())
- 상품 가격 최대값, 최소값 확인
# 최대
sales[sales['item_price'] == sales['item_price'].max()]
# 최소
sales[sales['item_price'] == sales['item_price'].min()]
※ 최소값 확인 결과 item_price값이 -1.0로 나와 이상치로 판단
- 아이템 가격에 다른 이상치가 있는지 확인
sales[sales['item_price'] != -1]['item_price'].min()
0.07 값 확인
- 다양한 조건을 넣어 데이터 확인 (2개 이상 조건 확인)
# 상점값이 32이고, 상품이 2973에 가격이 0 이상인 행 출력
sales[(sales['shop_id'] == 32) & (sales['item_id'] == 2973) & (sales['item_price'] > 0)]
- Groupby를 통한 데이터 그룹핑
# 상품아이디 중 많이 팔린 갯수
group_item = sales.groupby('item_id')
group_item['item_cnt_day'].sum()
# 많이 팔린 순으로 정렬
group_item['item_cnt_day'].sum().sort_values(ascending=False)
※ ascending = False 내림차순 정렬
4-1 이상치 제거
- 상품 가격이 0 이하인 행 인덱스 값 추출 후 삭제
# 상품 이상치값 추출 sales[sales['item_price'] <= 0].index[0] print(sales.iloc[484683]) # 이상치 삭제 sales.drop(sales[sales['item_price'] <= 0].index, inplace=True)
- 하루 상품 판매 갯수가 0 미만인 행 인덱스 값 추출 후 삭제
sales[sales['item_cnt_day'] < 0].index
# 이상치 삭제
sales.drop(sales[sales['item_cnt_day'] <= 0].index, inplace=True)
4-2 데이터 요소 분석 후 추가
※ 데이터 요소들을 분리 혹은 통합을 통해 새로운 특징을 추출 할 수 있다.
- 수입 특징 만들기
상품 가격 * 하루 상품 판매 갯수
sales['income'] = sales['item_price'] * sales['item_cnt_day']
- 날짜 분리 하기
# 02.01.2013 <- '.' 을 기준으로 나눠
sales['date'].str.split('.', expand=True)
sales[['day','month','year']] = sales['date'].str.split('.', expand=True)
※ expand = True 를 통해 sales 데이터 프레임 바로 확장
응용
1. 2013 ~ 2015 연 아이템 판매량 분석
year_g = sales.groupby('year')
year_g['item_cnt_day'].sum()
# 데이터 시각화
year_g['item_cnt_day'].sum().plot.bar()
2. 2013 ~ 2015 월별 아이템 판매량 분석
month_g = sales.groupby('month')
month_g['item_cnt_day'].sum().sort_values(ascending=False)
# 데이터 시각화
month_g['item_cnt_day'].sum().plot.bar()
Sales(판매) 데이터 셋
※ 용량이커 구드에 올리겠습니다.
'파이썬 > 데이터 전처리' 카테고리의 다른 글
정규 표현식 파이썬 예제를 통한 데이터 전처리 실제 활용- [데이터 전처리] (0) | 2021.07.12 |
---|---|
ML, DL학습에 필요한 Pandas 전처리 방식 모음 정리 - [데이터 전처리] (0) | 2021.06.29 |
Boxplot 상자도표를 통한 이상치 탐지 - [데이터 전처리] (0) | 2021.06.26 |