2016-08-26 3 views
3

deedle 프레임에서 데이터를 정규화하는 방법은 무엇입니까?Deedle 정상화 프레임

, 나는이 방법을 시도했지만 하나는 frame - series 과부하 당신이 frame의 모든 열에서 series을 뺀 것을 기대

let iris = Frame.ReadCsv("./iris.csv") 
let keys = iris.ColumnKeys |> Seq.toArray 
let x = iris.Columns.[keys.[0..4]] 
let mu = x |> Stats.mean 
let std = x |> Stats.stdDev 
//Not working becasue couldnt substract series from frame 
let norm = (x - mu)/std 

답변

6

작동하지 않습니다 즉 그 프레임과의 행 키 계열의 행 키가 정렬됩니다. 사용 사례를 들어

, 당신은 열 키를 정렬해야 -이 단일 연산자는이입니다,하지만 당신은 mapRows 기능을 사용하여 수행 할 수 있습니다 단지로

let x = iris.Columns.[keys.[0..3]] 
let mu = x |> Stats.mean 
let std = x |> Stats.stdDev 

let norm = 
    x 
    |> Frame.mapRowValues (fun r -> (r.As<float>() - mu)/std) 
    |> Frame.ofRows 

나는 또한 x 변경을 keys.[0..3]에서 그렇지 않으면 string 유형의 열을 정규화하려고 할 것이므로 실패합니다.

+0

감사합니다. 사실 mapRowValues를 사용해 보았는데 이해가 안되는 것은'.As' 연산자가 필요하다는 것입니다. 문서에 대해 조금 불분명합니다. – baio

+0

왜냐하면 Deedle이 슬픈 듯이 행이 모두 숫자라는 것을 모르기 때문입니다 (네 번째 열을 버리지 않으면 실제로는 그렇지 않습니다) -'row.As ()'을 호출하면'Series ' '-x' 연산자를 지원하는''시리즈로 바꾼다. –