데이터 출처
https://archive.ics.uci.edu/ml/datasets/Online+Retail
온라인 리테일 사이트의 2010년 12월부터 2011년 12월까지의 데이터
약 500,000건
데이터 불러오기
컬럼 확인
컬럼명 | 설명 |
invoiceNo | 주문 번호 |
StockCode | 아이템 아이디 |
Description | 상품에 대한 정보 |
Quantity | 상품 주문 수량 |
InvoiceDate | 주문 일자, 시간 |
UnitPrice | 상품 가격 |
CustomerID | 고객 아이디 |
Country | 고객 거주 지역 (국가) |
데이터 살펴보기
고객ID에 누락값이 있는 것을 확인했다.
기술통계 확인
상품의 주문 수량과 가격의 최솟값이 음수가 나와있다.
이는 이상한 값으로 제거해주는 편이 좋아보인다.
컬럼별 누락값 개수 확인
고객 ID 컬럼에 매우 많은 누락값이 있다.
이 행들은 제거해주는 편이 좋다.
Data Cleansing
- 고객ID 컬럼의 누락행 제거
- Quantity, UnitPrice 컬럼의 음수 행 제거
제거가 잘 되었는지 확인하자.
모든 컬럼에서 누락값이 없는 것을 확인했다.
메모리 효율화
CustomerID 컬럼의 값은 연산을 할 것도 아니기에
굳이 많은 메모리를 차지하는 float64 일필요가 없다.
데이터 타입변경 1 - int32
astype을 이용해 사용자가 직접 int32로 바꿔준다.
int64는 int32보다 더 많은 범위의 정수를 표현할 수 있으나
메모리 공간을 두배나 차지한다.
기존 메모리 사용량에 비해 1.5 감소했다.
데이터 타입변경 2 - category
고객ID는 숫자이긴 하지만
그 자체로만 의미가 있기 때문에 카테고리 자료형으로 바꿔줘도 된다.
변경1의 int32보다 0.6정도 메모리를 더 아낄 수 있다.
데이터 타입변경 3 - downcast
pd.to_numeric을 이용해서 CustomerID컬럼과 downcast에 'integer'를 입력한다.
그러면 알아서 최대한 메모리를 효율화할 수 있게 바뀌며
위 사례로는 int16으로 변경됐다.
저장하는 정수의 예상 범위가 크지 않다면 다운캐스트 하는 것이 좋다.
int32에 비해 더 적은 범위의 정수를 표현하나, 메모리 공간을 절약할 수 있다.
타입변경의 총 3가지 방법 중 메모리를 제일 많이 절약하는 방법이다.
기존 | 27.3 |
int32 | 25.8 |
category | 25.2 |
int16 | 25.0 |
https://steadiness-193.tistory.com/18
자료형 변경에 대한 보충 내용은 위 포스팅 참조
메모리 효율화 함수 정의
고객의 총 지출 비용 컬럼 추가
총 지출 비용(CheckoutPrice) = Quantity * UnitPrice
최종 메모리 효율화
정제 완료 데이터 저장
'Pandas > 실전' 카테고리의 다른 글
판다스 - 가상 쇼핑몰 고객 주문 데이터 : 연월별 매출, 요일별 매출 (1) | 2020.07.20 |
---|---|
판다스 - 가상 쇼핑몰 고객 주문 데이터 : 전체 매출, 국가별 매출 (0) | 2020.07.20 |
판다스 - 연령과 직업, 은행 상품 가입간의 관계 (0) | 2020.07.16 |
판다스 - 대출이 있다면 은행상품에 잘 가입하지 않을까? (0) | 2020.07.15 |
판다스 - 고객데이터 시각화 : 히스토그램, 아웃라이어(이상치, 특잇값) 제거 (0) | 2020.07.15 |