背景
今日我的Python心路历程是 股票实战之数据可视化曲线)
方案
首先,通过公司股票代码名称获取数据并存储在csv文件中,数据来源于雅虎金融。
#!/usr/bin/python
# coding=UTF-8
# 基本信息
import os
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
# 股票数据读取
import pandas_datareader as pdr
# 可视化
import matplotlib.pyplot as plt
#import seaborn as sns
#%matplotlib inline
# time
from datetime import datetime
if __name__ == '__main__':
main()
成功写入csv效果如下图所示:
最为关键的是,这样获取的数据中是以带Adj Close值的,但从通信打下载的日线数据中没有该值,为此而苦恼了很久呢。
其次,一些基本操作。
通过pandas读取csv数据。
效果如下图所示:
提取Date和Adj Close,并图形化显示。
#提取Date和Adj Close
top_tech_dfAdj = pd.merge(top_tech_df['Date'], top_tech_df['Adj Close'], how='outer', left_index=True, right_index=True)
print top_tech_dfAdj.head()
#画全部
top_tech_dfAdj.plot()
plt.show()
打印结果如下图所示:
图形化结果如下图所示:
但奇怪的是横轴没有显示日期。
经过优化后,更新部分的代码为:
#初始化x、y轴的list取值
# X坐标,将str类型的数据转换为datetime.date类型的数据,作为x坐标(直接取top_tech_dfAdj['Date']在内部处理是无法识别,要求float类型)
xs = [datetime.strptime(d, '%Y-%m-%d').date() for d in top_tech_dfAdj['Date']]
ys = top_tech_dfAdj['Adj Close']
#图表属性,坐标轴设置如下
plt.title(comnames + " Adj Close") #中文就会有编译错误
plt.xlabel("Date")
plt.ylabel("Adj Close")
ax = plt.gca() # 表明设置图片的各个轴,plt.gcf()表示图片本身
ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) # 横坐标标签显示的日期格式;注意,如果不加语句plt.gca().xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')),则横坐标只显示年份
ax.axes.set_xticks(xs)
plt.plot(xs, ys)#, 'o-') # o-会现实圆点,不加参数值默认是曲线
plt.xticks(pd.date_range('2020-01-01', '2020-12-30', freq='10d')) #横坐标日期范围及间隔
plt.yticks(range(0, 20, 1)) #设置纵坐标,使用range()函数设置起始、结束范围及间隔步长
plt.gcf().autofmt_xdate() # 自动旋转日期标记
plt.tight_layout() #自动调整标签大小
#显示
plt.show()
日期出来了,但是密度和范围生效方式不理想,如下图所示:
显示所有日期,且间隔90天的代码为:
plt.xticks(pd.date_range('2015-01-01', '2020-12-30', freq='90d')) #横坐标日期范围及间隔
效果
效果图为:
如何才能做到x轴整个区间显示指定范围的呢?思考良久,找了很多资料也没有说法。暂时到这里吧,日后真的用到了再说,先假装这个是伪需求吧!
plt可视化编译报错的解决办法。
RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework.
在报错的py文件中加入如下代码:
#Mac OS X:Python is not installed as a framework解决方案
**import matplotlib
matplotlib.use('TkAgg')**
添加位置见下图所示:
1、我的Python心路历程 第十期 (10.4 股票实战之可视化figure篇)
2、【数据分析可视化】股票市场分析实战之风险分析
3、使用Python的pandas-datareader包下载雅虎财经股价数据