Skip to content

Commit c3e260a

Browse files
committed
New regression example for pzmm
1 parent ab6387b commit c3e260a

13 files changed

+11449
-242
lines changed
Binary file not shown.
Binary file not shown.
Binary file not shown.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
3+
import math
4+
import pickle
5+
import pandas as pd
6+
import numpy as np
7+
8+
with open('/models/resources/viya/cb485d04-6cb9-48ce-a829-67b8167303ce/LinearRegression.pickle', 'rb') as _pFile:
9+
_thisModelFit = pickle.load(_pFile)
10+
11+
def scoreLinearRegression(Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population):
12+
"Output: EM_PREDICTION, EM_PREDICTION"
13+
14+
try:
15+
global _thisModelFit
16+
except NameError:
17+
18+
with open('/models/resources/viya/cb485d04-6cb9-48ce-a829-67b8167303ce/LinearRegression.pickle', 'rb') as _pFile:
19+
_thisModelFit = pickle.load(_pFile)
20+
21+
try:
22+
inputArray = pd.DataFrame([[Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population]],
23+
columns=['Avg_Area_Income', 'Avg_Area_House_Age', 'Avg_Area_Number_of_Rooms', 'Avg_Area_Number_of_Bedrooms', 'Area_Population'],
24+
dtype=float)
25+
prediction = _thisModelFit.predict(inputArray)
26+
except ValueError:
27+
# For models requiring or including an intercept value, a 'const' column is required
28+
# For example, many statsmodels models include an intercept value that must be included for the model prediction
29+
inputArray = pd.DataFrame([[1.0, Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population]],
30+
columns=['const', 'Avg_Area_Income', 'Avg_Area_House_Age', 'Avg_Area_Number_of_Rooms', 'Avg_Area_Number_of_Bedrooms', 'Area_Population'],
31+
dtype=float)
32+
prediction = _thisModelFit.predict(inputArray)
33+
34+
try:
35+
EM_PREDICTION = float(prediction)
36+
except TypeError:
37+
# If the model expects non-binary responses, a TypeError will be raised.
38+
# The except block shifts the prediction to accept a non-binary response.
39+
EM_PREDICTION = float(prediction[:,1])
40+
41+
if (EM_PREDICTION >= 1232072.6541453):
42+
EM_PREDICTION = '1'
43+
else:
44+
EM_PREDICTION = '0'
45+
46+
return(EM_PREDICTION, EM_PREDICTION)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "LinearRegression",
3+
"description": "",
4+
"function": "classification",
5+
"scoreCodeType": "python",
6+
"trainTable": " ",
7+
"trainCodeType": "Python",
8+
"algorithm": "",
9+
"targetVariable": "Price",
10+
"targetEvent": null,
11+
"targetLevel": "BINARY",
12+
"eventProbVar": "EM_PREDICTION",
13+
"modeler": "sasdemo",
14+
"tool": "Python 3",
15+
"toolVersion": "3.8.3"
16+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
data sasep.out;
2+
dcl package pymas pm;
3+
dcl package logger logr('App.tk.MAS');
4+
dcl varchar(32767) character set utf8 pypgm;
5+
dcl double resultCode revision;
6+
dcl double EM_PREDICTION;
7+
8+
9+
method score(double Avg_Area_Income, double Avg_Area_House_Age, double Avg_Area_Number_of_Rooms, double Avg_Area_Number_of_Bedrooms, double Area_Population, in_out double resultCode, in_out double EM_PREDICTION, in_out double EM_PREDICTION);
10+
resultCode = revision = 0;
11+
if null(pm) then do;
12+
pm = _new_ pymas();
13+
resultCode = pm.useModule('model_exec_5b58f10f-2fde-4de7-a36e-96618a770c71', 1);
14+
if resultCode then do;
15+
resultCode = pm.appendSrcLine('');
16+
resultCode = pm.appendSrcLine('');
17+
resultCode = pm.appendSrcLine('import math');
18+
resultCode = pm.appendSrcLine('import pickle');
19+
resultCode = pm.appendSrcLine('import pandas as pd');
20+
resultCode = pm.appendSrcLine('import numpy as np');
21+
resultCode = pm.appendSrcLine('');
22+
resultCode = pm.appendSrcLine('with open("/models/resources/viya/cb485d04-6cb9-48ce-a829-67b8167303ce/LinearRegression.pickle", "rb") as _pFile:');
23+
resultCode = pm.appendSrcLine(' _thisModelFit = pickle.load(_pFile)');
24+
resultCode = pm.appendSrcLine('');
25+
resultCode = pm.appendSrcLine('def scoreLinearRegression(Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population):');
26+
resultCode = pm.appendSrcLine(' "Output: EM_PREDICTION, EM_PREDICTION"');
27+
resultCode = pm.appendSrcLine('');
28+
resultCode = pm.appendSrcLine(' try:');
29+
resultCode = pm.appendSrcLine(' global _thisModelFit');
30+
resultCode = pm.appendSrcLine(' except NameError:');
31+
resultCode = pm.appendSrcLine('');
32+
resultCode = pm.appendSrcLine(' with open("/models/resources/viya/cb485d04-6cb9-48ce-a829-67b8167303ce/LinearRegression.pickle", "rb") as _pFile:');
33+
resultCode = pm.appendSrcLine(' _thisModelFit = pickle.load(_pFile)');
34+
resultCode = pm.appendSrcLine('');
35+
resultCode = pm.appendSrcLine(' try:');
36+
resultCode = pm.appendSrcLine(' inputArray = pd.DataFrame([[Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population]],');
37+
resultCode = pm.appendSrcLine(' columns=["Avg_Area_Income", "Avg_Area_House_Age", "Avg_Area_Number_of_Rooms", "Avg_Area_Number_of_Bedrooms", "Area_Population"],');
38+
resultCode = pm.appendSrcLine(' dtype=float)');
39+
resultCode = pm.appendSrcLine(' prediction = _thisModelFit.predict(inputArray)');
40+
resultCode = pm.appendSrcLine(' except ValueError:');
41+
resultCode = pm.appendSrcLine(' # For models requiring or including an intercept value, a "const" column is required');
42+
resultCode = pm.appendSrcLine(' # For example, many statsmodels models include an intercept value that must be included for the model prediction');
43+
resultCode = pm.appendSrcLine(' inputArray = pd.DataFrame([[1.0, Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population]],');
44+
resultCode = pm.appendSrcLine(' columns=["const", "Avg_Area_Income", "Avg_Area_House_Age", "Avg_Area_Number_of_Rooms", "Avg_Area_Number_of_Bedrooms", "Area_Population"],');
45+
resultCode = pm.appendSrcLine(' dtype=float)');
46+
resultCode = pm.appendSrcLine(' prediction = _thisModelFit.predict(inputArray)');
47+
resultCode = pm.appendSrcLine('');
48+
resultCode = pm.appendSrcLine(' try:');
49+
resultCode = pm.appendSrcLine(' EM_PREDICTION = float(prediction)');
50+
resultCode = pm.appendSrcLine(' except TypeError:');
51+
resultCode = pm.appendSrcLine(' # If the model expects non-binary responses, a TypeError will be raised.');
52+
resultCode = pm.appendSrcLine(' # The except block shifts the prediction to accept a non-binary response.');
53+
resultCode = pm.appendSrcLine(' EM_PREDICTION = float(prediction[:,1])');
54+
resultCode = pm.appendSrcLine('');
55+
resultCode = pm.appendSrcLine(' if (EM_PREDICTION >= 1232072.6541453):');
56+
resultCode = pm.appendSrcLine(' EM_PREDICTION = "1"');
57+
resultCode = pm.appendSrcLine(' else:');
58+
resultCode = pm.appendSrcLine(' EM_PREDICTION = "0" ');
59+
resultCode = pm.appendSrcLine('');
60+
resultCode = pm.appendSrcLine(' return(EM_PREDICTION, EM_PREDICTION)');
61+
revision = pm.publish(pm.getSource(), 'model_exec_5b58f10f-2fde-4de7-a36e-96618a770c71');
62+
63+
if ( revision < 1 ) then do;
64+
logr.log( 'e', 'py.publish() failed.');
65+
resultCode = -1;
66+
return;
67+
end;
68+
end;
69+
end;
70+
resultCode = pm.useMethod('scoreLinearRegression');
71+
if resultCode then do;
72+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
73+
return;
74+
end;
75+
resultCode = pm.setDouble('Avg_Area_Income', Avg_Area_Income);
76+
if resultCode then
77+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
78+
resultCode = pm.setDouble('Avg_Area_House_Age', Avg_Area_House_Age);
79+
if resultCode then
80+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
81+
resultCode = pm.setDouble('Avg_Area_Number_of_Rooms', Avg_Area_Number_of_Rooms);
82+
if resultCode then
83+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
84+
resultCode = pm.setDouble('Avg_Area_Number_of_Bedrooms', Avg_Area_Number_of_Bedrooms);
85+
if resultCode then
86+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
87+
resultCode = pm.setDouble('Area_Population', Area_Population);
88+
if resultCode then
89+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
90+
resultCode = pm.execute();
91+
if (resultCode) then put 'Error: pm.execute failed. resultCode=' resultCode;
92+
else do;
93+
EM_PREDICTION = pm.getDouble('EM_PREDICTION');
94+
EM_PREDICTION = pm.getDouble('EM_PREDICTION');
95+
end;
96+
end;
97+
98+
method run();
99+
set SASEP.IN;
100+
score(Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population, resultCode, EM_PREDICTION, EM_PREDICTION);
101+
end;
102+
enddata;
103+
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package pythonScore / overwrite=yes;
2+
dcl package pymas pm;
3+
dcl package logger logr('App.tk.MAS');
4+
dcl varchar(32767) character set utf8 pypgm;
5+
dcl int resultCode revision;
6+
7+
method score(double Avg_Area_Income, double Avg_Area_House_Age, double Avg_Area_Number_of_Rooms, double Avg_Area_Number_of_Bedrooms, double Area_Population, in_out double resultCode, in_out double EM_PREDICTION, in_out double EM_PREDICTION);
8+
resultCode = revision = 0;
9+
if null(pm) then do;
10+
pm = _new_ pymas();
11+
resultCode = pm.useModule('model_exec_5b58f10f-2fde-4de7-a36e-96618a770c71', 1);
12+
if resultCode then do;
13+
resultCode = pm.appendSrcLine('');
14+
resultCode = pm.appendSrcLine('');
15+
resultCode = pm.appendSrcLine('import math');
16+
resultCode = pm.appendSrcLine('import pickle');
17+
resultCode = pm.appendSrcLine('import pandas as pd');
18+
resultCode = pm.appendSrcLine('import numpy as np');
19+
resultCode = pm.appendSrcLine('');
20+
resultCode = pm.appendSrcLine('with open("/models/resources/viya/cb485d04-6cb9-48ce-a829-67b8167303ce/LinearRegression.pickle", "rb") as _pFile:');
21+
resultCode = pm.appendSrcLine(' _thisModelFit = pickle.load(_pFile)');
22+
resultCode = pm.appendSrcLine('');
23+
resultCode = pm.appendSrcLine('def scoreLinearRegression(Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population):');
24+
resultCode = pm.appendSrcLine(' "Output: EM_PREDICTION, EM_PREDICTION"');
25+
resultCode = pm.appendSrcLine('');
26+
resultCode = pm.appendSrcLine(' try:');
27+
resultCode = pm.appendSrcLine(' global _thisModelFit');
28+
resultCode = pm.appendSrcLine(' except NameError:');
29+
resultCode = pm.appendSrcLine('');
30+
resultCode = pm.appendSrcLine(' with open("/models/resources/viya/cb485d04-6cb9-48ce-a829-67b8167303ce/LinearRegression.pickle", "rb") as _pFile:');
31+
resultCode = pm.appendSrcLine(' _thisModelFit = pickle.load(_pFile)');
32+
resultCode = pm.appendSrcLine('');
33+
resultCode = pm.appendSrcLine(' try:');
34+
resultCode = pm.appendSrcLine(' inputArray = pd.DataFrame([[Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population]],');
35+
resultCode = pm.appendSrcLine(' columns=["Avg_Area_Income", "Avg_Area_House_Age", "Avg_Area_Number_of_Rooms", "Avg_Area_Number_of_Bedrooms", "Area_Population"],');
36+
resultCode = pm.appendSrcLine(' dtype=float)');
37+
resultCode = pm.appendSrcLine(' prediction = _thisModelFit.predict(inputArray)');
38+
resultCode = pm.appendSrcLine(' except ValueError:');
39+
resultCode = pm.appendSrcLine(' # For models requiring or including an intercept value, a "const" column is required');
40+
resultCode = pm.appendSrcLine(' # For example, many statsmodels models include an intercept value that must be included for the model prediction');
41+
resultCode = pm.appendSrcLine(' inputArray = pd.DataFrame([[1.0, Avg_Area_Income, Avg_Area_House_Age, Avg_Area_Number_of_Rooms, Avg_Area_Number_of_Bedrooms, Area_Population]],');
42+
resultCode = pm.appendSrcLine(' columns=["const", "Avg_Area_Income", "Avg_Area_House_Age", "Avg_Area_Number_of_Rooms", "Avg_Area_Number_of_Bedrooms", "Area_Population"],');
43+
resultCode = pm.appendSrcLine(' dtype=float)');
44+
resultCode = pm.appendSrcLine(' prediction = _thisModelFit.predict(inputArray)');
45+
resultCode = pm.appendSrcLine('');
46+
resultCode = pm.appendSrcLine(' try:');
47+
resultCode = pm.appendSrcLine(' EM_PREDICTION = float(prediction)');
48+
resultCode = pm.appendSrcLine(' except TypeError:');
49+
resultCode = pm.appendSrcLine(' # If the model expects non-binary responses, a TypeError will be raised.');
50+
resultCode = pm.appendSrcLine(' # The except block shifts the prediction to accept a non-binary response.');
51+
resultCode = pm.appendSrcLine(' EM_PREDICTION = float(prediction[:,1])');
52+
resultCode = pm.appendSrcLine('');
53+
resultCode = pm.appendSrcLine(' if (EM_PREDICTION >= 1232072.6541453):');
54+
resultCode = pm.appendSrcLine(' EM_PREDICTION = "1"');
55+
resultCode = pm.appendSrcLine(' else:');
56+
resultCode = pm.appendSrcLine(' EM_PREDICTION = "0" ');
57+
resultCode = pm.appendSrcLine('');
58+
resultCode = pm.appendSrcLine(' return(EM_PREDICTION, EM_PREDICTION)');
59+
revision = pm.publish(pm.getSource(), 'model_exec_5b58f10f-2fde-4de7-a36e-96618a770c71');
60+
61+
if ( revision < 1 ) then do;
62+
logr.log( 'e', 'py.publish() failed.');
63+
resultCode = -1;
64+
return;
65+
end;
66+
end;
67+
end;
68+
resultCode = pm.useMethod('scoreLinearRegression');
69+
if resultCode then do;
70+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
71+
return;
72+
end;
73+
resultCode = pm.setDouble('Avg_Area_Income', Avg_Area_Income);
74+
if resultCode then
75+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
76+
resultCode = pm.setDouble('Avg_Area_House_Age', Avg_Area_House_Age);
77+
if resultCode then
78+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
79+
resultCode = pm.setDouble('Avg_Area_Number_of_Rooms', Avg_Area_Number_of_Rooms);
80+
if resultCode then
81+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
82+
resultCode = pm.setDouble('Avg_Area_Number_of_Bedrooms', Avg_Area_Number_of_Bedrooms);
83+
if resultCode then
84+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
85+
resultCode = pm.setDouble('Area_Population', Area_Population);
86+
if resultCode then
87+
logr.log('E', 'useMethod() failed. resultCode=$s', resultCode);
88+
resultCode = pm.execute();
89+
if (resultCode) then put 'Error: pm.execute failed. resultCode=' resultCode;
90+
else do;
91+
EM_PREDICTION = pm.getDouble('EM_PREDICTION');
92+
EM_PREDICTION = pm.getDouble('EM_PREDICTION');
93+
end;
94+
end;
95+
96+
endpackage;
97+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[
2+
{
3+
"role": "inputVariables",
4+
"name": "inputVar.json"
5+
},
6+
{
7+
"role": "outputVariables",
8+
"name": "outputVar.json"
9+
},
10+
{
11+
"role": "score",
12+
"name": "LinearRegressionScore.py"
13+
},
14+
{
15+
"role": "scoreResource",
16+
"name": "LinearRegression.pickle"
17+
}
18+
]
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
[
2+
{
3+
"name": "Avg_Area_Income",
4+
"length": 8,
5+
"type": "decimal",
6+
"level": "interval"
7+
},
8+
{
9+
"name": "Avg_Area_House_Age",
10+
"length": 8,
11+
"type": "decimal",
12+
"level": "interval"
13+
},
14+
{
15+
"name": "Avg_Area_Number_of_Rooms",
16+
"length": 8,
17+
"type": "decimal",
18+
"level": "interval"
19+
},
20+
{
21+
"name": "Avg_Area_Number_of_Bedrooms",
22+
"length": 8,
23+
"type": "decimal",
24+
"level": "interval"
25+
},
26+
{
27+
"name": "Area_Population",
28+
"length": 8,
29+
"type": "decimal",
30+
"level": "interval"
31+
}
32+
]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
{
3+
"name": "EM_PREDICTION",
4+
"length": 8,
5+
"type": "decimal",
6+
"level": "interval"
7+
}
8+
]

0 commit comments

Comments
 (0)