diff --git a/run.py b/run.py new file mode 100644 index 0000000..b7b2c57 --- /dev/null +++ b/run.py @@ -0,0 +1,73 @@ +import numpy as np +import pandas as pd +from matplotlib import pyplot as plt + +in_columns = ['id_stacji', 'nazwa_stacji', 'typ_zbioru', 'rok', 'miesiąc'] + +df = pd.read_csv('train/in.tsv', header=None, sep='\t') +df.columns = in_columns + +measurements = pd.read_csv('train/expected.tsv', header=None, sep='\t') +measurements.columns = ['suma_opadów'] + +start_year = 1981 +end_year = 2021 +total_years = end_year - start_year +total_months = total_years * 12 +known_years = 30 + +stations = [ + 249180010, + 249190560, + 249200370, + 249200490, + 249220150, + 249220180, + 250190160, + 250190390, + 250210130, + 251170090, + 251210040, + 252150120, + 252160230, + 252200150, + 252210050, + 252230120, + 253170210, + 253220070, + 253230020, + 254200080, + 254220090 +] +station_to_idx = {station: i for i, station in enumerate(stations)} +x = np.full((len(stations), total_months), fill_value=-1) + +for (_, df_row), (_, measurement) in zip(df.iterrows(), measurements.iterrows()): + station_id = df_row['id_stacji'] + station_idx = station_to_idx[station_id] + year = df_row['rok'] + month = df_row['miesiąc'] - 1 + assert start_year <= year < end_year, year + assert 0 <= month < 12 + absolute_month = (year - start_year) * 12 + month + x[station_idx, absolute_month] = measurement + +z = x.reshape((len(stations), total_years, 12)) +fully_known: np.ndarray = z[:, :known_years] +all_time_std = fully_known.std((1, 2)) +all_time_mean = fully_known.mean((1, 2)) +std_per_month = fully_known.std(1) +mean_per_month = fully_known.mean(1) + +df = pd.read_csv('test-A/in.tsv', header=None, sep='\t') +df.columns = in_columns + +# plt.plot(fully_known.T) +with open('test-A/out.tsv', 'w+') as f: + for _, df_row in df.iterrows(): + station_id = df_row['id_stacji'] + station_idx = station_to_idx[station_id] + # year = df_row['rok'] + month = df_row['miesiąc'] - 1 + assert 0 <= month < 12 + print(mean_per_month[station_idx, month], file=f) diff --git a/test-A/out.tsv b/test-A/out.tsv new file mode 100644 index 0000000..f0a6900 --- /dev/null +++ b/test-A/out.tsv @@ -0,0 +1,720 @@ +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667 +46.766666666666666 +40.7 +51.766666666666666 +57.63333333333333 +97.1 +119.66666666666667 +125.23333333333333 +101.3 +74.66666666666667 +48.46666666666667 +47.63333333333333 +48.233333333333334 +35.13333333333333 +28.766666666666666 +38.266666666666666 +45.53333333333333 +77.33333333333333 +88.73333333333333 +90.23333333333333 +77.86666666666666 +63.7 +43.233333333333334 +40.43333333333333 +36.96666666666667 +32.36666666666667 +31.266666666666666 +37.266666666666666 +28.5 +54.5 +60.766666666666666 +80.66666666666667 +70.2 +42.733333333333334 +32.6 +36.63333333333333 +41.2 +38.56666666666667 +32.03333333333333 +39.06666666666667 +33.86666666666667 +48.1 +60.1 +73.36666666666666 +66.26666666666667 +44.166666666666664 +32.56666666666667 +39.9 +44.2 +34.93333333333333 +30.733333333333334 +37.03333333333333 +31.3 +46.3 +55.06666666666667 +74.56666666666666 +67.36666666666666 +39.0 +31.866666666666667 +36.8 +40.833333333333336 +40.266666666666666 +32.166666666666664 +39.766666666666666 +37.63333333333333 +70.6 +73.9 +77.63333333333334 +65.76666666666667 +57.666666666666664 +40.833333333333336 +43.06666666666667 +43.96666666666667