15주차 수 1129(교통 데이터_수집_가공 1) :: newb

ABOUT ME

Today
Yesterday
Total
  • 15주차 수 1129(교통 데이터_수집_가공 1)
    광주인력개발원 일일포스팅(메모장) 2023. 11. 29. 16:51
    728x90
    반응형
    한건 샘플링하기
    
    """
     - 여러개의 데이터를 통합하는 경우에는 
     - 한개 파일을 기준으로 사용할 컬럼을 정의하여 가공 후
     - 반복 처리하면 편합니다.
    """
    
    ### 0번 파일의 csv 데이터 읽어들이기
    # - 데이터프레임 이름 : df_bus_card_org
    file_path = "./01_data/org/trfcard(0)/trfcard.csv"
    df_bus_card_org = pd.read_csv(file_path)
    df_bus_card_org.head(1)
    
    	on_date	off_date	route_name	descr	age_type	trans_yn	addfee_yn	start_bstop	start_gps_x	start_gps_y	end_bstop	end_gps_x	end_gps_y
    0	20200102051049	20200102051844	131	양덕-송도-시청-양학-양덕	일반	N	N	양덕차고지	129.401693	36.077258	동부초등학교	129.380866	36.062209

     

    영문 컬럼명을 한글로 수정하기
    
    ### 메타정의서의 영문명, 한글명 컬럼 읽어들이기
    # - 데이터프레임 이름 : df_bus_card_col_org
    file_path = "./01_data/org/trfcard(0)/trfcard_columns.xlsx"
    df_bus_card_col_org = pd.read_excel(file_path,
                                        header=2,
                                        usecols="B:C")
    df_bus_card_col_org.head(1)
    
    	컬럼명 (영문)	컬럼명 (한글)
    0	on_date	승차시각

     

    ### 컬럼명의 이름을 매핑하여 변경하기 위해서는
    # - 컬럼정의 값을 key : value 딕셔너리 타입으로 정의해야함
    # 예시 : {영문명 : 한글명, 영문명 : 한글명....}
    ### df_bus_card_col_org의 데이터를 딕셔너리로 변환하기
    # - iloc[행번호, 열번호] : 인덱스 번호를 이용하는 방식(인덱스 번호)
    print(df_bus_card_col_org.iloc[0, 0])
    print(df_bus_card_col_org.iloc[0, 1])
    print(df_bus_card_col_org.iloc[1, 0])
    print(df_bus_card_col_org.iloc[1, 1])
    print("----------------------------")
    # - loc[행값, 열값] : 눈에 보이는 인덱스 값을 이용하는 방식(인덱스 값)
    print(df_bus_card_col_org.loc[0, "컬럼명 (영문)"])
    print(df_bus_card_col_org.loc[0, "컬럼명 (한글)"])
    
    on_date
    승차시각
    off_date
    하차시각
    ----------------------------
    on_date
    승차시각
    Selection deleted

     

     

    ### df_bus_card_col_org 데이터프레임을 딕셔너리로 변환
    # - 딕셔너리 변수명 : df_bus_card_col_org
    # - 영문명은 key로, 한글명은 value로 만들어주세요..
    # 예시 : {'on_date' : '승차시각', 'off-date' : '하차시각'...}
    df_bus_card_col_new_dict = {}
    for k, v in zip(df_bus_card_col_org.iloc[:, 0], df_bus_card_col_org.iloc[:, 1]) :
        # print(k, v)
        df_bus_card_col_new_dict[k] = v
    
    df_bus_card_col_new_dict
    
    {'on_date': '승차시각',
     'off_date': '하차시각',
     'route_name': '노선명',
     'descr': '노선설명',
     'age_type': '승객연령',
     'trans_yn': '환승여부',
     'addfee_yn': '추가운임여부',
     'start_bstop': '승차정류장',
     'start_gps_x': '승차정류장 GPS X',
     'start_gps_y': '승차정류장 GPS Y',
     'end_bstop': '하차정류장',
     'end_gps_x': '하차정류장 GPS X',
     'end_gps_y': '하차정류장 GPS Y'}

     

     

    ### 컬럼명 변경하기
    # df_bus_card_org = df_bus_card_org.rename(columns=df_bus_card_col_new_dict)
    # - 주소를 바라보게 함
    
    # - inplace=True : 변경사항을 메모리에 반영하기
    df_bus_card_org.rename(columns=df_bus_card_col_new_dict, inplace=True)
    
    df_bus_card_org.head(1)
    
    	승차시각	하차시각	노선명	노선설명	승객연령	환승여부	추가운임여부	승차정류장	승차정류장 GPS X	승차정류장 GPS Y	하차정류장	하차정류장 GPS X	하차정류장 GPS Y
    0	20200102051049	20200102051844	131	양덕-송도-시청-양학-양덕	일반	N	N	양덕차고지	129.401693	36.077258	동부초등학교	129.380866	36.062209

     

     

    """
    <분석 주제>
     - 대주제 : 포항시 버스 이용량 분석
     - 소주제
       (버스 이용량 분석)
       * 기준월 및 기준일자별 버스 이용량 분석 비교
       * 기준일 및 시간대별 버스 이용량 분석 비교
       * 기준시간 및 시간(분)별 버스 이용량 분석 비교
       
       (버스 내 체류시간 분석)
       * 버스 내 체류시간
       * 기준월 및 기준일자별 버스 체류시간 분석 비교
       * 기준일 및 시간대별 버스 체류시간 분석 비교
       * 기준시간 및 시간(분)별 버스 체류시간 분석 비교
       
       * 승하차정류장 구간별 버스 내 체류시간
         - 체류시간(분) 상위 30건 분석 비교
    """

     

    분석을 위한 데이터 가공하기
    
    ### 데이터프레임 복제하기
    df_bus_card_kor = df_bus_card_org.copy()
    
    ### 승차시각과 하차시각 데이터 타입을 문자열로 변환하기
    # - astype() : 데이터 형변환 함수
    df_bus_card_kor = df_bus_card_kor.astype({"승차시각" : "str",
                                              "하차시각" : "str"})
    df_bus_card_kor.info()
    
    #   Column       Non-Null Count  Dtype  
    ---  ------       --------------  -----  
     0   승차시각         16185 non-null  object 
     1   하차시각         16185 non-null  object

     

    ### 분석에 필요한 컬럼 추출하기
    df_bus_card = df_bus_card_kor[["승차시각", "하차시각", "승객연령", "환승여부", "추가운임여부", "승차정류장", "하차정류장"]].copy()
    df_bus_card.head()
    
    승차시각	하차시각	승객연령	환승여부	추가운임여부	승차정류장	하차정류장
    0	20200102051049	20200102051844	일반	N	N	양덕차고지	동부초등학교

     

     

    ### 승차시각과 하차시각의 데이터타입을 날짜타입으로 변경하기
    df_bus_card["승차시각"] = pd.to_datetime(df_bus_card_kor.loc[:,"승차시각"])
    df_bus_card["하차시각"] = pd.to_datetime(df_bus_card_kor.loc[:,"하차시각"])
    df_bus_card.info()
    
     #   Column  Non-Null Count  Dtype         
    ---  ------  --------------  -----         
     0   승차시각    16185 non-null  datetime64[ns]
     1   하차시각    16185 non-null  datetime64[ns]
     
     
     ### 버스 내 체류시간(분단위) 컬럼만들기
    # - 컬럼명 : 버스 내 체류시간(분)
    
    round((df_bus_card.iloc[0,1] - df_bus_card.iloc[0,0]).total_seconds()/60,2)
    
    7.92
    
    ### 체류시간(분) 계산 및 컬럼 생성
    df_bus_card["버스내체류시간(분)"] = round((df_bus_card["하차시각"] - \
                                       df_bus_card["승차시각"]).dt.total_seconds()/60,2)
    df_bus_card
    
    	승차시각	하차시각	승객연령	환승여부	추가운임여부	승차정류장	하차정류장	버스내체류시간(분)
    0	2020-01-02 05:10:49	2020-01-02 05:18:44	일반	N	N	양덕차고지	동부초등학교	7.92

     

    ### 기준년도, 기준월, 기준일, 기준시간, 기준시간(분) 컬럼 셍성하기
    # - 기준년도
    df_bus_card["기준년도"] = df_bus_card["승차시각"].dt.year
    # - 기준월
    df_bus_card["기준월"] = df_bus_card["승차시각"].dt.month
    # - 기준일
    df_bus_card["기준일"] = df_bus_card["승차시각"].dt.day
    # - 기준시간
    df_bus_card["기준시간"] = df_bus_card["승차시각"].dt.hour
    # - 기준시간(분)
    df_bus_card["기준시간(분)"] = df_bus_card["승차시각"].dt.minute
    
    df_bus_card
    
    	승차시각	하차시각	승객연령	환승여부	추가운임여부	승차정류장	하차정류장	버스내체류시간(분)	기준년도	기준월	기준일	기준시간	기준시간(분)
    0	2020-01-02 05:10:49	2020-01-02 05:18:44	일반	N	N	양덕차고지	동부초등학교	7.92	2020	1	2	5	10
    728x90
    반응형
Designed by Tistory.