资讯专栏INFORMATION COLUMN

[原]打造数据产品的快速原型:Django的Docker之旅

zhangqh / 917人阅读

摘要:而大多数数据科学研究的场景下,更快的速度也意味着更早地发现问题和完成检验假设的闭环。通常,数据科学被认为研究成果立即应用到生产环境都是比较缓慢的一个过程。

概述

在数据科学研究中,快速验证想法是非常关键的一环,而如何快速开发出数据产品则可以有效推动整个数据科学项目研究成果在生产环境中的应用速度。

而大多数数据科学研究的场景下,更快的速度也意味着更早地发现问题和完成检验假设的闭环。

本文将介绍如何通过Docker+Django技术打造数据产品的快速原型,并通过实战案例进行演示。

为什么使用Django

最初起源于美国芝加哥Python用户组的Django框架,使得Python的使用者不必写大量的css、js就可以快速数据管理系统的开发,且Django集成了模板系统、ORM、数据迁移版本控制、模糊搜索、过滤器、用户鉴权等特性,同时Django提供了松耦合的设计,并且内置了国际化支持和后台管理界面等实用功能。Django 使得非传统程序员的数据科学家不必依赖于前端、后端工程师就可以自己依照业务完成一些简单的数据管理工作,快速验证想法的可靠性。

给样本打标签是机器学习中非常常见的一项工作,通过Django打造数据产品的快速原型,可以极大方便我们给样本打标签的过程,为机器学习的冷启动争取到更多时间。

为什么使用Docker

参考前文 容器定义应用:数据科学的容器革命,随着容器化技术的兴起,数据科学现在最大的一场运动已经不是由一个新的算法或者统计方法发起的了,而是来自Docker的容器化技术。通常,数据科学被认为研究成果立即应用到生产环境都是比较缓慢的一个过程。利用容器技术将加速数据科学在生产环境中的实际应用。

由于Docker的标准交付特性使得 Django 应用在运维、部署、交付时都是标准化的,这就使得研究成果可以快速标准化地分享,通过docker-compose我们还可以很容易地管理单机容器集群的编排。

此外,通常,数据科学团队都是一个5人以内的小团队,从研发序列到生产运维的一条龙输出使得团队成员在技能树异构的情况下必须尽量掌握全栈能力,因为技能树或者专业背景的异构将使得整体分析视野更加开阔,类似于多个弱分类器的模型融合对分类器整体会有提升作用。

数据科学的小团队可以理解为一个小型的分布式系统,由一个 Team Leader 作为 Master,其余成员作为 Worker,为了保证容错性,在Master或者Worker的其中一个节点挂掉时,其他节点必须具备替代其他节点成为Master的能力。

准备

根据DockerCon2016的最新消息,我们已经可以在Mac、Windows、Linux同时部署原生的docker容器,而不需要再借助于虚拟机。

所以,本次案例将采用 Mac 作为实验环境,并采用最新的 docker native。

实战 步骤一:安装Docker

下载软件

打开安装包后根据提示完成安装即可。

步骤二:部署Django

考虑到国内的实际情况,这里采用了时速云提供带有国内apt-get源的Ubuntu镜像作为基础镜像,在此基础上更新pip源后进行后续开发,这样就保证了整个软件更新时的速度不会受到限制。
安装ubuntu OS

docker pull index.tenxcloud.com/tenxcloud/docker-ubuntu

生成容器

docker run -d -p 8000:8000 -v /home:/home --name django index.tenxcloud.com/tenxcloud/docker-ubuntu

进入容器

docker exec -it django bash

安装pip

sudo apt-get install python-pip 
mkdir ~/.pip
echo "[global]

timeout = 60

index-url = http://pypi.douban.com/simple
" > ~/.pip.conf

安装 django

pip install django
步骤三:初始化项目和应用

创建项目工作目录

django-admin startproject FinanceR

初始化应用

django-admin startapp RiskManagement
步骤四:初始化数据模型

修改数据模型

vi RiskManagement/models.py
# -*- coding: UTF-8 -*-

from django.db import models
import uuid

SIZES = (
("0","大盘股" ),
("1","中小盘股" ),
)

MARKETS = (
("0","沪深"),
("1","港股"),
("2","美股"),
("3","其他"),
)

LABELS = (
("0","未知"),
("1","看空"),
("2","看多"),
)

STATUS = (
("0","盈利"),
("1","亏损"),
("2","持平"),
("3","停牌"),
("4","关闭"),
)

class portfolio(models.Model):
    portfolio_id =  models.UUIDField(verbose_name="组合ID",primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length = 255,verbose_name="组合名称")
    introduction = models.CharField(max_length = 255,verbose_name="组合介绍")
    label = models.IntegerField(blank=False,verbose_name="组合标签",choices=LABELS)
    status = models.IntegerField(blank=False,verbose_name="组合状态",choices=STATUS)
    size = models.IntegerField(verbose_name="组合大小盘",choices=SIZES)
    market = models.IntegerField(verbose_name="组合所在市场",choices=MARKETS)
    create_time = models.DateTimeField(verbose_name="组合创建时间",auto_now_add= True)
    portfolio_return = models.DecimalField(verbose_name="组合收益", max_digits=19, decimal_places=10)
步骤五:初始化管理模型

接着定义一下后台显示的形式

vi RiskManagement/admin.py
# -*- coding: UTF-8 -*-
from django.contrib import admin
from .models import portfolio

@admin.register(portfolio)
class portfolioAdmin(portfolio,admin.ModelAdmin):
    model = portfolio

    list_display = ["name","introduction","label","market","size","portfolio_return","create_time"]
    list_display_links = ["name"]
    search_fields = ["id","portfolio_id"]
    list_filter = ["label","size","market"]
    ordering = ["create_time"]

    # 全站默认去处 删除选项
    admin.site.disable_action("delete_selected")
    
    fieldsets = [
        ("基础信息",{"fields": ["portfolio_name","introduction",]}),
        ("其他信息", {"fields": ["market","size","status"], "classes": ["collapse"]}),
    ]
步骤六:初始化数据库
python manage.py makemigrations auth
python manage.py migrate auth
python manage.py makemigrations RiskManagement
python manage.py migrate RiskManagement
步骤七:创建系统管理员
python manage.py createsuperuser
步骤八:注册应用
vi settings.py

在配置文件中相应的位置注册刚才完成的应用

INSTALLED_APPS = (
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "RiskManagement",
)
步骤九:启动服务器
python manage.py runserver 0.0.0.0:8000

在浏览器中输入 localhost:8000/admin 就可以进入到你想要的数据管理系统啦

参考资料

打造数据产品的快速原型:Shiny的Docker之旅

Web Service Efficiency at Instagram with Python

Django Packages

10 Polular Sites Made With Django

Django Packages

django redactor 绝对现代化的编辑器 支持拖拽传图

更优阅读体验可直接访问原文地址:https://segmentfault.com/a/11...
作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog...,如果涉及源代码请注明GitHub地址:https://github.com/harryprince。微信号: harryzhustudio
商业使用请联系作者。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26630.html

相关文章

  • []打造数据产品快速型:DjangoDocker之旅

    摘要:而大多数数据科学研究的场景下,更快的速度也意味着更早地发现问题和完成检验假设的闭环。通常,数据科学被认为研究成果立即应用到生产环境都是比较缓慢的一个过程。 showImg(https://segmentfault.com/img/remote/1460000005771293); 概述 在数据科学研究中,快速验证想法是非常关键的一环,而如何快速开发出数据产品则可以有效推动整个数据科学项...

    zhoutao 评论0 收藏0
  • []打造数据产品快速型:ShinyDocker之旅

    摘要:使得非传统程序员的使用者不必依赖于前端后端工程师就可以自己依照业务完成一些简单的数据可视化工作,快速验证想法的可靠性。本文以上的的新主机为例。 概述 本文将介绍如何通过Docker+Shiny-Server技术极速打造Web开发,并通过实战案例进行演示。 为什么使用Shiny Shiny是R中的一种Web开发框架,使得R的使用者不必太了解css、js只需要了解一些html的知识就可以快...

    seal_de 评论0 收藏0
  • []海纳百川 有容乃大:SparkR与Docker机器学习实战

    摘要:类似包中的功能这很好的解决了的大数据级瓶颈问题。也支持分布式的机器学习算法,比如使用机器学习库。部署本文将通过讲解如何快速部署容器,并通过一些简单的机器学习例子展示如何使用这个航母级别的组合拳。 showImg(https://segmentfault.com/img/remote/1460000004838121); 题图为美国尼米兹核动力航空母舰 介绍 大数据时代,我们常常面对海量...

    CHENGKANG 评论0 收藏0
  • []文档定义应用:数据科学文档革命

    摘要:对于数据科学的研究可以说已经是本文我将介绍如何以文档定义应用的方式成为数据科学中的标准交付。参考前文解密的数据科学部门如果构建知识仓库,作为一个谢大大的死忠,我很自然选择了作为我文档输出的首选工具。 showImg(https://segmentfault.com/img/remote/1460000006760433?w=423&h=426); 概述 随着近年来,Rstudio 通过...

    wh469012917 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<