• 十一、Unix 时间

    十一、Unix 时间

    在这个 Matplotlib 教程中,我们将介绍如何处理 unix 时间戳的转换,然后在图形中绘制日期戳。 使用 Yahoo Finance API,你会注意到,如果你使用较大的时间间隔,如1y(一年),你会得到我们一直在使用的日期戳,但如果你使用10d(10 天),反之你会得到 unix 时间的时间戳。

    Unix 时间是 1970 年 1 月 1 日以后的秒数,它是跨程序的标准化时间表示方法。 也就是说,Matplotlib 并不欢迎 unix 时间戳。 这里是你可以使用 Matplotlib 来处理 unix 时间的方式:

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. import urllib
    4. import datetime as dt
    5. import matplotlib.dates as mdates
    6. def bytespdate2num(fmt, encoding='utf-8'):
    7. strconverter = mdates.strpdate2num(fmt)
    8. def bytesconverter(b):
    9. s = b.decode(encoding)
    10. return strconverter(s)
    11. return bytesconverter
    12. def graph_data(stock):
    13. fig = plt.figure()
    14. ax1 = plt.subplot2grid((1,1), (0,0))
    15. stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10d/csv'
    16. source_code = urllib.request.urlopen(stock_price_url).read().decode()
    17. stock_data = []
    18. split_source = source_code.split('\n')
    19. for line in split_source:
    20. split_line = line.split(',')
    21. if len(split_line) == 6:
    22. if 'values' not in line and 'labels' not in line:
    23. stock_data.append(line)
    24. date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,
    25. delimiter=',',
    26. unpack=True)
    27. dateconv = np.vectorize(dt.datetime.fromtimestamp)
    28. date = dateconv(date)
    29. ## date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,
    30. ## delimiter=',',
    31. ## unpack=True,
    32. ## converters={0: bytespdate2num('%Y%m%d')})
    33. ax1.plot_date(date, closep,'-', label='Price')
    34. for label in ax1.xaxis.get_ticklabels():
    35. label.set_rotation(45)
    36. ax1.grid(True)#, color='g', linestyle='-', linewidth=5)
    37. plt.xlabel('Date')
    38. plt.ylabel('Price')
    39. plt.title('Interesting Graph\nCheck it out')
    40. plt.legend()
    41. plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)
    42. plt.show()
    43. graph_data('TSLA')

    所以在这里,我们所做的是 unix 时间的写入处理,并注释掉我们以前的代码,因为我们为之后的使用而保存它。 这里的主要区别是:

    1. dateconv = np.vectorize(dt.datetime.fromtimestamp)
    2. date = dateconv(date)

    这里,我们将时间戳转换为日期戳,然后将其转换为 Matplotlib 想要的时间。

    现在,由于某些原因,我的 unix 时间带有另一行包含 6 个元素的数据,并且它包含了术语label,因此,在我们解析数据的for循环中,我们为你再添加一个需要注意的检查:

    1. for line in split_source:
    2. split_line = line.split(',')
    3. if len(split_line) == 6:
    4. if 'values' not in line and 'labels' not in line:
    5. stock_data.append(line)

    现在你的图表应该类似:

    十一、Unix 时间 - 图1

    这里的所有扁平线条的原因是市场关闭。 有了这个短期数据,我们可以得到日内数据。 所以交易开放时有很多点,然后市场关闭时就没有了,然后又是一堆,然后又是没有。