Pandas 데이터 정렬 (sorting)
sort_values() 를 활용한 단일 열(컬럼) 정렬
- ascending=True → 오름차순(작은 값부터 큰 값 순서)
- ascending=False → 내림차순(큰 값부터 작은 값 순서)
df_sorted_asc = df.sort_values(by="매출액", ascending=True)
print(df_sorted_asc)
위의 예시는 sort_values()를 이용하여 '매출액'을 기준으로 오름차순으로 정렬한 것이다.
여러 열 기준 정렬
- by=["매출액", "클릭수"] → 두 개의 열을 기준으로 정렬
- ascending=[False, True] → 첫 번째 기준(매출액)은 내림차순, 두 번째 기준(클릭수)은 오름차순 정렬
# 먼저 매출액을 내림차순 정렬한 후, 동일한 매출액 내에서 클릭수를 오름차순 정렬
df_sorted_multi = df.sort_values(by=["매출액", "클릭수"], ascending=[False, True])
print(df_sorted_multi)
※ median()은 중간값 구하기 기능.
여기서 중간값(median)은 평균(mean)과는 다르다는 것에 유의.
평균 = 모든 값을 더한 후, 개수로 나눈 값
중간값 = 데이터를 오름차순 정렬한 후, 가운데 있는 값
데이터에서 record를 대표하는 경우는 일반적으로 평균이다.
매출액과 전환율을 조합한 가중치 정렬
# 새로운 가중치 점수 계산 (매출액 * 전환율)
df["가중치_점수"] = df["매출액"] * df["전환율"]
# 가중치 점수를 기준으로 내림차순 정렬
df_sorted = df.sort_values(by="가중치_점수", ascending=False)
print(df_sorted.drop(columns=["가중치_점수"])) # 보조 컬럼 삭제 후 출력
가중치 정렬은 자주 사용하는 편이니 기억.
drop()은 컬럼지우기 기능.
Pandas 데이터 필터링 (Filtering)
- 특정 조건을 만족하는 데이터만 선택
boolean indexing을 활용한 필터링
- df["나이"] >= 25 → True 또는 False로 이루어진 Boolean Series를 생성
- df[조건]을 사용하면 True인 행만 남겨서 필터링됨
filtered_df = df[df["나이"] >= 25]
나이가 25 이상인 행만 필터링
- AND 조건 (& 사용)
& 연산자를 사용하면 두 개 이상의 조건을 모두 만족하는 데이터를 필터링할 수 있음.
- (OR 조건 (| 사용)
| 연산자를 사용하면 두개 이상의 조건중 하나라도 만족하는 데이터를 필터링할 수 있음.
filtered_df = df[(df["나이"] >= 25) & (df["점수"] >= 85)]
나이가 25 이상이고, 점수가 85 이상인 행만 필터링
query()를 활용한 필터링
- query(조건)을 사용. 직관적인 방식으로 필터링 가능. ( and, or 사용가능 )
filtered_df = df.query("매출액 >= 4000000")
매출액이 400만 원 이상인 행만 필터링
filtered_df = df.query("매출액 >= 4000000 and 전환율 >= 0.05")
매출액이 400만 원 이상이고 전환율이 0.05 이상인 행만 필터링
특정값이 포함된 데이터 필터링 - isin() 사용
df[df["캠페인"].isin(["봄맞이 할인", "겨울 세일"])]
캠페인 열 중에서 봄맞이 할인, 겨울 세일인 행만 필터링
문자열을 포함하는 데이터 필터링 - str.contains() 사용
df[df["이름"].str.contains("이")]
'이'가 포함된 이름만 필터링
특정 범위에 있는 데이터 필터링 - between() 사용
df[df["나이"].between(25, 30)]
나이가 25 이상 30 이하인 데이터만 필터링
데이터 정렬과 필터링 결합
df[df["나이"].between(25, 30)].sort_values(by="점수", ascending=False)
나이가 25~30 사이인 데이터 필터링 후 점수를 기준으로 내림차순 정렬.
데이터 그룹화
- 특정 열의 값을 기준으로 데이터를 묶어 분석하는 기법.
- groupby()로 특정열을 기준으로 데이터를 묶을 수 있음.
- 캠페인별 매출 합산, 지역별 클릭 수 비교, 전환율 평균분석 등 다양하게 활용 가능.
df.groupby("과목")["점수"].sum()
"과목"을 기준으로 그룹화 후 "점수" 합계 계산
df.groupby("과목")["점수"].mean()
"과목"별 평균 점수 계산
df.groupby("과목")[["점수", "출석일수"]].mean()
"과목"별 평균 점수와 평균 출석일수 계산
df.groupby(["과목", "이름"])["점수"].mean()
"과목" + "이름"을 기준으로 그룹화 → "점수" 평균 계산
agg()를 사용하여 두개의 연산 적용
df.groupby("과목")["점수"].agg(["sum", "mean"])
"과목"을 기준으로 그룹화 후 점수의 합계와 평균 계산
df.groupby("캠페인").agg({"매출액": ["sum", "mean"], "클릭수": ["sum", "mean"]})
print(df_grouped)
'캠페인"을 기준으로 매출액의 합(sum)과 평균(mean), 클릭수의 합(sum)과 평균(mean)을 계산
그룹화된 데이터 필터링
df_filtered = df.groupby("캠페인")["매출액"].sum()
df_filtered = df_filtered[df_filtered >= 7000000]
"캠페인" 별로 매출액의 합계를 구한다음 700만원 이상인 데이터만 필터링
일주일 수업 회고
수업 마지막에 Pandas를 이용하여 실제 서울시 상권분석서비스 데이터로 분석을 하였고 분석결과에 따른 마케팅적 관점 및 방안을 작성해보는 시간을 가졌다. 정신이 바짝 들면서 이리저리 머리를 굴려봤지만 부족한 점이 정말 많다는 것을 깨달았다. 다들 파이썬도 너무 잘 하시고 마케팅적 분석도 너무 잘하셨다.. 내가 부족한 만큼 조금 더 노력하면 나아지리라고 믿고 열심히 해야겠다. 우선적으로 파이썬 자체가 생소하기에 코드를 딱 보면 아직도 한눈에 안들어오고 한참을 쳐다봐야하는 문제가 있다. 강사님께서도 말씀하셨듯이 반복학습이 답인 것 같다. 그리고 강사님께서 이번에는 주어진 코드에 자세한 설명 주석을 달아보라고 하셨는데 이게 도움이 많이 되는 것 같다. 수업 테스트도 봤는데 직접 코드를 짜는 건 나에게는 아직 많이 어려운 일이었나 싶다. 흑흑. 수업에서 끊임없이 동기부여를 받고 힘을 내봐야겠다!
'데이터 분석 part' 카테고리의 다른 글
MariaDB로 SQL 다뤄보기 (1) | 2025.02.11 |
---|---|
GCP VM 설정 및 Maria DB설치, SQL 기본 문법 (5) | 2025.02.11 |
Pandas 기초 (0) | 2025.02.09 |
함수, 클래스, 모듈과 패키지 (0) | 2025.02.09 |
if문(조건문), for문, while문(반복문) (0) | 2025.02.09 |