2013-07-08 100 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中的 重塑功能,但是沒有實現此結果。

  • 一旦我轉換了矩陣 - 我想以圖形方式將可用性表示爲專題網格 - 所有1均表示爲綠色方塊,0表示爲紅色方塊。這在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