2016-08-26 6 views
3

デエッジフレームのデータを正規化するにはどうすればよいですか?ディードルフレームを正規化する

、私はこのアプローチを試してみたが、1つは、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'演算子は理解できません。 Docsはこれについて少し不明です。 – baio

+0

これは、Deedleが悲しいことに、行がすべて数値であることを知らないからです(4列目を削除しないと、実際にはそうではありません)。 'row.As () '-x'演算子をサポートする' Series 'に変換します。 –