using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DataAnalysis {
class Analysis {
List<LogData> _data = new List<LogData>();
const double ignoreTime = 2000.0D;
public void Analyze() {
var imglist = new List<int>() { 1, 2, 3 };
foreach (var imgid in imglist) {
var logall = _data.Where(s => s.image == imgid).OrderBy(s => s.etime);
var startTime = logall.Min(s => s.etime);
var endTime = logall.Max(s => s.etime);
//Console.WriteLine($"image {imgid} {startTime} - {endTime}ms");
//var grance = logall.Take(10);
//foreach (var d in grance) {
// Console.WriteLine($"{d.etime}, {d.image}, ({d.x}, {d.y})");
//}
var target = logall.Where(s => s.etime > startTime + ignoreTime);
var mx = target.Average(s => s.x);
var my = target.Average(s => s.y);
var ssumx = 0D;
var ssumy = 0D;
foreach (var d in target) {
ssumx += (d.x - mx) * (d.x - mx);
ssumy += (d.y - my) * (d.y - my);
Console.WriteLine($"{d.etime},{d.image},{d.x - mx},{d.y - my}");
}
var sdx = Math.Sqrt(ssumx / (double)target.Count());
var sdy = Math.Sqrt(ssumy / (double)target.Count());
//Console.WriteLine($"SD x={sdx}, y={sdy}");
Console.WriteLine(",,,");
}
}
public void ReadData(string filename) {
var csv = new CsvFile();
csv.Open(filename, new List<string>());
foreach (var d in csv.Data) {
if (d.Length != 4) {
Console.WriteLine("CSVデータが4列になっていません");
return;
}
var logdata = new LogData();
if (!double.TryParse(d[0], out logdata.etime)) {
Console.WriteLine("CSVデータの1列目が実数になっていません");
return;
}
if (!int.TryParse(d[1], out logdata.image)) {
Console.WriteLine("CSVデータの2列目が整数になっていません");
return;
}
if (!double.TryParse(d[2], out logdata.x)) {
Console.WriteLine("CSVデータの3列目が実数になっていません");
return;
}
if (!double.TryParse(d[3], out logdata.y)) {
Console.WriteLine("CSVデータの4列目が実数になっていません");
return;
}
_data.Add(logdata);
}
//Console.WriteLine($"{_data.Count}件のデータを読み込みました");
}
}
}