【问题标题】:Not Getting the Expected Output in AzureML在 AzureML 中未获得预期的输出
【发布时间】:2015-09-07 05:11:36
【问题描述】:

背景:我正在开展一个项目,该项目旨在使用 Azure ML 中的情绪分析将产品评论分为正面和负面。当我将评论分类到不同的部门时,我卡住了。

我基本上是从 csv 文件中读取单词并检查评论(v:句子列表)是否包含这些单词。如果在评论中找到其中一些词,那么我会记下句子编号并将其推送到相应的列表中(FinanceList、QualityList、LogisticsList)。最后,我将列表转换为字符串并将它们推送到数据框中。

没有为我在 Azure ML 脚本中编写的打印语句记录输出。

数据框中的值总是为 0,但是当我在本地运行代码时,我得到了预期的输出。

第一个图像的描述:数据框的列显示 0 个值。

第二张图片的描述:我已经突出显示了我在本地获得的预期输出,用于在 AzureML 中使用的相同审查。

Image 1

Image 2

我已经检查过的东西:

  1. 正确读取 csv 文件。
  2. 评论包含我正在搜索的字词。

我无法理解我哪里出错了。

'

import csv
import math
import pandas as pd
import numpy as np

def azureml_main( data, ud):

   FinanceDept = []
   LogisticsDept = []
   QualityDept = []
  #Reading from the csv files
   with open('.\Script Bundle\\quality1.csv', 'rb') as fin:
      reader = csv.reader(fin)
      QualityDept = list(reader)

   with open('.\Script Bundle\\finance1.csv', 'rb') as f:
      reader = csv.reader(f)
      FinanceDept = list(reader)

   with open('.\Script Bundle\\logistics1.csv', 'rb') as f:
      reader = csv.reader(f)
      LogisticDept = list(reader)

   FinanceList = []
   LogisticsList = []
   QualityList = []

#Initializing the Lists   
   FinanceList.append(0)
   LogisticsList.append(0)
   QualityList.append(0)

   rev = data['Data']
   v = rev[0].split('.')

   print FinanceDept

   S = 0   
   for sentence in v:
      S = S + 1
      z = sentence.split(' ')
      for c in z:
         c = c.lower()
         if c in FinanceDept and S not in FinanceList:
            FinanceList.append(S)
         if c in LogisticsDept and S not in LogisticsList:
            LogisticsList.append(S)
         if c in QualityDept and S not in QualityList:
            QualityList.append(S)
   #Compute User Reputation Score
   Upvotes = int(ud['upvotes'].tolist()[0])
   Downvotes = int(ud['downvotes'].tolist()[0])
   TotalVotes = max(1,Upvotes+Downvotes)

   q = data['Score']

   print FinanceList

   repScore = float(Upvotes)/TotalVotes 
   repScore = repScore*float( q[0] )
   str1 = ','.join(str(e) for e in FinanceList) 
   str2 = ','.join(str(e) for e in QualityList)
   str3 = ','.join(str(e) for e in LogisticsList)

   x = ud['id']

   #df = pd.DataFrame(  [str(repScore), str1  , str2  , str3 ], columns=[Write the columns])
   d = {'id': x[0], 'Score': float(repScore),'Logistics':str3,'Finance':str1,'Quality':str2}
   df = pd.DataFrame(data=d, index=np.arange(1))
   return df,`

【问题讨论】:

    标签: python azure azure-machine-learning-studio


    【解决方案1】:

    @Anuj Shankar, 经过同事测试,我们可以从CSV文件中读取数据,得到预期的结果。请参考此经验:

    1) 输入数据 - 它有apple.zip 文件,其中有两个与您相似的csv 文件,每个 csv 文件都包含与公司相关的词袋。

    2)Python脚本:

    # The script MUST contain a function named azureml_main
    # which is the entry point for this module.
    #
    # The entry point function can contain up to two input arguments:
    #   Param<dataframe1>: a pandas.DataFrame
    #   Param<dataframe2>: a pandas.DataFrame
    import csv
    import numpy as np
    import pandas as pd
    
    def azureml_main(dataframe1 = None, dataframe2 = None):
        # Execution logic goes here
        #print('Input pandas.DataFrame #1:\r\n\r\n{0}'.format(dataframe1))
    
        # If a zip file is connected to the third input port is connected,
        # it is unzipped under ".\Script Bundle". This directory is added
        # to sys.path. Therefore, if your zip file contains a Python file
        # mymodule.py you can import it using:
        # import mymodule
    
        apple = {}
        microsoft = {}
      #Reading from the csv files
        with open('.\Script Bundle\\apple.csv', 'rb') as f:
          reader = csv.reader(f)
          apple = list_to_dict(list(reader)[0])
    
        with open('.\Script Bundle\\microsoft.csv', 'rb') as f:
          reader = csv.reader(f)
          microsoft = list_to_dict(list(reader)[0])
    
    #    print('hello world' + ' '.join(apple[0]))
        applecount = 0
        microsoftcount = 0
    
        input = "i want to buy surface which runs on windows"
        splitted_input = input.split(' ')
    
        for word in splitted_input:
            if word in apple:
                applecount = applecount + 1
            if word in microsoft:
                microsoftcount = microsoftcount + 1
    
        print("apple bag of words count - " + str(applecount))
        print("microsoft bag of words count - " + str(microsoftcount))
        mydata = [{'input words': len(splitted_input)}, {'applecount':applecount},
            {'microsoftcount':microsoftcount}]       
        # Return value must be of a sequence of pandas.DataFrame
        return pd.DataFrame(mydata),
    
    
    def list_to_dict(li):      
        dct = {}  
        for item in li:
            if dct.has_key(item):              
                dct[item] = dct[item] + 1  
            else:  
                dct[item] = 1  
        return dct  
    

    3) 输出 - 如果我考虑一个字符串“我想购买在 windows 上运行的表面”。它有 2 个与 microsoft 相关的词和 0 个与 apple 相关的词,在下面的快照中可视化。

    【讨论】:

    • 谢谢先生。您的回复很有帮助!我真的很惊讶你抽出时间解决了我的问题。我正在做的这个项目是为 Microsoft GD 的一个实习项目。
    【解决方案2】:

    您能否检查文件路径是否正确,根据https://azure.microsoft.com/en-us/documentation/articles/machine-learning-execute-python-scripts/,Python代码无法访问它运行的机器上的大多数目录,但当前目录及其子目录除外。 “Script Bundle”是一个子目录吗?您也可以尝试使用输入而不是从脚本中读取 csv 文件。 Execute Python Scripts 模块接受 3 个输入,前 2 个是数据帧,第三个是为 python 库文件保留的。例如,您可以将输入 1 用于实际数据,输入 2 用于原始 csv 中的单词。需要有一种机制将 3 个 csv 文件捆绑到单个数据帧中以用于输入 2。

    【讨论】:

    • 是的,文件路径是正确的。问题已解决。我明确地创建了单词列表,而不是从 csv 文件中读取它们。我无法理解为什么从 csv 文件中读取单词是个问题?
    • @AnujShankar,您能否尝试比较从 CSV 读取的数据格式和这些单词的列表?我怕DataFrame的参数的数据格式导致这个错误。
    • 后勤 = [“慢”、“落后”、“迟到”、“吹”、“延迟”、“拖延”、“第 11 小时”、“消失”、“卡住”、“滞后”、“逾期”、“推迟”、“疏忽”、“滞留”、“迟到”、“迟到”、“不准时”、“原住民”、“先行”、“大洪水”]。我将单词硬编码为脚本中的列表,而不是从 CSV 文件中读取。
    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多