본문 바로가기

Project/2024 빅콘테스트 빅데이터 분석 경진대회 데이터분석 분야

2024 빅콘테스트 빅데이터 분석 경진대회 데이터분석 분야 OD 데이터 분석

728x90
반응형

 

https://github.com/wlgus011221/BigData-Contest

 

GitHub - wlgus011221/BigData-Contest

Contribute to wlgus011221/BigData-Contest development by creating an account on GitHub.

github.com

 

주제 : 2024 빅콘테스트 데이터분석 분야 (OD 데이터 분석을 통한 활용방안 제시)

목표 : 각 축제별 평상시 데이터와 비교하여 축제 기간에 더 활성화 되는지 분석

 

제공된 행정동간 OD 데이터와 행정동별 체류인구 데이터를 활용하기 위해 2023.09.01~2023.10.15에 진행된 축제로 선정

 

선정된 축제

1) 수원화성문화제

2) 부평생활문화축제

3) 송도맥주축제

4) 진주 유등천축제

 

 

제공된 데이터 분석 - OD 데이터

 

성별, 나이대별 축제시 체류인구 수 비교

 

비교할떄마다 T-test를 통해 통계적으로 유의미한 데이터인지 확인

 

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from scipy import stats

# 한글 폰트 설정 (malgun 폰트 사용 예시)
font_path = "C:/Windows/Fonts/malgun.ttf"  
font_prop = fm.FontProperties(fname=font_path)
plt.rc('font', family=font_prop.get_name())

# 행정동 코드 
hdong_cd_list = [4119074400]

# 평상시 (축제일 기준으로 매주 같은 요일 추가)
df_normal_1 = pd.read_csv(r"csv\stay_20230907_1.csv")
df_normal_2 = pd.read_csv(r"csv\stay_20230921_1.csv")
df_normal_3 = pd.read_csv(r"csv\stay_20230928_1.csv")
df_normal_4 = pd.read_csv(r"csv\stay_20231005_1.csv")
df_normal_5 = pd.read_csv(r"csv\stay_20231012_1.csv")

# 축제일
df_festival = pd.read_csv(r"csv\stay_20230914_1.csv")

# 성별 및 나이대 목록 (0: 남자, 1: 여자 / 0~8: 각 나이대)
genders = [0, 1]
ages = list(range(9))  # 0~8까지 나이대

# 그래프 그리기
for gender in genders:
    for age in ages:
        # 평상시 필터링 데이터 생성
        filtered_data_1 = df_normal_1[df_normal_1['hdong_cd'].isin(hdong_cd_list) & (df_normal_1['purpose'].isin([3, 4, 5])) & (df_normal_1['gender'] == gender) & (df_normal_1['age'] == age)]
        filtered_data_2 = df_normal_2[df_normal_2['hdong_cd'].isin(hdong_cd_list) & (df_normal_2['purpose'].isin([3, 4, 5])) & (df_normal_2['gender'] == gender) & (df_normal_2['age'] == age)]
        filtered_data_3 = df_normal_3[df_normal_3['hdong_cd'].isin(hdong_cd_list) & (df_normal_3['purpose'].isin([3, 4, 5])) & (df_normal_3['gender'] == gender) & (df_normal_3['age'] == age)]
        filtered_data_4 = df_normal_4[df_normal_4['hdong_cd'].isin(hdong_cd_list) & (df_normal_4['purpose'].isin([3, 4, 5])) & (df_normal_4['gender'] == gender) & (df_normal_4['age'] == age)]
        filtered_data_5 = df_normal_5[df_normal_5['hdong_cd'].isin(hdong_cd_list) & (df_normal_5['purpose'].isin([3, 4, 5])) & (df_normal_5['gender'] == gender) & (df_normal_5['age'] == age)]

        # 축제일 필터링 데이터 생성
        filtered_data_0 = df_festival[df_festival['hdong_cd'].isin(hdong_cd_list) & df_festival['purpose'].isin([3, 4, 5]) & (df_festival['gender'] == gender) & (df_festival['age'] == age)]
        f_0_sum = filtered_data_0.groupby('time')['stay_cnts'].sum()

        # 각 일자에 따른 지역구 합산
        f_1_sum = filtered_data_1.groupby('time')['stay_cnts'].sum()
        f_2_sum = filtered_data_2.groupby('time')['stay_cnts'].sum()
        f_3_sum = filtered_data_3.groupby('time')['stay_cnts'].sum()
        f_4_sum = filtered_data_4.groupby('time')['stay_cnts'].sum()
        f_5_sum = filtered_data_5.groupby('time')['stay_cnts'].sum()

        # 지역구에 따른 평균
        f_sum = [f_1_sum, f_2_sum, f_3_sum, f_4_sum, f_5_sum]
        avg_df = pd.concat(f_sum).groupby('time').mean()

        # 그래프 그리기
        plt.figure(figsize=(10, 6))
        plt.plot(avg_df.index, avg_df.values, color='blue', label='평상시 체류인구')
        plt.plot(f_0_sum.index, f_0_sum.values, color='red', label='축제시 체류인구')

        # x축의 범위 설정 (특정 시간대부터)
        plt.xlim(0, 15)

        # 그래프 설정
        plt.title(f'평상시 vs 축제시 체류인구 수 (성별: {gender}, 나이대: {age})')
        plt.xlabel('시간 (time)')
        plt.ylabel('체류인구 수 (stay_cnts)')
        plt.legend()
        plt.grid(True)

        # 그래프 보여주기
        plt.show()

        # T-test 계산 및 출력
        group_com = avg_df.values
        group_fes = f_0_sum.values
        ttest_result = stats.ttest_ind(group_com, group_fes)
        print(f'성별: {gender}, 나이대: {age} - T-test 결과:', ttest_result)

 

 

728x90
반응형