如前所述,示例应用程序使用 SQLite 数据库作为其数据存储(也可由 Python 端访问 - 见下文)。为此,使用了实体框架,以及在这篇 Codeproject 文章中找到的方法。然后将股票数据放入支持过滤和排序的 ListCollectionView 中:
private void LoadStocks()
{
var ctx = new SQLiteDatabaseContext(_mainVm.DbPath);
var itemList = ctx.Stocks.ToList().Select(s => new StockItem(s)).ToList();
_stocks = new ObservableCollection<StockItem>(itemList);
_collectionView = new ListCollectionView(_stocks);
// Initially sort the list by stock names
ICollectionView view = CollectionViewSource.GetDefaultView(_collectionView);
view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
}
获取文本输出 在这里,PythonRunner 正在调用生成文本输出的脚本。KMeansClusteringScript 属性指向要执行的脚本:
private async Task<string> RunKMeans()
{
TreeViewText = Processing;
Items.Clear();
try
{
string output = await _mainVm.PythonRunner.ExecuteAsync(
KMeansClusteringScript,
_mainVm.DbPath,
_mainVm.TickerList,
_mainVm.NumClusters,
_mainVm.StartDate.ToString("yyyy-MM-dd"),
_mainVm.EndDate.ToString("yyyy-MM-dd"));
return output;
}
catch (Exception e)
{
TreeViewText = e.ToString();
return string.Empty;
}
}
这是脚本产生的一些示例输出:
0 AYR 0,0,255
0 PCCWY 0,100,0
0 HSNGY 128,128,128
0 CRHKY 165,42,42
0 IBN 128,128,0
1 SRNN 199,21,133
...
4 PNBK 139,0,0
5 BOTJ 255,165,0
5 SPPJY 47,79,79
第一列是 k-Means 分析的聚类编号,第二列是相应股票的股票代码,第三列表示用于在图表中绘制该股票线条的颜色的 RGB 值。
Getting an Image
这是使用视图模型的 PythonRunner 实例异步调用所需 Python 脚本(其路径存储在 DrawSummaryLineChartScript 属性中)以及所需脚本参数的方法。结果一旦可用,就会被处理成“WPF 友好”形式:
internal async Task<bool> DrawChart()
{
SummaryChartText = Processing;
SummaryChart = null;
try
{
SummaryChart = Imaging.CreateBitmapSourceFromHBitmap(
bitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return true;
}
catch (Exception e)
{
SummaryChartText = e.ToString();
return false;
}
}
但这种方法不能正常工作?我做什么 ?
四季花海
相关分类