[에이블스쿨 3주차] 1차 미니프로젝트 2일차🚍
2일차에는서울시 버스노선별 정류장별 승하차 인원 정보
와 서울시 지하철 호선별 역별 시간대별 승하차 인원 정보
데이터로 실습을 진행했습니다.
# 한글이 포함된 csv 불러오기
pd.read_csv('path.csv', encoding='cp949
버스🚍
💾승하차 인원 정보
https://data.seoul.go.kr/dataList/OA-12912/S/1/datasetView.do
💾버스정류소 위치정보
https://data.seoul.go.kr/dataList/OA-15067/S/1/datasetView.do
이상치 제거
서울시 자료만 필요하기에 나머지(경기도, 가상정류장)는 이상치로 판단해 전부 삭제했습니다.
(TIP📍 지역코드를 활용해 각 자치구를 판단할 수 있습니다.)
# '자치구'라는 새 columns 생성
# 그 안에 값은 '버스정류장ARS번호'의 0부터 2번 앞까지 값을 slice해서 넣어준다
bus['자치구'] = bus['버스정류장ARS번호'].str.slice(start=0, stop=2)
→ 여기에 해당되지 않는 값들은 전부 결측치(NaN)으로 입력되도록 합니다.
- 일치하는 자료 찾기
isin()
: 완전한 일치 / 여러 데이터 타입에서 사용가능contains()
: 부분 일치 / 앞에 str.을 붙여서 오로지 string에서만 사용 가능 - columns 없애기
dropna()
: 결측치가 있는 columns 없애기drop()
: 해당 columns 없애디
서울버스전체데이터 ∩ 서울버스정류소위치정보 → 서울만운행하는버스데이터
df = pd.merge(bus, only_seoul, how = 'inner', on = '버스정류장ARS번호')
구별 데이터 집계
- 합계계산
unique()
: 데이터에 고유값들이 어떠한 종류들이 있는지 알고 싶을때 사용하는 함수nunique()
: 데이터에 고유값들의 수를 출력해주는 함수value_counts()
: 값별로 데이터의 수를 출력해주는 함수
# 서울시 전체의 버스 정류장 개수
df['버스정류장ARS번호'].unique()
# 구별로 정류장 개수를 파악
df.groupby(by=['자치구'], as_index=False)['버스정류장ARS번호'].nunique()
지하철🚎
💾 https://data.seoul.go.kr/dataList/OA-12252/S/1/datasetView.do
datetime
dt.year
: 연도 추출dt.month
: 월 추출dt.day
: 일 추출dt.time
: 시간 추출dt.date
: 날짜 추출dt.dayofweek
: 요일을 정수로 추출dt.day_name()
: 요일을 문자열로 추출
언제 이용자 수가 많을까?
groupby()
를 활용해서 원하는 데이터를 뽑을 수 있다.
df.groupby(['무엇을 기준으로'])['뽑으려는 데이터'].sum().sort_values(ascending=False)
피벗 테이블
df = pd.pivot_table(df, # 피벗할 데이터프레임
index = '행',
columns = '열',
values = '데이터로 이용될 열',
aggfunc = '데이터 집계함수(sum, mean 등)')
느낀점
어제와 다르게 처음 수집된 데이터가 얼마나 깔끔하냐에 따라 데이터 분석이 쉽다는 것을 느꼈습니다.
분명히 어제 모기 데이터보다 더 많은 양이었는데도 명확하게 분류되어 있으니 전처리하는 과정이 편했습니다.
효율적으로 코드를 짜는것도 중요하지만 우리가 필요한 데이터를 뽑아내는 과정을
데이터수집을 할때 정확한 기준으로 나누기 위해 얼마나 힘쓰는지도 알 수 있었습니다😊