| Week | Data Analysis | Difficulty | This Notebook |
|---|---|---|---|
| 1 | 서울시 인구 데이터 | ⭐️ | |
| 2 | 화장품 성분 데이터 | ⭐️⭐️⭐️ | |
| 3 | 올림픽 데이터 | ⭐️⭐️ | |
| 4 | 국가별 인터넷 사용률 데이터 | ⭐️⭐️ | |
| 5 | 전국 박물관/미술관 정보 표준 데이터 | ⭐️⭐️⭐️ | |
| 6 | 서울시 흡연율 통계 데이터 | ⭐️⭐️ | 👈 |
| 7 | 웹크롤링 | ⭐️ | |
| 8 | 서울시 지하철 호선별 역별 유/무임 승하차 인원 정보 데이터 | ⭐️⭐️ | |
| 9 | 서울시 교통사고 현황 (사고유형별) 통계 데이터 | ⭐️⭐️ | |
| 10 | 서울시 교통사고 현황 (사고유형별) 통계 + 서울시 차량통행속도 (구별/월별) 통계 + 서울시 인구밀도 (구별) 통계 | ⭐️⭐️⭐️ |
'./datas/report.txt'
위의 DataFrame(df_target)을 아래의 조건에 맞게 변경하세요.
조건1: '구분' Column(열)명을 '구분1'로, '구분.1' Column(열)명을 '구분2'로 변경하세요.
조건2: 조건1에 따라 Column(열)명을 변경한 후 '구분1'의 '서울시'를 '시'로, '**구'(예: 양천구, 영등포구)는 '구'로 변경하세요.
조건3: Index, Column 순서 또는 Data 순서(정렬)는 변경하지 마세요.
조건4: 'df_target' 변수에 결과 DataFrame을 할당하세요.
완료 후 결과 DataFrame 변수(df_target)를 check_01_01 함수에 입력하여 채점하세요.

1-1의 DataFrame(df_target)을 아래의 조건에 맞게 변경하세요.
조건1: '여자' Column(열)명의 Data 중 float Type으로 변경할 수 있는 경우 float(numpy.float64)으로 Type을 변경하고, 불가능한 경우 해당 Data의 값을 Null값(None)으로 변경하세요.
조건2: Index, Column 순서 또는 Data 순서(정렬)는 변경하지 마세요.
조건3: 'df_target' 변수에 결과 DataFrame을 할당하세요.
hint1: python 예외처리(try-except)를 활용해보세요.
hint2: 현재 df_target의 '여자' Column(열) data들의 Type은 str입니다.
완료 후 결과 DataFrame 변수(df_target)를 check_01_02 함수에 입력하여 채점하세요.

1-2의 DataFrame(df_target)을 아래의 조건에 맞게 변경하세요.
df_target의 '구분' Column(열) Data 중 '교육수준별Ⅱ(65세 이상)'의 Data들은 Null값이 너무 많아 분석 대상에서 제외하려고 합니다.
조건1: '구분' Column(열)이 '교육수준별Ⅱ(65세 이상)'인 Row(행)을 삭제하세요.
조건2: Index, Column 순서 또는 Data 순서(정렬)는 변경하지 마세요.
조건3: 'df_target' 변수에 결과 DataFrame을 할당하세요.
완료 후 결과 DataFrame 변수(df_target)를 check_01_02 함수에 입력하여 채점하세요.

1단계의 DataFrame(df_target)을 아래의 조건에 맞게 변경하세요.
df_target '여자' Column(열)의 Data에 Null값을 채우고자 합니다.
Null값을 채우는 방법으로는 여러가지가 있는데, 이 Test에서는 '전체'와 '남자', '여자' Column(열)의 Data를 이용하여 '여자비율'을 구하고, '여자비율'의 변화를 확인하여 Null값을 채워보려고 합니다.
df_target.전체 = df_target.여자 x/100 + df_target.남자 (1 - x/100) 에서의 x% 값이 '여자비율'입니다.

조건1: '여자' Column(열)의 Data가 Null값(None)이 아닌 경우 위의 수식에 따른 '여자비율'을 구하여 '여자비율' Column에 입력하세요(위 예시를 참고).
'여자비율' Column(열)의 Data는 소숫점 일곱 번째 자리에서 반올림하여 소숫점 여섯 번째까지 입력해주세요.
'여자비율' Column(열) Data의 Type은 float(numpy.float64)이어야 합니다.
조건2: '여자' Column(열)의 Data가 Null값(None)인 경우 '여자비율' Column에 Null값(None)을 입력하세요(위 예시를 참고).
조건3: Index, Column 순서 또는 Data 순서(정렬)는 변경하지 마세요.
조건4: 'df_target' 변수에 결과 DataFrame을 할당하세요.
hint1: 방정식을 풀기 위한 Python Library로 Sympy 등이 있습니다. 해당 문제는 sympy를 이용해서 풀수도 있고, 비교적 쉬운 1차 방정식이므로 수식을 직접 전개해서 풀어도 상관 없습니다.
완료 후 결과 dataframe 변수(df_target)를 check_02_01 함수에 입력하여 채점하세요.

2-1의 DataFrame(df_target)을 이용하여 아래의 조건에 맞는 정보를 구하여 DataFrame(df_result)으로 나타내세요.
df_target의 '여자' Column Data의 Null값(None)을 채우기 위한 근거로 아래와 같은 정보를 구하려고 합니다.
2-1에서 구한 df_target '여자비율' Column Data의 연간 변동 정도를 '구분2' Column(열) Data 중 '여자비율'이 Null값(None)이 있는 '구분2' Data 별로 다양한 방법(회귀계수(coefficient), MinMax, 평균, 표준편차)을 이용하여 확인해보려 합니다.
회귀계수란?
아래 예시는 아래의 조건에 맞추어 '전체' Column(열) Data의 연간 변동을 '구분2' Column(열) 별로 확인해 본 것 입니다.

조건1: 결과 DataFrame의 Column(열)명은 ['구', '회귀계수', 'MinMax', '평균', '표준편차'] 로 만들어주세요.
조건2: '여자' 또는 '여자비율' Column(열) Data가 Null값(None)이 아닌 Row(행)의 '구분2' Column(열) Data를 구하고, 오름차순으로 정렬하세요.

조건3: 조건2에 해당하는 Data 각각 '기간' Column(열) Data의 변화에 따른 '여자비율' Column(열)의 변동을 나타내는 '회귀계수'를 구하세요. 이 결과를 결과 DataFrame의 '회귀계수' Column(열)에 입력하세요.
조건4: 조건2에 해당하는 Data 각각 '여자비율' Column(열) Data의 최대값과 최소값의 차이(MinMax)를 구하세요. 이 결과를 결과 DataFrame의 'MinMax' Column(열)에 입력하세요.
조건5: 조건2에 해당하는 Data 각각 '여자비율' Column(열)의 평균을 구하세요. 이 결과를 결과 DataFrame의 '평균' Column(열)에 입력하세요.
조건5: 조건2에 해당하는 Data 각각 '여자비율' Column(열)의 평균을 구하세요. 이 결과를 결과 DataFrame의 '표준편차' Column(열)에 입력하세요.
조건6: 조건2의 Data를 순서대로 조건3~5의 값을 구하고 DataFrame을 만든다면, 결과 DataFrame의 '구' Column(열)을 기준으로 오름차순으로 정렬되어 있을 것 입니다. 만약 정렬되어있지 않다면, '구'를 기준으로 정렬하고 Index를 초기화하세요.
조건7: 'df_result' 변수에 결과 DataFrame을 할당하세요.
hint1: 조건3 관련하여 이전에 배웠던 np.polyfit 함수를 응용해보세요.
hint2: 조건3 관련하여 정답 중 '강동구'의 '회귀계수'는 0.052052 입니다.
hint3: 예시1의 그림과 Index/Column이 동일합니다. 안의 숫자만 다릅니다.
완료 후 결과 dataframe 변수(df_result)를 check_02_02 함수에 입력하여 채점하세요.

2-2의 DataFrame(df_result)을 이용하여 아래의 조건에 맞는 정보를 구하여 2-1의 DataFrame(df_target)에 입력하세요.
df_target의 '여자' Column Data의 Null값(None)을 채우기 위해 우선 위에서 구한 df_result값을 이용하려고 합니다.
2-2의 df_result를 보면,
따라서 '기간'(연도) 별로 '여자비율'은 평균에서 큰 차이가 없다고 판단되어 df_target의 '여자비율' Null값(None)에 df_result '구'('구분2') Data의 '평균' Data를 입력하려고 합니다.

조건1: df_result의 '구'별 '평균' Data로 df_target의 '구분2'별 '여자비율' Data 중 Null값(None)을 대체하세요(위 예시 참고).
조건2: 결과 DataFrame(df_target)의 Index, Column 순서 또는 Data 순서(정렬)는 변경하지 마세요.
조건3: 'df_target' 변수에 결과 DataFrame을 할당하세요.
완료 후 결과 dataframe 변수(df_target)를 check_02_03 함수에 입력하여 채점하세요.

2-3의 DataFrame(df_target)을 아래의 조건에 맞게 변경하세요.
이제까지 위에서 구했던 '전체', '남자', '여자비율' Column(열) Data를 활용하여 df_target의 '여자' Column Data의 Null값(None)을 채우려고 합니다.
# df_target.전체 = df_target.여자비율/100 x + (1 - df_target.여자비율/100) df_target.남자 에서의 x% 값이 '여자' 입니다.
조건1: '여자' Column(열)의 Data가 Null값(None)인 경우 위의 수식에 따라 '여자'를 구하여 '여자' Column에 입력하세요.
조건2: 조건1을 수행한 후 '여자비율' Column(열)을 삭제하세요.
조건3: Index, Column 순서 또는 Data 순서(정렬)는 변경하지 마세요.
조건4: 'df_target' 변수에 결과 DataFrame을 할당하세요.
hint1: 2-1과 같이 방정식을 풀기 위한 Python Library로 Sympy 등이 있습니다. 해당 문제는 sympy를 이용해서 풀수도 있고, 비교적 쉬운 1차 방정식이므로 수식을 직접 전개해서 풀어도 상관 없습니다.
완료 후 결과 dataframe 변수(df_target)를 check_02_04 함수에 입력하여 채점하세요.

2단계의 DataFrame(df_target)을 이용하여 아래의 조건에 맞는 정보를 구하세요.
df_target '구분2' Column(열)의 '전체', '남자', '여자' 흡연율이 해마다 단조적(monotonic)으로 증가 또는 감소하는지 확인하고자 합니다.
단조 증가 / 단조 감소
조건1: 결과 DataFrame의 Column(열)명은 ['구분1', '구분2', '전체', '남자','여자'] 입니다.
조건2: '구분2' 별로 '전체', '남자', '여자' Column(열) Data가 '기간'에 따라 단조적으로 변화하는지 아닌지 확인하세요.
조건3: ['구분1', '구분2']를 기준으로 오름차순으로 순서를 변경(sort)하고 Index를 Reset하세요.

조건4: 'df_result' 변수에 결과 DataFrame을 할당하세요.
완료 후 결과 dataframe 변수(df_result)를 check_03_01 함수에 입력하여 채점하세요.

2단계의 DataFrame(df_target)을 이용하여 아래의 조건에 맞는 정보를 구하세요.
df_target '구분2' Column(열)의 '전체', '남자', '여자' 흡연율이 해를 거듭할수록 증가 또는 감소하는지 회귀계수를 통해서 확인하고자 합니다.
회귀계수에 대해서는 앞의 2-2 문제를 참고해주세요.
조건1: 결과 DataFrame의 Column(열)명은 ['구분1', '구분2', '전체', '남자','여자'] 입니다.
조건2: '구분2' 별로 '전체', '남자', '여자' Column(열) Data에 대해 '기간'에 따른 회귀계수를 구하세요.
조건3: ['구분1', '구분2']를 기준으로 오름차순으로 순서를 변경(sort)하고 Index를 Reset하세요.

조건4: 'df_result' 변수에 결과 DataFrame을 할당하세요.
완료 후 결과 dataframe 변수(df_result)를 check_03_02 함수에 입력하여 채점하세요.

3-2의 DataFrame(df_result)을 이용하여 아래의 조건에 맞는 정보를 구하세요.
3-2의 df_result '구분1' Column(열) Data마다 어떤 '구분2' Column(열)의 Data가 '전체' 흡연율 감소율이 높은지/낮은지 알아보고자 합니다.
조건1: 결과 DataFrame의 Column(열)명은 ['구분1', '최대', '최소'] 입니다.
조건2: 회귀계수가 음수(=흡연율이 감소중)인 '구분1' Column(열) Data 중 어떤 '구분2' Column(열) Data가 '전체' 흡연율 감소율이 가장 높은지/낮은지 찾아서 결과 DataFrame에 입력하세요.
조건3: ['구분1']을 기준으로 오름차순으로 순서를 변경(sort)하고 Index를 Reset하세요.

조건4: 'df_maxmin' 변수에 결과 DataFrame을 할당하세요.
완료 후 결과 dataframe 변수(df_maxmin)를 check_03_04 함수에 입력하여 채점하세요.

3-2의 DataFrame(df_result)을 이용하여 아래의 조건에 맞는 정보를 구하세요.
3-2의 df_result '구분1' Column(열) Data마다 어떤 '구분2' Column(열)의 Data가 '여자' 흡연율 증가율이 높은지/낮은지 알아보고자 합니다.
조건1: 결과 DataFrame의 Column(열)명은 ['구분1', '최대', '최소'] 입니다.
조건2: 회귀계수가 양수(=흡연율이 증가중)인 '구분1' Column(열) Data 중 어떤 '구분2' Column(열) Data가 '여자' 흡연율 감소율이 가장 높은지/낮은지 찾아서 결과 DataFrame에 입력하세요.
조건3: ['구분1']을 기준으로 오름차순으로 순서를 변경(sort)하고 Index를 Reset하세요.

조건4: 'df_maxmin' 변수에 결과 DataFrame을 할당하세요.
완료 후 결과 dataframe 변수(df_maxmin)를 check_03_04 함수에 입력하여 채점하세요.
