필수 교육을 완강 해씁니다
ㄹㅊㄱㄹㄹㄹㄹ
1. 여행을 좋아하는 익중이는 여행지를 알아보고 있습니다. 주어진 데이터에는 총 몇 개의 도시와 몇 개의 나라가 있는지 알아맞혀 보세요.
df['City / Urban area'].value_counts().shape
df['Country'].value_counts().shape
2. 사람 만나기를 좋아하는 익중이는 가장 사람이 붐비는 도시로 여행을 가기로 마음 먹었습니다. 주어진 데이터에서, 인구 밀도(명/sqKm) 가 10000 이 넘는 도시는 총 몇 개인지 알아보세요.
참고로 인구 밀도는 인구 수 / 땅의 면적 (in sqKm) 로 구할 수 있습니다.
df["Density"] = df["Population"] / df["Land area (in sqKm)"]
df_high_density = df[df["Density"] > 10000]
df_high_density.info()
3. 이번에는 인구 밀도가 가장 높은 도시를 찾아봅시다.
df["Density"] = df["Population"] / df["Land area (in sqKm)"]
density_ranks = df.sort_values(by="Density", ascending = False)
density_ranks['City / Urban area']
4. 익중이는 누나에게 여행지를 추천 받으려고 합니다.
그런데 나라 이름이 기억나지 않고, 이 데이터에서 그 나라에 속한 도시가 딱 4개 들어 있었다는 것만 기억이 난다고 하네요. 이 나라는 무엇일까요?**
import pandas as pd
world_cities = pd.read_csv("data/world_cities.csv")
world_cities['Country']
countries = world_cities['Country'].value_counts()
countries[countries == 4]
수강신청 준비하기
실습 설명
2,000명의 대학교 학생들이 수강신청을 했습니다.
수강신청에는 다음 3개의 조건이 있습니다.
- “information technology” 과목은 심화과목이라 1학년은 수강할 수 없습니다.
- “commerce” 과목은 기초과목이고 많은 학생들이 듣는 수업이라 4학년은 수강할 수 없습니다.
- 수강생이 5명이 되지 않으면 강의는 폐강되어 수강할 수 없습니다.
기존 DataFrame에 “status”라는 이름의 column을 추가하고, 학생이 수강 가능한 상태이면 “allowed”, 수강 불가능한 상태이면 “not allowed”를 넣어주세요.
실습 결과
import pandas as pd
import numpy as np
df = pd.read_csv('data/enrolment_1.csv')
# 여기에 코드를 작성하세요
df['status'] = 'allowed'
df['status'].loc[(df['year'] == 1) & (df['course name'] == 'information technology')] = "not allowed"
df['status'].loc[(df['year'] == 4) & (df['course name'] == 'commerce')] = "not allowed"
# df['course name'].value_counts() < 5
course_counts = df['course name'].value_counts()
df.loc[df['course name'].isin(course_counts[course_counts < 5].index), 'status'] = 'not allowed'
# 테스트 코드
df
import pandas as pd
df = pd.read_csv('data/enrolment_1.csv')
df["status"] = "allowed"
# 조건 1
boolean1 = df["course name"] == "information technology"
boolean2 = df["year"] == 1
df.loc[boolean1 & boolean2, "status"] = "not allowed"
# 조건 2
boolean3= df["course name"] == "commerce"
boolean4= df["year"] == 4
df.loc[boolean3& boolean4, "status"] = "not allowed"
# 조건 3
allowed = df["status"] == "allowed"
course_counts = df.loc[allowed, "course name"].value_counts()
closed_courses = list(course_counts[course_counts < 5].index)
for course in closed_courses:
df.loc[df["course name"] == course, "status"] = "not allowed"
# 테스트 코드
df
대학교 강의실 배정하기 I
실습 설명
수강 신청이 완료되었습니다. 이제 각 과목을 수강하는 학생수에 따라 크기가 다른 강의실을 배치하려고 합니다.
강의실은 규모에 따라 “Auditorium”, “Large room”, “Medium room”, “Small room” 총 4가지 종류가 있습니다.
아래 조건에 따라 강의실 종류를 지정해 주세요.
- 80명 이상의 학생이 수강하는 과목은 “Auditorium”에서 진행됩니다.
- 40명 이상, 80명 미만의 학생이 수강하는 과목은 “Large room”에서 진행됩니다.
- 15명 이상, 40명 미만의 학생이 수강하는 과목은 “Medium room”에서 진행됩니다.
- 5명 이상, 15명 미만의 학생이 수강하는 과목은 “Small room”에서 진행됩니다.
- 폐강 등의 이유로 status가 “not allowed”인 수강생은 room assignment 또한 “not assigned”가 되어야 합니다.
실습 결과
주의 사항: 자동 채점 과제입니다. 정답 출력 코드는 print 없이 작성해 주세요. (예시: df)
꽤나 애 좀 먹은 문제….
로직은 간단한데 코드 구현에 시간이 오래 걸린 듯
결국 힌트 조금 씩 보면서 .. 풀어따
로직은 다시한번 학습하기
import pandas as pd
df = pd.read_csv('data/enrolment_2.csv')
allowed = df["status"] == "allowed"
course_counts = df.loc[allowed, "course name"].value_counts()
auditorium_list = list(course_counts[course_counts >= 80].index)
large_room_list = list(course_counts[(80 > course_counts) & (course_counts >= 40)].index)
medium_room_list = list(course_counts[(40 > course_counts) & (course_counts >= 15)].index)
small_room_list = list(course_counts[(15 > course_counts) & (course_counts > 4)].index)
not_allowed = df["status"] == "not allowed"
df.loc[not_allowed, "room assignment"] = "not assigned"
for course in auditorium_list:
df.loc[(df["course name"] == course) & allowed, "room assignment"] = "Auditorium"
for course in large_room_list:
df.loc[(df["course name"] == course) & allowed, "room assignment"] = "Large room"
for course in medium_room_list:
df.loc[(df["course name"] == course) & allowed, "room assignment"] = "Medium room"
for course in small_room_list:
df.loc[(df["course name"] == course) & allowed, "room assignment"] = "Small room"
# 정답 출력
df
import pandas as pd
df = pd.read_csv('data/enrolment_2.csv')
# 과목별 인원 가져오기
allowed = df["status"] == "allowed"
course_counts = df.loc[allowed, "course name"].value_counts()
# 각 강의실 규모에 해당되는 과목 리스트 만들기
auditorium_list = list(course_counts[course_counts >= 80].index)
large_room_list = list(course_counts[(80 > course_counts) & (course_counts >= 40)].index)
medium_room_list = list(course_counts[(40 > course_counts) & (course_counts >= 15)].index)
small_room_list = list(course_counts[(15 > course_counts) & (course_counts > 4)].index)
# not allowed 과목에 대해 값 지정해주기
not_allowed = df["status"] == "not allowed"
df.loc[not_allowed, "room assignment"] = "not assigned"
# allowed 과목에 대해 값 지정해주기
for course in auditorium_list:
df.loc[(df["course name"] == course) & allowed, "room assignment"] = "Auditorium"
for course in large_room_list:
df.loc[(df["course name"] == course) & allowed, "room assignment"] = "Large room"
for course in medium_room_list:
df.loc[(df["course name"] == course) & allowed, "room assignment"] = "Medium room"
for course in small_room_list:
df.loc[(df["course name"] == course) & allowed, "room assignment"] = "Small room"
# 정답 출력
df
대학교 강의실 배정하기 II
실습 설명
이전 과제에서 강의실 크기에 따라 room assignment column을 만들어 주었습니다.
이제 이 room assignment에 따라 강의실 이름을 붙여주려고 합니다.
아래 세 가지 조건을 만족하도록 코드를 작성하세요.
- 같은 크기의 강의실이 필요한 과목에 대해 알파벳 순서대로 방 번호를 배정하세요.방 번호에 room 은 포함되지 않습니다. 아래 스크린샷을 참고하여 작성해주세요.
- 예를 들어 "Auditorium"이 필요한 과목으로 “arts”, “commerce”, “science” 세 과목이 있다면, “arts”는 “Auditorium-1”, “commerce”는 “Auditorium-2”, “science”는 “Auditorium-3” 순서로 방 배정이 되어야 합니다.
- status column이 “not allowed”인 수강생은 room assignment column을 그대로 “not assigned”로 남겨둡니다. "not allowed" 인 수강생의 room assignment 상태가 변경되지 않도록 유의해주세요.
- room assignment column의 이름을 room number로 바꿔주세요.
실습 결과
주의 사항: 자동 채점 과제입니다. 정답 출력 코드는 print 없이 작성해 주세요. (예시: df)
나는 바로 정렬하고 인덱스 번호 뽑아서 무지성으로 선언했는데
모범답안은 기존에 미리 변수를 선언해주었다.
사실 코드의 왕도는 없지만
변수를 들여쓰는 습관을 들여야겠다.
그리고 컬럼 rename 라이브러리가 있다는 걸 깜빡해따…
import pandas as pd
df = pd.read_csv('data/enrolment_3.csv')
# 여기에 코드를 작성하세요
allowed = df["status"] == "allowed"
course_counts = df.loc[allowed, "course name"].value_counts()
auditorium_list = sorted(list(course_counts[course_counts >= 80].index))
large_room_list = sorted(list(course_counts[(80 > course_counts) & (course_counts >= 40)].index))
medium_room_list = sorted(list(course_counts[(40 > course_counts) & (course_counts >= 15)].index))
small_room_list = sorted(list(course_counts[(15 > course_counts) & (course_counts > 4)].index))
not_allowed = df["status"] == "not allowed"
df.loc[not_allowed, "room number"] = "not assigned"
for course in auditorium_list:
df.loc[(df["course name"] == course) & allowed, "room number"] = "Auditorium-" + str(auditorium_list.index(course)+1)
for course in large_room_list:
df.loc[(df["course name"] == course) & allowed, "room number"] = "Large-" + str(large_room_list.index(course)+1)
for course in medium_room_list:
df.loc[(df["course name"] == course) & allowed, "room number"] = "Medium-" + str(medium_room_list.index(course)+1)
for course in small_room_list:
df.loc[(df["course name"] == course) & allowed, "room number"] = "Small-" + str(small_room_list.index(course)+1)
del df['room assignment']
# 테스트 코드
df
import pandas as pd
df = pd.read_csv('data/enrolment_3.csv')
# 과목별 인원 가져오기
allowed = df["status"] == "allowed"
course_counts = df.loc[allowed, "course name"].value_counts()
# 각 강의실 규모에 해당되는 과목 리스트 만들기
auditorium_list = list(course_counts[course_counts >= 80].index)
large_room_list = list(course_counts[(80 > course_counts) & (course_counts >= 40)].index)
medium_room_list = list(course_counts[(40 > course_counts) & (course_counts >= 15)].index)
small_room_list = list(course_counts[(15 > course_counts) & (course_counts > 4)].index)
# 강의실 이름 붙이기
for i in range(len(auditorium_list)):
df.loc[(df["course name"] == sorted(auditorium_list)[i]) & allowed, "room assignment"] = "Auditorium-" + str(i + 1)
for i in range(len(large_room_list)):
df.loc[(df["course name"] == sorted(large_room_list)[i]) & allowed, "room assignment"] = "Large-" + str(i + 1)
for i in range(len(medium_room_list)):
df.loc[(df["course name"] == sorted(medium_room_list)[i]) & allowed, "room assignment"] = "Medium-" + str(i + 1)
for i in range(len(small_room_list)):
df.loc[(df["course name"] == sorted(small_room_list)[i]) & allowed, "room assignment"] = "Small-" + str(i + 1)
# column 이름 바꾸기
df.rename(columns={"room assignment": "room number"}, inplace = True)
# 테스트 코드
df
'DI(Digital Innovation) > HYUNDAI NGV in Data Analysis' 카테고리의 다른 글
주야경독(feat. HDAT 2) (2) | 2024.11.05 |
---|---|
주경야독(feat. HDAT 1) (2) | 2024.11.05 |
[NGV & KAP 데이터 분석 in 모빌리티] 3주차 (0) | 2024.08.07 |
[NGV & KAP 데이터 분석 in 모빌리티] 2주차 (1) | 2024.08.01 |
[NGV & KAP 데이터 분석 in 모빌리티] 1주차 (1) | 2024.07.22 |