Decorator를 사용하기 위해 공부했던 내용을 정리해두고자 한다. Decorator를 사용하기 위해 이해해야 할 개념은 다음과 같다. 일급함수(first-class function) 클로저(Closure) 데코레이터(Decorator) 1. 일급 함수 (1) 일급 함수의 개념 일급 함수는 컴퓨터 프로그래밍 언어 디자인에서 일급 객체(first-class object)의 함수 버전 개념이다. 위키피디아에 따르면 일급 객체는 '일반적으로 적용 가능한 연산을 모두 지원하는 객채'를 의미하며, 객체에 대한 구체적인 정의는 다음과 같다. 모든 요소는 함수의 실제 매개변수가 될 수 있다. 모든 요소는 함수의 반환 값이 될 수 있다. 모든 요소는 할당 명령문(assignments statements)의 대상(su..
matplotlib.pyplot을 활용하여 여러개의 subplot을 사용하는 방법은 간단하다. 다음과 같은 데이터가 있고 각 label별 class의 분포를 하나의 figure에서 표현하고자 한다. plt.subplot은 각 subplot을 그릴 때 호출하면 되며 (nrow, ncolumns, index) 값을 넣어주면 된다. nrows: 총 row 개수 ncolumns: 총 column 개수 index: 해당 subplot이 몇 번째 subplot인지 plt.figure(figsize=(16,12)) for plot_idx, col in enumerate(nd.columns): d = nd[col] c_val = d.value_counts().to_dict() n_dict = dict() for i, ..
regexr.com의 regex cheatsheet은 여기가 유용하다. 1) re.split() 특정 기호 그룹으로 문자열을 나눌 때 사용한다 # input: '100,200,300.400' # output: '100 200 300 400' import re regex_pattern = r"[,.]" s = '100,200,300.400' ' '.join(re.split(regex_patter, s)) 2) re.group() regex pattern에 매치되는 문자열 리스트를 얻고 싶을 때 사용한다. import re s = 'useful@python.codes' m = re.match(r'(\w+)@(\w+)\.(\w+)', s) print(m) >>> m.groups() >>> ('useful', ..
1) any() any()는 입력으로 받은 iterable 중 적어도 하나의 원소가 True이면 True를, 모두 False면 False를 출력한다. any([1,2,3]) >>>> True any([1>0, 1==0, 1>>> True any([1>> False 2) all() all()은 입력으로 받은 iterable의 모든 원소가 True이면 True를, 적어도 하나가 False라며 False를 출력한다. all([1,2,3]) >>>> True all([1,2,False]) >>>> False all([1,2,0]) >>>> False all(['a'>> True
dataframe을 이미지가 아닌 string으로 print하고 싶을 때 아래 코드로 출력 가능하다. 다음과 같은 데이터가 있다고 하자. jupyter notebook 등에서 print하는 방법은 다음과 같다. with pd.option_context('display.max_rows', None, 'display.max_columns', None): print(df) >>> col 0 a 1 a 2 b 3 a 4 a 5 a 6 b 7 a 8 a 9 b 10 b 11 c ...
pandas에서 항목별 개수를 세고 matplotlib없이 바로 histogram을 그릴 수 있다. 다음과 같은 데이터가 있다고 하자. data.shape >>> (610292,1) data >>> col 0 a 1 a 2 a 3 a 4 a 5 a 6 b 7 a 8 b 9 a 10 c 11 b 12 a ... 아래 코드로 항목별 개수 그래프를 생성할 수 있다. CountStatus = pd.value_counts(data['col'].values, sort=True) CountStatus.plot.bar() CountStatus.plot.bar(grid=True, figsize=(10,8), fontsize=15) # figsize, fontsize 조정
json 데이터를 url로 받아올 수 있다. 파일을 받아서 이를 서버에 올리고 import 하는 것 보다 훨씬 편하다. requests 라이브러리를 사용하면 가능하다. import requests url = 'https://korquad.github.io/dataset/KorQuAD_v1.0_dev.json' data = requests.get(url).json()
tqdm을 그냥 쓸 때 종종 실행시간에 따라 계속 새로운 라인으로 출력되는 경우가 발생한다. tqdm을 쓰는 이유가 loop 진행정도를 한줄로 출력해서 보기 위함인데 이를 위해서는 leave=True를 넣어주면 된다. tqdm으로 loop progress 한 줄로 출력하기 from tqdm import tqdm for i in tqdm(range(100), leave=True): print(i) 실행시간이 오래걸리는 loop이더라도 한 라인에서 진행사항이 뜨는 것을 확인할 수 있다
pandas를 통해 특정 조건에 만족하는 값들을 남기는 경우 apply, lambda를 사용할 수도 있지만, 다른 방법도 있어서 정리하고자 한다. isin()을 활용한 배열에 포함된 row만 남기기 다음과 같은 데이터가 있다고 하자 data = pd.DataFrame( {'a':['A','A','B','B','B','C'], 'b':[1,2,5,5,4,6], 'c':[-1,3,-3,2,5,6] }) a b c 0 A 1 -1 1 A 2 3 2 B 5 -3 3 B 5 2 4 B 4 5 5 C 6 6 이때 항목 $a$의 값이 배열 $['B','C']$에 포함된 row만 남기고 싶다고 할때, isin()을 활용하면 된다. data['a'].isin(['B', 'C']) 0 False 1 False 2 True..
pandas는 boolean 연산을 지원하기 때문에 column별 apply를 적용하여 데이터를 다루면 실행시간이 훨씬 빠르며 코드가 간단하다. 다중컬럼을 적용하는 방법은 몇 가지가 있지만 가장 직관적이며 기억하기 쉬운 방법을 소개하고자 한다. 1. 다중 컬럼(multiple columns)에 apply 사용하기 다음과 같은 데이터가 있다고 하자. data = pd.DataFrame( {'a':['A','A','B','B','B','C'], 'b':[1,2,5,5,4,6], 'c':[-1,3,-3,2,5,6] }) a b c 0 A 1 -1 1 A 2 3 2 B 5 -3 3 B 5 2 4 B 4 5 5 C 6 6 이때 항목 $b,c$가 모두 양수인 데이터만 남기고 싶다고 하자. $b$와 $c$ 컬럼을 모..
0. pandas groupby A groupby operation involves some combination of splitting the object, applying a function, and combining the results. This can be used to group large amounts of data and compute operations on these groups. pandas groupby 메소드는 전체 데이터를 그룹별로 나누고(splitting), 각 그룹별로 동일한 함수를 적용하고(applying), 그 결과를 하나로 합쳐(combine) 결과를 return 한다. - pandas groupby documentation - pandas groupby user gui..