Yours Ever, Data Chronicles
쇼핑몰 데이터 주문 수 분석하기 (월별, 상품별) -1편 / 파이썬 데이터 분석 실무 테크닉 100 본문
쇼핑몰 데이터 주문 수 분석하기 (월별, 상품별) -1편 / 파이썬 데이터 분석 실무 테크닉 100
Everly. 2022. 1. 12. 21:15오늘부터는 『파이썬 데이터 분석 실무 테크닉 100』 책을 한 챕터씩 공부해보려고 한다. (책 자세히 보기)
이 책은 100가지 예제를 통해, 파이썬으로 데이터를 가공- 머신러닝 - 이미지/자연어 처리를 하는 방법까지를 다루고 있다.
나는 주로 데이터 분석 공부를 이러한 책을 통해 배우고 있는데, 인턴을 하면서 느꼈던 것은 "실무를 위한" 공부를 해야 한다는 것이었다.(이론만 알아서는 절대 안된다!) 파이썬 기초 수준의 공부를 했다면(기초 책으로는 『Do it! Jump to Python』 이나 『Do it! Pandas 입문』 편을 추천한다.) 그 다음으로는 실무에서 데이터 분석을 어떻게 하고 있는지를 알아야 한다. 그런 점에서 이 책은 실제로 실무에서 하는 그러한 예제들을 다루고 있어, 데이터 분석을 실무를 어떻게 활용하는지가 궁금한 대학생이나 취업준비생, 또는 데이터 분석을 일에 적용해보고는 싶은데 머신러닝 몇 개 코드만 돌려보고 실무에는 전혀 적용하지 못하고 있는 실무자들에게 적합한 책이다. (개인적으로 머신러닝, 딥러닝 책도 여러권 읽었지만 이런 실무 공부를 먼저 하고 더 깊은 머신러닝의 세계로 들어가는 것이 더 좋지 않을까 싶다..!)
데이터셋과 코드는 아래 깃허브에서 다운받을 수 있다.
이번 1장에서는 쇼핑몰 데이터로부터 주문 수를 분석할 것인데, 다음과 같은 의뢰가 들어왔다고 하자.
우리 회사는 오랫동안 쇼핑몰 사이트를 운영하고 있습니다. 데이터는 많은데, 데이터 분석을 도입해 본 적이 없습니다. 대부분의 사원이 문과 출신이라 데이터 분석에 어둡고 무엇부터 시작해야 할지 잘 모릅니다. 지금 상황에는 이번 달 매출 파악만으로도 벅차서, 우리 회사 쇼핑몰 사이트의 데이터 분석을 부탁드립니다.
✔Table of Contents
Tech 1. 데이터를 읽어들이자.
회사에 데이터가 존재한다면, 가장 먼저 해야 할 일은 데이터를 읽어오는 것!
이 쇼핑몰의 주요 품목은 컴퓨터입니다. 데이터는 4종류 총 6개가 있습니다. 모두 csv 파일로 되어 있으며 잘 정제되어 있습니다.
- cm: 고객 정보 데이터 (customer_master)
- im: 상품 정보 데이터 (item_master)
- transaction 1,2 : 구매내역 데이터 (너무 길어서 2개 데이터로 분할되어 있음)
- transaction_detail 1,2 : 구매내역 상세 데이터 (너무 길어서 분할되어 있음)
데이터는 다음과 같이 불러옵니다.
# 데이터 읽기
import pandas as pd
cm = pd.read_csv('1장/customer_master.csv')
cm.tail() #데이터의 끝부분 5개
같은 방식으로 나머지 데이터도 가져옵니다.
im = pd.read_csv('1장/item_master.csv')
trans1 = pd.read_csv('1장/transaction_1.csv')
trans1d = pd.read_csv('1장/transaction_detail_1.csv')
display(im.head(), trans1.head(), trans1d.head()) #데이터의 앞부분 5개
비교적 잘 정제된 데이터로 불러오는 것은 판다스의 read_csv만을 이용해도 문제가 없습니다.
Tech 2. 데이터를 결합하자. (세로 방향 조인하기)
데이터에서 transaction은 1,2로, transaction_detail도 1,2로 데이터가 나뉘어 있습니다. 이런 일은 흔한데, 용량 때문에 나누어 저장하기 때문입니다. 데이터 가공을 위해 이를 세로 방향으로 조인시킵니다. (즉, row-bind)
#1.
trans1 = pd.read_csv('1장/transaction_1.csv')
trans2 = pd.read_csv('1장/transaction_2.csv')
trans = pd.concat([trans1, trans2], ignore_index = True) #trans의 index 초기화
print(trans1.shape, trans2.shape, trans.shape)
확인 결과, trans1과 trans2의 row 수의 합이 trans의 row 수와 같으므로, 세로 방향으로 잘 붙었음을 알 수 있습니다.
마찬가지로 transaction_detail도 수행해줍니다.
#2.
trans1d = pd.read_csv('1장/transaction_detail_1.csv')
trans2d = pd.read_csv('1장/transaction_detail_2.csv')
transd = pd.concat([trans1d, trans2d], ignore_index=True)
Tech 3. 매출 데이터를 결합하자. (가로 방향 조인하기)
이번에는 가로 방향으로 데이터를 붙입니다.(즉, column-bind)
여기서 저는 transd 데이터셋을 중심으로, trans 데이터를 붙이고 싶습니다. -> 그러려면 left 조인을 해야겠죠?
또한 trans 데이터셋의 모든 컬럼은 필요하지 않고, payment_date, customer_id 컬럼만 붙이고자 합니다.
두 데이터셋의 공통 열은 'transaction_id' 이므로, 이를 기준으로 두 데이터를 붙입니다.
join_data = pd.merge(transd, trans[['transaction_id', 'payment_date', 'customer_id']], on ='transaction_id', how='left')
join_data.head()
차이점이 보이시나요? Tech 2에서 세로 방향 조인은 pd.concat을 쓴 반면, Tech 3에서 가로 방향 조인으로 pd.merge를 썼습니다. 보통 이렇게 세로로 붙일 땐 concat을, 가로로 붙일 땐 merge를 많이 사용합니다.
left join을 위해 how 옵션에 'left'를 주었으며 공통열은 on 옵션으로 넣었습니다.
이와 같이 left join을 하는 경우는 기준이 되는 왼쪽 열을 중심으로 row 수가 맞춰집니다.
여기선 transd를 기준으로 했으므로 결과물인 join_data의 row 수와 transd의 row 수가 같습니다.
Tech 4. 마스터데이터를 결합하자.
이번에는 위에서 만든 join_data와 cm(고객 정보), im(상품 정보) 데이터를 붙여봅니다. 마찬가지로 가로 방향으로 붙이는 것이므로 merge를 사용해 붙입니다.
핵심은 공통열은 'on' 옵션에 넣고, 추가하고 싶은 열은 무엇인지를 알아보는 것입니다. join_data를 기준으로 left join합니다.
join_data = pd.merge(join_data, cm, on = 'customer_id', how='left')
join_data = pd.merge(join_data, im, on = 'item_id', how='left')
join_data.head()
Tech 5. 필요한 컬럼(열)을 만들자.
이제 join_data를 분석에 활용할 것인데, 'price' 열이 없습니다. 이는 quantity열과 item_price 열을 곱하여 만듭니다.
파이썬에서 새로운 열을 만드는 방식은 매우 간단합니다. 열과 열을 사칙연산해주면 됩니다.
join_data['price'] = join_data['quantity'] * join_data['item_price']
join_data[['quantity', 'item_price', 'price']].head()
다음과 같이 새로운 'price' 열이 만들어졌습니다.
데이터 가공은 한번 집계를 잘못하면 수치상 에러가 생기며, 잘못된 데이터를 제공하면 회사 경영에 막대한 영향을 미칩니다..
그러니 데이터를 결합할 땐 신중히 개수를 확인하며, 되도록 검산이 가능한 데이터 칼럼을 찾고 계산합시다!
그래서 그 다음에는 만든 데이터가 정확한지 한번 검산을 해보겠습니다.
Tech 6. 데이터를 검산하자.
만들어진 join_data의 'price' 열은 trans 열에 있는 'price' 열과 같아야 합니다.
앞서 join_data를 만들 때 일부러 trans 열의 price열은 조인시키지 않았으니, 한번 trans 열의 price의 합계와 join_data 열의 price의 합계가 같은지를 봅니다. 이게 맞다면, 우리가 데이터를 잘 만든 것입니다.
정확하네요!
글이 너무 길어진 관계로 그 다음 테크닉은 바로 다음 포스팅에서 알아보겠습니다 :)
'Data Science > Analysis Study' 카테고리의 다른 글
파이썬 EDA : 고객의 전체 모습 파악하기 -2편 / 파이썬 데이터 분석 실무 테크닉 100 (8) | 2022.01.17 |
---|---|
파이썬 EDA : 고객의 전체 모습 파악하기 -1편 / 파이썬 데이터 분석 실무 테크닉 100 (3) | 2022.01.17 |
파이썬으로 지저분한 데이터 가공하기 -2편 / 파이썬 데이터 분석 실무 테크닉 100 (0) | 2022.01.14 |
파이썬으로 지저분한 데이터 가공하기 -1편 / 파이썬 데이터 분석 실무 테크닉 100 (2) | 2022.01.14 |
쇼핑몰 데이터 주문 수 분석하기 (월별, 상품별) -2편 / 파이썬 데이터 분석 실무 테크닉 100 (6) | 2022.01.12 |