自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)太多而無(wú)法使用?快試試這個(gè)Kaggle大數(shù)據(jù)集高效訪問(wèn)教程

大數(shù)據(jù)
本文將對(duì)一些相關(guān)技術(shù)進(jìn)行描述和總結(jié)。由于Riiid! Answer Correctness Prediction數(shù)據(jù)集由10列,超1億行的數(shù)據(jù)組成,在Kaggle Notebook中使用pd.read_csv方法讀取會(huì)導(dǎo)致內(nèi)存不足,因此本文將該數(shù)據(jù)集做為典型示例。

大規(guī)模數(shù)據(jù)集

[[358472]]

對(duì)數(shù)據(jù)科學(xué)家和Kaggler來(lái)說(shuō),數(shù)據(jù)永遠(yuǎn)不嫌多。

我敢肯定,你在解決某些問(wèn)題時(shí),一定報(bào)怨過(guò)沒(méi)有足夠的數(shù)據(jù),但偶爾也會(huì)抱怨數(shù)據(jù)量太多難以處理。本文探討的問(wèn)題就是對(duì)超大規(guī)模數(shù)據(jù)集的處理。

在數(shù)據(jù)過(guò)多的情況下,最常見(jiàn)的解決方案是根據(jù)RAM采樣適量數(shù)據(jù),但這卻浪費(fèi)了未使用的數(shù)據(jù),甚至可能導(dǎo)致信息缺失問(wèn)題。針對(duì)這些問(wèn)題,研究人員提出多種不同的非子采樣方法。需要注意的時(shí),某一方法是無(wú)法解決所有問(wèn)題的,因此在不同情況下要根據(jù)具體需求選擇恰當(dāng)?shù)慕鉀Q方案。

本文將對(duì)一些相關(guān)技術(shù)進(jìn)行描述和總結(jié)。由于Riiid! Answer Correctness Prediction數(shù)據(jù)集由10列,超1億行的數(shù)據(jù)組成,在Kaggle Notebook中使用pd.read_csv方法讀取會(huì)導(dǎo)致內(nèi)存不足,因此本文將該數(shù)據(jù)集做為典型示例。

不同安裝包讀取數(shù)據(jù)的方式有所不同,Notebook中可用方法包括(默認(rèn)為Pandas,按字母表排序):

  • Pandas
  • Dask
  • Datatable
  • Rapids

除了從csv文件讀取數(shù)據(jù)外,還可以將數(shù)據(jù)集轉(zhuǎn)換為占有更少磁盤(pán)空間、更少內(nèi)存、讀取速度快的其他格式。Notebook可處理的文件類型包括(默認(rèn)csv,按字母表排序):

  • csv
  • feather
  • hdf5
  • jay
  • parquet
  • pickle

請(qǐng)注意,在實(shí)際操作中不單單是讀取數(shù)據(jù)這么簡(jiǎn)單,還要同時(shí)考慮數(shù)據(jù)的下游任務(wù)和應(yīng)用流程,綜合衡量以確定讀取方法。本文對(duì)此不做過(guò)多介紹,讀者可自行查閱相關(guān)資料。

同時(shí),你還會(huì)發(fā)現(xiàn),對(duì)于不同數(shù)據(jù)集或不同環(huán)境,最有效的方法往往是不同的,也就是所,沒(méi)有哪一種方法就是萬(wàn)能的。

后續(xù)會(huì)陸續(xù)添加新的數(shù)據(jù)讀取方法。

方法

我們首先使用Notebook默認(rèn)的pandas方法,如前文所述,這樣的讀取因內(nèi)存不足失敗。 

  1. import pandas as pd 
  2. import dask.dataframe as dd 
  3.  
  4. # confirming the default pandas doesn't work (running thebelow code should result in a memory error) 
  5. # data = pd.read_csv("../input/riiid-test-answer-prediction/train.csv"

Pandas介紹

Pandas是最常用的數(shù)據(jù)集讀取方法,也是Kaggle的默認(rèn)方法。Pandas功能豐富、使用靈活,可以很好的讀取和處理數(shù)據(jù)。

使用pandas讀取大型數(shù)據(jù)集的挑戰(zhàn)之一是其保守性,同時(shí)推斷數(shù)據(jù)集列的數(shù)據(jù)類型會(huì)導(dǎo)致pandas dataframe占用大量非必要內(nèi)存。因此,在數(shù)據(jù)讀取時(shí),可以基于先驗(yàn)知識(shí)或樣品檢查預(yù)定義列數(shù)據(jù)的最佳數(shù)據(jù)類型,避免內(nèi)存損耗。

RiiiD競(jìng)賽官方提供的數(shù)據(jù)集讀取方法就是如此。

幫助文檔: https://pandas.pydata.org/docs/ 

  1. %%time 
  2. dtypes = { 
  3.    "row_id""int64"
  4.    "timestamp""int64"
  5.    "user_id""int32"
  6.    "content_id""int16"
  7.    "content_type_id""boolean"
  8.    "task_container_id""int16"
  9.    "user_answer""int8"
  10.    "answered_correctly""int8"
  11.    "prior_question_elapsed_time""float32"
  12.    "prior_question_had_explanation""boolean"
  13. data = pd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes) 
  14. print("Train size:", data.shape) 
  15. Train size: (101230332, 10) 
  16. CPU times: user 8min 11s, sys: 10.8 s, total: 8min 22s 
  17. Wall time: 8min 22s 

 

Dask介紹

Dask提供并行處理框架對(duì)pandas工作流進(jìn)行擴(kuò)展,其與Spark具有諸多相似之處。

幫助文檔:https://docs.dask.org/en/latest/ 

  1. %%time 
  2. dtypes = { 
  3.    "row_id""int64"
  4.    "timestamp""int64"
  5.    "user_id""int32"
  6.    "content_id""int16"
  7.    "content_type_id""boolean"
  8.    "task_container_id""int16"
  9.    "user_answer""int8"
  10.    "answered_correctly""int8"
  11.    "prior_question_elapsed_time""float32"
  12.    "prior_question_had_explanation""boolean"
  13. data = dd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes).compute() 
  14. print("Train size:", data.shape) 
  15. Train size: (101230332, 10) 
  16. CPU times: user 9min 24s, sys: 28.8 s, total: 9min 52s 
  17.  
  18. Wall time: 7min 41s 
  19.  
  20. data.head() 

 

Datatable介紹

受R語(yǔ)言data.table的啟發(fā),python中提出Datatable,該包可快速讀取大型數(shù)據(jù)集,一般要比pandas快得多。值得注意的是,該包專門(mén)用于處理表格數(shù)據(jù)集,能夠快速讀取大規(guī)模的表格數(shù)據(jù)集。

幫助文檔:https://datatable.readthedocs.io/en/latest/index.html 

  1. # datatable installation with internet 
  2. # !pip install datatable==0.11.0 > /dev/null 
  3.  
  4. # datatable installation without internet! 
  5. pip install ../input/python-datatable/datatable-0.11.0-cp37-cp37m-manylinux2010_x86_64.whl > /dev/null 
  6.  
  7. import datatable as dt 
  8. %%time 
  9. data = dt.fread("../input/riiid-test-answer-prediction/train.csv"
  10. print("Train size:", data.shape)Train size: (101230332, 10) 
  11. CPU times: user 52.5 s, sys: 18.4 s, total: 1min 10s 
  12. Wall time: 20.5 sdata.head() 

 

10*10 

Rapids介紹

Rapids提供了在GPU上處理數(shù)據(jù)的方法。通過(guò)將機(jī)器學(xué)習(xí)模型轉(zhuǎn)移到GPU,Rapids可以在一個(gè)或多個(gè)GPU上構(gòu)建端到端的數(shù)據(jù)解決方案。

幫助文檔:https://docs.rapids.ai/ 

  1. # rapids installation (make sure to turn on GPU) 
  2. import sys 
  3. !cp ../input/rapids/rapids.0.15.0 /opt/conda/envs/rapids.tar.gz 
  4. !cd /opt/conda/envs/ && tar -xzvf rapids.tar.gz > /dev/null 
  5. sys.path = ["/opt/conda/envs/rapids/lib/python3.7/site-packages"] + sys.path 
  6. sys.path = ["/opt/conda/envs/rapids/lib/python3.7"] + sys.path 
  7. sys.path = ["/opt/conda/envs/rapids/lib"] + sys.path 
  8.  
  9. import cudf 
  10. %%time 
  11. data = cudf.read_csv("../input/riiid-test-answer-prediction/train.csv"
  12. print("Train size:", data.shape) 
  13. Train size: (101230332, 10) 
  14. CPU times: user 4.58 s, sys: 3.31 s, total: 7.89 s 
  15.  
  16. Wall time: 30.7 s 
  17.  
  18. data.head() 

 

文件格式

通常,我們會(huì)將數(shù)據(jù)集存儲(chǔ)為容易讀取、讀取速度快或存儲(chǔ)容量較小的格式。數(shù)據(jù)集存儲(chǔ)有各種不同的格式,但不是每一種都可以被處理,因此接下來(lái),我們將介紹如何將這些數(shù)據(jù)集轉(zhuǎn)換為不同的格式。 

  1. # data = dt.fread("../input/riiid-test-answer-prediction/train.csv").to_pandas() 
  2.  
  3. # writing dataset as csv 
  4. # data.to_csv("riiid_train.csv"index=False
  5.  
  6. # writing dataset as hdf5 
  7. # data.to_hdf("riiid_train.h5""riiid_train"
  8.  
  9. # writing dataset as feather 
  10. # data.to_feather("riiid_train.feather"
  11.  
  12. # writing dataset as parquet 
  13. # data.to_parquet("riiid_train.parquet"
  14.  
  15. # writing dataset as pickle 
  16. # data.to_pickle("riiid_train.pkl.gzip"
  17.  
  18. # writing dataset as jay 
  19. # dt.Frame(data).to_jay("riiid_train.jay"

數(shù)據(jù)集的所有格式可從此處獲取,不包括競(jìng)賽組提供的原始csv數(shù)據(jù)。

csv格式

大多數(shù)Kaggle數(shù)據(jù)集都提供了csv格式文件。該格式幾乎成為數(shù)據(jù)集的標(biāo)準(zhǔn)格式,而且所有方法都支持從csv讀取數(shù)據(jù)。

更多相關(guān)信息見(jiàn): https://en.wikipedia.org/wiki/Comma-separated_values 

  1. %%time 
  2. dtypes = { 
  3.    "row_id""int64"
  4.    "timestamp""int64"
  5.    "user_id""int32"
  6.    "content_id""int16"
  7.    "content_type_id""boolean"
  8.    "task_container_id""int16"
  9.    "user_answer""int8"
  10.    "answered_correctly""int8"
  11.    "prior_question_elapsed_time""float32"
  12.    "prior_question_had_explanation""boolean"
  13. data = pd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes) 
  14. print("Train size:", data.shape) 
  15. Train size: (101230332, 10) 
  16. CPU times: user 8min 36s, sys: 11.3 s, total: 8min 48s 
  17. Wall time: 8min 49s 

feather格式

以feature(二進(jìn)制)格式存儲(chǔ)數(shù)據(jù)對(duì)于pandas極其友好,該格式提供了更快的讀取速度。

了解更多信息:https://arrow.apache.org/docs/python/feather.html 

  1. %%time 
  2. data = pd.read_feather("../input/riiid-train-data-multiple-formats/riiid_train.feather"
  3. print("Train size:", data.shape) 
  4. Train size: (101230332, 10) 
  5. CPU times: user 2.59 s, sys: 8.91 s, total: 11.5 s 
  6. Wall time: 5.19 s 

hdf5格式

HDF5是用于存儲(chǔ)、管理和處理大規(guī)模數(shù)據(jù)和復(fù)雜數(shù)據(jù)的高性能數(shù)據(jù)管理組件。

了解更多信息:https://www.hdfgroup.org/solutions/hdf5 

  1. %%time 
  2. data = pd.read_hdf("../input/riiid-train-data-multiple-formats/riiid_train.h5""riiid_train"
  3. print("Train size:", data.shape) 
  4. Train size: (101230332, 10) 
  5. CPU times: user 8.16 s, sys: 10.7 s, total: 18.9 s 
  6. Wall time: 19.8 s 

jay格式

Datatable支持.jay(二進(jìn)制)格式,其在讀取jay格式數(shù)據(jù)時(shí)速度快得超乎想象。從下面的示例可以看到,該方法讀取整個(gè)riiid數(shù)據(jù)集用時(shí)甚至不到1秒!

了解更多信息:https://datatable.readthedocs.io/en/latest/api/frame/to_jay.html 

  1. %%time 
  2. data = dt.fread("../input/riiid-train-data-multiple-formats/riiid_train.jay"
  3. print("Train size:", data.shape) 
  4. Train size: (101230332, 10) 
  5. CPU times: user 4.88 ms, sys: 7.35 ms, total: 12.2 ms 
  6. Wall time: 38 ms 

parquet格式

在Hadoop生態(tài)系統(tǒng)中,parquet是tabular的主要文件格式,同時(shí)還支持Spark。經(jīng)過(guò)近年的發(fā)展,該數(shù)據(jù)格式更加成熟,高效易用,pandas目前也支持了該數(shù)據(jù)格式。 

  1. %%time 
  2. data = pd.read_parquet("../input/riiid-train-data-multiple-formats/riiid_train.parquet"
  3. print("Train size:", data.shape) 
  4. Train size: (101230332, 10) 
  5. CPU times: user 29.9 s, sys: 20.5 s, total: 50.4 s 
  6. Wall time: 27.3 s 

pickle格式

Python對(duì)象可以以pickle格式存儲(chǔ),pandas內(nèi)置支持pickle對(duì)象的讀取和寫(xiě)入。

了解更多信息:https://docs.python.org/3/library/pickle.html 

  1. %%time 
  2. data = pd.read_pickle("../input/riiid-train-data-multiple-formats/riiid_train.pkl.gzip"
  3. print("Train size:", data.shape) 
  4. Train size: (101230332, 10) 
  5. CPU times: user 5.65 s, sys: 7.08 s, total: 12.7 s 
  6. Wall time: 15 s 

不同方法各有千秋

[[358473]]

每種方法都有自己的優(yōu)缺點(diǎn),例如:

  • Pandas在處理大規(guī)模數(shù)據(jù)時(shí)對(duì)RAM的需求增加
  • Dask有時(shí)很慢,尤其是在無(wú)法并行化的情況下
  • Datatable沒(méi)有豐富的數(shù)據(jù)處理功能
  • Rapids只適用于GPU

因此,希望讀者掌握不同的方法,并根據(jù)實(shí)際需求選擇最恰當(dāng)?shù)姆椒āN沂冀K相信,研究不是技術(shù)驅(qū)動(dòng)的,技術(shù)方法只是手段,要有好主意、新想法、改進(jìn)技術(shù)才能推動(dòng)數(shù)據(jù)科學(xué)的研究與發(fā)展。

在經(jīng)過(guò)大量研究后,我確信不同數(shù)據(jù)集具有不同的適用方法,因此要多嘗試,千萬(wàn)不要試圖一招半式闖江湖。

在不斷更新的開(kāi)源軟件包和活躍的社區(qū)支持下,數(shù)據(jù)科學(xué)必將持續(xù)蓬勃發(fā)展。

本文轉(zhuǎn)自雷鋒網(wǎng),如需轉(zhuǎn)載請(qǐng)至雷鋒網(wǎng)官網(wǎng)申請(qǐng)授權(quán)。

 

責(zé)任編輯:未麗燕 來(lái)源: 雷鋒網(wǎng)
相關(guān)推薦

2013-08-27 09:23:04

大數(shù)據(jù)互聯(lián)網(wǎng)

2012-05-14 10:54:35

數(shù)據(jù)信息

2017-01-22 21:30:39

大數(shù)據(jù)Kaggle函數(shù)

2023-12-10 13:58:17

2010-06-24 09:38:42

Windows備份云平臺(tái)

2019-01-16 16:00:33

2013-01-18 10:04:33

大數(shù)據(jù)分析

2009-07-24 13:07:59

BLL類

2017-12-21 14:36:10

大數(shù)據(jù)健身智慧

2025-03-03 01:00:00

工具加密命令

2013-03-01 11:09:29

大數(shù)據(jù)HadoopNoSQL

2020-10-08 15:39:08

大數(shù)據(jù)殺熟

2012-12-26 10:18:47

大數(shù)據(jù)數(shù)據(jù)科學(xué)家

2012-12-25 09:58:50

數(shù)據(jù)科學(xué)家大數(shù)據(jù)

2023-12-01 16:23:52

大數(shù)據(jù)人工智能

2020-07-09 15:21:58

大數(shù)據(jù)RStudioR語(yǔ)言

2024-12-11 13:23:46

2018-09-04 17:27:13

大數(shù)據(jù)

2023-10-26 01:26:04

Vaex數(shù)據(jù)數(shù)據(jù)集

2020-08-08 12:22:03

微信微信昵稱圓圏
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)