美文网首页我爱编程
实战美年健康AI大赛之四_复赛使用数加平台

实战美年健康AI大赛之四_复赛使用数加平台

作者: xieyan0811 | 来源:发表于2018-05-13 16:07 被阅读54次

    1. 说明

     美年健康AI大赛的复赛是线上赛,只能使用数加平台。第一次用数加,也遇到一些问题,在此总结一下。

    2. 问题及解答

    (1) 如何登录?

     得到复赛资格之后,天池赛题网页左侧的列表中就会多出一项“数加”,点击进入后,按提示得到RAM帐号,即可以登录“数据开发平台”和“机器学习平台”,注意登录帐号是用户名和企业别名的组合。
     网页上提供的Demo有点旧了,是2015年的,那时候好像还叫“御膳房”。建议官方及时更新,这样大家可以节约点时间,技术支持人员也没那么累。

    (2) 如何访问数据?

     进入“数据开发平台”,点击上方的“数据管理”,即可进入数据界面,左侧的查找数据,可以通过关键字查找该项目下的表,像本题查找meinian就可以看到很多表,其中包括管理员建立的和其他参赛者建立的。 具体的项目名和表名见“赛题与数据”中复赛的说明。需要注意的是一般先要把项目数据用SQL复制到自己的空间中,然后再进行下一步操作。详见“代码分享”部分。 复制到自己空间后,就可以在“数据管理”->“个人帐号的表”中查看表信息了。

    (3) 如何写程序和运行?

     进入“数据开发平台”,点击上方的“数据开发”,在左侧的任务开发树中可以创建程序。这里提供了SQL,Shell,Python等工具。并支持目录结构。

    (4) 数加平台能否使用Python?

     能否使用pandas的DataFrame? 之前听说数加平台只能用SQL+Java,于是很多人都重新学习工具,占用了大部分时间,美年初赛时大多数人使用的都是Python,也希望在复赛中使用初赛代码。那么数加平台能否使用Python呢?
     不同比赛提供的工具不同,美年复赛可以使用Python,具体方法是右键点“任务开发”,“新建任务”,在类型中选择PYODPS即可编写Python程序。 PYODPS帮助文档见:http://pyodps.readthedocs.io/zh_CN/latest/index.html

    (5) ODPS是什么?

     ODPS(Open Data Processing Service),是阿里巴巴通用计算平台提供数据仓库解决方案.

    (6) 线上Python如何访问数据表

     从PYODPS帮助文档中看到,可以通过o访问数据表,而o通过以下方式获得:

    from odps import ODPS
    o=ODPS('**your-access-id**', '**your-secret-access-key**', '**your-default-project**', endpoint='**your-end-point**') 
    

     大家花了很多时间找access-key, access-secret,在个人信息中看到access-key不对子用户开放,然后我们就以为python不能用了,悲剧了。
     其实在数加线上,o不用赋值就可以直接使用,access-key和access-secret是针对离线运行PYODPS的。希望官方在文档或者赛题中明确写一下(真心地没想到o可以直接使用)。
     读写数据及odps与dataframe转换,详见“代码分享”部分。

    (7) 在何处提交结果

     题目提供的表中有测试集a:meinian_round2_submit_a,把答案写入用户空间的该表中,系统则会在评测时间自动对该表内容评测。因此,复制库成功后,表的内容为全0,评测时就有了成绩,得分约为9.1781,很低的分数。

    3. 代码分享

    (功能基本实现,代码还待优化,仅供参考)

    (1) 把数据复制到本地

     数据开发->任务开发->新建任务->ODPS SQL 写以下SQL语句,并运行(一共5个表,都用此方法复制)

    create table if not exists meinian_round2_data_part1 as select * from odps_tc_257100_f673506e024.meinian_round2_data_part1;
    

    (2) 其它常用SQL语句

     查看已有的表
     show tables;
     查看表内容
     select * from meinian_round2_data_part1;
     看表中有多少条数据
     select count(*) from meinian_round2_data_part1;

    (3) 将ODPS转成pandas的DataFrame

    from odps import ODPS
    from odps.df import DataFrame
    submit_basedata = DataFrame(o.get_table('meinian_round2_submit_a'))
    submit_data = submit_basedata.to_pandas()
    print("total", len(submit_data)) 
    

    (4) 存储ODPS数据

     这个我写了还没等到评测,不一定对,仅供参考。 具体功能是把训练集的均值作为预测值,因为不太会用writer,直接调用总是追加数据,只好在每次添加之前删表又重建,此处有待优化。

    import numpy as np
    from odps import ODPS
    from odps.df import DataFrame
    from odps.models import Schema
    
    train_basedata = DataFrame(o.get_table('meinian_round2_train'))
    train_data = train_basedata.to_pandas()
    
    submit_basedata = DataFrame(o.get_table('meinian_round2_submit_a'))
    submit_data = submit_basedata.to_pandas()
    submit_data['sys'] = train_data['sys'].mean()
    submit_data['dia'] = train_data['dia'].mean()
    submit_data['tl'] = train_data['tl'].mean()
    submit_data['hdl'] = train_data['hdl'].mean()
    submit_data['ldl'] = train_data['ldl'].mean()
    
    table_name = 'test'
    odps.delete_table(table_name, if_exists=True)
    odps.create_table(table_name,
     'vid string, sys bigint, dia bigint, tl double, hdl double, ldl double')
    t = odps.get_table(table_name)
    
    with t.open_writer() as writer:
     outdata = np.array(submit_data).tolist()
     writer.write(outdata)
     print("outdata length", len(outdata))
     writer.close()
    
    print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
    print(train_data.mean())
    print(submit_data.mean())
    

    4. 基本步骤

    (1) 把数据表复制到自己的用空间
    (2) 将pyodps转成pandas的dataframe
    (3) 数据处理和挖掘
    (4) 将dataframe结果转回pyodps能识别的格式存盘。

     我也刚开始做,觉得来好像这样转换一下,初赛的代码大部分就可用了。其它还没试,先这样吧,有空再写,祝师兄们马到成功 !!!

    相关文章

      网友评论

        本文标题:实战美年健康AI大赛之四_复赛使用数加平台

        本文链接:https://www.haomeiwen.com/subject/tiyldftx.html