Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
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
Archives
Today
Total
관리 메뉴

Dende

[Data Scientist] 개인 EDA 프로젝트 (2) 본문

Data Scientist

[Data Scientist] 개인 EDA 프로젝트 (2)

Dende 2022. 10. 4. 13:02

1.  시간대별 매출데이터 탐색

현재 레코드는 업장들의 은행 입출금 데이터도 하나의 거래건수로 포함되어 있어 비정상적으로 높거나, 음수 값을 가진 데이터가 존재. 

=> 결제금액이 200,000 이상이거나, 음수 값일 경우 Outlier로 판단하여 제거 

outlier = (df['amount'] < 0) | (df['amount'] > 200000)
df.drop(df[outlier].index, inplace=True)

■ 시간대별 매출 및 거래건수 정보 

ㅇㅇ

 

▶ EDA를 통해 도출된 인사이트

 

· 야간 시간대(22~05)가 그 이외의 시간(06~21)보다  평균적으로 높은 건당 매출액 기록

  

· 세 항목 모두 가장 가파른 변화추세를 보이는 시간대는 06~07

 

· 거래건수와 매출총액은 양의 상관관계를 가지고 있으며, 거래건수 및 매출총액(그룹1)건별 매출액(그룹2)

   기본적으로 음의 상관관계를 가지지만, 16시부터 21시까지는 양의 상관관계를 보여줌

 

2.  나이별 데이터 탐색

■ 나이 그룹별 데이터 탐색

- 현재 '나이' 컬럼의 최소값은 6세, 최대값은 121세

- 국내 5대 편의점사의 고객층분류는 공통적으로, [아동, 10대, 20대, 30대, 40대, 50대, 60대] 등으로 7개 구분

- 아동의 범위에 속하는 레코드의 개수가 5개로 통계화 하기 어려운 표본수이므로 Outlier로 판단하여 제거

- 상한선은 IQR 사분위 방법을 통한 데이터 필터 적용

 

아웃라이어 제거 이전의 분포도
아웃라이어 제거 후의 분포도

 

q1 = df['age'].quantile(0.25)
q3 = df['age'].quantile(0.75)
iqr = q3 - q1
upper_age = (df['age'] > q3 + 1.5 * iqr)
lower_age = (df['age'] < 10)
age_outlier = upper_age | lower_age
df.drop(df[age_outlier].index, inplace=True)

 

총 65,232개의 이상점 제거 => 5,534,474개의 레코드를 토대로 탐색 재시작

 

① 나이별 매출액

 

나이그룹별 건당 매출액

 

·  가장 많은 매출이 발생한 나이대는 40

   (가장 낮은 매출이 발생한 10대의 220배 수준)

 

·  30대에서 60대 이상 그룹들의 건당 매출액은 7,800~8,200

   에 속하며 대동소이한 수치를 보여줬으나, 20대와 10대 사이에는

   큰 차이가 나타남.

 

② 나이별 방문시간대 탐색

 

 

· 전체적으로 저녁(18~21) 시간대의 방문 건수가 가장 많았으며, 그 다음으로 점심(11~14)가 따르는 모습. 

· 20대 통계에서는 다른 나이 그룹과 달리 2순위가 야식(22~05)으로 점심(11~14)보다 많은 것으로 나타남.

· 10대 통계에서는 다른 나이 그룹과 달리 간식(22~05)시간대 방문율이 높은 것으로 나타남.

 

3.  고객특성별 데이터 탐색

- 고객 개개인별 특징을 파악하기 위해 고객번호(person_id)를 그룹조건으로 설정

group_person_id = df.groupby('person_id', as_index=True)

511,064명의 고객데이터 추출 완료

 

고객번호를 토대로 고객 상세 정보를 추출, 그룹별 정보를 토대로 방문 편의점 종류, 건별 결제액 등 파생 데이터 추출

=> 새로운 고객별 정보 데이터프레임(person_group_df) 생성 

 

다음화에 계속.