[原]打造數據產品的快速原型:Django的Docker之旅

概述

在數據科學研究中,快速驗證想法是很是關鍵的一環,而如何快速開發出數據產品則能夠有效推進整個數據科學項目研究成果在生產環境中的應用速度。css

而大多數數據科學研究的場景下,更快的速度也意味着更早地發現問題和完成檢驗假設的閉環。前端

本文將介紹如何經過Docker+Django技術打造數據產品的快速原型,並經過實戰案例進行演示。python

爲何使用Django

最初起源於美國芝加哥Python用戶組的Django框架,使得Python的使用者沒必要寫大量的css、js就能夠快速數據管理系統的開發,且Django集成了模板系統、ORM、數據遷移版本控制、模糊搜索、過濾器、用戶鑑權等特性,同時Django提供了鬆耦合的設計,而且內置了國際化支持和後臺管理界面等實用功能。Django 使得非傳統程序員的數據科學家沒必要依賴於前端、後端工程師就能夠本身依照業務完成一些簡單的數據管理工做,快速驗證想法的可靠性。git

給樣本打標籤是機器學習中很是常見的一項工做,經過Django打造數據產品的快速原型,能夠極大方便咱們給樣本打標籤的過程,爲機器學習的冷啓動爭取到更多時間。程序員

爲何使用Docker

參考前文 容器定義應用:數據科學的容器革命,隨着容器化技術的興起,數據科學如今最大的一場運動已經不是由一個新的算法或者統計方法發起的了,而是來自Docker的容器化技術。一般,數據科學被認爲研究成果當即應用到生產環境都是比較緩慢的一個過程。利用容器技術將加速數據科學在生產環境中的實際應用。github

因爲Docker的標準交付特性使得 Django 應用在運維、部署、交付時都是標準化的,這就使得研究成果能夠快速標準化地分享,經過docker-compose咱們還能夠很容易地管理單機容器集羣的編排。web

此外,一般,數據科學團隊都是一個5人之內的小團隊,從研發序列到生產運維的一條龍輸出使得團隊成員在技能樹異構的狀況下必須儘可能掌握全棧能力,由於技能樹或者專業背景的異構將使得總體分析視野更加開闊,相似於多個弱分類器的模型融合對分類器總體會有提高做用。算法

數據科學的小團隊能夠理解爲一個小型的分佈式系統,由一個 Team Leader 做爲 Master,其他成員做爲 Worker,爲了保證容錯性,在Master或者Worker的其中一個節點掛掉時,其餘節點必須具有替代其餘節點成爲Master的能力。docker

準備

根據DockerCon2016的最新消息,咱們已經能夠在Mac、Windows、Linux同時部署原生的docker容器,而不須要再借助於虛擬機。數據庫

因此,本次案例將採用 Mac 做爲實驗環境,並採用最新的 docker native

實戰

步驟一:安裝Docker

download.png

下載軟件

打開安裝包後根據提示完成安裝便可。

步驟二:部署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]\n
timeout = 60\n
index-url = http://pypi.douban.com/simple\n" > ~/.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 就能夠進入到你想要的數據管理系統啦

參考資料

更優閱讀體驗可直接訪問原文地址:https://segmentfault.com/a/11...
做爲分享主義者(sharism),本人全部互聯網發佈的圖文均聽從CC版權,轉載請保留做者信息並註明做者 Harry Zhu 的 FinanceR專欄:https://segmentfault.com/blog...,若是涉及源代碼請註明GitHub地址:https://github.com/harryprince。微信號: harryzhustudio商業使用請聯繫做者。

相關文章
相關標籤/搜索