/// <summary>
/// 拉依达准则剔除数据异常
/// </summary>
public class DataExceptionHelper
{
List<int> ListNum;
double Mean = 0.0;
int BadDataNum = -1;//坏值的个数
public DataExceptionHelper(List<int> list)
{
this.ListNum = list;
SetMean();
}
/// <summary>
/// 平均值
/// </summary>
/// <returns></returns>
void SetMean()
{
this.Mean = this.ListNum.Sum() / this.ListNum.Count;
}
/// <summary>
/// 标准差
/// </summary>
/// <returns></returns>
double StandardDeviation()
{
List<double> listXi = new List<double>();
foreach (int kv in this.ListNum)
{
listXi.Add((kv - this.Mean) * (kv - this.Mean));
}
double sumXi = listXi.Sum();
double d2 = sumXi / (this.ListNum.Count - 1);
double d = Math.Sqrt(d2);
return d;
}
List<int> GetGood()
{
double sd3 = StandardDeviation() * 3;//3倍标准差
List<int> list = new List<int>();
foreach (int kv in this.ListNum)
{
if (Math.Abs(kv - this.Mean) < sd3)
{
list.Add(kv);
}
}
return list;
}
public List<int> GetGoodList()
{
bool isRun = true;
List<int> list = ListNum;
while (isRun)
{
int num = list.Count;
this.ListNum = list;
list = GetGood();
if (list.Count == num)
{
isRun = false;
}
}
return list;
}
}
/// 拉依达准则剔除数据异常
/// </summary>
public class DataExceptionHelper
{
List<int> ListNum;
double Mean = 0.0;
int BadDataNum = -1;//坏值的个数
public DataExceptionHelper(List<int> list)
{
this.ListNum = list;
SetMean();
}
/// <summary>
/// 平均值
/// </summary>
/// <returns></returns>
void SetMean()
{
this.Mean = this.ListNum.Sum() / this.ListNum.Count;
}
/// <summary>
/// 标准差
/// </summary>
/// <returns></returns>
double StandardDeviation()
{
List<double> listXi = new List<double>();
foreach (int kv in this.ListNum)
{
listXi.Add((kv - this.Mean) * (kv - this.Mean));
}
double sumXi = listXi.Sum();
double d2 = sumXi / (this.ListNum.Count - 1);
double d = Math.Sqrt(d2);
return d;
}
List<int> GetGood()
{
double sd3 = StandardDeviation() * 3;//3倍标准差
List<int> list = new List<int>();
foreach (int kv in this.ListNum)
{
if (Math.Abs(kv - this.Mean) < sd3)
{
list.Add(kv);
}
}
return list;
}
public List<int> GetGoodList()
{
bool isRun = true;
List<int> list = ListNum;
while (isRun)
{
int num = list.Count;
this.ListNum = list;
list = GetGood();
if (list.Count == num)
{
isRun = false;
}
}
return list;
}
}