< Pandas 복습문제 >
서울 열린데이터 광장에서 확보한 데이터로 낚시가게를 오픈하기 좋은 동네(50대 남성이 많은 동네)와 화장품가게(20대 여성이 많은 동네)를 오픈하기 좋은 동네의 후보 5곳을 찾기.
< 낚시가게 입지 좋은 곳 찾기 >
< 화장품가게 입지 좋은 곳 찾기 >
문제에서 다시 확인해야 할 개념 정리
데이터에서 특정 열 선택 (filtered_df = df[['열1', '열2', ...]])
filtered_df = df[['행정동코드','여자20세부터24세생활인구수', "여자25세부터29세생활인구수"]]
- df[['열1', '열2', ...]] → DataFrame에서 특정 열만 선택할 때 사용
- filtered_df는 df에서 '행정동코드', '여자20세부터24세생활인구수', '여자25세부터29세생활인구수'만 포함한 새로운 DataFrame이 됨
새로운 열 추가 (df['새로운 열'] = df['열1'] + df['열2'])
df['여자20대'] = df['여자20세부터24세생활인구수'] + df["여자25세부터29세생활인구수"]
- df['새로운 열'] = df['열1'] + df['열2'] → 두 개 이상의 열을 더한 값을 새로운 열로 추가
- df['여자20대'] → '여자20세부터24세생활인구수'와 '여자25세부터29세생활인구수'의 합을 저장
그룹화하여 합 구하기 (groupby())
sum_df = df.groupby('행정동코드')['여자20대'].sum()
- groupby('행정동코드') → '행정동코드'별로 데이터를 묶음
- ['여자20대'].sum() → 그룹별 '여자20대' 값의 합을 구함
- 결과는 Series 형태로 반환됨 (index=행정동코드, value=여자20대 인구 총합)
정렬 (sort_values())
top_df = sum_df.sort_values(ascending=False).head(5)
- .sort_values(ascending=False) → 값이 큰 순서(내림차순)로 정렬
- .head(5) → 상위 5개 데이터만 가져옴
특정 열 선택 | df[['열1', '열2']] |
새로운 열 추가 | df['새로운열'] = df['열1'] + df['열2'] |
그룹화 (groupby) | df.groupby('열')['값'].sum() |
정렬 (sort_values) | df.sort_values(by='열', ascending=False) |
상위/하위 N개 출력 | df.head(5), df.tail(5) |
출력 (display()) | display(df) |
설문조사를 통한 데이터 수집
- 특정한 주제나 목표에 대한 사용자 의견, 행동, 선호도를 구조적으로 수집하는 방법
< 연습문제 >
SNS 언급량과 제품만족도에 대한 상관도분석
외부데이터 - SNS언급량 : [3, 5, 4, 5, 3]
내부데이터 - 제품만족도 : [5, 3, 2, 4 ,5]
상관관계 (Correlation)
corr() 함수는 두 변수 간의 상관관계를 계산. 상관관계는 두 변수 간의 관계의 강도를 나타내며, -1에서 1 사이의 값을 가진다. 1에 가까울수록 강한 양의 상관관계, -1에 가까울수록 강한 음의 상관관계. 0에 가까울수록 상관관계가 거의 없음을 나타냄. 위 데이터는 랜덤으로 뽑아낸 것이라 음의 상관관계가 발생하였다.
Matplotlib를 이용해서 시각화하기
- Python에서 데이터를 시각화할 때 사용하는 라이브러리. pyplot모듈을 사용하여 다양한 그래프(선 그래프, 바 그래프, 히스토그램 등)을 생성 가능. 약점은 한글 글자는 잘 깨진다는 것.
1. 선 그래프 (Line Plot)
2. 바 그래프 (Bar Chart)
3. 히스토그램 (Histogram) - 데이터의 분포형태, 집중도 및 범위 분석
4. 산점도 (Scatter Plot) - 두 변수 간의 관계(상관관계) 분석할 때, 데이터 패턴, 군집분석, 회귀분석
5. 여러 개의 그래프 표시 (Subplot) - 하나의 기준그래프에서 변형을 볼 때, 여러개 그래프를 하나로 볼 때
설문조사와 외부 데이터셋 활용
- 설문조사 데이터는 표본 크기가 작거나 특정 그룹에 편향될 가능성이 있다. 이를 보완하기 위해 외부 데이터셋을 활용.
- 외부 데이터셋은 다양한 출처에서 가져올 수 있으며, 설문 데이터와 결합하여 더 정확한 마케팅 전략을 수립할 수 있다.
외부 데이터셋 활용 목적
1) 설문 데이터 한계를 보완
2) 설문 데이터와 시장데이터 결합
3) 공공데이터 및 통계 활용 → API 데이터
4) 고객 행동 데이터 연계
☆ 설문조사 단계 프로세스
1) 설문 기획 (설문 대상 정하기)
2) 설문조사지 만들기
3) 설문조사 결과 데이터를 바탕으로 분석코드 (파이썬) 만들기
4) 데이터 시각화 및 상관관계 분석
5) 분석을 바탕으로 보고서 작성 (광고 효과 및 마케팅 전략 도출)
※ 3)번 단계 중 설문조사결과 데이터 생성 예시
import pandas as pd
# 설문조사 데이터 생성 (하드코딩된 응답 포함)
survey_data = pd.DataFrame({
"Campaign": ["Samsung Ad", "LG Promotion", "Coupang Sale", "Apple Event", "Nike Campaign"],
"Age Group": ["20s", "30s", "40s", "20s", "50s"],
"Gender": ["Male", "Female", "Female", "Male", "Male"],
"Ad Watched": ["Yes", "Yes", "No", "Yes", "Yes"],
"Ad Channel": ["YouTube", "Instagram", "None", "Facebook", "Naver Search"],
"Ad Recall Reason": ["Celebrity Model", "Interesting Story", "N/A", "Special Discount", "High-Quality Visuals"],
"Ad Influence": [5, 4, 0, 3, 2],
"Purchase After Ad": ["Yes", "No", "No", "Yes", "No"],
"Brand Trust Increase": [4, 5, 2, 4, 3],
"Watch Again Intent": ["Yes", "Yes", "No", "Yes", "No"]
})
# CSV 파일로 저장
csv_filename = "marketing_survey_responses.csv"
survey_data.to_csv(csv_filename, index=False, encoding='utf-8-sig')
# 데이터프레임 출력 확인
print(survey_data)
※ 3번 단계 중 설문조사결과 데이터 분석 예시
import pandas as pd
# 저장된 CSV 파일 불러오기
csv_filename = "marketing_survey_responses.csv"
loaded_data = pd.read_csv(csv_filename)
# 데이터 개요 출력
print("데이터 개요:\n", loaded_data.info())
# 광고 시청 여부별 응답자 수 확인
ad_view_counts = loaded_data["Ad Watched"].value_counts()
print("\n광고 시청 여부 분포:\n", ad_view_counts)
# 광고 채널별 응답자 수 확인
ad_channel_counts = loaded_data["Ad Channel"].value_counts()
print("\n광고 채널별 분포:\n", ad_channel_counts)
# 브랜드 신뢰도 평균 값 계산
avg_trust_increase = loaded_data["Brand Trust Increase"].mean()
print("\n브랜드 신뢰도 평균 값:", avg_trust_increase)
# 광고 영향도와 브랜드 신뢰도의 상관관계 확인
correlation = loaded_data[["Ad Influence", "Brand Trust Increase"]].corr()
print("\n광고 영향도와 브랜드 신뢰도의 상관관계:\n", correlation)
# 캠페인별 광고 영향도 평균 계산
campaign_impact = loaded_data.groupby("Campaign")["Ad Influence"].mean()
print("\n캠페인별 광고 영향도 평균:\n", campaign_impact)
# 캠페인별 브랜드 신뢰도 평균 계산
campaign_trust = loaded_data.groupby("Campaign")["Brand Trust Increase"].mean()
print("\n캠페인별 브랜드 신뢰도 평균:\n", campaign_trust)
# 광고 후 실제 구매율 계산
purchase_after_ad = loaded_data["Purchase After Ad"].value_counts(normalize=True) * 100
print("\n광고 후 실제 구매율(%):\n", purchase_after_ad)
# 향후 동일 브랜드 광고 시청 의향 비율 계산
watch_again_rate = loaded_data["Watch Again Intent"].value_counts(normalize=True) * 100
print("\n향후 동일 브랜드 광고 시청 의향 비율(%):\n", watch_again_rate)
# 광고 영향도 평균값 계산
avg_ad_influence = loaded_data["Ad Influence"].mean()
print("\n광고 영향도 평균 값:", avg_ad_influence)
※ 4)번 단계 중 데이터 시각화 과정 코드 예시
import matplotlib.pyplot as plt
# 광고 시청 여부별 응답자 수 시각화
plt.figure(figsize=(6, 4))
plt.bar(ad_view_counts.index, ad_view_counts.values, color=['blue', 'orange'])
plt.title("Ad Viewing Distribution") # 그래프 제목
plt.xlabel("Ad Watched") # x축 라벨
plt.ylabel("Number of Respondents") # y축 라벨
plt.xticks(rotation=0) # x축 눈금 회전 없음
plt.show()
# 광고 채널별 응답자 수 시각화
plt.figure(figsize=(6, 4))
plt.bar(ad_channel_counts.index, ad_channel_counts.values, color=['blue', 'green', 'red', 'purple', 'orange'])
plt.title("Ad Channel Distribution") # 그래프 제목
plt.xlabel("Ad Channel") # x축 라벨
plt.ylabel("Number of Respondents") # y축 라벨
plt.xticks(rotation=45) # x축 눈금 45도 회전
plt.show()
# 브랜드 신뢰도 상승 평균값 시각화
plt.figure(figsize=(6, 4))
plt.bar(["Average Brand Trust Increase"], [avg_trust_increase], color='cyan')
plt.title("Average Brand Trust Increase Score") # 그래프 제목
plt.ylabel("Trust Score") # y축 라벨
plt.ylim(0, 5) # y축 범위 설정
plt.show()
# 광고 영향도와 브랜드 신뢰도 상승의 상관관계 히트맵 (matplotlib만 사용)
plt.figure(figsize=(6, 4))
plt.imshow(correlation, cmap="Blues", aspect='auto') # 히트맵 설정
plt.colorbar() # 색상 바 추가
plt.xticks(range(len(correlation.columns)), correlation.columns, rotation=45) # x축 라벨 설정
plt.yticks(range(len(correlation.index)), correlation.index) # y축 라벨 설정
plt.title("Correlation: Ad Influence vs. Brand Trust Increase") # 그래프 제목
# 상관관계 값 표시
for i in range(len(correlation.index)):
for j in range(len(correlation.columns)):
plt.text(j, i, f"{correlation.iloc[i, j]:.2f}", ha="center", va="center", color="black")
plt.show()
# 캠페인별 광고 영향도 평균 시각화
plt.figure(figsize=(6, 4))
plt.bar(campaign_impact.index, campaign_impact.values, color='skyblue')
plt.title("Average Ad Influence by Campaign") # 그래프 제목
plt.xlabel("Campaign Name") # x축 라벨
plt.ylabel("Average Ad Influence Score") # y축 라벨
plt.xticks(rotation=45) # x축 눈금 45도 회전
plt.show()
# 캠페인별 브랜드 신뢰도 상승 평균 시각화
plt.figure(figsize=(6, 4))
plt.bar(campaign_trust.index, campaign_trust.values, color='lightcoral')
plt.title("Average Brand Trust Increase by Campaign") # 그래프 제목
plt.xlabel("Campaign Name") # x축 라벨
plt.ylabel("Average Trust Increase Score") # y축 라벨
plt.xticks(rotation=45) # x축 눈금 45도 회전
plt.show()
# 광고 시청 후 구매율 시각화
plt.figure(figsize=(6, 4))
plt.pie(purchase_after_ad, labels=purchase_after_ad.index, autopct='%1.1f%%', colors=['lightblue', 'salmon'])
plt.title("Purchase Rate After Ad") # 그래프 제목
plt.show()
# 향후 광고 시청 의향 시각화
plt.figure(figsize=(6, 4))
plt.pie(watch_again_rate, labels=watch_again_rate.index, autopct='%1.1f%%', colors=['lightgreen', 'lightcoral'])
plt.title("Future Ad Watching Intent Rate") # 그래프 제목
plt.show()
# 광고 영향도 평균값 시각화
plt.figure(figsize=(6, 4))
plt.bar(["Average Ad Influence"], [avg_ad_influence], color='gold')
plt.title("Average Ad Influence Score") # 그래프 제목
plt.ylabel("Ad Influence Score") # y축 라벨
plt.ylim(0, 5) # y축 범위 설정
plt.show()
실습 후기
직접 설문지를 작성하여 내가 설문결과의 데이터를 랜덤하게 작성해보고 이를 데이터화하여 분석하고 시각화하여 보고서를 쓰는 연습을 했다. 가장 어려웠던 점은 데이터 분석과 시각화 코드를 작성하는 것이었다.
어렵더라도 계속 코드를 보면서 잊었던 것을 복습하는 것만이 답이겠지...보고서 또한 랜덤한 데이터로 작성해야해서 정말로 쉽지 않았다. 해야 할 것이 너무너무x100 많다....처음 해보는 것이라 많이 어려웠지만 설문조사 과정과 설문조사에서 얻은 데이터를 가지고 어떻게 작업해야하는지 프로세스를 익힐 수 있어서 의미있는 시간이었다.
'데이터 분석 part' 카테고리의 다른 글
EDA (탐색적 데이터 분석) (0) | 2025.02.20 |
---|---|
그로스 마케팅에서의 그래프 사용, 데이터 변환의 중요성 (0) | 2025.02.19 |
API의 개념과 API 데이터 수집 (1) | 2025.02.17 |
웹 크롤링 개요 (0) | 2025.02.16 |
웹서비스 구현 - 게시판 만들어보기 (0) | 2025.02.16 |