본문 바로가기

머신러닝/프로젝트

버스교통데이터 (데이터전처리)(2)

시나리오

###[버스 이용량 분석] count
# 1. 기준월 및 기준일자별 버스 이용량 분석 비교
# 2. 기준일 및 기준시간대별 버스 이용량 분석 비교
# 3. 기준시간 및 시간(분)별 버스 이용량 분석 비교


### [버스 내 체류 시간] 새로운 컬럼 : 하차시각 - 승차시각
# 1. 기준일 및 시간대별 버스내 체류시간(분) 분석비교
# 2. 시간대별 승객구분별 버스내 체류시간(분) 분석비교
# 3. 시간 및 승객구분별 빈도분석 비교

### [승하차정류장별 버스내 체류시간] 새로운 컬럼 : 승차+하차 정류장 
# 1. 승하차정류장별 버스내 체류시간(분) 상위 30건 비교분석


df_bus_card_kor.info()
# int(정수) 타입은 년월일로 분류 불가

 

승차시각 및 하차시각 타입 변환하기 : 문자형태로

df_bus_card_kor = df_bus_card_kor.astype({"승차시각" : "str"})
df_bus_card_kor = df_bus_card_kor.astype({"하차시각" : "str"})
df_bus_card_kor.info()

 

분석에 필요한 요소(컬럼)을 별도 데이터프레임으로 추출

df_bus_cart = pd.DataFrame()

df_bus_cart["승차시각"] = pd.to_datetime(df_bus_card_kor["승차시각"])
df_bus_cart["하차시각"] = pd.to_datetime(df_bus_card_kor["하차시각"])
df_bus_cart["승객구분"] = df_bus_card_kor["승객연령"]
df_bus_cart["추가운임여부"] = df_bus_card_kor["추가운임여부"]
df_bus_cart["승차정류장"] = df_bus_card_kor["승차정류장"]
df_bus_cart["하차정류장"] = df_bus_card_kor["하차정류장"]

df_bus_cart

 

체류시간 컬럼 생성하기

체류시간 = 하차시간 - 승차시간

df_bus_cart["버스내 체류시간(분)"] = \
    (df_bus_cart["하차시각"]\
         - df_bus_cart["승차시각"]).astype("timedelta64[m]").astype(int) #m(분) 단위로 뽑아내겠다
df_bus_cart.info()
df_bus_cart.describe()

 

기준년도, 기준월, 기준일, 기준시간, 기준시간(분) 컬럼생성

df_bus_cart["기준년도"] = df_bus_cart["승차시각"].dt.year
df_bus_cart["기준월"] = df_bus_cart["승차시각"].dt.month
df_bus_cart["기준일"] = df_bus_cart["승차시각"].dt.day
df_bus_cart["기준시간"] = df_bus_cart["승차시각"].dt.hour
df_bus_cart["기준시간(분)"] = df_bus_cart["승차시각"].dt.minute
df_bus_cart

 

 

모든 데이터 통합하기

위에서 했던 과정을 for문을 사용하여 0번부터 79번 폴더까지 반복실행합니다.

from datetime import datetime

## 실행시간 체크하기
#- 시작 시간
start_date = datetime.today().strftime("%Y-%m-%d %H:%M:%S")

### 최종 통합 데이터를 저장할 데이터프레임
df_bus_card_tot = pd.DataFrame()

### 아래 데이터 통합 프로그래밍 하기..


for i in range(0 ,80, 1):
    ### 1. 파일 읽어들이기
    file_path = "./01_data_원본/trfcard ({})/trfcard.csv".format(i)  
    df_bus_card_org = pd.read_csv(file_path)

    file_path = "./01_data_원본/trfcard ({})/trfcard_columns.xlsx".format(i)
    df_bus_card_col_org = pd.read_excel(file_path,
                                        header = 2,
                                        usecols = "B:C")
    
    ### 영문 칼럼명을 한글로 변환하기
    # 딕셔너리 만들기1 - for문 이용
    df_bus_card_col_new_dict = {}
    for k, v in zip(df_bus_card_col_org["컬럼명 (영문)"],
                     df_bus_card_col_org["컬럼명 (한글)"]) :
        df_bus_card_col_new_dict[k] = v
        
    #원본데이터를 한글컬럼으보 바꾸기
    df_bus_card_kor = df_bus_card_org.rename(columns = df_bus_card_col_new_dict)
    
    ### 채류시간(분) 칼럼추가하기
    # 승차시각 및 하차시각 타입변환하기 : 문자형태로
    df_bus_card_kor = df_bus_card_kor.astype({"승차시각" : "str"})
    df_bus_card_kor = df_bus_card_kor.astype({"하차시각" : "str"})
    
    ### 분석에 필요한 요소(컬럼)을 별도 데이터프레임으로 추출하기
    df_bus_cart = pd.DataFrame()

    df_bus_cart["승차시각"] = pd.to_datetime(df_bus_card_kor["승차시각"])
    df_bus_cart["하차시각"] = pd.to_datetime(df_bus_card_kor["하차시각"])
    df_bus_cart["환승여부"] = df_bus_card_kor["환승여부"]
    df_bus_cart["승객구분"] = df_bus_card_kor["승객연령"]
    df_bus_cart["추가운임여부"] = df_bus_card_kor["추가운임여부"]
    df_bus_cart["승차정류장"] = df_bus_card_kor["승차정류장"]
    df_bus_cart["하차정류장"] = df_bus_card_kor["하차정류장"]
    
    df_bus_cart["버스내 체류시간(분)"] = \
    (df_bus_cart["하차시각"]\
         - df_bus_cart["승차시각"]).astype("timedelta64[m]").astype(int)
    
    ### 기준년도, 기준월, 기준일, 기준시간, 기준시간(분) 컬럼생성
    df_bus_cart["기준년도"] = df_bus_cart["승차시각"].dt.year
    df_bus_cart["기준월"] = df_bus_cart["승차시각"].dt.month
    df_bus_cart["기준일"] = df_bus_cart["승차시각"].dt.day
    df_bus_cart["기준시간"] = df_bus_cart["승차시각"].dt.hour
    df_bus_cart["기준시간(분)"] = df_bus_cart["승차시각"].dt.minute
    
    ### 통합하기
    # igonore_index=True : 기존의 인덱스 번호에 이어서 자동 증가시키기
    df_bus_card_tot = pd.concat([df_bus_card_tot,df_bus_cart], ignore_index=True)
    
#- 종료 시간
end_date = datetime.today().strftime("%Y-%m-%d %H:%M:%S")

print("전체 시작~종료 시간 = ({}) ~ ({})".format(start_date, end_date))
print("전체 데이터 행수 = ", len(df_bus_card_tot))
df_bus_card_tot

 

통합본 파일로 저장하기

### 통합본 파일로 저장하기
df_bus_card_tot.to_csv("./02_data_통합본/df_bus_tot.csv", index = None)