Example #1
0
        //呼吸のデータを集計用グラフに出力
        void SetBreathDataToPercentageBarChart(List <Data> breathDataList)
        {
            //頭の向きで最も要素数が大きいものを探す(異常データは含まない)
            int maxHeadDirCount = 0;

            foreach (SleepData.HeadDir headDir in System.Enum.GetValues(typeof(SleepData.HeadDir)))
            {
                int count = 0;

                // 0~10秒
                count += breathDataList
                         .Where(data => data.HeadDir1 == headDir)
                         .Where(data => data.GetBreathState1() != SleepData.BreathState.Empty)  //異常データをはじく
                         .Count();

                // 11~20秒
                count += breathDataList
                         .Where(data => data.HeadDir2 == headDir)
                         .Where(data => data.GetBreathState2() != SleepData.BreathState.Empty)  //異常データをはじく
                         .Count();

                // 21~13秒
                count += breathDataList
                         .Where(data => data.HeadDir3 == headDir)
                         .Where(data => data.GetBreathState3() != SleepData.BreathState.Empty)  //異常データをはじく
                         .Count();
                maxHeadDirCount = count > maxHeadDirCount ? count : maxHeadDirCount;
            }

            //呼吸状態をグラフに表示する順番に並べ替え
            SleepData.BreathState[] sortedBreathState =
            {
                SleepData.BreathState.Normal,
                SleepData.BreathState.Snore,
                SleepData.BreathState.Apnea
            };
            int addCount = 0;   //グラフの右端に余裕を持たせるために追加する値

            foreach (SleepData.HeadDir headDir in System.Enum.GetValues(typeof(SleepData.HeadDir)))
            {
                //体の向きそれぞれに対して処理を行う
                List <LabelData> labelDataList = new List <LabelData>();

                foreach (SleepData.BreathState breathState in sortedBreathState)
                {
                    //呼吸状態それぞれに対して処理を行う
                    //体の向きが合致して、なおかつ呼吸状態も合致するデータの個数を求める
                    int value = 0;
                    // 0~10秒
                    value += breathDataList.Where(
                        data =>
                        data.HeadDir1.Equals(headDir) &&
                        data.GetBreathState1().Equals(breathState)
                        ).Count();

                    // 11~20秒
                    value += breathDataList.Where(
                        data =>
                        data.HeadDir2.Equals(headDir) &&
                        data.GetBreathState2().Equals(breathState)
                        ).Count();

                    // 21~30秒
                    value += breathDataList.Where(
                        data =>
                        data.HeadDir3.Equals(headDir) &&
                        data.GetBreathState3().Equals(breathState)
                        ).Count();

                    if (value == 0)
                    {
                        continue;
                    }
                    LabelData.Label label = this.breathLabelList
                                            .Where(
                        l => l.GetBreathState().Equals(breathState))
                                            .First().GetLabel();
                    labelDataList.Add(new LabelData(value, label));
                }
                PercetageBarChart output = null;
                //呼吸データを体の向きごとに集計したものをグラフに出力する
                switch (headDir)
                {
                case SleepData.HeadDir.Left:
                    output = Output_Percentage_Left;
                    break;

                case SleepData.HeadDir.Up:
                    output = Output_Percentage_Up;
                    break;

                case SleepData.HeadDir.Right:
                    output = Output_Percentage_Right;
                    break;

                case SleepData.HeadDir.Down:
                    output = Output_Percentage_Down;
                    break;
                }
                addCount = maxHeadDirCount / 9;         //1割空白を作成するように
                output.SetPercentageData(maxHeadDirCount + addCount, labelDataList);
            }

            //データ個数からラベルとして表示するための時間を算出します
            // 呼吸状態のデータ数が3倍になったため、3で割って正しい時間に直している
            int hour = ((maxHeadDirCount + addCount) / 2) / 3 / 60;
            int min  = ((maxHeadDirCount + addCount) / 2) / 3 % 60;
            int sec  = ((maxHeadDirCount + addCount) % 2) / 3 * 30;

            Output_AggrigateTimeLabel.SetAxis(hour, min, sec);
        }
        //いびきのデータを集計用グラフに出力
        void SetBreathDataToPercentageBarChart(List <Data> ibikiDataList)
        {
            //頭の向きで最も要素数が大きいものを探す
            int maxHeadDirCount = 0;

            foreach (SleepData.HeadDir headDir in System.Enum.GetValues(typeof(SleepData.HeadDir)))
            {
                int count = 0;
                count += ibikiDataList.Where(data => data.HeadDir1 == headDir).Count();

                count += ibikiDataList.Where(data => data.HeadDir2 == headDir).Count();

                count += ibikiDataList.Where(data => data.HeadDir3 == headDir).Count();

                maxHeadDirCount = count > maxHeadDirCount ? count : maxHeadDirCount;
            }

            int addCount = 0;   //グラフの右端に余裕を持たせるために追加する値

            foreach (SleepData.HeadDir headDir in System.Enum.GetValues(typeof(SleepData.HeadDir)))
            {
                //体の向きそれぞれに対して処理を行う
                List <LabelData> labelDataList = new List <LabelData>();
                foreach (IbikiLebel ibikiLebel in ibikiLebelList)
                {
                    //いびきのレベルそれぞれに対して処理を行う
                    //体の向きが合致して、なおかついびきレベルも合致するデータの個数を求める
                    int value = 0;
                    value += ibikiDataList.Where(
                        data =>
                        (data.HeadDir1.Equals(headDir) && TransIbikiLoudnessToLabel(data.SnoreVolume1).GetName().Equals(ibikiLebel.GetLabel().GetName()))
                        ).Count();

                    value += ibikiDataList.Where(
                        data =>
                        (data.HeadDir2.Equals(headDir) && TransIbikiLoudnessToLabel(data.SnoreVolume2).GetName().Equals(ibikiLebel.GetLabel().GetName()))
                        ).Count();

                    value += ibikiDataList.Where(
                        data =>
                        (data.HeadDir3.Equals(headDir) && TransIbikiLoudnessToLabel(data.SnoreVolume3).GetName().Equals(ibikiLebel.GetLabel().GetName()))
                        ).Count();

                    if (value == 0)
                    {
                        continue;
                    }
                    LabelData.Label label = ibikiLebel.GetLabel();
                    labelDataList.Add(new LabelData(value, label));
                }

                PercetageBarChart output = null;
                //呼吸データを体の向きごとに集計したものをグラフに出力する
                switch (headDir)
                {
                case SleepData.HeadDir.Left:
                    output = Output_Percentage_Left;
                    break;

                case SleepData.HeadDir.Up:
                    output = Output_Percentage_Up;
                    break;

                case SleepData.HeadDir.Right:
                    output = Output_Percentage_Right;
                    break;

                case SleepData.HeadDir.Down:
                    output = Output_Percentage_Down;
                    break;
                }
                addCount = maxHeadDirCount / 9;         //1割空白を作成するように
                output.SetPercentageData(maxHeadDirCount + addCount, labelDataList);
            }

            //データ個数からラベルとして表示するための時間を算出します
            // 体の向きのデータ個数が3倍になったため、3で割っている
            int hour = ((maxHeadDirCount + addCount) / 2) / 3 / 60;
            int min  = ((maxHeadDirCount + addCount) / 2) / 3 % 60;
            int sec  = ((maxHeadDirCount + addCount) % 2) / 3 * 30;
            //Output_AggrigateTimeLabel.SetAxis(hour, min, sec);
        }