我有csv
格式的机票可用性的离散时间数据。这用于表示出发和到达时间窗口组合的票证可用性。说我的日子分为4个时间段 -
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
中完成。在某一天,我现在可以使用日期键检索可用性列表。
现在,我有两个问题:
如何将数据转换为矩阵
类型数据结构。实质上,这涉及将列表转换为较低的列表
三角矩阵加对角元素。我试过用过
重塑numpy
中的函数,但是没有达到此结果。
一旦我转换了矩阵 - 我想以图形方式将可用性表示为主题网格 - 所有1都是绿色方块和0 作为红色方块。这在Python中是否可以实现?怎么样?
我认为在csv
中读取字典然后将可用性元素存储在列表中是可行的,因为它看起来相当简单。如果您觉得有更聪明的方法可以修改方法。
任何想法的人?!?
答案 0 :(得分: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()
曲线