在Matlab中直接从url读取csv数据
我在从Matlab中的数据库读取数据时遇到一些问题。我用来下载数据的url链接给出了一个分号分隔的文本文件,我需要Matlab来识别这些数据,并以在Matlab中直接从url读取csv数据,r,matlab,csv,import,R,Matlab,Csv,Import,我在从Matlab中的数据库读取数据时遇到一些问题。我用来下载数据的url链接给出了一个分号分隔的文本文件,我需要Matlab来识别这些数据,并以struct格式对其进行相应的排列(因为数据有不同的类)。 我已经使用了urlread,可以成功下载数据,唯一的问题是我将所有数据作为一个单元格中的字符串获取,我需要将这些数据作为一个表并进行良好的组织 基本上,我想知道是否有可能像R中的read.csv函数那样将url中的数据加载到Matlab中,您只需将url放在文件名应该放在的位置,并定义数据的分
struct
格式对其进行相应的排列(因为数据有不同的类)。
我已经使用了urlread
,可以成功下载数据,唯一的问题是我将所有数据作为一个单元格中的字符串获取,我需要将这些数据作为一个表并进行良好的组织
基本上,我想知道是否有可能像R中的read.csv
函数那样将url中的数据加载到Matlab中,您只需将url放在文件名应该放在的位置,并定义数据的分隔方式,然后viola,您就可以得到data.frame
,所有数据都按应有的方式完美组织
我想在使用
urlread
后,有一些方法可以解释字符串,并以某种方式将其转换为有组织的struct
变量,但必须有一种方法可以像R一样直接从url读取它。查看名为dlmread
的函数。这将允许您输入一个数据字符串,告诉它分隔符是什么,它将输出您需要的内容
下面是一段代码,它将从web(
urlread
)读取csv
数据,使用textscan
将数据扫描并格式化为单元格(允许使用字符串和标量),然后将单元格转换为具有cell2struct
的结构。创建的结构保留textscan
格式
请注意,您必须定义textscan
格式和cell2struct
输入以适合您的数据
block = urlread('http://hci.stanford.edu/jheer/workshop/data/florida2000/Florida2000.csv');
C = textscan(block,'%s%s%f%s%f','HeaderLines',1,'EndOfLine','\n');
S = cell2struct(C,{'county','technology','columns','category','ballots'},2)
这是佛罗里达州2000年总统选举结果(.csv
,938个数据点)
这将产生
S =
county: {938x1 cell} %string
technology: {938x1 cell} %string
columns: [938x1 double] %double
category: {938x1 cell} %string
ballots: [938x1 double] %double
编辑 对于双引号文本,您可以在调用
textscan
()时使用%q
而不是%s
,就像这样
C = textscan(fileID,'%q%f');
dlmread仅适用于数字数据,它创建一个矩阵。我需要创建一个结构,因为url中的数据具有不同的classes@RabidHealer最初的海报没有真正说明数据的类型,所以我只是假设它是数字。我添加了一句话解释数据具有不同的类。我尝试在MATLAB R2015b中使用URL调用dlmread(),但它返回了一个I/O错误。我相信它只能从本地文件系统中读取,而不能从HTTP中读取。@Nayuki我不能说问题出在哪里,除非详细说明错误说明了什么,但是这个答案是在2013年写的,所以MATLAB可能在我写答案到他们发布R2015这一解决方案起作用之间发生了一些变化,我必须为每个列定义数据类和名称,这样它就不会像在R中那样简单了。但是它做了我想要的事情。无论如何,对mathworks来说,一个好的建议是在csvread函数中包含与URL的兼容性。谢谢你的帮助@RabidHealer这将涉及太多的工作(支持所有常见的协议,如HTTP、FTP、TFTP等),因此通常用自己的工作范围限制每个命令/功能/工具更有意义。如果要读取远程文件,请使用适当的工具(例如
urlread
)获取它,然后使用另一个工具对其进行解析。我在Octave 3.8.2中尝试了这一方法,但它不起作用,因为它忽略了“headerline”。Octave输出“警告:文本扫描:读取字符串时忽略标题行”,并实际尝试解析标题。这是Matlab中不存在的倍频程怪癖吗?有人知道如何在不读取文件的情况下在八度音阶下工作吗?在标准csv文件中使用双引号怎么样?此答案不完整。@hyprfrcb请查看编辑<代码>文本扫描有一个用于读取引用文本的本机选项。
S =
county: {938x1 cell} %string
technology: {938x1 cell} %string
columns: [938x1 double] %double
category: {938x1 cell} %string
ballots: [938x1 double] %double
C = textscan(fileID,'%q%f');