将数千个CSV文件加载到Tableau中

时间:2018-10-17 21:28:26

标签: python csv tableau

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

我说服Tableau是一个很好的界面,可以让我进行一些可视化并愉快地安装tabpy和“瞧”,我可以从Tableau调用python ...除非...要返回一个数组,我将需要返回一个字符串,每个时间戳带有逗号分隔的值,然后是每个x轴的字符串之一,然后....嗯,听起来不正确。

我试图告诉Tableau将它们全部打开,我稍后再加入,但是在处理30分钟后放弃了。

那你觉得呢?我完全不可知。安装SQL Server并创建数据库?创建一个大的CSV文件,该文件的每一列都带有时间戳?谷歌? JSON?

或者Tableau中可能有一些巧妙的方法来遍历CSV文件?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这是我昨晚尝试过的。速度极快,以后任何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()
相关问题