【问题标题】:Fitting CSV data in Mathematica在 Mathematica 中拟合 CSV 数据
【发布时间】:2012-08-02 06:13:53
【问题描述】:

我有一个CSV file,请注意您应该复制并粘贴它并将文件名重命名为 GPA.csv,我想将其导入 Mathematica 并使用幂函数对其进行调整。

注意:我知道将它与幂函数完美拟合是非常不可取的,因为它会给出错误的预测。

所以我开始做以下事情:

data = Import["C:\\GPA.csv", "Table"]
linfit = Fit[data, {1,x}, x]

现在奇怪的是它给了我一个错误说明:

Fit::fitc:坐标数 (0) 不等于变量数 (1)。 >>

但我确定我输入了超过 350 个坐标。我做错了什么?

PS:我也尝试过 test = Transpose[data],但是我得到了大约 350 个坐标,它仍然不等于变量的数量。

【问题讨论】:

  • 看看data[[1]] // FullForm 告诉你什么。
  • 它告诉我以下内容:List["8.00,4.00"]
  • 我的意思是暗示;将导入与"Table""Data" 进行比较。
  • 好吧,我修复了它,我不应该将它作为表格导入,而是作为“CSV”导入。这会给我正确的线性回归,但是我找不到 Table 和 CSV 之间的解释/区别。我认为这两种“数据类型”是一样的?

标签: csv import wolfram-mathematica


【解决方案1】:

回答你的两个问题:

  1. Import["C:\\GPA.CSV", "Data"] 将使一切正常 - 就像 Import["C:\\GPA.CSV"] 一样。

  2. 这些东西不同的原因是因为 Mathematica 有一种不直观且 (IMO) 令人困惑的文件导入方式。 "Table" 不起作用的具体原因是这被解释为“文件格式”,默认情况下 - 请参阅 the format documentation - Import 假设在这种情况下:

    "FieldSeparators" = {" ","\t"}
    

    因此您的逗号实际上被假定为每行字符串的一部分,而不是分隔符 - 只允许使用空格和制表符。 (如果您有一个包含 1, 2 的文件,这会更加令人困惑,在这种情况下,您会得到一个字符串 "1," 和一个数字 2。)因此,您也可以使用

    Import["C:\\GPA.CSV", "Table", "FieldSeparators" -> ","]
    

    当然,CSV 文件格式假定逗号作为您想要的分隔符。令人困惑的是,"Data" 在这种情况下,不是“文件格式”,而是“元素”。这意味着.csv 文件扩展名允许将文件作为 CSV 文件导入,然后您请求...等待...导入文件中的“数据”元素。哪个是数据。

您可以尝试阅读the Import documentationlisting of formats,但我想您已经尝试过了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多