using System.Collections.Generic;
public static double Logtwo(double num)
return - Math.Log(num)/ Math.Log(2);
public static double CalLog(double numOne, double numTwo, int TotalCount)
return (-(numOne / TotalCount)) * ((Math.Log(numOne / TotalCount) / Math.Log(2))) - ((numTwo / TotalCount)) * ((Math.Log(numTwo / TotalCount) / Math.Log(2)));
static double found(List<string> x, string k)
public static void Main(string[] args)
string CatNameOne = "Old";
string CatNameTwo = "Middle";
string CatNameThree = "Young";
List<CatClass> model = new List<CatClass>();
model.Add(new CatClass { PartId = 1, PartName1 = "Old", PartName2 = "Medium", PartName3 = "Student", PartClass = "No" });
model.Add(new CatClass { PartId = 2, PartName1 = "Middle", PartName2 = "High", PartName3 = "Teacher", PartClass = "No" });
model.Add(new CatClass { PartId = 3, PartName1 = "Old", PartName2 = "Low", PartName3 = "Teacher", PartClass = "No" });
model.Add(new CatClass { PartId = 4, PartName1 = "Young", PartName2 = "Medium", PartName3 = "Teacher", PartClass = "No" });
model.Add(new CatClass { PartId = 5, PartName1 = "Young", PartName2 = "Low", PartName3 = "Teacher", PartClass = "No" });
model.Add(new CatClass { PartId = 6, PartName1 = "Old", PartName2 = "Medium", PartName3 = "Student", PartClass = "No" });
model.Add(new CatClass { PartId = 7, PartName1 = "Middle", PartName2 = "Medium", PartName3 = "Student", PartClass = "Yes" });
model.Add(new CatClass { PartId = 8, PartName1 = "Young", PartName2 = "High", PartName3 = "Teacher", PartClass = "Yes" });
model.Add(new CatClass { PartId = 9, PartName1 = "Old", PartName2 = "High", PartName3 = "Student", PartClass = "Yes" });
model.Add(new CatClass { PartId = 10, PartName1 = "Middle", PartName2 = "High", PartName3 = "Student", PartClass = "Yes" });
List<CatClass> modelNo = new List<CatClass>();
List<CatClass> modelYes = new List<CatClass>();
List<CatClass> modelOne = new List<CatClass>();
List<CatClass> modelTwo = new List<CatClass>();
List<CatClass> modelThree = new List<CatClass>();
foreach (var items in model)
if(items.PartClass == ClassNo)
modelNo.Add(new CatClass { PartId = items.PartId, PartName1 = items.PartName1, PartClass = items.PartClass });
else if(items.PartClass == ClassYes)
modelYes.Add(new CatClass { PartId = items.PartId, PartName1 = items.PartName1, PartClass = items.PartClass });
DateTime dt = DateTime.Now;
Console.WriteLine("//////////////////////////// Start //" + String.Format("{0:dddd, yyyy, MMMM d HH:mm:ss }", dt) + "// Start //////////////////////////////"); ;
CountTotal = model.Count();
foreach (var item in model)
Console.WriteLine(item.PartId + " " + item.PartName1 + " " + item.PartName2 + " " + item.PartName3 + " " + item.PartClass);
Console.WriteLine("////////////////////////////////////////////////////");
Console.WriteLine("Count of Records : " + CountTotal);
Console.WriteLine("////////////////////////////////////////////////////");
List<string> itemName = new List<string>();
foreach ( var item in model)
itemName.Add(item.PartName1);
List<string> itemClass = new List<string>();
foreach (var item in model)
itemClass.Add(item.PartClass);
if (!(CatName1.Contains(c.PartName1)))
CatName1 += c.PartName1 + " Count : " + found(itemName, c.PartName1) + " ";
if (c.PartName1 == CatNameOne)
modelOne.Add(new CatClass { PartId = c.PartId, PartName1 = c.PartName1, PartClass = c.PartClass });
else if(c.PartName1 == CatNameTwo)
modelTwo.Add(new CatClass { PartId = c.PartId, PartName1 = c.PartName1, PartClass = c.PartClass });
else if(c.PartName1 == CatNameThree)
modelThree.Add(new CatClass { PartId = c.PartId, PartName1 = c.PartName1, PartClass = c.PartClass });
Console.WriteLine("Category Names Col 1: " + CatName1);
Console.WriteLine("////////////////////////////////////////////////////");
if (!(ClassName.Contains(c.PartClass)))
ClassName += c.PartClass + " Count : " + found(itemClass, c.PartClass) + " ";
Console.WriteLine("Class Names : " + ClassName);
Console.WriteLine("////////////////////////////////////////////////////");
Console.WriteLine("Entropy Total : -" + (modelYes.Count() + "/" + CountTotal) + " Log2(" + (modelYes.Count() + "/" + CountTotal) + ")-" + (modelNo.Count() + "/" + CountTotal) + " Log2(" + (modelNo.Count() + "/" + CountTotal) + ") = " + CalLog(modelYes.Count(), modelNo.Count(), CountTotal));
Console.WriteLine("////////////////////////////////////////////////////");
List<CatClass> CountNoCatOne = new List<CatClass>();
List<CatClass> CountYesCatOne = new List<CatClass>();
foreach (var item in modelOne)
Console.WriteLine("CatOne Col1 : " + item.PartId + " " + item.PartName1 + " " + item.PartClass);
foreach (var items in modelOne)
if (items.PartClass == ClassNo)
CountNoCatOne.Add(new CatClass { PartId = items.PartId, PartName1 = items.PartName1, PartClass = items.PartClass });
else if (items.PartClass == ClassYes)
CountYesCatOne.Add(new CatClass { PartId = items.PartId, PartName1 = items.PartName1, PartClass = items.PartClass });
Console.WriteLine("Count of CatOne Col1 : " + modelOne.Count() + " Numbers and Count of No is : " + CountNoCatOne.Count() + " Numbers and Count of Yes is : " + CountYesCatOne.Count());
float FracOfTotalOne = modelOne.Count();
FracOfTotalOne /= CountTotal;
Console.WriteLine("Entropy " + modelOne.First().PartName1 + " is : (" + modelOne.Count() + "/" + CountTotal + ") * (-" + (CountYesCatOne.Count() + "/" + modelOne.Count()) + " Log2(" + (CountYesCatOne.Count() + "/" + modelOne.Count()) + ")-" + (CountNoCatOne.Count() + "/" + modelOne.Count()) + " Log2(" + (CountNoCatOne.Count() + "/" + modelOne.Count()) + ")) = " + (FracOfTotalOne * CalLog(CountYesCatOne.Count(), CountNoCatOne.Count(), modelOne.Count())));
Console.WriteLine("////////////////////////////////////////////////////");
List<CatClass> CountNoCatTwo = new List<CatClass>();
List<CatClass> CountYesCatTwo = new List<CatClass>();
foreach (var item in modelTwo)
Console.WriteLine("CatTwo Col1 : " + item.PartId + " " + item.PartName1 + " " + item.PartClass);
foreach (var items in modelTwo)
if (items.PartClass == ClassNo)
CountNoCatTwo.Add(new CatClass { PartId = items.PartId, PartName1 = items.PartName1, PartClass = items.PartClass });
else if (items.PartClass == ClassYes)
CountYesCatTwo.Add(new CatClass { PartId = items.PartId, PartName1 = items.PartName1, PartClass = items.PartClass });
float FracOfTotalTwo = modelTwo.Count();
FracOfTotalTwo /= CountTotal;
Console.WriteLine("Count of CatTwo Col1 : " + modelTwo.Count() + " Numbers and Count of No is : " + CountNoCatTwo.Count() + " Numbers and Count of Yes is : " + CountYesCatTwo.Count());
Console.WriteLine("Entropy " + modelTwo.First().PartName1 + " is : (" + modelTwo.Count() + "/" + CountTotal + ") -" + (CountYesCatTwo.Count() + "/" + modelTwo.Count()) + " Log2(" + (CountYesCatTwo.Count() + "/" + modelTwo.Count()) + ")-" + (CountNoCatTwo.Count() + "/" + modelTwo.Count()) + " Log2(" + (CountNoCatTwo.Count() + "/" + modelTwo.Count()) + ") = " + (FracOfTotalTwo * CalLog(CountYesCatTwo.Count(), CountNoCatTwo.Count(), modelTwo.Count())));
Console.WriteLine("////////////////////////////////////////////////////");
List<CatClass> CountNoCatThree = new List<CatClass>();
List<CatClass> CountYesCatThree = new List<CatClass>();
foreach (var item in modelThree)
Console.WriteLine("CatThree Col1 : " + item.PartId + " " + item.PartName1 + " " + item.PartClass);
foreach (var items in modelThree)
if (items.PartClass == ClassNo)
CountNoCatThree.Add(new CatClass { PartId = items.PartId, PartName1 = items.PartName1, PartClass = items.PartClass });
else if (items.PartClass == ClassYes)
CountYesCatThree.Add(new CatClass { PartId = items.PartId, PartName1 = items.PartName1, PartClass = items.PartClass });
float FracOfTotalThree = modelTwo.Count();
FracOfTotalThree /= CountTotal;
Console.WriteLine("Count of CatThree Col1 : " + modelThree.Count() + " Numbers and Count of No is : " + CountNoCatThree.Count() + " Numbers and Count of Yes is : " + CountYesCatThree.Count());
Console.WriteLine("Entropy " + modelThree.First().PartName1 + " is : (" + modelThree.Count() + "/" + CountTotal + ") -" + (CountYesCatThree.Count() + "/" + modelThree.Count()) + " Log2(" + (CountYesCatThree.Count() + "/" + modelThree.Count()) + ")-" + (CountNoCatThree.Count() + "/" + modelThree.Count()) + " Log2(" + (CountNoCatThree.Count() + "/" + modelThree.Count()) + ") = " + (FracOfTotalThree * CalLog(CountYesCatThree.Count(), CountNoCatThree.Count(), modelTwo.Count())));
Console.WriteLine("////////////////////////////////////////////////////");
Console.WriteLine("Total Entropy Col1 is : " + ((FracOfTotalOne * CalLog(CountYesCatOne.Count(), CountNoCatOne.Count(), modelOne.Count())) + (FracOfTotalTwo * CalLog(CountYesCatTwo.Count(), CountNoCatTwo.Count(), modelTwo.Count())) + (FracOfTotalThree * CalLog(CountYesCatThree.Count(), CountNoCatThree.Count(), modelTwo.Count()))));
Console.WriteLine("//////////////////////////// END //" + String.Format("{0:dddd, yyyy, MMMM d HH:mm:ss }", dt) + "// END //////////////////////////////"); ;
public int PartId { get; set; }
public string PartName1 { get; set; }
public string PartName2 { get; set; }
public string PartName3 { get; set; }
public string PartClass { get; set; }
public override string ToString()
return "ID: " + PartId + " Name1 : " + PartName1 + " Name2 : " + PartName2 + " Name3 : " + PartName3 + " Class : " + PartClass;
public override bool Equals(object obj)
if (obj == null) return false;
CatClass objAsPart = obj as CatClass;
if (objAsPart == null) return false;
else return Equals(objAsPart);
public override int GetHashCode()
public bool Equals(CatClass other)
if (other == null) return false;
return (this.PartId.Equals(other.PartId));