前几篇都是手动录入或随机函数产生的数据。实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化。

比如之前python基础(12)介绍打开文件的方式,可直接读取文件中的数据,扩大了我们的数据来源。下面,将展示几种方法。

一、我们将使用内置的 csv 模块加载CSV文件

CSV文件是一种特殊的文本文件,文件中的数据以逗号作为分隔符,很适合进行数据的解析。先用excle建立如下表格和数据,另存为csv格式文件,放到代码目录下。

包含在Python标准库中自带CSV 模块,我们只需要import进来就能使用。比如我们需要将上面的CSV文件都打印出来,代码 如下:

import csv  #import csv 用来导入csv模块

filename = 'E:\WorkSpace\python\coding\score.csv'  #文件保存的绝对路径
with open(filename) as file_csv: #是不是忘记了如何打开文件?打开文件,并将结果文件对象存储在file_csv中
reader = csv.reader(file_csv) #直接调读取 用csv.read()读取文件内容
for row in reader: # 用for循环打印每一行
print(row)

运行结果如下:

['Name', 'Grade', 'Class', 'Age', 'mathscore', 'Englishscore']
['Lucy', '7', '2', '14', '95', '86']
['bush', '8', '1', '15', '80', '75']
['lily', '7', '3', '14', '93', '95']
['Jack', '8', '2', '14', '87', '84']
['Mary', '9', '1', '15', '85', '86']
['philip', '7', '3', '14', '90', '92']
['Liming', '9', '2', '16', '99', '87']

1、打印文件头及其位置

读入文件,是为了获取其中的数据,需要将相关信息进行分离,先看看如何读出头即文件的第一行, next()返回文件中的下一行。

import csv  #import csv 用来导入csv模块

filename = 'E:\WorkSpace\python\coding\score.csv'  #文件保存的绝对路径
with open(filename) as file_csv: #是不是忘记了如何打开文件?打开文件,并将结果文件对象存储在file_csv中
reader = csv.reader(file_csv) #直接调读取 用csv.read()读取文件内容
header_row = next(reader) #模块csv包含函数 next() ,调用它并将阅读器对象传递给它时,它将返回文件中的下一行。
#调用了next()一次,因此得到的是文件的第一行,其中包含文件头

#for row in reader: # 用for循环打印每一行
       # print(row)

    for index, column_header in enumerate(header_row):  #对列表调用了enumerate()来获取每个元素的索引及其值
print(index, column_header)

运行后的结果如下所示:

0 Name
1 Grade
2 Class
3 Age
4 mathscore
5 Englishscore

 提取其中索引,即name的索引为0,Grade的索引为1,知道了索引便可以读取其中的任何数据,比如我们要打印出mathscore,索引为4,于是代码如下:

    scores =[] 定义一个空的list
for row in reader:
scores.append(int(row[4])) #读取的文件,默认为字符串,用int()转换为数字。
print(scores)

运行结果:

[95, 80, 93, 87, 85, 90, 99]

 接下来,制作图表展示一下,先把mathscore和englishscore分数做个柱状对比。代码如下:

import matplotlib.pyplot as plt
import csv #import csv 用来导入csv模块 filename = 'E:\WorkSpace\python\coding\score.csv' #文件保存的绝对路径
with open(filename) as file_csv: #是不是忘记了如何打开文件?打开文件,并将结果文件对象存储在file_csv中
reader = csv.reader(file_csv) #直接调读取 用csv.read()读取文件内容
header_row = next(reader) #模块csv包含函数 next() ,调用它并将阅读器对象传递给它时,它将返回文件中的下一行。
#调用了 next() 一次,因此得到的是文件的第一行,其中包含文件头
mathscores =[] #定义两个列表
englishscores=[]
for row in reader:
mathscores.append(int(row[4])) #读取索引为4的数据,默认为字符串,用int()转换为数字。
englishscores.append(int(row[5])) #读取索引为5的数据,用int()转换为数字。 plt.bar([1,3,5,7,9,11,13],mathscores,label='math',color='#FF2204')
plt.bar([2,4,6,8,10,12,14],englishscores, label='englis', color='g')
plt.legend()
plt.title('scores')
plt.show()

已将那些打印相关代码删除。看运行结果:

接下来,我们读取文件 ,并根据文件中的时间来绘制图表

新建一个年份的数据(真的是胡编乱造的数据),第一列是年份,第二列每年毕业的人数,第三列是每年申请人数,如图所示:

要求:

1,按年份分别显示出每年两者的人数,并用不同的颜色表示;

2、两者间也用其他颜色进行填充。

完成代码如下:

import matplotlib.pyplot as plt
import csv #import csv 用来导入csv模块
from datetime import datetime #引入时间相关模块 filename = 'E:\WorkSpace\python\coding\graduatesNumbers.csv' #文件保存的绝对路径
with open(filename) as file_csv: #是不是忘记了如何打开文件?打开文件,并将结果文件对象存储在file_csv中
reader = csv.reader(file_csv) #直接调读取 用csv.read()读取文件内容
header_row = next(reader)
dates=[]
numbers=[]
application_numbers=[]
for row in reader:
current_date = datetime.strptime(row[0], "%Y/%m/%d") #年份,strptime()日期格式转化为字符串格式的函数
dates.append(current_date)
numbers.append(int(row[1])) #读取索引为1的数据,默认为字符串,用int()转换为数字,即Numbers of graduates 。
application_numbers.append(int(row[2])) #读取索引为2的数据,即Number of applicants plt.plot(dates,numbers,label='Numbers of graduate', c='red') #显示第一条线
plt.plot(dates,application_numbers,label='Number of applicant', c='green') #显示第二条线application_numbers折线
plt.fill_between(dates,numbers, application_numbers, facecolor='blue', alpha=0.5) #在两线之间填充颜色 alpha透明度 plt.title("The numbers of graduate",fontsize=24)
plt.xlabel('Years', fontsize=16)
plt.ylabel("The numbers", fontsize=16)
plt.legend()
plt.show()

实际运行结果如下:

 

python数据可视化-matplotlib入门(6)-从文件中加载数据的更多相关文章

  1. 机器学习:从sklearn中加载数据

    一.sklearn模块 sklearn模块下有很多子模块,常用的数据集在:sklearn.datasets模块下: 通过数据集中DESCR来查看数据集的文档: 从datasets中加载数据: impo ...

  2. ArcGIS Engine中加载数据

    ArcGIS Engine中加载数据 http://blog.csdn.net/gisstar/article/details/4206822   分类: AE开发积累2009-05-21 16:49 ...

  3. ML.NET Cookbook --- 1.如何从文本文件中加载数据?

    使用ML.NET中的TextLoader扩展方法从文本文件中加载数据.你需要知道在文本文件中数据列在那里,它们的类型是什么,在文本文件中什么位置可以找到它们. 请注意:对于ML.NET只读取文件的某些 ...

  4. Flexigrid从对象中加载数据

    (有问题,在找…………) Flexigrid是用来动态加载数据的一种比较好(老)的Jquery表插件,然后有些时候,我们需要其从本地或者jQuery对象中加载数据,比如有这么个需求,页面显示中有两个表 ...

  5. C#动态编译代码,执行一个代码片段,或者从指定文件中加载某个接口的实现类

    在项目进行中有时候会需要配置一些复杂的表达式,在程序运行的时候执行表达式,根据结果执行相应的操作,简单写了一个类Expression,利用.net的动态编译技术实现,代码如下: public clas ...

  6. Django_在单独文件中加载Django环境临时调试

    创建Django环境后,每次在打印调试都需要基于项目有些麻烦. 如何在项目外的文件中加载项目环境进行便携的调试? 创建一个新的 orm.py import os if __name__ == '__m ...

  7. DirectUI界面编程(三)从XML文件中加载界面

    Duilib支持xml界面布局,使得界面设计与逻辑处理相分离,本节介绍如何从xml文件中加载界面元素. 我们需要以下几个步骤: 创建并初始化CPaintManagerUI对象. 创建CDialogBu ...

  8. Direct2D开发:MFC下从资源文件中加载位图

    转载请注明出处:http://www.cnblogs.com/ye-ming 0X01 概述: 相对于GDI处理界面,Direct2D有得天独厚的优势,下图就是Direct2D与GDI的效果对比,wi ...

  9. python数据可视化-matplotlib入门(7)-从网络加载数据及数据可视化的小总结

    除了从文件加载数据,另一个数据源是互联网,互联网每天产生各种不同的数据,可以用各种各样的方式从互联网加载数据. 一.了解 Web API Web 应用编程接口(API)自动请求网站的特定信息,再对这些 ...

随机推荐

  1. 什么是B树(B-树)?

    写在开头:B-树,就是B树.因B树的英文名称为B-tree ,B-树因此而来,有人会误以为B-树是一种树,而B树又是另外一种树.实际上,B-tree就是指的B树. 而且B-树不可以读成B减树... 一 ...

  2. 如何在 Spring Boot 中禁用 Actuator 端点安全性?

    默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们.安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的. ...

  3. SpringBoot 日志

    springboot日志简介 SpringBoot使用的日志是sl4j + logback,sl4j是抽象层,不做具体的实现.实现主要是logback来做.SpringBoot同时也整合了其他框架的日 ...

  4. JavaScript的访问器

    一.访问器属性: 1.Configurable:表示能否通过delete删除属性,从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性.对于直接在对象上定义的属性,这个特性的默认值为tr ...

  5. Redis 集群方案什么情况下会导致整个集群不可用?

    有 A,B,C 三个节点的集群,在没有复制模型的情况下,如果节点 B 失败了, 那么整个集群就会以为缺少 5501-11000 这个范围的槽而不可用.

  6. Linux 环境下如何查找哪个线程使用 CPU 最长?

    1.获取项目的 pid,jps 或者 ps -ef | grep java,这个前面有讲过 2.top -H -p pid,顺序不能改变

  7. Spark学习摘记 —— Pair RDD转化操作API归纳

    本文参考 参考<Spark快速大数据分析>动物书中的第四章"键值对操作",由于pair RDD的一些特殊操作,没有和前面两篇的API归纳放在一起做示例 前面的几个api ...

  8. C++大作业——教职工管理系统

    教职工信息管理系统 1.问题描述: 设计一个学校职工管理系统,要求实现如下功能:建立职工信息数据, 包括职工编号.姓名. 性别.工资.出生时间.岗位.参加工作时间和年 龄(必须计算得到),初始模拟数据 ...

  9. 记离线缓存(manifest)一大坑,断定其只适用于静态网站或离线应用

    今天看了离线缓存(manifest)方面的资料,兴冲冲地就想给自己的网站用上.待我把代码都写好部署上服务器,并测试过OK的时候,在SegmentFault刷了一把manifest方面的问答,才发现这个 ...

  10. Html5 Canvas学习之路(五)

    Canvas 图像(上) Canvas 图像API可以加载图像数据,然后直接将图像应用到画布上.还可以裁切.拼贴图像数据,以显示用户需要的部分.此外,Canvas还提供了像素数据的存储功能,这样就能对 ...