我有一个df
,如下所示:
ContextID EscAct_Curr_A StepID
7289973 0.122100122 1
7289973 0 2
7289973 0 2
7289973 0.122100122 2
7289973 0.122100122 2
7289973 0.122100122 2
7289973 0.122100122 2
7289999 0.244200245 1
7289999 0.244200245 1
7289999 0.244200245 1
7289999 0.244200245 2
7289999 0.366300374 2
7289999 0.366300374 2
7289999 0.366300374 2
7290025 0.122100122 1
7290025 0.122100122 1
7290025 0.122100122 2
7290025 0 2
7290025 0 2
7290025 0.122100122 2
我要做的是合并来自不同StepID的所有值,并为其创建单独的df。
例如,必须将StepID
1的所有值保存为一个df,例如s1,并且必须将StepID
2的所有值保存到一个df,例如s2,依此类推。我有24个这样的StepID。
完成之后,我想在运行机器学习算法后绘制散点图。
我所做的事情:
对于StepID 1
s1 = X.loc[X['StepID'] == 1]
s1_array = s1.iloc[:,1].values.astype(float).reshape(-1,1)
min_max_scaler = preprocessing.MinMaxScaler()
scaled_array_s1 = min_max_scaler.fit_transform(s1_array)
s1.iloc[:,1]=scaled_array_s1
ocsvm = OneClassSVM(nu = 0.1, kernel = 'rbf', gamma = 'scale')
s1['y_ocsvm1'] = ocsvm.fit_predict(s1.values[:,[1]])
对于StepID 2
s2 = X.loc[X['StepID'] == 2]
s2_array = s2.iloc[:,1].values.astype(float).reshape(-1,1)
min_max_scaler = preprocessing.MinMaxScaler()
scaled_array_s2 = min_max_scaler.fit_transform(s2_array)
s2.iloc[:,1]=scaled_array_s2
ocsvm = OneClassSVM(nu = 0.1, kernel = 'rbf', gamma = 'scale')
s2['y_ocsvm2'] = ocsvm.fit_predict(s2.values[:,[1]])
绘制散点图:
fig, ax = plt.subplots()
ax.scatter(s1.values[s1['y_ocsvm1'] == 1, 2], s1.values[s1['y_ocsvm1'] == 1, 1], c = 'green', label = 'Normal')
ax.scatter(s1.values[s1['y_ocsvm1'] == -1, 2], s1.values[s1['y_ocsvm1'] == -1, 1], c = 'red', label = 'Outlier')
ax.scatter(s2.values[s2['y_ocsvm2'] == 1, 2], s2.values[s2['y_ocsvm2'] == 1, 1], c = 'green')
ax.scatter(s2.values[s2['y_ocsvm2'] == -1, 2], s2.values[s2['y_ocsvm2'] == -1, 1], c = 'red')
plt.legend()
这些代码完全可以实现我想要的功能,但是为24个不同的StepID编写这样的代码非常繁琐。因此,我想知道是否存在一种更紧凑的方法来实现以下目标,也许可以通过使用循环或函数来实现。
答案 0 :(得分:1)
您有95%的重复代码。唯一真正不同的是-特定的步骤ID。因此,您可以使用此函数并使用不同的ID多次调用它:
<?php
$s = $this->input->get('q', FALSE);
echo "<p>You searched for $s</p>"; //this will show '100% 500'
$this->load->helper('security');
$t = xss_clean($s);
echo "<p>You searched for $t</p>"; //this will show '100P0'
您可以将结果存储在某种列表或字典中,以便以后绘制。