import numpy as np
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
# Historical sequence data
sequence_data = [
304,300,302,294,294,294,294,298,298,294,298,296,304,300,308,308,306,318,324,324,324,322,324,322,322,322,334,338,330,330,336,332,330,326,334,330,324,322,326,322,326,326,334,328,326,338,384,374,358,364,344,348,336,344,338,336,334,346,346,344,354,352,348,350,344,344,340,340,358,360,360,354,372,390,410,402,402,394,394,394,418,408,402,408,408,406,396,394,406,410,404,404,404,406,404,416,404,414,410,412,412,410,432,458,492,515,492,500,470,490,545,525,550,555,600,585,610,520,565,575,695,680,605,630,630,615,590,605,655,655,685,695,685,650,650,670,670,675,700,695,705,695,680,665,650,670,645,620,630,620,635,620,615,595,585,575,605,590,590,590,590,605,600,600,585,595,590,590,575,580,565,560,560,540,525,550,560,540,520,510,510,510,525,545,540,530,515,515,515,500,494,474,476,496,496,496,498,486,468,488,496,500,492,484,486,480,468,474,486,494,488,488,484,486,494,490,494,520,500,498,498,535,515,500,510,525,500,488,474,478,480,480,480,484,484,480,488,490,490,494,500,505,505,500,492,498,500,500,500,505,500,498,500,490,488,486,486,484,482,482,482,480,476,476,478,476,470,472,476,476,478,480,480,484,490,492,498,498,494,492,488,484,486,490,492,496,492,492,500,510,505,505,510,540,525,520,510,496,510,505,510,520,505,505,500,488,492,494,500,498,492,490,496,492,488,490,486,476
]
# Convert the sequence data to a pandas Series
sequence_series = pd.Series(sequence_data)
# Fit an ARIMA model
arima_model = ARIMA(sequence_series, order=(5,1,0)) # Adjust the order as needed
arima_fit = arima_model.fit()
# Make predictions for the next 3 values
forecast = arima_fit.forecast(steps=3)
# Print the predicted values
print("Predicted values for the next 3 steps:", forecast)
# Plot the original data along with the forecasted values
plt.figure(figsize=(10, 6))
plt.plot(sequence_series, label='Original Data')
plt.plot(pd.Series(forecast, index=[len(sequence_series), len(sequence_series)+1, len(sequence_series)+2]), label='Forecasted Data', linestyle='--')
plt.title('ARIMA Forecasting')
plt.xlabel('Index')
plt.ylabel('Sequence Value')
plt.legend()
plt.grid(True)
plt.show()
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBzdGF0c21vZGVscy50c2EuYXJpbWEubW9kZWwgaW1wb3J0IEFSSU1BCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKCiMgSGlzdG9yaWNhbCBzZXF1ZW5jZSBkYXRhCnNlcXVlbmNlX2RhdGEgPSBbCiAgICAzMDQsMzAwLDMwMiwyOTQsMjk0LDI5NCwyOTQsMjk4LDI5OCwyOTQsMjk4LDI5NiwzMDQsMzAwLDMwOCwzMDgsMzA2LDMxOCwzMjQsMzI0LDMyNCwzMjIsMzI0LDMyMiwzMjIsMzIyLDMzNCwzMzgsMzMwLDMzMCwzMzYsMzMyLDMzMCwzMjYsMzM0LDMzMCwzMjQsMzIyLDMyNiwzMjIsMzI2LDMyNiwzMzQsMzI4LDMyNiwzMzgsMzg0LDM3NCwzNTgsMzY0LDM0NCwzNDgsMzM2LDM0NCwzMzgsMzM2LDMzNCwzNDYsMzQ2LDM0NCwzNTQsMzUyLDM0OCwzNTAsMzQ0LDM0NCwzNDAsMzQwLDM1OCwzNjAsMzYwLDM1NCwzNzIsMzkwLDQxMCw0MDIsNDAyLDM5NCwzOTQsMzk0LDQxOCw0MDgsNDAyLDQwOCw0MDgsNDA2LDM5NiwzOTQsNDA2LDQxMCw0MDQsNDA0LDQwNCw0MDYsNDA0LDQxNiw0MDQsNDE0LDQxMCw0MTIsNDEyLDQxMCw0MzIsNDU4LDQ5Miw1MTUsNDkyLDUwMCw0NzAsNDkwLDU0NSw1MjUsNTUwLDU1NSw2MDAsNTg1LDYxMCw1MjAsNTY1LDU3NSw2OTUsNjgwLDYwNSw2MzAsNjMwLDYxNSw1OTAsNjA1LDY1NSw2NTUsNjg1LDY5NSw2ODUsNjUwLDY1MCw2NzAsNjcwLDY3NSw3MDAsNjk1LDcwNSw2OTUsNjgwLDY2NSw2NTAsNjcwLDY0NSw2MjAsNjMwLDYyMCw2MzUsNjIwLDYxNSw1OTUsNTg1LDU3NSw2MDUsNTkwLDU5MCw1OTAsNTkwLDYwNSw2MDAsNjAwLDU4NSw1OTUsNTkwLDU5MCw1NzUsNTgwLDU2NSw1NjAsNTYwLDU0MCw1MjUsNTUwLDU2MCw1NDAsNTIwLDUxMCw1MTAsNTEwLDUyNSw1NDUsNTQwLDUzMCw1MTUsNTE1LDUxNSw1MDAsNDk0LDQ3NCw0NzYsNDk2LDQ5Niw0OTYsNDk4LDQ4Niw0NjgsNDg4LDQ5Niw1MDAsNDkyLDQ4NCw0ODYsNDgwLDQ2OCw0NzQsNDg2LDQ5NCw0ODgsNDg4LDQ4NCw0ODYsNDk0LDQ5MCw0OTQsNTIwLDUwMCw0OTgsNDk4LDUzNSw1MTUsNTAwLDUxMCw1MjUsNTAwLDQ4OCw0NzQsNDc4LDQ4MCw0ODAsNDgwLDQ4NCw0ODQsNDgwLDQ4OCw0OTAsNDkwLDQ5NCw1MDAsNTA1LDUwNSw1MDAsNDkyLDQ5OCw1MDAsNTAwLDUwMCw1MDUsNTAwLDQ5OCw1MDAsNDkwLDQ4OCw0ODYsNDg2LDQ4NCw0ODIsNDgyLDQ4Miw0ODAsNDc2LDQ3Niw0NzgsNDc2LDQ3MCw0NzIsNDc2LDQ3Niw0NzgsNDgwLDQ4MCw0ODQsNDkwLDQ5Miw0OTgsNDk4LDQ5NCw0OTIsNDg4LDQ4NCw0ODYsNDkwLDQ5Miw0OTYsNDkyLDQ5Miw1MDAsNTEwLDUwNSw1MDUsNTEwLDU0MCw1MjUsNTIwLDUxMCw0OTYsNTEwLDUwNSw1MTAsNTIwLDUwNSw1MDUsNTAwLDQ4OCw0OTIsNDk0LDUwMCw0OTgsNDkyLDQ5MCw0OTYsNDkyLDQ4OCw0OTAsNDg2LDQ3NgpdCgojIENvbnZlcnQgdGhlIHNlcXVlbmNlIGRhdGEgdG8gYSBwYW5kYXMgU2VyaWVzCnNlcXVlbmNlX3NlcmllcyA9IHBkLlNlcmllcyhzZXF1ZW5jZV9kYXRhKQoKIyBGaXQgYW4gQVJJTUEgbW9kZWwKYXJpbWFfbW9kZWwgPSBBUklNQShzZXF1ZW5jZV9zZXJpZXMsIG9yZGVyPSg1LDEsMCkpICAjIEFkanVzdCB0aGUgb3JkZXIgYXMgbmVlZGVkCmFyaW1hX2ZpdCA9IGFyaW1hX21vZGVsLmZpdCgpCgojIE1ha2UgcHJlZGljdGlvbnMgZm9yIHRoZSBuZXh0IDMgdmFsdWVzCmZvcmVjYXN0ID0gYXJpbWFfZml0LmZvcmVjYXN0KHN0ZXBzPTMpCgojIFByaW50IHRoZSBwcmVkaWN0ZWQgdmFsdWVzCnByaW50KCJQcmVkaWN0ZWQgdmFsdWVzIGZvciB0aGUgbmV4dCAzIHN0ZXBzOiIsIGZvcmVjYXN0KQoKIyBQbG90IHRoZSBvcmlnaW5hbCBkYXRhIGFsb25nIHdpdGggdGhlIGZvcmVjYXN0ZWQgdmFsdWVzCnBsdC5maWd1cmUoZmlnc2l6ZT0oMTAsIDYpKQpwbHQucGxvdChzZXF1ZW5jZV9zZXJpZXMsIGxhYmVsPSdPcmlnaW5hbCBEYXRhJykKcGx0LnBsb3QocGQuU2VyaWVzKGZvcmVjYXN0LCBpbmRleD1bbGVuKHNlcXVlbmNlX3NlcmllcyksIGxlbihzZXF1ZW5jZV9zZXJpZXMpKzEsIGxlbihzZXF1ZW5jZV9zZXJpZXMpKzJdKSwgbGFiZWw9J0ZvcmVjYXN0ZWQgRGF0YScsIGxpbmVzdHlsZT0nLS0nKQpwbHQudGl0bGUoJ0FSSU1BIEZvcmVjYXN0aW5nJykKcGx0LnhsYWJlbCgnSW5kZXgnKQpwbHQueWxhYmVsKCdTZXF1ZW5jZSBWYWx1ZScpCnBsdC5sZWdlbmQoKQpwbHQuZ3JpZChUcnVlKQpwbHQuc2hvdygpCg==