熱門文章

2022年6月12日 星期日

使用 Numpy 讀取資料做多項式擬合並用 Matplotlib 繪製帶有誤差槓的 XY 散布圖

作者:王一哲
日期:2022年6月12日


前言


我之前已經寫過兩篇類似的文章,使用的工具分別為 Microsoft Excel 及 SciDAVis,如果想要做到同樣的效果,用 Python 搭配 Numpy 及 Matplotlib 套件一樣也能做到。以下是我測試成功的方法,為了看清楚每個步驟的效果,採用 Jupyter Notebook 的方式呈現,這個連結是我放在 Google Colab 上的檔案。

由純文字檔讀取資料並計算平均值及A類不確定度


假設以下的資料儲存在 data.csv 之中,最上面一列是欄位標題,內容是不同質量的紙製直升機滯空時間,分別測量20次,目標是讀取資料後計算20次時間的平均值及A類不確定度。
m (g), t1 (s), t2 (s), t3 (s), t4 (s), t5 (s), t6 (s), t7 (s), t8 (s), t9 (s), t10 (s), t11 (s), t12 (s), t13 (s), t14 (s), t15 (s), t16 (s), t17 (s), t18 (s), t19 (s), t20 (s)
1.4, 1.50, 1.45, 1.54, 1.53, 2.01, 1.56, 1.57, 2.15, 1.60, 2.18, 1.70, 1.78, 1.90, 1.71, 1.78, 1.85, 1.74, 2.01, 1.70, 1.84
2.9, 1.01, 1.44, 1.21, 1.31, 1.24, 1.49, 1.33, 1.51, 1.46, 1.51, 1.05, 1.14, 1.00, 1.03, 0.84, 1.03, 1.43, 1.29, 0.64, 1.19
4.3, 1.04, 1.05, 0.94, 0.84, 1.21, 1.13, 0.79, 0.84, 1.15, 0.91, 1.13, 1.29, 1.29, 0.85, 1.14, 0.94, 1.06, 1.04, 1.03, 0.94
5.7, 1.14, 1.01, 0.64, 0.77, 1.24, 1.13, 0.87, 0.81, 0.76, 0.73, 0.84, 0.74, 0.69, 0.80, 0.71, 0.82, 0.83, 0.74, 0.75, 0.77
6.9, 0.64, 0.74, 0.69, 0.84, 0.94, 0.84, 0.91, 1.02, 0.83, 0.79, 0.81, 0.90, 1.13, 0.73, 0.55, 0.53, 0.61, 0.71, 0.73, 0.63

使用 numpy.loadtxt 讀取 data.csv 的內容,以逗號作為分隔字元,忽略檔案最上方一列的資料,不將資料拆開,全部儲存到 data 之中,格式為 numpy ndarray。
import numpy as np

data = np.loadtxt("data.csv", delimiter=',', skiprows=1, unpack=False)
data 儲存的資料為
array([[1.4 , 1.5 , 1.45, 1.54, 1.53, 2.01, 1.56, 1.57, 2.15, 1.6 , 2.18,
        1.7 , 1.78, 1.9 , 1.71, 1.78, 1.85, 1.74, 2.01, 1.7 , 1.84],
       [2.9 , 1.01, 1.44, 1.21, 1.31, 1.24, 1.49, 1.33, 1.51, 1.46, 1.51,
        1.05, 1.14, 1.  , 1.03, 0.84, 1.03, 1.43, 1.29, 0.64, 1.19],
       [4.3 , 1.04, 1.05, 0.94, 0.84, 1.21, 1.13, 0.79, 0.84, 1.15, 0.91,
        1.13, 1.29, 1.29, 0.85, 1.14, 0.94, 1.06, 1.04, 1.03, 0.94],
       [5.7 , 1.14, 1.01, 0.64, 0.77, 1.24, 1.13, 0.87, 0.81, 0.76, 0.73,
        0.84, 0.74, 0.69, 0.8 , 0.71, 0.82, 0.83, 0.74, 0.75, 0.77],
       [6.9 , 0.64, 0.74, 0.69, 0.84, 0.94, 0.84, 0.91, 1.02, 0.83, 0.79,
        0.81, 0.9 , 1.13, 0.73, 0.55, 0.53, 0.61, 0.71, 0.73, 0.63]])