股票价格图

  1. 采用pandas_datareader包和获取Yahoo数据源

该书中说
采用matplotlib.mlab和matplotlib.finance的子包可以获取股票数据,但是matplotlib.finance已经用不了了。所以课本上的代码运行不通了。
所以我们换成pandas_datareader包获取Yahoo数据
旧版Pandas是通过pandas.io.data获取网络数据源,新版Pandas已将该子模块独立成了pandas_datareader包,须独立安装.(摘自老师给的某本书的截图,不知道叫什么)

目前可访问的网络数据服务商主要包括:Yahoo Finance(雅虎金融),Google Finance(谷歌金融)、Enigma(Enigma公共数据搜索的提供商)、World Bank(世界银行)、OECD(经合组织)、Eurostat(欧盟统计局)、Nasdaq Trader Symbol Definitions(纳斯达克)等。

打开命令行(cmd)窗口,输入

pip install pandas_datareader

获取数据股票数据的方法

 r= webdata.get_data_yahoo(ticker,startdate,enddate)print(r.head())

光写这个实现的代码还是会报错,网上看到很多人用get_data_yahoo()方法都读取不出数据,因为雅虎在中国受到限制,程序会运行很久没有结果出来,还会报超时的错误,如下

runfile('H:/python/股票.py', wdir='H:/python')
Traceback (most recent call last):timeout: The read operation timed outFile "C:\Users\a\anaconda3\lib\contextlib.py", line 131, in __exit__self.gen.throw(type, value, traceback)File "C:\Users\a\AppData\Roaming\Python\Python38\site-packages\urllib3\response.py", line 443, in _error_catcherraise ReadTimeoutError(self._pool, None, "Read timed out.")ReadTimeoutError: HTTPSConnectionPool(host='finance.yahoo.com', port=443): Read timed out.During handling of the above exception, another exception occurred:Traceback (most recent call last):File "C:\Users\a\AppData\Roaming\Python\Python38\site-packages\requests\models.py", line 760, in generateraise ConnectionError(e)ConnectionError: HTTPSConnectionPool(host='finance.yahoo.com', port=443): Read timed out.Figures now render in the Plots pane by default. To make them also appear inline in the Console, uncheck "Mute Inline Plotting" under the Plots pane options menu.

别慌,解决办法在这里,看到网上很多人说再导入 fix_yahoo_finance 包,这个包里提供的pdr_overrider()可以修复不能读取的问题

import fix_yahoo_finance as yf

但我试过了,还是不行,搜了好多文章,终于在CSDN上找到了解决办法
原文:在CSDN上找到的解决办法
方法就是 fix_yahoo_finance包改名了,改成了yfinance包,所以只要导入yfinance包,用这个包里的pdr_override() 方法即可

import pandas_datareader.data as webdata
import yfinance as yf
yf.pdr_override()
r= webdata.get_data_yahoo(ticker,startdate,enddate)
#ticker表示股票代码,格式如下图,statedate是开始日期,必须为datatime格式,endate是结束日期


这样就可以解决get_data_yahoo获取股票数据超时的问题啦
接下来观察r.head()函数输出的前五条记录,可以知道get_data_yahoo()方法返回的已经是数据框的格式了,所以我没有做把他存入csv,再读取csv的步骤,而且课本上的
m=mlab.csv2rec(fh)这个方法也用不了了,matplotlib.mlab包中已经没有这个函数了。

  1. 分析数据集r

    观察可知,首先这是个dataframe,所以课本上
prices=r.adj_close
ax.plot(r.date, prices, ,color=fillcolor,lw=2,label=ticker)

要改成

    prices = r['Adj Close']###plot the price and volume dataax.plot(r.index,prices,color=fillcolor,lw=2,label=ticker)
  1. 最后一个要改的地方是
    #set the labels rotation and alignmentfor label in ax.get_xtickabels():    #get_xtickabels()也是用不了了,所以我直接注释了#To display date label slanting at 30 degreeeslabel.set_rotation(30)label.set_horizontalalignment('right')

因为get_xtickabels()也是用不了了,但我还没找到解决的方式,我直接注释掉了,如果有会的朋友可以评论区教我一下,谢谢~~
这是我的第一篇博客,写的不太好,请见谅,希望对你们有帮助(如有侵权,请联系删除)

完整代码实现

import datetime
import numpy as np
import matplotlib.dates as mdates
import pandas_datareader.data as webdata
import pandas as pd
import mplfinance as mpf
import matplotlib.pyplot as plt
import matplotlib
import yfinance as yf
yf.pdr_override()      #因为雅虎在中国受限制的原因,需要引入另一个模块,“yfinance”startdate = datetime.datetime(2014,4,12)
enddate = datetime.datetime(2015,5,12)
#today = enddate = datetime.date.today()
plt.rcParams['font.sans-serif'] = ['SimHei']  #允许中文
plt.rcParams['axes.unicode_minus'] = False   #允许有坐标轴中的正负号
plt.rc('axes',grid=True)
plt.rc('grid',color='0.75',linestyle='-',linewidth=0.5)
rect = [0.4,0.5,0.8,0.5]fig =plt.figure(facecolor='white',figsize=(12,11))#axescolor = '#f6f6f6' #the axes background color
ax = fig.add_axes(rect,facecolor='#f6f6f6')  #left, bottom, width, height =[0.4,0.5,0.8,0.5]
ax.set_ylim(10,800)def plotTicker(ticker,startdate,enddate,fillcolor):r= webdata.get_data_yahoo(ticker,startdate,enddate)print(r.head())mpf.plot(r, type='candle', mav=(2, 5, 10), volume=True)###plot the relative strength indicator###adjusted close removes the impacts of splits and dividendsprices = r['Adj Close']###plot the price and volume dataax.plot(r.index,prices,color=fillcolor,lw=2,label=ticker)ax.legend(loc='upper right',shadow=True,fancybox=True) #shadow: 是否为图例边框添加阴影,fancybox: 是否将图例框的边角设为圆形'''#set the labels rotation and alignmentfor label in ax.get_xtickabels():    #get_xtickabels()也是用不了了,所以我直接注释了#To display date label slanting at 30 degreeeslabel.set_rotation(30)label.set_horizontalalignment('right')'''  ax.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')#plot the tickers now
plotTicker('BIDU',startdate,enddate,'red')
plotTicker('GOOG',startdate,enddate,'#1066ee')
plotTicker('AMZN',startdate,enddate,'#506612')plt.show()

绘制股票价格图 《Python数据可视化》的p131 python爬取雅虎财经股票交易数据相关推荐

  1. python 柱状图上显示字体_Python爬取百部电影数据,我发现了这个惊人真相!

    2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%:国产电影总票房411.75亿元,同比增长8.65%,市场占比 ...

  2. python 百度百科 爬虫_爬虫爬取百度百科数据

    以前段时间<青春有你2>为例,我们使用Python来爬取百度百科中<青春有你2>所有参赛选手的信息. 什么是爬虫? 为了获取大量的互联网数据,我们自然想到使用爬虫代替我们完成这 ...

  3. python爬虫表格table_Python基于pandas爬取网页表格数据

    以网页表格为例:https://www.kuaidaili.com/free/ 该网站数据存在table标签,直接用requests,需要结合bs4解析正则/xpath/lxml等,没有几行代码是搞不 ...

  4. python+selenium爬虫,使用selenium爬取热门微博数据

    python爬虫使用selenium爬取热门微博数据 完整代码 from selenium.webdriver import Chrome import time import csvf = open ...

  5. python 实时数据推送_python scrapy 爬取金十数据并自动推送到微信

    一.背景 因业务需要获取风险经济事件并采取应对措施,但因为种种原因又疏忽于每天去查看财经日历,于是通过爬取金十数据网站并自动推送到微信查看. 二.目标实现 image 三.环境与工具 1.pychar ...

  6. Python爬虫:基于Scrapy的爬取失踪人口数据小爬虫

    Scrapy简介: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 ...

  7. python爬虫与数据可视化(一)—— 爬取猫眼电影(涉及爬虫反破解)

    又是新的一年,让我们一起来看一下刚刚过去的2018留下了哪些经典影片吧! 一.获取电影详情页链接 进入猫眼官网,按图中的顺序点击,得到2018年按评分排序的影片进入猫眼官网,按图中的顺序点击,得到20 ...

  8. python 爬虫可视化编程_Python爬虫爬取博客实现可视化过程解析

    源码: from pyecharts import Bar import re import requests num=0 b=[] for i in range(1,11): link='https ...

  9. python爬取京东数据加载失败_Python爬取京东商品数据

    对京东某一商品信息页面的HTML代码进行分析,可以发现它的图书产品信息页面都含有这样一段代码(不同类的商品页面有些不同): window.pageConfig={compatible:true,sea ...

最新文章

  1. 特征工程在实际业务中的应用!
  2. 小白该如何学习Linux操作系统(2)
  3. UITableView——reloadData与reloadSection性能比较
  4. mysql find()方法_Mysql find_in_set()函数使用方法
  5. Linux命令之 chsh -- 用来更换登录系统时使用的shell
  6. 警告warningC4018有符号/无符号不匹配
  7. 风讯CMS常见问题锦集
  8. Android 开源控件
  9. [含论文+源码等]基于java+ssh+mysql实现的共享自行车租赁|出租管理系统
  10. 在mac上怎么把png转换成jpg
  11. 数据分析面试手册《指标篇》
  12. tagslam框架:LiDARTag和AprilTags,只使用特定标签的雷达/相机
  13. vue项目实现大屏展示 自适应问题
  14. 最新n1盒子openwr固件
  15. iOS15 切换上架App图标的最新方案
  16. 6种常见的三维重建方式
  17. 斧子演示(AxeSlide):新时期,新用法
  18. C#中关于“集合已被修改,可能无法操作枚举类型”报错的解决方法
  19. #地图故事#教程2:如何制作分级颜色地图
  20. 把搜狗输入法词库导入Google拼音输入法

热门文章

  1. AVFoundation 播放器实例
  2. macOS Final Cut Pro X 导入视频、剪切视频
  3. 安卓如何安装linux的iso文件系统,如何使用EasyBCD 2.0引导ISO文件安装系统
  4. 结构化分析的基本概念
  5. 星巴克后麦当劳推咖啡外送服务,咖啡新零售进入深水区
  6. 数字化工业4.0柔性智能制造生产线实训系统
  7. 考研:研究生考试(五天学完)之【政治考试】之研究生学霸重点知识点总结之考试内容各科占比及其知识结构重点(马概、毛中特、史纲、思修)
  8. 在html中 标记td,HTML td标记
  9. 密码设置之古诗九键后缀法
  10. 神马笔记和成语词典整理