2013-12-15 13 views
5

でDeedleフレームを作成する私は、Deedleフレームを作成するために、F#での最良の方法は何か理解しようとしています。私は以下のようなことを試みました。F番号:データはSQLサーバーから来るときどのようにSQLデータソース

#I "../packages/Deedle.0.9.12" 
#load "Deedle.fsx" 

#r "System.dll" 
#r "System.Data.dll" 
#r "System.Data.Linq" 
#r "FSharp.Data.TypeProviders.dll" 

open System 
open System.Data 
open System.Data.Linq 
open Microsoft.FSharp.Data.TypeProviders 
open Deedle 

type dbSchema = SqlDataConnection<"Data Source=server;Initial  Catalog=database;Integrated Security=SSPI;"> 
let db = dbSchema.GetDataContext() 

let fr = db.SomeTable |> Frame.ofRows 

などがあります。しかし運がなければ。私はそのことに関してF#とDeedleの両方に新しいです。 私は上記がうまくいかない理由を見ることができます(Frame.ofRowsは引数と互換性がありません)。しかし、私は進行する最良の方法(またはどのように進めるか)を知りません。

+0

ここでは、* *で示された結果 見に指摘すると便利です「の結果を次のとおりです。」上記の例ではFrame.Print()を呼び出す必要があります。fr.Print() – user1796185

答えて

9

Frame.ofRows関数は、フレームの個々の行を表す一連のシーケンスを期待します。 Frame.ofColumnsと同様に、この関数はすでにいくつかのシリーズオブジェクトを持っている場合(またはすべてをゼロから作成している場合)に便利です。彼らはタイプseq<'TRowKey * ISeries<'TColKey>>の入力を受け取ります。あなたには、いくつかの.NETデータ構造からDeedleフレームを作成している場合は

、あなたはどのような順序で動作しますFrame.ofRecordsを使用することができ、それがプロパティの名前を取得するためにリフレクションを使用(およびカラム名として扱う)します。

長い説明がありますが、ごくわずかな文字がコード内で変更されています:-)。私は、Northwindでそれをテストした:

type Nwind = SqlDataConnection<"""Data Source=.\SQLExpress; 
    Initial Catalog=Northwind;Integrated Security=SSPI;"""> 
let db = Nwind.GetDataContext() 

// Create data frame from Products table (with appropriate column names) 
let fr = db.Products |> Frame.ofRecords 

結果は次のとおりです。基本的なユーザーのために

 ProductID ProductName      SupplierID CategoryID QuantityPerUnit  UnitPrice UnitsInStock UnitsOnOrder ReorderLevel Discontinued OrderDetails        Categories Suppliers 
0 -> 1   Chai        1   1   10 boxes x 20 bags 18.0000 39   0   10   False  System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers 
1 -> 2   Chang       1   1   24 - 12 oz bottles 19.0000 17   40   25   False  System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers 
2 -> 3   Aniseed Syrup     1   2   12 - 550 ml bottles 10.0000 13   70   25   False  System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers 
3 -> 4   Chef Anton's Cajun Seasoning  2   2   48 - 6 oz jars  22.0000 53   0   0   False  System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers 
4 -> 5   Chef Anton's Gumbo Mix   2   2   36 boxes   21.3500 0   0   0   True   System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers 
(....) 
+0

Perfect!どうもありがとう。メソッドを見ましたが、 "通常の方法"で定義されたレコードにのみ適用されると考えました。私がキーを定義するために2つの列を言うならば、フレームをキーする最も良い方法は何ですか。 1日1時間? – Stefan

関連する問題