前课复习
如果是空集合,必须使用set()建立;空字典可以使用大括号{}表示
创建集合使用“{}”或set(),但是如果要创建空集合只能使用set(),因为{}用来创建空字典
2.本课概要
7.1 文件的使用
1.单元开篇
2.文件的类型
所有文件都是以二进制0,1形式存储的,有统一编码的我们叫它文本文件,没统一编码的
我们叫它二进制文件,但是无论任何的什么样型的文件,它都可以以二进制方式打开
如果一个文件式文本文件,我们又需要对它里面的字符进行理解,我们就要用文本形式将它打开;
如果我们仅仅需要使用它的存储形态,我们就用二进制方式对它进行打开并处理。
可以使用文本方式或者二进制方式打开文本文件,所不同的是第一行代码中将rt变成rb,这样将会输出一段二进制形式
3.文件的打开和关闭
4.文件内容的读取
f.read():读入全部内容,如果给出参数,读入前size长度
f.readline():读入一行内容,如果给出参数,读入该行前size长度
f.readlines():读入文件所有行,以每行为元素形成列表。如果给出参数,读入前hint行
f.readlines():读入文件所有行,以每行为元素形成列表。如果给出参数,读入前hint行
for in 所进行的目的遍历一个列表,列表中的每个元素是一行,然后我们可以逐行对这个信息进行处理
使用fo.readlines(),这是一种一次读入分行处理的思维方法
5.数据的文件写入
f.writelines(ls):实际上它并不是将列表元素中的每个元素当做一行写入,而是将它们直接拼接后
写入。写入的内容之间没有换行,也没有空格,仅仅是将各个元素直接拼接然后写入文件
为什么没有任何输出?
因为当我们将信息写入到文件的时候,当前文件处理的指针在哪里呢?它在文件的最后面,
也就是说写过信息之后,指针指向文件的后面,指向下一次可能写入信息的位置,此时如果
我们再调用for in 的方式去遍历一行并且打印输出的时候,它指的是从当前位置向文件的结尾处
取出其中的每一行并且打印出来,在这个时候我没你已经写过的信息呢,它在指针的上方并不
在指针的下方。因此我们之前的6行代码,它并不能输出我们已经写过的信息,为了需要将我们
写过的信息输出,需要调整当前写入后的指针回到文件初始位置,那么从初始位置开始再进行
逐行遍历就能够把文件的全部信息打印输出。所以在之前6行代码的中间我们增加一行代码
fo.seek(0) 指的是写入ls之后我们将指针返回到文件的最开始,并且从这个地方开始去进行文件
全文的遍历打印
注意:请同学们一定要注意文件操作过程中指针所在位置以及程序的影响
6.单元小结
7.2 实例11:自动轨迹绘制
1.“自动轨迹绘制”问题分析
2.“自动轨迹绘制”实例讲解
t.title():绘制窗口的标题栏的信息
t.setup():设置绘制窗口的大小
t.pencolor():设置初始绘制的画笔颜色
t.pensize():指的是绘制画笔的粗细
line=line.replace(“n”,“”)
首先我们拿到了一行6个参数,中间用逗号进行分割,但是当我们使用for line in f,获取这一行信息的
时候,我们拿到的是字符串,但是在其中定义接口的时候,我们希望每一个解析的元素都是真是的数字。
map函数的作用是将第一个参数的功能,作用域第二个参数的每一个元素。在这里它的第一个参数是一个函数
的名字,第二个参数是一个迭代类型。简单说 map函数的作用,就是对一个列表或者一个集合这样的组合
数据类型的每一个元素都执行一次第一个参数所对应的函数。
eval函数它能够将一个字符串的两侧的引号去掉。这里是列表中的每一个元素都去掉了字符串中的那个引号
而变成了数字。使用for line in f 逐一处理每一行。每一行处理之后的信息作为列表
它表示的就是根据数据接口的元素,进行图形绘制。
自动轨迹绘制的这段代码,它有三大部分:
1.最开始我们生成一个绘画的一个环境,并且赋予初值
2.将自动绘制的所需要的数据文件进行读取,并且解析其中的数据保存为一个列表
3.根据列表的信息,也就是根据文件中的每行信息,进行数据的绘制
# 轨迹绘制
import turtle as t
t.title("自动轨迹绘制")
t.setup(800,600,0,0)
t.pencolor("red")
t.pensize(5)
# 数据读取
datals=[]
f=open("data.txt")
for line in f:
line=line.replace("n","") # 将最后的换行符转换为空格
datals.append(list(map(eval,line.split(","))))
f.close()
# 自动检测
for i in range(len(datals)):
t.pencolor(datals[i][3],datals[i][4],datals[i][5])
t.fd(datals[i][0])
if datals[i][1]:
t.right(datals[i][2])
else:
t.left(datals[i][2])
line.split(“,”):拆分字符串。通过制定分隔符将字符串进行切片,并返回分割后的字符串列表[list]
3.“自动轨迹绘制”举一反三
7.3 一维数据的格式化和处理
1.单元开篇
2.数据组织的维度
一维数据对应了传统Python程序中的列表、数组和集合等类型的概念
3.一维数据的表示
4.一维数据的存储
5.一维数组的处理
txt=open(frame).read():打开一个文件,再用.read把文件读进来变成一个大字符串。然后再
使用txt.split()方法将空格分割字符串中的信息,将每一个元素变成一个列表
结果:中国 美国 日本
join方法是指将join前面的字符串,分割放置到后面的join参数中的各个元素之间。比如ls有
三个元素,那三个元素之间增加join前面的空格,生成的字符串就是“中国 美国 日本”。该过程
实现了对列表元素写入文件的方法
结果:中国
美
国
美国
美国日本
将ls中间增加$符形成一个大字符串并把它写入文件
单元小结:
7.4 二维数据的格式化和处理
1.单元开篇
2.二维数据的表示
一般我们采用列表类型来表达二维数据,这里所说的列表并不是简单的列表,而是一种二维列表。
所谓二维列表指的是它本身是一个列表,而列表中的每一个元素又是一个列表
3.CSV格式与二维数据的存储
CSV格式:由逗号来分隔值的一种存储方式。
使用逗号、使用换行这样简单的方式就形成了二维数据的一种存储方式
如果某个元素缺失,逗号仍要保留
先检索它是第几行,然后检索它是第几列。通过row和column来去确定行列对应的交叉点的数据位置。先行后列的方法
一般外层列表的每一个元素它是一行。
4.二维数据的处理
ls.append(line.split(“,”)):按照逗号分割的方式,将每行中的元素按照逗号分隔开形成列表,并且把这个列表增加到ls列表中
这样可以将ls中的所有元素,按照这样的约定写入文件,最后将文件关闭
5.单元小结
7.5 模块6:wordcloud库的使用
1.wordcloud库基本介绍
wordcloud是优秀的词云展示第三方库,它能够将一段文本变成一个词云。
词云就是将词语通过图形可视化的方式直观和艺术的展示出来
2.wordcloud库使用说明
**注意:**在我们使用库的时候,库名是全小写的wordcloud,但是这个库中的具体词云是一个有大写有小写的WorldCloud,它本身是一个对象。一个词云就是一个WorldCloud对象
由文本变成词云,中间worldcloud库做了哪些事情呢?
1.分隔:首先,作为一个文本,worldcloud库以空格分隔符号,来将文本分割成单词
2.统计:单词出现次数并过滤。统计每一个单词出现的次数,那么次数多的它显示词云效果的字体会变得很大,出现
次数少的,那么它显示的字体就会很小。除了统计单词出现的次数,它会将一些很短的单词,比如只有1到2个字母和字符的单词过滤掉。
3.配置字体:它会根据统计单词出现的次数为不同的单词配置显示的字号
4.进行布局:它已经有了很多单词以及单词出现应该有的字体大小,进一步在一个图片的区域中去布局这样的单词效果,最红形成词云。
所以在我们绘制词云的时候,原则上不需要我们对文本它的单词出现的数量进行统计,词云自己会做。也不需要我们对文本的单词进行分割,只需要给wordcloud库一个有空格分割的大字符串,那么这个库就能产生词云。
哪些字会用最小字号呢?
比如一段文本中它只出现一次的词,使用最小字号来显示。那么随着统计次数增加,出现次数多的词,字号会逐渐增加,从最小字号逐渐增加的过程中,它的步进间隔就叫font_step,它用font_step这个参数来控制,默认出现次数多一点的它的字号增加一号。通过min_font_size,max_font_size,font_step这三个参数组合起来可以控制词云中字体出现的最小、最大字号,以及中间的步进间隔
font_path 叫字体路径,实际上它可以指定我们显示词云中,出现字符的字体。默认情况下,系统会选择默认的字体来显示词云,对于中文可以使用一种叫微软雅黑的字体。msyh指的是微软雅黑,.ttc是一个字体文件的后缀
**stop_words:**一般我们可以给定一个集合类型赋给stop_words这个参数,用来排除在集合中出现的词云的单词的内容(集合类型可以将重复的词去掉)
注意:from scipy.misc import imread出现错误
可以指定一个词云形状,比如我们想显示一个五角星、显示一个头像,这样的词云该如何去做呢?我们需要mask参数来给定一个图片文件的特定格式
我们首先需要使用from scipy.misc import imread进一步用imread去读取一个图片效果,那么我们想显示图云为什么形状,要赋给这个图片就要有什么形状,读取之后将变量mk表达要覆盖词云的图片的变量,进一步将mk赋给wordcloud mask参数;还有一个background_color它能够指定词云图片的背景颜色
由于wordcloud库,它是由空格来去分割单词的,但是在中文中我们没有办法使用空格来区分单词,所以在用中文形成词云的时候,需要我们首先对中文文本进行分词。之前我们已经学过中文的分词库使用jieba
当我们需要在这样的词云对象中加载一段由空格区分的中文文本,如何去做?首先我们需要用jieba.luct将这段文本进行分词,我们知道lcut会生成一个列表变量,其中的每一个元素是分隔之后的单词,然后我们需要让这样的单词以文本的形式由空格来分隔组成,我们可以使用**“ ”.join函数将这样的列表由空格将各个元素组织起来**,因此我们可以使用w.generate加载一段 “ ”.join(jieba.luct(txt))的内容
import wordcloud
import jieba
from imageio import imread
'''
在导入scipy.misc库时,由于需要安装很多并存的第三方库就不多说了,这里告诉大家安装之后还是导入错误怎么解决的。
这是因为scipy库中的imread要被弃用也就是不能用了,这时需要改成这样`from imageio import imread`
'''
mask=imread("chinese.jpeg")
txt="程序设计语言是计算机能够理解和识别用户操作意图的一种交互体系,它按照特定规则阻止计算机指令,是计算机能够自动进行各种运算处理"
ls=jieba.lcut(txt)
txt=" ".join(ls)
w=wordcloud.WordCloud(background_color="white",font_path="msyh.ttc",mask=mask)
w.generate(txt)
w.to_file("chineseCloud.png")
import wordcloud
import jieba
from imageio import imread
f = open("aaa.txt", "r", encoding='utf-8') # 只读.txt文件。这里一定注意是gbk!!!,而不是utf-8
txt = f.read()
f.close()
ls = jieba.lcut(txt)
txt = " ".join(ls)
mask = imread("chinese.jpeg")
w = wordcloud.WordCloud(background_color="white", font_path="msyh.ttc", mask=mask)
w.generate(txt)
w.to_file("chineseCloud1.png")
简单说,中文首先需要分词,并组成空格分隔的字符串,再调用wordcloud词云库就能构成词云了
7.6 实例12:政府工作报告词云
1.“政府工作报告词云”问题分析
2.“政府工作报告词云”实例解析(上)
由于这两份文件都是中文文本,我们需要分词,jieba.luct()
分词的结果保存为列表类型ls,我们知道ls中的每一个元素是分词后的每一个单词,但是词云对象要求我们将一个长文本由空格分隔的单词构成的长文本输入到词云对象中
txt=" ".join(ls) # 用空格来将列表的每一个元素连接起来,形成一个由空格分隔的长字符串txt
w.generate(txt) # 用来加载这段文本
w.to_file("grwordcloud.png") # to_file方法生成词云文件
以上就是词云带来的对文件核心内容进行直观展示效果的结果
这样的词云很好,但是里面有很多很多文字,我们能不能限制一下文字输出的数量?
只需要在生成wordcloud对象的时候增加一个新的参数max_words=15(也就是在词云中最多显示15个单词)
import jieba
import wordcloud
f=open("新时代中国特色社会主义.txt","r",encoding="utf-8")
t=f.read()
f.close()
ls=jieba.lcut(t)
txt=" ".join(ls)
w=wordcloud.WordCloud(font_path="msyh.ttc",width=1000,height=700,background_color="white")
w.generate(txt)
w.to_file("wordcloud1.png")
import jieba
import wordcloud
f=open("新时代中国特色社会主义.txt","r",encoding="utf-8")
t=f.read()
f.close()
ls=jieba.lcut(t)
txt=" ".join(ls)
w=wordcloud.WordCloud(font_path="msyh.ttc",width=1000,height=700,background_color="white",max_words=15)
# max_words=15 限制一下文字输出的数量,最多显示15个字符
w.generate(txt)
w.to_file("wordcloud11.png")
3.“政府工作报告词云”实例解析(下)
4.“政府工作报告词云”举一反三
可以修改背景图片,字体
掌握词云能力让我们能够快速的了解文本的重要信息



