Akhil Jain Ответов: 1

Как получить все значения datatable, которые на 10% больше определенного значения при чтении данных из csv?


Я читаю файл .csv и получаю и вычисляю среднее значение
теперь я хочу, чтобы значение печати было на 10% выше среднего значения.
Я преобразую свои данные в Datatable.

Что я уже пробовал:

Static void Main(string[] args)
        {
  string csv_file_path = @"C:\Sample files\LP.csv";
            DataTable csvData = GetDataTabletFromCSVFile(csv_file_path);  
 object  med= p.GetMedianFromDataTable(csvData, "Value");
            Console.ReadLine();
}

Patrice T

В чем же проблема?

Akhil Jain

как вывести все значения, которые на 10% меньше или выше медиан

Patrice T

В чем именно заключается ваша проблема (в этом коде) ?
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

Akhil Jain

я не знаю, как получить все значения, которые на 10% выше или на 10% меньше медианы

RickZeeland

Вы задавали этот вопрос раньше и получили ответ, пожалуйста, вернитесь к своему предыдущему вопросу !

Akhil Jain

нет это совсем другое дело

RickZeeland

Вы хотя бы посмотрели ссылку на статью CodeProject, которая имеет медианную функцию ?

Richard MacCutchan

Нет, это точно так же, как Как прочитать несколько CSV-файлов в папке в консольном приложении C#.?[^], кроме того, один хочет 10%, а не 15%.

Akhil Jain

код прекрасен до сих пор, теперь мне нужно найти все значения, которые на 10% больше или на 10% меньше медианы, которую я не знаю(Datatable column="VALUE"), которые нужно сравнить.pls help

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Richard MacCutchan

Вычислите медианное значение, и от этого получите 10% от него. Затем просмотрите каждую запись в вашем списке/таблице/базе данных/чем угодно и получите разницу между ее значением и медианой. Если разница равна значению 10%, то распечатайте товар.

Akhil Jain

я рассчитал 10%, Как пройти через datatable pls help

Richard MacCutchan

Что значит "как"? Вы перебираете строки, проверяя соответствующую ячейку в каждой строке.

Akhil Jain

я не знаю, как это сделать !! новый кодер

Richard MacCutchan

Идти к Класс DataTable (System.Data)[^] и изучите документацию. Скорее всего, вы можете получить версию на своем родном языке.

Akhil Jain

хорошо, я сделал это !!

1 Ответов

Рейтинг:
0

Maciej Los

Среднее-это среднее, а медиана-это медиана. Не смешивайте это!

Есть только один случай, когда среднее значение равно медиане и наоборот: для 2-элементного массива, когда оба значения одинаковы, например: {10,10}.

Проверить это:

void Main()
{
	int[] ages = {100,22,13,43,25,61,17,80, 29}; 
	double median = Median(ages);
	
	double greaterThanMedian = median+median*.15;
	double lessThanMedian =  median-median*.15;
	
	var result = ages.Where(x=> x>lessThanMedian && x<greaterThanMedian)
		.ToList();
	
	foreach(var x in result)
		Console.WriteLine("{0}", x);	
}


public static double Median(int[] arr)
{
	if (arr==null) throw new Exception("An array cannot be null!");
	
	bool isEvenNumberOfValues = arr.Length % 2 == 0;
	int toSkip = isEvenNumberOfValues ? (arr.Length/2)-1 : arr.Length/2;
	int toTake = isEvenNumberOfValues ? 2 : 1;
	
	return arr.OrderBy(x=>x).Skip(toSkip).Take(toTake).Average();
}	


В соответствии с вашим кодом:
	var result = csvData.AsEnumerable()
		.Where(x=> x.Field<int>("Value")>=lessThanMedian && x.Field<int>("Value")<=greaterThanMedian)
		.ToList();
//or

	var result1 = csvData.Select(string.Format("(Value >= {0} AND Value <= {1})",lessThanMedian, greaterThanMedian))
		.ToList();



Удачи вам!