2014-02-05 2 views
1

사용 제한된 파이썬 경험). 제 3 자 API (wundergorund)에서 역사적인 날씨 데이터를 다운로드하는 애플리케이션을 작성 중입니다. 문제는 주어진 시간대에 가치가없는 경우입니다 (예 : 오전 5시에 20도, 오전 6시에 값 없음, 오전 7시에 21도). 주어진 시간에 정확하게 하나의 온도 값을 가져야하므로, 필자가 가지고있는 데이터에 적합하고 실종 된 점 (SciPy의 polyfit 사용)을 평가할 수 있다고 생각했습니다. 모든 것이 멋지지만 목록에 시간이 없는지 감지하기 위해 프로그램을 처리하는 데 문제가 있습니다. 그렇다면 누락 된 시간을 삽입하고 온도 값을 계산하십시오. 나는이 만드는 희망 의미 ..채우기 누락 된 값은

는 시간과 온도 목록을 처리하려고 시도한 다음

입니다 :

from scipy import polyfit 

# Evaluate simple cuadratic function 
def tempcal (array,x): 

    return array[0]*x**2 + array[1]*x + array[2] 


# Sample data, note it has missing hours. 
# My final hrs list should look like range(25), with matching temperatures at every point 
hrs = [1,2,3,6,9,11,13,14,15,18,19,20] 
temps = [14.0,14.5,14.5,15.4,17.8,21.3,23.5,24.5,25.5,23.4,21.3,19.8] 

# Fit coefficients 
coefs = polyfit(hrs,temps,2) 

# Cycle control 
i = 0 
done = False 

while not done: 

    # It has missing hour, insert it and calculate a temperature 
    if hrs[i] != i: 

     hrs.insert(i,i) 
     temps.insert(i,tempcal(coefs,i)) 

    # We are done, leave now 
    if i == 24: 

     done = True 

    i += 1 

이 프로그램은 결국 액세스 인덱스에 노력할 것입니다 작동하지 않는 이유를 볼 수 있습니다 hrs 목록의 범위. 또한 루프 내에서리스트의 길이를 수정하는 것은 조심스럽게 이루어져야한다는 것을 알고 있습니다. 분명히 충분히 조심스럽지 않거나 단순한 해결책을 모두 간과하고 있습니다.

내 자신을 돕기위한 인터넷 검색 시도에서 나는 판다 (도서관)를 발견했지만 그 문제없이이 문제를 해결할 수 있다고 느낀다.

모든 입력 사항에 크게 감사드립니다. 고마워.

+1

'weather_dict = {1 : 14.0,2 : 14.5,3 : 14.5,4 : None, etc.}'목록 대신'dictionary'를 사용해야합니다. 'dict'을 모든 임의의 값으로 초기화 한 다음 가지고있는 데이터를 채울 수 있습니다. – IanAuld

+0

감사합니다, 그것을 줄 것이다! – cilop

답변

0

I가 21 일 때 목록에서 20 번째 값을 의미합니다. 그러나 단지 21 개의 값이 있습니다.

나중에 디버그를 위해 중단 점이있는 PyCharm을 사용하는 것이 좋습니다. 또는 try-except 구조.

0

확실하지 않은 값을 삽입하는 방법을 권장합니다. 전체 데이터 세트 대신 누락 된 값을 둘러싼 가장 가까운 점을 사용했을 것입니다. 그러나 당신의 제안 된 방식으로 numpy를 사용하는 것은 상당히 간단합니다.

hrs = np.array(hrs) 
temps = np.array(temps) 

newTemps = np.empty((25)) 
newTemps.fill(-300) #just fill it with some invalid data, temperatures don't go this low so it should be safe. 

#fill in original values 
newTemps[hrs - 1] = temps 
#Get indicies of missing values 
missing = np.nonzero(newTemps == -300)[0] 

#Calculate and insert missing values. 
newTemps[missing] = tempcal(coefs, missing + 1) 
+0

색인 생성이 가능하다는 것을 알지 못했으나 도움이되었습니다. 또한 나는 numpy를 많이 사용하지 않지만 확실히 이것을 시도 할 것입니다. 고마워요! (해달라고 충분한 답변을 upvote 귀하의 답변 롤) – cilop

관련 문제