본문 바로가기

반응형

분류 전체보기

(369)
"is" vs "==" [개발 잡학/Python] - 파이썬과 객체 파이썬에서 "is"와 "=="는 두 개의 객체가 같은지를 True/False로 반환하는 operator 입니다. 정확하게는 "is"는 identity operator, "=="는 equality operator 인데요, 이번 포스트에서는 이 두개의 operator의 차이를 알아보도록 하겠습니다. "is" "is"나 "is not"은 두 객체의 identity, 메모리 주소가 동일한지를 비교합니다. 즉, 두 객체가 메모리 상에서 같은 곳에 위치하느냐 판단하는 operator인 것이죠. id() 메소드를 이용하면 객체의 메모리 주소를 알 수 있고 (CPython) id() 같은 built-in 함수조차 메모리 상의 주소를 가지고 있음을 알 수 있습니다. >>> h..
Pandas - SettingWithCopyWarning Pandas를 사용해 데이터를 처리하다보면 생성한 데이터프레임에 대해 특정 조건에 따라 값을 재할당하는 경우가 많습니다. 예를 들어 다음과 같은 데이터프레임에 대해서 z 칼럼이 50 미만인 값을 0으로 치환하고 싶다고 합시다. >>> data = {"x": 2**np.arange(5), "y": 3**np.arange(5), "z": np.array([45, 98, 24, 11, 64])} >>> df = pd.DataFrame(data=data, index=["a", "b", "c", "d", "e"]) >>> df x y z a 1 1 45 b 2 3 98 c 4 9 24 d 8 27 11 e 16 81 64 일반적인 방법으로는 df['z'] < 50 구문으로 boolean 마스크를 생성하고 필터링을..
Pytorch - ModuleList vs List Pytorch의 nn 모듈은 neural networks를 위한 다양한 구성 요소 클래스를 제공합니다. 특히, 여러 개의 구성 요소를 하나의 리스트로 담는 nn.ModuleList 객체 또한 많이 사용되는데요, 겉보기에는 일반 파이썬 list와 큰 차이가 없어 보입니다. 다음과 같이 간단한 네트워크를 구성해 보겠습니다. import torch import torch.nn as nn class MyNN(nn.Module): def __init__(self, fc_input_size, fc_hidden_sizes, num_classes): super(MyNN, self).__init__() fcs = [nn.Sequential( nn.Linear(fc_input_size, fc_hidden_size), nn..
Pandas groupby (2) Pandas groupby (1) 지난 포스트에서 pandas groupby 함수의 동작 원리, split-apply-combine에 대해 알아봤습니다. 궁금한 점은 apply 단계에서 단 하나의 operation만 적용할 수 있는 것일까요? 그리고 구현된 mean, median, count 등의 함수 말고 우리가 따로 구현한 통계치는 어떻게 볼 수 있을까요? 이것은 GroupBy 객체에 .agg (aggregation) 메소드를 통해 실행할 수 있습니다. 지난 포스트와 같은 데이터를 이용해 state, gender에 대해 groupby를 수행하고 last_name, first_name, party 칼럼에 대해서 통계치를 보도록 하겠습니다. grouped = df.groupby(['state', 'gen..
Pandas groupby (1) 엑셀, csv 데이터를 다루면서 특정 칼럼 값이 같은 행들만 추리는 작업을 많이 해보셨을겁니다. 엑셀에서는 filter 기능을 이용해 손쉽게 할 수 있지만 pandas 라이브러리에서는 groupby 함수를 이용해야 하는데요, 처음 groupby 함수를 사용하다보면 동작 방식이 명확히 이해되지 않았습니다. 이번 포스트에서는 미국 역대 의원 정보를 담은 다음 데이터를 이용해서 pandas groupby 함수의 동작 방식을 살펴보도록 하겠습니다. 먼저 데이터를 읽습니다. 문자열로 되어있는 칼럼은 공간효율성을 위해 category 타입으로 dtype을 정의합니다. import pandas as pd dtypes = { "first_name": "category", "gender": "category", "typ..
파이썬 실수 내림/올림 파이썬의 math 내장 라이브러리의 floor/ceil 함수는 각각 인자로 주어진 실수를 내림/올림하는 함수로서 실수를 받아 정수를 리턴합니다. from math import ceil, floor, log10 >>> floor(1.025), ceil(1.025) (1, 2) 하지만 실수에 대해서 소수점 몇번째 자리에서 내림/올림 등을 수행하고 싶을 때가 있는데요, 이러한 경우에는 floor/ceil 함수를 이용해 약간의 수학적인 트릭을 이용해야 합니다. 먼저 소수점 자리에 대해서 처음으로 0이 아닌 자리에 대해 내림/올림을 수행해보도록 하겠습니다. 예를 들어 0.001575라면 0.002이 되는 것이죠. 따라서 소수에 대해서 처음으로 0이 아닌 자리를 찾아야하는데 이는 밑이 10인 로그를 취하고 floo..
Pandas Categorical Data 범주형 데이터는 굉장히 많이 존재합니다. 보통 pandas를 이용해 csv나 엑셀파일을 읽어드리면 범주형 컬럼은 pandas에서 문자열을 나타내는 object 타입으로 잡히게 됩니다. 하지만 문자열 자체는 메모리에서 차지하는 공간이 다른 원시타입에 비해 큰 편이고 범주 개수만큼의 문자열이 반복된다면 메모리를 비효율적으로 사용하고 있는 것이겠죠. 이럴 경우에는 pandas의 categorical 타입을 이용할 수 있습니다. 먼저 다음과 같이 5개의 범주를 가진 데이터를 생성하고 sys.getsizeof() 함수를 이용하여 메모리 사용량을 알아보겠습니다. >>> colors = pd.Series([ ... 'periwinkle', ... 'mint green', ... 'burnt orange', ... '..
Shallow copy vs Deep copy 파이썬에서의 assignment operation (=)은 객체의 복사본을 만들지 않습니다. 메모리 상에 존재하는 하나의 객체에 대해 다른 변수이름을 binding 하는 것 뿐이죠. 따라서 리스트와 같은 변경 가능한 객체에 대해서 b=a 를 수행하고 a의 원소값을 변경하면 b의 값 또한 마찬가지로 변경됩니다. >>> a = [1,2,3,4] >>> b = a a[3] = 100 >>> a [1, 2, 3, 100] >>> b [1, 2, 3, 100] 하지만 문자열, 정수와 같은 불변 객체에 대해서는 적용되지 않습니다. a의 값을 다른 값으로 변경하면 a는 메모리 상의 다른 객체를 참조하고 b는 그대로 원래 객체를 참조합니다. >>> a = 10 >>> b = a >>> b 10 >>> a = 'abc'..

반응형