1. 程式人生 > >第10章:Python第三方庫概覽

第10章:Python第三方庫概覽

註明:本系列課程專為全國計算機等級考試二級 Python 語言程式設計考試服務

目錄

考綱考點

知識導圖

1、Python第三方庫的獲取和安裝

pip工具安裝

自定義安裝

檔案安裝

Python第三方庫的獲取和安裝

pip工具使用

2、PyInstaller庫概述

3、PyInstaller庫與程式打包

4、jieba庫概述

5、jieba庫與中文分詞

6、wordcloud庫概述

7、wordcloud庫與視覺化詞雲

8、例項解析:《紅樓夢》人物出場詞雲

本章小結


考綱考點

  • 第三方庫的獲取和安裝
  • 指令碼程式轉變為可執行程式的第三方庫: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工具與作業系統也有關係,在Mac OS X和Linux等作業系統中,pip工具幾乎可以安裝任何Python第三方庫,在Windows作業系統中,有一些第三方庫仍然需要用其他方式嘗試安裝。

自定義安裝

  • 自定義安裝指按照第三方庫提供的步驟和方式安裝。第三方庫都有主頁用於維護庫的程式碼和文件。以科學計算用的numpy為例,開發者維護的官方主頁是:

http://www.numpy.org/

  • 瀏覽該網頁找到下載連結,如下:

http://www.scipy.org/scipylib/download.html

  • 進而根據指示步驟安裝。

檔案安裝

  • 為了解決這類第三方庫安裝問題,美國加州大學爾灣分校提供了一個頁面,幫助Python使用者獲得Windows可直接安裝的第三方庫檔案,連結地址如下:

http://www.lfd.uci.edu/~gohlke/pythonlibs/

  • 這裡以scipy為例說明,首先在上述頁面中找到scipy庫對應的內容。選擇其中的.whl檔案下載,這裡選擇適用於Python 3.5版本直譯器和32位系統的對應檔案: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第三方庫的獲取和安裝

  • 對於上述三種安裝方式,一般優先選擇採用pip工具安裝,如果安裝失敗,則選擇自定義安裝或者檔案安裝。另外,如果需要在沒有網路條件下安裝Python第三方庫,請直接採用檔案安裝方式。其中,.whl檔案可以通過pip download指令在有網路條件的情況下獲得。

pip工具使用

  • 執行 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子命令可以解除安裝一個已經安裝的第三方庫,格式如下:

pip uninstall <擬解除安裝庫名>

  • pip的list子命令可以列出當前系統中已經安裝的第三方庫,格式如下:

pip list

  • pip的show子命令列出某個已經安裝庫的詳細資訊,格式如下:

pip show <擬查詢庫名>

  • pip的download子命令可以下載第三方庫的安裝包,但並不安裝,格式如下:

pip download

  • pip的search子命令可以聯網搜尋庫名或摘要中關鍵字,格式如下:

pip search <擬查詢關鍵字>

  • 以查詢含有installer單詞的庫為例,執行效果如下:
:\>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等作業系統下將Python原始檔打包,變成直接可執行的可執行檔案
  • 通過對原始檔打包,Python程式可以在沒有安裝Python的環境中執行,也可以作為一個獨立檔案方便傳遞和管理。
:\>pip install PyInstaller

3、PyInstaller庫與程式打包

  • 使用PyInstaller庫對Python原始檔打包十分簡單,使用方法如下:

:\>PyInstaller <Python源程式檔名>

  • 執行完畢後,原始檔所在目錄將生成dist和build兩個資料夾。最終的打包程式在dist內部與原始檔同名的目錄中。
  • 可以通過-F引數對Python原始檔生成一個獨立的可執行檔案,如下:

:\>PyInstaller -F <Python源程式檔名>

:\>PyInstaller -F SnowView.py
  • 執行後在dist目錄中出現了SnowView.exe檔案,沒有任何依賴庫,執行它即可顯示雪景效果。
  • PyInstaller有一些常用引數
引數 功能
-h, --help 檢視幫助
--clean 清理打包過程中的臨時檔案
-D, --onedir 預設值,生成dist目錄
-F, --onefile 在dist資料夾中只生成獨立的打包檔案
-i <圖示檔名.ico > 指定打包程式使用的圖示(icon)檔案

4、jieba庫概述

  • 由於中文文字中的單詞不是通過空格或者標點符號分割,中文及類似語言存在一個重要的“分詞”問題。
  • jieba(“結巴”)是Python中一個重要的第三方中文分詞函式庫。
:\>pip install jieba
  • jieba庫的分詞原理是利用一箇中文詞庫,將待分詞的內容與分詞詞庫進行比對,通過圖結構和動態規劃方法找到最大概率的片語。除了分詞,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)是最常用的中文分詞函式,用於精準模式,即將字串分割成等量的中文片語,返回結果是列表型別。
>>>import jieba
>>>ls = jieba.lcut("全國計算機等級考試Python科目")
>>>print(ls)
['全國', '計算機', '等級', '考試', 'Python', '科目']
  • jieba.lcut(s, cut_all = True)用於全模式,即將字串的所有分詞可能均列出來,返回結果是列表型別,冗餘性最大。
>>>import jieba
>>>ls = jieba.lcut("全國計算機等級考試Python科目", cut_all=True)
>>>print(ls)
['全國', '國計', '計算', '計算機', '算機', '等級', '考試',
'Python', '科目']
  • jieba.lcut_for_search(s)返回搜尋引擎模式,該模式首先執行精確模式,然後再對其中長詞進一步切分獲得最終結果。
>>>import jieba
>>>ls = jieba.lcut_for_search("全國計算機等級考試Python科目")
>>>print(ls)
['全國', '計算', '算機', '計算機', '等級', '考試', 'Python', '科
目']
  • 搜尋引擎模式更傾向於尋找短詞語,這種方式具有一定冗餘度,但冗餘度相比全模式較少。
  • 如果希望對文字準確分詞,不產生冗餘,只能選擇jieba.lcut(s)函式,即精確模式。如果希望對文字分詞更準確,不漏掉任何可能的分詞結果,請選用全模式。如果沒想好怎麼用,可以使用搜索引擎模式。
  • jieba.add_word()函式,顧名思義,用來向jieba詞庫增加新的單詞。
>>>import jieba
>>>jieba.add_word("Python科目")
>>>ls = jieba.lcut("全國計算機等級考試Python科目")
>>>print(ls)
['全國', '計算機', '等級', '考試', 'Python科目']

6、wordcloud庫概述

  • 詞雲以詞語為基本單元,根據其在文字中出現的頻率設計不同大小以形成視覺上不同效果,形成“關鍵詞雲層”或“關鍵詞渲染”,從而使讀者只要“一瞥”即可領略文字的主旨。
  • wordcloud庫是專門用於根據文字生成詞雲的Python第三方庫,十分常用且有趣。
  • 裝wordcloud庫在Windows的cmd命令列使用如下命令:
:\>pip install wordcloud
  • wordcloud庫的使用十分簡單,以一個字串為例。其中,產生詞雲只需要一行語句,在第三行,並可以將詞雲儲存為圖片。
>>>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預設會以空格或標點為分隔符對目標文字進行分詞處理。對於中文文字,分詞處理需要由使用者來完成。一般步驟是先將文字分詞處理,然後以空格拼接,再呼叫wordcloud庫函式。
import jieba
from wordcloud import WordCloud
txt = '程式設計語言是計算機能夠理解和識別使用者操作意圖的一種互動體系,它按
照特定規則組織計算機指令,使計算機能夠自動進行各種運算處理。'
words = jieba.lcut(txt) # 精確分詞
newtxt = ' '.join(words) # 空格拼接
wordcloud = WordCloud(font_path="msyh.ttc").generate(newtxt)
wordcloud.to_file('詞雲中文例子圖.png') # 儲存圖片
  • wordcloud庫的核心是WordColoud類,所有的功能都封裝在WordCloud類中。使用時需要例項化一個WordColoud類的物件,並呼叫其generate(text)方法將text文字轉化為詞雲。
  • WordCloud物件建立的常用引數
引數 功能
font_path 指定字型檔案的完整路徑,預設None
width 生成圖片寬度,預設400畫素
height 生成圖片高度,預設200畫素
mask 詞雲形狀,預設None,即,方形圖
min_font_size 詞雲中最小的字型字號,預設4號
font_step 字號步進間隔,預設1
min_font_size 詞雲中最大的字型字號,預設None,根據高度自動調節
max_words 詞雲圖中最大詞數,預設200
stopwords 被排除詞列表,排除詞不在詞雲中顯示
background_color 圖片背景顏色,預設黑色
  • WordCloud類的常用方法
方法 功能
generate(text) 由text文字生成詞雲
to_file(filename) 將詞雲圖儲存為名為filename的檔案
  • 下面以Alice夢遊仙境為例,展示引數、方法的使用。

 

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型別,用於後面傳遞給mask引數使用。(這個庫函式隸屬於scipy庫,pip在安裝wordcloud庫時會自動安裝依賴庫。)

8、例項解析:《紅樓夢》人物出場詞雲

  • 《紅樓夢》是一本鴻篇鉅著,裡面出現了幾百個各具特色的人物。每次讀這本經典作品都會想一個問題,全書這些人物誰出場最多呢?一起來用Python回答這個問題吧。
  • 人物出場統計涉及對詞彙的統計。中文文章需要分詞才能進行詞頻統計,這需要用到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: #排除單個字元的分詞結果
        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的單詞,執行程式後,輸出結果如下:
>>>
寶玉 3748
什麼 1613
一個 1451
賈母 1228
我們 1221
那裡 1174
鳳姐 1100
王夫人 1011
你們 1009
如今 999
說道 973
知道 967
老太太 966
起來 949
姑娘 941
  • 與英文詞頻統計類似,需要排除一些人名無關詞彙,如“什麼”、“一個”等。
# CalStoexcludes = {"什麼","一個","我們","那裡","你們","如今", \
            "說道","知道","老太太","起來","姑娘","這裡", \
            "出來","他們","眾人","自己","一面","太太", \
            "只見","怎麼","奶奶","兩個","沒有","不是", \
            "不知","這個","聽見"}
for word in excludes:
    del(counts[word])
  • 輸出排序前5的單詞,執行程式後,輸出結果如下:
>>>
寶玉     3748
賈母     1228
鳳姐     1100
王夫人   1011
賈璉     670
  • 結合已經將結果的詞雲效果,利用wordcloud庫,將人物出場統計以詞雲的方式展現出來
  • 使用jieba庫進行分詞,所不同的是,分詞後的結果以空格重新拼接為文字,並由wordcloud進一步處理。無關詞彙的排除也也可以藉助wordcloud中的stopwords引數完成。
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')

  • 可以看到,輸出結果有很多無關詞彙,人物出現並不明顯。這說明直接採用分詞方式並不能較好達到預期效果。
  • 結合對人物出場的前期統計結果, 可以將max_words=200引數改為max_words=5,獲得前5個出場次數最多人物組成的詞雲。

  • 可以看到,wordcloud庫具備基本的統計和排序功能,可以配合分詞、整合、排除等功能,合理調整詞雲設定引數將產生不同的視覺化效果,文字過多或過少都不會有太好效果。

本章小結

本章介紹了利用Python第三方庫程式設計的模組程式設計思想和計算生態的理解和運用,並進一步講解了如何使用jieba詞庫對中文文件進行分詞並進一步統計文件詞頻。

本章主要圍繞Python第三方庫,講解了第三方庫獲取和安裝方法,並詳細介紹了PyInstaller程式打包功能、jieba中文分詞功能和
wordcloud詞雲視覺化功能等3個具體第三方庫的使用。通過《紅樓夢》人物出場統計和詞雲效果展示例項幫助讀者熟練掌握這3個Python第三方庫的具體使用方法。

古籍中外名著名篇甚多,除了《紅樓夢》,還對哪些內容感興趣?詞頻統計、人物統計、詞雲效果,來套組合拳吧!