Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
22_23-J 21
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
22_23-J 21
22_23-J 21
Commits
470d861e
Commit
470d861e
authored
Jan 26, 2023
by
Hirunika R.A.S.
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Time series model completed
parent
f00d7c27
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
97 additions
and
0 deletions
+97
-0
BackEnd/time_series_models_builder.py
BackEnd/time_series_models_builder.py
+97
-0
No files found.
BackEnd/time_series_models_builder.py
View file @
470d861e
...
...
@@ -172,7 +172,104 @@ class TimeSeriesModel:
#return self.feature_dataframes
def
plot_featured_data
(
self
,
feature
=
'dayofweek'
,
district
=
"Monaragala"
):
import
pandas
as
pd
import
matplotlib.pyplot
as
plt
import
seaborn
as
sns
color_pal
=
sns
.
color_palette
()
fig
,
ax
=
plt
.
subplots
(
figsize
=
(
10
,
8
))
sns
.
boxplot
(
data
=
self
.
feature_dataframes
[
district
],
x
=
feature
,
y
=
district
)
ax
.
set_title
(
'Showing {} Data by {}'
.
format
(
district
,
feature
))
plt
.
show
()
def
create_models
(
self
):
import
time
import
xgboost
as
xgb
#This will create two dictionaries each contains feature datafranes for all the districts
self
.
create_features
(
self
.
train
,
trainOrTest
=
"train"
)
self
.
create_features
(
self
.
test
,
trainOrTest
=
"test"
)
FEATURES
=
[
'dayofyear'
,
'dayofweek'
,
'quarter'
,
'month'
,
'year'
]
for
district
in
self
.
df
.
columns
:
TARGET
=
district
X_train
=
self
.
feature_train_dataframes
[
district
][
FEATURES
]
y_train
=
self
.
feature_train_dataframes
[
district
][
TARGET
]
X_test
=
self
.
features_test_dataframes
[
district
][
FEATURES
]
y_test
=
self
.
features_test_dataframes
[
district
][
TARGET
]
self
.
model_x_tests
[
district
]
=
X_test
print
(
"=========== Start Creating XGBooster for {} ==========="
.
format
(
district
))
reg
=
None
reg
=
xgb
.
XGBRegressor
(
base_score
=
0.5
,
booster
=
'gbtree'
,
n_estimators
=
1000
,
early_stopping_rounds
=
50
,
objective
=
'reg:linear'
,
max_depth
=
3
,
learning_rate
=
0.01
)
print
(
"=========== Model Created ==========="
)
print
(
"=========== Model Training : Started ==========="
)
reg
.
fit
(
X_train
,
y_train
,
eval_set
=
[(
X_train
,
y_train
),
(
X_test
,
y_test
)],
verbose
=
100
)
print
(
"=========== Model Training : Completed ==========="
)
self
.
ts_models
[
district
]
=
reg
print
(
"=========== Model Saved Successfully : {} District ==========="
.
format
(
district
))
time
.
sleep
(
3
)
def
check_feature_importance
(
self
,
district
=
"Monaragala"
):
import
pandas
as
pd
import
matplotlib.pyplot
as
plt
import
seaborn
as
sns
color_pal
=
sns
.
color_palette
()
reg
=
self
.
ts_models
[
district
]
fi
=
pd
.
DataFrame
(
data
=
reg
.
feature_importances_
,
index
=
reg
.
feature_names_in_
,
columns
=
[
'importance'
])
fi
.
sort_values
(
'importance'
)
.
plot
(
kind
=
'barh'
,
title
=
'Feature Importance'
)
plt
.
show
()
def
forecaset_data
(
self
,
district
=
"Monaragala"
):
import
pandas
as
pd
import
matplotlib.pyplot
as
plt
import
seaborn
as
sns
color_pal
=
sns
.
color_palette
()
reg
=
self
.
ts_models
[
district
]
X_test
=
self
.
model_x_tests
[
district
]
.
copy
()
test
=
self
.
features_test_dataframes
[
district
]
.
copy
()
df
=
self
.
feature_dataframes
[
district
]
.
copy
()
test
[
'prediction'
]
=
reg
.
predict
(
X_test
)
#get the predictions for testing dataset
df
=
df
.
merge
(
test
[[
'prediction'
]],
how
=
'left'
,
left_index
=
True
,
right_index
=
True
)
ax
=
df
[[
district
]]
.
plot
(
figsize
=
(
15
,
5
))
df
[
'prediction'
]
.
plot
(
ax
=
ax
,
style
=
'.'
)
plt
.
legend
([
'Truth Data'
,
'Predictions'
])
ax
.
set_title
(
'Raw Dat and Prediction - {} District'
.
format
(
district
))
plt
.
show
()
#return test , df
def
forecast_week
(
self
,
starts_from
,
district
=
"Monaragala"
):
import
pandas
as
pd
import
matplotlib.pyplot
as
plt
import
seaborn
as
sns
color_pal
=
sns
.
color_palette
()
end_date
=
pd
.
date_range
(
start
=
starts_from
,
periods
=
7
+
1
,
freq
=
'D'
,
closed
=
'right'
)[
-
1
]
ax
=
df
.
loc
[(
df
.
index
>
starts_from
)
&
(
df
.
index
<
end_date
)][
district
]
\
.
plot
(
figsize
=
(
15
,
5
),
title
=
'Week Of Data'
)
df
.
loc
[(
df
.
index
>
starts_from
)
&
(
df
.
index
<
end_date
)][
'prediction'
]
\
.
plot
(
style
=
'.'
)
plt
.
legend
([
'Truth Data'
,
'Prediction'
])
plt
.
show
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment