Mini_Project_2

임성진·2024년 1월 28일
0

Mini Project

목록 보기
2/4

서울 지하철 지도

  • 불금이라고 불리는 금요일 저녁 시간대 및 토요일 첫차 시간대 지하철 이용 인원이 많을것으로 예상

데이터 전처리

# 라이브러리 호출
import pandas as pd
import folium

# 데이터 불러오기 및 데이터 확인
data = pd.read_csv('/content/drive/MyDrive/AI스쿨 파일/seoul-metro-2021.logs.csv')
info = pd.read_csv('/content/drive/MyDrive/AI스쿨 파일/seoul-metro-station-info.csv')
data.head()
info.head()

# 필요한 컬럼만 추출하기
info = info[['station.code','geo.latitude','geo.longitude']]
info.head()

# 역 정보 기준으로 그룹화
data_sum = data.groupby('station_code').sum(numeric_only=False)  # 숫자형 데이터 타입 아닌거 있는 경우는 numeric_only=False 해줘야함
data_sum

# 데이터 합치기 위해 info의 인덱스 재설정
info = info.set_index('station.code')

# join 사용해 두 데이터 합치기
joined_data = data_sum.join(info)
joined_data.head()

문제 1

  • 불금 지하철 하차 히트맵 & 토요일 아침 복귀 인원 히트맵

필요 데이터 추출

  • 불금 데이터 추출하기(19시~)
  • 토요일 오전 5~8시 데이터 추출(첫차 시간대)
  • 각각의 데이터를 그룹화 해서 합치기

# 불금 데이터 추출하기(19시~)
friday_data = data[(pd.to_datetime(data.timestamp).dt.weekday == 4) & (pd.to_datetime(data.timestamp).dt.hour > 18)]
friday_data.head()

# 토요일 오전 5~8시 데이터 추출
saturday_data = data[(pd.to_datetime(data.timestamp).dt.weekday==5) & (pd.to_datetime(data.timestamp).dt.hour < 9)]
saturday_data.head()

# 각각의 데이터 그룹화
friday_group = friday_data.groupby('station_code').sum(numeric_only=False)
friday_group.head()

saturday_group = saturday_data.groupby('station_code').sum(numeric_only=False)
saturday_group.head()

# 각각의 데이터 합치기
friday_join = friday_group.join(info)
friday_join.head()

saturday_join = saturday_group.join(info)
saturday_join.head()

금요일 데이터 지도 시각화

from folium.plugins import HeatMap
friday = folium.Map(location=[37.55, 126.98], zoom_start = 12)  # zoom_size - 좌표 위치에서 얼마나 확대된 화면이 첫 화면 될지(0~18)
HeatMap(data=friday_join[['geo.latitude','geo.longitude','people_in']]).add_to(friday)
friday

토요일 아침 데이터 지도 시각화

saturday= folium.Map(location=[37.55, 126.98], zoom_start = 12)
HeatMap(data=saturday_join[['geo.latitude','geo.longitude','people_out']]).add_to(saturday)
saturday

문제 2

  • 2021년 1월 승하차 상위 3개역 하위 3개역 마커로 표시

데이터 처리

# 라이브러리 호출
import pandas as pd
import folium

# 데이터 불러오기 및 데이터 확인
data = pd.read_csv('/content/drive/MyDrive/AI스쿨 파일/seoul-metro-2021.logs.csv')
info = pd.read_csv('/content/drive/MyDrive/AI스쿨 파일/seoul-metro-station-info.csv')
data.head()
info.head()

# 필요한 컬럼만 추출하기
info = info[['station.code', 'station.name_full', 'geo.latitude','geo.longitude']]
info.head()

# 역 정보 기준으로 그룹화
data_sum = data.groupby('station_code').sum(numeric_only=False)  # 숫자형 데이터 타입 아닌거 있는 경우는 numeric_only=False 해줘야함
data_sum

# 데이터 합치기 위해 info의 인덱스 재설정
info = info.set_index('station.code')

# join 사용해 두 데이터 합치기
joined_data = data_sum.join(info)
joined_data.head()

# 2021년 1월 데이터만 추출
data_jan = data[(pd.to_datetime(data.timestamp).dt.year == 2021) & (pd.to_datetime(data.timestamp).dt.month == 1)]
jan_group = data_jan.groupby('station_code').sum(numeric_only=False)
jan_join = jan_group.join(info)

# 승차 상하위 3개 데이터
top_in = jan_join.sort_values(by='people_in')[-3:]
top_in
low_in = jan_join.sort_values(by='people_in')[:3]
low_in

# 하차 상하위 3개 데이터
top_out = jan_join.sort_values(by='people_out')[-3:]
top_out[-3:]
low_out = jan_join.sort_values(by='people_out')[:3]
low_out

승차 상위 3개 역 시각화

# 승차 top 3 역 지도에 표시
top_in_map = folium.Map(location=[37.55, 126.98], zoom_start = 12)

for idx, row in top_in.iterrows():
    folium.Marker(location=[row['geo.latitude'], row['geo.longitude']], popup=row['station.name_full'],
                  icon=folium.Icon(color='blue',icon='star')).add_to(top_in_map)
top_in_map

승차 하위 3개 역 시각화

low_in_map = folium.Map(location=[37.55, 126.98], zoom_start = 12)

for idx, row in low_in.iterrows():
    folium.Marker(location=[row['geo.latitude'], row['geo.longitude']], popup=row['station.name_full'],
                  icon=folium.Icon(color='blue',icon='star')).add_to(low_in_map)
low_in_map

하차 상위 3개 역 시각화

top_out_map = folium.Map(location=[37.55, 126.98], zoom_start = 12)

for idx, row in top_out.iterrows():
    folium.Marker(location=[row['geo.latitude'], row['geo.longitude']], popup=row['station.name_full'],
                  icon=folium.Icon(color='blue',icon='star')).add_to(top_out_map)
top_out_map

하차 하위 3개 역 시각화

low_out_map = folium.Map(location=[37.55, 126.98], zoom_start = 12)

for idx, row in low_out.iterrows():
    folium.Marker(location=[row['geo.latitude'], row['geo.longitude']], popup=row['station.name_full'],
                  icon=folium.Icon(color='blue',icon='star')).add_to(low_out_map)
low_out_map

0개의 댓글