<jupyter_start><jupyter_text>На основании данных рейтинга top500 спрогнозировать  производительность компьютера №1 в 2025 График производительности по годам: https://www.top500.org/statistics/perfdevel/Поскольку большинство топ системы уникальны, а из данных есть только текстовое описание (применить nlp к нему?) + число ядер (само число ничего не значит) + flops, то будем предсказывать flops(t), по закону Мура производительность экспоненциальна, поэтому будем предсказывать log(flops) с помощью линейной регрессии<jupyter_code>import pandas as pd

names = ['date', 'sum_float', 'sum_str', '#1_float', '#1_str', '#500_float', '#500_str']
raw_http_df = pd.read_csv('development.csv', names=names)
raw_http_df.head()
df = raw_http_df[['date', '#1_float']]
df.tail()<jupyter_output><empty_output><jupyter_text>Используем линейную регрессию для log(flops), тк зависимость flops экспоненциальная<jupyter_code>from sklearn import linear_model


def get_data(df):
    # x = (raiting list #)
    x = df.index.to_numpy().reshape(-1, 1)
    y = np.log(df['#1_float'])
    return x, y

def get_x_to_predict(df):
    # x = (raiting list #)
    x = df.index.to_numpy().reshape(-1, 1)
    dates_to_pred = ['2021-10-1', '2022-05-1', '2022-10-1', '2023-05-1',
                     '2023-10-1', '2024-05-1', '2024-10-1', '2025-05-1']
    x_to_pred = np.arange(x[-1:] + 1, x[-1:] + len(dates_to_pred) + 1)
    return x_to_pred.reshape(-1, 1)

xs, y = get_data(df)
xp = get_x_to_predict(df)
model = linear_model.Ridge(fit_intercept=True).fit(xs, y)
ys = model.predict(x)
yp = model.predict(xp)
print(model.coef_)
import matplotlib as mpl
import matplotlib.pyplot as plt
figsize = (8,4)
legend_fontsize = 16

fig, ax = plt.subplots(figsize=figsize)
ax.plot(ys, linewidth=2.5, color='red', label='log(gflop/s) (model)')
ax.scatter(xs, y, color='grey', label='log(gflop/s) (train)')
ax.scatter(xp, yp, color='blue', label='log(gflop/s) (pred)')
ax.legend(fontsize=legend_fontsize)
plt.show()

print(f'Top#1 performance in 2025-05-01 will be {np.exp(yp[-1:])/1000/1000/1000} exaflops/s', )<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1572177227251072, 'fraction_numerical': 0.0547879942829919, 'mean_word_length': 5.25, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '40346', 'license': 'MIT', 'n_tokens_mistral': 951, 'n_tokens_neox': 937, 'n_words': 179, 'path': 'hw/1_top500_metrics/1_top_1_predict.ipynb', 'repo_name': 'GimmeDanger/made-hpc-2021', 'size': '2099'}