Python自動(dòng)軌跡繪制&政府工作報(bào)告詞云
前言
本篇主要介紹文件和數(shù)據(jù)格式化,以自動(dòng)軌跡繪制為例,介紹自動(dòng)化的程序設(shè)計(jì)方法。以政府工作報(bào)告詞云為例,介紹wordcloud庫(kù)的使用。
數(shù)據(jù)格式化:將一組數(shù)據(jù)按照一定規(guī)格和式樣進(jìn)行規(guī)范:表示、存儲(chǔ)、運(yùn)算等
讀完本篇,你將了解:1.方法論:從Python角度理解的文件和數(shù)據(jù)表示 2.實(shí)踐能力:學(xué)會(huì)編寫(xiě)帶有文件輸入輸出的程序,并且能夠?qū)嵺`對(duì)數(shù)據(jù)的表示和操作
本篇將系統(tǒng)介紹:1.文件的使用(對(duì)文件的讀、寫(xiě)等操作的相關(guān)能力) 2.實(shí)例11:自動(dòng)軌跡繪制(了解自動(dòng)化的程序設(shè)計(jì)方法) 3.一維數(shù)據(jù)的格式化和處理(介紹數(shù)據(jù)組織的維度、一維數(shù)據(jù)的存儲(chǔ)、處理等) 4.二維數(shù)據(jù)的格式化和處理(介紹CSV數(shù)據(jù)存儲(chǔ)格式) 5.模塊6: wordcloud庫(kù)的使用(基本介紹+使用說(shuō)明+用例) 6.實(shí)例12:政府工作報(bào)告詞云(基本分析+代碼實(shí)現(xiàn)+改進(jìn)版五角星詞云)
一、文件的使用
1.文件的類型
(1)文件 文件是數(shù)據(jù)的抽象和集合 ①文件是存儲(chǔ)在輔助存儲(chǔ)器上的數(shù)據(jù)序列 ②文件是數(shù)據(jù)存儲(chǔ)的一種形式 ③文件展現(xiàn)形態(tài):文本文件和二進(jìn)制文件
(2)文本文件vs.二進(jìn)制文件 ①文件文件和二進(jìn)制文件只是文件的展示方式 ②本質(zhì)上,所有文件都是二進(jìn)制形式存儲(chǔ) ③形式上,所有文件采用兩種方式展示
(3)文本文件 ①由單一特定編碼組成的文件,如UTF-8編碼 ②由于存在編碼,也被看成是存儲(chǔ)著的長(zhǎng)字符串 ③適用于例如∶.txt文件、.py文件
(4)二進(jìn)制文件 ①直接由比特0和1組成,沒(méi)有統(tǒng)一字符編碼般 ②存在二進(jìn)制0和1的組織結(jié)構(gòu),即文件格式 ③適用于例如: .png文件、.avi文件等 注意:無(wú)論什么類型的文件都可以用二進(jìn)制形式打開(kāi)
(5)使用情況 ①文本文件需要對(duì)它里邊的字符進(jìn)行理解,以文本形式打開(kāi) ②僅僅需要使用它的存儲(chǔ)形態(tài),以二進(jìn)制打開(kāi)
2.文件的打開(kāi)和關(guān)閉
(1)文件處理的步驟:打開(kāi)-操作-關(guān)閉
①存儲(chǔ)狀態(tài):此時(shí)文件在計(jì)算機(jī)的硬盤(pán)中存儲(chǔ) ②占用狀態(tài):一個(gè)程序可以唯一的、排它的對(duì)文件進(jìn)行相關(guān)處理 ③打開(kāi)之后可進(jìn)行,數(shù)據(jù)讀入和數(shù)據(jù)輸出,簡(jiǎn)稱為讀文件和寫(xiě)文件
④3個(gè)常用讀文件函數(shù):a.read( size) a.readline(size) a.readlines(hint)
⑤3個(gè)常用寫(xiě)文件函數(shù):a.write(s) a.writelines ( lines) a.seek(offset)
(2)文件的打開(kāi) 1)<變量名> = open(<文件名>,<打開(kāi)模式>) ①第一個(gè)參數(shù):文件路徑和名稱,指當(dāng)前要打開(kāi)的文件與當(dāng)前程序所對(duì)應(yīng)的位置之間的關(guān)系 ②第二個(gè)參數(shù):文本 or 二進(jìn)制形式打開(kāi),讀信息還是寫(xiě)信息 ③打開(kāi)之后用一個(gè)抽象變量——文件句柄表示 2)文件路徑 ①文件路徑和名稱可以是文件絕對(duì)路徑和名稱 ②舉例:某文件在Windows平臺(tái)上存儲(chǔ)于保存在D盤(pán)PYE目錄下,文件名稱為f.txt 打開(kāi)文件時(shí)需要指定路徑 1)直接給出路徑 注意:在Windows下,文件的路徑使用的是\方式,但在Python中表示轉(zhuǎn)義符 所以寫(xiě)成:“D:/ PYE/f.txt"或"D:\PYE\f.txt" 2)相對(duì)路徑:打開(kāi)文件與當(dāng)前程序之間的路徑 指定目錄為./PYE/f.txt,指從可執(zhí)行程序的當(dāng)前目錄起找它的PYE目錄,以及這個(gè)目錄下的f.txt文件 若二者在相同目錄里,直接吏用文件名稱f.txt
③最終目的:讓程序在它運(yùn)行的當(dāng)前目錄下,能夠很好的或者有效的找到這個(gè)文件。找到這個(gè)文件,并且指定正確的文件名稱
3)打開(kāi)模式
①r:可用try except 捕捉異常并處理 ②r、w、x、a是四種與讀寫(xiě)相關(guān)的模式 ③與打開(kāi)文件方式相關(guān)的模式b、t ④默認(rèn)情況下以t打開(kāi),也就是文本方式來(lái)打開(kāi)文件 ⑤+:形成r+、w+、x+和a+
(3)文件的關(guān)閉 <變量名>.close()
①它使用打開(kāi)之后賦予的文件句柄 ②若打開(kāi)后,沒(méi)有調(diào)用f.close去關(guān)閉這個(gè)文件,那么這個(gè)文件始終是被打開(kāi)狀態(tài) ③但是當(dāng)程序退出,Python的解釋器會(huì)自動(dòng)的將這個(gè)文件關(guān)閉
3.文件內(nèi)容的讀取
(1)相關(guān)函數(shù)

(2)文件的全文本操作:遍歷文件的全部信息 ①方法一
fname?=?input("請(qǐng)輸入要打開(kāi)的文件名稱:")??#?用戶輸入文件名稱,包含路徑
????????????????fo?=?open(fname,?"r")??#?以只讀模式打開(kāi),句柄為fo
????????????????txt?=?fo.read()??#?read函數(shù)一次性讀取文件
????????????????#?對(duì)全文txt進(jìn)行處理
????????????????fo.close()
1)特點(diǎn):一次讀入,統(tǒng)一處理。2)弊端:如果這樣的文本文件體量特別大,一次性將文件讀入內(nèi)存會(huì)耗費(fèi)很多時(shí)間和資源
②方法二(按數(shù)量讀入逐步處理)
????????fname?=?input("請(qǐng)輸入要打開(kāi)的文件名稱:")??#?用戶輸入文件名稱,包含路徑
????????????????fo?=?open(fname,?"r")??#?以只讀模式打開(kāi),句柄為fo
????????????????txt?=?fo.read(2)??#?參數(shù)賦為2,指的是從文件中讀入兩個(gè)字節(jié)
????????????????while?txt?!=?"":
????????????????????#?對(duì)全文txt進(jìn)行處理
????????????????????txt?=?fo.read(2)??#?只要信息不為空,持續(xù)處理
????????????????fo.close()
1)特點(diǎn):按數(shù)量讀入,逐步處理 2)適用:處理大文件更可行有效
(3)文件的逐行操作(逐行遍歷文件) ①方法一(一次讀入,分行處理)
?fname?=?input("請(qǐng)輸入要打開(kāi)的文件名稱:")??#?用戶輸入文件名稱,包含路徑
????????????????fo?=?open(fname,?"r")??#?以只讀模式打開(kāi),句柄為fo
????????????????for?line?in?fo.readlines():??#?此函數(shù)將fo中所有的信息文本以行的方式生成一個(gè)列表,每行是列表的一個(gè)元素
????????????????????print(line)
????????????????fo.close()
②方法二(對(duì)大文件,逐行將信息讀出)
????????fname?=?input("請(qǐng)輸入要打開(kāi)的文件名稱:")??#?用戶輸入文件名稱,包含路徑
????????????????fo?=?open(fname,?"r")??#?以只讀模式打開(kāi),句柄為fo
????????????????for?line?in?fo:??#?直接使用
????????????????????print(line)
????????????????fo.close()
4.數(shù)據(jù)的文件寫(xiě)入
(1)相關(guān)函數(shù)

①writelines寫(xiě)入后,它們之間沒(méi)有換行,也沒(méi)有空格。僅僅是將各個(gè)元素直接拼接寫(xiě)入 ②seek函數(shù):改變寫(xiě)入信息的位置
(2)舉例
?fo?=?open(?"output.txt"?,?"w+")
????????????ls?=["中國(guó)","法國(guó)",“美國(guó)"]
????????????fo.writelines(ls)??#?寫(xiě)入一個(gè)字符串列表
????????????for?line?in?fo:
????????????????print(line)
????????????fo.close()
①執(zhí)行之后發(fā)現(xiàn),程序無(wú)任何輸出 ②對(duì)代碼進(jìn)行修改
??fo?=?open(?"output.txt"?,?"w+")
????????????ls?=["中國(guó)","法國(guó)",“美國(guó)"]
????????????fo.writelines(ls)??#?寫(xiě)入一個(gè)字符串列表
????????????fo.seek(0)
????????????for?line?in?fo:
????????????????print(line)
????????????fo.close()
思考:①當(dāng)我們將信息寫(xiě)入到文件的時(shí)候,當(dāng)前文件處理的指針在文件的最后面,指向下一次可能寫(xiě)入信息的位置 ②此時(shí)用for in去遍歷一行并且打印輸出的時(shí)候,它指的是從當(dāng)前位置向文件的結(jié)尾處,取出其中的每一行并且打印出來(lái) ③已經(jīng)寫(xiě)過(guò)的信息它在指針的上方并不在指針的下方,故之前的代碼它并不能輸出我們已經(jīng)寫(xiě)過(guò)的信息 ④需要調(diào)整當(dāng)前寫(xiě)入后的指針,回到初始位置 ⑤從初始位置開(kāi)始再進(jìn)行逐行遍歷即可輸出
二、實(shí)例:自動(dòng)軌跡繪制
1.問(wèn)題分析
(1)需求:根據(jù)腳本來(lái)繪制圖形 (2)不是寫(xiě)代碼而是寫(xiě)數(shù)據(jù)繪制軌跡 (3)數(shù)據(jù)腳本是自動(dòng)化最重要的第一步 (4)預(yù)期結(jié)果:①給出文件,其中列出一些數(shù)據(jù)參數(shù) ②經(jīng)過(guò)程序加載運(yùn)行,自動(dòng)繪制出我們期望的軌跡
2.實(shí)例講解
(1)基本思路 ①步驟1:定義數(shù)據(jù)文件格式(接口)(程序和數(shù)據(jù)之間的一種規(guī)范) ②步驟2∶編寫(xiě)程序,根據(jù)文件接口解析參數(shù),繪制圖形 ③步驟3∶編制數(shù)據(jù)文件
(2)數(shù)據(jù)接口定義 ①具有個(gè)性色彩,沒(méi)有既定規(guī)范 ②舉例:(一行表示一次操作) 1)第一個(gè)數(shù)據(jù):表示當(dāng)前位置開(kāi)始向前行進(jìn)的一個(gè)距離 2)第二個(gè)數(shù)據(jù):表示轉(zhuǎn)向判斷。如果數(shù)據(jù)是0讓當(dāng)前的畫(huà)筆向左轉(zhuǎn),反之為1向右轉(zhuǎn) 3)第三個(gè)數(shù)據(jù):表示向左轉(zhuǎn)或者向右轉(zhuǎn)的絕對(duì)轉(zhuǎn)向角度 4)后三個(gè)參數(shù):分別對(duì)應(yīng)畫(huà)這一段曲線或直線過(guò)程中,所使用的RGB三個(gè)通道的顏色。取值范圍:0-1之間的浮點(diǎn)數(shù) ③需要寫(xiě)一段程序與接口對(duì)應(yīng),能夠讀取這樣的文件并且解析它。進(jìn)而繪制相關(guān)圖形
(3)自動(dòng)軌跡繪制
import?turtle?as?t??#?使用別名方式將turtle別名為t
#?基礎(chǔ)準(zhǔn)備工作(生成繪畫(huà)環(huán)境)
t.title('自動(dòng)軌跡繪制')??#?設(shè)置繪制窗口的標(biāo)題欄的信息
t.setup(800,?600,?0,?0)??#?設(shè)置繪制窗口的大小
t.pencolor("red")??#?設(shè)置初始繪制畫(huà)筆顏色
t.pensize(5)??#?繪制畫(huà)筆的粗細(xì)
#?數(shù)據(jù)讀取(打開(kāi)文件,解析數(shù)據(jù)文件中每一行的信息并做相關(guān)處理)
#?可能的繪制數(shù)據(jù)預(yù)估不是很大,讀入所有信息后保存為列表
datals?=?[]??#?建立空列表
f?=?open("data.txt")
for?line?in?f:??#?從文件中讀取遍歷每一行
????line?=?line.replace("\n",?"")??#?將文件最后的換行符轉(zhuǎn)換為空字符,去掉換行的信息。此時(shí)line存儲(chǔ)的是我們定義的每一行的數(shù)據(jù)接口的值
????#?需將數(shù)據(jù)接口的值進(jìn)行分割、處理并且提取其中的信息。
????#?拿到一行6個(gè)參數(shù),中間用逗號(hào)分隔。我們希望每一個(gè)解析的元素都是真實(shí)的數(shù)字
????datals.append(list(map(eval,?line.split(","))))??#?使用split且指定“,”為分隔符,將其分割成若干個(gè)字符串。能生成一個(gè)列表,每一個(gè)元素就是由”,分割的一段字符串
????# map是Python提供的內(nèi)嵌函數(shù)(無(wú)需import),可將第一個(gè)參數(shù)的功能作用于第二個(gè)參數(shù)的每一個(gè)元素。即對(duì)一個(gè)列表或者一個(gè)集合這樣的組合數(shù)據(jù)類型的每一個(gè)元素都執(zhí)行一次第一個(gè)參數(shù)所對(duì)應(yīng)的函數(shù)
????#?列表中的每一個(gè)元素都去掉了引號(hào),變成數(shù)字。之后使用append將這一個(gè)字符串放到我們預(yù)先定義的datals列表中
f.close()
#?經(jīng)過(guò)以上處理,我們將接口信息讀入到了內(nèi)部的一個(gè)列表變量中,列表變量的每一個(gè)元素是一行的信息
#?自動(dòng)繪制
for?i?in?range(len(datals)):??#?返回datals長(zhǎng)度(元素個(gè)數(shù)),指逐一的獲取其中的遍歷整數(shù)
????t.pencolor(datals[i][3],?datals[i][4],?datals[i][5])??#?獲得當(dāng)前datals的一個(gè)元素,并且找到元素的第三個(gè)參數(shù)為RGB中R值,第四個(gè)元素是G值,第五個(gè)元素是B值
????t.fd(datals[i][0])??#?我們定義的數(shù)據(jù)接口中第一個(gè)元素是行進(jìn)距離
????if?datals[i][1]:??#?第二個(gè)參數(shù)等于1向右轉(zhuǎn),0向左轉(zhuǎn)
????????t.right(datals[i][2])
????else:
????????t.left(datals[i][2])
(4)編制數(shù)據(jù)文件 ①每一行指的是畫(huà)筆的一次根據(jù)接口的規(guī)定動(dòng)作 ②保存文件data.txt 300,0,144,1,0,0 300,0,144,0,1,0 300,0,144,0,0,1 300,0,144,1,1,0 300,0,108,0,1,1 184,0,72,1,0,1 184,0,72,0,0,0 184,0,72,0,0,0 184,0,72,0,0,0 184,1,72,1,0,1 184,1,72,0,0,0 184,1,72,0,0,0 184,1,72,0,0,0 184,1,72,0,0,0 184,1,720,0,0,0
③用寫(xiě)的程序調(diào)用文件,繪制想要的圖形
3.舉一反三
(1)理解方法思維 ①自動(dòng)化思維:數(shù)據(jù)和功能分離,數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)運(yùn)行 ②接口化設(shè)計(jì):格式化設(shè)計(jì)接口,清晰明了 ③二維數(shù)據(jù)應(yīng)用(簡(jiǎn)化了程序與接口之間的操作關(guān)系):應(yīng)用維度組織數(shù)據(jù),二維數(shù)據(jù)最常用
(2)應(yīng)用問(wèn)題的擴(kuò)展 ①擴(kuò)展接口設(shè)計(jì),增加更多控制接口 ②擴(kuò)展功能設(shè)計(jì),增加弧形等更多功能 ③擴(kuò)展應(yīng)用需求,發(fā)展自動(dòng)軌跡繪制到動(dòng)畫(huà)繪制
三、一維數(shù)據(jù)的格式化和處理
1.數(shù)據(jù)組織的維度
——從一個(gè)數(shù)據(jù)到一組數(shù)據(jù)
(1)維度:一組數(shù)據(jù)的組織形式
(2)一維數(shù)據(jù) 由對(duì)等關(guān)系的有序或無(wú)序數(shù)據(jù)構(gòu)成,采用線性方式組織 對(duì)應(yīng)列表、數(shù)組和集合等概念
(3)二維數(shù)據(jù) 由多個(gè)一維數(shù)據(jù)構(gòu)成,是一維數(shù)據(jù)的組合形式 ①表格是典型的二維數(shù)據(jù) ②其中,表頭是二維數(shù)據(jù)的一部分
(4)多維數(shù)據(jù) 由一維或二維數(shù)據(jù)在新維度上擴(kuò)展形成(如時(shí)間擴(kuò)展)
(5)高維數(shù)據(jù) 僅利用最基本的三元關(guān)系來(lái)展示數(shù)據(jù)間的復(fù)雜結(jié)構(gòu) 如:字典類型中用鍵值對(duì)表示值和它屬性之間的關(guān)系,鍵值對(duì)之間可以進(jìn)行有效組織,表達(dá)更復(fù)雜的邏輯關(guān)系
(6)數(shù)據(jù)的操作周期 存儲(chǔ)<->表示<->操作 ①數(shù)據(jù)存儲(chǔ):數(shù)據(jù)在磁盤(pán)中的存儲(chǔ)狀態(tài),重點(diǎn)在于數(shù)據(jù)存儲(chǔ)所使用的格式 ②數(shù)據(jù)表示:指程序表達(dá)數(shù)據(jù)的方式,重點(diǎn)在于數(shù)據(jù)類型 ③數(shù)據(jù)操作:相關(guān)操作方式和算法的體現(xiàn)
2.一維數(shù)據(jù)的表示
(1)討論如何用程序的類型來(lái)表達(dá)一維數(shù)據(jù)
(2)如果數(shù)據(jù)間有序:使用列表類型 ①列表類型可以表達(dá)一維有序數(shù)據(jù) ②for循環(huán)可以遍歷數(shù)據(jù),進(jìn)而對(duì)每個(gè)數(shù)據(jù)進(jìn)行處理
(3)如果數(shù)據(jù)間無(wú)序∶使用集合類型 ①集合類型可以表達(dá)一維無(wú)序數(shù)據(jù) ②for循環(huán)可以遍歷數(shù)據(jù),進(jìn)而對(duì)每個(gè)數(shù)據(jù)進(jìn)行處理
3.一維數(shù)據(jù)的存儲(chǔ)
(1)存儲(chǔ)方式一∶空格分隔 ①使用一個(gè)或多個(gè)空格分隔進(jìn)行存儲(chǔ),不換行 ②缺點(diǎn):數(shù)據(jù)中不能存在空格(否則無(wú)法區(qū)分)
(2)存儲(chǔ)方式二∶逗號(hào)分隔 ①使用英文半角逗號(hào)分隔數(shù)據(jù)進(jìn)行存儲(chǔ),不換行 ②缺點(diǎn):數(shù)據(jù)中不能有英文逗號(hào)
(3)存儲(chǔ)方式三∶其他方式(視情況而定) ①使用其他符號(hào)或符號(hào)組合分隔,建議采用特殊符號(hào) ②缺點(diǎn)︰需要根據(jù)數(shù)據(jù)特點(diǎn)定義,通用性較差 ③根據(jù)數(shù)據(jù)的特點(diǎn)來(lái)去定義選擇一個(gè)不會(huì)出現(xiàn)特殊符號(hào)
(4)共性:數(shù)據(jù)中都不能出現(xiàn)用于分割的字符
4.一維數(shù)據(jù)的處理
(1)數(shù)據(jù)的處理:存儲(chǔ)<->表示 ①將存儲(chǔ)的數(shù)據(jù)讀入程序 ②將程序表示的數(shù)據(jù)寫(xiě)入文件 ③舉例:從空格分隔的文件中讀入數(shù)據(jù),表示成列表形式 中國(guó) 美國(guó) 日本 德國(guó) 法國(guó) 英國(guó) 意大利
txt?=?open(fname).read()
????????ls?=?txt.split()
????????f.close()
④舉例二:從特殊符號(hào)分隔的文件中讀入數(shù)據(jù) 中國(guó)
美
國(guó)
美國(guó)
美國(guó)日本
德
國(guó)
德國(guó)
德國(guó)法國(guó)
英
國(guó)
英國(guó)
英國(guó)意大利
??txt?=?open(fname).read()
????ls?=txt.split("$")
????f.c1ose()
(2)一維數(shù)據(jù)的寫(xiě)入處理 ①采用空格分隔方式將數(shù)據(jù)寫(xiě)入文件
???ls?=?['中國(guó)",‘美國(guó),'日本']
????????f?=?open(fname,?'w?')
????????f.write(?''.join(ls))??#?將join前面的字符串分割放置到后邊的oin參數(shù)中的各個(gè)元素之間
????????f.close()
②采用特殊分隔方式將數(shù)據(jù)寫(xiě)入文件
?ls?=?['中國(guó)",‘美國(guó),'日本']
????????????f?=?open(fname,?'w?')
????????????f.write(?'$'.join(ls))??#?將將ls中的元素之間增加$形成一個(gè)大字符串并把它寫(xiě)入文件
????????????f.close()
四、二維數(shù)據(jù)的格式化和處理
1.二維數(shù)據(jù)的表示
(1)使用列表類型 ①由于每一行具有相同的格式特點(diǎn),一般我們采用列表類型來(lái)表達(dá)三維數(shù)據(jù) ②使用二維列表:本身是一個(gè)列表,而列表中每一個(gè)元素又是一個(gè)列表,可以代表二維數(shù)據(jù)的一行或者一列 ③若干行和若干列組織起來(lái)形成的外圍列表構(gòu)成二維列表
(2)遍歷 ①使用兩層for循環(huán)遍歷每個(gè)元素 ②外層列表中每個(gè)元素可以對(duì)應(yīng)一行,也可以對(duì)應(yīng)一列
(3)一二維數(shù)據(jù)的Python表示 數(shù)據(jù)維度是數(shù)據(jù)的組織形式 ①—維數(shù)據(jù):列表和集合類型(數(shù)據(jù)間有序用列表類型,無(wú)序用集合類型) ②二維數(shù)據(jù):統(tǒng)一使用列表類型
2.CSV格式與二維數(shù)據(jù)存儲(chǔ)
(1)CSV數(shù)據(jù)存儲(chǔ)格式 ①CSV: Comma-Separated Values ②指由逗號(hào)分隔的值,即用逗號(hào)來(lái)分割值的一種存儲(chǔ)方式 ③國(guó)際通用的一二維數(shù)據(jù)存儲(chǔ)格式,一般.csv擴(kuò)展名 ④每行一個(gè)一維數(shù)據(jù),采用逗號(hào)分隔,無(wú)空行 ⑤Excel和一般編輯軟件都可以讀入或另存為csv文件 ⑥CSV是數(shù)據(jù)轉(zhuǎn)換之間的通用的標(biāo)準(zhǔn)格式
(2)舉例
①二維數(shù)據(jù)轉(zhuǎn)換為CSV格式之后,會(huì)變成由逗號(hào)分隔的形式 ②原表格中的一行對(duì)應(yīng)為CSV數(shù)據(jù)格式中的一行 ③原表格中的每一列跟每一列之間,在CSV格式中使用逗號(hào)來(lái)分割
(3)一些約定 ①如果某個(gè)元素缺失,逗號(hào)仍要保留 ②二維數(shù)據(jù)的表頭可以作為數(shù)據(jù)存儲(chǔ),也可以另行存儲(chǔ) ③逗號(hào)為英文半角逗號(hào),逗號(hào)與數(shù)據(jù)之間無(wú)額外空格 ④如果數(shù)據(jù)中包含逗號(hào),不同的CSV軟件會(huì)有一些約定 1)在數(shù)據(jù)兩側(cè)增加一些引號(hào)來(lái)表達(dá)這個(gè)逗號(hào)不是分割元素的逗號(hào) 2)增加轉(zhuǎn)義符 注意:我們此時(shí)不考慮出現(xiàn)逗號(hào)的情況
(4)二維數(shù)據(jù)的存儲(chǔ) ①按行存或者按列存都可以,具體由程序決定 ②一般索引習(xí)慣:ls[row][column],先行后列 ③根據(jù)一般習(xí)慣,外層列表每個(gè)元素是一行,按行存 ④好處:可以達(dá)到一般的一個(gè)調(diào)用習(xí)慣
3.二維數(shù)據(jù)的處理
(1)從CSV格式的文件中讀入數(shù)據(jù),寫(xiě)入二維列表
fo?=?open(fname)
ls?=?[]
for?line?in?fo:
????line?=?line.replace("\n","")
????ls.append(line,split(","))
fo.close()
①replace方法將最后的回車替換為空字符串 ②split:按逗號(hào)分隔,將每行中的元素按逗號(hào)分隔開(kāi)形成列表,增加到ls列表中,作為其中的一個(gè)元素 ③操作之后的ls是包含二維數(shù)據(jù)的一個(gè)二維列表信息
(2)保存在列表中的二維數(shù)據(jù)寫(xiě)入CSV格式的文件中
???ls?=?[[],[],[]]??#?二維列表
????????f?=?open(fname,'w?')
????????for?item?in?ls:??#?讀取其中的每一行元素寫(xiě)入
????????????f.write(?"?,?'.join(item)?+?"\n?')??#?對(duì)item中的元素之間增加逗號(hào),最后增加\n作為這一行的結(jié)尾
????????f.close()
(3)二維數(shù)據(jù)的逐一處理 采用二層循環(huán)
ls?=?[[1,2],[3,4],[5,6]]??#?二維列表
for?row?in?ls:
????for?column?in?row?:
????????print(column)
五、模塊6: wordcloud庫(kù)的使用
1.基本介紹
(1)概述 ①wordcloud是優(yōu)秀的詞云展示第三方庫(kù) ②詞云就是將詞語(yǔ)通過(guò)圖形可視化的方式直觀和藝術(shù)的展示出來(lái) (2)wordcloud庫(kù)安裝 (cmd命令行) pip install wordcloud
2.wordcloud庫(kù)使用說(shuō)明
(1)基本使用 ①wordcloud庫(kù)把詞云當(dāng)作一個(gè)WordCloud對(duì)象 注意:使用庫(kù)時(shí),庫(kù)名是全小寫(xiě),但庫(kù)中的具體詞云有大寫(xiě)有小寫(xiě) ②wordcloud.WordCloud()代表一個(gè)文本對(duì)應(yīng)的詞云,一個(gè)詞云就是一個(gè)WordCloud對(duì)象 ③可以根據(jù)文本中詞語(yǔ)出現(xiàn)的頻率等參數(shù)繪制詞云 ④繪制詞云的形狀、尺寸和顏色都可以設(shè)定
(2)常規(guī)方法 w=wordcloud.WordCloud() 生成一個(gè)詞云對(duì)象,進(jìn)一步向w賦予特定的文本參數(shù)以及操作,將詞云輸出成文件 ①以WordCloud對(duì)象為基礎(chǔ) ②配置參數(shù)、加載文本、輸出文件 ③2個(gè)函數(shù)
(3)詞云繪制步驟介紹 ①步驟1∶配置對(duì)象參數(shù) ②步驟2∶加載詞云文本 ③步驟3∶輸出詞云文件 舉例
import?wordcloud
????????c?=?wordcloud.wordcloud()
????????c.generate(?"wordcloud?by?Python")
????????c.to_file("pywordcloud.png")

(4)由文本變?yōu)樵~云,wordcloud庫(kù)處理流程 ①分隔:以空格分隔單詞 ②統(tǒng)計(jì):單詞出現(xiàn)次數(shù)并過(guò)濾(次數(shù)多顯示的詞云效果的字體會(huì)變得很大,反之則小;很短的單詞(比如只有1到2個(gè)字母和字符的單詞)過(guò)濾掉) ③字體:根據(jù)統(tǒng)計(jì)出現(xiàn)的次數(shù),為不同的單詞配置顯示的字號(hào) ④布局:顏色環(huán)境尺寸(布局單詞效果,最終形成詞云) 故我們只需給wordcloud庫(kù)一個(gè)由空格分隔的大字符串
(5)配置對(duì)象參數(shù) ①圖片大小
②修改字體
三者結(jié)合可控制字體出現(xiàn)的最小最大字號(hào)以及中間的步進(jìn)間隔
③指定文字字體格式,如:微軟雅黑
④與詞云對(duì)象相關(guān)的參數(shù)
⑤一個(gè)常用有趣的參數(shù)mask(指定詞云形狀)&背景顏色
(6)應(yīng)用實(shí)例 ①英文詞云
import?wordcloud
txt?=?"life?is?short,?you?need?python"
w?=?wordcloud.WordCloud(background_color?=?"white")
w.generate(txt)
w.fo_file("pywcloud.png")

②中文詞云 (中文含有逗號(hào),先用jieba庫(kù)分詞)
import?jieba
import?wordcloud
txt?="程序設(shè)計(jì)語(yǔ)言是計(jì)算機(jī)能夠理解和識(shí)別用戶操作意圖的一種交互體系,它按照特定規(guī)則組織計(jì)算機(jī)指令,使計(jì)算機(jī)能夠自動(dòng)進(jìn)行各種運(yùn)算處理。"
w?=?wordcloud.?wordCloud(?width=1000,?font_path="msyh.ttc",height=700)
w.generate(?"?".join(jieba.lcut(txt)))
w.to_file("pywcloud.png")

1)將這段文本通過(guò)jieba.lcut函數(shù)變成一個(gè)列表 2)進(jìn)一步用join方法將列表中的元素用join前面的空格字符串來(lái)分隔,構(gòu)成一個(gè)長(zhǎng)字符串 3)賦給wordcloud對(duì)象
六、實(shí)例12:政府工作詞云報(bào)告
1.問(wèn)題分析
(1)直觀理解政策文件 ①需求:對(duì)于政府工作報(bào)告等政策文件,如何直觀理解? ②體會(huì)直觀的價(jià)值:生成詞云&優(yōu)化詞云
(2)兩份文件 ①《決勝全面建成小康社會(huì)奪取新時(shí)代中國(guó)特色社會(huì)主義偉大勝利》 https://python123.io/resources/pye/新時(shí)代中國(guó)特色社會(huì)主義.txt ②《中共中央國(guó)務(wù)院關(guān)于實(shí)施鄉(xiāng)村振興戰(zhàn)略的意見(jiàn)》 https://python123.io/resources/pye/關(guān)于實(shí)施鄉(xiāng)村振興戰(zhàn)略的意見(jiàn).txt
2.實(shí)例解析
(1)基本思路 ①步驟1∶讀取文件、分詞整理 ②步驟2∶設(shè)置并輸出詞云 ③步驟3∶觀察結(jié)果,優(yōu)化迭代
(2)代碼實(shí)現(xiàn) ①附碼
import?jieba??#?中文文本需分詞
import?wordcloud
from?scipy.misc?import?imread
mask?=?imread("fivestart.png")??#?能讀取文件并且變成一個(gè)圖片文件表達(dá)的內(nèi)部變量
f?=?open("新時(shí)代中國(guó)特色社會(huì)主義.txt",?"r",?encoding="utf-8")
t?=?f.read()??#?文本內(nèi)容一次性讀入變量t
f.close()
ls?=?jieba.lcut(t)??#?進(jìn)行分詞,結(jié)果保存為列表類型ls
txt?=?"".join(ls)??#?用空格來(lái)將列表的每一個(gè)元素連接起來(lái),形成一個(gè)由空格分隔的長(zhǎng)字符串txt
w?=?wordcloud.WordCloud(font_path?=?"msyh.ttc",mask?=?mask,width?=?1000,height?=?700,?background_color?=?"white")
w.generate(txt)??#?加載文本
w.to_file("grwordcloud.png")??#?生成詞云文件
②效果
③更換另一份文件
④限制輸出詞語(yǔ)數(shù)量 增加:max_words = 15
import?jieba??#?中文文本需分詞
????????import?wordcloud
????????f?=?open("新時(shí)代中國(guó)特色社會(huì)主義.txt",?"r",?encoding="utf-8")
????????t?=?f.read()??#?文本內(nèi)容一次性讀入變量t
????????f.close()
????????ls?=?jieba.lcut(t)??#?進(jìn)行分詞,結(jié)果保存為列表類型ls
????????txt?=?"".join(ls)??#?用空格來(lái)將列表的每一個(gè)元素連接起來(lái),形成一個(gè)由空格分隔的長(zhǎng)字符串txt
????????w?=?wordcloud.WordCloud(font_path?=?"msyh.ttc",width?=?1000,height?=?700,?background_color?=?"white",max_words?=?15)
????????w.generate(txt)??#?加載文本
????????w.to_file("grwordcloud.png")??#?生成詞云文件
效果如圖
(3)生成更有型的詞云(五角星形狀) ①wordcloud庫(kù)提供mask參數(shù),通過(guò)覆蓋的方法可以生成任意形狀的詞云 ②按需求提供背景是白色的五角星圖片 ③為了加載圖片,需引入一個(gè)庫(kù) ④生成wordcloud對(duì)象時(shí)使用mask參數(shù),將之前的mask方法給定到mask參數(shù)中 ⑤代碼
?import?jieba??#?中文文本需分詞
????????import?wordcloud
????????from?scipy.misc?import?imread
????????mask?=?imread("fivestart.png")??#?能讀取文件并且變成一個(gè)圖片文件表達(dá)的內(nèi)部變量
????????f?=?open("新時(shí)代中國(guó)特色社會(huì)主義.txt",?"r",?encoding="utf-8")
????????t?=?f.read()??#?文本內(nèi)容一次性讀入變量t
????????f.close()
????????ls?=?jieba.lcut(t)??#?進(jìn)行分詞,結(jié)果保存為列表類型ls
????????txt?=?"".join(ls)??#?用空格來(lái)將列表的每一個(gè)元素連接起來(lái),形成一個(gè)由空格分隔的長(zhǎng)字符串txt
????????w?=?wordcloud.WordCloud(font_path?=?"msyh.ttc",mask?=?mask,width?=?1000,height?=?700,?background_color?=?"white")
????????w.generate(txt)??#?加載文本
????????w.to_file("grwordcloud.png")??#?生成詞云文件
????????修改三處

⑥效果
3.舉一反三
(1)擴(kuò)展能力 ①了解wordcloud更多參數(shù),擴(kuò)展詞云能力 ②特色詞云:設(shè)計(jì)一款屬于自己的特色詞云風(fēng)格 ③更多文件:用更多文件練習(xí)詞云生成
(2)詞云:快速掌握文本信息
總結(jié)
經(jīng)過(guò)本篇的學(xué)習(xí),可以大致掌握文件類型的操作。運(yùn)用一維、二維數(shù)據(jù)和wordcloud庫(kù)去實(shí)現(xiàn)一些文本的詞云實(shí)現(xiàn)。對(duì)于自動(dòng)化程序,可以通過(guò)不同的自定義方式,進(jìn)行各類接口的對(duì)比和優(yōu)劣,找不同問(wèn)題對(duì)應(yīng)的最適合的接口規(guī)范。


Python“寶藏級(jí)”公眾號(hào)【Python之王】專注于Python領(lǐng)域,會(huì)爬蟲(chóng),數(shù)分,C++,tensorflow和Pytorch等等。
近 2年共原創(chuàng) 100+ 篇技術(shù)文章。創(chuàng)作的精品文章系列有:
日常收集整理了一批不錯(cuò)的?Python?學(xué)習(xí)資料,有需要的小伙可以自行免費(fèi)領(lǐng)取。
獲取方式如下:公眾號(hào)回復(fù)資料。領(lǐng)取Python等系列筆記,項(xiàng)目,書(shū)籍,直接套上模板就可以用了。資料包含算法、python、算法小抄、力扣刷題手冊(cè)和 C++ 等學(xué)習(xí)資料!
