Цел на този проект е да предскаже стойностите на потреблението на енергия в град Тетуан в Мароко

Тетуан е град, разположен в Северно централно Мароко, недалеч от Средиземно море (7 мили). Събрах набора от данни от https://archive.ics.uci.edu/ml/datasets/Power+consumption+of+Tetouan+city и се опитах да предскажа стойностите на консумацията на енергия на определена зона за период от време с помощта на различни алгоритми за машинно обучение. Тук използвах базирани на регресия алгоритми за машинно обучение, тъй като целевата променлива е числова. Разделих работата на 2 части, където Част 1 включва проучвателен анализ на данни, почистване на данни, визуализация на данни и функция за създаване на функции. В Част 2 ще продължа с използването на регресори за машинно обучение като XGBoost Regressor, K-Nearest Neighbor Regressor, XGBoost Hyperparameter tuning, Random Forest Regressor, Decision Tree Regressor, Linear Regressor и Support Vector Regressor, по този начин най-накрая постигна приемлив резултат.

Наборът от данни е свързан с консумацията на енергия от три различни разпределителни мрежи на град Тетуан. Данните съдържат 52 416 точки с данни за потреблението на енергия в 10-минутни прозорци от 1 януари 2017 г. (0:00) до 30 декември 2017 г. (23:50) . 3-те зонови електроцентрали електрифицират 3 различни района на града, поради което има 3 целеви променливи в този случай, въпреки че съм работил само с една зона.

Информация за атрибут:

Дата и час: Времетраене от десет минути.

Температура: Температурата на град Тетуан е в градуси по Целзий.

Влажност: Влажността на град Тетуан в %.

Скорост на вятъра: Скоростта на вятъра в град Тетуан в kmph.

общи дифузни течения

дифузни течения

Консумирана мощност в зона 1 на град Тетуан в киловатове (KW).

Консумирана мощност в зона 2 на град Тетуан в KW.

Консумирана мощност в зона 3 на град Тетуан в KW.

Използвани подходящи библиотеки

  1. numpy: Операции на линейната алгебра

2. pandas: обработка на данни, зареждане на данни, рамки с данни, .csv файлове и др.

3. seaborn: Използва се за създаване на диаграма на корелация за наблюдение на връзката между променливите

4. matplotlib: За създаване на подходящи диаграми и графики с помощта на pyplot

5. sklearn: Библиотека за машинно обучение за използване на различни алгоритми за регресия по-горе и други подбиблиотеки като train_test_split за разделяне на набора от данни на обучаващи и тестови версии

6. sklearn.metrics:За да тествате изправността на всеки модел по отношение на средната квадратична грешка, за да откриете най-добрия сред всички за проблема

#Importing the relevant libraries to do the data analysis
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import mean_squared_error,r2_score
# import warnings
import warnings
# ignore warnings
warnings.filterwarnings("ignore")

ИЗСЛЕДВАТЕЛЕН АНАЛИЗ НА ДАННИ (EDA)

Наборът от данни .csv се импортира с помощта на pandas и след това методите .describe() и .info() се използват за проверка на типовете данни на атрибути, размер и описателна статистика на рамката на данните. Рамката с данни не съдържа липсващи стойности и има 52416 реда и 9 колони.

Екранната снимка по-горе показва резултата от метода .info(), няма липсващи стойности и всички функции имат тип данни с плаваща запетаяс изключение на функцията DateTime. Този проблем, който се опитваме да разрешим, е времеви серии, поради което функцията за дата трябва да бъде в типа данни datetime. Кодът за преобразуване на типа данни е:

#Converting object to datetime datatype
data['DateTime'] = pd.to_datetime(data['DateTime'], errors='coerce')

След това е необходимо да настроите функцията DateTime на индекс. Командата data.set_index() се използва за заместване на текущия индекс с колоната DateTime и също така е удобно да се начертаят данните по отношение на колоната за дата.

#transforming DateTime column into index
data = data.set_index('DateTime')

Така че след преобразуването на типа данни, данните изглеждат като дадените по-долу.

Визуализация на данни

Така може да се извърши визуализация на данни, за да се разберат данните по по-добър начин.

Топлинната карта се създава с помощта на seaborn за наблюдение на корелацията между променливите. Създадената корелационна матрица показва единичната корелация между всяка характеристика с други характеристики в набора от данни.

Ако 2 променливи са свързани една с друга чрез:

0,0 до 0,3, те са слабо корелирани,

0,3 до 0,6, те са умерено корелирани,

0,6 до 0,9, те са силно свързани,

накрая, ›0,9, те са много силно свързани

Положителни и отрицателни указва дали променливите са пряко или обратно свързани, напр. корелация от -0,7 между 2 променливи означава, че ако едната променлива се увеличи, другата намалява силно (както е дефинирано в списъка по-горе)

Анализът на корелациите между независимите и зависимите характеристики може да се направи сега:

Температурата е средно положително свързана с всички стойности на консумация на енергия.

Въпреки това, Влажност показва слаба отрицателна корелация с консумацията на енергия и на трите зони.

Другите променливи не корелират значително със стойностите на консумация на енергия, така че не се нуждаят от внимание като такива и ще бъдат премахнати по-късно при моделирането на машинното обучение.

И накрая,зоните за консумация на енергия в Zone1, Zone2 и Zone3 показват по-високи стойности на корелация помежду си. Това предполага, че има малки разлики в моделите на потребление във всички области и всички те изглежда се увеличават или намаляват заедно. Така че взех под внимание само стойностите на консумация на енергия в зона 1, за да тествам с различни модели на регресия, също така стойностите на консумация на енергия в другите зони не се различават драстично от зона 1, както можем намерете от топлинната карта на корелацията, така че няма да има голяма разлика.

Създаване на функции

Колоната DateTime може да бъде разделена на различни фактори като ден, седмица, месец, час, година, ден от годината, седмица от годината и т.н. и те могат да се използват за разбиране на повече връзки между променливи. Направих справка с тазистатия, за да направя частта за създаване на функция и да визуализирам връзките на характеристиките с помощта на boxplots.

def create_features(df):
    """
    Create time series features like hour, month, year, day, etc. based on time series index.
    """
    df = df.copy()
    df['hour'] = df.index.hour
    df['dayofweek'] = df.index.dayofweek
    df['quarter'] = df.index.quarter
    df['month'] = df.index.month
    df['year'] = df.index.year
    df['dayofyear'] = df.index.dayofyear
    df['dayofmonth'] = df.index.day
    df['weekofyear'] = df.index.isocalendar().week
    return df
df = create_features(data)

След това използвах функциите по-горе и се опитах да идентифицирам връзките между стойностите на консумация на енергия в зона 1 и стойностите, свързани с времето (като час от деня, ден от седмицата, седмица, месец и т.н.)

Горният набор от графики показва, че консумацията на енергия се увеличава от 8 часа на 16 часа, което показва, че индивидуални потребители и фирми (големи, средни или малки) я използват в работно времето. Освен това, той също се повишава от 17 до 22 часа. В определени часове сутрин (0h до 3h) има много отклонения в точките с данни, както може да се наблюдава.

Зимните месеци януари, февруари, март и април имат по-ниско потребление на електроенергия, ноември и декември са дори по-ниски от първите като показани в карето, а най-сухите месециюни, юли и августиматмаксимална консумация на енергия.

Подробности за времето в града можете да намерите тук.

Консумацията на енергия през всички делнични дни остава същата, неделя е най-малко консумирана по очевидни причини, същото важи и за събота.

Ще завърша първата част тук и ще продължа частта за моделиране на машинното обучение в следващата статия. Тогава ще споделя целия код чрез моя GitHub. Моля, разгледайте и профилите ми в LinkedIn и GitHub за повече съдържание като това. Също така, моля, проверете моя Среден профил, за да видите предишни статии, ако ги намирате за интересни.

Абонирайте се за DDIntel Тук.

Посетете нашия уебсайт тук: https://www.datadriveninvestor.com

Присъединете се към нашата мрежа тук: https://datadriveninvestor.com/collaborate