본문 바로가기

Computer Science/Python8

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.
[파이썬 공식문서] 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.
[파이썬 공식문서] 4. Execution model 파이썬 공식 홈페이지 내 Execution model 문서에 정의된 내용을 정리해본다. 1. 프로그램의 구조 파이썬 프로그램의 기본 구성단위는 코드 블럭이다. 여기서 블럭은 파이썬 프로그램 텍스트가 실행되는 단위를 나타내는데, 모듈, 함수 바디, 클래스 정의부 등이 될 수 있다. 모든 입력된 인터랙티브한 커맨드는 블럭이 된다. 아래와 같이 말이다. print('Hello World!') # 하나의 블럭 > Hello World! 이러한 코드 블럭은 실행 프레임(Execution frame)에서 실행된다. 프레임은 관리정보 등을 가지고 어디서 어떻게 실행이 이어지고 코드 블럭이 실행된 후에는 어떻게 종료할 것인지를 결정한다. 2. 이름과 바인딩 규칙 이름 바인딩하기 파이썬에서 이름(Names)은 오브젝트를.. 2022. 4. 9.