pandas を使用して .csv ファイルを読み込んでいます。次に、データフレームから x と y のペアを取得し、それを使用symfit
してデータのグローバル フィットを実行します。私はパンダのデータフレームとsymfit
. 私の現在の概念実証コードは 2 つのデータ セットに対して機能しますが、元のファイルから多くのデータ セットがインポートされても機能するようにコードを記述したいと考えています。元の.csv
ファイルは常に同じ形式になります。などの形式では常に と の値のペアにx
なります。y
x1, y1, x2, y2,
データフレームを繰り返し処理して、個々の配列を引き出すことはできますx1, y1, x2, y2,
か? それはデータフレームを使用する目的を無効にしますか?
# creating the dataframe
from pandas import read_csv, Series, DataFrame, isnull
data_file = read_csv(filename, header=None, skiprows=2) # no data in first two rows--these contain information I use later on for plotting
# important note: data sets contain different numbers of points, so pandas reads in nan for any missing values.
X1 = Series(data_file[0]).values
X1 = x_1[~isnull(x_1)] # removes any nan values (up for any suggestions on a better way to do this. Other methods I have tried remove entire rows or columns that contain nan)
Y1 = Series(data_file[1]).values
Y1 = y_1[~isnull(y_1)]
X2 = Series(data_file[2]).values
X2 = x_2[~isnull(x_2)]
Y2 = Series(data_file[3]).values
Y2 = y_2[~isnull(y_2)]
# sample data
# X1 = [12.5, 6.7, 5, 3.1, 128, 47, 5, 3.1, 6.7, 12.5]
# Y1 = [280, 150, 127, 85, 400, 401, 110, 96, 131, 241]
# X2 = [75, 39, 10, 7.7, 19, 39, 75]
# Y2 = [296, 257, 141, 100, 181, 254, 324]
ここから、symfit のモデルとフィッティング関数を含むクラスに X と Y を渡します。X と Y を連結できるとは思いません。symfit がデータ セットごとに個別の曲線に適合するように、それらを別々にしておく必要があります (4 つの共有パラメーターを使用)。
以下は私が使用しているモデルです。symfit の構文を解体している可能性があります。私はまだ symfit について学んでいますが、これまでのところ素晴らしいものです。この当てはめは 2 つのデータ セットに対して機能し、後で当てはめパラメータを抽出して結果をプロットすることができます。
# This model assumes two data sets. I need to figure out how to fit as many as 10 data sets.
from symfit import parameters, variables, Fit, Model
fi_1 = 0 # These parameters change with each x,y pair. These will also be read from the original data file. I have them hard-coded here for ease.
fi_2 = 1
x_1, x_2, y_1, y_2 = variables('x_1, x_2, y_1, y_2')
vmax, km, evk, ev = parameters('vmax, km, evk, ev') # these are all shared
model = Model({
y_1: vmax * x_1 / (km * (1 + (fi_1 * evk)) + x_1 * (1 + (fi_1 * ev))),
y_2: vmax * x_2 / (km * (1 + (fi_2 * evk)) + x_2 * (1 + (fi_2 * ev)))})
fit = Fit(model, x_1=X1, x_2=X2, y_1=Y1, y_2=Y2)
fit_result = fit.execute()
問題の概要: 10 個もの x、y のペアを同時に適合させることができます。symfit に渡される x および y 配列をハードコーディングしないように、データフレームを反復処理するクリーンな方法はありますか?