728x90
반응형
데이터 처리 시각화 (1)
🍀 포항시 버스데이터 수집 가공 시각화
- URL : 국가교통 데이터 오픈마켓
- 데이터 명 : 포항시 BIS 교통카드 사용내역
🍀 메타 정의서

샘플링
🍀 1 건 샘플링하기
- 여러개의 파일 데이터를 통합하는 경우에는 한개 파일을 기준으로 사용할 컬럼을 정의하여 가공 후 반복 처리하면 편하다.
- 0번 파일의 csv 데이터 읽어오기
- 데이터프레임 이름 : df_bus_cart_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)
🍀 결측치가 있는지 정보확인하기
df_bus_card_org.info()

- 행의 갯수 16185
- 열의 갯수 13
- age_type 결측치 존재
컬럼명 수정하기
🍀영문 컬럼명을 한글로 수정하기
- 데이터프레임 이름 : df_bus_cart_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

🍀df_bus_cart_col_org의 데이터를 딕셔너리로 변환하기
- 컬럼명의 이름을 매핑하여 변경하기 위해서는 컬럼정의 값을 key : value 딕셔너리 타입으로 정의해야 함
- 예시 : {영문명 : 한글명, 영문명 : 한글명....} - Index로 값 조회해보기
- iloc[행, 열] index location : 인덱스 번호를 이용하는 방식
- 특정 위치에 접근할 때 iloc를 많이 사용한다 - loc[행값, 열값] : 눈에 보이는 인덱스 값을 이용하는 방식
- iloc[행, 열] index location : 인덱스 번호를 이용하는 방식
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("-----------------------------")
print(df_bus_card_col_org.loc[0, "컬럼명 (영문)"])
print(df_bus_card_col_org.loc[0, "컬럼명 (한글)"])

- 딕셔너리 변수명 : df_bus_card_col_new_dict
- 영문명은 key로, 한글명은 value로 만들기
- 예시 : {'on_date' : '승차시각', 'off_date' : '하차시간'} - 방법 1
df_bus_card_col_new_dict = dict(zip(df_bus_card_col_org["컬럼명 (영문)"],
df_bus_card_col_org["컬럼명 (한글)"]))
print(df_bus_card_col_new_dict)

- 방법 2
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

🍀컬럼명 변경하기
- 메모리에 반영되지 않고 보이는 것만 바꿈
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)
데이터 분석하기
🍀분석 주제
- 대주제 : 포항시 버스 이용량 분석
- 소주제
<버스 이용량 분석>
* 기준월 및 기준일자별 버스 이용량 분석 비교
* 기준일 및 시간대별 버스 이용량 분석 비교
* 기준시간 및 시간(분)별 버스 이용량 분석 비교
<버스 내 체류시간 분석>
* 기준월 및 기준일자별 버스 체류시간(하차시간 - 승차시간) 분석 비교
* 기준일 및 시간대별 버스 체류시간 분석 비교
* 기준시간 및 시간(분)별 버스 체류시간 분석 비교
* 승하차정류장 구간별(정류장 체류시간의 합) 버스 내 체류시간
- 체류시간(분) 상위 30건 분석 비교
🍀 분석을 위한 데이터 가공하기
- 데이터 프레임 복제하기
df_bus_card_kor = df_bus_card_org.copy()
- 승차시각과 하치시간 데이터 타입을 문자열로 변환하기
- astype() : 데이터 형변환 함수. replace 지원안하기 때문에 바뀐 형상을 자기 자신에게 반영시켜야 한다.
df_bus_card_kor = df_bus_card_kor.astype({"승차시각" : "str",
"하차시각" : "str"})
df_bus_card_kor.info()

승차시각과 하차시각의 Dtype이 object로 변환
- 분석에 필요한 컬럼 추출하기
df_bus_card = df_bus_card_kor[["승차시각", "하차시각", "승객연령", "환승여부",
"추가운임여부", "승차정류장", "하차정류장"]].copy()
df_bus_card.head()

- 승차시각과 하차시각의 데이터 타입을 날짜타입으로 변경하기
- 문자만 날짜 타입으로 바꿀 수 있음
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()

승차시각과 하차시각의 Dtype이 datetime으로 변환
🍀 가공한 데이터 새로운 컬럼으로 만들기
- 버스 내 체류시간(분단위) 컬럼만들기
- 컬럼명 : 버스내 체류시간(분)
(df_bus_card.iloc[0, 1] - df_bus_card.iloc[0, 0])

- 위의 결과에서 total_seconds를 사용해 결과를 초단위로 변환하고 60을 나누어 분으로 나타난다.
round((df_bus_card.iloc[0, 1] - df_bus_card.iloc[0, 0]).total_seconds()/60,2)

- 체류시간(분) 계산 및 컬럼 생성
- .dt : 행 하나하나를 date type으로 바꿔서 실행
df_bus_card["버스내체류시간(분)"] = round((df_bus_card["하차시각"] - \
df_bus_card["승차시각"]).dt.total_seconds()/60,2)
df_bus_card

- 기준년도, 기준월, 기준일, 기준시간, 기준시간(분) 컬럼 생성하기
# - 기준년도
# .dt.year : 날짜 타입에서 연도만 추출
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

728x90
반응형
'Digital Boot > Database' 카테고리의 다른 글
[Data Wrangling] 데이터 전처리 시각화 - 히트맵 / 막대그래프 / histplot / 선그래프 (1) | 2023.11.30 |
---|---|
[Data Wrangling] 데이터 처리 시각화 (2) (0) | 2023.11.30 |
[Data Wrangling] 데이터베이스 프로그램 실습 (1) | 2023.11.29 |
[Data Wrangling] 데이터베이스 프로그램 (2) | 2023.11.29 |
[Data Wrangling] 데이터베이스 테이블에 저장하기 (0) | 2023.11.28 |