Форум сайта python.su
2
Всем привет!
Помогите сформировать график по датам. Не могу понять как преобразовать 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)
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]
Отредактировано keodomir (Сен. 1, 2017 00:02:46)
Прикреплённый файлы:
bokeh_plot (2).png (17,6 KБ)
Офлайн
2
Вопрос слишком сложный или не соответствует разделу?
Офлайн
35
Попробуйте следующие изменения:
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)
Офлайн
2
К сожалению не работает:
TypeError: an integer is required (got type str)
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)
Офлайн
2
Разобрался, мешал формат, так работает:
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)
Прикреплённый файлы:
bokeh_plot (3).png (17,8 KБ)
Офлайн
35
Добавьте еще где-нибудь перед построением графика сортировку по дате:
data = data.sort_values(by=['start_time'])
Офлайн
2
Спасибо помогло!
Офлайн