강의실 배정하기 1탄
수강 신청이 완료되었습니다. 이제 각 과목을 수강하는 학생수에 따라 크기가 다른 강의실을 배치하려고 합니다.강의실은 규모에 따라 “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”가 되어야 합니다.
1탄 과제 해설
먼저 각 과목의 수강 인원을 가져와야겠죠?
status가 "allowed"인 course들에 대해서 수강 인원을 가져와봅시다.
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()
course_counts
arts 158
science 124
commerce 101
english 56
...
mca 5
interior design 5
building construction and mangement 5
nanotechnology 5
Name: course name, Length: 82, dtype: int64
이제 각 과목별로 수강 인원을 확인할 수 있습니다.
강의실 규모에 따라 각 과목을 리스트로 만들어 줍니다.
해당되는 과목 리스트 만들기
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문으로 room assignment 값을 정해줍니다.
# 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"
이제 코드가 완성되었습니다.
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
강의실 배정하기 2탄
이전 과제에서 강의실 크기에 따라 “room assignment” column을 만들어 주었습니다.
이제 이 “room assignment”에 따라 강의실 이름을 붙여주려고 합니다.
아래 세 가지 조건을 만족하도록 코드를 작성하세요.
- 같은 크기의 강의실이 필요한 과목에 대해 알파벳 순서대로 방 번호를 배정하세요.
예를 들어 Auditorium이 필요한 과목으로 “arts”, “commerce”, “science” 세 과목이 있다면, “arts”는 “Auditorium-1”, “commerce”는 “Auditorium-2”, “science”는 “Auditorium-3” 순서로 방 배정이 되어야 합니다. - “status” column이 “not allowed”인 수강생은 “room assignment” column을 그대로 “not assigned”로 남겨둡니다.
- “room assignment” column의 이름을 “room number”로 바꿔주세요.
2탄 과제 해설
먼저, 앞선 과제와 같이 status가 allowed인 수강생들의 과목별 수강 인원을 받아옵니다.
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 이름을 바꿔줍니다.
마지막으로 column 이름을 바꿔줍니다.
# column 이름 바꾸기
df.rename(columns={"room assignment": "room number"}, inplace = True)
코드가 완성되었습니다.
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
요약 : sparta coding club, 스파르타 코딩, 코드잇, 노마드 코더, 프로그래밍, 직장인 코딩, 내일 배움 카드 코딩, 밀크티 코딩, 초등 코딩, 아이스크림 코딩, 코딩 소프트웨어, 구글 데이터 스튜디오, 데이터 웨어 하우스 , 빅 데이터 클라우드
'TESTING > PROGREMING' 카테고리의 다른 글
[데이터 사이언스 코딩 - Chap.14] 실습 음료의 칼로리 문제 풀어보기 (0) | 2021.08.26 |
---|---|
[데이터 사이언스 코딩 - Chap.13] 실습 실리콘밸리에 일하는 사람 찾기 문제 풀어보기 (0) | 2021.08.19 |
[데이터 사이언스 코딩 - Chap.11] 실습 수강신청 준비하기 문제 풀어보기 (0) | 2021.08.08 |
[데이터 사이언스 코딩 - Chap.10] 실습 DataFrame 퍼즐 문제 풀어보기 (0) | 2021.08.03 |
[데이터 사이언스 코딩 - Chap.9] 실습 서류 전형 합격 여부 문제 풀어보기 (0) | 2021.08.02 |