Загрузка строк из CSV-файлов в оси тепловой карты в Python

Я новичок в python, и у меня есть курсовая работа по созданию тепловой карты из данных в файле csv. Вверху указаны показатели эффективности автомобилей, а внизу — названия автомобилей. Я также разделил заголовки строк и столбцов на массивы. Я не уверен, как я могу загрузить эти значения в тики осей.

Я использую код ax.set_xticks() и то же самое для y, но не знаю, что поместить в скобки. ax.get_xticks() также не работает. Я пробовал несколько вариантов вещей, и все они выдают ошибку, в основном имя среза; см. код ниже.

if __name__ == "__main__":
    # Load the data.
    fileObj = open("CARS.csv").readlines()
    lines = [line.strip().split(",") for line in fileObj]
    # Reads the data into a list,
    # then slicing to extract a list of cars, kpis and scoring.
    cars = [line[0] for line in lines[1:]]      #array storing car names
    kpis = lines[0][1:]                         #array storing kpis
    scoring = np.array([line[1:-1] for line in lines[1:]], dtype=float)
fig=plt.figure(figsize=(6,3))   
    ax=fig.add_subplot(111)         
    ax.set_xlim([0,9])
    ax.set_xticks(kpis[lines[0][1:]])
    ax.set_yticks(cars)
    ax.set_title('Sportscar KPI Data')
    ax.set_xlabel('KPI's')
    ax.set_ylabel('Sportscars')
    im = ax.imshow(scores, interpolation='nearest', aspect='auto')
    plt.show()

Я надеюсь, что названия спортивных автомобилей из фрагмента будут помещены в раздел галочек, и ошибка выводит список имен, которые не могут быть перенесены. То же самое для KPI.

Ну, во-первых, ax.set_xlabel('KPI's') недопустимый питон. Может быть, вы хотели использовать ax.set_xlabel("KPI's") или ax.set_xlabel('KPI´s')?

ImportanceOfBeingErnest 29.05.2019 23:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
247
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Краткий ответ:

Используйте pandas и seaborn:

import pandas as pd
import seaborn as sns
df = pd.read_csv('CARS.csv', index_col=0)
sns.heatmap(df)

Длинный ответ:

Вы могу запускаете свой код, исправляя некоторые ошибки...

fileObj = open("CARS.csv").readlines()
lines = [line.strip().split(",") for line in fileObj]
cars = [line[0] for line in lines[1:]]
kpis = lines[0][1:]              
scoring = np.array([line[1:-1] for line in lines[1:]], dtype=float)

fig=plt.figure(figsize=(6,3))   
ax=fig.add_subplot(111)         
ax.set_title('Sportscar KPI Data')
ax.set_xlabel("KPI")
ax.set_ylabel('Sports car')
ax.set_xticks(range(len(kpis)))
ax.set_xticklabels(kpis)
ax.set_yticks(range(len(cars)))
ax.set_yticklabels(cars)
im = ax.imshow(scoring, interpolation='nearest', aspect='auto')
plt.show()

Однако,
есть много вещей, которые не были бы сделаны так в python (помимо всех ошибок отступов и того факта, что вы пытаетесь построить scores, хотя ваша переменная была введена как scoring):

Прежде всего, если вы открываете файл, вы должны сделать это в первой строке, а затем начать к нему доступ:

fileObj = open("CARS.csv")
lines = [line.strip().split(",") for line in fileObj.readlines()]

Затем вы можете правильно закрыть файл после его чтения

fileObj.close()

потому что теперь fileObj действительно является файловый объект, fileObj.readlines() нет, это список строк.

В любом случае, было бы еще лучше использовать блок with для этой задачи обработки файлов, который автоматически закроется для вас:

with(open('CARS.csv')) as fileObj:
    lines = [line.strip().split(",") for line in fileObj.readlines()]

(Обратите внимание, что отступ здесь необходим для всего, что должно обрабатываться блоком with)

Но все же, даже если это уже лучше, никто не будет делать это пошагово таким образом, читая файл построчно, извлекая метки вручную и конвертируя подраздел в numpy массив.
Даже если вы по какой-либо причине не можете/не хотите использовать pandas и seaborn, как было предложено выше, у numpy есть несколько хорошо написанных импортеров, например, например. np.genfromtxt.

Большое спасибо за это, я следовал вашей инструкции, и это работает отлично! Я скоро попробую подход Seaborn, это то, что я нашел в своем исследовании, но должен был предоставить решение, используя только код Python. Спасибо еще раз!

GWKing 10.06.2019 14:27

Другие вопросы по теме