본문 바로가기

Computer Science32

Elastic Search 톺아보기 #4 Aggregations Aggregations은 검색 결과에 대한 집계 데이터를 생성하는 기능이다. 검색 결과를 좀 더 쉽게 요약해서 보고 싶을 때 사용할 수 있다. Aggregations를 사용하여 총 수익, 월별 수익 등 다양한 집계 데이터를 생성할 수 있다. 이를 통해 엘라스틱에서 더 효율적인 검색결과 분석이 가능하다. Query가 원하는 검색에 대한 문서 정보를 반환하는 목적이라면, Aggregations은 원하는 검색에 대한 문서들의 요약을 반환한다. Metric Aggregations Metric Aggregations은 검색 결과에 대한 숫자 데이터 집계를 수행하는 기능이다. 이 기능은 수치 데이터의 요약정보를 쉽게 이해할 수 있도록 해준다. 예를 들어, sum, min, max, avg, .. 2023. 4. 17.
Elastic Search 톺아보기 #3 문장 검색하기 Elastic Stack에서는 match_phrase 쿼리를 사용하여 정확한 문장 검색을 할 수 있다. 이를 사용하면 원하는 구문에 대한 정확한 쿼리를 받을 수 있다. 또한, multi_match 쿼리를 사용하여 여러 필드에서 한 번에 검색할 수 있으며, 필드 당 가중치를 다르게 주어 원하는 결과를 얻을 수 있다. Bool Query를 사용하여 여러 쿼리를 조합하여 검색할 수도 있다. 이러한 문장 검색에 사용되는 쿼리들을 실제 프랙티스에서는 어떻게 적용할 수 있는지 확인해보자. 먼저, 뉴스 헤드라인 데이터셋에서 에드 시런의 "Shape of you"를 검색하는 시나리오를 상상해보자. GET news_headlines/_search { "query": { "match": { "headline.. 2023. 4. 12.
Elastic Search 톺아보기 #2 Precision vs Recall Precision과 Recall은 정적분석에서도 사용되지만 데이터 분석에서도 자주 나타나는 중요한 개념이다. 이 둘은 머신러닝 모델의 성능을 평가하거나, 검색 엔진의 검색 결과를 평가하는 등 다양한 분야에서 사용된다. Precision은 모델이 예측한 결과 중 실제로 정답인 것의 비율이다. 즉, 모델이 Positive로 예측한 것 중에서 실제로 Positive인 것의 비율을 나타낸다. Precision = TP / (TP + FP) 여기서 TP(True Positive)는 모델이 Positive로 예측하고 실제로 Positive인 것의 수를, FP(False Positive)는 모델이 Positive로 예측했지만 실제로 Negative인 것의 수를 나타낸다. Recal.. 2023. 3. 14.
Elastic Search 톺아보기 #1 Elastic Stack은 대용량의 로그, 네트워크, 보안 데이터, 시계열 데이터 및 기타 데이터를 수집, 저장, 검색, 분석하고 시각화할 수 있는 4가지 기술을 의미한다. Elastic Search: 대용량의 데이터를 검색하고 분석 Logstash: 데이터 수집, 가공, 적재 Kibana: 데이터 시각화 웹 인터페이스 Beats: 시스템, 네트워크, 보안 데이터 등을 수집 이 중에서, Elastic Search는 데이터를 저장/검색/분석하는 Elastic Stack의 심장부 역할을 한다. Elastic Search는 언제 사용하는가? Elastic Search는 데이터 검색에서 Speed & Relevancy를 해결해주는 도구이다. 1. 고객이 제품을 검색 Elastic Search는 데이터베이스의 규.. 2023. 2. 12.
Pandas Series와 DataFrame의 차이 데이터 분석시 사용되는 Pandas 라이브러리 API 등의 리턴타입이 Series와 DataFrame으로 나뉘는 경우가 있다. Series와 DataFrame은 거의 유사하지만, 동시에 다른 점이 존재한다. Series/DataFrame이란? Series: Pandas Series는 테이블의 열과 같다. 모든 유형의 데이터를 보유하는 1차원 배열이다. DataFrame: Pandas DataFrame은 2차원 배열 또는 행과 열이 있는 테이블과 같은 2차원 데이터 구조이다. 그래서 뭐가 다른가? Series는 개념적으로 뿐 아니라 말그대로 DataFrame의 단일 열에 대한 데이터 구조이다. 즉, DataFrame의 데이터가 실제로 메모리에는 Series의 컬렉션으로 저장되는 것이다. 또한 행렬은 리스트.. 2022. 11. 19.
객체 참조, 가변성, 재활용 변수는 상자가 아니다 린 안드레아 스타인 교수는 흔히 비유하는 '상자로서의 변수' 개념이 실제로는 객체지향 언어에서 참조 변수를 이해하는 데 방해가 된다고 강조했다. 파이썬 변수는 자바에서의 참조 변수와 같으므로 변수는 상자보다는 객체에 붙은 포스트잇 같은 레이블이라고 생각하는 것이 더 좋다. 변수는 단지 레이블일 뿐이며 객체에 여러 레이블을 붙이지 못할 이유가 없다. 여러 레이블을 붙이는 것을 별명이라고 부른다. 정체성, 동질성, 별명 >> charles = {'name': 'Charles L. Dogson', 'born': 1832} >> lewis = charles >> lewis is charles True >> lewis['balance'] = 950 >> charles {'name': 'Cha.. 2022. 11. 15.
일급 함수 디자인패턴 일급 함수 파이썬의 함수는 일급 객체다. 파이썬에서 함수는 다음과 같은 작업을 수행할 수 있다. 런타임에 생성할 수 있다. 데이터 구조체의 변수나 요소에 할당할 수 있다. 함수 인수로 전달할 수 있다. 함수 결과로 반환할 수 있다. 이러한 파이썬의 일급 함수 성질을 이용하여 함수형 스타일로 프로그래밍할 수 있다. 이 글에서는 함수 객체를 이용하여 전략 패턴을 리팩토링하는 방법을 정리한다. 클래스를 사용한 전략 패턴 위 전략 패턴에 대한 UML에서 들어가는 구성요소는 다음과 같다. 콘텍스트: 일부 계산을 서로 다른 알고리즘을 구현하는 교환 가능한 컴포넌트에 위임하여 서비스를 제공 전략: 여러 알고리즘을 구현하는 컴포넌트에 공통된 인터페이스 구체적인 전략: 전략의 구성 서브클래스 중 하나 전략 패턴의 예는 .. 2022. 11. 14.
dict와 set의 내부구조 많은 사람들은 파이썬 dict와 set이 빠른 것을 안다. 또한 이들의 key 순서가 유지되지 않는 것도. 이러한 dict와 set의 특성을 내부구조를 파악하며 설명해보려고 한다. 성능 실험 다음과 같은 예제에서 haystack 안에 있는 needles를 검색하고 발견된 횟수를 찾는 프로그램을 비교 실험한다. found = 0 for n in needles: if n in haystack: found += 1 실험결과는 fluentpython.com의 아래 테이블을 참조하였다. haystack의 크기를 10배씩 늘려가며 각각의 자료구조에서 키를 검색하는데 걸리는 시간을 비교하였다. 예상했던 바와 같이 haystack의 크기가 10,000X로 천만단위가 되어도 dict와 set의 키 검색시간은 3.5~5... 2022. 11. 12.
+= 복합 할당 문제 파이썬 튜플은 Immutable Sequence이다. 그러나, 튜플에는 복합 타입의 원소들을 다룰 수 있고, 이에 대해 += 연산자를 사용하였을 때 이상한 일이 발생한다. 아래와 같은 (int, int, list[int]) 타입의 튜플에 += 연산자를 사용하면 무슨 일이 발생하겠는가? >> t = (1, 2, [3, 4]) >> t[2] += [5, 6] t가 (1, 2, [3, 4, 5, 6])가 된다. 튜플 객체는 item assignment 연산을 지원하지 않는다는 에러메세지와 함께 타입에러 발생 놀랍게도 두가지 일이 동시에 일어난다. >> t = (1, 2, [3, 4]) >> t[2] += [5, 6] Traceback (most recent call last): File "", line 1, .. 2022. 11. 12.
Machine Learning for Production (MLOps) 이 강의에서 앤드류 응 교수는 머신러닝 모델을 잘 개발하는 것 뿐 아니라, 머신러닝 시스템을 운용하고 모델 및 데이터의 오류분석을 수행하는 MLOps의 전체 과정에 대해서 설명한다. 강의 내용은 좀 더 포괄적이지만 이 글에서는 핵심의 내용 위주로 정리해보려고 한다. MLOps란 무엇인가? MLOps, Machine Learning Operations의 약자로, 머신러닝 프로젝트 라이프사이클의 전체 프로세스를 각각의 단계에서 지원하는 도구들의 집합과 원칙들을 포함하는 전부를 이야기한다. 이는 머신러닝 프로젝트에서의 문제정의, 데이터 생성, 모델링(학습), 배포의 단계를 모두 포함한 것이다. 또한, 각각의 시스템적 단계에서 그것들을 지원하는 SW 도구까지 모두 포함하는 것이 MLOps이다. 머신러닝 시스템에.. 2022. 10. 6.
A Taste of GPU 이 프레젠테이션에서 발표자인 라프 르비엔은 GPU에 프로그래밍 하는 좋은 방법은 사실 함수형 프로그래밍이며, 함수형 프로그래밍이야말로 문제를 작은 단위로 쪼개어 각 상태끼리의 의존관계가 진짜 함수 단위로 명백한 것이라고 한다. 그는 GPU 위에서 동작하는 고성능의 렌더링 프로그램 예시를 들어 GPU 프로그래밍의 구조를 설명한다. 왜 GPU에서 코드를 돌리고 싶을까? 기존의 칩 제작자들은 무어에 법칙에 따라 칩 위에 트랜지스터 갯수를 늘리는 트렌드에 따랐지만 15년전후로부터는 데너드 스케일: 칩이 또한 속도가 계속 빨라진다는 법칙을 따랐다. 이 말인즉슨, 이제 싱글코어 성능을 향상에 퍼포먼스 향상을 기대하는 것은 끝났고, 현대의 컴퓨터 칩에서 성능향상을 도모할 수 있는 방법은 병렬화와 멀티코어 뿐이라는 것.. 2022. 9. 12.
Columnar Database는 무엇인가? Columnar Database는 무엇인가? Columnar Database, 열 기반 데이터베이스는 데이터를 행 기반이 아닌 열 기반으로 저장하는 데이터베이스를 의미한다. 이러한 열 기반 데이터베이스의 목적은 쿼리로부터 처리하는 속도를 높이기 위해 하드디스크 스토리지에 데이터를 효과적으로 읽고쓰기 위함이다. 이러한 열 기반 데이터베이스는 디스크 입출력 성능을 현저히 증가시키며 특히 데이터 분석과 데이터 웨어하우스 작업에 용이하다. Columnar vs. Row-base 열 기반 데이터베이스를 전통적인 행 기반 데이터베이스와 비교해보면 장단점은 아래와 같다. (전통적인) 행 기반 데이터베이스 더 잘하는 것 Incremental한 데이터 로드 온라인 트랜잭션 처리 용도 적은 수의 행을 포함하는 쿼리 열 기.. 2022. 8. 15.
[파이썬 공식문서] 3. Data model 파이썬 공식 홈페이지 내 Data model 문서에 정의된 내용을 정리해본다. 1. 객체, 값 그리고 타입 객체란 파이썬의 데이터 추상화 방식이다. 모든 데이터는 객체, 혹은 객체들 사이의 관계로 정의된다. (폰 노이만의 프로그램 내장방식 모델에 따라, 코드도 또한 객체로 표현될 수 있다.) 모든 객체는 본질을 갖는데, 그게 바로 값과 타입이다. 파이썬에서 한번 객체가 생성된 후, 이 값과 타입은 절대 바뀌지 않는다. CPython 구현 디테일 CPython에서 id(x)는 x가 저장된 주소를 나타낸다. 파이썬에서 타입은 객체가 한번 정의된 후 바뀌지 않는데, 값을 바뀔 수 있다. 정확히는 바뀌는 값이 있고(mutable), 바뀌지 않는 값이 있다(immutable). 이러한 객체의 mutability는.. 2022. 7. 19.
파이썬 GIL이란 무엇인가? 최근 파이썬으로 서비스 개발을 하며 퍼포먼스에 대한 여러가지 시행착오를 겪고, 성능 병목을 만드는 GIL에 대해 공부하게 되었다. 완전하진 않지만 나에게 필요한 부분 위주로 글을 정리해본다. 파이썬 GIL이란? GIL은 Global Interpreter Lock의 약어로, 여러 개의 스레드가 파이썬 바이트코드를 한번에 하나만 사용할 수 있게 락을 거는 것을 의미한다. 쉽게 말해서 하나의 스레드만 파이썬 인터프리터를 제어할 수 있도록 하는 뮤텍스라고 보면 된다. 이게 무슨 의미냐면, 파이썬 프로그램은 특정 시점에 오직 하나의 스레드만 실행된다는 것이다. 파이썬 멀티 스레드 프로그램에서 멀티 스레드가 싱글 스레드처럼 동작하는 성능병목 현상을 발견할 수 있다. 몇몇의 개발자들은(혹은 대다수?) 이러한 GIL의.. 2022. 5. 31.
Git Commit / Branch / Merge 로 프로젝트 관리하기 개발자로 협업할 때 Git을 사용하는 것은 아무리 잘써도 부족하지가 않은데, 최근에 이에 관련하여 좋은 조언들을 많이 얻었고 스스로 복기하고자 한다. 항상 Best Practice일 수는 없지만, Worst Practice는 최소한 피해보자는 마음에 해당 글을 작성해본다. Git Commit 커밋 메세지 작성하기 - 커밋의 단위는 최대한 작은 작업 단위로 - 한번에 몰아서 하는 대신에 여러번 자주 - 커밋 메세지는 남들에게 보여주는 규칙이다 One Line Comment ``` line feed ``` Detailed Description - 위와 같은 구조가 되면 좋은데, 예를 들면 이런 식이다 Refactor A module to fix B error This commit is dealing with.. 2022. 5. 12.