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) 진주 유등천축제

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

비교할떄마다 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
반응형