R中PostgreSqL数据的简单可视化
在R中使用外部数据库时,我是一个初学者 几个月前,我已经问过如何将一个巨大的数据集导入PostgreSqL,并得到了完美的答案。 所以我想我在这里再试一次 有没有一种简单的方法来为R中的外部数据绘制一些图、图表或方框图 这是我的密码:R中PostgreSqL数据的简单可视化,r,postgresql,dbplyr,R,Postgresql,Dbplyr,在R中使用外部数据库时,我是一个初学者 几个月前,我已经问过如何将一个巨大的数据集导入PostgreSqL,并得到了完美的答案。 所以我想我在这里再试一次 有没有一种简单的方法来为R中的外部数据绘制一些图、图表或方框图 这是我的密码: 首先,我连接到数据库,进行连接,得到一些平均值,这很慢,但效果很好 问题在于最后一段代码,我想用xlab上的年份和ylab上的价格绘制一个图 db_tankdata一般来说,在R中绘制数据需要数据在R的本地内存中。如果有太多的数据要加载到R的本地内存中,那么您可能
db_tankdata一般来说,在R中绘制数据需要数据在R的本地内存中。如果有太多的数据要加载到R的本地内存中,那么您可能不应该绘制它(我曾经尝试绘制100米的数据点,结果很糟糕)
我的建议是准备数据库中的数据,然后只将绘图所需的数据加载到R的本地内存中
remote\u summary=remote\u table%>%
变异(年份=年份(日期))%>%
按(年度)分组%>%
总结(e5=平均值(e5))
本地\u表=收集(远程\u摘要)
#ggplot或您更喜欢在此处使用本地_表打印命令
在上面的代码中,我们首先创建一个新变量作为年份,然后生成每年的平均值e5
。这将生成要在数据库中打印的摘要
collect
可用于将远程摘要加载到R的本地内存中,然后绘制本地表中的数据
正如@wildplasser指出的,postgresql中没有year()
函数。您可能希望使用DATE\u部分
。因此,您的代码如下所示:
remote\u summary=remote\u table%>%
变异(年=日期部分(年,日期))%>%
...
由于DATE\u PART
不是一个R函数,因此没有为其定义dbplyr翻译,因此它应该按原样直接传递给postgresql-生成一个有效的postgresql查询。您可以使用show\u query
检查基础查询是否正确。我建议:
show\u查询(远程\u摘要)
在收集远程摘要之前。如果“显示查询”显示有效的sql查询,则“收集”应该可以工作。否则,您将需要调整remote\u summary
的定义以获得有效的sql查询。summary
是指在使用group\u by
设置分组变量后使用。如果你在文章中包含了一些数据和期望的结果,人们可以给出更具体的建议。顺便说一句:SQL中没有year()
函数。(它是Sybase/Microsoft的扩展)如果数据太大,就无法绘制数据?为了在数据集中找到异常值,我真的需要做一些boxplotsdbplyr让R将类似dplyr的操作推送到sql中。绘制绘图不是sql设计的目的,因此您不能将生成从R推送到sql。但是,您不需要将所有数据加载到R以生成长方体绘图。您可以在sql中计算中位数、上四分位数、下四分位数、最小值和最大值。然后将这些值加载到R中并绘制。从R传输到sql的信息量要小得多。此问题可能有助于您做到这一点:
db_tankdata <- 'tankdaten'
host_db <- 'localhost'
db_port <- '5432'
db_user <- 'postgres'
db_password <- 'xxx'
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname = db_tankdata, host=host_db,
port=db_port, user=db_user, password=db_password)
#do a join with tables from database, filter a city
ms_stations_comb <- tbl(con, "prices") %>% left_join(tbl(con, "stations"), by = c("station_uuid" ="uuid")) %>% filter(str_detect(post_code, "^481"))
#get mean prices for different types of fuel
ms_stations_comb %>% summarize(mean_diesel = mean(diesel), mean_e5 = mean(e5), mean_e10 = mean(e10))
#do a plot with years on xlab and price on ylab
ms_stations_comb %>% dbplot_line(year(date), e5)