身為一個擁有國際技術經驗的台灣技術工作者,我觀察到越來越多SAS使用者開始探索Python的強大功能。Python簡潔的語法、豐富的生態系統和活躍的社群,使其成為資料分析的理想工具。這篇文章將分享我如何協助SAS使用者轉換到Python,並提供從環境建置到實戰應用的完整。

為什麼選擇Python?

長久以來,SAS一直是資料處理和分析的黃金標準,尤其在統計分析領域擁有領先地位。然而,隨著資料科學的蓬勃發展,開源工具如Python的興起,提供更靈活、全面的解決方案。Python不僅在資料科學領域表現出色,也廣泛應用於網頁開發、自動化、機器學習等領域,學習Python能提升資料分析能力,同時拓展更廣闊的技術視野。

建立Python基地:環境設定與工具選擇

踏入Python世界的第一步是建立穩固的開發環境。我推薦使用Anaconda,它包含Python直譯器、常用套件和開發工具,簡化環境設定的過程。

Anaconda安裝步驟 (Windows & Linux)

Anaconda的安裝步驟在Windows和Linux系統上大同小異:

  1. 下載Anaconda安裝程式:前往Anaconda官方網站,下載對應作業系統的Python 3版本安裝程式。

  2. 執行安裝程式:

    • 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之間轉換資料,我推薦使用以下方法:

  1. CSV檔案:將SAS資料集匯出為CSV檔案,然後使用Python的pandas函式庫讀取。

    import pandas as pd
    df = pd.read_csv("sas_data.csv")
    

    這段程式碼使用pandas讀取CSV檔案到DataFrame中。

  2. 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 運算元檢查物件的識別,而 == 運算元檢查物件的值。在第一個例子中,xy 指向同一個物件,所以 x is y 的結果是 True。在第二個例子中,ab 是不同的物件,即使它們的值相同,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]);

圖表説明:變數與物件的關係。變數 xy 指向同一個物件,而變數 ab 指向不同的物件,即使這些物件的值相同。

比較運算元可以用於數值、字串和其他資料型別。它們傳回布林值 TrueFalse

字串

在 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 的字串格式化功能,以及如何格式化整數的不同進位表示方式。善用這些技巧,可以讓程式碼的輸出更清晰易懂。