Commit 4ca38377 authored by KangMin An's avatar KangMin An
Browse files

Update : 데이터 처리 코드 일부 수정 및 주석 갱신.

parent 81b7e5fa
......@@ -11,11 +11,12 @@ import numpy as np
class LinearRegression:
def __init__(self, train_x, train_t, weights, bias, delta=1e-4, learning_rate=0.05, err_rate=0.01):
def __init__(self, train_x, train_t, weights=None, bias=None, delta=1e-4, learning_rate=0.05, err_rate=0.01):
self.train_x = train_x.T # (n, 10) -> (10, n)
self.train_t = train_t.T # (n, 01) -> (01, n)
if weights == None or bias == None:
# weights와 bias가 존재하지 않는 경우, 초기화를 위해 bias를 대표로 확인
if bias == None:
# Initialize Parameters - w : (1, 10), b : float
self.weights, self.bias = self.initialize(self.train_x)
else:
......
......@@ -34,8 +34,6 @@ def storeParameters(link, filename, data):
dbconfig = {"host": sys.argv[1], "user": sys.argv[2],
"password": sys.argv[3], "database": sys.argv[4]}
print(dbconfig)
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)
......@@ -44,6 +42,7 @@ query = "SELECT ID,DATALINK FROM USER;"
cursor.execute(query)
result = cursor.fetchall()
# Main Process
for userdata in result:
print("User ID : ", userdata["ID"])
......@@ -53,6 +52,7 @@ for userdata in result:
# ./data/DO/SGG/EMD/Users/ID
user_datalink = userdata["DATALINK"]
dir_ls = user_datalink.split("/")
# ./data/DO/SGG/EMD/Outside
outside_datalink = ("/").join(dir_ls[:-2]) + "/Outside"
......@@ -65,55 +65,28 @@ for userdata in result:
bias, learning_rate=0.05)
model.gradientDescent()
# Save the Parameters.
# - analysis_parameters
analysis_data = ""
'''
# Test Codes Start.
'''
print("After Linear Regression -\n")
test_data = np.array([[5], [20], [0], [16.87], [40], [
1011], [0.72], [26.70], [47.00], [64]])
test_data = (test_data - mean) / std_d
y_hat = model.predict(test_data, model.weights, model.bias)
print("Test Data.\n", test_data, "\n")
print("Predict - standard deviation : ", y_hat)
print("Predict - temperature : ", y_hat*std_d[7][0] + mean[7][0], "\n")
print("Cost.")
print(model.cost_MSE(model.train_x, model.train_t,
model.weights, model.bias), "\n")
print("Weights.")
print(model.weights, "\n")
print("Bias.")
print(model.bias)
'''
# Test Codes End.
'''
# Save the Parameters.
# - analysis_parameters
analysis_data = ""
for i in range(len(model.weights[0])):
analysis_data += str(model.weights[0][i]) + ','
for i in range(len(model.weights[0])):
analysis_data += str(model.weights[0][i]) + ','
analysis_data += str(model.bias)
analysis_data += str(model.bias)
storeParameters(user_datalink, "/analysis_parameters.csv", analysis_data)
storeParameters(user_datalink, "/analysis_parameters.csv", analysis_data)
# - prediction_parameters
prediction_data = ""
# - prediction_parameters
prediction_data = ""
for i in range(len(mean)):
prediction_data += str(mean[i][0]) + ','
prediction_data = prediction_data[:-1]
prediction_data += '\n'
for i in range(len(mean)):
prediction_data += str(mean[i][0]) + ','
prediction_data = prediction_data[:-1]
prediction_data += '\n'
for i in range(len(std_d)):
prediction_data += str(std_d[i][0]) + ','
prediction_data = prediction_data[:-1]
for i in range(len(std_d)):
prediction_data += str(std_d[i][0]) + ','
prediction_data = prediction_data[:-1]
storeParameters(
user_datalink, "/prediction_parameters.csv", prediction_data)
storeParameters(
user_datalink, "/prediction_parameters.csv", prediction_data)
......@@ -34,7 +34,6 @@ def loadRawData(link, file_name):
return None
data_file = open(file_dir, 'r', newline='')
print("Data File before CSV reader.\n", data_file)
csv_data = csv.reader(data_file)
for line in csv_data:
......@@ -47,7 +46,7 @@ def loadRawData(link, file_name):
def handleUserRawData(user_data):
'''
# User Raw Data (CSV 파일 데이터) 가공 함수
### User Raw Data (CSV 파일 데이터) 가공 함수
- [ 월 / 일 / 시 / 분 / 온도 / 습도 / 광도 ]의 데이터를 변환하는 함수
- 월 / 일 / 분 제거
- test_data(분이 제거된 데이터)와 true_data(단위 시간 후 실제 온도)로 나누기
......@@ -72,7 +71,7 @@ def handleUserRawData(user_data):
def handleOutRawData(out_data):
'''
# Out Raw Data (CSV 파일 데이터) 가공 함수
### Out Raw Data (CSV 파일 데이터) 가공 함수
- [ 월 / 일 / 시 / 분 / 온도 / 습도 / 기압 / 풍속 ] 데이터를 변환하는 함수
- '분' 을 제거합니다.
- 같은 시각의 데이터들은 평균을 구해서 데이터로 저장합니다.
......@@ -114,6 +113,11 @@ def handleOutRawData(out_data):
def handleParameters(raw_w):
'''
### Weights & Bias를 처리하는 함수
- raw 데이터는 weights와 bias가 합쳐진 상태입니다.
- raw 데이터를 하나씩 잘라 실수로 변환한 뒤, 마지막의 편향을 잘라냅니다.
'''
if raw_w == None:
return None, None
......@@ -131,7 +135,7 @@ def handleParameters(raw_w):
def combineXdata(user_x, out_dict):
'''
# 분리된 입력 데이터를 합치는 함수
### 분리된 입력 데이터를 합치는 함수
- 사용자 데이터와 외부 데이터를 결합해 입력층의 값으로 가공합니다.
'''
train_x = []
......@@ -160,12 +164,13 @@ def Xnormalize(data):
'''
### 정규화 함수
- 입력 층의 데이터를 정규화 시킵니다.
- 월, 일 데이터의 평균과 표준 편차를 계산하여 값을 수정합니다.
'''
normalized_data = data.T # (n,10) -> (10,n)
mean = np.mean(normalized_data, axis=1) # 평균 (10, 1)
std_d = np.std(normalized_data, axis=1) # 표준편차
std_d = np.std(normalized_data, axis=1) # 표준편차
# 월, 일의 평균과 표준편차 지정
new_mean = []
......@@ -195,8 +200,13 @@ def Xnormalize(data):
return normalized_data, new_mean, new_std_d
def normalize(data):
n_data = data.T # (n,10) -> (10,n)
def Tnormalize(data):
'''
### 데이터 정규화 함수
- 평균과 표준 편차를 이용해 입력된 데이터를 정규화 시킵니다.
- 현재 입력층의 데이터가 아닌 train 데이터의 참 값을 표준화 시킵니다.
'''
n_data = data.T # (n,1) -> (1,n)
mean = np.mean(n_data, axis=1) # 평균
std_d = np.std(n_data, axis=1) # 표준편차
......@@ -210,14 +220,13 @@ def normalize(data):
def preprocessingData(user_link, out_link):
'''
# 데이터 분석 전 데이터 전처리 함수입니다.
# 데이터 분석 전 데이터 전처리 함수
1. 데이터 로드
2. 데이터 1차 가공 (handle~RawData)
3. 데이터 2차 가공 (combineXdata)
4. 데이터 3차 가공 (nomalize~)
4. 데이터 넘파이 형식 배열로 변환
5. 반환
5. 데이터 넘파이 형식 배열로 변환
6. 반환
'''
raw_user_data = loadRawData(user_link, "/weather.csv")
raw_out_data = loadRawData(out_link, "/weather.csv")
......@@ -233,7 +242,7 @@ def preprocessingData(user_link, out_link):
train_x, mean, std_d = Xnormalize(train_x)
train_t = np.array(train_t) # (10,1)
train_t = normalize(train_t)
train_t = Tnormalize(train_t)
weights = np.array(weights) if weights != None else None
bias = float(bias) if bias != None else None
......
......@@ -33,11 +33,12 @@ const dataProcessingJob = schedule.scheduleJob(rule, () => {
pyprocess.stdout.on("data", (data) => {
console.log("Data processing is start.");
console.log(data.toString()); // Buffer to String.
});
pyprocess.stderr.on("data", (error) => {
console.log("Error in the data processing.");
console.log(error);
console.log(error.toString());
});
pyprocess.on("close", () => {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment