티스토리 뷰
파이썬 시각화 과정 중 이해가 되지 않았던 부분
segment_FN = merged_df.groupby(['Segment','FN']).size().unstack() # groupby를 하면 두개 컬럼 다 행에 있는데, 피벗테이블처럼 구분하기 위해서 .unstack()을 사용해서 FN 값을 열로 바꿔줌
segment_FN_pct = segment_FN.div(segment_FN.sum(axis=1), axis=0) * 100 # sum(axis=1)으로 여러개 열을 하나로 합침 → segment별로 sum, axis=0 기준으로 div 해서 FN별로 비율 나눔
segment_FN_pct.plot(kind='bar', stacked=True, figsize=(10,6))
plt.title('Segment-FN(%)')
plt.ylabel('Percentage(%)')
plt.legend(title='FN (0 or 1)')
plt.xticks(rotation=0)
plt.show()
개념 정리)
개념적으로 axis=0은 행(Row), axis=1은 열(Column)
그런데 왜 함수마다 다르게 느껴지냐면, 판다스에서 이 축 번호를 "대상을 지칭할 때" 쓰느냐, "움직이는 방향을 말할 때" 쓰느냐의 차이 때문이라고 한다.
1. sum(axis=1) : "열(Column)들을 가로질러라"
sum이나 mean 같은 집계 함수에서 axis는 "어느 축을 없애버릴(합칠) 것인가?"를 묻는 것
- axis=1(열)을 선택하면: 여러 개였던 열(Column)들을 하나로 합치면서 가로 방향으로 계산
- 그 결과, 행(Row)별 합계가 남음
2. div(..., axis=0) : "행(Row)에 주파수를 맞춰라"
나누기(div), 빼기(sub) 같은 연산 함수에서 axis는 "어느 축을 기준으로 정렬해서 계산할 것인가?"를 묻는 것입니다.
- 위에서 만든 합계 데이터(Series)는 인덱스가 'Top_20', 'Middle' 같은 행 이름으로 되어 있는데
- 이걸 전체 데이터프레임과 계산하려면, 행(Row, axis=0)끼리 서로 이름이 맞는지 확인하며 나눠야 한다
- 그래서 "행 축(axis=0)을 기준으로 줄을 세워라"라고 명령하는 것!
💡 헷갈리니까 딱 이렇게만 기억하자!
판다스에서 axis를 이해하는 가장 쉬운 물리적 방법!
- axis=0 (행 축): 위 ↓ 아래 방향으로 작용 (위아래로 더하거나, 행끼리 비교함)
- axis=1 (열 축): 왼쪽 → 오른쪽 방향으로 작용 (좌우로 더하거나, 열끼리 비교함)

- df.sum(axis=0): a+c, b+d (세로로 더함 → 결과는 열별 합계)
- df.sum(axis=1): a+b, c+d (가로로 더함 → 결과는 행별 합계)
데이터가 아래와 같은 표(DataFrame) 형태라고 가정해 보자
| Segment | Channel 1 | Channel 2 |
| Top_20 | 80 | 20 |
| Bottom_20 | 30 | 70 |
1단계: 행별 합계 구하기 (.sum(axis=1))
먼저 각 세그먼트의 전체 구매 건수를 구한다 (axis=1은 가로 방향으로 더하라는 뜻!)
- Top_20: 80 + 20 = 100
- Bottom_20: 30 + 70 = 100
이 결과값은 [100, 100]이라는 형태의 Series(열)가 된다
2단계: 줄 맞추기 (.div(..., axis=0))
이제 원본 표의 각 숫자들을 위에서 구한 합계로 나눠야 한다
여기서 axis=0을 쓰는 이유는 "왼쪽에 있는 'Top_20', 'Bottom_20'이라는 행 이름(인덱스)을 기준으로 줄을 맞춰서 나눠라"는 뜻!
판다스는 내부적으로 아래와 같이 계산한다
- Top_20 행: [80, 20]을 합계인 100으로 각각 나눔 → [0.8, 0.2]
- Bottom_20 행: [30, 70]을 합계인 100으로 각각 나눔 → [0.3, 0.7]
3단계: 백분율로 변환 (* 100)
마지막으로 0.8에 100을 곱해 우리가 흔히 아는 80%라는 숫자를 만든다!
커머스 데이터로 시각화하는 과정에서의 사고 흐름 기록
매출 추이는 11월이 제일 높긴하네?
> 색깔별로 분리해서 보니까 그 중에서도 11월에는 빨강이 더 많이 팔렸네
> 그럼 11월에 팔린 빨강, 녹색 중에는 어떤 제품들이 있을까?
> 스웨터나 가디건이 속해있는 Garment Upper body가 월등히 높긴하네
> 근데 11월에 매출이 높은 이유가 블랙 프라이데이 할인 때문일까? 아니면 크리스마스 특수성 때문일까?
> 제일 매출 많았던 6월이랑 빨강, 녹색 옷만 한번 비교해볼까?
> 전체 매출은 6월이 높지만 빨강, 녹색 옷은 11월이 좀 더 높은 것 같은데?
> 판매량(Quantity) 값이 없긴 하지만 하나의 행 당 한개 구매라고 가정하고 판매 개수를 볼까?
> 11월이 더 많긴 한데, 매출이 많이 차이났던 이유는 아무래도 평균 단가가 겨울 옷이 높아서겠구나
'내일배움캠프 데이터 분석' 카테고리의 다른 글
| 27일차) 내일배움캠프 데이터 분석 TIL - 기초 프로젝트(5) (0) | 2026.01.29 |
|---|---|
| 26일차) 내일배움캠프 데이터 분석 TIL - 기초 프로젝트(4) (0) | 2026.01.28 |
| 24일차) 내일배움캠프 데이터 분석 TIL - 기초 프로젝트(2) (0) | 2026.01.26 |
| 23일차) 내일배움캠프 데이터 분석 TIL - 기초 프로젝트(1) (0) | 2026.01.23 |
| 22일차) 내일배움캠프 데이터 분석 TIL - 파이썬 전처리/시각화(5) (1) | 2026.01.22 |
- Total
- Today
- Yesterday
- 판다스
- github
- 데이터시각화
- git
- 데이터분석
- 코딩처음
- 코드카타
- 태블로
- Tableau
- 데이터분석입문
- 중학생코딩
- 코딩기초
- 프로그래밍입문
- 내일배움캠프
- 텍스트분석
- 머신러닝
- GoogleColab
- SQL
- 통계
- 비전공자코딩
- 파이썬입문
- Python
- 파이썬
- Til
- 구글코랩
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
| 31 |
