Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 31, 2017 23:36:58

keodomir
Зарегистрирован: 2017-06-14
Сообщения: 18
Репутация: +  2  -
Профиль   Отправить e-mail  

Постройка диаграммы с помощью bokeh

Всем привет!
Помогите сформировать график по датам. Не могу понять как преобразовать start_time к дате.
Пробую вывести следующим кодом:

 import pandas as pd
from sqlalchemy import create_engine
from bokeh.models.sources import ColumnDataSource
from bokeh.plotting import figure, show
from datetime import datetime
dtm = lambda x: datetime.fromtimestamp(int(x)).strftime('%H:%M:%S %d.%m.%y')
#sqlite3 = create_engine('sqlite:///test.db', echo=True)
sqlite3 = create_engine('sqlite:///test.db', echo=False)
query = "select start_time, speed_sps FROM  data_1"
#data = pd.read_sql_query(query, sqlite3, coerce_float=True, parse_dates=True)
data = pd.read_sql_query(query, sqlite3, coerce_float=True)
#data["start_time"] = data["start_time"].apply(dtm)
data1 = data.set_index('start_time')
print(data1)
#source_static = ColumnDataSource(data)
source_static = ColumnDataSource(data1)
source = ColumnDataSource(data1)
#print(data['start_time'])
# source_static = ColumnDataSource(data=dict(date=data_list, t1=data_speed, t2=data_speed, t1_returns=[], t2_returns=[]))
ts1 = figure(plot_width=900, plot_height=200)
#ts1.line(x='start_time', y='speed_sps', source=source_static)
ts1.line(data['start_time'], data['speed_sps'], color='navy', alpha=0.5)
#ts1.circle('start_time', 'speed_sps', source=source, size=1, color=None, selection_color="orange")
show(ts1)

data1 вывод:
            speed_sps
start_time          
1499450876       304
1499450876       311
1499450876       308
1499450876       316
1499450876       317
...              ...
1500058896       244
1500058896       313
1500058896       312
1500058896       310
1500058896       311
1500058896       316
1500037934       317
1500033127       319
1500039017       318
1500033127       317
1500033127       313
1500052184       312
1500058896       241
[85 rows x 1 columns]

Получается фигня из вложения. Если преобразовать в дату через dtm, то даты выводится правильно в print(data1) но график открывается пустой. Было бы просто идеально если подскажите как получить график как по ссылке https://bokeh.pydata.org/en/latest/docs/user_guide/tools.html#formatting-tooltip-fields

Отредактировано keodomir (Сен. 1, 2017 00:02:46)

Прикреплённый файлы:
attachment bokeh_plot (2).png (17,6 KБ)

Офлайн

#2 Сен. 4, 2017 23:36:32

keodomir
Зарегистрирован: 2017-06-14
Сообщения: 18
Репутация: +  2  -
Профиль   Отправить e-mail  

Постройка диаграммы с помощью bokeh

Вопрос слишком сложный или не соответствует разделу?

Офлайн

#3 Сен. 5, 2017 02:30:22

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Постройка диаграммы с помощью bokeh

Попробуйте следующие изменения:

 ts1 = figure(plot_width=900, plot_height=200, x_axis_type="datetime")


 import datetime
ts1.line(data['start_time'].map(datetime.datetime.fromtimestamp), data['speed_sps'], color='navy', alpha=0.5)

Офлайн

#4 Сен. 5, 2017 21:10:56

keodomir
Зарегистрирован: 2017-06-14
Сообщения: 18
Репутация: +  2  -
Профиль   Отправить e-mail  

Постройка диаграммы с помощью bokeh

К сожалению не работает:

 TypeError: an integer is required (got type str)
'start_time' у меня строка
судя по коду вы предлагаете что-то очень похожее на:
 dtm = lambda x: datetime.fromtimestamp(int(x)).strftime('%H:%M:%S %d.%m.%y')
data = pd.read_sql_query(query, sqlite3, coerce_float=True, parse_dates=True)
data["start_time"] = data["start_time"].apply(dtm)

в чем принципиальная разница?

Отредактировано keodomir (Сен. 5, 2017 21:14:39)

Офлайн

#5 Сен. 5, 2017 21:36:11

keodomir
Зарегистрирован: 2017-06-14
Сообщения: 18
Репутация: +  2  -
Профиль   Отправить e-mail  

Постройка диаграммы с помощью bokeh

Разобрался, мешал формат, так работает:

 dtm = lambda x: datetime.fromtimestamp(int(x))
data = pd.read_sql_query(query, sqlite3, coerce_float=True, parse_dates=True)
data["start_time"] = data["start_time"].apply(dtm)

Но все равно на графике фигня. Как сделать вывод дат последовательным?

Прикреплённый файлы:
attachment bokeh_plot (3).png (17,8 KБ)

Офлайн

#6 Сен. 6, 2017 14:01:23

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Постройка диаграммы с помощью bokeh

Добавьте еще где-нибудь перед построением графика сортировку по дате:

 data = data.sort_values(by=['start_time'])

Офлайн

#7 Сен. 6, 2017 21:20:34

keodomir
Зарегистрирован: 2017-06-14
Сообщения: 18
Репутация: +  2  -
Профиль   Отправить e-mail  

Постройка диаграммы с помощью bokeh

Спасибо помогло!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version