소프트웨어 개발/Python

성능 튜닝

늘근이 2015. 4. 26. 18:44

분명히 루핑하고 계산하는데 있어서 성능개선이 필요하다.


현재, rolling mean 5,10,20,60,120 을 모두 계산하는데에 있어 0.2초밖에 걸리지 않지만, 

인덱스를 읽어서 여러 표기를 하는데 있어 굉장히 시간이 많이 든다. 

분명히 문제는 인덱스를 읽는데에 시간이 드는것이다. 


현재 2015년1월 ~ 2015년 4월까지의 데이터는 총 4.07초가 걸리고 있다.

      2014년1월 ~ 2015년 4월까지의 1년3개월의 데이터는 20초가 걸렸다. 


현재 인덱스를 ix로 끌고오는게 문제가 되는데.

이제 asset을 계산해서 하나의 컬럼 생성하고 인덱스를 이용하는데 계산하는데 얼마나 걸리나 보자. 


2014년 1월 ~ 2015년 4월까지의 데이터는 총 13.41초가 걸렸다. 


갈길이 멀다. 1초내로 끊어야한다. 이제 쓸데없이 X표시하는것을 없애보자


6초로 줄었다. 


무엇을 하는데 있어 pandas구조는 index를 찾는데 굉장히 오랜 시간이 걸리는듯하다. 

이번에는 최대한 ix를 안쓰게끔 짜봤다. 


6.6초에서 6.3초로 줄었다.


이번에는 병목이 예상되는 부분을 모조리 없애봤다. 예상외로 괜찮은듯 보인다.


자 이제 현상을 알아냈다. 


data['cash'].ix[i] = cash


이러한 구문은 굉장히 속도를 느리게 한다. 이 판다스 데이터는 index를 찾아 쓰는 기능은 최악이다. 


0.175초 걸렸다. 


이제 5년치를 긁어와본다. 2초가 걸리는데

아예 인덱스를 찾아 쓰는과정을 없애버리는 1초도 안걸린다....

이럴수가..

자료구조 형식이 어떻게 되어있는지 .. ㅡㅡ


이제 10년정도되는 2000개의 종목을 계산한다고 했을때 하나에 약 1초.. 1800초정도면 30 * 60 이 1800이니 30분이 걸린다. 

양호하다.