Spaces:
Sleeping
Sleeping
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'] | |
# Aqu铆 puedes implementar tu modelo de predicci贸n de series temporales | |
# Por ejemplo, utilizando un modelo de regresi贸n como RandomForestRegressor de scikit-learn | |
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 | |
# Ejemplo de uso | |
event_manager = EventManager() | |
# A帽adir eventos | |
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") | |
# Realizar predicci贸n de series temporales y plot | |
event_manager.plot_event_parameters_over_time("Evento 1") | |
event_manager.plot_prediction("Evento 1") | |
# Comprobar correlaci贸n entre dos eventos | |
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.") | |
# Transformada de Fourier | |
transformed_data = event_manager.fourier_transform("Evento 1") | |
print("Transformada de Fourier del Evento 1:", transformed_data) | |