|
import pandas as pd |
|
import matplotlib.pyplot as plt |
|
from sklearn.model_selection import train_test_split |
|
from sklearn.ensemble import RandomForestRegressor |
|
from sklearn.metrics import mean_squared_error |
|
from scipy.stats import pearsonr |
|
import numpy as np |
|
from scipy.fft import fft |
|
|
|
|
|
class EventManager: |
|
def __init__(self): |
|
self.events = [] |
|
|
|
def add_event(self, event_title, time_dataset, probability_fork, quantity, common_tag_event_dataset, |
|
quantity_correlation_dataset, event_max_quantity, event_min_quantity, event_middle_quantity, |
|
sentiment_direction): |
|
event = { |
|
"event_title": event_title, |
|
"time_dataset": time_dataset, |
|
"probability_fork": probability_fork, |
|
"quantity": quantity, |
|
"common_tag_event_dataset": common_tag_event_dataset, |
|
"quantity_correlation_dataset": quantity_correlation_dataset, |
|
"event_max_quantity": event_max_quantity, |
|
"event_min_quantity": event_min_quantity, |
|
"event_middle_quantity": event_middle_quantity, |
|
"sentiment_direction": sentiment_direction |
|
} |
|
self.events.append(event) |
|
|
|
def remove_event(self, event_title): |
|
self.events = [event for event in self.events if event['event_title'] != event_title] |
|
|
|
def get_events_by_tag(self, tag): |
|
return [event for event in self.events if tag in event['common_tag_event_dataset']] |
|
|
|
def get_events_by_sentiment(self, sentiment): |
|
return [event for event in self.events if event['sentiment_direction'] == sentiment] |
|
|
|
def get_events_by_quantity_range(self, min_quantity, max_quantity): |
|
return [event for event in self.events if min_quantity <= event['quantity'] <= max_quantity] |
|
|
|
def predict_time_series(self, event_title): |
|
event = next((event for event in self.events if event['event_title'] == event_title), None) |
|
if event: |
|
time_series = event['time_dataset'] |
|
|
|
|
|
X = np.arange(len(time_series)).reshape(-1, 1) |
|
y = np.array(time_series) |
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
|
model = RandomForestRegressor() |
|
model.fit(X_train, y_train) |
|
predictions = model.predict(X_test) |
|
return predictions |
|
else: |
|
return None |
|
|
|
def plot_event_parameters_over_time(self, event_title): |
|
event = next((event for event in self.events if event['event_title'] == event_title), None) |
|
if event: |
|
time_series = event['time_dataset'] |
|
plt.plot(time_series) |
|
plt.xlabel('Tiempo') |
|
plt.ylabel('Valor') |
|
plt.title('Par谩metros del Evento "{}" a lo largo del tiempo'.format(event_title)) |
|
plt.show() |
|
|
|
def plot_prediction(self, event_title): |
|
predictions = self.predict_time_series(event_title) |
|
if predictions: |
|
plt.plot(predictions, label='Predicci贸n') |
|
plt.xlabel('Tiempo') |
|
plt.ylabel('Valor') |
|
plt.title('Predicci贸n del Evento "{}"'.format(event_title)) |
|
plt.legend() |
|
plt.show() |
|
|
|
def check_correlation(self, event_title1, event_title2): |
|
event1 = next((event for event in self.events if event['event_title'] == event_title1), None) |
|
event2 = next((event for event in self.events if event['event_title'] == event_title2), None) |
|
if event1 and event2: |
|
correlation, _ = pearsonr(event1['quantity_correlation_dataset'], event2['quantity_correlation_dataset']) |
|
return correlation |
|
else: |
|
return None |
|
|
|
def fourier_transform(self, event_title): |
|
event = next((event for event in self.events if event['event_title'] == event_title), None) |
|
if event: |
|
time_series = event['time_dataset'] |
|
transformed_data = fft(time_series) |
|
return transformed_data |
|
else: |
|
return None |
|
|
|
|
|
|
|
event_manager = EventManager() |
|
|
|
|
|
event_manager.add_event("Evento 1", [1, 2, 3, 4, 5], 0.8, 100, ["tag1", "tag2"], [0.1, 0.2, 0.3, 0.4, 0.5], |
|
150, 50, 100, "good when up") |
|
event_manager.add_event("Evento 2", [2, 4, 6, 8, 10], 0.6, 200, ["tag2", "tag3"], [0.2, 0.4, 0.6, 0.8, 1.0], |
|
250, 150, 200, "bad when down") |
|
|
|
|
|
event_manager.plot_event_parameters_over_time("Evento 1") |
|
event_manager.plot_prediction("Evento 1") |
|
|
|
|
|
correlation = event_manager.check_correlation("Evento 1", "Evento 2") |
|
if correlation: |
|
print("Correlaci贸n entre Evento 1 y Evento 2:", correlation) |
|
else: |
|
print("Alguno de los eventos no existe.") |
|
|
|
|
|
transformed_data = event_manager.fourier_transform("Evento 1") |
|
print("Transformada de Fourier del Evento 1:", transformed_data) |
|
|
|
|