2014-02-24 2 views
0

파이썬으로 데이터를 구성하는 데 문제가 있습니다. 기본적으로 나는 아래와 같은 형식의 데이터를 csv 파일이 있습니다데이터 반복 및 다른 범주로 분할

Direction(Deg), Speed(m/s) 
10, 2.8 
20, 3.2 
45, 5.2 
.., .. 
.., .. 
360, 20 

그래서이 겪고있는 문제 메신저, 나는 별도의리스트에 데이터를 분류하기 위해 노력하고 있다는 것입니다 방향과 속도의 예를 들어 목록이 너무 45 ~ 67.5 °, 2 ~ 3 m/s. 22.5도 단위로 16 가지 방향 범위가 있으며 1m/s 단위로 30 가지 속도 범위가 있습니다.

내 주요 문제를 두 가지로 생각할 수 있습니다. 1. 수 백 개가 넘는 목록을 수동으로 작성하지 않고 필요한 목록을 어떻게 만들 수 있습니까? 자동화 할 수 있습니까? 2. 내가 어떻게 지금까지 내가 아래, for 루프 내에서 루프를하려고 노력 했어요, 내가 적절한 목록으로 필요한 번호를 추출하는 데이터를 통해 루프 :

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20] 

for number in xrange(0,20,2): 
    for value in a: 
     if value >= number -2 and value < number: 
      print value 

그러나 I를 제 질문의 첫 부분에서 목록을 작성하는 문제를 해결할 방법을 생각할 수 없습니다.

이 끔찍한 말씨에 대해 사과드립니다. 저는 여전히 파이썬을 사용하는 데있어 매우 익숙하며,이 문제를 해결할 머리가 없다고 말할 수 있습니다! 올바른 방향으로 나를 가리키는 어떤 정보라도 유용 할 것입니다!

+0

그냥 다시 확인하십시오. 내 솔루션을 이해 했습니까? 나는 무엇인가를 명확히 할 수 있습니까? 귀하의 문제에 대한 최선의 해결책이라면 솔루션으로 체크하십시오 - 귀하를 도와 준 보상을드립니다. 더 나은 해결책을 찾았 으면 아래 답변을 입력하십시오. –

+0

안녕하세요, 네, 그 솔루션은 확실히 유용했습니다. 그러나 numpy와 digitize 함수를 사용하여 모든 것을 색인화하고 필요한 형식으로 가져와야했습니다. Defaultdict는 배열의 데이터로 작업하는 것이 더 쉬운 것으로 입증 된 것과 동일한 효과를 달성했습니다. – user3348554

답변

0
from collections import defaultdict 
import csv 

INPUT = "myfile.csv" 
ANGLE_SZ = 22.5 
SPEED_SZ = 1. 

def read_csv(fname, skip_header=False, **kwargs): 
    with open(fname, "rb") as inf: 
     incsv = csv.reader(inf, **kwargs) 
     if skip_header: 
      header = next(incsv, None) 
     for row in incsv: 
      yield row 

def main(): 
    data = defaultdict(lambda: defaultdict(list)) 
    for d,s in read_csv(INPUT, skip_header=True): 
     data[int(d/ANGLE_SZ)][int(s/SPEED_SZ)].append((d,s)) 

    # data[][] now contains all your data, sorted into buckets 

if __name__=="__main__": 
    main()