Voor de programmeertaal Python is Pandas een efficiënte en populaire tool voor gegevensanalyse, met name het Dataframe, dat wordt gebruikt om gegevens te manipuleren en weer te geven. Voor de .NET-programmeertalen kunnen we Deedle of Microsoft.Data.Analysis pakket beschikbaar in NuGet die ook een DataFrame-klasse biedt die wordt gebruikt om gegevens te manipuleren, transformeren en weer te geven.
Dit voorbeeld richt zich op Microsoft.Data.Analysis pakket door enkele basisfuncties van de DataFrame-klasse in Jupyter Notebook te demonstreren.
Het maakt ook gebruik van de XPlot.Plotly pakket dat een F # -gegevensvisualisatiepakket is om grafieken voor de gegevens in het dataframe te plotten. De broncode is beschikbaar op GitHub.
Voorwaarde
Raadpleeg dit om voorbeelden in dit artikel uit te voeren .NET Core gebruiken in Jupyter Notebook artikel voor het instellen van Jupyter Notebook om de .NET-programmeertalen te ondersteunen.
Installeer het pakket
De Microsoft.Data.Analysis pakket is beschikbaar in Nuget, dus het dotnet-interactive #r magisch commando kan worden gebruikt om het pakket vanuit NuGet te installeren.
Voer de onderstaande opdracht uit om te installeren Microsoft.Data.Analysis pakketversie 0.4.0.
#r "nuget:Microsoft.available Data.Analysis,0.4.0"
Verwijs de naamruimten
In dit artikel worden klassen uit de volgende vier pakketten gebruikt. Daarom gebruikt het de gebruik makend van verklaring om naar die pakketten te verwijzen.
- XPlot.Plotly: Een platformonafhankelijk datavisualisatiepakket voor de programmeertalen F # en .NET
- Microsoft.Data.Analysis: Een gebruiksvriendelijke en krachtige bibliotheken voor gegevensanalyse en -transformatie
- System.Linq: Klassen en interfaces die query’s ondersteunen die gebruikmaken van taalgeïntegreerde query’s
- Microsoft.AspNetCore.Html: Typen voor het manipuleren van HTML-inhoud
using XPlot.Plotly;
using Microsoft.Data.Analysis;
using System.Linq;
using Microsoft.AspNetCore.Html;
Render een dataframe als een HTML-tabel
Standaard wordt een dataframe weergegeven als een HTML-tabel met één rij en twee kolommen (kolommen en rijen).
Dit kan worden opgeheven door de aangepaste formatter voor het DataFrame te registreren. De onderstaande code registreert aangepaste opmaakprogramma’s voor het Dataframe en DataFrameRow om de gegevens in een HTML-tabel weer te geven.
Het geeft alleen de eerste 100 rijen weer. Dit kan worden gewijzigd door de waarde van de nemen variabele.
Maak het DataFrame
DataFrameColumn
Een DataFrame kan worden gemaakt door de lijst met DataFrameColumn objecten tegen de constructor van het DataFrame.
openbaar DataFrame (parameters DataFrameColumn[] kolommen); openbaar DataFrame (IEnumerable |
De volgende code maakt een DataFrame met 200 rijen en 2 kolommen. De eerste kolom bevat datums en de tweede kolom bevat willekeurige gehele getallen. Het noemt de PrimitiveDataFrameColumn constructor om het DataFrameColumn gevallen.
var start = new DateTime(2009,1,1);
Random rand = new Random();
var numDataPoint = 200;
PrimitiveDataFrameColumn<DateTime> date = new PrimitiveDataFrameColumn<DateTime>("Date",
Enumerable.Range(0, numDataPoint)
.Select(offset => start.AddDays(offset))
.ToList());
PrimitiveDataFrameColumn<int> data = new PrimitiveDataFrameColumn<int>("Data",
Enumerable.Range(0, numDataPoint)
.Select(r => rand.Next(100))
.ToList());
var df = new DataFrame(date, data);
df
CSV-bestand
Het DataFrame kan ook worden gemaakt op basis van een CSV-bestand door de DataFrame.LoadCsv statische methode.
Met de volgende code wordt een dataframe gemaakt op basis van het bestand ohcldata.csv. Dit bestand wordt gedownload van 5.30. Voorbeeld – Basis OHLC (open, hoog, laag, gesloten) financieel plot website. Dit bestand bevat de dagelijkse financiële gegevens Open, Hoog, Laag en Sluiten.
var df1 = DataFrame.LoadCsv("ohlcdata.csv");
df1
Dan de Info methode kan worden gebruikt om een samenvatting van elke kolom in het DataFrame te genereren.
Toegang tot het DataFrame
Toegang tot gegevens per index
Een rij-index en kolomindex kunnen worden gebruikt om toegang te krijgen tot de specifieke gegevens in het DataFrame. De index is op nul gebaseerde nummering.
De onderstaande codetoegangsgegevens in de eerste rij en de tweede kolom.
Daarna kan een nieuwe waarde worden toegewezen aan het DataFrame.
De onderstaande code verhoogt de gegevens in de eerste rij en de tweede kolom met 10.
df[0,1] = int.Parse(df[0,1].ToString()) + 10;
df.Head(10)
Toegang tot rijgegevens
De hele rij is toegankelijk met behulp van een rij-index. De index is op nul gebaseerde nummering.
De onderstaande code geeft toegang tot de tiende rij in het DataFrame.
De kolomindex kan ook worden gebruikt om toegang te krijgen tot de specifieke kolom in de rij.
Het onderstaande geeft toegang tot de vierde kolom in de tiende rij.
Vervolgens kan de nieuwe waarde ook aan de kolom worden toegewezen.
De onderstaande code wijst 50000000 toe aan de zesde kolom.
df1.Rows[9][5] = 50000000f;
df1.Head(10)
Toegang tot kolomgegevens
De volledige kolom is toegankelijk via een kolomnaam of index. De index is op nul gebaseerde nummering.
De onderstaande code geeft toegang tot de genoemde kolom Gegevens (de tweede kolom) in het DataFrame.
//df.Columns["Data"] or df.Columns[1]
df.Columns["Data"]
De gegevens in de kolom kunnen worden gewijzigd met behulp van de overbelaste operators van het DataFrame.
De onderstaande code verhoogt alle gegevens in de kolom met tien.
df.Columns["Data"]= df.Columns["Data"]+10;
df
Gegevens invoegen
Voeg een nieuwe kolom toe
Het DataFrame houdt een lijst bij van DataFrameColumns in de DataFrameColumnCollection. Er kan een nieuwe kolom worden toegevoegd aan de DataFrameColumnCollection.
De onderstaande code voegt een nieuwe integer-kolom toe aan het DataFrame.
df.Columns.Add(new PrimitiveDataFrameColumn<int>("Data1", df.Rows.Count()));
df
De gegevens in de nieuwe kolom zijn ingesteld op nul.
De volgende code vult null-waarden in de nieuwe kolom (Data1) met 10.
df.Columns["Data1"].FillNulls(10, true);
df
Voeg een nieuwe rij toe
De Toevoegen methode kan worden gebruikt om nieuwe rijen aan het DataFrame toe te voegen.
De volgende code maakt een lijst met KeyValuePair instanties en voegt het vervolgens toe aan het DataFrame.
df.Append(new List<KeyValuePair<string, object>>() {
new KeyValuePair<string, object>("Date", DateTime.Now),
new KeyValuePair<string, object>("Data", 12),
new KeyValuePair<string, object>("Data1", 50)
}, true);
df.Tail(10)
Manipuleer het dataframe
Sorteer het DataFrame
De OrderBy of OrderByDescending methode kan worden gebruikt om het DataFrame te ordenen op basis van een opgegeven kolom.
De volgende code sorteert het DataFrame op de kolom met de naam Gegevens.
Groepeer het DataFrame
De GroupBy methode kan worden gebruikt om de rijen van het DataFrame te groeperen op basis van unieke waarden in de kolom.
De volgende code groepeert het DataFrame op de kolom met de naam Data en telt vervolgens het aantal waarden in elke groep.
var groupByData = df.GroupBy("Data");
groupByData.Count().OrderBy("Data")
Filter het DataFrame
De Filter methode kan worden gebruikt om het DataFrame te filteren op rij-indexen of booleaanse waarden.
De volgende code filtert het DataFrame door rijen te retourneren met de waarden in de genoemde kolom Gegevens groter dan vijftig.
df.Filter(df.Columns["Data"].ElementwiseGreaterThan(50))
Voeg het DataFrame samen
De Samenvoegen methode kan worden gebruikt om twee DataFrames samen te voegen met een database-achtige join.
De volgende code voegt twee DataFrames samen met behulp van de Datum kolom in beide DataFrames. Ten eerste converteert het het gegevenstype in de Datum kolom van de df1 van de draad typ naar het DataTime type. Vervolgens roept het de Samenvoegen methode om deel te nemen aan de DataFrames.
df1.Columns["Date"] = new PrimitiveDataFrameColumn<DateTime>("Date",
df1.Columns["Date"]
.Cast<object>()
.ToList()
.Select(x => DateTime.ParseExact(x.ToString(), "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture))
.Cast<DateTime>());
df1.Merge<DateTime>(df, "Date", "Date")
Plot grafieken met behulp van XPlot.Ploty
XPlot.Ploty is een platformonafhankelijk datavisualisatiepakket voor de programmeertalen F # en .NET. Het is gebaseerd op Plotly dat is de populaire JavaScript-kaartbibliotheek.
De volgende voorbeelden laten zien hoe u XPlot.Ploty gebruikt om grafieken te plotten met behulp van de gegevens in het DataFrame.
Lijngrafiek
De volgende code zet een lijndiagram uit de Open kolom in het DataFrame.
var chart1 = Chart.Plot(
new Graph.Scatter
{
x = df1.Columns["Date"],
y = df1.Columns["Open"],
mode = "lines+markers"
}
);
var chart1_layout = new Layout.Layout{
title="Open Price",
xaxis =new Graph.Xaxis{
title = "Date"
},
yaxis =new Graph.Yaxis{
title = "Price (USD)"
}
};
chart1.WithLayout(chart1_layout);
chart1
Lijndiagram met meerdere lijnen
De volgende code zet de Open, en Dichtbij kolommen in een lijndiagram.
var chart2_list = new List<Graph.Scatter>
{
new Graph.Scatter
{
x = df1.Columns["Date"],
y = df1.Columns["Open"],
name="Open",
mode = "lines"
},
new Graph.Scatter
{
x = df1.Columns["Date"],
y = df1.Columns["Close"],
name="Close",
mode = "lines"
}
};
var chart2 = Chart.Plot(
chart2_list
);
var chart2_layout = new Layout.Layout{
title="Open and Close Price",
xaxis =new Graph.Xaxis{
title = "Date"
},
yaxis =new Graph.Yaxis{
title = "Price (USD)"
}
};
chart2.WithLayout(chart2_layout);
chart2
Staafdiagram
De volgende code zet een staafdiagram uit de Volume kolom in het DataFrame.
var chart3 = Chart.Plot(
new Graph.Bar
{
x = df1.Columns["Date"],
y = df1.Columns["Volume"],
marker = new Graph.Marker{color = "rgb(0, 0, 109)"}
}
);
var chart3_layout = new Layout.Layout{
title="Volume",
xaxis =new Graph.Xaxis{
title = "Date"
},
yaxis =new Graph.Yaxis{
title = "Unit"
}
};
chart3.WithLayout(chart3_layout);
chart3
Kandelaar grafiek
De volgende code zet een kandelaargrafiek uit de Open, Hoog, Laag, Dichtbij kolommen in het DataFrame.
var chart4 = Chart.Candlestick(df1.OrderBy("Date").Rows.Select(row => new Tuple<string, double, double, double, double>(
((DateTime)row[0]).ToString("yyyy-MM-dd"),
double.Parse(row[1].ToString()),
double.Parse(row[2].ToString()),
double.Parse(row[3].ToString()),
double.Parse(row[4].ToString())
)));
chart4.WithLayout(new Layout.Layout{
title="OHLC",
xaxis =new Graph.Xaxis{
title = "Date"
},
yaxis =new Graph.Yaxis{
title = "Price (USD)"
}
});
chart4
Referenties
- Phplot.sourceforge.net. en 5.30. Voorbeeld – Basis OHLC (open, hoog, laag, gesloten) financieel plot. [online] Verkrijgbaar bij: http://phplot.sourceforge.net/phplotdocs/ex-ohlcbasic.html [Accessed 6 May 2021].
- Blauwemountaincapital.github.io. nd Deedle: Verkennende gegevensbibliotheek voor .NET. [online] Verkrijgbaar bij: https://bluemountaincapital.github.io/Deedle/ [Accessed 6 May 2021].
- Govindarajan, P., 2019. An Introduction to DataFrame | .NET-blog. [online] .NET-blog. Verkrijgbaar bij: https://devblogs.microsoft.com/dotnet/an-introduction-to-dataframe/ [Accessed 6 May 2021].
- Sequeira, J., 2020. dotnet / interactive: Magic Commands. [online] GitHub. Verkrijgbaar bij: https://github.com/dotnet/interactive/blob/main/docs/magic-commands.md [Accessed 6 May 2021].
- Winnington, E., 2019. Eric Winnington – Tips en trucs voor C # Jupyter-notebook. [online] Ewinnington.github.io. Verkrijgbaar bij: https://ewinnington.github.io/posts/jupyter-tips-csharp [Accessed 6 May 2021].
- Fslab.org. nd XPlot – F # Data Visualization Package. [online] Verkrijgbaar bij: https://fslab.org/XPlot/index.html [Accessed 6 May 2021].
- Phuriphanvichai, J., 2021. .NET Core gebruiken in Jupyter Notebook | Refinitiv-ontwikkelaars. [online] Developers.refinitiv.com. Verkrijgbaar bij: https://developers.refinitiv.com/en/article-catalog/article/using–net-core-in-jupyter-notebook.html [Accessed 10 May 2021].
CreditSource link