Создание матрицы замешательства из нескольких CSV-файлов

У меня много файлов .csv со следующим форматом.

338,800 338,550 339,670 340,600 327,500 301,430 299,350 284,339 284,338 283,335 283,330 283,310 282,310 282,300 282,300 283,290 

Из столбца 1 я хотел прочитать текущую строку и сравнить ее со значением предыдущей строки. Если он больше OR равен, продолжайте сравнивать, и если значение текущей ячейки меньше предыдущей строки – тогда я делю текущее значение на предыдущее значение и продолжаю. Например, в приведенной выше таблице: меньшее значение, которое мы получим в зависимости от моего требования, из столбца 1 равно 327 (поскольку 327 меньше предыдущего значения 340), а затем мы делим 327 на 340 и получаем значение 0,96. Мой скрипт python должен выйти сразу после того, как мы напечатаем критерии ( A ), как показано ниже.

  • Как я могу анализировать матрицу путаницы?
  •  from __future__ import division import csv def category(val): if 0.8 < val <= 0.9: return "A" if abs(val - 0.7) < 1e-10: return "B" if 0.5 < val < 0.7: return "C" if abs(val - 0.5) < 1e-10: return "E" return "D" with open("test.csv", "r") as csvfile: ff = csv.reader(csvfile) results = [] previous_value = 0 for col1, col2 in ff: if not col1.isdigit(): continue value = int(col1) if value >= previous_value: previous_value = value continue else: result = int(col1)/ int(previous_value) results.append(result) print category(result) previous_value = value print (results) print (sum(results)) print (category(sum(results) / len(results))) 

    Наконец, я хочу запустить свой скрипт для всех файлов .csv, которые у меня есть в текущем каталоге, и построить матрицу путаницы, как показано ниже. Скажем, A1.csv , A2.csv , A3.csv предполагаются (или предсказываются) для печати A, B1.csv , B2.csv , B3.csv предполагаются (или предсказываются) для печати B и C1.csv , C2.csv и C3.csv предполагаются (или прогнозируются) для печати C, … и т. д. Как мы можем автоматически создать матрицу путаницы из нескольких .csv файлов, например, например, используя Python ?

    Как показано ниже, цветные блоки матрицы (метки строк) покажут нам number of counts A (количество истинных значений для A), B (количество истинных значений для b) и C (значение true значения для C), ..etc из логики управления нашей функциональной category() указанной выше. Обозначения столбцов из логики управления у нас внутри оператора if-else (A, B, C, D и E).

    введите описание изображения здесь

  • Как я могу избежать преобразования python больших чисел в научную нотацию?
  • python: создание книги excel и демпинг csv-файлов в виде рабочих листов
  • Как разделить строку с разделителями-запятыми в Python, за исключением запятых, находящихся в кавычках
  • Правильный Python Parse CSV
  • Лучший способ конвертировать данные csv в dict
  • Разбор CSV / табуляции с txt-файлом с Python
  • 2 Solutions collect form web for “Создание матрицы замешательства из нескольких CSV-файлов”

    Добавьте def get_predict(filename)

     def get_predict(filename): if 'Alex' in filename: return 'Alexander' else: return filename [0] 

    Чтение n файлов, вычисление матрицы путаницы с использованием pandas crosstab :

     import os import pandas as pd def get_category(filepath): def category(val): print('predict({}; abs({})'.format(val, abs(val))) if 0.8 < val <= 0.9: return "A" if abs(val - 0.7) < 1e-10: return "B" if 0.5 < val < 0.7: return "C" if abs(val - 0.5) < 1e-10: return "E" return "D" with open(filepath, "r") as csvfile: ff = csv.reader(csvfile) results = [] previous_value = 0 for col1, col2 in ff: value = int(col1) if value >= previous_value: previous_value = value else: results.append(value / previous_value) previous_value = value return category(sum(results) / len(results)) matrix = {'actual':[], 'predict':[]} path = 'test/confusion' for filename in os.listdir( path ): # The first Char in filename is Predict Key matrix['predict'].append(filename[0]) matrix['actual'].append(get_category(os.path.join(path, filename))) df = pd.crosstab(pd.Series(matrix['actual'], name='Actual'), pd.Series(matrix['predict'], name='Predicted') ) print(df) 

    Выход : (Чтение «A.csv, B.csv, C.csv» с данным примером Данные три раза)

     Predicted ABC Actual A 3 0 0 B 0 3 0 C 0 0 3 

    Протестировано с помощью Python: 3.4.2 – pandas: 0.19.2

    Использование Scikit-Learn – лучший вариант для вашего случая, поскольку он предоставляет функцию confusion_matrix . Вот такой подход, который вы можете легко расширить.

     from sklearn.metrics import confusion_matrix # Read your csv files with open('A1.csv', 'r') as readFile: true_values = [int(ff) for ff in readFile] with open('B1.csv', 'r') as readFile: predictions = [int(ff) for ff in readFile] # Produce the confusion matrix confusionMatrix = confusion_matrix(true_values, predictions) print(confusionMatrix) 

    Это результат, который вы ожидаете.

     [[0 2] [0 2]] 

    Для получения дополнительной информации – проверьте следующую ссылку:

    Как написать матрицу путаницы в Python?

    Python - лучший язык программирования в мире.