In [4]:
import math
from datetime import datetime, date
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import numpy as np
def get_num_date_for_value(pol, dest):
return int(math.ceil(max(np.roots(pol - dest))))
def print_dest(pol, dest):
num_dest_date = get_num_date_for_value(pol, dest)
dest_date = mdates.num2date(num_dest_date).date()
print(dest_date, pol(num_dest_date))
plt.axvline(x=dest_date)
def parse_date(d):
return datetime.strptime(d, '%Y/%m/%d')
def main():
progress_journal = [
['2017/5/6', 4075],
['2017/5/7', 4199],
['2017/5/8', 4294],
['2017/5/9', 4383],
['2017/5/10', 4460],
['2017/5/11', 4533],
['2017/5/12', 4592],
['2017/5/13', 4664],
['2017/5/14', 4719],
['2017/5/17', 4769],
['2017/5/19', 4850],
]
dates = [parse_date(row[0]) for row in progress_journal]
x = mdates.date2num(dates)
y = [row[1] for row in progress_journal]
fn = np.poly1d(np.polyfit(x, y, 1))
plt.plot(mdates.num2date(x), y, '.')
end_date = date(2017, 7, 31)
x2 = np.linspace(x.min(), mdates.date2num(end_date), 100)
plt.plot(mdates.num2date(x2), fn(x2), label='Now')
plt.ylabel('Projection')
print("Final goal: 11021")
print("As of " + str(datetime.now().date()) + ": ")
print_dest(fn, 5000)
print_dest(fn, 8000)
print_dest(fn, 11021)
plt.show()
if __name__ == "__main__":
main()
In [ ]: