
SELECT
COUNT(*) AS fish_count
, fish_name
FROM
fish_info fi
JOIN fish_name_info fn
USING(fish_type)
GROUP BY
fish_name
ORDER BY
fish_count DESC
;
WITH fish_get_count AS (
SELECT
fish_type
, COUNT(*) AS fish_count
FROM
fish_info
GROUP BY
fish_type
)
SELECT
g.fish_count
, n.fish_name
FROM
fish_get_count g
LEFT JOIN fish_name_info n
USING(fish_type)
ORDER BY
g.fish_count DESC
;
낙방여우님 코멘트
채점 과정에서 문제가 있는 것으로 보여요. left join과 join의 차이라면 fish_info에 있는 물고기 중에 fish_name_info에 있지 않은 물고기의 유무일 텐데, 서브쿼리로 하지 않고 그냥 join으로 했을 때는 통과 처리가 되고 서브쿼리로 했을 경우에는 join으로 통과가 되지 않고 있어요. 혹시나 싶어서 지금 통과되는 left join에 조건으로 fish_name is not null을 추가하니까 틀리게 되더군요.
무슨 이유로 그것이 통과가 되지 않는건지에 대해서 명확하게 알 수는 없네요.
def solution(s):
i, cnt = 0, 0
while s != '1':
i += 1
c = s.count('1')
cnt += len(s) - c
s = bin(c)[2:]
answer = [i, cnt]
return answer
def solution(s):
zero_count = 0 # 제거된 0의 개수를 저장할 변수
change_count = 0 # 이진 변환의 횟수를 저장할 변수
# s가 "1"이 될 때까지 반복
while s != "1":
# s에서 0의 개수를 세어 zero_count에 더하기
zero_count += s.count("0")
# s에서 1의 개수를 세고, 그 수를 2진법으로 변환한 후, 앞의 '0b'를 제거 후 s에 대입
s = bin(s.count("1"))[2:]
change_count += 1 # 이진 변환의 횟수를 증가
# 이진 변환의 횟수와 제거된 0의 개수를 리스트로 반환
return [change_count, zero_count]
# 1
def solution(s):
iteration, count = 0, 0
while s != '1':
iteration += 1
count += s.count('0')
s = bin(s.count('1'))[2:]
return [iteration, count]
# 2
def solution(s):
from collections import Counter
cnt, zero = 0, 0
while s != '1':
cnt += 1
counter = Counter(s)
zero += counter['0']
s = bin(counter['1'])[2:]
return [cnt, zero]
def solution(s):
count_zero = 0
i = 0
while len(s) > 1 and s != '1':
i += 1
count_zero += s.count('0')
s = bin(s.count('1'))[2:]
return [i, count_zero]
# 1
def binary(num):
if num < 2:
return str(num)
return binary(num // 2) + str(num % 2)
def solution(s):
answer = []
zero_count = 0
repeat_count = 0
while s != '1':
repeat_count += 1
prev_s_length = len(s)
s = s.replace('0', '')
after_s_length = len(s)
zero_count += prev_s_length - after_s_length
c = len(s)
s = binary(c)
answer.append(repeat_count)
answer.append(zero_count)
return answer
# 2
def makeBin(len):
result = []
while len != 0:
if len % 2 == 1:
result.append("1")
len = (len-1)/2
else:
result.append("0")
len = len/2
return result
def solution(s):
answer = []
x = s[:]
zero_count = 0
itr_count = 0
if x == "1":
answer = [0, 0]
else:
while x != "1":
temp = []
itr_count += 1
for i in x:
if i == "1":
temp.append("1")
else:
zero_count += 1
x = "".join(makeBin(len(temp)))
answer = [itr_count, zero_count]
return answer



프로젝트 목표 및 문제 정의
• 프로젝트 목표가 명확하고 SMART 기준에 부합하며, 누구나 이해할 수 있도록 구체적으로 설정되었습니까?
• 해결하고자 하는 문제가 명확하게 정의되었으며, 프로젝트의 필요성과 중요성을 충분히 반영합니까?
데이터 활용 및 실행 계획
• 데이터 활용 및 분석 계획이 구체적이고 실행 가능한가요?
• 제안된 분석 방법론이 문제 해결에 적합하며, 일정 및 마일스톤이 구체적이고 실행 가능합니까?
기대 효과 및 팀 구성
• 기획안에서 목표 달성 시 기대되는 결과물이 구체적으로 명시되었으며, 문제 해결과 목표 달성에 기여합니까?
• 팀원의 역할 분담이 명확히 정의되었고, 프로젝트 진행에 적합합니까?
EDA
• 데이터의 구조와 변수 유형(수치, 범주, 날짜 등)을 정확히 파악하였는가?
• 데이터의 분포와 기술 통계를 요약하여 명확하게 발표하였는가?
데이터 클리닝 및 전처리
• 데이터의 오류, 중복, 불일치를 적절히 수정하였는가?
• 결측치와 이상치를 적절히 탐지하고 처리하였는가?
특성 엔지니어링
• 데이터 분석 목표에 맞게 중요한 특성을 선택하였는가?
• 필요한 파생 변수를 생성하였는가?
• 스케일링 등 변환 작업을 효과적으로 수행하였는가?
결과 해석
• 모델 결과를 명확히 해석하고 설명하였는가?
• 모델 결과가 문제 해결에 어떻게 기여했는지 논리적으로 설명하였는가?
인사이트 도출
• 분석 결과를 통해 도출된 인사이트가 유용하였는가?
• 비즈니스 또는 연구에 실질적인 가치를 제공하였는가?
문서화 및 비주얼화
• 프로젝트 과정, 방법론, 결과를 명확히 문서화하였는가?
• 결과를 효과적으로 시각화하고, 보고서를 명확하고 전문적으로 작성하였는가?
모델 선택
• 문제 유형(군집, 분류, 회귀)에 적합한 모델을 선택하였는가?
모델 구현
• 모델을 정확하게 구현하고 코드 오류를 해결하였는가?
• 모델 성능을 향상시키기 위해 파라미터를 적절히 조정하였는가?
성능 평가
• 문제 유형에 맞는 적절한 평가 지표를 사용하여 모델 성능을 평가하였는가?
• 모델 성능 분석 결과를 명확하고 신뢰성 있게 해석하였는가?
대시보드 설계
• 대시보드가 사용자 요구 사항을 잘 반영하였는가?
• 대시보드의 인터페이스가 직관적이고 사용하기 쉬운가?
데이터 시각화
• 데이터에 적합한 시각화 기법을 사용하였는가?
• 시각적 요소가 데이터의 인사이트를 효과적으로 전달하는가?
대시보드 기능성
• 대시보드의 상호작용 기능 (필터, 드릴다운 등)이 적절히 구현되었는가?
• 대시보드가 빠르고 안정적으로 작동하는가?
좋은 분위기

목표, 일정, 회고
여러분의 프로젝트를 설명할 줄 알아야 합니다.
이터널 리턴 서버 점검(목요일) 중에는 API 사용 불가
최종 프로젝트 담당 튜터님은 소현 튜터님(거의 확정)
소현 튜터님과 상담 진행