製作文宣、簡報使用Canva真的是非常輕鬆愉快的經驗
但匯入的圖形有時會有去除背景的需求
以往都需要應用一些去除背景的工具先行「加工」一下
現在Canva職鳩提供了這項「背景移除工具」好用的功能
讓你在製作簡報時,即時就能針對需求進行圖片的背景移除任務
讓你的編輯及思緒不至於中斷~~~讚!!
錄製一小段操作示範供大家參考:(簡單操作,就不加入聲音了)
製作文宣、簡報使用Canva真的是非常輕鬆愉快的經驗
但匯入的圖形有時會有去除背景的需求
以往都需要應用一些去除背景的工具先行「加工」一下
現在Canva職鳩提供了這項「背景移除工具」好用的功能
讓你在製作簡報時,即時就能針對需求進行圖片的背景移除任務
讓你的編輯及思緒不至於中斷~~~讚!!
錄製一小段操作示範供大家參考:(簡單操作,就不加入聲音了)
Canva原先接觸到的時候,只是一個方便進行美工、簡報設計的網站
但近來愈來愈強化的應用功能,讓人更加欣賞與倚重了
除了對於教育人員提供了無限制的pro功能外,一些專注於教育現場應用的範本也相當貼心
現在對於遠距(線上)教學應用的功能也更加完善、便利
這次專注於線上影片與螢幕錄製的功能測試做整理~~發現這塊的應用在Canva中設計、發揮的空間相當完善、方便!
特地作了一些測試與整理~~簡單的放上來分享給同業公會參考!
這篇很簡短~~主要就是紀錄一下如何使用設計完善、方便的「氣象資料開放平台」。
順道整理與介紹一下json的操作及迴圈操作概念。主要還是因為氣象資料實用、常見~相當適合作為練習之用。
這篇python程式內容很簡要,最主要的準備工作其實是:要先去完成「氣象資料開放平台」的會員註冊,並找到所需要的氣象資料API。這樣工作就差不多做完了~~剩下的就是Python的語法操作練習與迴圈概念。
好囉~~先看「氣象資料開放平台」這真是個設計得很完善的開放資料平台,先給個讚👍
程序上~~就是註冊→獲取使用者授權碼→尋找所需資料→設定資料→取得呼叫網址
幾個步驟~~本篇就以如何取得「三十六小時天氣與報資訊」為例進行操作。(平台操作內容就請自行參考下圖進行練習~~就是網站操作而已,就不多做說明了~~打字好累😓)
繼上次開喝Gin之後~~這次開始試著讓Gin發揮更實際的效用~~簡單介紹一下如何應用Gin這個好用的框架來建置網站!
同樣的~~我們這種非專業人士,就先不在意如何去將程式寫得多專業、多「冠冕堂皇」~~先著重如何簡單、明瞭的使用!所以~專業人士請無視,謝謝啦!
好囉~~~這次繼上次的開喝之後,接著來談如何在網站內添加網站內容!
這次先談以下四種情況:
1.如何在網頁上呈現「單純」的文字訊息。
2.如何設定Gin的HTML模板。
3.如何呼叫HTML模板。
4.如何將參數(資料)傳遞給HTML模板並呈現。
基本上若能按部就班走到第4點~~那後續就是如何將「整批」資訊(如多組使用者資訊、或是資料庫內容讀取等等)丟給HTML去呈現,這部分就放到下一次再做整理囉!(一次寫太多~太亂也太累~呵!)
一樣~~直接先上程式碼🐎了~~看得懂的就直接試試看吧!
package main
import (
"github.com/gin-gonic/gin"
)
func hello(c *gin.Context) {
c.String(200, "歡迎蒞臨GoLang Gin示範網站")
}
func home(c *gin.Context) {
c.HTML(200, "index.html", "")
}
func welcome(c *gin.Context) {
c.String(200, "歡迎蒞臨GoLang Gin旗艦示範中心")
}
func login(c *gin.Context) {
data := "Wan Chih-Hsiang"
c.HTML(200, "login.html", gin.H{
"data": data,
})
}
func main() {
s := gin.Default()
s.LoadHTMLGlob("templates/*")
s.GET("/", hello)
s.GET("/home", home)
s.GET("/welcome", welcome)
s.GET("/login", login)
s.Run(":8080") // listen and serve on 0.0.0.0:8080
}
簡單註記一下其中幾個重點,方便回想!
對應上述四種本文要介紹的情形~~
跟python比起來~~GoLang真的是比較精簡,重複性的東西幾乎是不太會出現的!
相對python而言,個人覺得GoLang更重視如何提供一個良好的「鍋子」讓「廚師」盡情發揮自身的廚藝及創意。而python則是著重於提供各式各樣的廚具,讓每個人不需具備太多廚藝就可以享受烹飪的樂趣!
針對之前談到的SLICE,在GoLang中不像python的list提供了許多函式可供應用的函式進行操作與應用,如:刪除、查詢、轉換等等~~,這些在GoLang中似乎認為可經由程式設計人員透過自身需求,進行設計即可有效解決,就無需代勞提供相關函式庫,提供最大的彈性空間給設計人員自行思考、設計!
就這觀點而言,自己操作起來~~發現其實:就程式設計的邏輯思維能力訓練而言,GoLang似乎比Python更加適合進行邏輯思維能力的訓練與思考!(純粹個人感受~~😏)
好囉~~~接續上一篇關於slice的相關基本設定,這一篇整理一些關於slice的複製、篩選、替換、排序等相關操作練習紀錄!
好了~~~直接上程式碼🐎時間
package main
import (
"fmt"
"sort"
)
func main() {
//array設定
var a1 = [5]string{"PHP", "ASP.NET", "JAVA", "Pyhton", "GoLang"}
//slice設定方式
var s1 = []string{"ASP", "PHP", "ASP.NET", "JAVA", "Pyhton", "GoLang"}
var s2 []string
s3 := []int{10, 50, 30, 60, 40, 20}
//GoLang不像python有針對slice刪除等相關函數,而是透過slice的操作功能進行類似刪除的相關操作
fmt.Println(a1[2:4])
s4 := make([]string, 3) //創建一個有3組元素的slice
copy(s4, s1[2:5])
fmt.Println(s4)
fmt.Println(s1[:5])
s2 = append(s1[:2], s1[4:]...) //去除原slice中的"ASP.NET" "JAVA"二個元素
fmt.Println(s2)
//SLICE元素排序操作
fmt.Printf("排序前的s3:%v \n", s3)
sort.Ints(s3) //整數型slice排序方法
fmt.Printf("排序後的s3:%v \n", s3)
fmt.Printf("排序後最大值、最小值:%d、%d \n", s3[len(s3)-1], s3[0])
sort.Strings(s2) //文字型slice排序方法
fmt.Printf("string類型的slice也可以排序:%v \n", s2)
for k, v := range s2 {
fmt.Printf("slice s2的k,v分別為:%d, %s \n", k, v)
}
s2[0] = "java" //元素替換
fmt.Println(s2)
//達成s3內每個元素*2的作法
for k, v := range s3 {
s3[k] = v * 2
}
fmt.Println(s3)
//應用map函式產生類似字典檔對應表簡易操作示範
s5 := map[string]int{
s1[0]: s3[0],
s1[1]: s3[1],
s1[2]: s3[2],
s1[3]: s3[3],
}
fmt.Println(s5)
fmt.Println(s5["ASP"]) //不存在的對應值為0
fmt.Println(s5["java"])
}
執行結果截圖如下供參:
當然在實際操作及應用上,仍有相關函式可供配合進行相關操作與設計應用,這些應用就留在後續進行相關專案設計時,有機會再做整理、分享了!
好囉~~這次就先到這裡告一段落!!
在Python中,處理數據及資料時,list是個相當實用的工具,也提供許多好用的函式供相關操作與應用!
同樣的,在GoLang的學習中,我也將這部分列為練習的重點之一!
在GoLang中,對於數據及資料組的處理上,有array及slice可供應用,不過在實際處理動態資料及數據時,似乎slice出場的機會會比較高一些!而且二者的操作都還挺相似的,相干操作概念是可以延伸的!所以我就將重點放在slice上了!
好囉~~這次先將一些有關array、slice的基本設定方式及操作,先做一些整理!
後面再針對slice的應用操作另作整理!當然若要實際應用,還是建議自己設計個專案進行實務上的操作,幫助會最大!
package main
import "fmt"
func main() {
//array設定
var a1 = [5]string{"PHP", "ASP.NET", "JAVA", "Pyhton", "GoLang"}
//slice設定方式
var s1 = []string{"ASP", "PHP", "ASP.NET", "JAVA", "Pyhton", "GoLang"}
var s2 []string
s3 := []int{10, 20, 30, 40, 50}
fmt.Println(a1[4])
fmt.Println(len(s1))
s2 = append(s2, "python", "GoLang")
s4 := make([]string, 1) //創建一個只有1組元素的slice
copy(s4, s2) //因為s4只有一組元素,所以copy過來只會有一組元素
fmt.Println(s4)
s4 = append(s2, s1...) //合併二個slice要在後面加上...三個點是解構的意思
fmt.Println(s4)
fmt.Println(append(s4, "Go"))
for _, v := range s3 {
fmt.Println(v)
}
}
上述程式執行結果如下:
這次就先整理到這裡告一段落!!
Gin是目前相當受歡迎與推薦的Web Framework。(https://github.com/gin-gonic/gin)
這篇開始試著開喝、玩玩~~紀錄一下學習歷程!
★首先~~先安裝Gin:$ go get -u github.com/gin-gonic/gin
★★接著當然是試喝看看囉~~~先來個最單純的網站跑起來看看~上網站程式碼🐎囉......
package main
import (
"github.com/gin-gonic/gin"
)
func hello(c *gin.Context) {
c.String(200, "歡迎蒞臨GoLang Gin示範網站")
}
func main() {
s := gin.Default()
s.GET("/", hello)
s.Run(":8888") // 設定網站執行埠
}
十來行,一個驚天動地泣鬼神的網站(連Apache戰鬥機都不必出動)就面世了~~讚👍
啟動(run)之後如下:Go Go Go~~~
檔案處理通常是我個人在學習語言上,在接觸一些基礎與法之後,會接續關心與練習的應用之一!
這此就先整理一些有關檔案處理及資訊獲取的基本操作!
相關說明都標註在程式碼中了~~就不用再贅述浪費篇幅了!
一樣直接上程式碼🐎吧.............
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
w := []byte("Hello GoLang!\n我是被寫入的資料內容")
fw, _ := os.OpenFile("file1.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
//os.O_CREATE|os.O_RDWR|os.O_APPEND → 可創建|可讀寫|接續新增內容(非覆寫模式)
defer fw.Close()
fw.Write(w)
state, _ := fw.Stat() //獲取檔案相關資訊
fmt.Println("檔案名稱:", state.Name())
fmt.Println("檔案大小:", state.Size())
fmt.Println("檔案最後修改時間:", state.ModTime())
//ioutil.WriteFile("file1.txt", w, 0666) //這種寫入方式會覆蓋原檔案內容
f, _ := ioutil.ReadFile("file1.txt")
fmt.Printf("文字檔案內容:%s", string(f))
}
檔案執行結果:
這次依然是將之前python下載圖片的操作,試著使用Go來玩玩看!
不得不說啊~~Go果然是為著網路而生!
從上一篇用Go擷取網路新聞的操作,到這篇的網路圖片下載操作~都讓人感到一陣順心如意啊~~哈!
另外~~透過Go mod的模組管理機制,在編寫程式過程,Go也會自動引入(import)相關的模組~相當smart、便利!
這次依然示範下載google Doodle 網站中的:
https://www.google.com/logos/doodles/2021/first-day-of-school-2021-january-04-6753651837108833-2x.png好囉~~~一樣直接上程式碼🐎囉......
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"strings"
)
func main() {
url := "https://www.google.com/logos/doodles/2021/first-day-of-school-2021-january-04-6753651837108833-2x.png"
path := strings.Split(url, "/")
name := path[len(path)-1]
out, _ := os.Create(name)
defer out.Close()
r, _ := http.Get(url)
defer r.Body.Close()
pic, _ := ioutil.ReadAll(r.Body)
io.Copy(out, bytes.NewReader(pic))
//out.Write(pic)
fmt.Printf("檔案:%s下載完成!", name)
}
使用起來算是相當便捷!
解讀一下程式,基本上一樣是透過幾個步驟~~~
1.解析獲取圖檔名:14~15行
之前剛接觸Go時,還在大約1.8左右的版本
這次安裝已經來到1.17了👀😅
而GoLang在1.11之後,加入了模組管理功能~~~go.mod
讓Go在管理模組上,方便許多~~也是在開始使用GoLang之前應該要認識的基礎之一!
如果是使用JetBrains GoLand做為開發的IDE的話,基本上~當你開始一個新的專案時,GoLang會自動幫你設定go.mod這個模組管理檔案!
但假如是使用VS Code 等其他的IDE編輯開發工具,可能就需要自行去設定go.mod模組管理功能囉!
起始設定go.mod模組管理方式:「go mod init 資料夾名稱」
------------------------------------
例如:新開了一個專案的資料夾:「hello」
則可以使用終端機(命令提示字元)模式,在該目錄下,輸入:go mod init hello
這樣日後當你安裝(get)新的模組時,go.mod就會自動為你紀錄模組的相依性資訊!
之前(一年前了~~我咧)用python的BS4練習了簡單的udn新聞網頁擷取、分析
這次趁著玩GoLang的機會,也想試試看如何用Go來完成同樣的工作。畢竟Go就是為網路而生啊~對於網路應用方面應該是更加得心應手吧!呵~~自己不負責任的胡亂猜想
好了~~不廢話了!
這次呢~~用了goquery這個模組來進行網頁內容的分析,功能就類似python中BS4模組的功能。
正好可以順道介紹一下,在Go裡面安裝模組的方式:
go get 模組名稱
=====================================================
首先:這次要安裝的goquery安裝方式如下:在終端機(命令提示字元)下輸入
go get github.com/PuerkitoBio/goquery
基本上~~goquery的使用,分成以下幾個步驟:
1.取得網頁內容: func NewDocumentFromReader(r io.Reader) (*Document, error)
2.設定查詢條件:func (s *Selection) Find(selector string) *Selection
3.獲取查詢結果:func (s *Selection) Find(selector string) *Selection
4.提取所需的網頁元素:func (s *Selection) Attr(attrName string) (val string, exists bool)
看完上述整理~~只有一個感覺~嗯...程式人的世界真是枯燥且乏味啊!(哩是滴供啥毀啦🤣)😂
好了,還是直接上程式碼🐎............
跟python BS4一樣~大概十幾二十行就可以完工(中間省略了些查核及錯誤處理)
這次整理一下,在Go裡面的基本輸出入
基本輸出~~~
fmt.Printf 或是 fmt.Println
但是Scan的輸出要注意的是:如果輸入內容有空白符號的話,那會被切開~不會是為一個完整的句子或詞彙!
如以下範例~~輸入Wan Chih-Hsiang
但只會抓取呈現~~第一個字Wan
所以~~若是輸出具空白符號的內容時,對於Go來說,是放入二個變數中的!
安裝GoLang的環境其實很單純~~在不考慮其他需求的狀況下,你只要將Go的安裝程式(for Windows環境)下載並一路執行安裝,應該就可以無痛安裝完成!
安裝完成之後,首先當然要先確認你的GoLang環境確實已經可以運作了!
如何確認呢~~~
簡單一點,就是:
1.檢核一下你安裝的Go版本!(有安裝完成才能執行Go命令,並看到所安裝的Go版本)
好~~~
那如何進行安裝的Go版本查核呢?
1.打開(進入)「命令提示字元」視窗~~或是所謂的「終端機」模式
2.輸入:go version
如果你的系統安裝Go環境一切正常的話,應該就會顯示你的Go版本資訊如下:
接下來就可以寫個程式世界最受歡迎的開篇小程式~~Hello World試試看囉!
opencv是相當強悍、好用的影像、視覺模組,在python玩樂過程中,經常有他出場的機會!
最近在試著練習使用PyQT5結合cv2做個螢幕截圖及簡易標記工具時,遇到了cv2對於中文檔名檔案的存取會發生錯誤的狀況!
這個問題當然可以說:阿~~那就不要使用中文檔名就好了嘛...
但是本著「無事生非」的精神(呵~~程式設計好玩的地方就在這裡),還是要解決這個問困擾啊!
終於~~沒多大困難的尋求了解決方案如下,做個紀錄,給自己也給其他人參考!
一般情形下,我們會透過 cv2.imread(filename) 來讀取檔案,但若是遇到讀取中文檔名時,就會遇到類似的錯誤訊息如下:
基本上是改用cv2.imdecode() 的方式呼叫,整體修正方式,寫成個小函式,方便隨時呼叫....
這樣,就可以正常呼叫、顯示中文檔案了!
別忘了,要引入numpy喔!
===================================================
至於「存成中文檔名」的操作~~若是使用一般 cv2.imwrite(filename, image) 則會根本沒有反應,令你以為操作是ok的,實際上根本是沒有反應,檔案也未完成寫入。
「存成中文檔名」的解決方式,如下圖。
基本上是改用,cv2.imencode(ext, image)[1].tofile(filename) 的方式執行即可正常操作。
好囉~~cv2處理中文檔案的存取操作就是這樣囉!
沒啥好掰的了~~收工!
機器學習(ML)或是大家都喜歡喊的AI(人工智慧),看似高深、技術本位!
但現在已經有愈來愈多可以讓你輕鬆、無負擔的去真實接觸並藉由玩的過程,去認識、體會所謂的機器學習「模型」的訓練(建模)等概念!
Teachable Machine就是這麼一個讓你能輕鬆建立機器學習模型的網站!
網址:https://teachablemachine.withgoogle.com/
它可以讓使用者無負擔的進行「影像」、「聲音」、「動作」的機器學習模型訓練。
這次,就先以「影像」來介紹一下這個好用的網站!
一、進入網站後,先選擇要訓練的類型,這裡我們選擇「圖片專案」
二、進入後就是設定訓練的頁面,基本上就是將要訓練的圖片分類設定好~例如:「口罩」、「眼鏡」等,並透過「攝影機」或是「上傳圖片」的方式將該分類的圖片提供給系統以便進行後續的機器學習模型訓練之用。
玩抓取資料可以很技術,也可以很生活啊!
現今愈來愈多的政府及機關公開資料可供民眾及系統設計應用,很多都是與民生相關的實用資訊!而且相關資料內容也益加完善,對於有設計及應用需求的人們真是個福音啊!
使用上也相當簡便,這次就以「新北市公共自行車租賃系統(YouBike)」的公開資料為操作範例,來練習玩玩如何簡便的獲取ubike的資時資訊並加以操作。
有關新北市的相關公開資料可以到以下位置查閱!
這次的操作練習主要目標是了解如何擷取網路上的公開資料回來加以整理、篩選出自己想要的資訊,並未多加著墨在其他的應用或呈現方式。
好囉~~一樣直接上程式碼吧.......
import requests
# 設定新北市UBike公開資料連結位置(取用json格式資料)
# 設定擷取資料筆數為700筆(目前新北市共有654個站點),若未設定size則每次預設只截取前30筆站點資料
url = 'https://data.ntpc.gov.tw/api/datasets/71Cxxxxx-A2DF-xxxxx-BEF1-xxxxx5E8A/json?size=700'
r = requests.get(url)
data = r.json()
def transform_format(mday): # 寫個轉換日期顯示格式小函式
Y, M, D, h, m, s = mday[:4], mday[4:6], mday[6:8], mday[8:10], mday[10:12], mday[12:14]
return Y + '/' + M + '/' + D + ' ' + h + ':' + m + ':' + s
print('擷取的資料筆數:',len(data))
ui = 0
for u in range(len(data)): # 逐筆讀取json資料
if data[u]['sarea'] == '土城區': # 判斷是否為「土城區」,屬於土城區的資料才呈現
ui += 1
data[u]['mday'] = transform_format(data[u]['mday']) # 轉化「資料更新時間」顯示格式
print(data[u])
print("「土城區」共有:",ui,"筆資料!")
程式執行結果截圖如下供參:
有關檔案(目錄)的操作,在程式設計中是常見的需求。
除了對檔案的存取、寫入等相關操作外,對於檔案的查詢、目錄(資料夾)的管理、操作也是重要的議題。
這次就來整理一下,python中對於檔案及資料夾的一些重要操作,方便自己日後複習及應用。
好囉~~一樣直接上程式碼!相關語法及功能,可以參考程式碼中的註記。
import os
import time
print(os.getcwd()) # 獲取當前作用(執行)的目錄路徑
if os.path.exists('mkdir_test'):
print("資料夾已存在,無須建立!")
else:
os.mkdir('mkdir_test') # 在當前目錄中建立新資料夾(若目錄已經存在則會出錯)
os.chdir('mkdir_test') # 切換至指定的資料夾
print(os.getcwd())
os.chdir('../') # 切換至指定的資料夾
print(os.getcwd())
# os.listdir()將指定目錄(若未指定則為當前作用中之目錄)中的物件都列出
print("資料夾中共有:", len(os.listdir()),"物件")
for f in os.listdir():
if os.path.isfile(f): # 檢查是否為檔案
f_name, f_ext = os.path.splitext(f) # 將檔案名稱資訊切割檔名及副檔名(類型)
f_size = os.path.getsize(f) # 取得檔案大小資訊
f_time = time.ctime(os.path.getctime(f))
print("檔名:", f_name, "| 檔案類型:", f_ext[1:], " | 檔案大小:", f_size, "Bytes | 檔案建立時間:", f_time)
# 檔案開啟模式參考網址:https://docs.python.org/zh-tw/3.6/library/functions.html#open
f = open("test1.txt", "a+", encoding='utf-8') # 若無該檔案會建立,若有則會開啟並可在檔案末尾加上新的內容
str = "\n" + "Hello,歡迎進入Python世界"
fw = f.write(str)
print("本次寫入", fw, "個字元")
f.close()
f1 = open("test1.txt", "r+", encoding='utf-8') # 讀取並開啟檔案,可在檔案末尾加上新的內容
print(f1.read())
f1.close()
有興趣及相關需求的朋友可以自行操作、執行,會更加了解相關的運作結果喔!
執行結果,部分截圖供參:
之前介紹過:[python抓爬仔]~~輕鬆擷取「台灣銀行即時匯率資料」
使用「twder」這支lib就可以輕鬆抓取台銀的即時牌告匯率資訊。
但這件事情到底是怎麼完成的呢???
這次~~練習、利用python中pandas這之強悍的套件,來練習一下自行抓取、分析台銀牌告匯率資料的方式,順道瞭解pandas的相關應用!
首先~~簡單認識一下:「pandas」是 Python 進行資料處理和資料分析一個好用的工具
有興趣可以到這裡去深入認識「pandas」
話說「pandas」有多強悍呢~~光是他的說明文件就有3000多頁....天啊~是要害死誰啊!
好~~所以囉,別期望一次就把pandas掌握住...
這次我們主要透過抓取台銀網站中的牌告匯率資料,先玩一下已下的相關操作:
1.用pandas抓取網頁中的表格資料
2.使用pandas格式化抓取的表格資料
3.使用pandas將資料儲存至excel檔案
====================================================
好~~從哪著手起呢??
預備動作~當然先確認你已經裝好pandas這支套件囉
動作:pip install pandas (應該很熟悉了吧~有裝過pandas會告訴你,沒裝過會幫你安裝pandas)
接著~~
1.先確認去哪裡抓取「台銀的牌告匯率資料」,別跑錯地方了~~~:
https://rate.bot.com.tw/xrt?Lang=zh-TW
2.查看一下,在台銀的網站中,牌告匯率表格是該網頁中第幾個「表格」!這個資訊,有助於等一下在設計程式時,指定(告知)pandas要抓取的資料位置(重要喔)。查看該網頁,我們初步確認「牌告匯率」資料位於該網頁中「第一組」表格的位置。
有了相關上述相關資訊後,就可以開始上程式碼了~~~很簡短的,別擔心
import pandas
# 指定pandas要抓取資料的網址
pds = pandas.read_html("https://rate.bot.com.tw/xrt?Lang=zh-TW")
table = pds[0] # 解析抓取資料中「第一組」表格資料存放至變數中
table = table.iloc[:, 0:5] # 重設要使用的表格資料
# table.iloc[:, 0:5]~表示要取用[前四個欄位]的[所有資料]
# table.columns~設定表格的欄位名稱
table.columns = ['幣別', '現金買入', '現金賣出', '即期買入', '即期賣出']
# 將表格中的幣別,以正則表達式(regular expression)重設只讀取中文幣別名稱
table['幣別'] = table['幣別'].str.extract('(\w+)')
# 完工~~列印抓取到的牌告匯率表格化資料
print(table)
# 將上述格式化的表格資料儲存成excel格式檔案
table.to_excel('twder.xlsx')
基本上~~就是這麼簡單、扼要就完成了資料抓取、表格化等相關工作!
假如今天你想要對一段文句或是文章內容進行中文詞語的分析與統計,做出類似「文字雲」的效果,要怎麼做呢?
個人簡略分析如下:
1.首先將文字(章)內容抓取下來
2.分析(分解)其中的詞語
3.統計每個詞語的使用頻率
然後...........思考如何美美的呈現囉
這其中最重要的核心關鍵,就在於如何進行詞語的分析工作,當然這也是分析自然語言的基礎啦~~不過目前先不管博大精深的這塊啦!
好~~所以這次我們就要來練習一下:中文的詞語分析及使用頻率統計。
使用python要完成以上目標,有多簡單、便捷呢~~底下就紀錄、分享供參囉!
要完成這次的中文分詞(斷詞)工作,我們可以使用這組強大的中文斷詞工具:jieba(結巴?)
同樣的~~我們先上完整程式碼,再做說明吧!
編輯前,記得先將「jieba」安裝起來:pip install jieba
# 使用 jieba 中文分詞程式
import jieba
# jieba.load_userdict('userdict.txt') # 可視需要引入自定義詞語庫
text = "Ubuntu是以桌面應用為主的Linux發行版," \
"相當受到Linux使用者歡迎!" \
"PyCharm是相當容易上手且功能強大、" \
"實用的python IDE工具,可安裝在各種主要作業系統平台" \
"在Ubuntu上也可以在軟體庫中找到免費的PyCharm CE 跟 EDU版本,供下載安裝!" \
"安裝Ubuntu最新的LTS版本:20.04版後," \
"即會預設安裝、更新至Python3.8的開發環境,相當方便!" \
"但一切安裝完成後,便會發現在Ubuntu下" \
"執行PyCharm編輯python程式時,會發現以下「怪怪」的情形"
w_dic = {}
words = jieba.cut(text) # 呼叫jieba函式進行斷詞作業
### 逐詞建立 字詞:使用次數 字典檔
for w in words:
if w not in w_dic: # 若未出現過的字詞則建立新的字詞並設定使用次數為1
w_dic[w] = 1
else:
w_dic[w] += 1
### 將大於二個字元的字詞及使用次數顯示出來查閱
for w in w_dic:
if len(w) >= 2:
print(w, w_dic[w])
程式說明部分,大部分在程式碼中都有做備註說明了!!所以也不用囉嗦佔篇幅~~~
執行結果如下:
以下只針對比較特殊的部分做一些心得分享:
1.由於jieba是由大陸團隊建置的,所以部分詞語可能會不夠精準,若想要(或避免)詞語上的誤判,可以將一些重要或常用的詞語建立在自定義的詞語庫檔案(如:userdict.txt)[記得該檔案須以utf-8編碼儲存]。引用自定義詞語庫方式,如程式碼第四行!(記得去除標記的 # 號喔)
Ubuntu是以桌面應用為主的Linux發行版,相當受到Linux使用者歡迎!
PyCharm是相當容易上手且功能強大、實用的python IDE工具,可安裝在各種主要作業系統平台,在Ubuntu上也可以在軟體庫中找到免費的PyCharm CE 跟 EDU版本,供下載安裝!
安裝Ubuntu最新的LTS版本:20.04版後,即會預設安裝、更新至Python3.8的開發環境,相當方便!
但一切安裝完成後,便會發現在Ubuntu下執行PyCharm編輯python程式時,會發現以下「怪怪」的情形:
1.Ubuntu下「新酷音」的中、英文切換(shift鍵)功能失效
2.中文輸入產生錯亂~~無法正常運作
由於僅發生在PyCharm情形,在其他應用程式中,中文輸入及操作正常!所以可以判斷為是PyCharm的相關設定問題。
查了一些網路上的資訊,各有說法~~一番操作之下,將自己覺得最單純、便捷的方法,紀錄、分享一下,供有興趣、需要的朋友參考囉!
先總結一下:就是去選用、更新PyCharm的「JetBrains Runtime」。
具體的作法及步驟如下:
預備動作:先去下載適用的「JetBrains Runtime(JBR)」檔案:
到下載網址:https://confluence.jetbrains.com/pages/viewpage.action?pageId=173178989
下載適用系統版本的JBRSDK檔,下載下來的是.gz的壓縮檔,無須先行解壓縮。
以下皆為PyCharm中的操作及設定:
1.安裝「choose runtime」的plugin:
點選「File」→「Settings...」
2.呼叫「Choose Runtime」選用、並安裝之前下載的JBRSDK壓縮檔: