rufimelo commited on
Commit
823be8e
·
1 Parent(s): d0bb838
app/__pycache__/core.cpython-310.pyc CHANGED
Binary files a/app/__pycache__/core.cpython-310.pyc and b/app/__pycache__/core.cpython-310.pyc differ
 
app/app.py CHANGED
@@ -40,6 +40,7 @@ raw_ratings = pd.read_csv('data/raw_simulated_ratings.csv')
40
  # crop to 5 rows and 7 columns
41
  raw_ratings = raw_ratings.iloc[:5, :7]
42
 
 
43
 
44
 
45
 
@@ -73,7 +74,7 @@ dashboard_layout = html.Div([
73
  ], className='row'),
74
 
75
 
76
- html.H1(children='Wine Recommender based on feedback and other user', style={'textAlign':'center'}),
77
  html.Div(
78
  [
79
  html.Div(
@@ -95,12 +96,81 @@ dashboard_layout = html.Div([
95
  ], className='row'),
96
 
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
 
99
 
100
 
101
 
102
 
103
- ])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
 
105
 
106
  @app.callback(
 
40
  # crop to 5 rows and 7 columns
41
  raw_ratings = raw_ratings.iloc[:5, :7]
42
 
43
+ TEMPORARY_WINE_RECOMMENDATION_FORM_INFO = {}
44
 
45
 
46
 
 
74
  ], className='row'),
75
 
76
 
77
+ html.H1(children="Wine Recommender based on users' feedback", style={'textAlign':'center'}),
78
  html.Div(
79
  [
80
  html.Div(
 
96
  ], className='row'),
97
 
98
 
99
+ html.H1(children="Wine Preferences Form", style={'textAlign':'center'}),
100
+ html.Div(
101
+ [
102
+ html.Div(
103
+ [
104
+ #Dropdown for wine name
105
+ dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),
106
+ dcc.Input(id='input-wine-rating', type='number', placeholder='Enter wine rating', min=1, max=5),
107
+ ], className='six columns',
108
+ ),
109
+ html.Div(
110
+ [
111
+ html.Button('Submit', id='submit-button', n_clicks=0),
112
+ ], className='six columns',
113
+ ),
114
+ ], className='row'),
115
+
116
+ html.Div(id='recommended-wine-rating-info', style={'textAlign':'center'}),
117
+ html.Button('Reset', id='recommend-wine-from-form-reset', n_clicks=0),
118
+ # Button to submit the form
119
+ html.Button('Recommend Wine', id='recommend-wine-from-form', n_clicks=0),
120
+ html.Div(id='recommended-wine-form-output', style={'textAlign':'center'}),
121
+
122
+
123
 
124
 
125
 
126
 
127
 
128
+ ], style={'background-color': '#333', 'font-family': 'Fantasy', 'color': '#999', 'padding': '10px'})
129
+
130
+
131
+ @app.callback(
132
+ Input('recommend-wine-from-form-reset', 'n_clicks'),
133
+ )
134
+ def reset_form(n_clicks):
135
+ if n_clicks > 0:
136
+ TEMPORARY_WINE_RECOMMENDATION_FORM_INFO.clear()
137
+ return
138
+
139
+
140
+ @app.callback(
141
+ Output('recommended-wine-rating-info', 'children'),
142
+ Input('submit-button', 'n_clicks'),
143
+ Input('dropdown-selection', 'value'),
144
+ Input('input-wine-rating', 'value'),
145
+ )
146
+ def update_output(n_clicks, wine_name, rating):
147
+ if n_clicks > 0:
148
+ TEMPORARY_WINE_RECOMMENDATION_FORM_INFO[wine_name] = rating
149
+ n_clicks = 0
150
+ return f'You rated {wine_name} with a score of {rating}'
151
+ return ''
152
+
153
+ @app.callback(
154
+ Output('recommended-wine-form-output', 'children'),
155
+ Input('recommend-wine-from-form', 'n_clicks'),
156
+ )
157
+ def recommend_wine_from_form(n_clicks):
158
+ if n_clicks > 0:
159
+ user = "temporary_user"
160
+ user_rating_df.loc[user] = TEMPORARY_WINE_RECOMMENDATION_FORM_INFO
161
+ user_rating_df.fillna(0, inplace=True)
162
+ user_rating_df['user'] = user_rating_df.index
163
+
164
+
165
+ wine_recommendation_from_user = core.recommend_wine_from_users(user_rating_df, user, 3)
166
+ wine_recommendation_from_user = f"Based on user form, we recommend: "+"; ".join(wine_recommendation_from_user)
167
+ return wine_recommendation_from_user
168
+ return ''
169
+
170
+
171
+
172
+
173
+
174
 
175
 
176
  @app.callback(
app/dashboard.ipynb CHANGED
@@ -2,14 +2,14 @@
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
- "execution_count": 17,
6
  "metadata": {},
7
  "outputs": [
8
  {
9
  "name": "stderr",
10
  "output_type": "stream",
11
  "text": [
12
- "/var/folders/b4/lwfgccm95kqd2skcwvrt2fr00000gn/T/ipykernel_33833/3272723617.py:81: FutureWarning:\n",
13
  "\n",
14
  "Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n",
15
  "\n"
@@ -30,7 +30,7 @@
30
  " "
31
  ],
32
  "text/plain": [
33
- "<IPython.lib.display.IFrame at 0x2ae1f6cb0>"
34
  ]
35
  },
36
  "metadata": {},
@@ -93,6 +93,7 @@
93
  "# crop to 5 rows and 7 columns\n",
94
  "raw_ratings = raw_ratings.iloc[:5, :7]\n",
95
  "\n",
 
96
  "\n",
97
  "\n",
98
  "\n",
@@ -126,7 +127,7 @@
126
  " ], className='row'),\n",
127
  " \n",
128
  " \n",
129
- " html.H1(children='Wine Recommender based on feedback and other user', style={'textAlign':'center'}),\n",
130
  " html.Div(\n",
131
  " [\n",
132
  " html.Div(\n",
@@ -148,12 +149,81 @@
148
  " ], className='row'),\n",
149
  " \n",
150
  " \n",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  "\n",
152
  " \n",
153
  "\n",
154
  " \n",
155
  "\n",
156
- "])\n",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  "\n",
158
  "\n",
159
  "@app.callback(\n",
 
2
  "cells": [
3
  {
4
  "cell_type": "code",
5
+ "execution_count": 5,
6
  "metadata": {},
7
  "outputs": [
8
  {
9
  "name": "stderr",
10
  "output_type": "stream",
11
  "text": [
12
+ "/var/folders/b4/lwfgccm95kqd2skcwvrt2fr00000gn/T/ipykernel_4768/1094357399.py:82: FutureWarning:\n",
13
  "\n",
14
  "Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n",
15
  "\n"
 
30
  " "
31
  ],
32
  "text/plain": [
33
+ "<IPython.lib.display.IFrame at 0x2b1675fc0>"
34
  ]
35
  },
36
  "metadata": {},
 
93
  "# crop to 5 rows and 7 columns\n",
94
  "raw_ratings = raw_ratings.iloc[:5, :7]\n",
95
  "\n",
96
+ "TEMPORARY_WINE_RECOMMENDATION_FORM_INFO = {}\n",
97
  "\n",
98
  "\n",
99
  "\n",
 
127
  " ], className='row'),\n",
128
  " \n",
129
  " \n",
130
+ " html.H1(children=\"Wine Recommender based on users' feedback\", style={'textAlign':'center'}),\n",
131
  " html.Div(\n",
132
  " [\n",
133
  " html.Div(\n",
 
149
  " ], className='row'),\n",
150
  " \n",
151
  " \n",
152
+ " html.H1(children=\"Wine Preferences Form\", style={'textAlign':'center'}),\n",
153
+ " html.Div(\n",
154
+ " [\n",
155
+ " html.Div(\n",
156
+ " [\n",
157
+ " #Dropdown for wine name\n",
158
+ " dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),\n",
159
+ " dcc.Input(id='input-wine-rating', type='number', placeholder='Enter wine rating', min=1, max=5),\n",
160
+ " ], className='six columns',\n",
161
+ " ),\n",
162
+ " html.Div(\n",
163
+ " [\n",
164
+ " html.Button('Submit', id='submit-button', n_clicks=0), \n",
165
+ " ], className='six columns',\n",
166
+ " ),\n",
167
+ " ], className='row'),\n",
168
+ "\n",
169
+ " html.Div(id='recommended-wine-rating-info', style={'textAlign':'center'}),\n",
170
+ " html.Button('Reset', id='recommend-wine-from-form-reset', n_clicks=0),\n",
171
+ " # Button to submit the form\n",
172
+ " html.Button('Recommend Wine', id='recommend-wine-from-form', n_clicks=0),\n",
173
+ " html.Div(id='recommended-wine-form-output', style={'textAlign':'center'}),\n",
174
+ "\n",
175
+ "\n",
176
  "\n",
177
  " \n",
178
  "\n",
179
  " \n",
180
  "\n",
181
+ "], style={'background-color': '#333', 'font-family': 'Fantasy', 'color': '#999', 'padding': '10px'})\n",
182
+ "\n",
183
+ "\n",
184
+ "@app.callback(\n",
185
+ " Input('recommend-wine-from-form-reset', 'n_clicks'),\n",
186
+ ")\n",
187
+ "def reset_form(n_clicks):\n",
188
+ " if n_clicks > 0:\n",
189
+ " TEMPORARY_WINE_RECOMMENDATION_FORM_INFO.clear()\n",
190
+ " return\n",
191
+ " \n",
192
+ "\n",
193
+ "@app.callback(\n",
194
+ " Output('recommended-wine-rating-info', 'children'),\n",
195
+ " Input('submit-button', 'n_clicks'),\n",
196
+ " Input('dropdown-selection', 'value'),\n",
197
+ " Input('input-wine-rating', 'value'),\n",
198
+ ")\n",
199
+ "def update_output(n_clicks, wine_name, rating):\n",
200
+ " if n_clicks > 0:\n",
201
+ " TEMPORARY_WINE_RECOMMENDATION_FORM_INFO[wine_name] = rating\n",
202
+ " n_clicks = 0\n",
203
+ " return f'You rated {wine_name} with a score of {rating}'\n",
204
+ " return ''\n",
205
+ "\n",
206
+ "@app.callback(\n",
207
+ " Output('recommended-wine-form-output', 'children'),\n",
208
+ " Input('recommend-wine-from-form', 'n_clicks'),\n",
209
+ ")\n",
210
+ "def recommend_wine_from_form(n_clicks):\n",
211
+ " if n_clicks > 0:\n",
212
+ " user = \"temporary_user\"\n",
213
+ " user_rating_df.loc[user] = TEMPORARY_WINE_RECOMMENDATION_FORM_INFO\n",
214
+ " user_rating_df.fillna(0, inplace=True)\n",
215
+ " user_rating_df['user'] = user_rating_df.index\n",
216
+ "\n",
217
+ "\n",
218
+ " wine_recommendation_from_user = core.recommend_wine_from_users(user_rating_df, user, 3)\n",
219
+ " wine_recommendation_from_user = f\"Based on user form, we recommend: \"+\"; \".join(wine_recommendation_from_user)\n",
220
+ " return wine_recommendation_from_user\n",
221
+ " return ''\n",
222
+ "\n",
223
+ "\n",
224
+ "\n",
225
+ "\n",
226
+ "\n",
227
  "\n",
228
  "\n",
229
  "@app.callback(\n",
app/data/try.csv ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ user,Azevedo,Gazela,Aura,Dedicado,Legado,Offley,Quinta dos Carvalhais,Série Ímpar,Antónia Adelaide Ferreira,Casa Ferreirinha,Finca Flichman,Herdade do peso,Marqués de Burgos,Porto Ferreira,Sandeman,Silk & Spice,Chateau Los Boldos,Framingham,LAN,Mateus,Quinta da Romeira,Santiago Ruiz,cluster,user
2
+ User1,0.0,2.0,0.0,4.0,0.0,0.0,3.0,4.0,2.0,0.0,5.0,3.0,0.0,0.0,0.0,4.0,2.0,0.0,0.0,3.0,5.0,0.0,0.0,User1
3
+ User2,0.0,5.0,1.0,0.0,0.0,5.0,0.0,4.0,0.0,0.0,0.0,0.0,0.0,4.0,0.0,0.0,0.0,3.0,0.0,3.0,0.0,3.0,1.0,User2
4
+ User3,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,4.0,4.0,2.0,4.0,0.0,0.0,4.0,1.0,0.0,0.0,0.0,0.0,3.0,1.0,3.0,User3
5
+ User4,4.0,0.0,0.0,0.0,0.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,2.0,0.0,0.0,5.0,2.0,0.0,0.0,2.0,User4
6
+ User5,3.0,0.0,0.0,0.0,0.0,0.0,2.0,3.0,0.0,1.0,0.0,0.0,5.0,4.0,0.0,3.0,0.0,0.0,5.0,0.0,4.0,0.0,2.0,User5
7
+ User6,4.0,0.0,0.0,5.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.0,0.0,4.0,0.0,5.0,5.0,1.0,0.0,3.0,2.0,User6
8
+ User7,2.0,1.0,2.0,0.0,5.0,5.0,2.0,0.0,0.0,2.0,1.0,0.0,4.0,0.0,3.0,0.0,0.0,4.0,0.0,4.0,0.0,1.0,1.0,User7
9
+ User8,4.0,0.0,0.0,0.0,0.0,0.0,5.0,3.0,0.0,1.0,3.0,1.0,4.0,0.0,0.0,0.0,4.0,0.0,2.0,2.0,2.0,1.0,0.0,User8
10
+ User9,0.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,2.0,1.0,3.0,0.0,0.0,0.0,2.0,2.0,0.0,2.0,3.0,0.0,0.0,4.0,2.0,User9
11
+ User10,0.0,5.0,0.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,4.0,1.0,0.0,0.0,0.0,2.0,1.0,0.0,2.0,2.0,User10
12
+ User11,0.0,0.0,0.0,0.0,4.0,5.0,3.0,0.0,2.0,0.0,5.0,0.0,0.0,0.0,2.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,User11
13
+ User12,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,4.0,4.0,3.0,1.0,0.0,0.0,2.0,2.0,0.0,0.0,2.0,User12
14
+ User13,0.0,0.0,0.0,5.0,0.0,0.0,0.0,4.0,0.0,0.0,0.0,1.0,1.0,2.0,5.0,0.0,0.0,0.0,0.0,0.0,0.0,4.0,3.0,User13
15
+ User14,2.0,1.0,0.0,4.0,0.0,4.0,0.0,0.0,4.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,2.0,0.0,4.0,1.0,0.0,1.0,User14
16
+ User15,1.0,0.0,3.0,0.0,4.0,1.0,0.0,2.0,3.0,0.0,5.0,0.0,3.0,0.0,2.0,5.0,0.0,0.0,5.0,0.0,0.0,0.0,2.0,User15
17
+ User16,5.0,4.0,3.0,2.0,0.0,0.0,0.0,1.0,2.0,0.0,0.0,1.0,0.0,3.0,4.0,0.0,0.0,0.0,0.0,2.0,5.0,0.0,2.0,User16
18
+ User17,0.0,0.0,0.0,0.0,0.0,1.0,0.0,3.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0,0.0,5.0,0.0,5.0,0.0,0.0,1.0,User17
19
+ User18,3.0,0.0,1.0,0.0,5.0,5.0,0.0,0.0,1.0,3.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,5.0,0.0,0.0,1.0,User18
20
+ User19,1.0,3.0,4.0,1.0,0.0,4.0,0.0,3.0,3.0,0.0,1.0,3.0,0.0,0.0,0.0,0.0,5.0,5.0,1.0,0.0,3.0,0.0,3.0,User19
21
+ User20,1.0,0.0,0.0,5.0,0.0,3.0,1.0,0.0,2.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,2.0,3.0,0.0,5.0,2.0,1.0,1.0,User20
22
+ User21,3.0,1.0,3.0,0.0,4.0,1.0,0.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,User21
23
+ User22,0.0,5.0,0.0,0.0,1.0,5.0,5.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.0,0.0,0.0,4.0,1.0,2.0,2.0,0.0,1.0,User22
24
+ User23,0.0,0.0,0.0,0.0,0.0,4.0,0.0,5.0,0.0,4.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,5.0,0.0,0.0,0.0,0.0,3.0,User23
25
+ User24,0.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,5.0,4.0,5.0,3.0,0.0,3.0,0.0,2.0,0.0,0.0,0.0,4.0,2.0,User24
26
+ User25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,4.0,1.0,3.0,1.0,3.0,0.0,0.0,0.0,4.0,1.0,5.0,5.0,0.0,0.0,0.0,3.0,User25
27
+ User26,3.0,1.0,4.0,0.0,0.0,5.0,1.0,2.0,0.0,2.0,2.0,0.0,0.0,5.0,0.0,2.0,5.0,0.0,2.0,5.0,0.0,4.0,2.0,User26
28
+ User27,4.0,0.0,5.0,0.0,0.0,0.0,0.0,3.0,1.0,3.0,0.0,0.0,1.0,0.0,0.0,1.0,4.0,0.0,3.0,0.0,5.0,0.0,0.0,User27
29
+ User28,1.0,0.0,4.0,0.0,3.0,4.0,0.0,0.0,0.0,0.0,2.0,0.0,5.0,0.0,0.0,0.0,1.0,0.0,5.0,2.0,1.0,0.0,2.0,User28
30
+ User29,0.0,1.0,2.0,1.0,0.0,0.0,0.0,0.0,0.0,3.0,0.0,1.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,4.0,3.0,0.0,2.0,User29
31
+ User30,0.0,0.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,0.0,1.0,0.0,4.0,0.0,0.0,0.0,0.0,4.0,2.0,0.0,3.0,0.0,2.0,User30
32
+ User31,3.0,5.0,2.0,0.0,0.0,5.0,0.0,0.0,0.0,0.0,5.0,0.0,2.0,0.0,0.0,3.0,0.0,0.0,0.0,4.0,4.0,1.0,2.0,User31
33
+ User32,0.0,0.0,0.0,0.0,4.0,1.0,0.0,4.0,1.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,3.0,User32
34
+ User33,0.0,2.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,4.0,2.0,5.0,0.0,3.0,0.0,0.0,3.0,0.0,0.0,2.0,1.0,5.0,3.0,User33
35
+ User34,0.0,0.0,1.0,4.0,0.0,0.0,0.0,4.0,2.0,3.0,2.0,0.0,0.0,4.0,2.0,1.0,0.0,3.0,2.0,0.0,0.0,5.0,3.0,User34
36
+ User35,0.0,0.0,0.0,3.0,0.0,0.0,4.0,1.0,1.0,2.0,4.0,0.0,0.0,0.0,4.0,4.0,5.0,0.0,0.0,0.0,4.0,5.0,0.0,User35
37
+ User36,0.0,2.0,0.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,User36
38
+ User37,0.0,0.0,0.0,0.0,4.0,3.0,0.0,2.0,0.0,1.0,0.0,5.0,0.0,1.0,0.0,2.0,5.0,0.0,0.0,0.0,1.0,1.0,3.0,User37
39
+ User38,4.0,3.0,5.0,1.0,2.0,0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0,4.0,0.0,3.0,1.0,0.0,0.0,0.0,0.0,0.0,User38
40
+ User39,0.0,2.0,3.0,4.0,0.0,2.0,0.0,0.0,3.0,0.0,5.0,0.0,5.0,2.0,2.0,1.0,0.0,4.0,1.0,0.0,3.0,0.0,2.0,User39
41
+ User40,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,1.0,4.0,0.0,0.0,3.0,0.0,0.0,0.0,3.0,0.0,0.0,3.0,3.0,User40
42
+ User41,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,4.0,1.0,User41
43
+ User42,0.0,2.0,5.0,0.0,5.0,2.0,0.0,4.0,3.0,3.0,0.0,4.0,0.0,0.0,2.0,0.0,2.0,2.0,0.0,0.0,4.0,3.0,3.0,User42
44
+ User43,0.0,0.0,0.0,1.0,3.0,2.0,2.0,0.0,0.0,0.0,1.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,2.0,0.0,2.0,3.0,2.0,User43
45
+ User44,3.0,0.0,0.0,3.0,5.0,0.0,4.0,0.0,4.0,5.0,0.0,0.0,0.0,0.0,5.0,4.0,0.0,0.0,4.0,0.0,0.0,5.0,0.0,User44
46
+ User45,4.0,0.0,3.0,0.0,0.0,1.0,0.0,1.0,0.0,0.0,0.0,5.0,5.0,3.0,2.0,4.0,0.0,1.0,3.0,5.0,0.0,0.0,2.0,User45
47
+ User46,0.0,0.0,0.0,0.0,0.0,4.0,0.0,4.0,0.0,4.0,3.0,2.0,2.0,3.0,0.0,4.0,3.0,1.0,0.0,1.0,5.0,0.0,3.0,User46
48
+ User47,2.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,5.0,4.0,4.0,0.0,0.0,5.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,3.0,User47
49
+ User48,0.0,0.0,4.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,4.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,3.0,1.0,3.0,0.0,2.0,User48
50
+ User49,3.0,0.0,3.0,2.0,5.0,2.0,0.0,4.0,0.0,1.0,0.0,4.0,0.0,0.0,1.0,0.0,0.0,5.0,0.0,3.0,0.0,0.0,3.0,User49
51
+ User50,0.0,0.0,4.0,0.0,1.0,0.0,0.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,4.0,0.0,3.0,1.0,1.0,3.0,0.0,0.0,User50
52
+ User51,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,3.0,0.0,0.0,0.0,3.0,5.0,0.0,0.0,5.0,5.0,4.0,5.0,4.0,2.0,User51
53
+ User52,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,1.0,4.0,4.0,1.0,0.0,0.0,0.0,0.0,0.0,3.0,4.0,2.0,4.0,3.0,2.0,User52
54
+ User53,0.0,0.0,1.0,0.0,0.0,0.0,3.0,0.0,0.0,3.0,0.0,3.0,1.0,2.0,0.0,0.0,1.0,5.0,0.0,0.0,0.0,3.0,3.0,User53
55
+ User54,0.0,0.0,0.0,0.0,1.0,0.0,3.0,2.0,0.0,1.0,0.0,2.0,1.0,0.0,3.0,2.0,0.0,0.0,0.0,0.0,0.0,4.0,0.0,User54
56
+ User55,0.0,0.0,0.0,0.0,1.0,5.0,0.0,0.0,0.0,0.0,0.0,5.0,0.0,0.0,0.0,2.0,0.0,1.0,0.0,4.0,0.0,1.0,1.0,User55
57
+ User56,0.0,0.0,5.0,3.0,3.0,0.0,0.0,0.0,3.0,0.0,0.0,4.0,0.0,5.0,0.0,2.0,0.0,0.0,5.0,3.0,0.0,0.0,2.0,User56
58
+ User57,3.0,0.0,0.0,0.0,0.0,4.0,0.0,1.0,0.0,4.0,5.0,0.0,0.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,User57
59
+ User58,0.0,0.0,0.0,4.0,4.0,0.0,0.0,0.0,0.0,1.0,0.0,5.0,0.0,0.0,0.0,0.0,4.0,0.0,0.0,5.0,1.0,4.0,1.0,User58
60
+ User59,0.0,0.0,1.0,0.0,3.0,1.0,0.0,0.0,0.0,4.0,3.0,0.0,3.0,2.0,0.0,0.0,3.0,0.0,5.0,5.0,3.0,0.0,2.0,User59
61
+ User60,5.0,0.0,5.0,5.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,2.0,3.0,0.0,0.0,0.0,0.0,4.0,0.0,0.0,User60
62
+ User61,0.0,0.0,5.0,0.0,4.0,0.0,0.0,2.0,2.0,0.0,0.0,2.0,0.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,User61
63
+ User62,0.0,1.0,0.0,3.0,1.0,0.0,2.0,0.0,0.0,0.0,0.0,5.0,1.0,5.0,1.0,3.0,3.0,3.0,0.0,3.0,0.0,3.0,1.0,User62
64
+ User63,2.0,3.0,0.0,1.0,3.0,0.0,0.0,4.0,0.0,0.0,1.0,0.0,3.0,0.0,0.0,3.0,1.0,0.0,1.0,1.0,1.0,0.0,0.0,User63
65
+ User64,2.0,0.0,0.0,0.0,0.0,5.0,2.0,1.0,2.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,3.0,4.0,0.0,5.0,0.0,0.0,1.0,User64
66
+ User65,0.0,0.0,2.0,5.0,0.0,3.0,0.0,0.0,0.0,4.0,4.0,5.0,0.0,0.0,4.0,0.0,0.0,5.0,4.0,0.0,3.0,0.0,3.0,User65
67
+ User66,0.0,0.0,2.0,1.0,0.0,0.0,4.0,2.0,3.0,0.0,0.0,0.0,0.0,0.0,1.0,3.0,5.0,0.0,0.0,0.0,5.0,0.0,0.0,User66
68
+ User67,2.0,2.0,0.0,5.0,0.0,0.0,0.0,4.0,0.0,0.0,0.0,5.0,0.0,1.0,0.0,0.0,0.0,3.0,2.0,0.0,4.0,3.0,3.0,User67
69
+ User68,3.0,0.0,0.0,0.0,2.0,0.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.0,3.0,4.0,0.0,0.0,0.0,0.0,0.0,User68
70
+ User69,0.0,4.0,0.0,1.0,0.0,1.0,0.0,4.0,0.0,0.0,0.0,0.0,0.0,4.0,4.0,4.0,3.0,0.0,5.0,0.0,5.0,0.0,0.0,User69
71
+ User70,0.0,0.0,4.0,0.0,5.0,0.0,4.0,0.0,0.0,3.0,0.0,0.0,5.0,2.0,2.0,3.0,3.0,5.0,1.0,4.0,4.0,1.0,0.0,User70
72
+ User71,4.0,5.0,0.0,1.0,2.0,3.0,1.0,4.0,0.0,0.0,2.0,1.0,2.0,0.0,1.0,0.0,0.0,1.0,5.0,0.0,1.0,0.0,2.0,User71
73
+ User72,0.0,0.0,3.0,1.0,3.0,0.0,2.0,3.0,0.0,3.0,0.0,3.0,4.0,1.0,5.0,0.0,1.0,3.0,0.0,0.0,1.0,0.0,3.0,User72
74
+ User73,5.0,3.0,2.0,0.0,3.0,0.0,3.0,1.0,3.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,3.0,1.0,2.0,0.0,1.0,0.0,User73
75
+ User74,4.0,5.0,0.0,2.0,0.0,0.0,1.0,5.0,0.0,0.0,0.0,0.0,0.0,0.0,5.0,2.0,0.0,5.0,0.0,2.0,2.0,5.0,0.0,User74
76
+ User75,2.0,1.0,0.0,3.0,0.0,0.0,5.0,0.0,3.0,0.0,4.0,3.0,0.0,0.0,0.0,3.0,2.0,2.0,0.0,1.0,0.0,5.0,0.0,User75
77
+ User76,0.0,4.0,0.0,0.0,1.0,0.0,3.0,2.0,0.0,0.0,3.0,0.0,0.0,4.0,4.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,User76
78
+ User77,3.0,0.0,0.0,0.0,2.0,5.0,1.0,0.0,0.0,0.0,2.0,4.0,0.0,3.0,5.0,0.0,0.0,4.0,0.0,0.0,0.0,0.0,1.0,User77
79
+ User78,0.0,2.0,0.0,2.0,1.0,0.0,0.0,0.0,5.0,3.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,5.0,0.0,0.0,0.0,2.0,User78
80
+ User79,0.0,0.0,5.0,0.0,0.0,0.0,4.0,1.0,5.0,0.0,2.0,0.0,0.0,0.0,1.0,0.0,0.0,2.0,0.0,0.0,3.0,3.0,0.0,User79
81
+ User80,0.0,2.0,0.0,2.0,0.0,0.0,5.0,0.0,1.0,4.0,0.0,0.0,0.0,5.0,3.0,0.0,0.0,0.0,4.0,1.0,0.0,0.0,2.0,User80
82
+ User81,5.0,0.0,5.0,0.0,0.0,5.0,5.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,5.0,4.0,3.0,0.0,0.0,0.0,0.0,0.0,User81
83
+ User82,0.0,0.0,0.0,0.0,5.0,0.0,1.0,0.0,0.0,4.0,5.0,2.0,0.0,0.0,0.0,0.0,4.0,3.0,0.0,0.0,0.0,0.0,3.0,User82
84
+ User83,0.0,0.0,1.0,3.0,0.0,5.0,0.0,0.0,4.0,5.0,0.0,0.0,0.0,5.0,2.0,0.0,3.0,0.0,0.0,1.0,4.0,0.0,3.0,User83
85
+ User84,1.0,0.0,3.0,0.0,0.0,1.0,2.0,0.0,1.0,1.0,4.0,2.0,4.0,3.0,0.0,0.0,0.0,0.0,0.0,4.0,1.0,3.0,2.0,User84
86
+ User85,0.0,4.0,4.0,0.0,5.0,0.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,3.0,User85
87
+ User86,0.0,0.0,0.0,2.0,5.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.0,1.0,4.0,5.0,2.0,3.0,0.0,0.0,0.0,2.0,0.0,User86
88
+ User87,0.0,0.0,0.0,0.0,3.0,2.0,2.0,2.0,0.0,0.0,2.0,0.0,3.0,0.0,3.0,0.0,0.0,0.0,1.0,1.0,0.0,3.0,2.0,User87
89
+ User88,2.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,4.0,3.0,0.0,4.0,4.0,0.0,4.0,2.0,User88
90
+ User89,0.0,0.0,4.0,5.0,1.0,2.0,0.0,0.0,2.0,0.0,0.0,3.0,0.0,5.0,5.0,0.0,0.0,0.0,5.0,0.0,0.0,3.0,2.0,User89
91
+ User90,3.0,2.0,0.0,2.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,2.0,0.0,1.0,4.0,5.0,5.0,0.0,2.0,User90
92
+ User91,0.0,4.0,0.0,0.0,1.0,0.0,4.0,3.0,4.0,0.0,0.0,0.0,1.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,5.0,0.0,User91
93
+ User92,2.0,2.0,2.0,0.0,5.0,0.0,0.0,0.0,5.0,4.0,0.0,0.0,3.0,0.0,5.0,2.0,5.0,2.0,0.0,0.0,0.0,5.0,0.0,User92
94
+ User93,3.0,5.0,4.0,0.0,0.0,5.0,0.0,0.0,0.0,0.0,0.0,5.0,0.0,3.0,3.0,2.0,2.0,4.0,5.0,1.0,0.0,0.0,1.0,User93
95
+ User94,0.0,5.0,0.0,0.0,4.0,4.0,0.0,0.0,1.0,5.0,0.0,0.0,0.0,5.0,1.0,1.0,0.0,5.0,0.0,0.0,0.0,0.0,3.0,User94
96
+ User95,0.0,0.0,0.0,2.0,2.0,2.0,0.0,2.0,0.0,0.0,3.0,0.0,3.0,0.0,0.0,0.0,2.0,0.0,0.0,1.0,0.0,5.0,2.0,User95
97
+ User96,0.0,1.0,5.0,0.0,2.0,3.0,0.0,0.0,0.0,1.0,0.0,0.0,3.0,0.0,0.0,0.0,0.0,4.0,0.0,0.0,0.0,0.0,3.0,User96
98
+ User97,0.0,0.0,0.0,0.0,0.0,0.0,5.0,1.0,0.0,0.0,0.0,4.0,0.0,3.0,2.0,5.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,User97
99
+ User98,0.0,0.0,0.0,0.0,0.0,0.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,3.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,User98
100
+ User99,0.0,0.0,0.0,2.0,4.0,5.0,3.0,0.0,0.0,1.0,2.0,0.0,0.0,1.0,2.0,1.0,0.0,2.0,0.0,0.0,0.0,0.0,1.0,User99
101
+ User100,0.0,0.0,0.0,3.0,1.0,0.0,4.0,3.0,2.0,4.0,0.0,0.0,0.0,4.0,4.0,0.0,1.0,4.0,0.0,3.0,3.0,1.0,3.0,User100
102
+ temporary_user,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0