:::

Weka簡介與實作:資料探勘的分群、異常偵測、關聯規則探勘、分類 / Practice Data Mining with Weka: Clustering, Outlier Detection, Associations and Classification

11-Weka_Practice_Data_Mining_with_Weka.png

啊囉哈~~這裡是整理投影片整理得超久的布丁。

今天要來談的Weka是知名的資料探勘自由軟體,它含括了資料探勘中的三大議題:分群(clustering)關聯規則探勘(association rule mining)以及分類(classification)。想要學習資料探勘的基本概念,並快速開始進入資料探勘實作的話,Weka是個不需要寫程式也可以輕鬆上手的好方法。

這一篇是我在2019年研習班中講授的課程投影片。這篇的做法改進了我之前製作的「巨量資料探勘與統計應用」課程內容,不僅更加掌握Weka的功能與參數,也直接採用ODS開放文件格式試算表作為練習資料的格式。如果你對資料探勘有興趣的話,不妨也試著一起玩玩看吧。


課程架構 / Guideline

2019-1003-000016.png

這門課程將資料探勘分成兩大類、三種分析,而各種分析有不同的技術可採用。這兩大類為:沒有預設答案的「非監督式學習」,對應的是「探索性分析」;有預設答案的「監督式學習」,對應的是「比較性分析」和「預設性分析」。

每種分析都有對應的資料探勘技術,這些技術都可以用Weka來實作。在探索性分析中,為了瞭解資料的狀況,我們可以採用的資料探勘技術為「分群」和「異常偵測」。在比較性分析中,我們想要瞭解不同類型的資料有何差異,可以使用的技術為「關聯規則探勘」。在預測性分析中,我們想要以歷史資料建立規則模型,用來預測未來的未知資料,可以採用的資料探勘技術為「分類」和「迴歸」。

跟傳統定義不同的是,我將關聯規則探勘作為一種比較性分析,並將它隸屬於監督式學習中。傳統關聯規則探勘大多作為非監督式學習,但探勘結果往往難以應用。相反的,在有預設答案的情況下去找出不同類型資料的差異,這種問題更適合採用關聯規則探勘來分析。所以我把它特別獨立出來,變成比較性分析來介紹。

本課程分成四個投影片來介紹。底下我會列出投影片、投影片大綱,以及該投影片使用到的實作教材和相關連結。


Chapter 1. 認識Weka / Introduction of Weka

第一份投影片「認識Weka」介紹的內容包括:

  • Part 1. 認識Weka
  • Part 2. Weka的資料來源
  • Part 3. 準備Weka:下載、安裝與設定
  • Part 4. 認識Weka架構

2019-1003-002314.png

這份投影片主要是給Weka做個簡介之外,還要帶大家安裝本課程會用到的Weka及其四個套件,以及LibreOffice Calc試算表。

相關檔案與連結 / Materials and reference

「Part 3. 準備Weka:下載、安裝與設定」會用到以下檔案:

weka_logo.png

(圖片來源:WekaMOOC)

Libre-Office.png

(圖片來源:ICONS101)


Chapter 2. 探索性與比較性分析:分群、異常偵測、關聯規則探勘 / Exploratory and comparison analytics: Clustering, outlier detection, associations

第二份投影片「探索性與比較性分析」介紹的內容包括:

  • Part 5. 探索性分析:分群
  • Part 6. 探索性分析:異常偵測
  • Part 7. 比較性分析:關聯規則探勘

從這份投影片開始,我們就要開始實際操作Weka進行資料探勘的任務。我在介紹的時候會先講一下問題的情境,再來簡單地介紹資料探勘技術的演算法和原理,然後再實際操作Weka完成資料探勘的任務。

2019-1003-002757-LOF-LOF-LOF-LOF.png

值得一提的是,我在這次教學中加入了「異常偵測」這個主題,採用技術為區域異數因素(Local Outlier Factor, LOF)。LOF分析可以在多維度資料中偵測異常值,是相當泛用的分析技術。雖然以往資料探勘教學中較少對異常偵測有所著墨,不過其實在實務資料分析中,用異常偵測找出資料的離異值是非常有意義的作法。有時候,刪除離異值可以確保模型收斂,它可以用於各種資料探勘的前處理;有時候,找出學生中最與眾不同的人,可以幫助我們深入進行個案研究。透過Weka的localOutlierFactor套件,可以讓我們很容易就能完成異常偵測的分析任務,誠心推薦給資料分析的各位。

相關檔案與連結 / Materials and reference

在「Part 5. 探索性分析:分群」中,我們將會用到以下檔案和連結:

在「Part 6. 探索性分析:異常偵測」中,我們將會用到以下檔案:

在「Part 7. 比較性分析:關聯規則探勘」中,我們將會用到以下檔案:

其實這三個部分用到的檔案stu-sch-1 - train.ods都是一樣的喔。


Chapter 3. 預測性分析:分類與迴歸 / Predictive analytics: Classification and regression

第三份投影片「預測性分析」介紹的內容包括:

  • Part 8. 預測性分析:分類
  • Part 9. 預測性分析:迴歸

2019-1003-004744-AI-VE-AL.png

雖然看起來只有分類和迴歸兩個主題,不過投影片就有103張了呢。現在提到資料探勘、機器學習,大部分的焦點都落在這個「預測性分析」上。我們往往會希望用歷史股價變動來預測股票的漲跌,我們希望用學生表現的已知行為來預測期末表現,這些都是預測性分析所要處理的問題。而預測性分析中分類和迴歸這兩個技術的主要差別,在於分類要預測的是「類別」,例如「男」或「女」、「合格」或「不合格」;而迴歸則是預測連續數值,例如「分數成績」、「股價」。

由於Python的盛行,現在許多人都是從Python程式語言學習迴歸。但其實要做迴歸這種預測性分析並不用這麼麻煩,試算表搭配Weka就能做得出來囉。

相關檔案與連結 / Materials and reference

在「Part 8. 預測性分析:分類」中,我們會用到的教材有:

在「Part 9. 預測性分析:迴歸」中,我們會用到的教材有:

這兩組教材檔案名稱看起來很像,但資料內容並不一樣喔,請仔細查看檔案名稱,不要搞混了。


Chapter 4. 進階應用與結語 / Applications and wrap up

第四份投影片「進階應用與結語」介紹的內容包括:

  • Part 10. Weka的進階應用
  • Part 11. 結語

介紹完Weka的基本應用,第四部分就帶大家看看Weka還可以做的其他分析。這邊大部分都是我寫過介紹的內容,包括圖片分類文本分類行為序列預測時間序列預測等等。其實Weka的可能性,比課本上介紹的還要多很多呢。

2019-1003-010314-Al-literacy-AI-Fr-HT-ora-No-Ia-AI.png

課程到了最後,我們瞭解了很多資料探勘的分析技術。現在資料探勘中的預測性分析,大多被包裝成AI人工智慧,似乎已經廣為人知。有人對AI盲目推崇、認為大數據、巨量資料就是未來;有人對AI表示恐懼,認為AI將會搶走他們的工作。但就目前AI的進展來看,它終究只是一種分析歷史資料、然後將分析結果直接應用的一種分析技術。而這個技術要簡單也沒那麼難,這堂課的Weka就做得了。

因此,我希望藉由這堂課來培育大家的AI素養 (AI literacy)。那就是我們必須要對AI保持正確的認知態度,學習思考什麼時候可以用AI、什麼時候不能用AI。希望這堂課介紹的Weka能夠讓大家更容易駕馭AI,而不是讓AI停留在盲目崇拜或恐懼的層次。

相關連結 / Reference

在「Part 10. Weka的進階應用」中,我所提到的相關文章連結如下:

當然,其實還有更多相關文章都在我這個Blog:「布丁布丁吃什麼?」,歡迎有興趣的人進來挖寶囉。


結語 / In closing

2019-1003-011512-ah.png

這篇我在研習班講授的「Weka簡介與實作」終於整理完了。

雖然作為一位常常介紹Weka的人這樣講很奇怪,但被找去講這個主題時,我第一個反應是:「怎麽過了這麼多年了還在講Weka」。

Weka是以Java開發的應用程式,不僅系統介面不符合當代應用程式的設計,實際上它的操作也相當繁瑣。許多人抱持著「不用寫程式就可以做資料探勘耶!」的期待接觸Weka,不過實際上能不能掌握Weka,或著說,掌握資料分析,最終是要看使用者具不具備資料分析的思維。瞭解資料、知道自己要分析什麼的人,不論是Weka還是Python,他都能有足夠的熱情和動力掌握這些分析工具,並且更進一步的往他的分析目標邁進。

Weka的小小優點 / Strengths of Weka 

2019-1003-012442-WWelca-vs-Weka-BE.png

話說回來,也許一些只用Python等程式語言的人可能對Weka這種圖形化使用者介面嗤之以鼻,不過我得說Weka在很多小地方其實做得很好。因為這些優點實在是太小了,如果對資料分析不熟悉的人可能看不懂這些詞彙的意義,所以底下這三個特色我是說給進階者看得:

第一個特色是缺漏值補齊,如果你沒有做特別的設定,Weka會自動採用眾數或中位數補齊缺漏值。而這件事情若用程式語言來做,其實相當費工。此外,若是在SPSS分析裡面,有缺漏值的資料大多時候都會直接被整個刪除捨棄不用。

Weka另一個貼心的特色是虛擬變項的轉換。面對只能接受連續數值類型資料的演算法,Weka會自動將類別變項轉換成虛擬變項,使用者仍然可以用自己最習慣的類別變項來填寫資料即可。這個例子最常發生在SPSS使用者身上,例如「迴歸分析使用虛擬變項的注意事項」這篇。SPSS分析幾乎都必須是以連續變項進行,包括類別資料的卡方檢定也是,所以很多SPSS使用者被迫要以數字為資料編碼,例如將「男性」編碼為1、「女性」編碼為2。如果用程式語言來開發,將類別編碼轉換成虛擬變項也是一件必須要執行的重要處理,略過這個步驟的話,大部分演算法都無法執行。不過在Weka裡面,他會默默的自動幫你處理好,非常偉大。

第三件特色是變項的正規化。許多資料探勘演算法都必須計算資料的相似度,特別是分群。對具有多維變項的資料計算相似度時,因為各個維度的資料單位不相同,它們的全距也都不相同。如果直接忽略單位,單以數值計算相似度時,全距較大的維度屬性會對相似度有極大的影響。為了克服這個問題,比較好的做法是要對各個維度進行正規化或標準化,去除單位,這樣是比較合理的做法。如果用程式語言來做,各個維度的正規化和標準化手續其實挺麻煩的。不過在Weka中,大多數演算法預設都會自動進行正規化或標準化。當然,你也可以開啟進階設定把它關掉就是了。

閒聊 / Talk

好啦,寫到這裡,這篇也差不多要告一個段落了。其實這篇應該要更早完成的,但是課程教完之後,我遭遇了電腦整個掛掉的窘境。要知道對一個各種工作都仰賴電腦的我來說,電腦壞掉這件事情對我造成相當大的打擊。然後在重灌電腦的期間,也花了點時間開發了一些小工具,詳情請看「工具開發閒聊:從AutoIT到Electron」這篇。

2019-1003-014518.png

最近我比較有在寫blog,就是電腦逐漸上軌道的表現。「布丁布丁吃什麼?」blog的網站功能有許多壞掉的地方,最近也總算能夠把它修復了。有一臺好用的電腦,對我來說還是相當重要啊。

電腦修好後,總算能夠繼續我論文系統的研究了。前幾篇提到的Svelte就是我在研究中的產物,可惜人氣好像不太高的樣子。在這篇中我也提到我正在摸索FeathersJS,轉念採用另一個想法後,似乎更能掌握它了。我會繼續這樣子,一邊研究、一邊把它整理下來做記錄,努力完成我的論文吧。


那麼這次對Weka的教學就到這裡了。寫到最後,我有些問題想問問大家:

  • 你用過Weka或其他的資料探勘工具嗎?
  • 你用資料探勘或機器學習通常是在分析什麼樣的問題呢?
  • 對於資料探勘的教學,你比較著重在什麼部分呢?理論、演算法、應用情境、實機操作、資料分析講解?

歡迎在下面的留言處跟我們分享你的想法。大家的意見是我繼續分享的動力喔!如果你覺得我這篇實用的話,請幫我在AddThis分享工具按讚、將這篇分享到Facebook等社群媒體吧!

感謝你的耐心閱讀,我是布丁,讓我們下一篇見。

總共32 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 作者已經移除這則留言。

    回覆刪除
  2. 嗨囉~ 布丁大師
    看到你整理的這篇文真的對於學習Weka有非常大的幫助,
    也能讓完全沒有基礎的人能很快的一探數據分析的奧妙與樂趣,
    在這邊想請教您有關我在使用Weka功能的問題:
    在知識流中我依照3-6版本的操作教案進行,但發現在3-8版出現錯誤無法正常跑出結果
    我在猜測是不是有以下問題:
    a.方式轉換語言編碼後造成知識流判讀錯誤?
    b.版本問題導致部分功能無法使用
    c.javaopt設置更動(之前為了提升Weka效能有將其改成-Xmx1024m)
    不知道您是否有遇到類似的問題可以幫我解惑呢?
    謝謝

    回覆刪除
    回覆
    1. To 阿牛,

      因為Weka操作的細節步驟很多,我這樣沒辦法得知你所謂的「出現錯誤無法正常跑出結果」是什麼意思。
      可以的話請螢幕截圖,並上傳到imgur之類的圖庫,方便說明你的問題:
      https://imgur.com/upload

      如果你的問題是Weka的知識流(Knowledge Flow)的話
      因為我實務經驗不多,可能很難回答你的問題喔

      刪除
  3. 您好
    請教:Chapter 3. 預測性分析slide,第20頁
    表格的【規則】欄位是參考前一頁的【比賽舉行】或是自訂?

    回覆刪除
    回覆
    1. 您好,

      https://docs.google.com/presentation/d/1wHkfobQmGOJ-C0h1TMcW1Kp4umNwiJ_ZHdgJIMYaPB8/edit#slide=id.g5e1089c260_3_394
      是根據 p. 19的資料集而訂

      我這個表格是參考其他書籍,但後來為了方便解釋,我修改了部分用詞
      p. 20這張表沒有改到

      現在已經做修正
      https://docs.google.com/presentation/d/1wHkfobQmGOJ-C0h1TMcW1Kp4umNwiJ_ZHdgJIMYaPB8/edit#slide=id.g5e1089c260_3_394

      刪除
  4. 投影片裡面講到了WekaODF 1.0.5的部分

    這是我根據原本的WekaODF 1.0.4的程式碼改進了因為缺失值導致誤判資料類型的問題之後,重新打包的檔案
    可以在以下網址下載 WekaODF1.0.5.zip:
    https://github.com/pulipulichen/WekaODF/releases

    回覆刪除
    回覆
    1. 不好意思,一直無法安裝WekaODF 1.0.5,會跳出
      java.lang.NullPointerException
      at weka.core.WekaPackageLibIsolatingClassLoader.checkForNativeLibs(WekaPackageLibIsolatingClassLoader.java:220)
      at weka.core.WekaPackageLibIsolatingClassLoader.init(WekaPackageLibIsolatingClassLoader.java:145)
      at weka.core.WekaPackageLibIsolatingClassLoader.(WekaPackageLibIsolatingClassLoader.java:126)
      at weka.core.WekaPackageClassLoaderManager.addPackageToClassLoader(WekaPackageClassLoaderManager.java:369)
      at weka.core.WekaPackageManager.initializeAndLoadUnofficialPackage(WekaPackageManager.java:2372)
      at weka.core.WekaPackageManager.installPackageFromArchive(WekaPackageManager.java:2359)
      at weka.gui.PackageManager$UnofficialInstallTask.doInBackground(PackageManager.java:780)
      at weka.gui.PackageManager$UnofficialInstallTask.doInBackground(PackageManager.java:724)
      at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)
      at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
      at java.desktop/javax.swing.SwingWorker.run(Unknown Source)
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      at java.base/java.lang.Thread.run(Unknown Source)
      這些錯誤,我有試著更新JAVA了 但還是無法安裝套件

      刪除
    2. 試著先裝Weka Package裡面的WekaODF 1.0.4看看?
      還有,請問您的作業系統版本是32位元還是64位元?安裝的Java版本是32位元還是64位元?使用Weka的版本是?

      刪除
    3. 我安裝的版本是Weka3.8.4 作業系統是64位元 JAVA是1.8的X86

      刪除
    4. 資料探勘的新手 你好,

      先試著安裝Java Runtime Environment 64位元版本(x64),再跑看看?
      https://www.java.com/zh_TW/download/

      刪除
    5. 我已經有安裝Weka pakeage裡面的ODF 1.0.4還是無法安裝1.0.5,安裝都會出現錯誤,之後把原安裝的1.0.4刪掉,也用樓上的網址更新過java了,還是不行,有其他辦法解嗎?重新下載過weka兩次了

      刪除
    6. 我如果只用ODF 1.0.4,沒辦法跟著第二章的投影片,使用.ods檔案

      刪除
    7. 你好,

      如果使用Weka 3.8.1版的話,就可以先安裝WekaODF 1.0.4,再安裝我自製的WekaODF 1.0.5。

      舊版的Weka 3.8.1可以從這裡找到連結下載:
      https://blog.pulipuli.info/2017/06/weka-how-to-download-weka-and-install.html#postcataweka-how-to-download-weka-and-install.html0_anchor1

      試試看吧

      刪除
    8. 下載了Weka 3.8.1版的話,我變成Package manager的畫面不能打開,會是因為我的java版本太低嗎?我的java版本是1.8.0的,有推薦要安裝哪個java版本嗎?可以的話可以附網址嗎?我打開weka會出現
      [WekaPackageManager] Skipping package WekaODF because it is has been marked as do not load
      [WekaPackageManager] problem parsing number of packages from server.
      這兩行文字,可以知道我哪裡出了問題嗎?現在的weka版本是3.8.1

      刪除
    9. 你好,

      我的Java版本是jre1.8.0_221

      我在Weka 3.8.1上開啓Package manager的時候也是很慢,但總是會等到它開啓。
      多等一會兒試試看吧

      刪除
    10. 原來如此,感謝解答,我在試試看

      刪除
  5. 我遇到一樣的問題,先裝Weka Package裡面的WekaODF 1.0.4,再裝1.0.5 就過了

    回覆刪除
  6. 有網友詢問,如果輸入資料有多重值的話怎麼辦,例如以下多選題:

    「Q1. 請問您的興趣是(可複選):a. 運動 / b. 聽音樂 / c. 玩遊戲」

    在處理這類型的資料時,要把該題的每個選項拆開來,變成布林類型
    舉例來說,有人在第一題勾選了a跟b,沒勾選c
    則轉換後變成

    Q1a,Q1b,Q1c
    true,true,false

    請以這個形式來處理資料。

    回覆刪除
  7. 大大您好,有些問題想要請教:
    想知道weka有沒有方法可以將我載入的資料用特定方法做分類,
    例如:
    1.假設excel檔的A行每一格是1-100的編號,每個編號數量不等(數千~數萬筆不等),我想擷取某一個數字的所有資料
    2.假設excel檔的B行每一格分別代表著某一個行為,我想抓取在"登入"行為後到"登出"行為止這之間的資料
    以上兩個例子個別有辦法做到嗎?怎麼做到?
    爬過很多文章,沒有找到合適方法,詢問大大有沒有知道的方法,懇求大大解答。

    回覆刪除
    回覆
    1. 你好,

      我會建議你把資料儲存成SQLite,然後用SQL語法處理上述問題。
      https://www.dbsofts.com/articles/ms_excel_to_sqlite/

      如果人生在世一定得學一種程式語言,那就會是SQL。

      刪除
  8. 你好 布丁 請問一下 您在本節課程中 所提及的"資料探勘分成兩大類、三種分析,而各種分析有不同的技術可採用。這兩大類為:沒有預設答案的「非監督式學習」,對應的是「探索性分析」;有預設答案的「監督式學習」,對應的是「比較性分析」和「預設性分析」"以上內容分類的基礎是來自於自身的經驗,還是有分類的來源呢。 因為本身正在撰寫碩論,每篇國內外期刊所定義的方式雖都脈絡相似,但其中都有些許差異。
    謝謝回應!!

    回覆刪除
    回覆
    1. To 張博威,

      如果在寫論文的話,你不應該看我的blog,請去參考有權威性資料來源。

      如果不知道從哪裡看起的話,請從百科全書來看
      https://www.springer.com/gp/book/9781489976857

      Sammut, C., & Webb, G. I. (2017). Encyclopedia of machine learning and data mining. Retrieved from http://dx.doi.org/10.1007/978-1-4899-7687-1

      如果再不知道從哪裡看起的話,可以去申請圖書館的參考諮詢服務,讓館員陪你一起找資料。

      我的blog只能給你一些關鍵字,但不能當做權威的資料來源
      請加油囉

      刪除
  9. 非常感謝!很有用的資訊!

    回覆刪除
  10. 首先謝謝這麼清楚的資訊。另外請問,用您提供的資料可以分群,但換成自己的資料ADDCLUSTER被反白無法作用該如何解決?

    回覆刪除
    回覆
    1. 您好,

      這樣問我沒辦法回答。
      要先看您的資料是什麼資料類型才行。

      加油。

      刪除
  11. 您好,請問Chapter 3. 預測性分析:分類與迴歸 簡報第40頁,測試檔案可否直接使用原檔案(相同筆數一模一樣)代替?

    回覆刪除
    回覆
    1. 您好,

      https://docs.google.com/presentation/d/1wHkfobQmGOJ-C0h1TMcW1Kp4umNwiJ_ZHdgJIMYaPB8/edit#slide=id.g5e1d40a66d_1_473

      https://blogger.googleusercontent.com/img/a/AVvXsEi71Yxy8xqY1KRmv6WDhgcPUMPg2iW2HJcb8kAGcJ7d93dWlGyGPyUgC4nEDrPBzJQQKgMYIHEKi8MCGbgt3i4W_56EGD5xwXB8tIG9jT8WwGS95qpt2w4dTXiW70ilDjnNKl1ujkl_C4IZzQdoKW1lgaBiYSi7GaBmmE9RuQFdCZoiUrCmvUM
      我想你應該在講這一頁。

      https://docs.google.com/presentation/d/1wHkfobQmGOJ-C0h1TMcW1Kp4umNwiJ_ZHdgJIMYaPB8/edit#slide=id.g5e1d40a66d_1_413
      https://blogger.googleusercontent.com/img/a/AVvXsEhAqgMDSkc7FosTZn6hH3jLOA0Yn-hl2YWR5mHgRl3XcyzoF_Pm0XUi8S1ST5cFrqT829wUm_GhDwnqcCSbcALnF0ZZsCRnpJBijWqcXfKs2EocUrAxoz5VMJH6GDcoKjkKm4qwtBBX1xf0LA488IFp7sZ7YuBW6TL_g39Cm8hnIBGOHvJ6PX8
      不過測試集的設定實際上是在第33頁。
      如果測試集跟訓練集一樣,那選擇「Use training set」即可。

      ----

      如果你沒有測試集的話,正式做法都會建議使用「Cross-validation」(交互驗證)。

      https://blog.pulipuli.info/2017/10/classification-and-prediction-bayesnet.html#postcataclassification-and-prediction-bayesnet.html0_anchor1
      交互驗證的說明在這篇的投影片的第83頁起。
      https://blogger.googleusercontent.com/img/a/AVvXsEiMY5_fGKzxqH6r8Ogr6P5UEZBZ7cxtWggGfx5IMri_oeV3YgAAHTNg0q5dV-7-9ZT1s2k1Q3-pDSdaayBpWPlEabGi1U5WNGT3SAtBVkodtxdpqTG6qzxNOMcd_Mgrv_zka2nTQ660NeD0HsLpfI4qM90kc4oQw6xvcOYfM2WH6_4jTrcn-0M

      刪除
  12. 布丁大大您好~
    請教一下,我是weka3.8.6版本,安裝WekaODF 1.0.4版本後,一直無法安裝WekaODF 1.0.5
    也有先安裝Java Runtime Environment 64位元版本(x64)
    不知道是哪邊出了問題
    感謝您

    回覆刪除
    回覆
    1. 1. 如果你是用我做的WekaODF,那我建議不要使用了,那個並不是尋正規管道開發的。

      2. 如果只是單純ODF的讀取問題,做法是要把檔案相容性改回1.2 Extended版本。

      位置在Options > Load/Save > General > Default File Format and ODF Settings裡面:
      https://blogger.googleusercontent.com/img/a/AVvXsEhFKQCtgqli0VErOg8KYLvQRLI7LVB8Qq30akW5t-tA_ZHVGayVTNORpT2GaY_pkU-jfuSaDnAhpSx1ueD9TdkeenT9GECWZdaIW44VDpQRktWQFbqm_-tKQwA-o923gdKSirYr2oU543eVKfpTeZ2rOqa3LWs-vFc3M_d0iwu1BDOoGQ3VfRU

      刪除