Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
eue
Commits
09749db2
Commit
09749db2
authored
May 30, 2021
by
KangMin An
Browse files
Create & Update : 온도 예측 과정을 위한 생성 및 갱신 1차.
parent
2fd418a2
Changes
8
Show whitespace changes
Inline
Side-by-side
server/API명세서.md
View file @
09749db2
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
| Auth | POST | /login | 로그인 요청 |
| Auth | POST | /login | 로그인 요청 |
| Auth | POST | /:id/edit-profile | 회원 정보 수정 요청 |
| Auth | POST | /:id/edit-profile | 회원 정보 수정 요청 |
---
<br><br>
## API 명세 기록
## API 명세 기록
...
...
server/Data명세서.md
View file @
09749db2
...
@@ -162,3 +162,9 @@ EUE가 제일 중요하게 수행해야할 부분입니다. 데이터에 대해
...
@@ -162,3 +162,9 @@ EUE가 제일 중요하게 수행해야할 부분입니다. 데이터에 대해
5.
가공된 데이터들을 바탕으로 학습률이 0.05이며, 비용 함수는 평균제곱 오차(MSE)인 선형회귀 분석을 진행합니다.
<br><br>
5.
가공된 데이터들을 바탕으로 학습률이 0.05이며, 비용 함수는 평균제곱 오차(MSE)인 선형회귀 분석을 진행합니다.
<br><br>
6.
선형 회귀 분석이 후 생긴 가중치와 편향을
**analysis_parameters.csv**
로 저장합니다.
<br><br>
6.
선형 회귀 분석이 후 생긴 가중치와 편향을
**analysis_parameters.csv**
로 저장합니다.
<br><br>
# 4. Prediction
사용자 화면에 현재까지의 기록과 함께 단위 시간 뒤의 온도 예측 결과를 보이는 것을 목표로 합니다.
---- 진행중 입니다. ----
server/src/controllers/dataController.js
View file @
09749db2
...
@@ -128,8 +128,7 @@ const storeData = (type, time, loc, fdir, data) => {
...
@@ -128,8 +128,7 @@ const storeData = (type, time, loc, fdir, data) => {
// 외부 수집기로 부터 들어온 정보 처리
// 외부 수집기로 부터 들어온 정보 처리
const
handleOutData
=
async
(
locCode
,
lat
,
lng
)
=>
{
const
handleOutData
=
async
(
locCode
,
lat
,
lng
)
=>
{
// OpenWeatherAPI로 부터 지역의 날씨 정보획득
// OpenWeatherAPI로 부터 지역의 날씨 정보획득을 위해 지역의 경도와 위도, API Key, 단위 기준 metric 전달
// 지역의 경도와 위도, API KEy, 단위 기준 metric 전달
const
response
=
await
fetch
(
const
response
=
await
fetch
(
`https://api.openweathermap.org/data/2.5/weather?lat=
${
lat
}
&lon=
${
lng
}
&appid=
${
process
.
env
.
OPENWEATHERMAP_API_KEY
}
&units=metric`
`https://api.openweathermap.org/data/2.5/weather?lat=
${
lat
}
&lon=
${
lng
}
&appid=
${
process
.
env
.
OPENWEATHERMAP_API_KEY
}
&units=metric`
);
);
...
@@ -187,3 +186,12 @@ export const getDataInput = (req, res) => {
...
@@ -187,3 +186,12 @@ export const getDataInput = (req, res) => {
res
.
status
(
statusCode
.
err
).
send
(
serverMSG
.
server_err
);
res
.
status
(
statusCode
.
err
).
send
(
serverMSG
.
server_err
);
}
}
};
};
// 사용자의 데이터 가져오기 및 예측 값 전송
export
const
getUserData
=
(
req
,
res
)
=>
{
const
{
params
:
{
id
},
}
=
req
;
res
.
status
(
statusCode
.
ok
).
send
(
serverMSG
.
server_ok
);
};
server/src/data_processing/main.py
View file @
09749db2
...
@@ -9,7 +9,6 @@ import datetime
...
@@ -9,7 +9,6 @@ import datetime
from
os
import
getcwd
,
path
,
makedirs
from
os
import
getcwd
,
path
,
makedirs
import
sys
import
sys
import
pymysql
import
pymysql
import
numpy
as
np
from
preprocessing
import
preprocessingData
from
preprocessing
import
preprocessingData
from
linear_regression
import
LinearRegression
from
linear_regression
import
LinearRegression
...
...
server/src/data_processing/predict.py
0 → 100644
View file @
09749db2
'''
# predict.py의 역할
- 마지막으로 입력된 데이터 가져오기
- 최근 데이터들을 통해 단위 시간 후의 기온 예측
#### 수정 사항(5/29)
1. loadRawData에서 time_dir을 생성하는 부분을 오늘 날짜 경로와 어제 날짜 경로로 구분합니다.
2. data의 경로를 보내며, 오늘 날짜인지 어제 날짜인지를 결정합니다.
3. csv 파일을 읽어 온 뒤의 후처리 함수를 생성합니다.
'''
import
numpy
as
np
import
pymysql
import
sys
from
preprocessing
import
combineXdata
,
handleLearningParams
,
handleOutRawData
,
handleStatsParams
,
handleUserRawData
,
loadRawData
# DB를 이용하기 위한 정보
dbconfig
=
{
"host"
:
sys
.
argv
[
1
],
"user"
:
sys
.
argv
[
2
],
"password"
:
sys
.
argv
[
3
],
"database"
:
sys
.
argv
[
4
]}
# 사용자 ID
user_name
=
sys
.
argv
[
5
]
# DB Connect
eue_db
=
pymysql
.
connect
(
user
=
dbconfig
[
"user"
],
password
=
dbconfig
[
"password"
],
host
=
dbconfig
[
"host"
],
db
=
dbconfig
[
"database"
],
charset
=
"utf8"
)
cursor
=
eue_db
.
cursor
(
pymysql
.
cursors
.
DictCursor
)
# Get User and Outside data directory
query
=
"SELECT DATALINK FROM USER WHERE ID='{0}';"
.
format
(
user_name
)
cursor
.
execute
(
query
)
result
=
cursor
.
fetchall
()
user_link
=
result
[
0
][
"DATALINK"
]
link_ls
=
user_link
.
split
(
"/"
)
outside_link
=
(
'/'
).
join
(
link_ls
[:
-
2
])
+
"/Outside"
# File names.
weather_data_file
=
"weather.csv"
analy_params_file
=
"analysis_parameters.csv"
predict_params_file
=
"prediction_parameters.csv"
# Get parameters and Data.
weather_out
,
weatehr_user
=
[],
[]
# - Get weights and bias.
raw_wb_data
=
loadRawData
(
user_link
,
"today"
,
analy_params_file
)
weights
,
bias
=
handleLearningParams
(
raw_wb_data
)
# - Get mean and standard deviation.
raw_ms_data
=
loadRawData
(
user_link
,
"today"
,
predict_params_file
)
mean
,
std
,
temp_mean
,
temp_std
=
handleStatsParams
(
raw_ms_data
)
# - Get weather data and modify.
raw_weather_out
=
loadRawData
(
outside_link
,
"today"
,
weather_data_file
)
raw_weather_user
=
loadRawData
(
user_link
,
"today"
,
weather_data_file
)
out_dict
=
handleOutRawData
(
raw_weather_out
)
user_x
,
_
=
handleUserRawData
(
raw_weather_user
)
input_data
=
combineXdata
(
user_x
,
out_dict
)
input_data
=
input_data
[
-
1
]
# Pedict
pass
server/src/data_processing/preprocessing.py
View file @
09749db2
...
@@ -10,24 +10,45 @@ import csv
...
@@ -10,24 +10,45 @@ import csv
import
numpy
as
np
import
numpy
as
np
def
loadRawData
(
link
,
file_name
):
def
makeTimeDIR
(
):
'''
'''
### CSV 파일의 내용을 반환하는 함수
### 날짜를 이용한 경로를 생생하는 함수
- 제공 받은 링크를 통해 파일을 읽고 반환합니다.
- 오늘 날짜를 이용한 경로와 어제 날짜를 이용한 경로를 생성합니다.
- 생성된 경로는 dictionary 형태로 반환합니다.
'''
'''
raw_data
=
[]
# 오늘 날짜로 된 경로 생성
today
=
datetime
.
datetime
.
today
()
today
=
datetime
.
datetime
.
today
()
tYear
=
str
(
today
.
year
)
tMonth
=
str
(
today
.
month
)
if
today
.
month
>=
10
else
'0'
+
str
(
today
.
month
)
tDay
=
str
(
today
.
day
)
if
today
.
day
>=
10
else
'0'
+
str
(
today
.
day
)
today_dir
=
'/'
+
tYear
+
'/'
+
tYear
+
tMonth
+
'/'
+
tYear
+
tMonth
+
tDay
# 오늘을 기준 하루 전 날짜로 된 경로 생성
yesterday
=
today
-
datetime
.
timedelta
(
days
=
1
)
yesterday
=
today
-
datetime
.
timedelta
(
days
=
1
)
yMonth
=
yesterday
.
month
if
yesterday
.
month
>=
10
else
"0"
+
\
yYear
=
str
(
yesterday
.
year
)
yMonth
=
str
(
yesterday
.
month
)
if
yesterday
.
month
>=
10
else
"0"
+
\
str
(
yesterday
.
month
)
str
(
yesterday
.
month
)
yDay
=
yesterday
.
day
if
yesterday
.
day
>=
10
else
"0"
+
str
(
yesterday
.
day
)
yDay
=
str
(
yesterday
.
day
)
if
yesterday
.
day
>=
10
else
"0"
+
\
str
(
yesterday
.
day
)
time_dir
=
"/"
+
str
(
yesterday
.
year
)
+
"/"
+
\
yesterday_dir
=
"/"
+
yYear
+
"/"
+
yYear
+
yMonth
+
"/"
+
yYear
+
yMonth
+
yDay
str
(
yesterday
.
year
)
+
str
(
yMonth
)
+
"/"
+
\
str
(
yesterday
.
year
)
+
str
(
yMonth
)
+
str
(
yDay
)
time_dir
=
{
"today"
:
today_dir
,
"yesterday"
:
yesterday_dir
}
return
time_dir
def
loadRawData
(
link
,
time_domain
,
file_name
):
'''
### CSV 파일의 내용을 반환하는 함수
- 제공 받은 링크를 통해 파일을 읽고 반환합니다.
'''
raw_data
=
[]
time_dir
=
makeTimeDIR
()
file_dir
=
os
.
getcwd
()
+
link
+
time_dir
+
file_name
file_dir
=
os
.
getcwd
()
+
link
+
time_dir
[
time_domain
]
+
file_name
if
not
os
.
path
.
isfile
(
file_dir
):
if
not
os
.
path
.
isfile
(
file_dir
):
print
(
"File doesn't exist on {0}"
.
format
(
file_dir
))
print
(
"File doesn't exist on {0}"
.
format
(
file_dir
))
...
@@ -112,7 +133,7 @@ def handleOutRawData(out_data):
...
@@ -112,7 +133,7 @@ def handleOutRawData(out_data):
return
out_dict
return
out_dict
def
handleParam
eter
s
(
raw_w
):
def
handle
Learning
Params
(
raw_w
=
None
):
'''
'''
### Weights & Bias를 처리하는 함수
### Weights & Bias를 처리하는 함수
- raw 데이터는 weights와 bias가 합쳐진 상태입니다.
- raw 데이터는 weights와 bias가 합쳐진 상태입니다.
...
@@ -133,6 +154,27 @@ def handleParameters(raw_w):
...
@@ -133,6 +154,27 @@ def handleParameters(raw_w):
return
weights
,
bias
return
weights
,
bias
def
handleStatsParams
(
raw_ms
=
None
):
'''
### 평균과 표준편차를 다루는 함수
- csv 파일로 부터 읽어온 자료를 전체 범주의 평균, 표준편차 그리고 내부 온도에 대한 평균, 표준편차로 나누는 함수 입니다.
'''
mean
,
std
=
[],
[]
raw_mean
=
raw_ms
[
0
]
raw_std
=
raw_ms
[
1
]
for
fig
in
raw_mean
:
mean
.
append
(
float
(
fig
))
for
fig
in
raw_std
:
std
.
append
(
float
(
fig
))
temp_mean
=
mean
[
7
]
temp_std
=
std
[
7
]
return
mean
,
std
,
temp_mean
,
temp_std
def
combineXdata
(
user_x
,
out_dict
):
def
combineXdata
(
user_x
,
out_dict
):
'''
'''
### 분리된 입력 데이터를 합치는 함수
### 분리된 입력 데이터를 합치는 함수
...
@@ -228,13 +270,14 @@ def preprocessingData(user_link, out_link):
...
@@ -228,13 +270,14 @@ def preprocessingData(user_link, out_link):
5. 데이터 넘파이 형식 배열로 변환
5. 데이터 넘파이 형식 배열로 변환
6. 반환
6. 반환
'''
'''
raw_user_data
=
loadRawData
(
user_link
,
"/weather.csv"
)
raw_user_data
=
loadRawData
(
user_link
,
"yesterday"
,
"/weather.csv"
)
raw_out_data
=
loadRawData
(
out_link
,
"/weather.csv"
)
raw_out_data
=
loadRawData
(
out_link
,
"yesterday"
,
"/weather.csv"
)
raw_parameters
=
loadRawData
(
user_link
,
"/analysis_parameters.csv"
)
raw_parameters
=
loadRawData
(
user_link
,
"yesterday"
,
"/analysis_parameters.csv"
)
user_x
,
train_t
=
handleUserRawData
(
raw_user_data
)
user_x
,
train_t
=
handleUserRawData
(
raw_user_data
)
out_dict
=
handleOutRawData
(
raw_out_data
)
out_dict
=
handleOutRawData
(
raw_out_data
)
weights
,
bias
=
handleParam
eter
s
(
raw_parameters
)
weights
,
bias
=
handle
Learning
Params
(
raw_parameters
)
train_x
=
combineXdata
(
user_x
,
out_dict
)
train_x
=
combineXdata
(
user_x
,
out_dict
)
...
...
server/src/middlewares.js
View file @
09749db2
import
routes
from
"
./routes
"
;
import
routes
from
"
./routes
"
;
/*
# localmiddleware
1. Pug Template에서 routes.js에 선언된 경로들을 사용하기 위함.
*/
export
const
localmiddleware
=
(
req
,
res
,
next
)
=>
{
export
const
localmiddleware
=
(
req
,
res
,
next
)
=>
{
res
.
locals
.
routes
=
routes
;
res
.
locals
.
routes
=
routes
;
next
();
next
();
};
};
/*
# onlyPrivate
- 인증된 사용자만 사용할 수 있는 데이터에 접근하기 위한 중간 과정.
- Front-end 개발과 함께 진행 예정
*/
export
const
onlyPrivate
=
(
req
,
res
,
next
)
=>
{
next
();
};
server/src/routers/dataRouter.js
View file @
09749db2
import
express
from
"
express
"
;
import
express
from
"
express
"
;
import
routes
from
"
../routes
"
;
import
routes
from
"
../routes
"
;
import
{
getDataInput
}
from
"
../controllers/dataController
"
;
import
{
getDataInput
,
getUserData
}
from
"
../controllers/dataController
"
;
import
{
onlyPrivate
}
from
"
../middlewares
"
;
const
dataRouter
=
express
.
Router
();
const
dataRouter
=
express
.
Router
();
dataRouter
.
get
(
routes
.
dataInput
,
getDataInput
);
dataRouter
.
get
(
routes
.
dataInput
,
getDataInput
);
dataRouter
.
get
(
routes
.
dataUser
,
onlyPrivate
,
getUserData
);
export
default
dataRouter
;
export
default
dataRouter
;
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