데이터
[SQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 - 조인 & 상관중첩질의
프로그래머스 Lv1 다음 문제를 풀어보자. FISH_INFO와 그리고 FISH_NAME_INFO 두 개의 테이블이 존재하고, join을 활용하면 쉽게 풀리는 문제이다. 하지만 단순하게 하나의 SQL 방법에 의존하게 되면, 향후 복잡한 쿼리를 사용할 때 제한적인 생각에 갇힐 수도 있다. 따라서 상관 중첩 질의를 이용해서도 풀이를 작성해놨다. (상관 중첩 질의 내용 포스팅은 여기로) Join 문을 이용한 코드 SELECT count(*) AS FISH_COUNT FROM fish_info as f INNER JOIN fish_name_info as n ON f.fish_type = n.fish_type WHERE n.fish_name in ('BASS', 'SNAPPER') ; 위 코드는 단순하게 전체 결과..
[백준 24313] 점근적 표기 1 문제 풀이 & 해설 - 파이썬
백준 24313 문제에 대해 풀어보겠습니다. 이 문제는 알고리즘 수행 시간에 관한 문제로 "점근적 표기 (asymptotic notation)"에 관해 알고 있는지를 묻고 있습니다. Background: 점근적 표기 점근적 표기에 대해 간략히 설명을 하자면, Big-O를 계산할 때 입력값의 크기에 따라 함수가 얼마나 빨리 커지는지 알아볼 때 중요하지 않은 항과 상수 계수를 제거하면서 이해를 방해하는 불필요한 부분을 없앤 표기법이라고 볼 수 있습니다. 즉, 간략한 예로 $ y = 0.0006n^3 - 1000 $라고 했을 때, $O(y)=n^3$ 가 되는 반면에, $ x = 1000n^2 + 1000 $의 Big O는 $O(x)=n^2$ 가 되기 마련입니다. 따라서 y의 수행시간이 x보다 더 크다고 할 수..
[SQL] 검색 - 목록 검색 연산자와 중첩 질의 Nested Query (2)
SQL에서 목록 검색 연산자라고 하면 IN과 NOT IN이 있다. IN 연산자는 일반적으로 주 질의의 WHERE 절에서 하나의 컬럼 값이 하위 질의가 반환한 결과 목록에 포함되는지 확인을 하는 역할을 한다. 지난 첫번째 중첩질의 포스팅에서도 다뤘지만, 하위 질의는 테이블(뷰) 형태를 반환할 수 있기 때문에 두개 이상의 값을 취할 수 있다. 주 질의는 WHERE 절의 컬럼 값이 하위 질의의 결과 목록에 포함되면 True를 반환한다고 이해하면 된다. 예시를 들어보자. 다음과 같은 3개의 테이블(emplyee, department, dependent) 이 존재한다고 가정해보자. 예제 1) 관리자인 사원의 정보를 검색 중첩질의를 활용해 이 문제를 해결해보자면 다음과 같이 SQL을 만들어서 원하는 답을 구할 수..
[SQL] 조건에 부합하는 중고거래 댓글 조회 (프로그래머스)
프로그래머스 SQL LV1 문제중 가장 질문 게시판이 핫한 문제중 하나를 들고 와봤다. 이 문제는 두 테이블 (게시판 & 댓글)을 활용하여 쿼리를 작성하는 전형적인 join 과 관련된 문제이다. 이 문제는 DATE 형태만 제대로 작성하면 문제없이 원하는 결과물을 만들 수 있다. 올바른 DATE 포맷 사용하기 -> DATE_FORMAT() 함수 활용 SELECT b.TITLE, b.BOARD_ID, r.REPLY_ID, r.WRITER_ID, r.CONTENTS, DATE_FORMAT(r.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE FROM USED_GOODS_BOARD b INNER JOIN USED_GOODS_REPLY r ON b.BOARD_ID = r.BOARD_ID ..
[Spark] 아파치 스파크 - 3가지 핵심요소 (통합, 컴퓨팅엔진, 라이브러리)
[ 본 페이지는 스파크 완벽 가이드 (Spark - the Definitive Guide) 책을 토대로 작성되었습니다 ] 막연하게 스파크(Spark)를 처음 공부하면, 당최 이 스파크라는 친구가 '뭐하는 녀석일까?' 라는 생각에 잠길 수 있습니다. 데이터를 저장하고, SQL도 사용하고, 파이썬 연동도 되고... 물론 숙련된(?) 데이터 엔지니어나 학습자 같은 경우에는 아니겠지만, 처음 빅데이터 세계에 입문했다면 스파크를 DBMS와의 차이점을 찾아내기가 쉽지 않을수도 있습니다. 책의 내용을 빌려 스파크를 설명하자면 스파크는 '빅데이터를 위한 통합 컴퓨팅 엔진과 라이브러리 집합' 입니다. 그렇다면 스파크가 어떻게 기존 DBMS와 다르고, 또 다른 빅데이터 플랫폼인 하둡과는 또 어떻게 다른지 핵심 3요소를 살..
[변수 중요도] Feature Importance와 Permutation Importance
머신러닝/딥러닝 모델을 해석하는 방법과 시도가 점점 늘어나고 있다. 변수간의 인과관계를 알려주진 않지만, "어떤 변수가 가장 큰 변화를 만들어냈는지", "특정 변수가 결과에 긍정/부정적인 영향을 끼쳤는지" 등과 같은 결과에 대한 이유에 대해서 해석할 수 있는 방법은 다양한 기법을 통해 알 수 있다. 이번 포스팅에는 그중에서도 Feature Importance와 Permutation Importance에 대해 알아보고자 한다. Feature Importance Feature Importance는 일반적으로 Random Forest와 같은 트리 계열의 앙상블 모델을 사용하면 쉽게 얻을 수 있다. 단순 해석하면 '변수(특징) 중요도' 정도로 해석할 수 있는데, 매커니즘 자체는 불순도를 감소시키는 정보 증가량에..
고윳값과 고유벡터
고윳값, 고유벡터는 데이터 분석 분야에 다양하게 활용된다. 특히 다변량(변수가 많이 존재하는) 경우에서 활용가치가 무궁무진하다고 할 수 있다. 이는 바로 ‘데이터의 좋은 성질을 공유하고, 이 좋은 성질을 최대한 보존한 채로 행렬을 단순화 할 수 있는 방법’을 공유할 수 있기 때문이다 [ 고윳값, 고유벡터, 고윳값 분해 ]에 대해서 본격적으로 알아보기 위해서라면 행렬대수의 기본적인 공부를 선행할 필요가 있다. (역행렬, 가역행렬, 일차독립, 행렬연산 등등..) 임의의 행렬 A와 임의의 행렬 B가 어떤 경우에 ‘닮은 행렬’이 되는지에 대해서도 이해할 필요가 있으며, 닮은 행렬이 되었을 경우 두 행렬의 행렬식이 같고, 대각합(trace)이 똑같음을 직관적으로 이해할 수 있어야 한다. ‘닮은 행렬’을 이해했다면..
내적과 코사인유사도 (dot product & cosine similarity)
벡터끼리의 내적은 매우 유용한 정보를 줄 수 있다. 이를 테면, 인공지능의 다양한 연산에 기초가 되기도 하며, 이미지 인식, 음성 인식 그리고 구매 이력에 기반한 상품 등을 추천할 때 최종 엔진에서 활용되는 연산이기도 하다. 이게 어떻게 가능한 지에 대한 원리를 알아보려면, 우선 내적의 식을 유도할 필요가 있다. 간단하게 내적을 정의해보자 정의) 내적(inner product = dot product) 임의의 두 벡터 \( \mathbf{a}=(a_1, a_2) \) 와 \( \mathbf{b}=(b_1, b_2) \)에 대해서 내적은 다음과 같이 정의될 수 있다. $$ \mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 = \mathbf{b}^T \mathbf{a} $$ ..