Newer
Older
PrismSoftware / DataAnalysis / Analysis.cs
@Toshiya Nakaguchi Toshiya Nakaguchi on 25 Dec 2019 2 KB 解析
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}件のデータを読み込みました");
        }
    }
}