/// <summary> 平均と標準偏差を求める </summary> public List <CalcValue> CalcMeanDev(InspectItem inspects, List <MeasuredValue> collectDatas) { //容器を作成 var answers = new List <CalcValue>(); //注目測定点名・項目が同じものを取り出し、それぞれ平均・標準偏差を求める foreach (var sInspection in inspects.Inspects) { foreach (var sItem in inspects.Items) { //容器の作成 var answer = new CalcValue(); //リストから同系のものを取り出す var dList = collectDatas .Where(d => d.Inspect == sInspection) .Where(d => d.Item == sItem) .Select(d => d.Value) .ToList(); //リストに格納 //測定点名・項目 answer.Inspect = sInspection; answer.Item = sItem; var mathLibrary = new MathLibrary(); //平均 answer.MeanValue = mathLibrary.CalcMean(dList); //標準偏差 answer.DevValue = mathLibrary.CalvDev(dList); answers.Add(answer); } } return(answers); }
private static void Main(string[] args) { //注目測定点名と注目計測名と項目が書かれたファイルのアドレス var csvFilePath = @"C:\Users\hayashi\Documents\Visual Studio 2015\Projects\CodeTestSpace\insepectionData\settingData.CSV"; //特殊計算と対象が書かれたファイルのアドレス var csvCalcPath = @"C:\Users\hayashi\Documents\Visual Studio 2015\Projects\CodeTestSpace\insepectionData\calcSettingData.CSV"; //処理対象のフォルダのアドレス var basePath = @"C:\Users\hayashi\Documents\Visual Studio 2015\Projects\CodeTestSpace\testdata\"; //結果ファイル保存先のアドレス var saveDataPath = @"C:\Users\hayashi\Documents\Visual Studio 2015\Projects\CodeTestSpace\output\result.csv"; //結果保持用 var resultCalcMeanDev = new List <List <CalcValue> >(); var resultSpCalcMeanDev = new List <List <SpCalcMeanDev> >(); //注目測定点名と注目計測名と項目をファイルから読み込む //例 //ST1_SF01 (注目測定点名) //CubeHole1,CubeHole2 (注目計測名) //X Y ...等(項目) //注目計測名、項目は可変数 var institem = new InspectItem(); var inspectItems = institem.LoadConfiguration(csvFilePath); //特殊計算内容をファイルから読み込む //例: //distance,CubeHole1,CubeHole2 //特殊計算内容は可変とする var instSetting = new CalcSetting(); var calcSetting = instSetting.LoadConfiguration(csvCalcPath); foreach (var inspectItem in inspectItems) { //指定フォルダ以下のファイルを取得する //注目測定点名と合致するファイルを更にコレクトする //コレクトしたファイルから、注目計測名と注目測定名のデータを収集する var instData = new MeasuredValue(); var measuredValues = instData.CollectInspectedValues(inspectItem, basePath); //各注目測定点名ごとの平均と標準偏差を求める var instDataMeanDev = new CalcValue(); var calcMeanDev = instDataMeanDev.CalcMeanDev(inspectItem, measuredValues); resultCalcMeanDev.Add(calcMeanDev); //特殊計算を求める var instSpCalc = new SpCalcValue(); var spCalc = instSpCalc.SellectSpCalc(calcSetting, measuredValues); //特殊計算の平均と標準偏差を求める var instDataSpCalcMeanDev = new SpCalcMeanDev(); var spCalcMeanDev = instDataSpCalcMeanDev.CalcMeanDev(calcSetting, spCalc); resultSpCalcMeanDev.Add(spCalcMeanDev); //結果をファイルに保存する var saveDatas = new FileUtil(); saveDatas.SaveDatas(saveDataPath, calcMeanDev, spCalcMeanDev); } }
/// <summary> リストの各配列をそれぞれ inspectItem に格納し、それをList<inspectItem>に格納 </summary> public List <InspectItem> CreateListInspection(List <string> configLines) { //容器作成 var answers = new List <InspectItem>(); //configLinesを NumOfLines 行ずつにまとめる var configSets = configLines .Select((item, index) => new { item, index }) .GroupBy(elem => (int)(elem.index / NumOfLines), elem => elem.item) .ToList(); //dataListsの各項をそれぞれinspectItemに格納 //inspectionItemsの値をそれぞれのリストに格納 foreach (var configSet in configSets) { var answer = new InspectItem(); var insNameList = new List <string>(); var inspectsList = new List <string>(); var itemsList = new List <string>(); for (int i = 0; i < NumOfLines; i++) { //カンマを区切りにリスト作成 var result = configSet.ElementAt(i).Split(',').ToList(); //iの値で格納先変更 switch (i) { //InsNameListに保存 case 0: insNameList.AddRange(result); break; //InspectsListに保存 case 1: inspectsList.AddRange(result); break; //ItemsListに保存 case 2: itemsList.AddRange(result); break; //スキップ case 3: break; default: break; } } //List<inspectItem>に値を格納 answer.InsNames = insNameList; answer.Inspects = inspectsList; answer.Items = itemsList; answers.Add(answer); } return(answers); }