python

python 메모

[pandas] duplicated()의 함정과 모든 중복 데이터 모으기

pandas를 쓰다가 중복된 데이터를 처리할 때 모든 중복 데이터를 확인하고 싶을 때가 있다. 이를 위한 방법을 정리하고자 한다. 1. duplicated()의 함정 아래와 같은 데이터가 있다고 하자. print(data.to_markdown()) >>>> | | class | age | good | |---:|:--------|------:|:-------| | 0 | a | 11 | True | | 1 | a | 10 | True | | 2 | b | 9 | True | | 3 | c | 9 | False | | 4 | c | 7 | False | | 5 | c | 7 | False | duplicated()를 사용하면 중복데이터 중 남겨둘 데이터 하나를 제외한 중복데이터만 보여준다. print(da..

python 메모

[예외처리] try, except, finally

파이썬 예외처리에 사용되는 구문을 정리하고자 한다. 1. try, except, finally a = dict() try: print('Hello World!') print(a['key']) except KeyError: print('KeyError 발생') except: print('다른 Error 발생') finally: print('수고하셨습니다') >>>> Hello World! KeyError 발생 수고하셨습니다 except 부분은 에러 종류별로 다르게 실행할 수 있도록 에러를 지정할 수 있으며, raise와 함께 별도의 에러를 만들 수도 있다. # define Python user-defined exceptions class Error(Exception): """Base class for ot..

python 메모

[python] eval() 내장함수

python 예약어 중 eval이라는 예약어가 있다(무엇에 쓰는 물건인고?). 무엇인지, 언제 쓰는지 알아보자. 1. eval() python3 문서에서는 eval()에 대해 다음과 같이 설명하고 있다. eval(expression[, globals[, locals]]) ... 인자는 '문자열 및 선택적 globals 및 locals'다. (...) 반환 값은 계산된 표현식의 결과입니다. 즉 문자열이나 표현식, 변수들을 입력으로 받아 이를 계산하고 반환해주는 함수이다. 단, 문자열, 표현식, 변수들이 모두 str 타입이어야 한다. 아래는 간단한 예제이다. x = 1 eval('x+1') >>>> 2 2. 문자열 입력 requests 등으로 json, list 등의 데이터를 받는 경우 문자열로 받아지는 경..

python 메모

[python] requests 라이브러리 한글 인코딩

⊙requests 라이브러리에서의 한글 깨짐 현상 한글의 경우 requests, 라이브러리를 통해 전달할 때, 특별히 주의해야 한다. 아래 예시처럼 json이 자동으로 ascii로 변환하기 때문에 입력이 깨져서 전달이 되기 때문이다. import json post_data = {"item": "한글 인코딩"} with open('sample.json', 'w') as f: json.dump(post_data, f) # sample.json 파일 열어보면 아래와 같이 저장되어 있음 {"item": "\ud55c\uae00 \uc778\ucf54\ub529"} 한글 데이터를 json.dump()로 저장하고 해당 파일을 열면 한글이 ascii 인코딩으로 저장이 된다. requests를 통해 데이터를 전달할 때..

개발

[Docker + Flask] 간단한 추론 API 서버 띄우기

Docker Container와 Flask를 활용하여 간단한 딥러닝 모델 추론 API 서버를 만들고자 한다. 추론서버 환경은 ubuntu를 적극 권장하며, 본 포스트에서 주요하게 다루고자 하는 부분은 다음 두 가지이다. 추론 API 서버 띄우기(Docker + Flask) request 라이브러리를 사용한 파일 전송 0. 간단한 Flask tutorial 가장 minimal한 Falsk application은 아래와 같으며, 해당 코드를 flask_test.py로 저장하자. from flask import Flask app = Flask(__name__) @app.route('/hello') def hello(): return 'Hello World!' Flask 공식문서에 따르면 위 코드에 대한 설명은..

python 메모

[pandas] apply + custom function을 사용한 다중 입력 및 출력

DataFrame에서 다중 입력을 받아 다중 출력을 계산하는 경우가 있으며, condition이 복잡한 경우 custom function을 만드는게 좋다. 다음과 같은 상황을 가정해보자. DataFrame의 multiple column을 활용하여 multiple output 계산 새로운 column을 만들어 해당 column을 원래 DataFrame 오른쪽에 append 이때 apply 함수에 result_type='expand' arguement을 사용하면 된다. 0. pandas apply + custom function 다중입출력 아래와 같은 DataFrame이 있을 때, 여러 개의 column을 입력으로 받아 여러개의 새로운 column을 만드는 함수를 적용하려고 한다. df = pd.DataFr..

python 메모

[python] datetime 사용하기

string 형태의 날짜를 datetime 데이터로 바꾸거나 vice-versa로 작업하는 경우를 위해 정리하고자 한다. (1) string → datetime string 데이터를 날짜 형식으로 바꾸기 위해서는 datetime 모듈의 strptime을 사용하면 편하다. 이때 중요한 것은 parsing하는 데이터 포맷을 알맞게 입력해줘야 한다(!) import datetime ## 올바른 포맷 string_data = '21/06/06' datetime.datetime.strptime(string_data, '%y/%d/%m') >>>> datetime.datetime(2021, 6, 6, 0, 0) ## 잘못된 포맷 string_data = '20210606' datetime.datetime.strpt..

python 메모

[python] First-Class Function과 Closure, Decorator

Decorator를 사용하기 위해 공부했던 내용을 정리해두고자 한다. Decorator를 사용하기 위해 이해해야 할 개념은 다음과 같다. 일급함수(first-class function) 클로저(Closure) 데코레이터(Decorator) 1. 일급 함수 (1) 일급 함수의 개념 일급 함수는 컴퓨터 프로그래밍 언어 디자인에서 일급 객체(first-class object)의 함수 버전 개념이다. 위키피디아에 따르면 일급 객체는 '일반적으로 적용 가능한 연산을 모두 지원하는 객채'를 의미하며, 객체에 대한 구체적인 정의는 다음과 같다. 모든 요소는 함수의 실제 매개변수가 될 수 있다. 모든 요소는 함수의 반환 값이 될 수 있다. 모든 요소는 할당 명령문(assignments statements)의 대상(su..

python 메모

[python] 봐두면 유용할 수도 있는 문자열 built-in functions

파이썬에서 문자열 관련 built-in function들 중 알아둔다면 유용할 수도 있는 함수들이 있다. 실제 쓸일이 있을지는 모르겠다. 1. String Validation 1) .isalnum() 'ab123'.isalnum() >>> True '#ab123'.isalnum() >>> False 2) .isalpha() 'abCD'.isalpha() >>> True 'abCD7'.isalpha() >>> False 3) .isdigit() '1234'.isdigit() >>> True '1234F'.isdigit() >>> False 4) .islower() 'abcd123#@'.islower() >>> True 'AbCd123#@'.islower() >>> False 5) .isupper() 'AB..

python 메모

[pandas] DataFrame을 string으로 출력하기

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 ...

python 메모

[pandas] 항목별 개수(value_counts) 그래프 생성

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 조정

pytorch, tensorflow

[tensorflow 2.0] model.save, model.save_weights 차이

tensorflow 2.0 버전부터 model, layer subclassing을 지원한다. 이때 custom model을 학습 후 저장할 때 model.save()를 사용하면 아래와 같은 에러 문구가 뜨는 경우가 발생하는 경우가 있다. >>> ValueError: Model cannot be saved because the input shapes have not been set. Usually, input shapes are automatically determined from calling .fit() or .predict(). To manually set the shapes, call model._set_inputs(inputs). 이 경우 model.save_weights()를 사용하면 해결이 된..

python 메모

[tqdm] tqdm에서 새로운 라인 없이 한 라인으로 출력하기

tqdm을 그냥 쓸 때 종종 실행시간에 따라 계속 새로운 라인으로 출력되는 경우가 발생한다. tqdm을 쓰는 이유가 loop 진행정도를 한줄로 출력해서 보기 위함인데 이를 위해서는 leave=True를 넣어주면 된다. tqdm으로 loop progress 한 줄로 출력하기 from tqdm import tqdm for i in tqdm(range(100), leave=True): print(i) 실행시간이 오래걸리는 loop이더라도 한 라인에서 진행사항이 뜨는 것을 확인할 수 있다

python 메모

[numpy] stack 결과

1) np.vstack & np.stack t = [[1, 2, 3], [4, 5, 6]] np.vstack(t) >> array([[1, 2, 3], [4, 5, 6]]) np.stack(t, axis=0) >> array([[1, 2, 3], [4, 5, 6]]) 2) np.hstack & np.stack t = [[1, 2, 3], [4, 5, 6]] np.hstack(t) >> array([1, 2, 3, 4, 5, 6]) np.stack(t, axis=1) >> array([[1, 4], [2, 5], [3, 6]])

python 메모

[pandas] 배열에 포함된 row만 남기기

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..

Fine애플
'python' 태그의 글 목록