Python基础【第七周】:文件和数据格式化(词云实例)

学习任务

 

 

 文件的使用

什么叫文本文件?

由单一特定的编码(如utf-8)组成的文件叫文本文件。文本文件也被看做是存储着的长字符串。

什么是二进制文件?

直接由比特0与1组成,么有统一字符编码,一般存在二进制0和1的组织结构。适用于png文件,avi文件等。

总之有统一编码的叫文本文件,没有统一编码的叫二进制文件,但是任何文件均可以用二进制编码表示。用二进制方式打开文件,就可以将字符转化为最初的存储形式。

 

 

 

 

 

 文件的使用流程

 打开——操作——关闭

首先要使文件变成占用状态才可以对文件进行操作,也就是要打开文件。

 

 

 文件的打开

 

 

 路径和名称可以是绝对也可以是相对

 注意:windows下的“\”在python中时转义符,所以需要用‘“\\”

打开模式

 

 

 

文件读写的方法

 读的方法:

文件内容为:Kobe作为世界上最伟大的球员,

      他对很多人产生了影响

1 f = open("test.txt",'r')
2 print(f.read(4))#读入前4个字符,默认读出全部
3 print(f.readline(2))#读入第一行前两个字符,默认读一行
4 print(f.readlines())#以每行作为元素形成列表,默认读全部。
5 #注意:读方法,都是接着上面读,不重复读取
6 #所以上述输出为
7 # Kobe
8 # 作为
9 # ['世界上最伟大的篮球运动员\n', '他对很多人产生了影响']

 有时候文件太大,一次读入不可取,可使用按数逐步处理

 

 对于大文件,这个方法更可取

逐行遍历也是个不错的、常用的办法

一 . 一次读入,分行处理

 

 二. 分行读入,逐行处理

 

fo其实是一个io流。

 写的方法:

f = open("test.txt",'w')
s = "kobe is the best basketball player"
f.write(s)#将字符串直接写入
s = ["kobe","james","jordan"]
f.writelines(s)#将列表元素不分行,直接链接写入
f.close()
#写入文件:kobe is the best basketball playerkobejamesjordan

注意方法f.writelines(s),这并不是一个元素一行,而是直接拼接。

 当我们想要改变读写的光标位置时,使用方法

 

 

 

这是因为在写完之后,指针(光标)已经到了文件尾部,再进行遍历的话,当然不会有其他内容。

 

 实例:自动轨迹绘制

 

 

使用数据脚本,是自动化、模块化的第一步。也就是根据数据脚本,然后通过特定程序,将数据加以实现,变成可视。

问题分析:

 

 

 基本思路:

  • 定义数据文件格式(接口),也就是数据文件和程序之间的规范。
  • 编写程序,根据文件接口解析参数绘制图形。
  • 编制数据文件。

 数据接口定义是非常主观的,没有规范。下面每个数字就是接口,因为每个人对数字的解释即设定不一样,所以带有主观色彩。

 

 

 代码:

 

 代码解析:

map函数:map(parameter1,parameter2),其中parameter1是函数名字,parameter2是具有多个元素的迭代类型,一般是序列,map函数的作用是将parameter1的函数,作用到parameter2的每个元素,生成一个map数据类型

s = "KOBE,JAMES,JORDAN"
m = map(str.lower,s.split(","))
#m是一个map对象,需要再次使用list将其转换
print(list(m))
#输出['kobe', 'james', 'jordan']

实例蕴含的思想:

自动化思维:数据和功能分离,数据驱动的自动运行

接口化设计:格式化设计接口,清晰明了。如本例中的数据间的逗号。

如果说我们要变换不同的图形,则只要更换数据文件即可,而不需要更换程序,这达到了程序复用的目的。

 应用扩展:

可以扩展接口设计,增加更多的控制接口,比如说转向多少度、跳转到特定区域等等

扩展功能设计,增加弧形等更多功能

一维数据的格式化

数据的格式化

一维数据主要指:列表、数组、集合等

二维数据是由一维数据构成,是一维数据的组合形式

 

 多维数据是一维或者二维数据在新维度上扩展形成,比如上述高校排名在时间维度上扩展。

 

 二维数据的格式化

使用列表表达二维数据

 

 csv格式与二维数据的存储

csv格式就是用逗号分割的值

举例:

 

 

 

如果数据中包含逗号,那么在逗号两侧包含引号,从而识别此逗号不是用来分割值的。

 二维数据的读入处理

从csv中读入数据

 

 

二维数据的写入处理

注意:使用join函数时,item中的每个元素都要是字符串,所以先要把二维列表中的数字都转化为字符串。

ls = [["kobe",81],["james",60],["jordan",70]]
ls = [[str(j) for j in i] for i in ls ]

采用两层循环转化为字符串。

 

 

 二维数据的逐一处理

 

 

 

 

 

 词云实例wordcloud

 

 

 

 

 

 

 

词云文本为空格分割的大字符串。

词云对文本的自动处理:

 

 

 词云的参数改变

 

 文本中频数越大的词,字号越大。font_step表示随着频数增大,字号增大的步进间隔。

 

font_path指的是使用什么风格的字体,msyh.ttc指的是微软雅黑。

 控制词云单词量。

 

如何制定词云形状?

 

 实例:政府工作报告词云图

《决胜全面建成小康社会 夺取新时代中国特色社会主义伟大胜利》

文件来源:https://python123.io/resources/pye/新时代中国特色社会主义.txt

《中共中央 国务院关于实施乡村振兴战略的意见》

文件来源:https://python123.io/resources/pye/关于实施乡村振兴战略的意见.txt

代码:

 1 import jieba
 2 import wordcloud
 3 import requests
 4 import imageio#用于生成词云图片轮廓
 5 #首先从网络获取字符串
 6 #txt1为《决胜全面建成小康社会 夺取新时代中国特色社会主义伟大胜利》
 7 #txt2为《中共中央 国务院关于实施乡村振兴战略的意见》
 8 txt1 = requests.get("https://python123.io/resources/pye/新时代中国特色社会主义.txt").text
 9 txt2 = requests.get("https://python123.io/resources/pye/关于实施乡村振兴战略的意见.txt").text
10 #再利用jieba库分词,且去除单个字符的词语。再使用空格连接成大字符串
11 words1 = " ".join([word for word in jieba.lcut(txt1) if len(word) != 1])
12 words2 = " ".join([word for word in jieba.lcut(txt2) if len(word) != 1])
13 
14 #生成词云,设置参数
15 #首先先将图像轮廓设定出来
16 mk = imageio.imread("test.png")
17 w = wordcloud.WordCloud(width=600,height=600,#设定大小
18                         background_color="white",#背景颜色
19                         font_path="msyh.ttf",#字体风格
20                         max_words = 200,#词数限制
21                         stopwords=wordcloud.STOPWORDS.add("美国"),#屏蔽词语美国
22                         mask = mk#设定图像轮廓
23                         )
24 #加载词云文本
25 w.generate(words1)
26 w.to_file("pywordcloud1.png")
27 w.generate(words2)
28 w.to_file("pywordcloud2.png")

 

结果:

 

 

posted @ 2020-06-07 09:03  焕熊  阅读(506)  评论(0编辑  收藏  举报