electricProportion.py 13.4 KB
Newer Older
lcn's avatar
lcn committed
1 2 3 4 5 6 7 8 9 10 11 12 13
import numpy as np


def timeCalc(time=""):
    startTime = time[0].split(" ")[1].split(":")
    endTime = time[1].split(" ")[1].split(":")
    startTimer = int(startTime[0]) + int(startTime[1]) / 60
    endTimer = int(endTime[0]) + int(endTime[1]) / 60
    timer = endTimer - startTimer

    return timer


wang.wenrong's avatar
wang.wenrong committed
14 15 16 17
def electQuar(stateDict="", stageComponent="", timestage="", type="",
              timeAll="", power=""):
    affects = [i for i in range(len(stageComponent)) if
               stageComponent[i] == type]
lcn's avatar
lcn committed
18 19 20 21 22 23 24 25
    equipQuar = []
    timerUse = []
    for each in affects:
        startIndex = timeAll.index(timestage[each][0])
        endIndex = timeAll.index(timestage[each][1])
        timerUse.append(timeCalc(time=timestage[each]))
        equipQuar.append(np.mean(power[startIndex:endIndex]) * timerUse[-1])

wang.wenrong's avatar
wang.wenrong committed
26
    stateDict[type[0]] = [equipQuar, timerUse]
lcn's avatar
lcn committed
27 28 29

    return stateDict

wang.wenrong's avatar
wang.wenrong committed
30 31 32 33

def twoQuar(stateDict={}, elems=[], onetype="", timeOccur="", timeAll="",
            power=""):
    if onetype == ["空调运行"]:
lcn's avatar
lcn committed
34
        pass
wang.wenrong's avatar
wang.wenrong committed
35
    elif onetype == ["电冰箱运行"]:
lcn's avatar
lcn committed
36 37
        if "电冰箱运行" in stateDict.keys():

wang.wenrong's avatar
wang.wenrong committed
38 39 40 41 42 43
            timer = timeCalc(time=timeOccur)
            totalQuar = np.mean(power[
                                timeAll.index(timeOccur[0]):timeAll.index(
                                    timeOccur[1])]) * timer
            refrigSingle = timer * stateDict["电冰箱运行"][0][-1] / \
                           stateDict["电冰箱运行"][1][-1]
lcn's avatar
lcn committed
44 45
            stateDict["电冰箱运行"][0].append(refrigSingle)
            stateDict["电冰箱运行"][1].append(timer)
wang.wenrong's avatar
wang.wenrong committed
46
            another = list(set(elems) - set(onetype))
lcn's avatar
lcn committed
47
            if another[0] not in stateDict.keys():
wang.wenrong's avatar
wang.wenrong committed
48 49 50
                if totalQuar - refrigSingle > 0:
                    stateDict[another[0]] = [[totalQuar - refrigSingle],
                                             [timer]]
lcn's avatar
lcn committed
51
                else:
wang.wenrong's avatar
wang.wenrong committed
52
                    stateDict[another[0]] = [[totalQuar * 0.1], [timer]]
lcn's avatar
lcn committed
53 54 55

            else:
                if totalQuar - refrigSingle > 0:
wang.wenrong's avatar
wang.wenrong committed
56
                    stateDict[another[0]][0].append(totalQuar - refrigSingle)
lcn's avatar
lcn committed
57 58
                    stateDict[another[0]][1].append(timer)
                else:
wang.wenrong's avatar
wang.wenrong committed
59
                    stateDict[another[0]][0].append(totalQuar * 0.1)
lcn's avatar
lcn committed
60 61 62 63 64 65 66 67 68 69
                    stateDict[another[0]][1].append(timer)
    elif onetype == ["电磁炉运行"]:
        pass
    elif onetype == ["热水器运行"]:
        pass
    elif onetype == ["电饭煲运行"]:
        pass

    return stateDict

wang.wenrong's avatar
wang.wenrong committed
70 71 72 73

def threeQuar(stateDict={}, elems="", onetype="", timeOccur="", timeAll="",
              power=""):
    if onetype == ["电冰箱运行", "空调运行"]:
lcn's avatar
lcn committed
74 75 76
        if "电冰箱运行" in stateDict.keys() and "空调运行" in stateDict.keys():

            timer = timeCalc(time=timeOccur)
wang.wenrong's avatar
wang.wenrong committed
77 78 79 80 81 82 83
            totalQuar = np.mean(power[
                                timeAll.index(timeOccur[0]):timeAll.index(
                                    timeOccur[1])]) * timer
            refrigSingle = timer * stateDict["电冰箱运行"][0][-1] / \
                           stateDict["电冰箱运行"][1][-1]
            aircondSingle = timer * stateDict["空调运行"][0][-1] / \
                            stateDict["空调运行"][1][-1]
lcn's avatar
lcn committed
84 85 86 87 88 89 90

            stateDict["电冰箱运行"][0].append(refrigSingle)
            stateDict["电冰箱运行"][1].append(timer)
            stateDict["空调运行"][0].append(aircondSingle)
            stateDict["空调运行"][1].append(timer)
            another = list(set(elems) - set(onetype))
            if another[0] not in stateDict.keys():
wang.wenrong's avatar
wang.wenrong committed
91 92 93
                if totalQuar - refrigSingle - aircondSingle > 0:
                    stateDict[another[0]] = [
                        [totalQuar - refrigSingle - aircondSingle], [timer]]
lcn's avatar
lcn committed
94
                else:
wang.wenrong's avatar
wang.wenrong committed
95
                    stateDict[another[0]] = [[totalQuar * 0.1], [timer]]
lcn's avatar
lcn committed
96 97 98

            else:
                if totalQuar - refrigSingle - aircondSingle > 0:
wang.wenrong's avatar
wang.wenrong committed
99 100
                    stateDict[another[0]][0].append(
                        totalQuar - refrigSingle - aircondSingle)
lcn's avatar
lcn committed
101 102
                    stateDict[another[0]][1].append(timer)
                else:
wang.wenrong's avatar
wang.wenrong committed
103
                    stateDict[another[0]][0].append(totalQuar * 0.1)
lcn's avatar
lcn committed
104
                    stateDict[another[0]][1].append(timer)
wang.wenrong's avatar
wang.wenrong committed
105
    elif onetype == ["电冰箱运行", "热水器运行"]:
lcn's avatar
lcn committed
106 107
        if "电冰箱运行" in stateDict.keys() and "热水器运行" in stateDict.keys():
            timer = timeCalc(time=timeOccur)
wang.wenrong's avatar
wang.wenrong committed
108 109 110 111 112 113 114
            totalQuar = np.mean(power[
                                timeAll.index(timeOccur[0]):timeAll.index(
                                    timeOccur[1])]) * timer
            refrigSingle = timer * stateDict["电冰箱运行"][0][-1] / \
                           stateDict["电冰箱运行"][1][-1]
            heaterSingle = timer * stateDict["热水器运行"][0][-1] / \
                           stateDict["热水器运行"][1][-1]
lcn's avatar
lcn committed
115 116 117 118 119 120 121

            stateDict["电冰箱运行"][0].append(refrigSingle)
            stateDict["电冰箱运行"][1].append(timer)
            stateDict["热水器运行"][0].append(heaterSingle)
            stateDict["热水器运行"][1].append(timer)
            another = list(set(elems) - set(onetype))
            if another[0] not in stateDict.keys():
wang.wenrong's avatar
wang.wenrong committed
122 123 124
                if totalQuar - refrigSingle - heaterSingle > 0:
                    stateDict[another[0]] = [
                        [totalQuar - refrigSingle - heaterSingle], [timer]]
lcn's avatar
lcn committed
125
                else:
wang.wenrong's avatar
wang.wenrong committed
126
                    stateDict[another[0]] = [[totalQuar * 0.1], [timer]]
lcn's avatar
lcn committed
127 128

            else:
wang.wenrong's avatar
wang.wenrong committed
129
                if totalQuar - refrigSingle - heaterSingle > 0:
lcn's avatar
lcn committed
130

wang.wenrong's avatar
wang.wenrong committed
131 132
                    stateDict[another[0]][0].append(
                        totalQuar - heaterSingle - refrigSingle)
lcn's avatar
lcn committed
133 134
                    stateDict[another[0]][1].append(timer)
                else:
wang.wenrong's avatar
wang.wenrong committed
135
                    stateDict[another[0]][0].append(totalQuar * 0.1)
lcn's avatar
lcn committed
136
                    stateDict[another[0]][1].append(timer)
wang.wenrong's avatar
wang.wenrong committed
137
    elif onetype == ["电冰箱运行", "电磁炉运行"]:
lcn's avatar
lcn committed
138 139 140
        if "电冰箱运行" in stateDict.keys() and "电磁炉运行" in stateDict.keys():

            timer = timeCalc(time=timeOccur)
wang.wenrong's avatar
wang.wenrong committed
141 142 143 144 145 146 147
            totalQuar = np.mean(power[
                                timeAll.index(timeOccur[0]):timeAll.index(
                                    timeOccur[1])]) * timer
            refrigSingle = timer * stateDict["电冰箱运行"][0][-1] / \
                           stateDict["电冰箱运行"][1][-1]
            electroSingle = timer * stateDict["电磁炉运行"][0][-1] / \
                            stateDict["电磁炉运行"][1][-1]
lcn's avatar
lcn committed
148 149 150 151 152 153 154

            stateDict["电冰箱运行"][0].append(refrigSingle)
            stateDict["电冰箱运行"][1].append(timer)
            stateDict["电磁炉运行"][0].append(electroSingle)
            stateDict["电磁炉运行"][1].append(timer)
            another = list(set(elems) - set(onetype))
            if another[0] not in stateDict.keys():
wang.wenrong's avatar
wang.wenrong committed
155 156 157
                if totalQuar - refrigSingle - electroSingle > 0:
                    stateDict[another[0]] = [
                        [totalQuar - refrigSingle - electroSingle], [timer]]
lcn's avatar
lcn committed
158
                else:
wang.wenrong's avatar
wang.wenrong committed
159
                    stateDict[another[0]] = [[totalQuar * 0.1], [timer]]
lcn's avatar
lcn committed
160
            else:
wang.wenrong's avatar
wang.wenrong committed
161
                if totalQuar - refrigSingle - electroSingle > 0:
lcn's avatar
lcn committed
162

wang.wenrong's avatar
wang.wenrong committed
163 164
                    stateDict[another[0]][0].append(
                        totalQuar - electroSingle - refrigSingle)
lcn's avatar
lcn committed
165 166
                    stateDict[another[0]][1].append(timer)
                else:
wang.wenrong's avatar
wang.wenrong committed
167
                    stateDict[another[0]][0].append(totalQuar * 0.1)
lcn's avatar
lcn committed
168 169 170
                    stateDict[another[0]][1].append(timer)
    return stateDict

wang.wenrong's avatar
wang.wenrong committed
171 172 173 174

def fourQuar(stateDict={}, elems="", onetype="", timeOccur="", timeAll="",
             power=""):
    if onetype == ["电冰箱运行", "空调运行", "电磁炉运行"]:
lcn's avatar
lcn committed
175 176
        if "电冰箱运行" in stateDict.keys() and "空调运行" in stateDict.keys() and "电磁炉运行" in stateDict.keys():
            timer = timeCalc(time=timeOccur)
wang.wenrong's avatar
wang.wenrong committed
177 178 179 180 181 182 183 184 185
            totalQuar = np.mean(power[
                                timeAll.index(timeOccur[0]):timeAll.index(
                                    timeOccur[1])]) * timer
            refrigSingle = timer * stateDict["电冰箱运行"][0][-1] / \
                           stateDict["电冰箱运行"][1][-1]
            aircondSingle = timer * stateDict["空调运行"][0][-1] / \
                            stateDict["空调运行"][1][-1]
            electroSingle = timer * stateDict["电磁炉运行"][0][-1] / \
                            stateDict["电磁炉运行"][1][-1]
lcn's avatar
lcn committed
186 187 188 189 190 191 192 193 194

            stateDict["电冰箱运行"][0].append(refrigSingle)
            stateDict["电冰箱运行"][1].append(timer)
            stateDict["空调运行"][0].append(aircondSingle)
            stateDict["空调运行"][1].append(timer)
            stateDict["电磁炉运行"][0].append(electroSingle)
            stateDict["电磁炉运行"][1].append(timer)
            another = list(set(elems) - set(onetype))
            if another[0] not in stateDict.keys():
wang.wenrong's avatar
wang.wenrong committed
195 196 197 198
                if totalQuar - refrigSingle - aircondSingle - electroSingle > 0:
                    stateDict[another[0]] = [[
                                                 totalQuar - refrigSingle - aircondSingle - electroSingle],
                                             [timer]]
lcn's avatar
lcn committed
199
                else:
wang.wenrong's avatar
wang.wenrong committed
200
                    stateDict[another[0]] = [[totalQuar * 0.1], [timer]]
lcn's avatar
lcn committed
201
            else:
wang.wenrong's avatar
wang.wenrong committed
202
                if totalQuar - refrigSingle - aircondSingle - electroSingle > 0:
lcn's avatar
lcn committed
203

wang.wenrong's avatar
wang.wenrong committed
204 205
                    stateDict[another[0]][0].append(
                        totalQuar - refrigSingle - aircondSingle - electroSingle)
lcn's avatar
lcn committed
206 207
                    stateDict[another[0]][1].append(timer)
                else:
wang.wenrong's avatar
wang.wenrong committed
208
                    stateDict[another[0]][0].append(totalQuar * 0.1)
lcn's avatar
lcn committed
209 210 211
                    stateDict[another[0]][1].append(timer)
    return stateDict

wang.wenrong's avatar
wang.wenrong committed
212 213 214

def electricProportion(stageComponent="stageComponent", timestage="timestage",
                       power="power_pa", timeAll="day_time"):
lcn's avatar
lcn committed
215
    equipClass = set([each2 for each in stageComponent for each2 in each])
wang.wenrong's avatar
wang.wenrong committed
216 217 218
    stateDict = {}
    flag = [0, 0, 0, 0, 0]
    statisResDict = {}
lcn's avatar
lcn committed
219
    if ["电冰箱运行"] in stageComponent:
wang.wenrong's avatar
wang.wenrong committed
220 221 222 223 224
        stateDict = electQuar(stateDict=stateDict,
                              stageComponent=stageComponent,
                              timestage=timestage, type=["电冰箱运行"],
                              timeAll=timeAll, power=power)
        flag[0] = 1
lcn's avatar
lcn committed
225
    if ["空调运行"] in stageComponent:
wang.wenrong's avatar
wang.wenrong committed
226 227 228 229 230
        stateDict = electQuar(stateDict=stateDict,
                              stageComponent=stageComponent,
                              timestage=timestage, type=["电冰箱运行"],
                              timeAll=timeAll, power=power)
        flag[1] = 1
lcn's avatar
lcn committed
231 232

    if ["电磁炉运行"] in stageComponent:
wang.wenrong's avatar
wang.wenrong committed
233 234 235 236 237
        stateDict = electQuar(stateDict=stateDict,
                              stageComponent=stageComponent,
                              timestage=timestage, type=["电磁炉运行"],
                              timeAll=timeAll, power=power)
        flag[2] = 1
lcn's avatar
lcn committed
238 239

    if ["热水器运行"] in stageComponent:
wang.wenrong's avatar
wang.wenrong committed
240 241 242 243 244
        stateDict = electQuar(stateDict=stateDict,
                              stageComponent=stageComponent,
                              timestage=timestage, type=["热水器运行"],
                              timeAll=timeAll, power=power)
        flag[3] = 1
lcn's avatar
lcn committed
245 246

    if ["电饭煲运行"] in stageComponent:
wang.wenrong's avatar
wang.wenrong committed
247 248 249 250 251 252 253
        stateDict = electQuar(stateDict=stateDict,
                              stageComponent=stageComponent,
                              timestage=timestage, type=["电饭煲运行"],
                              timeAll=timeAll, power=power)
        flag[4] = 1
    affects = [i for i in range(len(stageComponent)) if
               len(stageComponent[i]) == 2]
lcn's avatar
lcn committed
254
    for each in affects:
wang.wenrong's avatar
wang.wenrong committed
255 256 257 258 259
        if flag[0] == 1 and "电冰箱运行" in stageComponent[each]:
            stateDict = twoQuar(stateDict=stateDict,
                                elems=stageComponent[each], onetype=["电冰箱运行"],
                                timeOccur=timestage[each], timeAll=timeAll,
                                power=power)
lcn's avatar
lcn committed
260

wang.wenrong's avatar
wang.wenrong committed
261 262
    affects = [i for i in range(len(stageComponent)) if
               len(stageComponent[i]) == 3]
lcn's avatar
lcn committed
263
    for each in affects:
wang.wenrong's avatar
wang.wenrong committed
264 265 266 267 268 269 270
        if flag[0] == 1 and "电冰箱运行" in stageComponent[each] and "空调运行" in \
                stageComponent[each]:
            stateDict = threeQuar(stateDict=stateDict,
                                  elems=stageComponent[each],
                                  onetype=["电冰箱运行", "空调运行"],
                                  timeOccur=timestage[each], timeAll=timeAll,
                                  power=power)
lcn's avatar
lcn committed
271

wang.wenrong's avatar
wang.wenrong committed
272 273
    affects = [i for i in range(len(stageComponent)) if
               len(stageComponent[i]) == 4]
lcn's avatar
lcn committed
274
    for each in affects:
wang.wenrong's avatar
wang.wenrong committed
275 276 277 278 279 280 281 282 283
        if flag[0] == 1 and "电冰箱运行" in stageComponent[each] and "空调运行" in \
                stageComponent[each] and "电磁炉运行" in stageComponent[each]:
            stateDict = fourQuar(stateDict=stateDict,
                                 elems=stageComponent[each],
                                 onetype=["电冰箱运行", "空调运行", "电磁炉运行"],
                                 timeOccur=timestage[each], timeAll=timeAll,
                                 power=power)
    statisResDict["电量与时长"] = stateDict
    statisResDict["波动"] = {"电冰箱": 60, "空调": 20, "电磁炉": 3, "热水器": 2}
lcn's avatar
lcn committed
284
    return statisResDict