Генерация частотной тепловой карты в Python MatPlotLib для чтения в координатах X и Y из файла .csv - PullRequest
3 голосов
/ 03 мая 2011

Недавно я наткнулся на похожий вопрос о , как генерировать тепловую карту частот в Python с использованием модуля MatPlotLib .

Этот пост был очень полезен, и я мог заставить отдельные скрипты запускаться и создавать тепловые карты для случайных тестовых данных, которые изначально были созданы кодом. Однако у меня возникли проблемы с адаптацией кода для создания тепловой карты для данных, с которыми я работаю. Данные представлены в формате с разделителями-запятыми (.csv).

В настоящее время в этом файле .csv хранится 3788 пар оценок среднего качества. Эти средние оценки качества имеют диапазон от 0 до 5. Я пытаюсь создать тепловую карту, которая связывает данные с шагом 0,5 на оси x и y (0-.499, .5-.999, 1-1.499 так далее).

Я хотел бы импортировать первый столбец файла .csv (webqualityratings) в качестве значений x тепловой карты, а второй столбец файла .csv (inpersonqualityratings) в качестве значений y тепловой карты.

Код, который я пытался адаптировать, опубликованный "ptomato" и отредактированный Майком Грэмом, выглядит следующим образом:

import numpy as np   
import numpy.random   
import matplotlib.pyplot as plt  

# Generate some test data  
x = np.random.randn(8873)  
y = np.random.randn(8873)  

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)  
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]  
plt.clf()  
plt.imshow(heatmap, extent=extent)  
plt.show() 

Если бы кто-нибудь мог помочь мне адаптировать этот код для считывания данных из моего файла .csv, как указано, я был бы вечно благодарен!

Ответы [ 2 ]

5 голосов
/ 04 мая 2011

Поскольку у вас есть numpy в вашем распоряжении и при условии, что ваши CSV-файлы хорошо себя ведут, вы можете использовать numpy.loadtxt(),

import numpy as np   
import matplotlib.pyplot as plt  

dat = np.loadtxt('mydata.csv')

x, y = dat[:,0], dat[:,1]

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)  
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]  
plt.clf()  
plt.imshow(heatmap, extent=extent)  
plt.show() 
0 голосов
/ 03 мая 2011

В Python есть потрясающая библиотека CSV-файлов:

http://docs.python.org/library/csv.html

Хотя я не знаю подробностей о matplotlib, следующий код будет перебирать файл CSV с разделителями табуляцией и выполнять ваш код в каждом первом и втором столбце.

import numpy as np
import numpy.random
import matplotlib.pyplot as plt
import csv

with open(yourInputFile, "rb") as mycsv:
    reader = csv.DictReader(mycsv, dialect='excel-tab')

    for row in reader:
        x = row['name of first column']
        y = row['name of second column']
        heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)
        extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
        plt.clf()
        plt.imshow(heatmap, extent=extent)

plt.show()

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

Вы можете изменить диалект для вашего конкретного файла CSV, или даже создать свой собственный, если это необходимо.

Наконец, обратите внимание, что я ничего не знаю о matplotlib, и этот фрагмент кода, скорее всего, неверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...