Как веб-разработчик и начинающий энтузиаст о применении концепций данных-науки для финансирования, я искал способ показать данные с 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 {{ script | safe }} {{ div | 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”