신분당선_데이터마이닝_프로젝트_2주차기록

박종일·2024년 2월 12일
2

신분당선 데이터마이닝 프로젝트 2주차 기록
팀명 : 아신낭
주제 : 신분당선 시간별 수요 데이터 마이닝 프로젝트

팀장 : 아주대학교 박종일
팀원 : 아주대학교 김용찬, 아주대학교 임재환

  • 1주차
    박종일 : 데이터 수집 및 계획 + 데이터 분석(DA), 통계 정리, 데이터마이닝
    김용찬 : 데이터 수집 머신러닝 기법 수립(lightgbm) , 데이터마이닝
    임재환 : 데이터 수집 및 레퍼런스 참조, 데이터 마이닝

  • 2주차
    주제 구체화: 재환 - 카카오 / 용찬 - 넥슨 / 종일 - 포스코 /
    출근길 커피를 들고 신입사원처럼 출근하기!

박종일 : 데이터 수집 및 전처리
김용찬 : 데이터 수집 및 전처리
임재환 : 데이터 수집 및 전처리

import pandas as pd

# 파일 경로
distance_file_path = '국가철도공단_신분당선_역간거리_20231106.csv'
location_file_path = '국가철도공단_신분당선_역위치_20221117.csv'

# 인코딩을 CP949로 설정하여 파일 다시 불러오기
distance_df = pd.read_csv(distance_file_path, encoding='CP949')
location_df = pd.read_csv(location_file_path, encoding='CP949')

# 데이터 확인
distance_df.head(), location_df.head()

# 두 데이터프레임을 '역명'을 기준으로 합치기
pro_df = pd.merge(distance_df, location_df, on=['철도운영기관명', '선명', '역명'])

# 합친 데이터 확인
pro_df.head()

pro_df.to_csv('project_data.csv', encoding='utf8')

# NAN값 처리 - 상현역이므로 위 아래 평균으로 위도, 경도 설정 
# 결측치 처리 함수 정의
def fill_missing_with_avg(df, column):
    # 앞 값으로 채우기
    forward_filled = df[column].fillna(method='ffill')
    # 뒷 값으로 채우기
    backward_filled = df[column].fillna(method='bfill')
    # 평균 값 계산
    avg_filled = (forward_filled + backward_filled) / 2
    return avg_filled

# '경도'와 '위도' 컬럼의 결측치 처리
pro_df['경도'] = fill_missing_with_avg(pro_df, '경도')
pro_df['위도'] = fill_missing_with_avg(pro_df, '위도')

# 결측치 다시 확인
missing_values_after = pro_df.isnull().sum()
missing_values_after[missing_values_after > 0]

# 역명을 광교부터 논현까지 지하철 순서대로 정리하기 
# 광교, 광교중앙, 상현, 성복, 수지구청, 동천, 미금, 정자, 판교, 청계산입구, 양재시민의숲, 양재, 강남, 신논현, 논현 순으로 정리 
station_order = [
    "광교(경기대)", "광교중앙(아주대)", "상현", "성복", "수지구청", "동천", "미금(분당서울대병원)", "정자", "판교(판교테크노밸리)", 
    "청계산입구", "양재시민의숲(매헌)", "양재(서초구청)", "강남", "신논현", "논현"
]

# 역명 순서대로 데이터프레임 재정렬
sorted_df = pro_df.set_index('역명').reindex(station_order).reset_index()

# 재정렬된 데이터 확인
sorted_df

# 새로운 컬럼 추가 - 역간 걸리는 시간(분_단위)
# 광교 - 광교중앙 3분 
# 광교중앙 - 상현 2분
# 상현 - 성복 2분
# 성복 - 수지구청 2분
# 수지구청 - 동천 3분
# 동천 - 미금 3분
# 미금 - 정자 2분
# 정자 - 판교 2분
# 판교 - 청계산입구 6분
# 청계산입구 - 양재시민의숲 3분
# 양재시민의숲 - 양재 2분
# 양재 - 강남 1분
# 강남 - 신논현 1분
# 신논현 - 논현 1분 


# 역간시간 데이터 추가
station_intervals = [0, 2, 2, 2, 3, 3, 2, 2, 6, 3, 2, 1, 1,1,1]

# 역간시간 컬럼 추가 (일부 역이 누락되어 있으므로 리스트 길이 조정 필요)
sorted_df['역간시간(분)'] = station_intervals[:len(sorted_df)] + [None] * (len(sorted_df) - len(station_intervals))
sorted_df['역간시간(분)'] = sorted_df['역간시간(분)'].astype('Int64')  # 결측치를 포함하여 int 타입으로 변경

# 수정된 데이터 확인
sorted_df

# 판교에서 목표로 하는 회사까지 걸리는 시간을 구해보자! (페르소나 기준 포함하기)

관련 레퍼런스

https://openapi.sk.com/products/detail?svcSeq=54&menuSeq=414
https://puzzle.geovision.co.kr/data/%EC%A7%80%ED%95%98%EC%B2%A0-%ED%98%BC%EC%9E%A1%EB%8F%84-d1651451378652
https://youtu.be/DxlujSD_mJU?si=KjnzMJ5PDgYawg_K


개인 공부 정리

박종일

  1. 선형대수 공부

https://github.com/anishathalye/neural-style
2. 이미지 스타일 전이 기법 코드 리뷰

김용찬

  1. 딥러닝 공부 -
    Relation-Classification-using-Bidirectional-LSTM-Tree
    https://github.com/Sshanu/Relation-Classification-using-Bidirectional-LSTM-Tree

임재환

  1. 강화학습 정리 - 관련 레퍼런스 뜯어보기
    https://github.com/topics/reinforcement-learning
    https://github.com/udacity/deep-reinforcement-learning
profile
존경하는 인물: 스토브리그 백승수 단장(남궁민)

0개의 댓글