2012-12-14 5 views
1

mymap이 생성되는 것과 동시에 'mymap'의 값을 문자열 목록 대신 Doubles 목록으로 변환하려면 어떻게해야합니까?폐쇄 목록에서 문자열 목록을 복식 목록으로 변환하려면 어떻게해야합니까?

(use '[clojure.string :only (join split)]) 
;(def raw-data (slurp "http://ichart.finance.yahoo.com/table.csv?s=INTC")) 
;Downloaded and removed the first line 
(def raw-data (slurp "table-INTC.csv")) 


(def raw-vector-list 
    (map 
    #(split % #",")   ; anonymous map function to split by comma 
    (split raw-data #"\n"))) ; split raw data by new line 

(pr (take 1 raw-vector-list)) 

(def mymap 
    (zipmap 

    ;construct composite key out of symbol and date which is head of the list 
    (map #(str "INTC-" %) (map first raw-vector-list)) 

    ;How do i convert these values to Double instead of Strings? 
    (map rest raw-vector-list))) 

(pr (take 1 mymap))  
+0

Clojure의 csv 패키지는 여기에 상당한 양의 코드를 저장합니다. https://github.com/davidsantiago/clojure-csv – Bill

+0

일단 내가 기본 수준에서하고있는 도대체에 대해 잘 이해하면, 나는 그것을 탐구 할 것이다. 감사. – lunkdjedi

답변

0
(def mymap 
    (zipmap 
    (map #(str "NAT-" %) (map first raw-vector-list)) 
    (map #(map (fn [v] (Double/parseDouble v)) %) 
     (map rest raw-vector-list)))) 

(pprint (take 1 mymap)) 
-> (["NAT-1991-09-30" (41.75 42.25 41.25 42.25 3.62112E7 1.03)]) 

이 데이터의 꼬리/나머지 부분에 대한

(def mymap 
    (map (fn [[date & values]] 
     [(str "NAT-" date) 
      (map #(Double/parseDouble %) values)]) 
     ;; Drop first non-parsable element in raw-vector-list 
     ;; ["Date" "Open" "High" "Low" "Close" "Volume" "Adj Close"] 
     (drop 1 raw-vector-list))) 
+0

어떻게 그걸 짐작 했니? 더 자세한 조사를 위해 마법 부분을 별도로 찾아 낼 수 있습니까? – lunkdjedi

+0

그것은 마법이 아닙니다. "(map rest raw-vector-list)"는 시퀀스 시퀀스를 반환한다는 것을 잊지 마십시오. 그래서 모든 하위 시퀀스에 내부 "지도"를 적용하는 바깥 쪽 "지도"가 필요합니다. – mobyte

+0

데이터 구조에 대한 완벽한 그림이 없습니다. 필자는 필자가 요구 한 것이 실제로는 목록의 목록 일 때만 Composite로 설명 할 수있는 것을 개념화했다. 고맙습니다. – lunkdjedi

0

그래서 또 다른 버전. 익명, 맵 함수를 문자열 목록에 매핑 한 다음 형식 변환을 각 하위 목록의 요소에 매핑합니다.

(def mymap 
    (zipmap 
    (map #(str "NAT-" %) (map first raw-vector-list)) 
    (map #(map (fn [v] (Double/parseDouble v)) %) 
    (map rest raw-vector-list)))) 

다음과 같은 함수로 형식 변환을 어떻게 풀 수 있습니까?

(defn str-to-dbl [n] (Double/parseDouble n)) 

이 코드는 중첩 된 #에 대해 불평합니다.

(def mymap 
    (zipmap 
    (map #(str "NAT-" %) (map first raw-vector-list)) 
    (map #(map #(str-to-double %) 
    (map rest raw-vector-list)))) 
관련 문제