导入数据并使用自定义python代码读取非csv/txt文件->图

pypjpypj 成员职位:8贡献我
2018年11月编辑 帮助

你好,

我在学习RM的过程中,我有一个工作的python代码,我想编译和产生一个图形,但我有一个艰难的时间设置一切,并正确运行它。数据集是非文本的csv文件,所以我不能通过用户界面正常上传它,但可以使用一个名为nmrglue的python模块读取它。我已经将所有必要的文件移动到本地存储库中,并检查了Python的扩展名是否正确设置(它是最新的并且匹配的)。然而,它似乎并没有从类到类的导入中拾取,尽管我尝试了许多组合来附加输入/输出过程树。

我已经附上了原始的python脚本+相关文件使用,并希望如何正确导入它的视觉指令。

我只是需要帮助设置,但我认为我错过了一些明显的过程。

谢谢,

Files.zip 368.7 k
标记:

答案

  • MartinLiebigMartinLiebig 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3367年RM数据科学家

    你好,

    我迅速调查了一下。我在哪里可以找到你的rm_main函数?

    ~马丁

    - RapidMin乐鱼平台进入er数据科学服务主管
    德国多特蒙德
  • Thomas_OttThomas_Ott RapidMiner认证分析师,RapidMiner认证专家,成员职位:1761年独角兽

    作为@mschmitz指出,要在RapidMiner中使用Python,您需要将其封装在一个函数中(参见下面的示例图像),并将Pandas作为默认值调用。我们需要Pandas来生成RM和Python之间的数据框。

    Python Example.png

    homero_merino
  • pypjpypj 成员职位:8贡献我

    你好,

    我通过将我的“main”类重新标记为rm_main(data)来输入函数,但是我经常遇到空格错误,就像这样。

  • pypjpypj 成员职位:8贡献我

    还有下一个输入:

    导入nmrglue为ng
    进口matplotlib。Pyplot为PLT
    以pd方式导入熊猫
    进口scipy.stats
    导入numpy为np
    进口操作系统
    进口pylab

    def rm_main(数据):

    def负载(路径):

    Dic, data = ng.file . broker .read_pdata(path)
    Udic = ng. broker .guess_udic(dic,data)

    对于udic[0].items()中的k:
    打印(k)
    [udic[n]["size"] for n in range(udic["ndim"])]

    光谱=数据[:]
    #将它们存储为float
    CAR = float(udic[n][" CAR "])
    SW = float(udic[n][" SW "])
    OBS = float(udic[n][" OBS "])

    Num_points = float(len(spectrum))

    #需要将车除以车,得到载体的PPM
    freq_max = (.5) /float(OBS/SW)+float(CAR/OBS);
    freq_min = (5 - ((num_points-1) / num_points)) /浮动(奥林匹克广播服务公司/ SW) +浮动(汽车/观察);
    Step = (freq_max-freq_min)/(num_points-1)

    域= []
    Spectrum_flip = []
    对于range(len(spectrum))中的I:
    domain.append (freq_min + i *步骤)
    spectrum_flip.append(频谱(len(频谱)我))

    返回域,spectrum_flip

  • pypjpypj 成员职位:8贡献我

    从本质上讲,我想要完成的是运行我的python代码,将数据转换为可以利用RapidMiner的分析工具的可用矩阵。我可以通过组合所有Python函数将main, load, draw等所有模块组合到一个进程中,但我本质上只是希望程序在通过循环第一个'块'给出的import glob模块之后运行。

    谢谢,

  • MartinLiebigMartinLiebig 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家,大学教授职位:3367年RM数据科学家

    你好,

    您需要返回pandas数据框,而不是列表。应该可以了。

    ~马丁

    - RapidMin乐鱼平台进入er数据科学服务主管
    德国多特蒙德
  • pypjpypj 成员职位:8贡献我

    你好,

    我用熊猫代替了所有的列表推导。DataFrame和append()一起从原始代码中复制append()。然而,我仍然不断收到这个错误:
    IndentationError:预计第13、17等行会出现缩进。

    我已经剪掉了空白,几乎尝试了每次迭代下缩进的所有组合,但都无济于事。

  • pschlunderpschlunder 员工、RapidMiner认证分析师、RapidMiner认证专家、RMResearcher、会员职位:96RM研究

    嘿,

    我猜您已经理解了主要概念,但是在提供可能的解决方案之前,让我重复一些内容来填补遗漏的信息。

    使用“Execute Python”操作符,您可以在RapidMiner中执行Python代码。它访问在"Settings" -> "Preferences…"下指定的python版本。-> "Python脚本" -> "Python可执行文件路径"

    截图(15). png定义使用的Python版本

    在屏幕截图中找到使用安装在Windows下的Anaconda中的Python的示例路径规范。现在你可以在操作符中通过导入它们来访问为这个python版本安装的库,就像你以前在python中做的那样。

    操作符中的Python代码使用4个空格作为一个缩进级别。因此,如果您收到缩进错误,请确保缩进等于所需缩进水平的4倍。例如,当我复制“rm_main”的代码时,它包含制表符和空格的混合物,以及仅由2个空格组成的缩进。一些编辑器(比如崇高例如)提供显示是否使用制表符或空格的选项。

    处理完缩进错误后,确保形成一个合适的Pandas DataFrame对象。我查了“nmrglue”库和“fileio. broker”。Read_pdata”方法似乎已经返回了给定数据的字典。幸运的是,Pandas dataframe将其作为输入。因此,您可以直接从返回的对象中创建一个DataFrame。这样做还有一个好处,即从一开始就正确地命名列。

    现在有了Pandas DataFrame实例,您可以在“rm_main”函数的返回语句中传递它。之后,“Execute python”运算符将DataFrame转换为示例集(用于RapidMiner管理矩阵数据)。您可以在操作符输出端口访问此示例集。返回的第一个DataFrame在最顶端的输出端口传递,依此类推。

    这里有一些示例代码,你只需要调整路径到你想要读取的文件:

    导入nmrglue为ng
    以pd方式导入熊猫

    def rm_main ():
    path = "C:\\my_great_data_file.ending"
    //使用nmrglue从位于path的文件中读取数据
    _ = ng.file . broker .read_pdata(path)

    //从给定的字典中创建pandas数据框架
    df = pd.DataFrame(dic)

    //检查数据帧创建是否成功
    如果不是isinstance(df, pd.DataFrame):
    print("转换到数据帧失败")

    //发送数据帧到运营商输出端口
    返回df

    注:

    • 在“执行Python”操作符中总是需要一个名为“rm_main”的函数。如果您将示例集连接到其输入端口,则需要为该函数指定相同数量的参数。对于您的情况,您不需要在输入端口提供任何东西,因此您不需要为“rm_main()”提供任何参数。
    • 使用python的"print"函数打印的所有东西都显示在RapidMiners Log中。您可以通过菜单选项“视图”->“显示面板”->“日志”来启用它。
    • RapidMiner提供了在加载属性后更改属性类型的操作符,如果您仍然需要在“Execute Python”操作符中定义这些时间,则首先将读取的数据转换为numpy数组。对于它们,您可以通过所谓的“dtype”参数指定属性类型。找一些例子在这里

    编辑:

    如果您使用的是Windows,请确保在提供路径时转义反斜杠。这意味着,您需要提供2个反斜杠,我将其添加到上面的代码示例中。

    MartinLiebig Edin_Klapic
  • pypjpypj 成员职位:8贡献我

    同样,我已经正确地设置了目录,代码没有RapidMiner就可以正常工作。我也使用Linux和我复制粘贴你的代码与脑海中的参数。我怀疑我可能不得不将所有类对象合并到一个块中。这行不通。我还使用编辑和崇高来跟踪缩进,并从内部删除了所有不必要的空格/制表符。

    我必须将python文件移动到python安装所在的模块文件夹中吗?由于某些原因,它无法检测到按顺序向右附加到它的类。

    无法解析脚本。
    请检查您的Python脚本:导入错误:没有名为bin_spectrum的模块

    Bin_spectrum是我的另一个类的名称,它有自己的一组要调用的函数。

  • pschlunderpschlunder 员工、RapidMiner认证分析师、RapidMiner认证专家、RMResearcher、会员职位:96RM研究

    您是否尝试将包含lib文件的文件夹添加到PYTHONPATH?

    有一个环境变量(参考:pythonpath环境),用于查找python模块。为了让它识别脚本作为一个模块,你需要提供一个' __init__.py '文件。它可以为空,但必须位于要添加的文件夹内。

    另一种选择是使用' setup.py '(参考:创建安装文件).这允许通过pip进行安装。如果您选择这个解决方案,您可能希望在安装过程中使用' -e '选项。它允许在python文件上连续工作,而不必一遍又一遍地重新安装模块。(可能的安装调用' pip install -e folder_containing_the_setup_py ')

登录注册置评。