R中PostgreSqL数据的简单可视化

R中PostgreSqL数据的简单可视化,r,postgresql,dbplyr,R,Postgresql,Dbplyr,在R中使用外部数据库时,我是一个初学者 几个月前,我已经问过如何将一个巨大的数据集导入PostgreSqL,并得到了完美的答案。 所以我想我在这里再试一次 有没有一种简单的方法来为R中的外部数据绘制一些图、图表或方框图 这是我的密码: 首先,我连接到数据库,进行连接,得到一些平均值,这很慢,但效果很好 问题在于最后一段代码,我想用xlab上的年份和ylab上的价格绘制一个图 db_tankdata一般来说,在R中绘制数据需要数据在R的本地内存中。如果有太多的数据要加载到R的本地内存中,那么您可能

在R中使用外部数据库时,我是一个初学者

几个月前,我已经问过如何将一个巨大的数据集导入PostgreSqL,并得到了完美的答案。 所以我想我在这里再试一次

有没有一种简单的方法来为R中的外部数据绘制一些图、图表或方框图

这是我的密码:

  • 首先,我连接到数据库,进行连接,得到一些平均值,这很慢,但效果很好
  • 问题在于最后一段代码,我想用xlab上的年份和ylab上的价格绘制一个图

  • 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)