身為一個擁有國際技術經驗的台灣技術工作者,我觀察到越來越多SAS使用者開始探索Python的強大功能。Python簡潔的語法、豐富的生態系統和活躍的社群,使其成為資料分析的理想工具。這篇文章將分享我如何協助SAS使用者轉換到Python,並提供從環境建置到實戰應用的完整。
為什麼選擇Python?
長久以來,SAS一直是資料處理和分析的黃金標準,尤其在統計分析領域擁有領先地位。然而,隨著資料科學的蓬勃發展,開源工具如Python的興起,提供更靈活、全面的解決方案。Python不僅在資料科學領域表現出色,也廣泛應用於網頁開發、自動化、機器學習等領域,學習Python能提升資料分析能力,同時拓展更廣闊的技術視野。
建立Python基地:環境設定與工具選擇
踏入Python世界的第一步是建立穩固的開發環境。我推薦使用Anaconda,它包含Python直譯器、常用套件和開發工具,簡化環境設定的過程。
Anaconda安裝步驟 (Windows & Linux)
Anaconda的安裝步驟在Windows和Linux系統上大同小異:
下載Anaconda安裝程式:前往Anaconda官方網站,下載對應作業系統的Python 3版本安裝程式。
執行安裝程式:
- Windows:雙擊下載的安裝程式,按照指示完成安裝。建議將Anaconda加入系統環境變數,方便在命令提示字元中直接執行Python。
- Linux:使用終端機執行安裝程式,例如
bash Anaconda3-2023.03-Linux-x86_64.sh
。同樣建議將Anaconda加入系統環境變數。
graph LR A[下載Anaconda] --> B{執行安裝程式}; B -- 設定環境變數 --> C[完成安裝];
此流程圖簡潔地展示了Anaconda的安裝流程,涵蓋下載、執行安裝程式和設定環境變數三個主要步驟。
執行Python程式碼與開發工具
安裝完成後,我們可以開始執行Python程式碼。在Windows系統中,可以使用命令提示字元或PowerShell執行.py
檔案;在Linux系統中,則使用終端機執行。
為了提升開發效率,我推薦使用整合開發環境 (IDE) 或 Jupyter Notebook。IDE 提供程式碼編輯、除錯、版本控制等功能,而 Jupyter Notebook 則允許將程式碼、文字、圖表整合在一個互動式檔案中,非常適合資料分析和探索。
Jupyter Notebook:互動式程式設計體驗
Jupyter Notebook 是一款功能強大的互動式程式設計工具,它允許將程式碼、文字、圖表整合在一個檔案中,方便分享和展示分析結果。
graph LR A[程式碼] --> B(Jupyter Notebook); C[文字] --> B; D[圖表] --> B; B --> E[互動式檔案];
此圖表展示了Jupyter Notebook如何整合程式碼、文字和圖表,最終生成一個互動式檔案。
Python與SAS的資料格式轉換技巧
在SAS和Python之間轉換資料,我推薦使用以下方法:
CSV檔案:將SAS資料集匯出為CSV檔案,然後使用Python的pandas函式庫讀取。
import pandas as pd df = pd.read_csv("sas_data.csv")
這段程式碼使用pandas讀取CSV檔案到DataFrame中。
SAS7BDAT檔案:使用Python的
sas7bdat
函式庫直接讀取SAS7BDAT檔案。from sas7bdat import SAS7BDAT with SAS7BDAT("sas_data.sas7bdat") as f: df = f.to_data_frame()
這段程式碼使用
sas7bdat
函式庫讀取SAS7BDAT檔案到DataFrame。
後續學習方向
- 資料視覺化:使用Matplotlib和Seaborn等套件,將資料轉化為直觀的圖表。
- 機器學習:使用Scikit-learn等套件,構建機器學習模型。
- 網頁開發:使用Django和Flask等框架,開發網頁應用程式。
希望這篇文章能幫助您順利從SAS轉換到Python,開啟資料科學的新篇章。
Python 資料分析實戰:DataFrame 操作技巧
Python 的 pandas 函式庫提供 DataFrame 資料結構,類別似於 SAS 的資料集,方便進行資料操作和分析。以下是一些常用的 DataFrame 操作技巧:
import pandas as pd
# 建立 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 28],
'City': ['Taipei', 'Taichung', 'Kaohsiung']}
df = pd.DataFrame(data)
# 顯示 DataFrame
print(df)
# 選擇特定欄位
print(df[['Name', 'Age']])
# 篩選資料
print(df[df['Age'] > 25])
# 排序資料
print(df.sort_values('Age'))
以上程式碼示範了建立 DataFrame、顯示 DataFrame、選擇特定欄位、篩選資料和排序資料等常用操作。
graph LR B[B] A[建立 DataFrame] --> B{顯示 DataFrame}; B --> C[選擇欄位]; C --> D[篩選資料]; D --> E[排序資料];
此流程圖展示了 DataFrame 的基本操作流程,從建立到排序。
透過這些技巧,您可以更有效率地操作和分析資料,從而獲得更深入的洞察。
持續學習和探索 Python 資料分析的更多可能性,您將會發現更多寶藏!
x = 10
y = x
print(x is y) # 輸出 True,因為 x 和 y 指向同一個物件
print(x == y) # 輸出 True,因為 x 和 y 的值相等
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b) # 輸出 False,因為 a 和 b 是不同的物件,即使值相同
print(a == b) # 輸出 True,因為 a 和 b 的值相等
這段程式碼示範了 is
和 ==
運算元的區別。is
運算元檢查物件的識別,而 ==
運算元檢查物件的值。在第一個例子中,x
和 y
指向同一個物件,所以 x is y
的結果是 True
。在第二個例子中,a
和 b
是不同的物件,即使它們的值相同,a is b
的結果也是 False
。
graph LR C[C] A[變數 x] --> B(物件 10); A --> C{值 10}; D[變數 y] --> B; D --> C; E[變數 a] --> F(物件 [1, 2, 3]); G[變數 b] --> H(物件 [1, 2, 3]);
圖表説明:變數與物件的關係。變數 x
和 y
指向同一個物件,而變數 a
和 b
指向不同的物件,即使這些物件的值相同。
比較運算元可以用於數值、字串和其他資料型別。它們傳回布林值 True
或 False
。
字串
在 Python 中,字串是由 Unicode 字元組成的不可變序列。字串可以用單引號、雙引號或三引號括起來。三引號允許多行字串。
string1 = 'Hello, world!'
string2 = "Python is awesome"
string3 = '''This is a
multiline string'''
這段程式碼展示了 Python 中定義字串的不同方式。單引號、雙引號和三引號都可以用於建立字串,其中三引號允許建立多行字串。
Python 提供了豐富的字串操作方法,例如:
- 串接:使用
+
運算元 - 重複:使用
*
運算元 - 索引:使用
[]
- 切片:使用
[:]
- 長度:使用
len()
函式
str1 = "Hello"
str2 = "World"
# 串接
print(str1 + " " + str2) # 輸出: Hello World
# 重複
print(str1 * 3) # 輸出: HelloHelloHello
# 索引
print(str1[0]) # 輸出: H
# 切片
print(str1[1:4]) # 輸出: ell
# 長度
print(len(str1)) # 輸出: 5
這段程式碼示範了 Python 中常用的字串操作方法,包括串接、重複、索引、切片和計算長度。
flowchart LR C[C] D[D] E[E] F[F] A["字串 \"Hello\""] --> B{H} A --> C{e} A --> D{l} A --> E{l} A --> F{o} subgraph 索引 B C D E F end
**圖表説明:**字串的索引。每個字元在字串中都有對應的索引,從 0 開始。
與 Python 不同,SAS 中的字元變數具有預定義的長度。如果字串長度超過變數長度,多餘的字元將被截斷。
在 Python 和 SAS 中有效地使用字串對於資料處理和分析至關重要。理解它們的特性和操作方法可以幫助你更好地處理和分析資料。
s = 'Hello World'
print(s[3:-1]) # 輸出: lo Worl
這段程式碼示範瞭如何使用起始索引 3 和結束索引 -1 來擷取字串。起始索引 3 代表包含該位置的字元,而結束索引 -1 代表不包含序列中最後一個字元。因此,輸出的結果是 'lo Worl'
。
s = 'Hello World'
print(s[3:]) # 輸出: lo World
這個例子中,起始索引仍然是 3,但結束索引留空,表示擷取到序列的末尾。因此,輸出的結果包含了最後一個字母 ’d’,即 'lo World'
。
s = 'Hello World'
print(s[-11]) # 輸出: H
負數索引 -11 表示從序列末尾倒數第 11 個字元開始,也就是第一個字元 ‘H’。
s = 'Hello World'
try:
print(s[-12])
except IndexError:
print("索引超出範圍") # 輸出:索引超出範圍
由於字串 s
的長度為 11,索引 -12 超出了範圍,因此會觸發 IndexError
。
字串格式化
Python 提供多種字串格式化方法,例如 f-string:
name = "玄貓"
age = 3 # 只是個比喻,別當真
print(f"大家好,我是{name},今年{age}歲。") # 輸出:大家好,我是玄貓,今年3歲。
f-string 讓在字串中嵌入變數變得非常簡潔。在字串前面加上 f
,然後將變數用大括號 {}
括起來即可。
graph LR B[B] E[E] A[字串] --> B{切片} B --> C[起始索引] B --> D[結束索引] A --> E{格式化} E --> F[f-string]
**圖表説明:**此圖表展示了 Python 字串的切片和格式化方法。切片操作需要指定起始和結束索引,而格式化可以使用 f-string 等方法。
除了 f-string,Python 也支援其他格式化方法,例如 str.format()
和 %
運算元。在後續的文章中,玄貓將會探討這些方法,並分享更多實用的技巧。
在 Python 的資料科學領域,字串操作和格式化是不可或缺的技能。熟練掌握這些技巧,能讓你的程式碼更簡潔、易讀,並提升資料處理和分析的效率。
在接下來的文章中,玄貓將會探討更進階的字串操作技巧,例如正規表示式,以及如何使用 Python 處理不同編碼的字串。敬請期待!
s = "Hello, world!"
print(s[0]) # 輸出: H
print(s[7]) # 輸出: w
print(s[-1]) # 輸出: !
# print(s[-12]) # 原本會丟擲 IndexError: string index out of range,已移除
以上程式碼示範瞭如何使用索引存取字串中的個別字元。s[0]
存取第一個字元,s[7]
存取第八個字元,s[-1]
存取最後一個字元。由於 s
的長度為 12,索引 -12 超出範圍,因此註解掉了會造成錯誤的程式碼。
字串格式化
Python 提供了多種字串格式化方式,format()
方法和 f-strings 是其中兩種常用的方法。
使用 format() 方法
format()
方法使用大括號 {}
作為佔位符,並可透過位置引數或關鍵字引數指定要替換的值。
print('性別:{0}'.format("女性")) # 輸出: 性別:女性
{0}
是位置引數,表示將 format()
方法的第一個引數 “女性” 替換到這個位置。
print('性別:{0:>10}'.format("女性")) # 輸出: 性別: 女性
格式規格 {:>10}
表示將替換欄位右對齊,並設定欄位寬度為 10 個字元。
使用 f-strings
f-strings 是 Python 3.6 引入的更簡潔的字串格式化方法。它以字母 f
開頭,並在大括號 {}
中直接包含要計算的表示式。
半徑 = 4
圓周率 = 3.14159
print(f"半徑為:{半徑} 的圓面積\n為:{圓周率 * 半徑 **2}")
# 輸出:
# 半徑為:4 的圓面積
# 為:50.26544
在大括號 {}
中,我們可以直接使用變數 半徑
和表示式 圓周率 * 半徑 **2
。f-strings 會在執行時計算這些表示式,並將結果插入到字串中。
格式化整數
格式化整數的方法與格式化字串類別似。
整數值 = 123456789
print(f"{整數值:,d}") # 輸出: 123,456,789
格式規格 :,d
表示使用逗號作為千位分隔符。
print(f"{123456789:>10,d}\n{1089:>10,d}")
# 輸出:
# 123,456,789
# 1,089
格式規格 {:>10,d}
表示欄位右對齊,寬度為 10,並使用逗號作為千位分隔符。
Python 也支援顯示整數的八進位、十六進位和二進位表示:
整數值 = 99
print(f"十進位: {整數值}\n十六進位: {整數值:x}\n八進位: {整數值:o}\n二進位: {整數值:b}")
# 輸出:
# 十進位: 99
# 十六進位: 63
# 八進位: 143
# 二進位: 1100011
{:x}
、{:o}
和 {:b}
分別表示以十六進位、八進位和二進位格式輸出整數值。
透過以上範例,我們可以瞭解如何使用 Python 的字串格式化功能,以及如何格式化整數的不同進位表示方式。善用這些技巧,可以讓程式碼的輸出更清晰易懂。