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>());
if (csv.Headers.Length < 25 || csv.Headers.Length > 26) {
Console.WriteLine("CSVデータの列数が正しくありません.");
return;
}
bool WithScene = (csv.Headers.Length == 26);
foreach (var d in csv.Data) {
var ld = new LogData();
int c = 0;
ld.ElapTime = double.Parse(d[c++]);
ld.StimNo = int.Parse(d[c++]);
if (WithScene) ld.SceneNo = int.Parse(d[c++]);
ld.SceneTime = double.Parse(d[c++]);
//ld.GazeV.x = float.Parse(d[c++]);
//ld.GazeV.y = float.Parse(d[c++]);
//ld.Shift.x = float.Parse(d[c++]);
//ld.Shift.y = float.Parse(d[c++]);
//ld.GazeI.x = float.Parse(d[c++]);
//ld.GazeI.y = float.Parse(d[c++]);
//ld.Target = int.Parse(d[c++]);
//ld.ContactTime = double.Parse(d[c++]);
//ld.Feedback = int.Parse(d[c++]);
//ld.TrainingLevel = int.Parse(d[c++]);
//ld.RR = int.Parse(d[c++]);
//ld.PupilL = float.Parse(d[c++]);
//ld.PupilR = float.Parse(d[c++]);
_data.Add(ld);
}
Console.WriteLine($"{_data.Count}件のデータを読み込みました");
}
}
}