使用R進行 openai 藝術創作
【謝謝各位大大按 讚、訂閱、開啟小鈴鐺】
OpenAI [https://openai.com/] 相繼推出 GPT-3 語言模型與 DALL-E2 AI 產生器, 使用者只要輸入文字, 即可以產生的超現實主義圖片, 參考圖1所示, 本篇文章示範 R 與 openai 套件的應用.
圖1 太空人騎馬照
【謝謝各位大大按 讚、訂閱、開啟小鈴鐺】
OpenAI [https://openai.com/] 相繼推出 GPT-3 語言模型與 DALL-E2 AI 產生器, 使用者只要輸入文字, 即可以產生的超現實主義圖片, 參考圖1所示, 本篇文章示範 R 與 openai 套件的應用.
圖1 太空人騎馬照
Python 程式使用 shiny 模組執行結果:
R語言的 shiny 套件可以建立跨平台的互動式網頁,今年(2022)RStudio 研討會宣佈 shiny for Python, 表示在 Python 環境亦可執行 shiny 建立互動式網頁。
PyPI shiny: https://pypi.org/project/shiny/
Youtube 說明:
【謝謝各位大大幫忙按 訂閱、開啟小鈴鐺】
PDF講義大綱:
https://github.com/rwepa/shiny_python/blob/main/shiny_python_tutorial.pdf
Python 程式:
https://github.com/rwepa/shiny_python/blob/main/pyshiny_01_hello.py
檔案架構:
執行方式:
Windows 開啟命令提示字元,輸入以下內容:
參考資料:
# end
Python 連接 Microsoft SQL Server (Windows 10)
感謝 Jian-Guo 提供問題.
系統:
Windows 10, Microsoft SQL Server 2019 Developer Edition, Python 3.9.12
目標:
在 Windows 系統中, 希望使用 Python - sqlalchemy 模組, 連結 Micorosft SQL Server.
方法:
標準差之計算在 Python, R 結果都相同嗎?
感謝 Pei-Chun 提供 Python 問題.
統計學的標準差(Standard Deviation, SD)可以區分為母體標準差與樣本標準差, 符號之說明如下:
σ: 母體標準差, N: 母體個數, μ: 母體平均值
s: 樣本標準差, n: 樣本個數, x_bar: 樣本平均值
母體標準差與樣本標準差之計算公式:
考慮資料集為 {1,2,3,4,5}, μ = (1+2+3+4+5)/5=3, 使用公式法計算結果:
母體標準差 σ =(((1-3)^2+...+(5-3)^2)/5)^0.5=1.414214 (分母為5)
樣本標準差 σ =(((1-3)^2+...+(5-3)^2)/4)^0.5=1.581139 (分母為4)
使用 numpy.std 函數可以計算標準差, 分母預設值為樣本數 n, 其中參數 ddof(Means Delta Degrees of Freedom) 的預設值為 ddof=0, 如果設定 ddof=1, 則分母為 n-1, 詳細參考線上說明 [LINK].
Python-pandas 模組-不含NA值
使用 pandas.describe 函數以計算標準差, 其預設值為 n-1.
使用 df.describe().iloc[2,0] 取出 std 值, 另外也可以使用 df.describe().loc['std'] 取出 std值.
上述討論都沒有NA值的情形, 如果資料包括NA值時, 其計算結果為 nan, 使用 numpy.nanstd 函數可以忽略 NA值並計算標準差.
R-不含NA值
使用 sd {stats} 函數可計算標準差. stats 為R內建30個標準套件之一, 啟動R時, 已經載入該套件. 計算結果分母採用 n-1.
R-有NA值
如果資料有NA值, 則 sd 計算結果為 NA.
使用 na.rm = TRUE 參數可忽略NA值並計算標準差.
結論
使用 Python 與 R 語言須確認計算標準差之意義, 如果資料有NA值, 須特別小心處理.
# end
本篇說明 Python 的 Orange 模組中, 外掛 Associate 的使用, 包括建立頻繁項目集與關聯規則.
感謝 Chen-Yao 提供此問題.
近日安裝 Windows 與 R之後會有以下 normalizePath 語法錯誤:
查詢發現電腦確實有以下之目錄 C:\Users\asus\OneDrive\文件, 因此最有可能原因是此路徑包括中文字型"文件", 因此R解析結果為錯誤??
使用 path.expand 函數亦是錯誤
> path.expand("~/")
[1] "C:/Users/asus/OneDrive/??/"
使用 normalizePath 函數也有錯誤
> normalizePath(path.expand("~/"))
[1] "C:\\Users\\asus\\OneDrive\\??\\"
Warning message:
In normalizePath(path.expand(path), winslash, mustWork) :
path[1]="C:/Users/asus/OneDrive/??/": 檔案名稱、目錄名稱或磁碟區標籤語法錯誤。
變數名稱: HOME
變數值: C:\Users\asus
> path.expand("~/")
[1] "C:/Users/asus/"
> normalizePath(path.expand("~/"))
[1] "C:\\Users\\asus"
# end
iPAS - 巨量資料分析師認證 - 免費線上參考課程
講師:李明昌
考試網址:https://www.ipas.org.tw/bda/
網址:https://collegeplus.itri.org.tw/course/1161
單元一:資料類型與物件
單元二:資料庫概念(含NoSQL)
單元三:資料匯入與匯出
網址:https://collegeplus.itri.org.tw/course/1162
單元一:程式設計類型
單元二:自訂函數與控制敘述
單元三:程式除錯與效能提升方法
網址:https://collegeplus.itri.org.tw/course/1165
單元一:資料組織與清理(1)
單元二:資料組織與清理(2)
單元三:資料摘要與彙總(1)
單元四:資料摘要與彙總(2)
單元五:屬性轉換與萃取(1)
單元六 : 屬性轉換與萃取(2)
單元七 : 巨量資料處理概念(1)
單元八 : 巨量資料處理概念(2)
網址:https://collegeplus.itri.org.tw/course/1166
單元一:統計分析基礎(1)
單元二:統計分析基礎(2)
單元三:統計分析基礎(3)
單元四:探索式資料分析與非監督式學習(1)
單元五:探索式資料分析與非監督式學習(2)
單元六:線性模型與監督式學習(1)
單元七 : 線性模型與監督式學習(2)
# end
R-4.2.0, RStudio-2022.02.2+485 - Windows更新事項
Excel 迴歸分析:
步驟1: Excel \ 檔案 \ 選項 \ 分析工具箱 \ 執行 \ 確定
步驟2: 資料\ 資料分析 \ 迴歸 \ 確定
資料集下載: https://github.com/rwepa/DataDemo/blob/master/marketing.csv
# end
R-4.1版本以上開始支援原生管線操作(native pipe operator),管線操作可簡化R程式的撰寫。一般可以使用 magrittr 套件的 %>% 運算式進行管線操作,目前 R-4.1 以上版本可以使用 |> 進行管線操作。
# (1)傳統指派依序建立物件
x <- iris$Petal.Width[iris$Species== "virginica"]
x_density <- density(x)
plot(x_density, main = "Density plot")
grid()
# (2)使用 magrittr 套件
library(magrittr)
iris$Petal.Width[iris$Species== "virginica"] %>%
density() %>%
plot(main = "Density plot using '%>%'") %>%
grid()
# (3)使用原生管線操作 |>
iris$Petal.Width[iris$Species== "virginica"] |>
density() |>
plot(main = "Density plot using native pipe operator '|>'")>
grid()
# end
主題:
R語言中資料框的處理是重要技術之一,本篇文章說明資料框的常用處理技巧。
關鍵字:
> # 技巧1 篩選行,結果為 vector
> iris$Sepal.Length
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
[11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1
...
> # 技巧2 篩選行,結果為 vector(二個單引號)
> iris[, 'Sepal.Length']
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
[11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1
...
> # 技巧3 篩選行,結果為 vector(二個雙單引號)
> iris[, "Sepal.Length"]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
[11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1
...
> # 技巧4 篩選行,結果為 vector
> iris[, 1]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
[11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1
...
> # 技巧5 篩選行,結果為 vector
> iris[['Sepal.Length']]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
[11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1
...
> # 技巧6 篩選行,結果為 vector
> iris[["Sepal.Length"]]
[1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9
[11] 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1
...
> # 技巧7 篩選行,結果為 data.frame
> iris['Sepal.Length']
Sepal.Length
1 5.1
2 4.9
3 4.7
...
> # 技巧8 篩選行,結果為 data.frame
> iris["Sepal.Length"]
Sepal.Length
1 5.1
2 4.9
3 4.7
...
> # 技巧9 篩選列,結果為 data.frame
> iris[1, ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
> # 技巧10 篩選列,使用數值轉換,再加數值1,省略as.numeric會有錯誤
> as.numeric(iris[1,-5]) + 1
[1] 6.1 4.5 2.4 1.2
> # 技巧11 類別
> class(iris)
[1] "data.frame"
> # 技巧12 維度,結果為150列,5行
> dim(iris)
[1] 150 5
> # 技巧13 列名稱
> row.names(iris)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
...
> # 技巧14 行名稱
> colnames(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
> # 技巧15 行名稱
> names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
> # 技巧16 資料結構
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 ...
> # 技巧17 資料摘要
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
> # 技巧18 資料屬性
> attributes(iris)
$names
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
$class
[1] "data.frame"
$row.names
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[21] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
> # 技巧19 各列或各行群組計算
> apply(iris[-5], 1, mean)
[1] 2.550 2.375 2.350 2.350 2.550 2.850 2.425 2.525 2.225
[10] 2.400 2.700 2.500 2.325 2.125 2.800 3.000 2.750 2.575
...
> # 技巧20 各行群組計算,回傳結果為串列(list)- lapply 以行運算為主
> lapply(iris[-5], mean)
$Sepal.Length
[1] 5.843333
$Sepal.Width
[1] 3.057333
$Petal.Length
[1] 3.758
$Petal.Width
[1] 1.199333
# end
主題
R 在安裝目錄時, 如果有客製化需求, 可以設定套件安裝目錄, 本篇說明R的安裝目錄, 套件訊息與客製化安裝套件目錄之方法. 本方法使用R函數設定, 可用於 Windows, macOS, ubuntu等作業系統, 以下執行結果可能因使用者名稱與安裝路徑不同而有所差異.
感謝 Ying-Zhe 提供此問題.
關鍵字
# R.home()
# find.package('套件名稱')
# packageVersion('套件名稱')
# .libPaths()
# Rprofile.site
1. 查詢R的安裝目錄
# Windows 10
# "C:/PROGRA~1/R/R-41~1.2"
# macOS Catalina
[1] "/Library/Frameworks/R.framework/Resources"
# ununtu 20.04.3
[1] "/usr/lib/R"
2. 套件安裝目錄
# Windows 10
[1] "C:/Users/user/Documents/R/win-library/4.1/ggplot2"
# macOS Catalina
[1] "/Library/Frameworks/R.framework/Versions/4.1/Resources/library/ggplot2"
# ununtu 20.04.3
[1] "/home/rwepa/R/x86_64-pc-linux-gnu-library/4.1/ggplot2"
3. 套件版本
[1] ‘3.3.5’
4. 套件訊息
packageDescription('ggplot2')
Package: ggplot2
Version: 3.3.5
Title: Create Elegant Data Visualisations Using the Grammar of Graphics
....
5. 自訂套件安裝目錄
方法1-每次啟動R或RStudio皆須設定
# 步驟1 顯示套件下載與安裝目錄
.libPaths()
# [1] "C:/Users/user/Documents/R/win-library/4.1"
# [2] "C:/Program Files/R/R-4.1.2/library"
# 步驟2 建立自訂套件安裝目錄
# 考慮在使用者目錄中,以檔案總管建立 mypackages 目錄,本步驟依實際需求修改.
# 自訂套件目錄之完整路徑 C:/Users/user/mypackages
# 步驟3 加入自訂套件目錄於系統套件搜尋路徑之中
.libPaths('C:/Users/user/mypackages')
# 步驟4 顯示目前套件下載與安裝目錄
.libPaths()
# 結果顯示已經加入完成
# [1] "C:/Users/user/mypackages"
# [2] "C:/Program Files/R/R-4.1.2/library"
# 步驟5 安裝套件
install.packages("e1071")
# 步驟6 測試套件之載入, 結果顯示正常載入套件,準備收工...
library(e1071)
# 結果正常載入,無錯誤訊息
# 步驟7 重新啟動 R或RStudio 測試套件之載入,發生錯誤!!!
library(e1071)
# Error in library(e1071) : there is no package called ‘e1071’
# 步驟8 重新加入系統套件搜尋路徑之中(因為每次啟動皆須設定)
.libPaths('C:/Users/user/mypackages')
.libPaths()
[1] "C:/Users/user/mypackages"
[2] "C:/Program Files/R/R-4.1.2/library"
# 步驟9 測試套件之載入,結果顯示正常載入套件,正式完成,還有方法2 ...
library(e1071)
# 結果正常載入,無錯誤訊息
方法2-設定於R組態檔,每次啟動R/RStudio時無需設定
考慮 Windows 10 作業系統, R組態檔 Rprofile.site之位置如下
# C:\Program Files\R\R-4.1.2\etc\Rprofile.site
# 考量已經於以下目錄(C:\Users\user\Documents\R\win-library\4.1)安裝套件
# 使用 Notepad++ 等文字編輯器軟體,於檔案最底下加入以下1行程式,儲存檔案.
.libPaths(c('C:/Users/user/mypackages', 'C:/Users/user/Documents/R/win-library/4.1'))
# 下圖為 Notepad++ 免費軟體編輯 Rprofile.site 畫面
# end