【问题标题】:Introducing iterator and chunksize in pd.read_csv for test data在 pd.read_csv 中为测试数据引入迭代器和块大小
【发布时间】:2020-09-24 23:21:37
【问题描述】:

我是 python 新手。我读了这个Kaggle kernel

在那个内核中,他使用了块大小为 150_000 的训练数据

train = pd.read_csv('../input/train.csv', iterator=True, chunksize=150_000, dtype={'acoustic_data': np.int16, 'time_to_failure': np.float64})

我使用 python 可视化了 X_train(统计特征)和 y_train(给定 time_to_failure)。它给了我很好的可视化效果

    train = pd.read_csv('../input/train.csv', iterator=True, chunksize=150_000, dtype={'acoustic_data': np.int16, 'time_to_failure': np.float64})

    X_train = pd.DataFrame()
    y_train = pd.Series()
    for df in train:
        ch = gen_features(df['acoustic_data'])
        X_train = X_train.append(ch, ignore_index=True)
        y_train = y_train.append(pd.Series(df['time_to_failure'].values[-1]))

   #Visulization function 
    plotstatfeature(X_train,y_train.to_numpy(dtype ='float32')) 

对于测试数据,使用相同的函数在 X_test(statistical features) 和 y_hat(calculated time_to_failure) 之间绘制相同的可视化效果

submission = pd.read_csv('../input/sample_submission.csv', index_col='seg_id')
X_test = pd.DataFrame()

# prepare test data
for seg_id in submission.index:
    seg = pd.read_csv('../input/test/' + seg_id + '.csv')
    ch = gen_features(seg['acoustic_data'])
    X_test = X_test.append(ch, ignore_index=True)

X_test = scaler.transform(X_test)    
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
y_hat = model.predict(X_test)
submission['time_to_failure'] = y_hat
submission.to_csv('submission.csv')

#Visulization function 
plotstatfeature(X_test,y_hat.to_numpy(dtype ='float32'))

问题 1:

可视化X_test(statistical features)和y_hat(calculated time_to_failure)有意义吗

问题 2(主要问题):

测试数据的可视化不如训练数据好。因为训练数据以 150000 的块大小读取,可视化清晰,而测试数据是完整数据,可视化更密集,不清晰。 如何将测试数据转换为 150000 的相同块大小以实现相同的统一可视化 就像训练数据可视化一样?

为了将测试数据转换为150000相同的chunksize,我尝试通过在代码中引入iterator和chunksize来修改这一行

第一种情况:

submission = pd.read_csv('../input/sample_submission.csv', index_col='seg_id' , iterator=True, chunksize=150_000)

但它给了我这个错误

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 runfile('D:/code.py', wdir='D:/')

文件 "C:\Users\abc\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", 第 827 行,在运行文件中 execfile(文件名,命名空间)

文件 "C:\Users\abc\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", 第 110 行,在 execfile 中 exec(编译(f.read(),文件名,'exec'),命名空间)

文件“D:/code.py”,第 299 行,在 主要()

文件“D:/code.py”,第 239 行,在 main 测试(X_train,y_train)

文件“D:/code.py”,第 168 行,正在测试中 对于submission.index 中的seg_id:

AttributeError: 'TextFileReader' 对象没有属性 'index'

第二种情况

seg = pd.read_csv('test/' + seg_id + '.csv'  , iterator=True, chunksize=150000)

它给了我这个错误

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 runfile('D:/code.py', wdir='D:/')

文件 "C:\Users\abc\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", 第 827 行,在运行文件中 execfile(文件名,命名空间)

文件 "C:\Users\abc\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", 第 110 行,在 execfile 中 exec(编译(f.read(),文件名,'exec'),命名空间)

文件“D:/code.py”,第 299 行,在 主要()

文件“D:/code.py”,第 239 行,在 main 测试(X_train,y_train)

文件“D:/code.py”,第 170 行,正在测试中 ch = gen_features(seg['acoustic_data'])

TypeError: 'TextFileReader' 对象不可下标

如何在测试数据中引入块大小?

【问题讨论】:

  • 对于分块问题 - 请务必发布有关堆栈溢出的任何问题的完整回溯,因为 they're extremely helpful in debugging your issue。查看iterating through files chunk by chunk 上的 pandas 文档。你需要遍历submission
  • 为了可视化非常大的数据集,您可能需要查看用于此目的的包,例如 holoviewsdatashader。您当然可以按照您的建议将数据子集成块并每次创建一个图,只需在迭代您的块的 for 循环中包含绘图创建步骤。每一个都不能代表整个数据集,但这可能有助于理解样本。

标签: python python-3.x pandas


【解决方案1】:

错误原因: pandas 在read_csv()Function 中,在参数后面加上chunksize = None 但是现在你指定了,所以返回的文件类型是<class 'pandas.io.parsers.TextFileReader'>

使用这个循环和 chunksize = 100 来解决它,看看发生了什么,它将打印许多表:

for chunk in seg:
    print(seg)

【讨论】:

  • 嗨@younes ait m'ha - 欢迎来到堆栈溢出!请注意,原始帖子特别提到了大数据,并试图获取有关如何处理分块数据的信息。鉴于此,建议他们使用chunksize=None 可能会使他们的内核崩溃,并且使用 100 的块大小将打印 OP 问题所建议的块数的 1500 倍。这是您回答的重要背景,并限制了它的用处。确保添加该上下文! :)
  • 这个循环打印这个“
猜你喜欢
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2023-03-21
  • 2019-08-05
  • 1970-01-01
  • 2015-09-13
相关资源
最近更新 更多