【问题标题】:Load thousands of CSV files into tableau将数千个 CSV 文件加载到画面中
【发布时间】:2018-10-17 21:28:26
【问题描述】:

我有大量的 CSV 文件,第 2 列是 x 数据,第 3 列是 y 数据。每个 CSV 文件都有一个不同的时间戳。每个文件中的 x 数据略有不同,但行数是恒定的。我很高兴假设 x 数据实际上是相同的。

我相信 Tableau 是一个很好的界面,可以让我进行一些可视化并愉快地安装了 tabpy 和“voila”,我可以从 Tableau 调用 python...除了...返回一个数组我需要返回一个每个时间戳用逗号分隔值的字符串,然后是每个 x 轴的其中一个字符串,然后......嗯,这听起来不对。

我尝试告诉 Tableau 将它们全部打开,然后我会加入它们,但在运行 30 分钟后放弃了。

那么你认为呢?我完全不可知论。安装 SQL 服务器并创建数据库?创建一个大 CSV 文件,每列都有一个时间戳?谷歌? JSON?

或者也许 Tableau 中有一些巧妙的方法可以循环浏览 CSV 文件?

【问题讨论】:

    标签: python csv tableau-api


    【解决方案1】:

    我建议在 Tableau 之外进行任何数据准备。由于您似乎熟悉 Python,请尝试使用 Pandas 将所有 csv 文件组合到一个数据帧中,然后输出到数据库或单个 csv。然后连接到那个单一的来源。

    【讨论】:

    • 是的,这或多或少是我的想法,所以问题是最好的来源。我刚刚找到了 HYPER 格式,可以直接由 python 创建,然后由 Tableau 自动读取,所以也许这是“最好的”来源.....onlinehelp.tableau.com/current/api/extract_api/en-us/help.htm
    • 我会说本地超级文件是我使用过的最快的来源。本地我的意思是不在 tableau 服务器上,因为如果托管它会有一些延迟。您可以在 tableau desktop(10.5 或更高版本)中更快地创建超级文件。只需创建您的单一源 csv 文件,然后将 Tableau 连接到它。在 Desktop 中选择数据源,然后单击提取数据。
    【解决方案2】:

    如果您使用的是 Windows,则可以将所有 csv 文件合并为一个 csv,然后将其导入 Tableau。这当然假设您所有的 csv 文件都具有相同的数据结构。

    1. 打开命令提示符
    2. 导航到 csv 文件所在的目录(使用 cd 命令)
    3. 使用命令copy *.csv combined-file.csv。 combine-file.csv 可以是您想要的任何名称。

    【讨论】:

    • 天哪,我没有想到这一点。所以似乎副本做了一个追加,这样我就会获得一大堆新行,而不是我期待的额外格式。但是,嗯,正如你所指出的,它只是一个要打开的文件。如果这被证明很难在 Tableau 中重新调整,那么在 Excel 中就很容易解决了......也许是赢家......
    【解决方案3】:

    这是我昨晚尝试的。速度极快,任何未来的 CSV 都会自动添加到底部。谢谢大家的建议。

    #
    #
    
    import os, csv
    from tableausdk import *
    from tableausdk.HyperExtract import *
    
    basepath = "C:\Users\Admin\Desktop\242RawFiles"
    
    fpattern = "Well_242"
    
    tableau_filename = "BigData.hyper"
    
    ExtractAPI.initialize()
    
    extract = Extract( tableau_filename )
    
    if ( not extract.hasTable( 'Extract' ) ):
        schema = TableDefinition()
        schema.setDefaultCollation( Collation.EN_GB )
        schema.addColumn( 'Datafile',   Type.CHAR_STRING ) 
        schema.addColumn( 'Solenoid',   Type.DOUBLE ) 
        schema.addColumn( 'Data',       Type.DOUBLE )
        table = extract.addTable( 'Extract', schema )
        if ( table == None ):
            print("Error occurred while creating the table:\nExiting now\n.")
        exit( -1 )
    else: 
        table = extract.openTable( 'Extract' )
        if ( table == None ):
             print("Error occurred while opening the table:\nExiting now\n.")
             exit( -1 )
        schema = table.getTableDefinition()
    
    row = Row( schema )
    
    for filename in os.listdir(basepath):
    
        if (filename.endswith(".csv") and fpattern in filename ):
            with open(basepath+"\\" + filename) as csvfile:
                readCSV = csv.reader(csvfile,delimiter=",")
                readCSV.next()
                for datarow in readCSV:
                    row.setCharString( 0, filename[-17:-4] )  #only the tail
                    row.setDouble( 1, float(datarow[2]) )  
                    row.setDouble( 2, float(datarow[3]) ) 
                    table.insert( row )
    
    # Flush the Extract to Disk
    extract.close()
    
    # Close the Tableau Extract API
    ExtractAPI.cleanup()
    

    【讨论】:

    • 嘿@Tunneller 我也面临类似的情况。你能在上面或任何博客上给我更简短的介绍吗???
    • 对不起,我刚看到这篇文章 Nandha。你还在苦苦挣扎吗?
    • 嗨,我实际上放弃了我的 tableau 订阅,所以我不知道我是否可以复制,但我记得上面是如何工作的。不知道大家是不是想坐下来看看我们的聊天记录,有没有办法pm你?
    猜你喜欢
    • 2020-03-29
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2017-06-03
    • 2016-04-17
    相关资源
    最近更新 更多