Загрузка строк из CSV-файлов в оси тепловых карт в Python - PullRequest
0 голосов
/ 30 мая 2019

Я новичок в 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()

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

1 Ответ

0 голосов
/ 31 мая 2019

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

Использование панд и морских пород:

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() - нет, это список строк.

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

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

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

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

...