파이썬 코드에서 동기화 문제 (경쟁상태,데드락) 등 어려운 버그에 대한 정확한 진단이 필요로 할 때가 있다.
파이썬에서의 디버깅에 대해서 공부해보자.

파이썬에서 디버깅이란(PDB) 

pycharm 에서 디버깅

파이썬에서 사용하는 디버깅 방법들

데드락 로깅모듈


저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by [前草] 이승현 (wowlsh93@gmail.com)


한주의 마지막이네요. 항상 건강 유념하시고~ 주말에는 푹 쉬시고 햇볕도 받으며 적절한 운동하시길 바랍니다.이번 글은 남의 글 2개를 읽고 정리 및 가벼운 코멘트 해보았습니다. 경어가 아닌점 양해해 주십시요. (_._) 



비동기와 동기 네트워킹 I/O 에 대한 성능차이 


위의 링크 글을 읽어보면 대략 이렇다.
@ 사람이 증가할때의 초당처리율(QPS), 빨리응답해주는능력(Latency), CPU 사용율은 큰 차이 없다.
@ 메모리 사용율은 큰차이로 비동기가 좋다.

CPU 사용량 차이 - 거의 없다.

메모리 사용량 차이 - 심하다.

응답 빨리 해주는 차이 (낮을수록 좋음) - 별로 없다

얼마나 많은 처리를 할 수 있나 (높을수록 좋음) - 큰 차이 없다. 


따라서 메모리를 적극적으로 사용해도 문제가 없다면 그냥 동기써라~ 훨씬 코드작성하기도 좋고 가독성도 좋다. 그러니깐 관리하기도 좋고 버그도 줄어들고 버그가 생겨도 더 명확하겠뭐 이런 내용이다. 

나도 비동기를 나름 잘 안다고 생각하는데도 불구하고 거의 대부분의 소켓통신 코드는 동기통신으로 짠다. 즉 SELECT나 IOCP 류를 사용하지 않는 다는 말~ 같은 사람이 아래와 같은 글도 썼다.


Node.js 를 사용 할 이유가 없어요.


Node 를 쓸 필요가 없단다. 다른 좋은것들이 많기 때문에~~뭐 주로 성능 측면( 근데 성능비교를 boost.Asio 랑 해놓아서..좀) 에서 그렇게 바라보는거 같다.그리고 비동기코드가 가지고 있는 비 직관성 때문에~~

내 생각도 비슷하지만 사람들이 많이 사용하는 이유로는 프런트엔드랑 동일한 언어로 개발하는것 , 코드길이가 비교적 짧고, 단일 CPU서도 비교적 좋은 성능을 보인다고 볼 수도 있겠다. 덕분에 사용자층이 두텁다. 공개 모듈도 많고~

빨리 응답해주는 차이 (낮을수록 좋다) 

얼마나 많은 처리를 할 수 있나 (높을수록 좋음) 

@ 참고로 위의 boost.Asio 는 C++ 라이브러리이며 ,  비동기도 사용하지 않은 결과이다.쩐다..

저 블로그 저자의 결론은 이렇다

Node.js 웹싸이트에서 머라고 선전하건 간에, 노드는 쉽게 사용하기 어렵고, 확장하기 어렵고 응답성도 낮은 편인데 노드를 왜 써? 그럼 무엇을 쓰냐고?  내가 생각하는것은 아래와 같아~  
GreatC++, Rust
Pretty GoodJava, C#, Scala, Go
MehRuby, Python
GarbageJavascript, PHP


음 C++ 빠(단순 성능빠)인거 같은데.. (자바스크립트,노드를 안좋아하는 것에 있어선 나와 비슷함) 성능만으로 선택하기엔 웹개발 세계는 매우 다양한 요소가 버무려져 있다는 거라.... 다만 분명한것은 대부분의 경우 비동기에 목맬 필요는 없다는 것 정도?? 얻는 것보다 잃는게 훨씬 더 크니깐~~


p.s  참고로 저런 벤치마킹은 그냥 벤치마킹으로 받아드리면 된다. 맹신하지 말것이며 본인 스스로의 환경에서 중요 컨텍스트에 맞게 벤치마킹을 직접 해보는게 정확하다.

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by [前草] 이승현 (wowlsh93@gmail.com)


Time series Forecasting in Machine Learning [번역 예정] 


https://medium.com/99xtechnology/time-series-forecasting-in-machine-learning-3972f7a7a467



“데이터의 시간적 패턴을 탐지하는 방법”

데이터에서 시계열 패턴/특성을 이해하는 것은 비지니스 데이터의 경향을 표출하거나 분석하는 측면에서 매우 크리티컬 해 지고 있다.

유즈케이스 1 :  피트니스 디바이스 마켓은 사용자가 운동함에 있어서 더 효율적인 방식을 찾기 위해 관련 데이터를 분석 할 필요가 있다.

Activity performance monitoring

유즈케이스 2 : 제품 판매업체에서 제품의 날짜별 판매 데이터는 제품 관리 및 판촉행사를 더 효율적으로 하기 위해 필요하다. 

Product Sales Growth

일반적인 타임 시리즈 패턴들

전형적인 타임시리즈 모델들을 매우 다양하게 나타낼 수 있다.

어떤 상황에서는 위의 모든 패턴이 합쳐진 형태로도 나타날 수 있기 때문에 타임시리즈의 구성요소를 디테일하게 살펴볼 필요가 있다. 다음 섹션에서는 타임시리즈의 다양한 구성요소들을 살펴본다.

타임시리즈들의 컴포넌트들

시계열 데이터는 주요 요소들을 나누어서 분석 할 필요가 있다.  우리는 이것을 타임시리즈 디컴포지션이라고 부르는데 만약 타임시리즈를 좀 더 가까이에서 본다면 그것은 주로 Trend (흐름의 경향)Seasonality(주기적)Cyclic (반복적),Residual (나머지) 이렇게 구분 할 수 있을 것이다.

Decomposition of a Time Series
A Decomposed Time series
  1. 1.Trend 컴포넌트

긴시간동안의 상승/하강 경향에 대한 분석 

2. Seasonality Component

주기적으로 요동치는 패턴에 대한 분석, 주로 계절별(요일별)로 반복된다. 

3. Cycles Component

계절별(요일별) 말고 다른 이유에 의해서 반복적인 패턴을 보임. 사이클의 피크포인트및 길이는  동일할 필요는 없으며 아주 긴 시간동안의 인터벌이 발생할 수 도 있다.

4. Irregular movement Component

나머지, 노이즈 일 수도 있고 에러 일 수도 있고, 다른 특정 사건일 수도 있고~

R 을 이용하여 데이터를 모델링 해보자. 

For the demonstration purpose i have used a time series use case from banking industry as explained below.

Business Case : How do you predict the remaining balance of bank account for remaining two years.

  • Financial expenditures of a bank users are highly unpredictable over the period of time.
  • Expenditure patterns of the user is random in nature.

When the behavioral pattern of a user unknown and random in nature there is no easy way that you can write a business logic to automatically predict the future balances in the user account .

Solution : Use a machine learning approach to create a prediction model predict future account balances of the user .

Lets use step by step approach go trough a practical time series use case .

Step 0

In this case i am using a CSV file which has monthly balance of the users bank account starting from 1973–01 to 2013–06 .

Step 1: install forcast and fpp packages in R Studio

Step 2: Load data from CSV file into R data frame .

Step 3: create time series Object using “AccountBal” data frame.

Step 4: plot time series Object .

step 5 : Decomposing time series into its components

you can use decompose command to split the time series into its trend , seasonal and irregular components

step 6 : Predicting remaining balances of account for next 10 years using holtWinter Prediction Model.

Prediction is done in two steps . In first step you create the holtWinters model by using past time series data . Then in the second step we use that model to make predictions for next 10 years .

Then you can pot the predicted values in a new time series graph from 2014–2022

As the final step you can decompose the predicted time series to identify future trends and future seasonal effects reaming account balance of the user .

As a summery in this article i have tried to give you a basic understanding about the time series modeling . In future articles i may discuss some advance concepts around time series modeling subject area.

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by [前草] 이승현 (wowlsh93@gmail.com)

티스토리 툴바