BinderScriptNotebook

The in silico gene expression dataset

Table of contents

Description

This is an in-silico data. It emulates the expression of 100 genes over 3 conditions, with 3 replicates each. It is made so that replicates are more similar to each other.

7% of the values are dropped, as the dataset was originally made to showcase missing value imputation.

How to use

#r "nuget: FSharp.Data"
#r "nuget: Deedle"

open FSharp.Data
open Deedle

let rawData = Http.RequestString @"https://raw.githubusercontent.com/fslaborg/datasets/main/data/InSilicoGeneExpression.csv"

let df : Frame<string,string> = 
    Frame.ReadCsvString(rawData)
    |> Frame.indexRows "Key" //exact settings may differ here depending on e.g. the separator used in the individual dataset

df.Print()
Condition0_1     Condition0_2     Condition0_3     Condition1_1     Condition1_2     Condition1_3     Condition2_1     Condition2_2     Condition2_3     
Gene0  -> <missing>        <missing>        859.507048737706 892.488061131967 1018.39682842723 <missing>        1103.47465251202 1157.72940330711 1065.74060396554 
Gene1  -> 874.831680800388 750.248739657293 885.186911420285 928.994516057073 853.081858812674 793.574297701139 1065.97949919587 1131.14376992316 <missing>        
Gene2  -> 838.556912459832 852.727407339623 899.295260312015 860.880771705626 932.199854945633 976.124808642915 1207.93463145272 <missing>        1277.61049813247 
Gene3  -> 578.81785907921  678.347549342628 602.246497320338 <missing>        643.093516693419 <missing>        <missing>        873.194740469258 849.451122811244 
Gene4  -> 842.094396445274 965.835426665507 867.369051645365 928.252271146921 881.501122913359 <missing>        1054.1287942036  1171.60939846118 1038.00577431047 
Gene5  -> 1020.09691148753 1074.40387941314 1007.97548739644 1016.85273907176 1137.89035971088 1053.22697953361 1375.66060145121 1231.83519162636 <missing>        
Gene6  -> 1101.31859349101 1035.34541804719 1073.81849597601 1173.85556819786 1135.11445658909 1135.37014907268 1312.46683931566 <missing>        1446.11026206729 
Gene7  -> 1293.5505187121  1279.24240353059 1210.69733913481 1418.83379683658 1315.66861035805 1340.02039414327 1547.14933515457 1542.7958833035  1506.05595369617 
Gene8  -> 932.451969005451 943.887579432217 1064.35286448003 993.708988922016 1020.75857130752 1141.8439164254  1302.84589494999 <missing>        1255.55859138653 
Gene9  -> <missing>        676.324726723238 627.516574042796 <missing>        761.340619105394 629.926834913104 913.833973465211 <missing>        935.953193020724 
Gene10 -> <missing>        631.593373387394 <missing>        760.573132248994 667.777800663737 708.579020598344 897.652044466068 951.352427593893 913.498402976585 
Gene11 -> 925.558844182864 921.275745566886 962.402042467281 919.912081924523 915.817349871239 <missing>        1133.39251694594 1215.95999339307 1256.12477917909 
Gene12 -> 877.088860898347 910.78457773273  977.60432138044  906.470100177092 895.635227528066 974.138600172186 1268.46086169626 1130.47280685606 1209.22769248572 
Gene13 -> 961.944859271178 938.498328719872 913.620698710984 866.402054828119 906.174954450491 985.197102336624 1124.13083729644 1212.131809912   1159.25077296929 
Gene14 -> 992.748362800567 1000.19176657168 983.841273992796 1102.47481181182 1189.49999801473 1098.43197409232 1287.05128248142 1193.33301922455 <missing>        
:         ...              ...              ...              ...              ...              ...              ...              ...              ...              
Gene85 -> 1141.84782692372 966.934334466062 960.874704416693 1083.08973656227 1034.99233568037 1165.59614687963 1296.69301350431 1265.91311513118 <missing>        
Gene86 -> 709.392263094341 599.356231019707 627.809442533116 656.618659654456 693.650796020343 659.473041695018 852.316184386208 824.655405167439 925.919147678158 
Gene87 -> 899.380276781729 884.17260562817  948.935506964083 1089.52324524629 1029.65752699391 1003.33640042116 1298.44005521355 1280.59977722652 1241.62816145067 
Gene88 -> 1144.81738980837 1063.96798295389 1035.41837813454 1089.09832802759 <missing>        1201.22372291913 1403.27831423481 1289.29148231194 1310.98966263453 
Gene89 -> <missing>        1412.27615611229 1213.87168101546 1464.29266169994 1410.28662129759 1460.0814182168  1633.25421505257 1622.26533282371 1614.55971113835 
Gene90 -> 1380.11337491127 1298.94445749242 1388.80183781222 1380.04885949936 1464.39067804687 <missing>        1602.07971635588 1572.12371268329 1588.54863749936 
Gene91 -> 1104.4688200858  1044.62985634541 1038.52005763965 1118.68807975572 1079.12934076147 1110.47798847764 1357.74586648515 1341.72499952814 <missing>        
Gene92 -> 643.08246230498  713.608735692286 664.349154855986 804.005009357483 735.028682825565 715.584678733244 988.804126972969 <missing>        935.68406770922  
Gene93 -> 1066.41860092441 <missing>        1100.26729085649 1129.70531336959 1190.5905781972  1160.86694672781 1370.99671365522 1326.95197016386 1386.621278477   
Gene94 -> 842.568958216624 920.226880055378 824.776105482268 1000.45119277737 999.622914936843 926.209950863813 1179.08167586582 1186.13260877293 1151.99017404333 
Gene95 -> <missing>        776.852408021102 809.406302005126 866.770357211847 777.940357407953 868.312695316338 1039.8775076931  1072.75143664128 1095.87599329151 
Gene96 -> 736.95604192717  831.823622542142 790.627443848724 887.289779057259 781.461038651523 867.660284443528 932.981758186553 1042.45392008744 1149.56046307528 
Gene97 -> 979.147873857094 1033.86834107186 1010.60740727841 974.152107390665 1141.69306792765 1093.41903358936 1185.3882808851  1198.15294047248 1389.92530724036 
Gene98 -> 759.570384027805 661.370466127403 647.949680836865 831.520407212324 787.268819663521 855.916145637134 1018.7813832175  959.437629515552 1013.48894708169 
Gene99 -> <missing>        1170.12951077744 1103.50236480969 1212.87417318883 1219.28343069146 1184.0055742792  1340.62297540036 <missing>        1405.19376312643

Examples

Compute a correlation matrix between the genes after imputing the missing values

#r "nuget: FSharp.Stats, 0.4.2"
#r "nuget: Plotly.NET, 2.0.0-preview.6"

open FSharp.Stats
open FSharp.Stats.ML
open Plotly.NET

// Select the imputation method: kNearestImpute where the 2 nearest observations are considered
let kn : Impute.MatrixBaseImputation<float[],float> = Impute.kNearestImpute 2

// Impute the missing values using the "imputeBy" function. The values of the deedle frame are first transformed into the input type of this function.
let imputedData = 
    df 
    |> Frame.toJaggedArray 
    |> Impute.imputeBy kn Ops.isNan
    |> Matrix.ofJaggedSeq

// Perform a row-wise pearson correlation on the matrix, resulting in a correlation matrix
let correlationMatrix = Correlation.Matrix.rowWisePearson imputedData

// Create a plotly heatmap from the correlation matrix
let correlationHeatmap = 
    correlationMatrix
    |> Matrix.toJaggedArray
    |> Chart.Heatmap
Multiple items
namespace FSharp

--------------------
namespace Microsoft.FSharp
Multiple items
namespace FSharp.Data

--------------------
namespace Microsoft.FSharp.Data
namespace Deedle
val rawData : string
type Http = private new : unit -> Http static member private AppendQueryToUrl : url:string * query:(string * string) list -> string static member AsyncRequest : url:string * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?responseEncodingOverride:string * ?customizeHttpRequest:(HttpWebRequest -> HttpWebRequest) * ?timeout:int -> Async<HttpResponse> static member AsyncRequestStream : url:string * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?customizeHttpRequest:(HttpWebRequest -> HttpWebRequest) * ?timeout:int -> Async<HttpResponseWithStream> static member AsyncRequestString : url:string * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?responseEncodingOverride:string * ?customizeHttpRequest:(HttpWebRequest -> HttpWebRequest) * ?timeout:int -> Async<string> static member private EncodeFormData : query:string -> string static member private InnerRequest : url:string * toHttpResponse:(string -> int -> string -> string -> 'a0 option -> Map<string,string> -> Map<string,string> -> Stream -> Async<'a1>) * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?responseEncodingOverride:'a0 * ?customizeHttpRequest:(HttpWebRequest -> HttpWebRequest) * ?timeout:int -> Async<'a1> static member Request : url:string * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?responseEncodingOverride:string * ?customizeHttpRequest:(HttpWebRequest -> HttpWebRequest) * ?timeout:int -> HttpResponse static member RequestStream : url:string * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?customizeHttpRequest:(HttpWebRequest -> HttpWebRequest) * ?timeout:int -> HttpResponseWithStream static member RequestString : url:string * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?responseEncodingOverride:string * ?customizeHttpRequest:(HttpWebRequest -> HttpWebRequest) * ?timeout:int -> string
<summary> Utilities for working with network via HTTP. Includes methods for downloading resources with specified headers, query parameters and HTTP body </summary>
Multiple items
static member Http.RequestString : url:string * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:System.Net.CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?responseEncodingOverride:string * ?customizeHttpRequest:(System.Net.HttpWebRequest -> System.Net.HttpWebRequest) * ?timeout:int -> string

--------------------
static member Http.RequestString : url:string * ?query:(string * string) list * ?headers:seq<string * string> * ?httpMethod:string * ?body:HttpRequestBody * ?cookies:seq<string * string> * ?cookieContainer:System.Net.CookieContainer * ?silentHttpErrors:bool * ?silentCookieErrors:bool * ?responseEncodingOverride:string * ?customizeHttpRequest:(System.Net.HttpWebRequest -> System.Net.HttpWebRequest) * ?timeout:int -> string
val df : Frame<string,string>
Multiple items
module Frame from Deedle

--------------------
type Frame = static member ReadCsv : location:string * hasHeaders:Nullable<bool> * inferTypes:Nullable<bool> * inferRows:Nullable<int> * schema:string * separators:string * culture:string * maxRows:Nullable<int> * missingValues:string [] * preferOptions:bool -> Frame<int,string> + 1 overload static member ReadReader : reader:IDataReader -> Frame<int,string> static member CustomExpanders : Dictionary<Type,Func<obj,seq<string * Type * obj>>> static member NonExpandableInterfaces : ResizeArray<Type> static member NonExpandableTypes : HashSet<Type>

--------------------
type Frame<'TRowKey,'TColumnKey (requires equality and equality)> = interface IDynamicMetaObjectProvider interface INotifyCollectionChanged interface IFsiFormattable interface IFrame new : rowIndex:IIndex<'TRowKey> * columnIndex:IIndex<'TColumnKey> * data:IVector<IVector> * indexBuilder:IIndexBuilder * vectorBuilder:IVectorBuilder -> Frame<'TRowKey,'TColumnKey> + 1 overload member AddColumn : column:'TColumnKey * series:seq<'V> -> unit + 3 overloads member AggregateRowsBy : groupBy:seq<'TColumnKey> * aggBy:seq<'TColumnKey> * aggFunc:Func<Series<'TRowKey,'a>,'b> -> Frame<int,'TColumnKey> member Clone : unit -> Frame<'TRowKey,'TColumnKey> member ColumnApply : f:Func<Series<'TRowKey,'T>,ISeries<'TRowKey>> -> Frame<'TRowKey,'TColumnKey> + 1 overload member DropColumn : column:'TColumnKey -> unit ...

--------------------
new : names:seq<'TColumnKey> * columns:seq<ISeries<'TRowKey>> -> Frame<'TRowKey,'TColumnKey>
new : rowIndex:Indices.IIndex<'TRowKey> * columnIndex:Indices.IIndex<'TColumnKey> * data:IVector<IVector> * indexBuilder:Indices.IIndexBuilder * vectorBuilder:Vectors.IVectorBuilder -> Frame<'TRowKey,'TColumnKey>
Multiple items
val string : value:'T -> string
<summary>Converts the argument to a string using <c>ToString</c>.</summary>
<remarks>For standard integer and floating point values the and any type that implements <c>IFormattable</c><c>ToString</c> conversion uses <c>CultureInfo.InvariantCulture</c>. </remarks>
<param name="value">The input value.</param>
<returns>The converted string.</returns>


--------------------
type string = System.String
<summary>An abbreviation for the CLI type <see cref="T:System.String" />.</summary>
<category>Basic Types</category>
static member Frame.ReadCsvString : csvString:string * ?hasHeaders:bool * ?inferTypes:bool * ?inferRows:int * ?schema:string * ?separators:string * ?culture:string * ?maxRows:int * ?missingValues:string [] * ?preferOptions:bool -> Frame<int,string>
val indexRows : column:'C -> frame:Frame<'R1,'C> -> Frame<'R2,'C> (requires equality and equality and equality)
static member FrameExtensions.Print : frame:Frame<'K,'V> -> unit (requires equality and equality)
static member FrameExtensions.Print : frame:Frame<'K,'V> * printTypes:bool -> unit (requires equality and equality)
namespace FSharp.Stats
namespace FSharp.Stats.ML
namespace Plotly
namespace Plotly.NET
val kn : Impute.MatrixBaseImputation<float [],float>
module Impute from FSharp.Stats.ML
<summary> Module for data imputation and missing value filtering </summary>
type MatrixBaseImputation<'a,'b> = seq<'a> -> 'a -> int -> 'b
<summary> Type definintion for a vector based imputation The imputed values are based on the given whole dataset </summary>
Multiple items
val float : value:'T -> float (requires member op_Explicit)
<summary>Converts the argument to 64-bit float. This is a direct conversion for all primitive numeric types. For strings, the input is converted using <c>Double.Parse()</c> with InvariantCulture settings. Otherwise the operation requires an appropriate static conversion method on the input type.</summary>
<param name="value">The input value.</param>
<returns>The converted float</returns>


--------------------
[<Struct>] type float = System.Double
<summary>An abbreviation for the CLI type <see cref="T:System.Double" />.</summary>
<category>Basic Types</category>


--------------------
type float<'Measure> = float
<summary>The type of double-precision floating point numbers, annotated with a unit of measure. The unit of measure is erased in compiled code and when values of this type are analyzed using reflection. The type is representationally equivalent to <see cref="T:System.Double" />.</summary>
<category index="6">Basic Types with Units of Measure</category>
val kNearestImpute : k:int -> data:seq<float []> -> arr:float [] -> index:int -> float
<summary> Imputation by k-nearest neighbour </summary>
val imputedData : Matrix<float>
Multiple items
module Frame from Deedle

--------------------
type Frame = inherit DynamicObj new : unit -> Frame

--------------------
type Frame<'TRowKey,'TColumnKey (requires equality and equality)> = interface IDynamicMetaObjectProvider interface INotifyCollectionChanged interface IFsiFormattable interface IFrame new : rowIndex:IIndex<'TRowKey> * columnIndex:IIndex<'TColumnKey> * data:IVector<IVector> * indexBuilder:IIndexBuilder * vectorBuilder:IVectorBuilder -> Frame<'TRowKey,'TColumnKey> + 1 overload member AddColumn : column:'TColumnKey * series:seq<'V> -> unit + 3 overloads member AggregateRowsBy : groupBy:seq<'TColumnKey> * aggBy:seq<'TColumnKey> * aggFunc:Func<Series<'TRowKey,'a>,'b> -> Frame<int,'TColumnKey> member Clone : unit -> Frame<'TRowKey,'TColumnKey> member ColumnApply : f:Func<Series<'TRowKey,'T>,ISeries<'TRowKey>> -> Frame<'TRowKey,'TColumnKey> + 1 overload member DropColumn : column:'TColumnKey -> unit ...

--------------------
new : unit -> Frame

--------------------
new : names:seq<'TColumnKey> * columns:seq<ISeries<'TRowKey>> -> Frame<'TRowKey,'TColumnKey>
new : rowIndex:Indices.IIndex<'TRowKey> * columnIndex:Indices.IIndex<'TColumnKey> * data:IVector<IVector> * indexBuilder:Indices.IIndexBuilder * vectorBuilder:Vectors.IVectorBuilder -> Frame<'TRowKey,'TColumnKey>
val toJaggedArray : frame:Frame<'R,'C> -> float [] [] (requires equality and equality)
val imputeBy : impute:Impute.MatrixBaseImputation<'a [],'a> -> isMissing:('a -> bool) -> data:seq<#seq<'a>> -> 'a [] []
<summary> Imputes rows by matrix-based imputation </summary>
module Ops from FSharp.Stats
<summary> Operations module (automatically opened) </summary>
val isNan : num:'b -> bool (requires equality)
<summary> Returs true if x is nan (generics) equality </summary>
Multiple items
module Matrix from FSharp.Stats

--------------------
type Matrix<'T> = | DenseRepr of DenseMatrix<'T> | SparseRepr of SparseMatrix<'T> interface IEnumerable interface IEnumerable<'T> interface IStructuralEquatable interface IStructuralComparable interface IComparable override Equals : yobj:obj -> bool override GetHashCode : unit -> int member GetSlice : start1:int option * finish1:int option * start2:int option * finish2:int option -> Matrix<'T> member PermuteColumns : p:permutation -> Matrix<'T> member PermuteRows : p:permutation -> Matrix<'T> ...
val ofJaggedSeq : xss:seq<#seq<float>> -> Matrix<float>
<summary> returns a dense matrix with the inner sequences of the input jagged sequences as its rows </summary>
val correlationMatrix : Matrix<float>
module Correlation from FSharp.Stats
<summary> Contains correlation functions for different data types </summary>
module Matrix from FSharp.Stats.Correlation
<summary> Contains correlation functions optimized for matrices </summary>
val rowWisePearson : m:Matrix<float> -> Matrix<float>
<summary> computes the rowwise pearson correlation matrix for the input matrix </summary>
val correlationHeatmap : GenericChart.GenericChart
val toJaggedArray : m:matrix -> float [] []
type Chart = static member Area : x:seq<#IConvertible> * y:seq<#IConvertible> * ?Name:string * ?ShowMarkers:bool * ?Showlegend:bool * ?MarkerSymbol:Symbol * ?Color:string * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Dash:DrawingStyle * ?Width:float -> GenericChart + 1 overload static member Bar : keys:seq<#IConvertible> * values:seq<#IConvertible> * ?Name:string * ?Showlegend:bool * ?Color:string * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Marker:Marker -> GenericChart + 1 overload static member BoxPlot : ?x:'a0 * ?y:'a1 * ?Name:string * ?Showlegend:bool * ?Color:string * ?Fillcolor:'a2 * ?Opacity:float * ?Whiskerwidth:'a3 * ?Boxpoints:Boxpoints * ?Boxmean:BoxMean * ?Jitter:'a4 * ?Pointpos:'a5 * ?Orientation:Orientation * ?Marker:Marker * ?Line:Line * ?Alignmentgroup:'a6 * ?Offsetgroup:'a7 * ?Notched:bool * ?NotchWidth:float * ?QuartileMethod:QuartileMethod -> GenericChart + 1 overload static member Bubble : x:seq<#IConvertible> * y:seq<#IConvertible> * sizes:seq<#IConvertible> * ?Name:string * ?Showlegend:bool * ?MarkerSymbol:Symbol * ?Color:string * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?StackGroup:string * ?Orientation:Orientation * ?GroupNorm:GroupNorm * ?UseWebGL:bool -> GenericChart + 1 overload static member Candlestick : open:seq<#IConvertible> * high:seq<#IConvertible> * low:seq<#IConvertible> * close:seq<#IConvertible> * x:seq<#IConvertible> * ?Increasing:Line * ?Decreasing:Line * ?WhiskerWidth:float * ?Line:Line * ?XCalendar:Calendar -> GenericChart + 1 overload static member ChoroplethMap : locations:seq<string> * z:seq<#IConvertible> * ?Text:seq<#IConvertible> * ?Locationmode:LocationFormat * ?Autocolorscale:bool * ?Colorscale:Colorscale * ?Colorbar:Colorbar * ?Marker:Marker * ?GeoJson:'a2 * ?FeatureIdKey:string * ?Zmin:float * ?Zmax:float -> GenericChart static member ChoroplethMapbox : locations:seq<#IConvertible> * z:seq<#IConvertible> * geoJson:'a2 * ?FeatureIdKey:string * ?Text:seq<#IConvertible> * ?Below:string * ?Colorscale:Colorscale * ?Colorbar:Colorbar * ?ZAuto:bool * ?ZMin:float * ?ZMid:float * ?ZMax:float -> GenericChart static member Column : keys:seq<#IConvertible> * values:seq<#IConvertible> * ?Name:string * ?Showlegend:bool * ?Color:string * ?Opacity:float * ?Labels:seq<#IConvertible> * ?TextPosition:TextPosition * ?TextFont:Font * ?Marker:Marker -> GenericChart + 1 overload static member Contour : data:seq<#seq<'a1>> * ?X:seq<#IConvertible> * ?Y:seq<#IConvertible> * ?Name:string * ?Showlegend:bool * ?Opacity:float * ?Colorscale:Colorscale * ?Showscale:'a4 * ?zSmooth:SmoothAlg * ?Colorbar:'a5 -> GenericChart (requires 'a1 :> IConvertible) static member DensityMapbox : lon:seq<#IConvertible> * lat:seq<#IConvertible> * ?Z:seq<#IConvertible> * ?Radius:float * ?Opacity:float * ?Text:seq<#IConvertible> * ?Below:string * ?Colorscale:Colorscale * ?Colorbar:Colorbar * ?Showscale:bool * ?ZAuto:bool * ?ZMin:float * ?ZMid:float * ?ZMax:float -> GenericChart + 1 overload ...
<summary> Provides a set of static methods for creating charts. </summary>
static member Chart.Heatmap : data:seq<#seq<'b>> * ?ColNames:seq<#System.IConvertible> * ?RowNames:seq<#System.IConvertible> * ?Name:string * ?Showlegend:bool * ?Opacity:float * ?Colorscale:StyleParam.Colorscale * ?Showscale:'e * ?Xgap:'f * ?Ygap:'g * ?zSmooth:StyleParam.SmoothAlg * ?Colorbar:'h * ?UseWebGL:bool -> GenericChart.GenericChart (requires 'b :> System.IConvertible)
module GenericChart from Plotly.NET
<summary> Module to represent a GenericChart </summary>
val toChartHTML : gChart:GenericChart.GenericChart -> string
<summary> Converts a GenericChart to it HTML representation. The div layer has a default size of 600 if not specified otherwise. </summary>