2013-07-08 4 views
4

У меня есть данные о доступности авиабилетов в формате дискретного времени в формате csv. Это используется для представления доступности билетов для комбинации окон вылета и времени прибытия. Скажем, мой день делится на 4 периода времени -Python: заполнить матрицу нижнего треугольника из списка

12:01 AM to 6:00 AM, 
6:01 AM to 12:00 PM, 
12:01 PM to 6:00 PM, 
6:01 PM to 12:00 AM 

1 означает, что есть билеты доступны для этой комбинации вылета и прилета, 0 в противном случае. В этом примере, позволяет говорить о том, что билет доступен для всех комбинаций вылета-прилета, файл CSV будет иметь следующие данные:

1,1,1,1,1,1,1,1,1,1 

Эти данные используются для представления этой матрицы (пожалуйста, обратите внимание, что некоторые из комбинаций обращается в нуль здесь, поскольку они нелогичные комбинации времени для 24-часового периода):

    Departure time period   
        12:01 AM to 6:00 AM | 6:01 AM to 12:00 PM | 12:01 PM to 6:00 PM | 6:01 PM to 12:00 AM| 
Arrival time period ------------------- | ---------------------|---------------------|---------------------| 
12:01 AM to 6:00 AM     1 |      0|     0|     0| 
6:01 AM to 12:00 PM     1 |      1|     0|     0| 
12:01 PM to 6:00 PM     1 |      1|     1|     0| 
6:01 PM to 12:00 AM     1 |      1|     1|     1| 

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

Теперь у меня есть 2 вопроса:

  • Как я могу преобразовать данные в структуру типа данных матрицы . По существу это включает преобразование списка в нижнюю треугольную матрицу плюс диагональные элементы. Я попытался использовать функцию изменения формы в numpy, но это не дает результата.

  • Как только я преобразую матрицу - я хочу наглядно представить доступность в виде тематической сетки - со всеми 1s в виде зеленых квадратов и 0s в виде красных квадратов. Возможно ли это на Python? Как?

Я предположил, что чтение в csv в качестве словаря, а затем хранить элементы доступности в списке является путем, как это казалось довольно простым. Измените подход, если вы чувствуете, что есть более умные способы сделать это.

Любые мысли людей?!?

ответ

1
import numpy as np 
import matplotlib.pyplot as plt 

data = [1,1,1,1,1,1,1,1,1,1] 
arr = np.zeros((4,4)) 
indices = np.tril_indices(4) 
arr[indices] = data 
print(arr) 

# array([[ 1., 0., 0., 0.], 
#  [ 1., 1., 0., 0.], 
#  [ 1., 1., 1., 0.], 
#  [ 1., 1., 1., 1.]]) 


plt.imshow(arr, interpolation='nearest', cmap=plt.get_cmap('RdYlGn')) 
plt.show() 

участки

enter image description here

Смежные вопросы