Akhil Jain Ответов: 4

Как прочитать несколько CSV-файлов в папке в


Age я хочу рассчитать срединный этого столбца вместе с другими значениями, которые являются выше или ниже среднего значения

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

.

4 Ответов

Рейтинг:
2

Maciej Los

Это легко вычислить срединный[^], потому что это среднее/центральное значение* упорядоченного списка.
* - для четного числа значений - это среднее значение двух значений из середины упорядоченного списка
Для получения более подробной информации перейдите по ссылке выше.

//case #1 - even number of values
//int[] ages = {100,22,13,43,25,61,17,80}; 
//result: AVG(25,43) = 34

//case #2 - odd number of values
int[] ages = {100,22,13,43,25,61,17,80,29}; 
//result: 29

//does the number of values is even?
bool isEvenNumberOfValues = ages.Length % 2 == 0;
int toSkip = isEvenNumberOfValues ? (ages.Length/2)-1 : ages.Length/2;
int toTake = isEvenNumberOfValues ? 2 : 1;
//get middle value from ordered list 
var result = ages.OrderBy(x=>x).Skip(toSkip).Take(toTake).Average();
Console.WriteLine("Median for: [{0}] is {1}", string.Join(",", ages.OrderBy(x=>x)), result);


Все, что вам нужно сделать, это создать Median функция (основанная на приведенном выше коде). Один Median функция должна быть:
1. Возьмите массив чисел в качестве входного аргумента
2. возврат двойной

Еще одну реализацию медианной функции вы найдете здесь: Как добавить пользовательские методы для запросов LINQ (C#) | Microsoft Docs[^]


RickZeeland

pięćd :)

Maciej Los

Мучас Грасиас!
;)

Рейтинг:
0

RickZeeland

Здесь есть интересная библиотека для чтения и письма CSV файлы: GitHub - JoshClose/CsvHelper: библиотека для чтения и записи CSV-файлов[^]

Вы также можете использовать LINQ, вот пример для расчета среднего возраста:

// Read CSV using LINQ
static void ReadFileLinq(string fileName)
{
    IEnumerable<string> strCSV = File.ReadLines(fileName, Encoding.ASCII).Skip(1);

    var results = from str in strCSV
                  let tmp = str.Split(',')
                  .Select(x => x.Replace("?", string.Empty))
                  select new { Age = DateTime.Parse(tmp.ElementAt(0))};

    // caching for performance
    var query = results.OrderBy(x => x.Age));

    foreach (var item in query)
    {
        Console.WriteLine(item.Age);
    }

    Console.WriteLine(string.Empty);
    Console.WriteLine("Average age = " + query.Average(x => x.Age));
    Console.WriteLine(string.Empty);
}

Поскольку LINQ не имеет Срединный функция, вам придется написать эту функцию самостоятельно.
Вот пример на CodeProject: Использование LINQ для расчета базовой статистики[^]


Maciej Los

5ed!

Рейтинг:
0

OriginalGriff

Начните с разработки того, как вы собираетесь читать CSV-данные: существует целая куча способов, включая написание собственного CSV-процессора, но Быстрый читатель CSV[^] это хороший способ начать.
Когда у вас есть данные, обработка столбца для получения среднего, медианы или среднего значения тривиальна!


Maciej Los

5ed!

Рейтинг:
0

Patrice T

Цитата:
Я хочу прочитать Csv-файлы, которые находятся в папке sample(name)

2 шага:
- получить список csv-файлов в каталоге
- прочитайте их 1 на 1

Возможно, вам придется научиться программированию.


Maciej Los

Хотя ваш ответ неполон, я проголосовал 5, чтобы противодействовать голосованию вниз.

Patrice T

Спасибо.
Вопрос тоже не очень полный.