第七章 从文件加载数据

很多时候,我们想要绘制文件中的数据。 有许多类型的文件,以及许多方法,你可以使用它们从文件中提取数据来图形化。 在这里,我们将展示几种方法。 首先,我们将使用内置的csv模块加载CSV文件,然后我们将展示如何使用 NumPy(第三方模块)加载文件。

import matplotlib.pyplot as pltimport csvx = []y = []with open('example.txt','r') as csvfile:    plots = csv.reader(csvfile, delimiter=',')    for row in plots:        x.append(int(row[0]))        y.append(int(row[1]))plt.plot(x,y, label='Loaded from file!')plt.xlabel('x')plt.ylabel('y')plt.title('Interesting GraphCheck it out')plt.legend()plt.show()123456789101112131415161718

这里,我们打开样例文件,包含以下数据:

1,52,33,44,75,46,37,58,79,410,412345678910

接下来,我们使用csv模块读取数据。 csv读取器自动按行分割文件,然后使用我们选择的分隔符分割文件中的数据。 在我们的例子中,这是一个逗号。 注意:csv模块和csv reader不需要文件在字面上是一个.csv文件。 它可以是任何具有分隔数据的简单的文本文件。

一旦我们这样做了,我们将索引为 0 的元素存储到x列表,将索引为 1 的元素存储到y列表中。 之后,我们都设置好了,准备绘图,然后显示数据。

虽然使用 CSV 模块是完全正常的,但使用 NumPy 模块来加载我们的文件和数据,可能对我们更有意义。 如果你没有 NumPy,你需要按下面的步骤来获取它。 为了了解安装模块的更多信息,请参阅 pip 教程。 大多数人应该都能打开命令行,并执行pip install numpy。

如果不能,请参阅链接中的教程。

一旦你安装了 NumPy,你可以编写如下代码:

import matplotlib.pyplot as pltimport numpy as npx, y = np.loadtxt('example.txt', delimiter=',', unpack=True)plt.plot(x,y, label='Loaded from file!')plt.xlabel('x')plt.ylabel('y')plt.title('Interesting GraphCheck it out')plt.legend()plt.show()1234567891011

结果应该是相同的图表。 稍后,当我们加载数据时,我们可以利用 NumPy 为我们做一些更多的工作,但这是教程未来的内容。 就像csv模块不需要一个特地的.csv一样,loadtxt函数不要求文件是一个.txt文件,它可以是一个.csv,它甚至可以是一个 python 列表对象。

第八章 从网络加载数据

除了从文件加载数据,另一个流行的数据源是互联网。 我们可以用各种各样的方式从互联网加载数据,但对我们来说,我们只是简单地读取网站的源代码,然后通过简单的拆分来分离数据。

import matplotlib.pyplot as pltimport numpy as npimport urllibimport matplotlib.dates as mdatesdef graph_data(stock):    stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv'    source_code = urllib.request.urlopen(stock_price_url).read().decode()    stock_data = []    split_source = source_code.split('')    for line in split_source:        split_line = line.split(',')        if len(split_line) == 6:            if 'values' not in line:                stock_data.append(line)1234567891011121314151617181920

这里有很多步骤。首先,我们看到import。 pyplot像往常一样导入,然后导入了numpy,然后是用于访问互联网的urllib,然后导入了matplotlib.dates作为mdates,它对于将日期戳转换为 matplotlib 可以理解的日期很有用。

接下来,我们开始构建我们的graph_data函数。在这里,我们首先定义包含股票数据的网址。之后,我们写一些urllib代码来访问该 URL,然后使用.read读取源代码,之后我们继续解码该数据。如果你使用 Python 2,则不必使用decode。

然后,我们定义一个空列表,这是我们将要放置股票数据的地方,我们也开始使用split_source变量拆分数据,以换行符拆分。

现在,如果你去看源代码,用stock替换 URL 中的+stock+,像 AAPL 那样,你可以看到大多数页面数据确实是股票定价信息,但有一些头信息我们需要过滤掉。为此,我们使用一些基本的过滤,检查它们来确保每行有 6 个数据点,然后确保术语values不在行中。

现在,我们已经解析了数据,并做好了准备。我们将使用 NumPy:

date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,                                                      delimiter=',',                                                      unpack=True,                                                      # %Y = full year. 2015                                                      # %y = partial year 15                                                      # %m = number month                                                      # %d = number day                                                      # %H = hours                                                      # %M = minutes                                                      # %S = seconds                                                      # 12-06-2014                                                      # %m-%d-%Y                                                      converters={0: bytespdate2num('%Y%m%d')})12345678910111213

我们在这里所做的是,使用numpy的loadtxt函数,并将这六个元素解构到六个变量。 这里的第一个参数是stock_data,这是我们加载的数据。 然后,我们指定delimiter(这里是逗号),然后我们指定我们确实想要在这里解包变量,不是一个变量,而是我们定义的这组变量。 最后,我们使用可选的converters参数来指定我们要转换的元素(0),以及我们打算要怎么做。 我们传递一个名为bytespdate2num的函数,它还不存在,但我们下面会编写它。

第九章 时间戳的转换

本教程的重点是将来自 Yahoo finance API 的日期转换为 Matplotlib 可理解的日期。 为了实现它,我们要写一个新的函数,bytespdate2num。

def bytespdate2num(fmt, encoding='utf-8'):    strconverter = mdates.strpdate2num(fmt)    def bytesconverter(b):        s = b.decode(encoding)        return strconverter(s)    return bytesconverter123456

此函数接受数据,基于编码来解码数据,然后返回它。

将此应用于我们的程序的其余部分:

import matplotlib.pyplot as pltimport numpy as npimport urllibimport matplotlib.dates as mdatesdef bytespdate2num(fmt, encoding='utf-8'):    strconverter = mdates.strpdate2num(fmt)    def bytesconverter(b):        s = b.decode(encoding)        return strconverter(s)    return bytesconverterdef graph_data(stock):    stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv'    source_code = urllib.request.urlopen(stock_price_url).read().decode()    stock_data = []    split_source = source_code.split('')    for line in split_source:        split_line = line.split(',')        if len(split_line) == 6:            if 'values' not in line and 'labels' not in line:                stock_data.append(line)    date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,                                                          delimiter=',',                                                          unpack=True,                                                          # %Y = full year. 2015                                                          # %y = partial year 15                                                          # %m = number month                                                          # %d = number day                                                          # %H = hours                                                          # %M = minutes                                                          # %S = seconds                                                          # 12-06-2014                                                          # %m-%d-%Y                                                          converters={0: bytespdate2num('%Y%m%d')})    plt.plot_date(date, closep,'-', label='Price')    plt.xlabel('Date')    plt.ylabel('Price')    plt.title('Interesting GraphCheck it out')    plt.legend()    plt.show()graph_data('TSLA')12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

如果你绘制 TSLA,结果图应该看起来像这样:

python loadtxt_Python 数据科学入门2:Matplotlib相关推荐

  1. 使用Python进行数据科学入门

    数据科学是计算领域一个令人兴奋的新领域,它围绕分析,可视化,关联和解释我们的计算机收集的有关世界的无限信息而建立. 当然,称其为"新"领域有点不屑一顾,因为该学科是统计,数据分析和 ...

  2. 【深度之眼Python基础+数据科学入门训练营】第八章 文件、异常和模块

    第八章 文件.异常和模块 实际应用中,我们绝大多数的数据都是通过文件的交互完成的 8.1 文件的读写 8.1.1 文件的打开 文件的打开通用格式 with open("文件路径", ...

  3. Python基础+数据科学入门(七)

    声明:该博客参考深度之眼的视频课程,如有侵权请联系小编删除博文,谢谢! 若总结有所失误,还请见谅,并欢迎及时指出. 文件.异常和模块 1.1 文件的读写 1.1.1 文件的打开 文件的打开通用格式 w ...

  4. 【深度之眼Python基础+数据科学入门训练营】第四章 组合数据类型

    第四章 组合数据类型 4.1 列表 4.1.1 列表的表达 序列类型:内部元素有位置关系,能通过位置序号访问其中元素 列表是一个可以使用多种类型元素,支持元素的增.删.查.改操作的序列类型 ls = ...

  5. Python基础+数据科学入门(三)组合数据类型

    声明:该博客参考深度之眼的视频课程,如有侵权请联系小编删除博文,谢谢! 若总结有所失误,还请见谅,并欢迎及时指出. 组合数据类型 1.1 列表 1.1.1 列表的表达 列表类型:内部元素有位置关系,能 ...

  6. Python基础+数据科学入门(六)类

    声明:该博客参考深度之眼的视频课程,如有侵权请联系小编删除博文,谢谢! 若总结有所失误,还请见谅,并欢迎及时指出. 类-面向对象编程 #创建类 class Cat(): #初始化属性def __ini ...

  7. Python 数据科学入门

    http://python.jobbole.com/85394/ Python 在数据科学领域越来越流行了.它的流行不无道理. Python 容易学,有超强数据科学库,并且和 Hadoop 以及 Sp ...

  8. 有前途的人工智能大数据分析相关职业:Python数据科学入门之路

    2019独角兽企业重金招聘Python工程师标准>>> 为什么学习Python数据科学? Python是数据科学职业所需的宝贵技能之一.Python是数据科学的首选编程语言. 201 ...

  9. Python 数据科学入门教程:机器学习:回归

    Python 数据科学入门教程:机器学习:回归 原文:Regression - Intro and Data 译者:飞龙 协议:CC BY-NC-SA 4.0 引言和数据 欢迎阅读 Python 机器 ...

最新文章

  1. 一个Git项目多个仓库
  2. 251f与ips屏显示器对比_同样是240Hz高刷新率 有了VA屏你还会选择TN?
  3. Serializable And Parcelable
  4. Mvc全局过滤器与Action排除
  5. python财务预算分析_财码Python管理会计小实验—营运管理之多维度盈利能力分析...
  6. maven web项目中的web.xml的版本如何更改
  7. js基础语法(01)-JS中+号的三种含义
  8. 关于寻路算法的一些思考(3):A*算法的实现
  9. oracle日常函数应用,oracle日常 常用函数与脚本
  10. 优秀程序员必备七要件
  11. java-----抽象类与接口
  12. javaWeb发展历史
  13. react 使用iconfont 图标
  14. 计算机病毒级防范措施总结,计算机病毒及防范措施
  15. Beta 多样性排序分析方法与比较
  16. Android的基站、WIFI、GPS定位三点定位源码下载
  17. 从零学习Nginx配置文件,呕心沥血w字长文
  18. idea中开启多个线程运行多个项目
  19. GL音乐播放器1.0.0版-- 总结帖
  20. DevExpress 设置DateEdit显示年月

热门文章

  1. 电大计算机网络网考,电大计算机网络(本)学习周期01任务A_0009答案
  2. java json utf-8_Java 编码 和JSON
  3. bulter机器人_科普!九款使用率最高的物流机器人大盘点!
  4. Concept3D推出交互式3D地图平台
  5. Exynos4412 裸机开发—— 流水灯
  6. uni-app微信小程序uni.navigateTo跳转无效问题;记录一次uni-app页面跳转无效,来回跳转问题;wx.navigateTo ,跳转超过10次怎么点不动的解决办法。
  7. 依赖包报错Invalid options object. Less Loader has been initialized using an options object that does not
  8. Linux驱动如何在不同版本上快速迭代升级
  9. [react] react中的setState缺点是什么呢?
  10. 前端学习(3115):react-hello-初始化state