preprocessing.py 2.22 KB
Newer Older
1
"""
2
    # preprocessing.py
3

4
    데이터 전처리를 위한 파일입니다.
5
    DB에 저장된 값들을 불러와 사용자 등록 장소의 날씨 데이터와 외부 날씨 데이터를 결합해 CSV 파일을 생성합니다.
6

7
"""
8

박예은's avatar
박예은 committed
9
10
11
12
import pandas as pd
import datetime
import numpy as np

13
def preprocess(cursor, host):
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    """
        ### preprocess(cursor, host)

        - cursor : psycopg2의 SQL 실행을 위한 cursor.
        - host : 사용자 정보.

        사용자 정보를 바탕으로 외부 날씨와 내부 날씨를 검색해 CSV 파일로 작성합니다. 
    """

    cursor.execute(
        "SELECT t2.collected_at as \"date\", temp_out, humi_out, press, wind_speed, temp_in, humi_in, lights FROM"
        + " (SELECT collected_at, temp as temp_out, humi as humi_out,press, wind_speed FROM Weather_Outs WHERE loc_code = %s) t1"
        + " JOIN "
        + " (SELECT collected_at, temp as temp_in, humi as humi_in, lights FROM Weather_Ins WHERE host = %s) t2"
        + " ON t1.collected_at = t2.collected_at", (host["loc_code"], host["email"],))
    results = cursor.fetchall()

    file = open("/src/dataprocessing/temp.csv", 'w')

    # header
    file.write("date,temp_out,humi_out,press,wind_speed,temp_in,humi_in,lights\n")

    for result in results:
        file.write("{0},{1},{2},{3},{4},{5},{6},{7}\n".format(
            result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7]))

    file.close()
박예은's avatar
박예은 committed
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64


    df = pd.read_csv("/src/dataprocessing/temp.csv")
    date_time = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M')
    timestamp_s = date_time.map(datetime.datetime.timestamp)

    df = df[['temp_out','humi_out','press','wind_speed']]
    day = 24*60*60
    year = (365.2425)*day

    df['Day sin'] = np.sin(timestamp_s * (2 * np.pi / day))
    df['Day cos'] = np.cos(timestamp_s * (2 * np.pi / day))
    df['Year sin'] = np.sin(timestamp_s * (2 * np.pi / year))
    df['Year cos'] = np.cos(timestamp_s * (2 * np.pi / year))

    def standard(dataframe):
        mean = dataframe.mean()
        std = dataframe.std()
        zscore = ( dataframe - mean ) / std
        return zscore, mean, std
        
    standard_df, mean_df , std_df = standard(df)

    return standard_df, mean_df , std_df