注明:本系列課程專為全國計算機等級考試二級 Python 語言程序設計考試服務
目錄
考綱考點
第三方庫的獲取和安裝
腳本程序轉(zhuǎn)變?yōu)榭蓤?zhí)行程序的第三方庫:PyInstaller庫(必選)
第三方庫: jieba庫(必選)、wordcloud庫(可選)
知識導圖
1、Python第三方庫的獲取和安裝
Python第三方庫依照安裝方式靈活性和難易程度有三個方法:pip工具安裝、自定義安裝和文件安裝。
pip工具安裝
最常用且最高效的Python第三方庫安裝方式是采用pip工具安裝。pip是Python官方提供并維護的在線第三方庫安裝工具。
pip install <擬安裝庫名>
:\>pip install pygame
...
Installing collected packages: pygame
Successfully installed pygame-1.9.2b1
pip是Python第三方庫最主要的安裝方式,可以安裝超過90%以上的第三方庫。然而,還有一些第三方庫無法暫時用pip安裝,此時,需要其他的安裝方法。
pip工具與操作系統(tǒng)也有關系,在Mac OS X和Linux等操作系統(tǒng)中,pip工具幾乎可以安裝任何Python第三方庫,在Windows操作系統(tǒng)中,有一些第三方庫仍然需要用其他方式嘗試安裝。
自定義安裝
自定義安裝指按照第三方庫提供的步驟和方式安裝。第三方庫都有主頁用于維護庫的代碼和文檔。以科學計算用的numpy為例,開發(fā)者維護的官方主頁是:
http://www.numpy.org/瀏覽該網(wǎng)頁找到下載鏈接,如下:
http://www.scipy.org/scipylib/download.html進而根據(jù)指示步驟安裝。
文件安裝
為了解決這類第三方庫安裝問題,美國加州大學爾灣分校提供了一個頁面,幫助Python用戶獲得Windows可直接安裝的第三方庫文件,鏈接地址如下:
http://www.lfd.uci.edu/~gohlke/pythonlibs/這里以scipy為例說明,首先在上述頁面中找到scipy庫對應的內(nèi)容。選擇其中的.whl文件下載,這里選擇適用于Python 3.5版本解釋器和32位系統(tǒng)的對應文件:scipy-0.17.1-cp35-cp35m-win32.whl, 下載該文件到 D:\pycodes 目錄。
然后,采用pip命令安裝該文件。
:\>pip install D:\pycodes\scipy-0.17.1-cp35-cp35m-win32.whl
Processing d:\pycodes\scipy-0.17.1-cp35-cp35m-win32.whl
Installing collected packages: scipy
Successfully installed scipy-0.17.1
Python第三方庫的獲取和安裝
對于上述三種安裝方式,一般優(yōu)先選擇采用pip工具安裝,如果安裝失敗,則選擇自定義安裝或者文件安裝。另外,如果需要在沒有網(wǎng)絡條件下安裝Python第三方庫,請直接采用文件安裝方式。其中,.whl文件可以通過pip download指令在有網(wǎng)絡條件的情況下獲得。
pip工具使用
執(zhí)行 pip -h 將列出pip常用的子命令
:\>pip -h
Usage:
pip <command> [options]
Commands:
install Install packages.
download Download packages.
uninstall Uninstall packages.
freeze Output installed packages in requirements format.
list List installed packages.
show Show information about installed packages.
search Search PyPI for packages.
wheel Build wheels from your requirements.
hash Compute hashes of package archives.
completion A helper command used for command completion
help Show help for commands.
pip支持安裝(install)、下載(download)、卸載(uninstall)、列表(list)、查看(list)、查找(search)等一系列安裝和維護子命令。
pip的uninstall子命令可以卸載一個已經(jīng)安裝的第三方庫,格式如下:
pip uninstall <擬卸載庫名>
pip的list子命令可以列出當前系統(tǒng)中已經(jīng)安裝的第三方庫,格式如下:
pip list
pip的show子命令列出某個已經(jīng)安裝庫的詳細信息,格式如下:
pip show <擬查詢庫名>
pip的download子命令可以下載第三方庫的安裝包,但并不安裝,格式如下:
pip download
pip的search子命令可以聯(lián)網(wǎng)搜索庫名或摘要中關鍵字,格式如下:
pip search <擬查詢關鍵字>
以查詢含有installer單詞的庫為例,執(zhí)行效果如下:
:\>pip search installer
winbrew (1.1.7) - Native package installer for Windows
pygitflow-avh (1.2.0) - Pythonic Installer for Git Flow
(AVH Edition).
notouch (0.3) - Notouch Physical Machine
Installer Automation Service
2、PyInstaller庫概述
PyInstaller是一個十分有用的Python第三方庫,它能夠在Windows、Linux、Mac OS X等操作系統(tǒng)下將Python源文件打包,變成直接可運行的可執(zhí)行文件。
通過對源文件打包,Python程序可以在沒有安裝Python的環(huán)境中運行,也可以作為一個獨立文件方便傳遞和管理。
:\>pip install PyInstaller3、PyInstaller庫與程序打包
使用PyInstaller庫對Python源文件打包十分簡單,使用方法如下:
:\>PyInstaller <Python源程序文件名>
執(zhí)行完畢后,源文件所在目錄將生成dist和build兩個文件夾。最終的打包程序在dist內(nèi)部與源文件同名的目錄中。
可以通過-F參數(shù)對Python源文件生成一個獨立的可執(zhí)行文件,如下:
:\>PyInstaller -F <Python源程序文件名>
:\>PyInstaller -F SnowView.py執(zhí)行后在dist目錄中出現(xiàn)了SnowView.exe文件,沒有任何依賴庫,執(zhí)行它即可顯示雪景效果。
PyInstaller有一些常用參數(shù)
參數(shù) 功能
-h, --help 查看幫助
--clean 清理打包過程中的臨時文件
-D, --onedir 默認值,生成dist目錄
-F, --onefile 在dist文件夾中只生成獨立的打包文件
-i <圖標文件名.ico > 指定打包程序使用的圖標(icon)文件
4、jieba庫概述
由于中文文本中的單詞不是通過空格或者標點符號分割,中文及類似語言存在一個重要的“分詞”問題。
jieba(“結(jié)巴”)是Python中一個重要的第三方中文分詞函數(shù)庫。
:\>pip install jiebajieba庫的分詞原理是利用一個中文詞庫,將待分詞的內(nèi)容與分詞詞庫進行比對,通過圖結(jié)構和動態(tài)規(guī)劃方法找到最大概率的詞組。除了分詞,jieba還提供增加自定義中文單詞的功能。
jieba庫支持三種分詞模式:精確模式,將句子最精確地切開,適合文本分析;全模式,把句子中所有可以成詞的詞語都掃描出來,速度非???,但是不能解決歧義;搜索引擎模式,在精確模式基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。
對中文分詞來說,jieba庫只需要一行代碼即可。
>>>import jieba
>>>jieba.lcut("全國計算機等級考試")
Building prefix dict from the default dictionary ...
Loading model from cache C:\AppData\Local\Temp\jieba.cache
Loading model cost 1.001 seconds.
Prefix dict has been built succesfully.
['全國', '計算機', '等級', '考試']
5、jieba庫與中文分詞
jieba.lcut(s)是最常用的中文分詞函數(shù),用于精準模式,即將字符串分割成等量的中文詞組,返回結(jié)果是列表類型。
>>>import jieba
>>>ls = jieba.lcut("全國計算機等級考試Python科目")
>>>print(ls)
['全國', '計算機', '等級', '考試', 'Python', '科目']
jieba.lcut(s, cut_all = True)用于全模式,即將字符串的所有分詞可能均列出來,返回結(jié)果是列表類型,冗余性最大。
>>>import jieba
>>>ls = jieba.lcut("全國計算機等級考試Python科目", cut_all=True)
>>>print(ls)
['全國', '國計', '計算', '計算機', '算機', '等級', '考試',
'Python', '科目']
jieba.lcut_for_search(s)返回搜索引擎模式,該模式首先執(zhí)行精確模式,然后再對其中長詞進一步切分獲得最終結(jié)果。
>>>import jieba
>>>ls = jieba.lcut_for_search("全國計算機等級考試Python科目")
>>>print(ls)
['全國', '計算', '算機', '計算機', '等級', '考試', 'Python', '科
目']
搜索引擎模式更傾向于尋找短詞語,這種方式具有一定冗余度,但冗余度相比全模式較少。
如果希望對文本準確分詞,不產(chǎn)生冗余,只能選擇jieba.lcut(s)函數(shù),即精確模式。如果希望對文本分詞更準確,不漏掉任何可能的分詞結(jié)果,請選用全模式。如果沒想好怎么用,可以使用搜索引擎模式。
jieba.add_word()函數(shù),
顧名思義,用來向jieba詞庫增加新的單詞。
>>>import jieba
>>>jieba.add_word("Python科目")
>>>ls = jieba.lcut("全國計算機等級考試Python科目")
>>>print(ls)
['全國', '計算機', '等級', '考試', 'Python科目']
6、wordcloud庫概述
詞云以詞語為基本單元,根據(jù)其在文本中出現(xiàn)的頻率設計不同大小以形成視覺上不同效果,形成“關鍵詞云層”或“關鍵詞渲染”,從而使讀者只要“一瞥”即可領略文本的主旨。
wordcloud庫是專門用于根據(jù)文本生成詞云的Python第三方庫,十分常用且有趣。
裝wordcloud庫在Windows的cmd命令行使用如下命令:
:\>pip install wordcloudwordcloud庫的使用十分簡單,以一個字符串為例。其中,產(chǎn)生詞云只需要一行語句,在第三行,并可以將詞云保存為圖片。
>>>from wordcloud import WordCloud
>>>txt='I like python. I am learning python'
>>>wordcloud = WordCloud().generate(txt)
>>>wordcloud.to_file('testcloud.png')
<wordcloud.wordcloud.WordCloud object at 0x000001583E26D208>
7、wordcloud庫與可視化詞云
在生成詞云時,wordcloud默認會以空格或標點為分隔符對目標文本進行分詞處理。對于中文文本,分詞處理需要由用戶來完成。一般步驟是先將文本分詞處理,然后以空格拼接,再調(diào)用wordcloud庫函數(shù)。
import jieba
from wordcloud import WordCloud
txt = '程序設計語言是計算機能夠理解和識別用戶操作意圖的一種交互體系,它按
照特定規(guī)則組織計算機指令,使計算機能夠自動進行各種運算處理。'
words = jieba.lcut(txt) # 精確分詞
newtxt = ' '.join(words) # 空格拼接
wordcloud = WordCloud(font_path="msyh.ttc").generate(newtxt)
wordcloud.to_file('詞云中文例子圖.png') # 保存圖片
wordcloud庫的核心是WordColoud類,所有的功能都封裝在WordCloud類中。使用時需要實例化一個WordColoud類的對象,并調(diào)用其generate(text)方法將text文本轉(zhuǎn)化為詞云。
WordCloud對象創(chuàng)建的常用參數(shù)
參數(shù) 功能
font_path 指定字體文件的完整路徑,默認None
width 生成圖片寬度,默認400像素
height 生成圖片高度,默認200像素
mask 詞云形狀,默認None,即,方形圖
min_font_size 詞云中最小的字體字號,默認4號
font_step 字號步進間隔,默認1
min_font_size 詞云中最大的字體字號,默認None,根據(jù)高度自動調(diào)節(jié)
max_words 詞云圖中最大詞數(shù),默認200
stopwords 被排除詞列表,排除詞不在詞云中顯示
background_color 圖片背景顏色,默認黑色
WordCloud類的常用方法
方法 功能
generate(text) 由text文本生成詞云
to_file(filename) 將詞云圖保存為名為filename的文件
下面以Alice夢游仙境為例,展示參數(shù)、方法的使用。
from wordcloud import WordCloud
from scipy.misc import imread
mask = imread('AliceMask.png')
with open('AliceInWonderland.txt', 'r', encoding='utf-8') as file:
text = file.read()
wordcloud = WordCloud(background_color="white", \
width=800, \
height=600, \
max_words=200, \
max_font_size=80, \
mask = mask, \
).generate(text)
# 保存圖片
wordcloud.to_file('AliceInWonderland.png')
其中,from scipy.misc import imread一行用于將AliceMask.png讀取為nd-array類型,用于后面?zhèn)鬟f給mask參數(shù)使用。(這個庫函數(shù)隸屬于scipy庫,pip在安裝wordcloud庫時會自動安裝依賴庫。)
8、實例解析:
《紅樓夢》人物出場詞云
《紅樓夢》是一本
鴻篇巨著,里面出現(xiàn)了幾百個各具特色的人物。每次讀這本經(jīng)典作品都會想一個問題,全書這些人物誰出場最多呢?一起來用Python回答這個問題吧。
人物出場統(tǒng)計涉及對詞匯的統(tǒng)計。中文文章需要分詞才能進行詞頻統(tǒng)計,這需要用到jieba庫。
# CalStoryOfStone.py
import jieba
f = open("紅樓夢.txt", "r")
txt = f.read()
f.close()
words = jieba.lcut(t)
counts = {}
for word in words:
if len(word) == 1: #排除單個字符的分詞結(jié)果
continue
else:
counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(15):
word, count = items[i]
print ("{0:<10}{1:>5}".format(word, count))
先輸出排序前15的單詞,運行程序后,輸出結(jié)果如下:
>>>
寶玉 3748
什么 1613
一個 1451
賈母 1228
我們 1221
那里 1174
鳳姐 1100
王夫人 1011
你們 1009
如今 999
說道 973
知道 967
老太太 966
起來 949
姑娘 941
與英文詞頻統(tǒng)計類似,需要排除一些人名無關詞匯,如“什么”、“一個”等。
# CalStoexcludes = {"什么","一個","我們","那里","你們","如今", \
"說道","知道","老太太","起來","姑娘","這里", \
"出來","他們","眾人","自己","一面","太太", \
"只見","怎么","奶奶","兩個","沒有","不是", \
"不知","這個","聽見"}
for word in excludes:
del(counts[word])
輸出排序前5的單詞,運行程序后,輸出結(jié)果如下:
>>>
寶玉 3748
賈母 1228
鳳姐 1100
王夫人 1011
賈璉 670
結(jié)合已經(jīng)將結(jié)果的詞云效果,利用wordcloud庫,將人物出場統(tǒng)計以詞云的方式展現(xiàn)出來
使用jieba庫進行分詞,所不同的是,分詞后的結(jié)果以空格重新拼接為文本,并由wordcloud進一步處理。無關詞匯的排除也也可以借助wordcloud中的stopwords參數(shù)完成。
import jieba
from wordcloud import WordCloud
excludes = {"什么","一個","我們","那里","你們","如今", \
"說道","知道","老太太","起來","姑娘","這里", \
"出來","他們","眾人","自己","一面","太太", \
"只見","怎么","奶奶","兩個","沒有","不是", \
"不知","這個","聽見"}
f = open("紅樓夢.txt", "r")
txt = f.read()
f.close()
words = jieba.lcut(txt)
newtxt = ' '.join(words)
wordcloud = WordCloud(background_color="white", \
width=800, \
height=600, \
font_path="msyh.ttc", \
max_words=200, \
max_font_size=80, \
stopwords = excludes, \
).generate(newtxt)
wordcloud.to_file('紅樓夢基本詞云.png')
可以看到,輸出結(jié)果有很多無關詞匯,人物出現(xiàn)并不明顯。這說明直接采用分詞方式并不能較好達到預期效果。
結(jié)合對人物出場的前期統(tǒng)計結(jié)果, 可以將max_words=200參數(shù)改為max_words=5,獲得前5個出場次數(shù)最多人物組成的詞云。
可以看到,wordcloud庫具備基本的統(tǒng)計和排序功能,可以配合分詞、整合、排除等功能,合理調(diào)整詞云設置參數(shù)將產(chǎn)生不同的可視化效果,文字過多或過少都不會有太好效果。
本章小結(jié)
本章介紹了利用Python第三方庫編程的模塊編程思想和計算生態(tài)的理解和運用,并進一步講解了如何使用jieba詞庫對中文文檔進行分詞并進一步統(tǒng)計文檔詞頻。
本章主要圍繞Python第三方庫,講解了第三方庫獲取和安裝方法,并詳細介紹了PyInstaller程序打包功能、jieba中文分詞功能和
wordcloud詞云可視化功能等3個具體第三方庫的使用。通過《紅樓夢》人物出場統(tǒng)計和詞云效果展示實例幫助讀者熟練掌握這3個Python第三方庫的具體使用方法。
古籍中外名著名篇甚多,除了《紅樓夢》,還對哪些內(nèi)容感興趣?詞頻統(tǒng)計、人物統(tǒng)計、詞云效果,來套組合拳吧!