TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 데이터 분석>

[파이썬] 프로젝트 : 웹 페이지 구축 - 3(데이터 시각화)

by 기록자_Recordian 2025. 3. 20.
728x90
반응형
이전 내용
 

[파이썬] 프로젝트 : 대시보드 웹 페이지 구축하기 - 2

이전 내용  [파이썬] 프로젝트 : 대시보드 웹 페이지 구축하기 - 1프로젝트 개요 2차 프로젝트를 시작하게 되었다.이번에 해야할 프로젝트는 데이터를 이용한 대시보드 웹 페이지를 구축하는

puppy-foot-it.tistory.com


데이터시각화
2. 캠페인별 방문자, 참여자

 

이번에는 캠페인 데이터를 기준으로 데이터분석 및 시각화를 진행해 보려고 한다.

진행했던 캠페인의 항목은 아래와 같다.

'업사이클링 마켓', '커뮤니티 청소 활동', '워크숍 개최', '홍보 부스 운영', '재활용 품목 수집 이벤트', '재활용 아트 전시', '게임 및 퀴즈'

 

- 월간 캠페인별 방문자수

전체 데이터를 이벤트 종류별, 날짜 기준으로 방문자수, 참여자수로 각각 합계가 집계된 데이터를 생성하고, 이를 월 단위로 집계하여 다시 각 캠페인별 방문자 수를 합산시킨다.

그리고 이를 토대로 라인 차트를 그린다.

# 데이터 집계 및 병합
off_df_ev = off_df.groupby(['이벤트 종류', '날짜']).agg({'방문자수': 'sum', '참여자수': 'sum'}).reset_index()

# 컬럼 이름 변경
off_df_ev.rename(columns={'방문자수': 'VISITORS', '참여자수': 'PART', '날짜': 'DATE', '이벤트 종류': 'CAMP'}, inplace=True)

# 날짜를 datetime으로 형변환
off_df_ev['DATE'] = pd.to_datetime(off_df_ev['DATE'])

# 참여율 칼럼 추가
off_df_ev['P_Ratio'] = (off_df_ev['PART'] / off_df_ev['VISITORS']) * 100

# 'DATE'를 월 단위로 그룹화하고 각 캠페인별 방문자 수를 합산
monthly_visit_ev = off_df_ev.groupby(['CAMP', pd.Grouper(key='DATE', freq='M')])['VISITORS'].sum().reset_index()

# 시각화
plt.figure(figsize=(12, 9))
sns.lineplot(data=monthly_visit_ev, x='DATE', y='VISITORS', hue='CAMP', palette='Set1')

# 그래프 꾸미기
plt.legend(loc='upper center', ncol=4, bbox_to_anchor=(0.5, 1))
plt.title('월간 캠페인별 방문자수')
plt.xlabel('날짜')
plt.ylabel('수')
plt.xticks(rotation=45)
plt.grid(True)
plt.tight_layout()
plt.show()

 

- 월간 캠페인별 참여자수

# 'DATE'를 월 단위로 그룹화하고 각 캠페인별 방문자 수를 합산
monthly_part_ev = off_df_ev.groupby(['CAMP', pd.Grouper(key='DATE', freq='M')])['PART'].sum().reset_index()

# 시각화
plt.figure(figsize=(12, 9))

# Seaborn으로 라인 플롯 생성
sns.lineplot(data=monthly_part_ev, x='DATE', y='PART', hue='CAMP', palette='Set1')

# 그래프 꾸미기
plt.legend(loc='upper center', ncol=4, bbox_to_anchor=(0.5, 1))
plt.title('월간 캠페인별 참여자수')  # 제목 추가
plt.xlabel('날짜')  # x축 라벨 추가
plt.ylabel('수')  # y축 라벨 추가
plt.xticks(rotation=45)  # x축 날짜 라벨 기울리기
plt.grid(True)  # 배경 그리드 추가로 가독성 향상
plt.tight_layout()  # 레이아웃 조정
plt.show()  # 그래프 출력

 

 

- 캠페인별 방문율 (파이차트)

# 데이터 집계
vis_ev = off_df_ev.groupby(['CAMP'])['VISITORS'].sum().reset_index()

labels = vis_ev['CAMP'].unique()
explode = [0.1 for _ in range(len(labels))]  # 모든 섹터를 약간 부풀리기

# 색상 팔레트 설정
colors = sns.color_palette("Set2", len(labels))

plt.pie(data = vis_ev, x='VISITORS', labels=labels, autopct='%.1f%%',startangle=260, 
         colors=colors, explode=explode, shadow=True)
plt.title("캠페인별 방문율")
plt.show()

 

- 캠페인별 참여율 (파이차트)

# 데이터 집계
part_ev = off_df_ev.groupby(['CAMP'])['PART'].sum().reset_index()

labels = part_ev['CAMP'].unique()
explode = [0.1 for _ in range(len(labels))]  # 모든 섹터를 약간 부풀리기

# 색상 팔레트 설정
colors = sns.color_palette("Set1", len(labels))

plt.pie(data = part_ev, x='PART', labels=labels, autopct='%.1f%%',startangle=260, 
         colors=colors, explode=explode, shadow=True)
plt.title("캠페인별 참여율")
plt.show()

 

 


데이터 시각화
3. 각 지역의 캠페인별 누적 막대그래프

 

이번에는 각 지역의 캠페인별 방문자수와 참여자수를 각각 누적 막대그래프로 시각화해 본다.

# 데이터 집계 및 병합
off_df_ct_ev = off_df.groupby(['이벤트 종류', '날짜', '지역']).agg({'방문자수': 'sum', '참여자수': 'sum'}).reset_index()

# 컬럼 이름 변경
off_df_ct_ev.rename(columns={'지역': 'CITY', '방문자수': 'VISITORS', '참여자수': 'PART', '날짜': 'DATE', '이벤트 종류': 'CAMP'}, inplace=True)

# 날짜를 datetime으로 형변환
off_df_ct_ev['DATE'] = pd.to_datetime(off_df_ct_ev['DATE'])

# 참여율 칼럼 추가
off_df_ct_ev['P_Ratio'] = (off_df_ct_ev['PART'] / off_df_ct_ev['VISITORS']) * 100

# 'DATE'를 월 단위로 그룹화하고 각 지역별 방문자 수를 합산
monthly_visit_ct_ev = off_df_ct_ev.groupby(['CITY', 'CAMP', pd.Grouper(key='DATE', freq='M')])['VISITORS'].sum().reset_index()

# 그래프를 그릴 수 있도록 데이터 피벗
pivoted_data = monthly_visit_ct_ev.pivot_table(index='CITY', columns='CAMP', values='VISITORS', fill_value=0)

# 누적 막대그래프 생성
plt.figure(figsize=(10, 5))

# 각 캠페인별로 누적 막대 그래프를 그리기 위한 시작 지점
bottom_values = pd.Series([0] * pivoted_data.shape[0], index=pivoted_data.index)

# 각 캠페인별로 누적 값 추가
for camp in pivoted_data.columns:
    plt.bar(pivoted_data.index, pivoted_data[camp], bottom=bottom_values, label=camp)
    bottom_values += pivoted_data[camp]

# 그래프 꾸미기
plt.title('캠페인누적 방문자수')  # 제목 추가
plt.xlabel('지역')  # x축 라벨 추가
plt.ylabel('누적 방문자수')  # y축 라벨 추가
plt.legend(title='캠페인', loc='best', bbox_to_anchor=(1, 1),
           ncol=1, fontsize=10)  # 범례 설정
plt.xticks(rotation=45)  # x축 라벨 회전
plt.tight_layout(rect=[0, 0, 0.85, 1])  # 레이아웃 조정하여 그래프 안쪽 공간 늘리기
plt.show()  # 그래프 출력

 

- 각 지역의 캠페인별 누적 참여자수 누적 막대 그래프

# 'DATE'를 월 단위로 그룹화하고 각 지역별 참여자 수를 합산
monthly_part_ct_ev = off_df_ct_ev.groupby(['CITY', 'CAMP', pd.Grouper(key='DATE', freq='M')])['PART'].sum().reset_index()

# 그래프를 그릴 수 있도록 데이터 피벗
pivoted_data = monthly_part_ct_ev.pivot_table(index='CITY', columns='CAMP', values='PART', fill_value=0)

# 누적 막대그래프 생성
plt.figure(figsize=(10, 5))

# 각 캠페인별로 누적 막대 그래프를 그리기 위한 시작 지점
bottom_values = pd.Series([0] * pivoted_data.shape[0], index=pivoted_data.index)

# 각 캠페인별로 누적 값 추가
for camp in pivoted_data.columns:
    plt.bar(pivoted_data.index, pivoted_data[camp], bottom=bottom_values, label=camp)
    bottom_values += pivoted_data[camp]

# 그래프 꾸미기
plt.title('캠페인누적 참여자수')  # 제목 추가
plt.xlabel('지역')  # x축 라벨 추가
plt.ylabel('누적 참여자수')  # y축 라벨 추가
plt.legend(title='캠페인', loc='best', bbox_to_anchor=(1, 1), ncol=1, fontsize=10)  # 범례 설정
plt.xticks(rotation=45)  # x축 라벨 회전
plt.tight_layout(rect=[0, 0, 0.85, 1])  # 레이아웃 조정하여 그래프 안쪽 공간 늘리기
plt.show()  # 그래프 출력

 

 

다음에는 연령대별, 성별에 따른 분석을 해본다.


다음 내용

 

[파이썬] 프로젝트 : 대시보드 웹 페이지 구축하기 - 4

이전 내용 [파이썬] 프로젝트 : 대시보드 웹 페이지 구축하기 - 3이전 내용 [파이썬] 프로젝트 : 대시보드 웹 페이지 구축하기 - 2이전 내용  [파이썬] 프로젝트 : 대시보드 웹 페이지 구축하기 -

puppy-foot-it.tistory.com

 

 

728x90
반응형