我有一本字典,里面有 500 个 DateFrame。每个数据框都有列 'date' 和 'num_patients'。我将模型应用于字典中的所有数据帧,但由于字典中的数据量很大,Python 内核崩溃了。
prediction_all = {}
for key, value in dict.items():
model = Prophet(holidays = holidays).fit(value)
future = model.make_future_dataframe(periods = 365)
forecast = model.predict(future)
prediction_all[key] = forecast.tail()
那么,我已经对字典进行了子集化,并将模型应用于每个子集。
dict1 = {k: dict[k] for k in sorted(dict.keys())[:50]}
prediction_dict1 = {}
for key, value in dict1.items():
model = Prophet(holidays = holidays).fit(value)
future = model.make_future_dataframe(periods = 365)
forecast = model.predict(future)
prediction_dict1[key] = forecast.tail()
dict2 = {k: dict[k] for k in sorted(dict.keys())[50:100]}
prediction_dict2 = {}
for key, value in dict2.items():
model = Prophet(holidays = holidays).fit(value)
future = model.make_future_dataframe(periods = 365)
forecast = model.predict(future)
prediction_dict2[key] = forecast.tail()
但是我需要运行上面的代码 10 次,因为我有 500 个数据帧(10 个子集)。有没有更有效的方法来做到这一点?
一个直接的改进是删除 sorted() 和切片步骤,并将其替换为 heapq.nsmallest()这将进行更少的比较。此外,.keys()
不是必需的,因为默认情况下字典会自动迭代它们的键。
替换:
dict1 = {k: dict[k] for k in sorted(dict.keys())[:50]}
dict2 = {k: dict[k] for k in sorted(dict.keys())[50:100]}
与:
lowest_keys = heapq.nsmallest(100, dict)
dict1 = {k : dict[k] for k in lowest_keys[:50]}
dict2 = {k : dict[k] for k in lowest_keys[50:100]}
代码中的大 for 循环看起来只需要 .values()
而不是 .items()
因为 key 不需要好像用过了。
我是一名优秀的程序员,十分优秀!