5

データが SQL サーバーから来る場合、F# で Deedle Frame を作成するための最良の方法は何かを理解しようとしています。私は次のようなことを試しました。

#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 は引数と互換性がありません)、続行する最善の方法 (または続行する方法) がわかりません。

4

1 に答える 1

9

このFrame.ofRows関数は、フレームの個々の行を表す一連のシリーズを想定しています。と同様にFrame.ofColumns、この関数は、すでにいくつかのシリーズ オブジェクトがある場合 (またはすべてを最初から作成している場合) に役立ちます。それらは type の入力を受け取りますseq<'TRowKey * ISeries<'TColKey>>

一部の .NET データ構造から Deedle フレームを作成する場合Frame.ofRecords、どのシーケンスでも機能する which を使用でき、リフレクションを使用してプロパティの名前を取得します (そしてそれらを列名として扱います)。

長い説明ですが、コード内で変更されるのはほんの数文字です :-)。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 
(....)
于 2013-12-16T00:48:02.460 に答える