본문 바로가기

반응형

Computer

(114)
Pandas groupby (3) Pandas groupby (1) Pandas groupby (2) Pandas groupby 함수는 dataframe 자료구조에만 사용가능한 함수가 아닌 series 자료구조에도 사용가능합니다. 일반적으로 dataframe(df).groupby(칼럼 이름) 형식으로 사용하지만 1차원 numpy array, 리스트, 시리즈 같은 array-like 자료구조들도 groupby 함수 인자로 들어갈 수 있다는 것이죠. 이번에는 수천 개의 뉴스 자료들을 모은 News Aggregator 데이터를 이용해보도록 하겠습니다. Seperator를 탭으로 지정해주고 칼럼, dtype, date 칼럼 등을 지정해줍니다. import datetime as dt import pandas as pd def parse_milli..
Vectorization Numpy 연산이 매우 빠른 이유는 무엇일까요? 다음과 같이 50만개의 배열에 대해 numpy array 연산으로 1을 더하는 것과 모든 element를 for 문으로 순회하면서 1을 더하는 것은 시간 상의 명백한 차이가 있습니다. Numpy 연산이 수십 배나 빠르죠. import numpy as np from timeit import Timer li = list(range(500000)) nump_arr = np.array(li) def python_for(): return [num + 1 for num in li] def numpy_add(): return nump_arr + 1 >>> print(min(Timer(python_for).repeat(10, 10))) >>> print(min(Timer..
"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 마스크를 생성하고 필터링을..
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', ... '..

반응형