Newer
Older
PrismSoftware / DataAnalysis / Analysis.cs
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}件のデータを読み込みました");
        }
    }
}