1

時系列でデータを表示する Plotly を使用して、Python でプロットを生成しています。SQLite データベースから次のデータを使用しています (以下の日付として):

[(u'2015-12-08 00:00:00',), (u'2015-11-06 00:00:00',), (u'2015-11-06 00:00:00',), (u'2015-10-07 00:00:00',), (u'2015-10-06 00:00:00',), (u'2015-10-06 00:00:00',), (u'2015-09-17 00:00:00',), (u'2015-09-17 00:00:00',), (u'2015-09-17 00:00:00',), (u'2015-09-17 00:00:00',), (u'2015-09-16 00:00:00',), (u'2015-09-15 00:00:00',), (u'2015-09-15 00:00:00',), (u'2015-09-15 00:00:00',), (u'2015-08-30 00:00:00',), (u'2015-08-22 00:00:00',), (u'2015-08-22 00:00:00',), (u'2015-08-17 00:00:00',), (u'2015-08-09 00:00:00',), (u'2015-08-09 00:00:00',), (u'2015-08-08 00:00:00',), (u'2015-08-07 00:00:00',), (u'2015-07-28 00:00:00',), (u'2015-07-26 00:00:00',), (u'2015-07-22 00:00:00',), (u'2015-07-22 00:00:00',), (u'2015-07-22 00:00:00',), (u'2015-07-13 00:00:00',), (u'2015-07-13 00:00:00',), (u'2015-07-13 00:00:00',), (u'2015-07-13 00:00:00',), (u'2015-07-09 00:00:00',), (u'2015-07-09 00:00:00',), (u'2015-07-09 00:00:00',), (u'2015-07-09 00:00:00',), (u'2015-06-28 00:00:00',), (u'2015-06-28 00:00:00',), (u'2015-06-28 00:00:00',), (u'2015-06-16 00:00:00',), (u'2015-06-14 00:00:00',), (u'2015-06-14 00:00:00',), (u'2015-06-14 00:00:00',), (u'2015-06-04 00:00:00',), (u'2015-04-09 00:00:00',), (u'2015-03-31 00:00:00',), (u'2015-03-09 00:00:00',), (u'2015-03-09 00:00:00',), (u'2015-03-09 00:00:00',), (u'2015-03-09 00:00:00',), (u'2015-03-09 00:00:00',), (u'2015-03-09 00:00:00',)]
[(18,), (24,), (17,), (22,), (16,), (18,), (24,), (20,), (16,), (14,), (21,), (21,), (24,), (15,), (23,), (22,), (22,), (20,), (24,), (20,), (20,), (20,), (22,), (21,), (21,), (23,), (23,), (17,), (25,), (20,), (25,), (25,), (25,), (26,), (26,), (19,), (17,), (16,), (16,), (14,), (17,), (17,), (13,), (27,), (19,), (19,), (12,), (17,), (20,), (12,), (21,)]

一部のデータは重複しています (同じ日に複数のインスタンス) が、おそらくこれは近似直線には問題になりません。私のコードは次のようになります。

import sqlite3
import plotly.plotly as py
from plotly.graph_objs import *
import numpy as np

db = sqlite3.connect("Applications.db")
cursor = db.cursor()

cursor.execute('SELECT date FROM applications ORDER BY date(date) DESC')
dates = cursor.fetchall()
cursor.execute('SELECT lines FROM applications ORDER BY date(date) DESC')
lines = cursor.fetchall()

trace0 = Scatter(
    x=dates,
    y=lines,
    name='Amount of lines',
    mode='markers'
)
trace1 = Scatter(
    x=dates,
    y=lines,
    name='Fit',
    mode='markers'
)
data = Data([trace0, trace1])

py.iplot(data, filename = 'date-axes')

このデータに基づいてtrace1を適合トレンドラインにするにはどうすればよいですか? つまり、データの展開を示す滑らかな表現です。

4

1 に答える 1

5

Per Plotly のサポート: 「残念ながら、現時点では適合は API を通じて公開されていません。適合 GUI を IPython インターフェイスに追加し、最終的には API に追加する作業を進めています」(2015 年 9 月 25 日)。

これを行う最も簡単な方法は、Matplotlib、Numbpy、および SciPy を使用することでした。データを少しクリーンアップすると、次のコードが機能しました。

import plotly.plotly as py
import plotly.tools as tls
from plotly.graph_objs import *
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as dates

def line(x, a, b):
    return a * x + b

popt, pcov = curve_fit(line, trend_dates.ravel(), trend_lines.ravel())

fig1 = plt.figure(figsize=(8,6))
plt.plot_date(new_x, trend_lines, 'o', label='Lines')
z = np.polyfit(new_x, trend_lines, 1)
p = np.poly1d(z)
plt.plot(new_x, p(new_x), '-', label='Fit')
plt.title('Lines per day')
fig = tls.mpl_to_plotly(fig1)
fig['layout'].update(showlegend=True)
fig.strip_style()
py.iplot(fig)

new_x基本的に、Matplotlib が期待する日付とtrend_lines、質問のような通常のデータはどこにありますか。前述のかなりの量のデータ クリーニングとライブラリのインポートが先行するため、これは完全な例ではありませんが、Plotly の図を出力として取得し、Matplotlib、Numbpy、および SciPy を経由する方法を示しています。

于 2015-09-26T01:39:17.973 に答える