2009-07-07 2 views
0

저는 머리를 감싸는 데 약간의 문제가 있습니다. 현재 "분산 형 플롯"을 수용하기 위해 해킹 된 Gruff 버전을 사용하고 있습니다. 즉, 데이터의 형식으로 입력되는, 상기 : 첫 번째 항목이 ENTITY이고, 두 번째 항목은 X-좌표 (Rails) 데이터 세트에서 다차원 해시/배열 만들기 ...?

g.data("Person1",[12,32,34,55,23],[323,43,23,43,22]) 

...이고, 세 번째 항목은 Y-좌표이다.

현재 POINT, VALUE, TIMESTAMP 열이있는 테이블의 항목 레코드 집합이 있습니다. 관련된 "복잡한"계산으로 인해 나는 단일 쿼리를 사용하거나 DB 작업을 너무 많이 위험하게해야합니다. 즉, 데이터 항목 생성을 위해 레코드 세트의 모든 데이터를 해시 (또는 배열 배열)로 동적으로 수집해야하는 항목 목록이 있습니다.

@h={} 

e = Events.find_by_sql(my_query) 
e.each do |event| 
     @h["#{event.Point}"][x] = event.timestamp 
     @h["#{event.Point}"][y] = event.value 
end 

은 분명히 그 올바른 구문은 아니지만, 내 머리가가는 곳이다 : 나는 다음과 같은 일을 생각했다. 누군가 나를 위해 청소하거나 더 적절한 메커니즘을 제안하여이를 수행 할 수 있습니까? 기본적으로 주요 목표는 그룹화 된 각 pointname에 대한 데이터를 유지하는 것입니다 (하지만 레코드 세트에는 모두 포함됨).

매우 감사드립니다.

EDIT 1

g = Gruff::Scatter.new("600x350") 
g.title = self.name 

e = Event.find_by_sql(@sql) 

h ={} 

e.each do |event| 
    h[event.Point.to_s] ||= {} 
    h[event.Point.to_s].merge!({event.Timestamp.to_i,event.Value}) 
end 

h.each do |p| 

    logger.info p[1].values.inspect 

    g.data(p[0],p[1].keys,p[1].values) 
end 

g.write(@chart_file) 

답변

0

우선, 간단한 o.to_s 할 때 문자열 보간을 사용하지 마십시오.

@h[event.Point.to_s] 

데이터 구조가 설명에서 명확하지 않습니다. 나는 당신이 거기 1) 포인트 이름을 가진 이벤트가 있다는 것을 의미한다고 생각한다. 2) 각 이벤트는 시간과 가치를 가진다. 3) 당신은 이벤트 콜렉션을 조작하고 싶다.

해시는 문제의 적절한 선택입니다.

+0

보간 호출이 좋습니다. 즉, 해시를 구조화하는 방법에 대해서는 여전히 확신이 없습니다. X와 Y 포크가 각각 필요합니다. 맞습니까? 아니면 해쉬의 해시일까요? 예제를 제공해 주시겠습니까? 내 주요 문제는 모든 포인트가 반환 된 레코드 세트에 있고 내가 현재 사용중인 POINTNAME을 결정하기 위해 "인식"의 추가 수준이 필요하다는 것입니다. 물론 해시가 일종의 "푸시"메커니즘을 지원하지 않는 한 나는 단순히 이름으로 그것을 참조 할 수 있고 더 많은 두 개의 값을 던질 수 있습니다. –

+0

데이터를 표현하고 구성하는 방법을 알아야합니다. 코드는 보조입니다. 해시 (이벤트 이름으로 키 처리)에 점을 조작하지만 저장하지 않으려면 괜찮습니다. 다른 해시 (키 : "x", "y") 또는 시간과 값을 참조하는 목록 (0th = x, 1th = y)을 사용해도됩니다. @ [event.Point.to_s] = [event.timestamp, event.value] ' – mcandre

+0

"편집 1"을 참조하십시오. 그것이 내가이 주석에 대해 가지고있는 것입니다. 데이터 형식을 지정하는 방법에 따라 배열에서 문자열로 또는 그 반대로 변환과 관련된 오류가 계속 발생합니다. 내가 왜 배열 값을 그렇게 간단히 꽂을 수 없는지 나는 확신 할 수 없다. 아마도 배열 중 하나를 문자열로 반환 할 것입니까? –