我试图在一个包含23亿个Python观测的大型数据集上运行一个逻辑回归模型。我需要一个标准的回归输出。带有拼花的状态模型看起来很有前途:https://www.statsmodels.org/v0.13.0/large_data.html
import pyarrow as pa
import pyarrow.parquet as pq
import statsmodels.formula.api as smf
class DataSet(dict):
def __init__(self, path):
self.parquet = pq.ParquetFile(path)
def __getitem__(self, key):
try:
return self.parquet.read([key]).to_pandas()[key]
except:
raise KeyError
LargeData = DataSet('LargeData.parquet')
res = smf.ols('Profit ~ Sugar + Power + Women', data=LargeData).fit()
但是,它说:“另外,您可以向这个示例DataSet对象添加代码,只返回行的一个子集,直到您构建了一个好的模型。然后,您可以在更多的数据上修改您的最终模型。”
这就是我一整天都试着去工作的地方。我不太熟悉Python类,也不太熟悉如何通过块迭代行分组。
我相信这只是几行代码,有人能帮我吗?
P.S.:理想情况下,我当然需要分布式模型和子集数据的组合。但是我已经很乐意在不耗尽内存的情况下获得这个子集。谢谢!
发布于 2022-04-08 08:55:54
您可以通过使用行组来读取拼花文件的“子集”:
import random
row_group = random.rand_range(self.parquet.num_row_groups)
return self.parquet.read_row_group(row_group).to_pandas()
我不确定在您的情况下如何做到这一点,也许可以选择一个任意/随机的可用行组。
https://stackoverflow.com/questions/71786877
复制相似问题