과정 2.1까지는 하위 목표 1과 리스트명만 다르고 거의 비슷하므로 바로 과정 2.1.1을 봅시다. 기준일ID는 data의 열 인덱스 [0](row[0])에 있습니다. 뒤에서 주중과 주말을 구분하는 작업할 때 연도, 월, 일이 각각 필요합니다. 그런데 날짜가 ‘20191201’처럼 공백 없이 붙어 있으므로 이를 분리하는 작업이 필요합니다. 6장에서 배운 문자열 슬라이싱을 적용하면 됩니다. row[0]에 들어 있는 여덟 글자 중 연도를 의미하는 앞 네 자리만 잘라내려면 row[0][:4]로 작성합니다. 잘라낸 값은 데이터 타입이 문자열이므로 int()로 감싸 정수형으로 변경한 후 변수 year에 저장합니다. 같은 방법으로 월(mon)과 일(day)을 저장합니다.
과정 2.1.2에서는 과정 2.1.1에서 구한 연도(year), 월(mon), 일(day)을 datetime.date().weekday()에 넣어 결과로 나온 값을 변수 num에 저장합니다. num이 4 이하면 주중, 5 또는 6이면 주말이므로 과정 2.1.3에서 if-else 문으로 주중, 주말을 판단합니다. 판단 결과 주중이면 weekday 리스트의 같은 시간대([time])에, 주말이면 weekend 리스트의 같은 시간대([time])에 총생활인구수 p를 더하면 됩니다.
과정 4에서는 주중과 주말 일수를 구합니다. 연도와 월은 2019년 12월로 같지만, 일은 1일부터 31일까지 바뀌기 때문에 반복문을 사용합니다. datetime.date().weekday(2019, 12, 일)이 5 미만이면 주중이므로 주중 일수를 의미하는 weekday_cnt에 1을 더하고, 아니라면 주말이므로 주말 일수인 weekend_cnt에 1을 더합니다.
과정 5에서는 주중과 주말 일수를 활용해 주중과 주말의 평균인구를 구합니다. weekday 리스트의 모든 요소를 weekday_cnt로, weekend 리스트의 모든 요소를 weekend_cnt로 나누면 됩니다.