Рубрики
Без рубрики

Визуализируя данные финансового рынка с Django, Bokeh & Alphavantage API

Как веб-разработчик и начинающий энтузиаст о применении концепций данных-науки для финансов, я был … Помечено Python, Datascity, Django.

Как веб-разработчик и начинающий энтузиаст о применении концепций данных-науки для финансирования, я искал способ показать данные с Django. Я замечаю, что не хватает ресурсов о Поэтому я решил поделиться, как вы можете сделать это. В этом посте мы построим веб-приложение с Джанго визуализировать с Боке Рыночные данные о EUR/USD . Я предполагаю, что вы понимаете язык программирования Python и Django. Вам также понадобится ключ API из Alphavantage Отказ Они предоставляют бесплатные данные в режиме реального времени о запасах, форекс и крипточных рынках.

Шаг 1: Настройте среду

Нам нужно создать изолированную среду Python. Для этого учебника я буду использовать Виртуальский Отказ

mkdir RealFx
cd RealFx
virtualenv --python=/usr/bin/python3.8 env
source env/bin/activate

Теперь мы устанавливаем пакеты и создайте приложение Django.

pip install django bokeh pandas 
django-admin startproject RealFx .
django-admin startapp mysite

Не забудьте добавить приложение к вашим настройкам проекта.

#RealFx/settings.py

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    #others app
    'mysite',
]

Запустите сервер.

python manage.py runserver

Шаг 2: Утилиты Функции

Чтобы визуализировать данные с Django & Bokeh, нам сначала нужно сделать вызов API на API APLIVANGE. Затем мы собираемся преобразовать ответ JSON в формат PandaS DataFrame, который мы будем использовать с Bokeh по вашему мнению. Как видите, это уже много вещей, и одна функция не может справиться с этим. Так в MySite Папка приложения, создать файл Utils.py Отказ Давайте добавим первую функцию.

#mysite/utils.py
import requests
import pandas as pd
def get_data(from_symbol, to_symbol, API_KEY):
    r = requests.get('https://www.alphavantage.co/query?function=FX_DAILY&from_symbol=' + from_symbol + '&to_symbol=' + to_symbol + '&apikey=' + API_KEY)

    dataIntraday = r.json()

    return dataIntraday['Time Series FX (Daily)']

Вторая функция будет использовать Pandas для преобразования вернута словаря (DataIntRaday [‘Time Series fx (Daily)’]) get_data () В формате DataFrame Pandas.

#mysite/utils.py
def convert_to_df(data):
    """Convert the result JSON in pandas dataframe"""

    df = pd.DataFrame.from_dict(data, orient='index')

    df = df.reset_index()

    #Rename columns

    df = df.rename(index=str, columns={"index": "date", "1. open": "open",
    "2. high": "high", "3. low": "low", "4. close": "close"})

    #Change to datetime

    df['date'] = pd.to_datetime(df['date'])

    #Sort data according to date

    df = df.sort_values(by=['date'])

    #Change the datatype

    df.open = df.open.astype(float)
    df.close = df.close.astype(float)
    df.high = df.high.astype(float)
    df.low = df.low.astype(float)

    #Checks
    df.head()
    df.info()

    return df

Теперь мы можем работать по мнению.

Ввиду приложения мы можем теперь использовать мощность Bokeh. Диаграмма будет визуализирована как Японские подсвечники Отказ

from django.shortcuts import render
from bokeh.plotting import figure, output_file, show
from bokeh.embed import components
import pandas as pd
from math import pi
import datetime
from .utils import get_data, convert_to_df

def homepage(request):

    #We use get_data method from utils

    result = get_data('EUR','USD', 'You_own_api_key') #Add your own APIKEY

    source = convert_to_df(result)

    # These lines are there to color
    # the red and green bars for down and up days

    increasing = source.close > source.open
    decreasing = source.open > source.close
    w = 12 * 60 * 60 * 1000

Во-первых, мы используем методы нашего Utils.py файл. Затем мы преобразуем результат в DataFrame. Последние строки важны для окраски, и, как мы хотим визуализировать через полдня.

    TOOLS = "pan, wheel_zoom, box_zoom, reset, save"

    title = 'EUR to USD chart'

    p = figure(x_axis_type="datetime", tools=TOOLS, plot_width=700, plot_height=500, title = title)
    p.xaxis.major_label_orientation = pi / 4

    p.grid.grid_line_alpha = 0.3

    p.segment(source.date, source.high, source.date, source.low, color="black")

Как мы имеем дело со данными серии Time, желательно иметь ось, которая может отображать этикетки, которые подходят для разных дат и временных масштабов.

    p.vbar(source.date[increasing], w, source.open[increasing], source.close[increasing],
        fill_color="#D5E1DD", line_color="black"
    )
    p.vbar(source.date[decreasing], w, source.open[decreasing], source.close[decreasing], 
        fill_color="#F2583E", line_color="black"
    )

    script, div = components(p)

    return render(request,'pages/base.html',{'script':script, 'div':div })

Отправить данные в HTML-файлы в django, требуется сохранить наши шаблоны файлов деликатно. В MySite Папка приложения, создать папку шаблоны . Затем в этой папке создайте еще одну папку мой сайт (То же самое имя, что и ваше приложение). Затем создайте папку с именем страницы и (мы почти сделали 😆), создайте HTML-файл base.html. Если вы заметили в файле просмотра, функция Главная страница Возвращает словарь объектов. Нам нужен HTML-файл, который содержит div, где отображается визуализация, и зависимости Bokeh в файле. CSS файлы в головке и файлам JS в конце кода. Ради производительности.




    
    Financial Data
    




    
    
{{ div | safe }}
{{ script | safe }}

Мы должны указать маршруты к мнениям нашего приложения. Создать Urls.py. в MySite папка и добавить эти строки.

#mysite/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.homepage, name='homepage')
]

Поскольку мы отделили файл URLS, мы должны уведомить его в файле URL-адреса проекта.

#RealFx/urls
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    #mysite url file
    path('', include('mysite.urls')),
]

Теперь мы закончили. Давайте посмотрим данные. И вуаля.

Заключение

В этом посте я показал вам, как визуализировать финансовые данные с Django & Bokeh. Каждая статья может быть сделана лучше, поэтому, пожалуйста, оставьте свои предложения и вклад в комментарии ниже. Если у вас есть вопросы по поводу каких-либо шагов, пожалуйста, в разделе «Комментарий». Проверьте Github repo Отказ

Оригинал: “https://dev.to/koladev/visualizing-financial-market-data-with-django-bokeh-alphavantage-api-5gj2”