我一直在尝试使用Deedle F#Library编写一个F#批处理程序.它运作得很好.但是,我不确定以下两项任务的最佳设计:
将F#模块组合到现有的ASP.net MVC/Web Api系统中
创建一个WPF接口,作为各种F#模块的控制面板和可视依赖控制器.
F#模块正在执行的任务类型是处理时间序列并应用统计过程来推导新的时间序列.
我一直在尝试为现有模块创建一个类包装器,因此可以从C#代码中调用它.我从C#Deep Dive中读到,这是将F#模块暴露给C#调用者的更好方法.
以下是一个示例包装器:
type TimeSeriesDataProcessor(fileName:string) =
let mutable _fileName = fileName
let _rawInputData = loadCsvFile _fileName
let _pivotedData = _rawInputData
|> pivotRawData
|> fillPivotedRawData
|> calculateExpandingZscore
//read and write
member this.FileName
with get () = _fileName
and set (value) = _fileName <- value
member this.RawInputData
with get () = _rawInputData
member this.PivotedData
with get () = _pivotedData
member this.rawInputDataCount
with get () = _rawInputData.RowCount
member this.pivotedDataCount
with get () …Run Code Online (Sandbox Code Playgroud) 我2017年昨天下载了新的VS和它工作正常,但我收到的每一行,我调用静态方法这个警告Frame.ReadCsv从Deedle包:
FS10001 This method is not intended for use from F#
Run Code Online (Sandbox Code Playgroud)
调用其他静态方法Frame.X不会生成相同的警告.
示例 - 此行代码生成警告:
let msft =
Frame.ReadCsv(Config.tsDir + "MSFT.csv",
hasHeaders=true,
inferTypes=true)
Run Code Online (Sandbox Code Playgroud)
Intellisense识别该方法并提供适当的提示,这些提示完全符合签名 http://bluemountaincapital.github.io/Deedle/reference/deedle-frame.html
我想在Deedle中的两个数据帧之间进行左连接.两个数据框的示例如下:
let workOrders =
Frame.ofColumns [
"workOrderCode" =?> series [ (20050,20050); (20051,20051); (20060,20060) ]
"workOrderDescription" =?> series [ (20050,"Door Repair"); (20051,"Lift Replacement"); (20060,"Window Cleaning") ]]
// This does not compile due to the duplicate Work Order Codes
let workOrderScores =
Frame.ofColumns [
"workOrderCode" => series [ (20050,20050); (20050,20050); (20051,20051) ]
"runTime" => series [ (20050,20100112); (20050,20100130); (20051,20100215) ]
"score" => series [ (20050,100); (20050,120); (20051,80) ]]
Frame.join JoinKind.Outer workOrders workOrderScores
Run Code Online (Sandbox Code Playgroud)
问题是Deedle不会让我创建一个具有非唯一索引的数据框,并且我收到以下错误:System.ArgumentException:Duplicate key'20050'.索引中不允许重复键.
有趣的是在Python/Pandas中,我可以做到以下完美的工作.如何在Deedle中重现此结果?我想我可能必须压扁第二个数据框以删除重复项然后加入然后取消/取消堆叠它?
workOrders = pd.DataFrame(
{'workOrderCode': [20050, 20051, 20060], …Run Code Online (Sandbox Code Playgroud) 我正在尝试将数据从FSharp.Data.CsvProvider传递到Deedle.Frame.
我几乎是F#的新手,我需要将一些CSV文件从文化"it-IT"转换为"en-US",这样我才能使用这些数据.
我找到了Deedle,我想学习如何使用它,但是我无法直接转换Deedle中的CSV文件中的数据(至少是用F#交互式打印的).
我注意到CsvProvider进行了转换,但经过几天的尝试后,我无法传递数据.
这是一个基本问题,但我找不到阅读教程的简单答案
假设我有这个简单的框架
type Person =
{ Name:string; Age:int; Countries:string list; }
let peopleRecds =
[ { Name = "Joe"; Age = 51; Countries = [ "UK"; "US"; "UK"] }
{ Name = "Tomas"; Age = 28; Countries = [ "CZ"; "UK"; "US"; "CZ" ] }
{ Name = "Eve"; Age = 2; Countries = [ "FR" ] }
{ Name = "Suzanne"; Age = 15; Countries = [ "US" ] } ]
// Turn the list of records into data …Run Code Online (Sandbox Code Playgroud) 我想确定当数据来自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
Run Code Online (Sandbox Code Playgroud)
以及其他一些变种.但没有运气.我是F#和Deedle的新手.我可以看出上面的原因不起作用(Frame.ofRows与参数不兼容)但我不知道最好的方法是什么(甚至如何继续).
在deedle框架中更改列顺序的最佳方法是什么?例如,如果我有一个df带有列height、Name、 和的deedle 框架phone,但我需要按顺序Name、phone、 和height。
我有一个带有选举数据的Deedle系列,例如:
"Party A", 304
"Party B", 25
"Party C", 570
....
"Party Y", 2
"Party Z", 258
Run Code Online (Sandbox Code Playgroud)
我想创建一个这样的新系列:
"Party C", 570
"Party A", 304
"Party Z", 258
"Others", 145
Run Code Online (Sandbox Code Playgroud)
所以我想把它们排在前三位,然后将所有其他排成一列.做这个的最好方式是什么?
合并两个具有重叠行的 deedle 框架的最佳方法是什么?不过,我想保持行的唯一性。据我了解, merge() 不允许重叠行。
阅读文章Analyzing and Visualizing Data with F#(https://www.oreilly.com/ideas/analyzing-and-visualizing-data-with-f-sharp/page/2/analyzing-data-using-f-and-deedle)我收集了(也许错误的)可以将Deedle DataFramein FSharp Interactive(FSI)的内容显示为一个漂亮的表.
使我这么认为的文本片段如下:
When you create a data frame, F# Interactive formats it nicely so you can get a quick idea about the data. For example, in Table 2-1 you can see the ranges of the values and which values are frequently missing.
Run Code Online (Sandbox Code Playgroud)
这些行之前是一个很好的表格,显示了a的内容DataFrame.
没有安装和打开FSLab,按照文章的建议,当我可以创建一个DataFramein FSI然后输入它的名字和";;" 我得到这样的东西:
> df;;
val it : Frame<int,string> =
Deedle.Frame`2[System.Int32,System.String]
{ColumnCount = …Run Code Online (Sandbox Code Playgroud)