2022年8月29日 星期一

第一次使用 Python 來體驗 Machine Learning 開發,體驗網路各種傳聞

第一次使用 Python 來體驗 Machine Learning 開發,體驗網路各種傳聞

把一部長達 6 小時的 Python 教學影片看完,對其中的機器學習 Machine Learning 部分覺得相當有趣,今天就把這部分過程自己手動作一次,沒想到,要使用 Python 來設計一個使用決策樹應用的 Machine Learning 功能,竟然大約使用到 8 行的 Python 程式碼,就可以完成,而且實際運作結果還相當的不錯。

在此我體驗到了 Python 的容易學習、程式碼精簡、具有相當多應用套件可以使用的情境,但是,在這個手動練習過程中,也發現到了,想要能夠充分發揮 Python 的能力,還需要把相關的套件模組進行深入研究與精通,畢竟發生需求的時候,若能夠知道有那些模組已經有提供相關功能,便可以立即拿來應用;第二個就是,對於現有的模組所提供的功能,若想要做額外的變化或者應用的時候,這需要日後花些時間來進行體驗;最後就是當遇到技術問題的時候,該如何解決,例如,模組更新導致 Breaking Change,找不出發生問題該如何解決等時候,這可能需要以時間換取技術能力來提升吧。

畢竟,我已經知道了,Python 入門門檻不高,可以要能夠成為 Python 精通者,應付不同需求的設計,這部分還是需要有時間與經驗才能夠解決的

準備 Python 開發專案

  • 建立一個要練習 Machine Learning 的目錄

  • 點選做下角的 Windows 視窗圖示

  • 找到 Anaconda Prompt (anaconda3) 這個應用程式

  • 開啟這個應用程式

  • 使用 cd 命令,切換到剛剛建立好的練習目錄下

  • 請繼續輸入 jupyter notebook 開啟 Jupyter 的 IDE

  • 一旦看到底下畫面內容,此時,瀏覽器會自動開啟

  • 點選右上角的 [New] 下拉選單按鈕

  • 從彈出清單中,選擇 Notebook: Python 3 (ipykernel) 這個選項

  • 現在,另外一個網頁頁次將會開啟

  • 將游標移動到左上方得 Untitled 文字處

  • 點選這個文字

  • 在 [Rename Notebook] 對話窗內,輸入這個新筆記本名稱

  • 請輸入 My-First-Python-Machine-Learning

  • 完成後,點選該對話窗右下方的 Rename 按鈕

建立 Machine Learning 需要用到的範例資料

現在可以自己建立,或者從網路上下載這次要做練習會用到的資料檔案

底下是這次要分析的資料

age	gender	genre
20	1	HipHop
23	1	HipHop
25	1	HipHop
26	1	Jazz
29	1	Jazz
30	1	Jazz
31	1	Classical
33	1	Classical
37	1	Classical
20	0	Dance
21	0	Dance
25	0	Dance
26	0	Acoustic
27	0	Acoustic
30	0	Acoustic
31	0	Classical
34	0	Classical
35	0	Classical

從上面的資料可以看出,這是一個不同年齡(欄位1 age)層與不同性別(欄位2 gender)的人,喜歡聽的音樂類型(欄位3 genre)紀錄

  • 請在剛剛建立的目錄下,建立一個 .csv 檔案,該檔案名稱為 music.csv

開始進行 Python 機器學習程式碼開發

  • 在 Jupyter 筆記本中,輸入底下 Python 程式碼
import pandas as pd
music_data = pd.read_csv('music.csv')
music_data

第一行表示匯入 Pandas 這個用於資料分析的工具,這個工具目的可以從網頁說明上看出 pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language.

第二行則是讀取剛剛建立的 Sample Data ,也就是 music.csv 這個檔案內容,雖然這個檔案是屬於 .csv 類型的檔案,對於 pandas 工具而言,這是輕而易舉的事情,因為,他可以認識與讀入這個檔案內的相關內容。

想要知道 pandas 看到甚麼樣的資料,可以使用第三行程式碼,顯示內容

  • 按下 [Ctrl] + [Enter] 來執行這三行程式碼

  • 底下將會是執行結果

建立訓練模型來進行預測分析

這個第一個 Python 練習,將會要進行機器學習的預測,因此,需要建立一個輸入與輸出的模型,透過輸入模型的資料,預測可能會產生甚麼樣的輸出資料。

  • 首先,建立輸入模型
import pandas as pd
music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre'])
X

這裡建立一個 X 物件,代表輸入模型,該模型是這個 CSV 檔案內的前兩個欄位,分別代表年紀與性別,所以,在此使用 drop 函數,將原有資料集 data set 的最後一個欄位移除,保留前面兩個欄位,並且將這個物件設定給新的變數 X。

當此用 drop 函數的時候,並不會將原有的資料集刪除,而是產生一個新的資料集出來

最後,使用 X 這個敘述,查看這個新物件的內容

從下圖可以看出,X 物件內有著年紀與性別這兩個欄位,這樣的物件就代表了輸入模型

  • 使用底下程式碼建立輸出模型
import pandas as pd
music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre'])
y = music_data['genre']
y

這裡是執行結果

開始進行學習與預測

在這裡將會練習使用決策樹方法來進行資料行為預測,為了要使用這樣的分析方法,需要藉助於 scikit-learn: machine learning in Python 這個工具

從網站介紹內容,可以看出這個工具提供出相當多的好用功能

使用底下的 Python 敘述,引用 決策樹 這個工具

from sklearn.tree import DecisionTreeClassifier

底下是完成後的程式碼,大約使用到 8 行的 Python 程式碼

import pandas as pd
from sklearn.tree import DecisionTreeClassifier

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre'])
y = music_data['genre']


model = DecisionTreeClassifier()
model.fit(X,y)
predictions = model.predict([[21,1],[21,0]])
predictions

這裡首先建立一個 model 物件

接著使用了 model.fit(X,y) 敘述,進行模型的訓練 training sample data

接著,使用了 model.predict([[21,1],[21,0]]) 進行預設,希望能夠從現有的數據資料中,了解到年紀在 21 歲的男性,喜歡甚麼類型音樂,而對於 21 歲的女性,喜歡甚麼樣類型的音樂

底下為這次練習的執行結果

區分訓練與測試用的資料

通常來說,所取得的資料,將會使用80%左右的紀錄來進行訓練,並且使用 20% 的紀錄來進行測試,藉此了解到這樣的預測可以達到多少準確程度。

在這裡將會使用 sklearn.metrics 模組來進行量測準確度,底下將會是這樣的練習程式碼

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre'])
y = music_data['genre']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

model = DecisionTreeClassifier()
model.fit(X_train,y_train)
predictions = model.predict(X_test)

score = accuracy_score(y_test, predictions)
score

透過 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) 敘述,將原有的資料集使用 80% / 20% 的比例分別切割成為不同資料集,接著,使用 model.fit(X_train,y_train) 敘述,將切割出來的紀錄進行訓練,最後,使用 score = accuracy_score(y_test, predictions) 敘述來量測預測準確度

底下是執行結果

補充說明

若想要找到可以練習用的分析資料,可以到 Kaggle 網站內來搜尋

  • 使用瀏覽器打開 Kaggle 網站,從這個網站的說明文字:Kaggle: Your Machine Learning and Data Science Community,可以看到從這裡可以找到相當多機器學習與資料科學上的相關資料或者資訊

  • 在右上方的搜尋文字輸入盒內,輸入 video game sale 文字

  • 此時,網頁畫面將出現如下圖

  • 點選第一個搜尋出來的項目 Video Game Sales 這個連結

  • 將會看到這個 Data Set 的介紹

 





我的第一次接觸 Python : 安裝開發環境與工具

我的第一次接觸 Python : 安裝開發環境與工具

最近因為工作關係,開始進行評估要進入到哪個新的開發領域,而對於 C# 這門開發程式語言,也摸了快要十年以上了,現在最新的技術 ASP.NET Core Blazor 與 Xamarin.Forms 或者下一代的 .NET MAUI,已也經摸到頂端了,畢竟從事程式設計領域這麼久的時間,接觸與使用的語言超過十種以上,而許多之前使用的程式語言也在現今並沒有太多人在使用,競爭能力明顯降低很多,想當然的就從網路上來著手,看看有沒有甚麼可以比較與下手的領域,保持未來十年有一些競爭實力。

從各種統計 Programming, Scripting, and Markup Languages 與部落格文章,我先從現今這兩三年最熱門的程式語言著手分析,發現到 Python 與 JavaScript 一直居於大家最喜歡與熱門的程式語言首選,所以,先使用排除法,我本身對於 JavaScript 這個程式語言沒有絕對的好感,所以,在此優先排除了,所以,剩下了 Python;從相關文章中,了解到這個程式語言的特色與可以表現的工作領域,我個人覺得有些誇大,不過,畢竟在這裡所發揮的空間與各公司對於這樣職缺的期待數量,比起其他程式語言比起來有著明顯的差距。

因此,我上週花了三天的時間看了幾部 Python 的教學影片,我得到一個事實,那就是大家對於 Python 這個程式語言說,這是一個容易學習與使用的程式語言這個部分,我終於認同了,對於另外一個說明,Python 可以使用較少的程式碼,完成一件事情,關於這一點,我從某部 Python 教學影片中的一個講解範例中,充分的得到證明,也就是說,若我想要把同樣的一件事情,使用 C# 程式碼來重新做一次,實在沒辦法就可以在短短的數十行程式碼,就完成一個產品預測分析的功能,這大大的奠定了我對於 Python 的信心,當然,我還是有著其他的疑慮或者考量,然而,看了這麼多,還不如實際動手體驗看看,畢竟未來還是要自己來寫出這些程式碼的。

所以,我的第一份 Python 的系列部落格文章,就從這裡開始,這將會用來記錄我學習 Python 的各種歷程,首先,需要先來安裝一個可以用於開發 Python 的環境軟體,根據一些介紹文章或者影片,我也選擇了 Anaconda 這個工具,根據網站上的說明 : ANACONDA DISTRIBUTION => The world’s most popular open-source Python distribution platform

  • 使用瀏覽器打開 Anaconda 網站

  • 從網頁的右上方,將會看到一個 [Download] 按鈕

  • 點選這個下載按鈕

    • 因為檔案超過 500 MB 以上,因此,稍微等候這個安裝檔案下載完成

    • 一旦 [Anaconda3-2022.05-Windows-x86_64.exe] 程式下載完成後,參考下圖,點選 [開啟] 連結

  • 現在要依序完成底下操作,已完成安裝動作

  • 當出現歡迎畫面,點選 [Next] 按鈕

  • 在接受使用授權合約頁面中,點選 [I Agree] 按鈕

  • 現在看到選擇安裝類型畫面,使用預設值(因為這台電腦只有我自己會使用),接著點選 [Next] 按鈕

  • 在安裝位置對話窗內,使用預設路徑,接著點選 [Next] 按鈕

  • 在進階安裝選項對話窗內,請確認 Register Anaconda3 as my default Python 3.9 這個檢查盒,然後,點選 [Install] 按鈕

  • 實際安裝檔案的時間需要一點時間,稍微等候一下

  • 當看到底下畫面,那就表示相關軟體已經安裝好了,請點選 [Next] 按鈕

  • 看到底下畫面,點選 [Next] 按鈕

  • 最後,終於完成了安裝過程,點選 [Finish] 按鈕,結束安裝程序

現在要來確定相關 Python 工作環境是否都正常運作

  • 點選做下角的 Windows 視窗圖示

  • 從最近新增畫面中,找到 Anaconda Prompt (anaconda3) 這個應用程式

  • 開啟這個應用程式

  • 當命令提示字元視窗出現之後,請輸入 python

  • 此時,將會看到 Python 3.9.12 (main, Apr 4 2022, 05:22:27) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. 這段訊息,那就表示這台電腦可以跑 Python 程式了

  • 緊接著輸入 print('Hello World') ,並且按下 [Enter] 按鈕

  • 這是我寫的第一個 Python 程式,向大家問好

  • 從底下螢幕畫面截圖可以看到,這個簡單的 Python 程式已經成功的運行起來了

現在要來確認開發 Python 的一個好用 IDE 是否可以正常運作

  • 請繼續輸入 jupyter notebook 開啟 Jupyter 的 IDE

  • 一旦看到底下畫面內容,此時,瀏覽器會自動開啟

  • 太好了,此時已經確認 Python 開發環境已經都安裝好了,從底下畫面截圖,可以看到 Jupyter 也成功啟動了

 





2022年8月23日 星期二

在 .NET MAUI 專案你使用字型圖示來美化 App

在 .NET MAUI 專案你使用字型圖示來美化 App

若想要讓你的 App 更加光彩奪目,吸引他人的目光,那就多加些色彩與圖形在 App 內,然而,想要加入圖片與豐富的色彩,這個部分絕對是大部分程式設計師的罩門,也就是他們最不擅長的地方,不過,卻是可以在 .NET MAUI 專案內來使用字體圖示這項功能,就可以快速、方便的把各種小圖示加入到 App 內。這些小圖示可以用於飛出頁面內的功能選項清單,又或者是用於按鈕上。

建立 Prism.Maui 專案

  • 開啟 Visual Studio 2022 Preview 版本

  • 點選螢幕右下角的 [建立新的專案] 按鈕

  • 切換右上角的 [所有專案類型] 下拉選單控制項

  • 找到並且點選 [MAUI] 這個選項

  • 從清單中找到並選擇 [Prism .NET MAUI App (Dan Siegel)] 這個專案範本

    A project for creating a Prism .NET MAUI application for iOS, Android, Mac Catalyst, WinUI and Tizen

  • 點選右下角的 [下一步] 按鈕

  • 當出現了 [設定新的專案] 對話窗

  • 在 [專案名稱] 欄位內,輸入 MA40

  • 點選右下角的 [建立] 按鈕

下載 Material Design Icon 字體檔案

  • 使用瀏覽器打開此網址 https://materialdesignicons.com/
  • 在右上方點選 download 按鈕,下載這個 [MaterialDesign-Webfont-master.zip] 壓縮檔案
  • 解開這個壓縮檔案內容
  • 找到 [materialdesignicons-webfont.ttf] 檔案
  • 在檔案總管中,點選這個檔案,拖拉到剛剛建立的 .NET MAUI 專案內的 [Resources] > [Fonts] 資料夾內

宣告與使用 Font Icon

  • 在專案根目錄下找到並且打開 [MauiProgram.cs] 檔案
  • 找到 fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); 該行敘述,在其下方加入 fonts.AddFont("materialdesignicons-webfont.ttf", "material"); 這行敘述。
  • 打開 [Views] 資料夾內的 [MainPage.xaml] 檔案
  • 使用底下 XAML 標記替換掉這個檔案內容
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             Title="使用字型圖示 Font Icon"
             x:Class="MA40.Views.MainPage">

  <ScrollView>
    <VerticalStackLayout
            Spacing="25"
            Padding="30,0"
            VerticalOptions="Center">

      <Image Source="prism.png"
             SemanticProperties.Description="Cute dot net bot waving hi to you!"
             HeightRequest="150"
             HorizontalOptions="Center" />

      <HorizontalStackLayout HorizontalOptions="Center">
        <!-- Use font name -->
        <Label Text="&#xF1B0A;" FontSize="40" TextColor="Blue"
               FontFamily="material" />

        <!--Use Image-->
        <Image>
          <Image.Source>
            <FontImageSource Glyph="&#xF0610;" Color="Red"
                         FontFamily="{OnPlatform iOS=material, Android=material, WinUI=material}"
                         Size="40" />
          </Image.Source>
        </Image>
      </HorizontalStackLayout>
      

    </VerticalStackLayout>
  </ScrollView>

</ContentPage>

在這裡呈現了使用 Label 與 Image 這兩個檢視控制項,來顯示特定的字體圖示

底下是執行後的畫面