python讀取大資料csv R讀取並處理較大資料

2021-10-11 21:59:10 字數 2936 閱讀 3800

1. 概述

之前在讀取和處理較大的csv資料時,在嘗試了一次直接讀取處理後發現非常耗時,就改用匯入資料庫,再通過rmysql或者rodbc來讀取處理資料。今天來比較一下。

載入相關packages

library(data.table)

library(dplyr)

library(sqldf)

library(lubridate)

library(rmysql)

2. 讀取資料

2.1 使用data.table

首先通過data.table的 fread() 讀取資料, fread() 比 read.csv() 的效率高很多,這裡不進行詳細比較。

time_fread

test

## 資料的大小

paste("資料的大小為:",format(object.size(test),units="auto"))

資料的大小為: 573.1 mb

2.2 使用rmysql

匯入資料庫後效率最高,雖然匯入資料庫消耗的時間較長,但便於後續統計.

con

# dblisttables(con)

# dbremovetable(con,"test")

# 將資料寫入資料庫

time_mysql_write

dbwritetable(con,"test",test)

通過r匯入資料庫的效率,相對比較耗時,建議通過其他方式匯入。

kable(rbind(time_mysql_write),row.names = f)

user.self

sys.self

elapsed

user.child

sys.child

124.757

2.822

151.031

0.779

0.053

讀取資料庫中的資料表

time_mysql_read

db_test

time_mysql_query

db_test

2.3 讀取資料比較

kable(rbind(time_fread,time_mysql_read))

name

user.self

sys.self

elapsed

user.child

sys.child

time_fread

6.534

0.455

7.265

time_mysql_read

13.185

1.441

25.888

time_mysql_query

6.338

1.298

18.143

很明顯 fread() 的效率最高,所以如果只是讀取資料,還是強烈推薦 fread() 。針對讀取資料庫表全部資料, dbreadtable() 比 dbgetquery() 讀取資料的效率還差。

3. 處理資料

分別通過 data.table、dplyr、sqldf、rmysql 這四種方式來統計相關資料。

3.1 使用data.table

time_dt

test_month1

3.2 使用dplyr

time_dplyr

test_month2 %

group_by(year=year(日期),month=month(日期)) %>%

summarise(value=sum(資料)) %>%

ungroup()

3.3 使用sqldf

## 需要先解除安裝rmysql

detach("package:rmysql", unload=true)

time_sqldf_s

test$日期

test_month3

strftime('%m',日期) as month,sum(資料) as test_amount from test group by strftime('%y', 日期 * 3600 * 24, 'unixepoch'),

strftime('%m',日期)")

time_sqldf

3.4 使用rmysql

library(rmysql)

con

test_month_sql

sum(資料) as test_amount from test group by year(日期),month(日期)"

time_mysql

test_month4

3.5 處理資料比較

rbind(time_dt,time_dplyr,time_sqldf,time_mysql)

name

user.self

sys.self

elapsed

user.child

sys.child

time_dt

7.846

1.112

9.063

time_dplyr

8.155

1.182

9.487

time_sqldf

37.343

2.650

40.868

time_mysql

0.001

0.000

2.449

通過資料庫來處理資料效率最高,其次為 data.table 和 dplyr ,二者不相伯仲,data.table語法更加優雅易讀,dplyr語法更加簡潔,看自己的喜好啦。而 sqldf 的效率最差,不推薦。

4. 總結

推薦使用data.table的 fread() 讀取資料,再匯入資料庫(通過r匯入資料庫比較耗時,推薦用其他方式匯入),再通重載入資料庫包通過 dbgetquery() 讀取資料。 dbreadtable() 讀取全部資料,效率較差,不推薦。

python中的CSV大資料讀取

主要有兩種方式 1.pd.read csv file,chunksize chunk size 這樣可以保證分塊讀取 下面的部落格提供了如下的 2.dask包 import dask.dataframe as dd dd.read csv dask包採用的是並行讀取,速度會快很多。在個人筆記本上測試...

Pytorch 讀取大資料集

記錄一下pytorch讀取大型資料集的要點 pytorch 讀取大資料集的一般方法 class mydataset data.dataset def init self,root filepath self.root root init 中讀取檔案路徑而非檔案本體 self.imgs list se...

Python 讀取資料

將乙個資料夾下面的影象和對應的pts讀進來,然後把pts檔案裡面的資料讀入乙個陣列,然後畫到影象上 coding utf 8 測試資料樣例 讀取 image cv2.imread fullpath 讀取對應的pts檔案 landmarks readlmk ptsfile for point in l...