Esempio n. 1
0
        //Function called to adapt the given column to match the DateTime type
        private Input updateTime(Input curInput, DateTimeTypes curType)
        {
            for (int i = 0; i < curInput.vals2.Count; i++)
            {
                if (curInput.vals.Count - 1 < i) curInput.vals.Add(0.0);
                DateTime tempVal = new DateTime(1900, 1, 1);

                if (DateTime.TryParse(curInput.vals2[i], Common.curCulture, System.Globalization.DateTimeStyles.None, out tempVal))
                {
                    double newVal = valueFromDateTimeType(tempVal, curType);
                    if (!curInput.conversionDict.ContainsKey(curInput.vals2[i])) curInput.conversionDict.Add(curInput.vals2[i], newVal);
                    curInput.vals[i] = newVal;
                }
                else
                {
                    curInput.wrongRowsCount = curInput.wrongRowsCount + 1;
                }
            }

            return curInput;
        }
Esempio n. 2
0
        //Function converting the values in the given column into categorical type, that is: assigning each value with a unique index (starting from zero)
        private Input updateCategorical(Input curInput)
        {
            curInput.conversionDict = new Dictionary<string, double>();

            double newCateg = -1.0;
            foreach (string item in curInput.vals2.Distinct().OrderBy(x => x))
            {
                newCateg = newCateg + 1.0;
                curInput.conversionDict.Add(item, newCateg);
            }

            for (int i = 0; i < curInput.vals2.Count; i++)
            {
                if (curInput.vals.Count - 1 < i) curInput.vals.Add(0.0);

                curInput.vals[i] = curInput.conversionDict[curInput.vals2[i]];
            }

            return curInput;
        }
Esempio n. 3
0
        public int noDec; //Number of decimals to be considered while dealing with the given variable

        #endregion Fields

        #region Constructors

        public Variable()
        {
            input = new Input();
        }
Esempio n. 4
0
        //Most of the (data) assessment is performed at a later stage (i.e., while analysing the given combination/fit).
        //This is a pre-analysis of the raw input information which will have a (slight) influence in the later assessment
        private Input preAnalyseColumn(Input curInput)
        {
            curInput.preAnalysis.averValue = curInput.vals.Average();
            curInput.preAnalysis.commonValsCount = curInput.vals.Count - curInput.vals.Distinct().Count() + 1;
            if (curInput.preAnalysis.commonValsCount == curInput.vals.Count)
            {
                curInput.type.mainType = MainTypes.Constant;
                return curInput;
            }
            curInput.preAnalysis.averVariabilityValue = curInput.vals.Select(x => Math.Abs(x - curInput.preAnalysis.averValue)).Average();

            //Preliminary rating of the given input (column) on account of the number of common values and the variability of its error
            curInput.preAnalysis.rating = 10;
            double ratio = (double)curInput.preAnalysis.commonValsCount / (double)curInput.vals.Count;
            if (curInput.preAnalysis.commonValsCount > 5 || ratio >= 0.05)
            {
                curInput.preAnalysis.rating = curInput.preAnalysis.rating - 1;

                if (ratio >= 0.7)
                {
                    curInput.preAnalysis.rating = 4;
                }
                else if (ratio >= 0.5)
                {
                    curInput.preAnalysis.rating = 5;
                }
                else if (ratio >= 0.35)
                {
                    curInput.preAnalysis.rating = 6;
                }
                else if (ratio >= 0.2)
                {
                    curInput.preAnalysis.rating = 7;
                }
            }

            double diffRatio = Common.errorCalcs(curInput.preAnalysis.averVariabilityValue, curInput.preAnalysis.averValue);
            if (diffRatio <= 0.05)
            {
                curInput.preAnalysis.rating = curInput.preAnalysis.rating - 5;
            }
            else if (diffRatio <= 0.1)
            {
                curInput.preAnalysis.rating = curInput.preAnalysis.rating - 4;
            }
            else if (diffRatio <= 0.2)
            {
                curInput.preAnalysis.rating = curInput.preAnalysis.rating - 3;
            }
            else if (diffRatio <= 0.3)
            {
                curInput.preAnalysis.rating = curInput.preAnalysis.rating - 2;
            }
            else if (diffRatio <= 0.5)
            {
                curInput.preAnalysis.rating = curInput.preAnalysis.rating - 1;
            }

            if (curInput.preAnalysis.rating < 0) curInput.preAnalysis.rating = 0;

            return curInput;
        }
Esempio n. 5
0
 //Method called by the one above to update the associated Label (lblNonNumerical2) with a message explaining the performed conversion
 private void operationFromMainSecType(Input curInput)
 {
     if (curInput.type.mainType == MainTypes.Categorical)
     {
         lblNonNumerical2.Text = "Conversion [categorical]: unique index (" + curInput.min.ToString() + "-" + curInput.max.ToString() + ").";
     }
     else if (curInput.type.mainType == MainTypes.DateTime)
     {
         if (curInput.type.secType == DateTimeTypes.Time)
         {
             lblNonNumerical2.Text = "Conversion [time]: 10000 " + Common.getSignFromoperation(Operation.Multiplication, false) + " hours + 100 " + Common.getSignFromoperation(Operation.Multiplication, false) + " minutes + seconds.";
         }
         else
         {
             lblNonNumerical2.Text = "Conversion [date]: corresponding " + curInput.type.secType.ToString().ToLower() + ".";
         }
     }
 }