| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 특정값지우기
- 깃허브
- AI #Inductive_Bias #Relational_inductive_bias
- AI #RNN #LSTM #LSTMP #인공지능 #언어학습 #순차학습
- tensorflow #tensorflow-gpu #python #ubuntu #텐서플로우
- Asyncio
- pandas #python #excel #판다스 #파이썬 #엑셀저장 #xlsxwriter
- aiohttp
- mnist
- Github
- 파이썬
- TensorFlow
- Python
- tf.where
- pandas #ewma #python #지수이동가중평균 #파이썬 #판다스 #ema #ewm
- 비동기모듈
- pandas #python #date #datetime
- fashionmnist
- git
- python #pandas #data_preprocessing #data_process
- 시계열데이터
- SQL #python #MySQL #PostgreSQL
- SQL #PostgreSQL
- 판다스 #Pandas #DataFrame #Statistics #통계 #파이썬 #Python #Resample
- ngrok
- REST_API
- MachineLearning
- 깃
- 선형회귀
- version_error
- Today
- Total
목록Python (12)
린스토리
API로 DL 모델을 실행하면서 동시에 다수의 모델을 train 시키고 싶었다. 이 과정에서 asyncio 라이브러리를 접하게 되었고, 이 라이브러리에 대해 개념을 설명하고자 한다. 동기와 비동기 "동기(Synchronous)"란 동시에 일어난다, 라는 뜻을 가지고 있다. 즉, 요청과 그 결과가 동시에 일어난다는 뜻이다. 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다. "비동기(Asynchronous)"란 동시에 일어나지 않는다, 라는 뜻을 가지고 있다. 즉, 요청과 그 결과가 동시에 일어나지 않을 것이라는 뜻이다. 이 둘은 상황에 따라 장단점이 있다. 동기 방식은 설계가 간단하고 직관적이지만 결과가 주어질 때까지 다른 작업을 하지 못하고 대기해야 한다는 단점이 있다. 비동기 ..
ML 모델을 서빙하기 위해 RestAPI로 만들어 배포하고자 했다. 이 과정에서 ML 모델을 모니터링 하는 시스템을 직접 구축하고자 했고, 실시간으로 Train의 결과를 뽑아 제대로 학습이 이루어지는지 확인하고 싶었다. 실시간 값 변동에 따라 출력값이 나오도록 하는 방법을 찾다가 Websocket을 알아보게 되었고, 공부하는 겸 한 번 더 정리해 기록을 남기기로 했다. API API는 어플리케이션 프로그래밍 인터페이스(Application Programming Interface)의 줄임말로, 어플리케이션 소프트웨어를 구축하고 통합하는 정의 및 프로토콜 세트이다. API의 가장 핵심은 "호출"과 "응답"이다. 예를 들어, 우편번호 찾기를 한다고 했을 때, 클라이언트는 '도로명 주소'를 입력해 서버에게 우편..
ML 모델을 Flask를 사용해 RestAPI로 만든 후, 비동기로 다수의 모델을 동시에 돌리고자 비동기모듈을 지원해주는 asyncio와 HTTP 요청을 위한 aiohttp를 활용해 모델을 호출했다. 그런데 한 모델을 호출할 때는 괜찮았는데, 2개 이상의 모델을 호출하고자 하면 제목과 같은 에러가 나오게 됐다. 한 번 모델을 호출했는데 거기에 하나 더 호출하고자 하니 서버 연결이 끊긴다는 건데.. 어떻게 해결하면 되는지 알아보자. 에러를 잡고자 검색을 하니 아래와 같은 설명을 발견했다. The server could limit the duration of a TCP connection. By default, aiohttp uses HTTP keep-alive so that the same TCP conn..
딥러닝 모델을 서빙하는 과정에서 로컬 서버에서 api로 띄워놓고, 외부 노트북에서 접속해 train을 호출하는 구조로 만들고 싶었다. 회사 내부에서 로컬 서버를 구축해 사용하고자 하였고, 공용으로 쓰는 네트워킹이어서 별도 포트포워딩이 필요 없는 상태에서 test를 해보고 싶었다. 그래서 간단하게 Flask로 RestAPI를 만들어 내 노트북에서 api를 실행시켜 보도록 해보았다. Flask 간단하게 flask로 test 구문을 작성했다. from flask import Flask app = Flask(__name__) @app.route("/hello", methods=["GET"]) def hello(): return "hello world" if __name__ == "__main__": app.ru..
코드 실행을 하다가 str 변환 구문에서 에러가 났다. 왜 생긴 에러인지, 어떻게 해결하는지 알아보자. 에러가 나온 부분의 코드는 다음과 같았다. user = self.train_user_df['user_id'][row] # type: str hardware_label.setText(str(train_setting_log[str(user)]['hardware'])) user의 type을 print했을 때, 로 나온다. 두번째 줄의 코드에서 보면, dictionary의 키로 user를 넘기는데, 이미 str인 타입에 또 한 번 str로 감싼 것을 볼 수 있다. 은 다음과 같이 정의된다. 기본적으로 str로 형변환을 할 때, encoding default로 'utf-8'이 적용된다. 그런데 이미 타입이 st..
Key 와 Value로 이루어진 Dictionary에서 특정 value를 가진 key를 삭제하고 싶을 때, RuntimeError: dictionary changed size during iteration 이런 에러를 만났다. 해결하는 방법에 대해 알아보자. 이렇게 dictionary를 만들었다. value가 4000인 key를 지우고자 다음과 같이 코드를 작성해보았다. for key in test_dict.keys(): if test_dict[key] == 4000: test_dict.pop(key) 그랬더니, 이런 에러가 나왔다. Dictionary에서 값을 지우고 싶을 때는 두 가지 방법이 있는데, 1. Pop () 2. Del [] method를 사용하는 것이다. 두 방법의 차이점은, 1. Pop..
EWMA (Exponentially Weighted Moving Average) _ 지수가중평균 시간순서대로 나열되어 있는 데이터에 활용되며, 현재를 기준으로 오래된 값엔 낮은 가중치를 부여하고, 최근 값은 높게 부여하여 평균값을 도출하는 것 시계열 데이터를 다루다가 현재와 가까운 값이 더 중요함을 알려주고 싶어 고민하다가, EWMA를 적용한 데이터로 가공하자는 생각이 들었다. 이를 Pandas에서 api로 제공하여 손쉽게 사용할 수 있는 방법을 소개하고자 한다. (자세한건 여기) 내가 EWMA를 적용한 방식은 다음과 같다. 이 수식을 위 api를 활용해 적용하면, import pandas as pd df = pd.DataFrame({'test': [540, 320, 680, 120, 960, 450]}..
Pandas로 만든 DataFrame을 Excel로 저장하는 법을 알아보자. 근데 만들다보면 DataFrame이 여러개 생길 수 있고, 이걸 한 파일 내로 시트를 나눠 저장하고 싶을 때가 있다. 어떻게 하는지 알아보자! Pandas 모듈은 설치되어 있겠지만, 만약 'xlsxwriter' 모듈이 설치되어 있지 않다면 설치해주도록 하자. pip install xlsxwriter or conda install -c conda-forge xlsxwriter 이제 pandas dataframe이 있는 코드로 가서, 다음과 같이 해본다. # 1. excel writer 선언 writer = pd.ExcelWriter('./test.xlsx', engine='xlsxwriter') # 2. dataframe을 exc..
Pandas DataFrame은 왠만한 기능이 다 갖춰져 있어 데이터 가공이나 통계에 사용하기 매우 편리하다. 오늘은 기능 중 Time 기준으로 알아서 월별/주별/일별로 통계를 내주는 기능에 대해 알아보고자 한다. 우선, 다음과 같은 table이 있다고 생각해보자. table에서 time을 기준으로 월별 통계를 낸다고 해보자. 이걸 일일히 time의 month를 추출해서 1,2,3,4,5월에 해당하는 데이터만 따와서 평균이나 합계를 구할 필요없이 pandas에서 제공하는 아주 유용한 함수를 사용하면 된다. 바로, "Resample" 이라는 함수이다. RESAMPLE resample 함수는 time-series data에 적용하기 위한 함수이다. 자세한 설명은 여기에서 확인하면 된다. 그럼 바로 적용해보자..
Pandas를 활용해 Start Date와 End Date를 입력받아 날짜를 생성할 때 다음과 같이 사용하면 된다. pd.date_range(start = start_date, end = end_date, freq = 'D') # 'D': 1일 간격 생성 (Default) # 'W': 1주 간격 생성 # 'M': 1달 간격 생성 # 'A': 1년 간격 생성 'str' type으로 입력받은 날짜를 pandas date format 변환 date = '2022-06-19' pd_date = pd.to_datetime(date) 'str' type으로 입력받은 날짜 연산하기 date = '2022-06-19' after_date = pd.to_datetime(date) + pd.Timedelta(days=1)