Spaces:
Sleeping
Sleeping
yolo
Browse files- .DS_Store +0 -0
- app/.DS_Store +0 -0
- app/__pycache__/core.cpython-310.pyc +0 -0
- app/app.py +26 -15
- app/core.py +7 -5
- app/dashboard copy.ipynb +0 -229
- app/dashboard.ipynb +58 -17
- app/data/simulated_ratings.csv +101 -101
.DS_Store
CHANGED
Binary files a/.DS_Store and b/.DS_Store differ
|
|
app/.DS_Store
CHANGED
Binary files a/app/.DS_Store and b/app/.DS_Store differ
|
|
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
@@ -25,23 +25,24 @@ server = app.server
|
|
25 |
|
26 |
wine_similarity_df = pd.read_csv('data/wine_similarity.csv')
|
27 |
wine_list = wine_similarity_df['NAME'].unique()
|
|
|
28 |
geo = pd.read_csv('data/processed_wineyards.csv')
|
29 |
wine_regions=list(geo['Region'].unique()) + ['all']
|
30 |
wine_country = list(geo['Country'].unique()) + ['all']
|
31 |
# local_type = list(geo['LOCAL TYPE'].unique()) + ['all']
|
32 |
|
33 |
-
|
|
|
|
|
|
|
34 |
|
35 |
|
36 |
-
# wine_country = geo['Country'].unique()
|
37 |
-
|
38 |
|
39 |
## Layout ##
|
40 |
|
41 |
dashboard_layout = html.Div([
|
42 |
-
dcc.Link('About this project', href='/wiki'),
|
43 |
-
|
44 |
-
dcc.Graph(id='graph-content'),
|
45 |
html.H1(children='Country', style={'textAlign':'center'}),
|
46 |
dcc.Dropdown(wine_country, wine_country[-1], id='dropdown-wc'),
|
47 |
html.H1(children='Region', style={'textAlign':'center'}),
|
@@ -50,7 +51,13 @@ dashboard_layout = html.Div([
|
|
50 |
|
51 |
html.H1(children='Wine Recommender', style={'textAlign':'center'}),
|
52 |
dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),
|
53 |
-
html.Div(id='wine-recommendation', children=''),
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
])
|
55 |
|
56 |
|
@@ -61,7 +68,6 @@ dashboard_layout = html.Div([
|
|
61 |
def set_wine_type_options(selected_wine_type):
|
62 |
# Return the options based on the selected wine country
|
63 |
pattern = r'.*' if selected_wine_type == 'all' else rf'{selected_wine_type}'
|
64 |
-
#selected_wine_type = r'*' if selected_wine_type == r'all' else selected_wine_type
|
65 |
return list(geo[geo['Country'].str.match(pattern, na=False)]['Region'].unique()) + ['all']
|
66 |
|
67 |
|
@@ -108,27 +114,32 @@ def display_page(pathname):
|
|
108 |
|
109 |
|
110 |
@app.callback(
|
111 |
-
Output('graph-content', 'figure'),
|
112 |
Output('wine-recommendation', 'children'),
|
113 |
Output('world-map-fig', 'figure'),
|
|
|
114 |
Input('dropdown-selection', 'value'),
|
115 |
Input('dropdown-wr', 'value'),
|
116 |
-
Input('dropdown-wc', 'value')
|
|
|
117 |
)
|
118 |
-
def update_graph(value,wr,wc):
|
119 |
### Wine Recommendation ###
|
120 |
recommended_wines = None
|
121 |
if value:
|
122 |
recommended_wines = core.get_top_5_similar_wines(value, wine_similarity_df)[1:]
|
123 |
-
recommended_wines = "; ".join(recommended_wines)
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
|
125 |
|
126 |
### World Map of wineyards ###
|
127 |
|
128 |
geo_df = pd.read_csv('data/processed_wineyards.csv')
|
129 |
wr = r'.*' if wr == 'all' else rf'{wr}'
|
130 |
-
#wr = r'*' if wr == 'all' else wr # wine region poiseu tbm tinha assim, mas agr tenho 2 filtros nao posos fazer infinitas condicoes assim ja sao 4, rota
|
131 |
-
#wc = r'*' if wc == 'all' else wc # wine country & geo_df['Country'].str.match(wc)
|
132 |
wc = r'.*' if wc == 'all' else rf'{wc}'
|
133 |
geo_df = geo_df[geo_df['Region'].str.contains(wr, case=False, na=False, regex=True) & geo_df['Country'].str.contains(wc, case=False, na=False, regex=True)]
|
134 |
|
@@ -151,7 +162,7 @@ def update_graph(value,wr,wc):
|
|
151 |
|
152 |
|
153 |
|
154 |
-
return
|
155 |
|
156 |
|
157 |
if __name__ == "__main__":
|
|
|
25 |
|
26 |
wine_similarity_df = pd.read_csv('data/wine_similarity.csv')
|
27 |
wine_list = wine_similarity_df['NAME'].unique()
|
28 |
+
# wine_list.sort()
|
29 |
geo = pd.read_csv('data/processed_wineyards.csv')
|
30 |
wine_regions=list(geo['Region'].unique()) + ['all']
|
31 |
wine_country = list(geo['Country'].unique()) + ['all']
|
32 |
# local_type = list(geo['LOCAL TYPE'].unique()) + ['all']
|
33 |
|
34 |
+
user_rating_df = pd.read_csv('data/simulated_ratings.csv')
|
35 |
+
user_rating_df.set_index('user', inplace=True)
|
36 |
+
user_rating_df['user'] = user_rating_df.index
|
37 |
+
user_ids = user_rating_df['user']
|
38 |
|
39 |
|
|
|
|
|
40 |
|
41 |
## Layout ##
|
42 |
|
43 |
dashboard_layout = html.Div([
|
44 |
+
# dcc.Link('About this project', href='/wiki'),
|
45 |
+
html.H1(children='Wineyards around the world', style={'textAlign':'center'}),
|
|
|
46 |
html.H1(children='Country', style={'textAlign':'center'}),
|
47 |
dcc.Dropdown(wine_country, wine_country[-1], id='dropdown-wc'),
|
48 |
html.H1(children='Region', style={'textAlign':'center'}),
|
|
|
51 |
|
52 |
html.H1(children='Wine Recommender', style={'textAlign':'center'}),
|
53 |
dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),
|
54 |
+
html.Div(id='wine-recommendation', children='', style={'textAlign':'center'}),
|
55 |
+
|
56 |
+
|
57 |
+
html.H1(children='Wine Recommender based on feedback and other user', style={'textAlign':'center'}),
|
58 |
+
dcc.Dropdown(user_ids, user_ids[0], id='dropdown-selection-user'),
|
59 |
+
html.Div(id='wine-recommendation-from-user', children='', style={'textAlign':'center'}),
|
60 |
+
|
61 |
])
|
62 |
|
63 |
|
|
|
68 |
def set_wine_type_options(selected_wine_type):
|
69 |
# Return the options based on the selected wine country
|
70 |
pattern = r'.*' if selected_wine_type == 'all' else rf'{selected_wine_type}'
|
|
|
71 |
return list(geo[geo['Country'].str.match(pattern, na=False)]['Region'].unique()) + ['all']
|
72 |
|
73 |
|
|
|
114 |
|
115 |
|
116 |
@app.callback(
|
|
|
117 |
Output('wine-recommendation', 'children'),
|
118 |
Output('world-map-fig', 'figure'),
|
119 |
+
Output('wine-recommendation-from-user', 'children'),
|
120 |
Input('dropdown-selection', 'value'),
|
121 |
Input('dropdown-wr', 'value'),
|
122 |
+
Input('dropdown-wc', 'value'),
|
123 |
+
Input('dropdown-selection-user', 'value')
|
124 |
)
|
125 |
+
def update_graph(value,wr,wc, user_value):
|
126 |
### Wine Recommendation ###
|
127 |
recommended_wines = None
|
128 |
if value:
|
129 |
recommended_wines = core.get_top_5_similar_wines(value, wine_similarity_df)[1:]
|
130 |
+
recommended_wines = f"Based on ´{value}´, we recommend: "+"; ".join(recommended_wines)
|
131 |
+
|
132 |
+
|
133 |
+
## Wine Recommendation from users feedback
|
134 |
+
|
135 |
+
wine_recommendation_from_user = core.recommend_wine_from_users(user_rating_df, user_value, 3)
|
136 |
+
wine_recommendation_from_user = f"Based on user information, we recommend: "+"; ".join(wine_recommendation_from_user)
|
137 |
|
138 |
|
139 |
### World Map of wineyards ###
|
140 |
|
141 |
geo_df = pd.read_csv('data/processed_wineyards.csv')
|
142 |
wr = r'.*' if wr == 'all' else rf'{wr}'
|
|
|
|
|
143 |
wc = r'.*' if wc == 'all' else rf'{wc}'
|
144 |
geo_df = geo_df[geo_df['Region'].str.contains(wr, case=False, na=False, regex=True) & geo_df['Country'].str.contains(wc, case=False, na=False, regex=True)]
|
145 |
|
|
|
162 |
|
163 |
|
164 |
|
165 |
+
return recommended_wines, world_map_fig, wine_recommendation_from_user
|
166 |
|
167 |
|
168 |
if __name__ == "__main__":
|
app/core.py
CHANGED
@@ -12,11 +12,13 @@ def get_top_5_similar_wines(wine_name: str, df: pd.DataFrame) -> pd.DataFrame:
|
|
12 |
|
13 |
return res
|
14 |
|
15 |
-
def
|
16 |
-
user_cluster =
|
17 |
-
user_ratings =
|
18 |
user_unrated = user_ratings[user_ratings == 0].index
|
19 |
-
cluster_users =
|
20 |
-
|
|
|
|
|
21 |
cluster_avg = cluster_avg[user_unrated]
|
22 |
return cluster_avg.sort_values(ascending=False).keys()[:n].tolist()
|
|
|
12 |
|
13 |
return res
|
14 |
|
15 |
+
def recommend_wine_from_users(df:pd.DataFrame, user:str, n=5):
|
16 |
+
user_cluster = df.loc[user, 'cluster']
|
17 |
+
user_ratings = df.loc[user].drop('cluster')
|
18 |
user_unrated = user_ratings[user_ratings == 0].index
|
19 |
+
cluster_users = df[df['cluster'] == user_cluster]
|
20 |
+
cluster_users.drop(['cluster', 'user'], axis=1, inplace=True)
|
21 |
+
|
22 |
+
cluster_avg = cluster_users.mean()
|
23 |
cluster_avg = cluster_avg[user_unrated]
|
24 |
return cluster_avg.sort_values(ascending=False).keys()[:n].tolist()
|
app/dashboard copy.ipynb
DELETED
@@ -1,229 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"cells": [
|
3 |
-
{
|
4 |
-
"cell_type": "code",
|
5 |
-
"execution_count": 1,
|
6 |
-
"metadata": {},
|
7 |
-
"outputs": [
|
8 |
-
{
|
9 |
-
"name": "stderr",
|
10 |
-
"output_type": "stream",
|
11 |
-
"text": [
|
12 |
-
"/Users/ddcosta/Documents/TDV/.venv/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020\n",
|
13 |
-
" warnings.warn(\n"
|
14 |
-
]
|
15 |
-
},
|
16 |
-
{
|
17 |
-
"data": {
|
18 |
-
"text/html": [
|
19 |
-
"\n",
|
20 |
-
" <iframe\n",
|
21 |
-
" width=\"100%\"\n",
|
22 |
-
" height=\"650\"\n",
|
23 |
-
" src=\"http://0.0.0.0:8050/\"\n",
|
24 |
-
" frameborder=\"0\"\n",
|
25 |
-
" allowfullscreen\n",
|
26 |
-
" \n",
|
27 |
-
" ></iframe>\n",
|
28 |
-
" "
|
29 |
-
],
|
30 |
-
"text/plain": [
|
31 |
-
"<IPython.lib.display.IFrame at 0x15619fbe0>"
|
32 |
-
]
|
33 |
-
},
|
34 |
-
"metadata": {},
|
35 |
-
"output_type": "display_data"
|
36 |
-
}
|
37 |
-
],
|
38 |
-
"source": [
|
39 |
-
"import os\n",
|
40 |
-
"import plotly.express as px\n",
|
41 |
-
"import plotly.graph_objects as go\n",
|
42 |
-
"import pandas as pd\n",
|
43 |
-
"from dash import Dash, html, dcc, Input, Output, callback\n",
|
44 |
-
"import plotly.express as px\n",
|
45 |
-
"import numpy as np\n",
|
46 |
-
"from plotly.subplots import make_subplots\n",
|
47 |
-
"import core\n",
|
48 |
-
"\n",
|
49 |
-
"df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv')\n",
|
50 |
-
"debug = False\n",
|
51 |
-
"\n",
|
52 |
-
"external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']\n",
|
53 |
-
"\n",
|
54 |
-
"app = Dash(__name__, external_stylesheets=external_stylesheets)\n",
|
55 |
-
"\n",
|
56 |
-
"app.layout = html.Div([\n",
|
57 |
-
" dcc.Location(id='url', refresh=False),\n",
|
58 |
-
" html.Div(id='page-content')\n",
|
59 |
-
"])\n",
|
60 |
-
"\n",
|
61 |
-
"server = app.server\n",
|
62 |
-
"\n",
|
63 |
-
"\n",
|
64 |
-
"wine_similarity_df = pd.read_csv('data/wine_similarity.csv')\n",
|
65 |
-
"wine_list = wine_similarity_df['NAME'].unique()\n",
|
66 |
-
"geo = pd.read_csv('data/processed_wineyards.csv')\n",
|
67 |
-
"wine_regions=list(geo['Region'].unique()) + ['all']\n",
|
68 |
-
"wine_country = list(geo['Country'].unique()) + ['all']\n",
|
69 |
-
"# local_type = list(geo['LOCAL TYPE'].unique()) + ['all']\n",
|
70 |
-
"\n",
|
71 |
-
"# WT_GLOBAL = '*' if \n",
|
72 |
-
"\n",
|
73 |
-
"\n",
|
74 |
-
"# wine_country = geo['Country'].unique()\n",
|
75 |
-
"\n",
|
76 |
-
"\n",
|
77 |
-
"## Layout ##\n",
|
78 |
-
"\n",
|
79 |
-
"dashboard_layout = html.Div([\n",
|
80 |
-
" dcc.Link('About this project', href='/wiki'),\n",
|
81 |
-
"\n",
|
82 |
-
" dcc.Graph(id='graph-content'),\n",
|
83 |
-
" html.H1(children='Country', style={'textAlign':'center'}),\n",
|
84 |
-
" dcc.Dropdown(wine_country, wine_country[-1], id='dropdown-wc'),\n",
|
85 |
-
" html.H1(children='Region', style={'textAlign':'center'}),\n",
|
86 |
-
" dcc.Dropdown(['all'],'all', id='dropdown-wr'),\n",
|
87 |
-
" dcc.Graph(id='world-map-fig'),\n",
|
88 |
-
"\n",
|
89 |
-
" html.H1(children='Wine Recommender', style={'textAlign':'center'}),\n",
|
90 |
-
" dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),\n",
|
91 |
-
" html.Div(id='wine-recommendation', children=''),\n",
|
92 |
-
"])\n",
|
93 |
-
"\n",
|
94 |
-
"\n",
|
95 |
-
"@app.callback(\n",
|
96 |
-
" Output('dropdown-wr', 'options'),\n",
|
97 |
-
" Input('dropdown-wc', 'value')\n",
|
98 |
-
")\n",
|
99 |
-
"def set_wine_type_options(selected_wine_type):\n",
|
100 |
-
" # Return the options based on the selected wine country\n",
|
101 |
-
" pattern = r'.*' if selected_wine_type == 'all' else rf'{selected_wine_type}'\n",
|
102 |
-
" #selected_wine_type = r'*' if selected_wine_type == r'all' else selected_wine_type\n",
|
103 |
-
" return list(geo[geo['Country'].str.match(pattern, na=False)]['Region'].unique()) + ['all']\n",
|
104 |
-
"\n",
|
105 |
-
"\n",
|
106 |
-
"wiki_layout = html.Div([\n",
|
107 |
-
" dcc.Link('Dashboard', href='/'),\n",
|
108 |
-
"\n",
|
109 |
-
" html.H1('About this project'),\n",
|
110 |
-
"\n",
|
111 |
-
" html.Div([\n",
|
112 |
-
" html.Div([\n",
|
113 |
-
"\n",
|
114 |
-
" html.H3('What is this project about?'),\n",
|
115 |
-
"\n",
|
116 |
-
" html.P('We are a group of 4 Computer Science Engineering Students with a solid Artificial Intelligence background.'),\n",
|
117 |
-
" html.P('This project aims to showcase AI applications for improving Wine Tourism for SOGRAPE.'),\n",
|
118 |
-
"\n",
|
119 |
-
"\n",
|
120 |
-
" html.H3('\\'Bout us'),\n",
|
121 |
-
" html.Img(src='/assets/tourdevino_logo.webp', style={'width': '40%', 'height': 'auto', 'display': 'block', 'margin-left': 'auto', 'margin-right': 'auto'}),\n",
|
122 |
-
" html.P('This project was developed by a team of 4, in the context of the SOGRAPE 2024 hackathon.'),\n",
|
123 |
-
" html.P('The team members are:'),\n",
|
124 |
-
" html.H4('Rui Melo'),\n",
|
125 |
-
" html.H4('André Catarino'),\n",
|
126 |
-
" html.H4('Dinis Costa'),\n",
|
127 |
-
" html.H4('Paulo Fidalgo'),\n",
|
128 |
-
"\n",
|
129 |
-
"\n",
|
130 |
-
" ], className='six columns'),], className='row'),\n",
|
131 |
-
"],\n",
|
132 |
-
"style={'background-color': '#333', 'font-family': 'Fantasy', 'color': '#999', 'padding': '10px'}\n",
|
133 |
-
"\n",
|
134 |
-
")\n",
|
135 |
-
"\n",
|
136 |
-
"# Update the index\n",
|
137 |
-
"@callback(Output('page-content', 'children'), Input('url', 'pathname'))\n",
|
138 |
-
"def display_page(pathname):\n",
|
139 |
-
" if pathname == '/':\n",
|
140 |
-
" return dashboard_layout\n",
|
141 |
-
" elif pathname == '/wiki':\n",
|
142 |
-
" return wiki_layout\n",
|
143 |
-
" else:\n",
|
144 |
-
" return '404'\n",
|
145 |
-
" # You could also return a 404 \"URL not found\" page here\n",
|
146 |
-
"\n",
|
147 |
-
"\n",
|
148 |
-
"@app.callback(\n",
|
149 |
-
" Output('graph-content', 'figure'),\n",
|
150 |
-
" Output('wine-recommendation', 'children'),\n",
|
151 |
-
" Output('world-map-fig', 'figure'),\n",
|
152 |
-
" Input('dropdown-selection', 'value'),\n",
|
153 |
-
" Input('dropdown-wr', 'value'),\n",
|
154 |
-
" Input('dropdown-wc', 'value')\n",
|
155 |
-
")\n",
|
156 |
-
"def update_graph(value,wr,wc):\n",
|
157 |
-
" ### Wine Recommendation ###\n",
|
158 |
-
" recommended_wines = None\n",
|
159 |
-
" if value:\n",
|
160 |
-
" recommended_wines = core.get_top_5_similar_wines(value, wine_similarity_df)[1:]\n",
|
161 |
-
" recommended_wines = \"; \".join(recommended_wines)\n",
|
162 |
-
"\n",
|
163 |
-
"\n",
|
164 |
-
" ### World Map of wineyards ###\n",
|
165 |
-
"\n",
|
166 |
-
" geo_df = pd.read_csv('data/processed_wineyards.csv')\n",
|
167 |
-
" wr = r'.*' if wr == 'all' else rf'{wr}'\n",
|
168 |
-
" #wr = r'*' if wr == 'all' else wr # wine region poiseu tbm tinha assim, mas agr tenho 2 filtros nao posos fazer infinitas condicoes assim ja sao 4, rota \n",
|
169 |
-
" #wc = r'*' if wc == 'all' else wc # wine country & geo_df['Country'].str.match(wc)\n",
|
170 |
-
" wc = r'.*' if wc == 'all' else rf'{wc}'\n",
|
171 |
-
" geo_df = geo_df[geo_df['Region'].str.contains(wr, case=False, na=False, regex=True) & geo_df['Country'].str.contains(wc, case=False, na=False, regex=True)]\n",
|
172 |
-
"\n",
|
173 |
-
"\n",
|
174 |
-
" world_map_fig = px.scatter_map(geo_df,\n",
|
175 |
-
" lat=geo_df['coord_x'],\n",
|
176 |
-
" lon=geo_df['coord_y'],\n",
|
177 |
-
" hover_name=geo_df['name'],\n",
|
178 |
-
" zoom=4,\n",
|
179 |
-
" hover_data={\n",
|
180 |
-
" 'IsTouristic': True,\n",
|
181 |
-
" 'Wine Type': True,\n",
|
182 |
-
" 'Country': True,\n",
|
183 |
-
" 'Region': True,\n",
|
184 |
-
" 'Address': True,\n",
|
185 |
-
"\n",
|
186 |
-
" },\n",
|
187 |
-
" title='Wineyards around the world',\n",
|
188 |
-
" )\n",
|
189 |
-
" \n",
|
190 |
-
"\n",
|
191 |
-
"\n",
|
192 |
-
" return px.line(df, x='year', y='pop'), recommended_wines, world_map_fig\n",
|
193 |
-
"\n",
|
194 |
-
"\n",
|
195 |
-
"if __name__ == \"__main__\":\n",
|
196 |
-
" app.run_server(host=\"0.0.0.0\", port=\"8050\", debug=debug)"
|
197 |
-
]
|
198 |
-
},
|
199 |
-
{
|
200 |
-
"cell_type": "code",
|
201 |
-
"execution_count": null,
|
202 |
-
"metadata": {},
|
203 |
-
"outputs": [],
|
204 |
-
"source": []
|
205 |
-
}
|
206 |
-
],
|
207 |
-
"metadata": {
|
208 |
-
"kernelspec": {
|
209 |
-
"display_name": "atc-smart-shower-YhjpRjjr-py3.10",
|
210 |
-
"language": "python",
|
211 |
-
"name": "python3"
|
212 |
-
},
|
213 |
-
"language_info": {
|
214 |
-
"codemirror_mode": {
|
215 |
-
"name": "ipython",
|
216 |
-
"version": 3
|
217 |
-
},
|
218 |
-
"file_extension": ".py",
|
219 |
-
"mimetype": "text/x-python",
|
220 |
-
"name": "python",
|
221 |
-
"nbconvert_exporter": "python",
|
222 |
-
"pygments_lexer": "ipython3",
|
223 |
-
"version": "3.9.6"
|
224 |
-
},
|
225 |
-
"orig_nbformat": 4
|
226 |
-
},
|
227 |
-
"nbformat": 4,
|
228 |
-
"nbformat_minor": 2
|
229 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/dashboard.ipynb
CHANGED
@@ -2,9 +2,19 @@
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
-
"execution_count":
|
6 |
"metadata": {},
|
7 |
"outputs": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
{
|
9 |
"data": {
|
10 |
"text/html": [
|
@@ -20,11 +30,31 @@
|
|
20 |
" "
|
21 |
],
|
22 |
"text/plain": [
|
23 |
-
"<IPython.lib.display.IFrame at
|
24 |
]
|
25 |
},
|
26 |
"metadata": {},
|
27 |
"output_type": "display_data"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
}
|
29 |
],
|
30 |
"source": [
|
@@ -55,23 +85,24 @@
|
|
55 |
"\n",
|
56 |
"wine_similarity_df = pd.read_csv('data/wine_similarity.csv')\n",
|
57 |
"wine_list = wine_similarity_df['NAME'].unique()\n",
|
|
|
58 |
"geo = pd.read_csv('data/processed_wineyards.csv')\n",
|
59 |
"wine_regions=list(geo['Region'].unique()) + ['all']\n",
|
60 |
"wine_country = list(geo['Country'].unique()) + ['all']\n",
|
61 |
"# local_type = list(geo['LOCAL TYPE'].unique()) + ['all']\n",
|
62 |
"\n",
|
63 |
-
"
|
64 |
-
"\n",
|
|
|
|
|
65 |
"\n",
|
66 |
-
"# wine_country = geo['Country'].unique()\n",
|
67 |
"\n",
|
68 |
"\n",
|
69 |
"## Layout ##\n",
|
70 |
"\n",
|
71 |
"dashboard_layout = html.Div([\n",
|
72 |
-
" dcc.Link('About this project', href='/wiki'),\n",
|
73 |
-
"
|
74 |
-
" dcc.Graph(id='graph-content'),\n",
|
75 |
" html.H1(children='Country', style={'textAlign':'center'}),\n",
|
76 |
" dcc.Dropdown(wine_country, wine_country[-1], id='dropdown-wc'),\n",
|
77 |
" html.H1(children='Region', style={'textAlign':'center'}),\n",
|
@@ -80,7 +111,13 @@
|
|
80 |
"\n",
|
81 |
" html.H1(children='Wine Recommender', style={'textAlign':'center'}),\n",
|
82 |
" dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),\n",
|
83 |
-
" html.Div(id='wine-recommendation', children=''),\n",
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
"])\n",
|
85 |
"\n",
|
86 |
"\n",
|
@@ -91,7 +128,6 @@
|
|
91 |
"def set_wine_type_options(selected_wine_type):\n",
|
92 |
" # Return the options based on the selected wine country\n",
|
93 |
" pattern = r'.*' if selected_wine_type == 'all' else rf'{selected_wine_type}'\n",
|
94 |
-
" #selected_wine_type = r'*' if selected_wine_type == r'all' else selected_wine_type\n",
|
95 |
" return list(geo[geo['Country'].str.match(pattern, na=False)]['Region'].unique()) + ['all']\n",
|
96 |
"\n",
|
97 |
"\n",
|
@@ -138,27 +174,32 @@
|
|
138 |
"\n",
|
139 |
"\n",
|
140 |
"@app.callback(\n",
|
141 |
-
" Output('graph-content', 'figure'),\n",
|
142 |
" Output('wine-recommendation', 'children'),\n",
|
143 |
" Output('world-map-fig', 'figure'),\n",
|
|
|
144 |
" Input('dropdown-selection', 'value'),\n",
|
145 |
" Input('dropdown-wr', 'value'),\n",
|
146 |
-
" Input('dropdown-wc', 'value')
|
|
|
147 |
")\n",
|
148 |
-
"def update_graph(value,wr,wc):\n",
|
149 |
" ### Wine Recommendation ###\n",
|
150 |
" recommended_wines = None\n",
|
151 |
" if value:\n",
|
152 |
" recommended_wines = core.get_top_5_similar_wines(value, wine_similarity_df)[1:]\n",
|
153 |
-
" recommended_wines = \"; \".join(recommended_wines)\n",
|
|
|
|
|
|
|
|
|
|
|
|
|
154 |
"\n",
|
155 |
"\n",
|
156 |
" ### World Map of wineyards ###\n",
|
157 |
"\n",
|
158 |
" geo_df = pd.read_csv('data/processed_wineyards.csv')\n",
|
159 |
" wr = r'.*' if wr == 'all' else rf'{wr}'\n",
|
160 |
-
" #wr = r'*' if wr == 'all' else wr # wine region poiseu tbm tinha assim, mas agr tenho 2 filtros nao posos fazer infinitas condicoes assim ja sao 4, rota \n",
|
161 |
-
" #wc = r'*' if wc == 'all' else wc # wine country & geo_df['Country'].str.match(wc)\n",
|
162 |
" wc = r'.*' if wc == 'all' else rf'{wc}'\n",
|
163 |
" geo_df = geo_df[geo_df['Region'].str.contains(wr, case=False, na=False, regex=True) & geo_df['Country'].str.contains(wc, case=False, na=False, regex=True)]\n",
|
164 |
"\n",
|
@@ -181,7 +222,7 @@
|
|
181 |
" \n",
|
182 |
"\n",
|
183 |
"\n",
|
184 |
-
" return
|
185 |
"\n",
|
186 |
"\n",
|
187 |
"if __name__ == \"__main__\":\n",
|
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
+
"execution_count": 2,
|
6 |
"metadata": {},
|
7 |
"outputs": [
|
8 |
+
{
|
9 |
+
"name": "stderr",
|
10 |
+
"output_type": "stream",
|
11 |
+
"text": [
|
12 |
+
"/var/folders/b4/lwfgccm95kqd2skcwvrt2fr00000gn/T/ipykernel_33833/349649994.py:58: 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"
|
16 |
+
]
|
17 |
+
},
|
18 |
{
|
19 |
"data": {
|
20 |
"text/html": [
|
|
|
30 |
" "
|
31 |
],
|
32 |
"text/plain": [
|
33 |
+
"<IPython.lib.display.IFrame at 0x2adb0eb30>"
|
34 |
]
|
35 |
},
|
36 |
"metadata": {},
|
37 |
"output_type": "display_data"
|
38 |
+
},
|
39 |
+
{
|
40 |
+
"name": "stderr",
|
41 |
+
"output_type": "stream",
|
42 |
+
"text": [
|
43 |
+
"/Users/ruimelo/Documents/GitHub/eda/app/core.py:20: SettingWithCopyWarning:\n",
|
44 |
+
"\n",
|
45 |
+
"\n",
|
46 |
+
"A value is trying to be set on a copy of a slice from a DataFrame\n",
|
47 |
+
"\n",
|
48 |
+
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
|
49 |
+
"\n",
|
50 |
+
"/Users/ruimelo/Documents/GitHub/eda/app/core.py:20: SettingWithCopyWarning:\n",
|
51 |
+
"\n",
|
52 |
+
"\n",
|
53 |
+
"A value is trying to be set on a copy of a slice from a DataFrame\n",
|
54 |
+
"\n",
|
55 |
+
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
|
56 |
+
"\n"
|
57 |
+
]
|
58 |
}
|
59 |
],
|
60 |
"source": [
|
|
|
85 |
"\n",
|
86 |
"wine_similarity_df = pd.read_csv('data/wine_similarity.csv')\n",
|
87 |
"wine_list = wine_similarity_df['NAME'].unique()\n",
|
88 |
+
"# wine_list.sort()\n",
|
89 |
"geo = pd.read_csv('data/processed_wineyards.csv')\n",
|
90 |
"wine_regions=list(geo['Region'].unique()) + ['all']\n",
|
91 |
"wine_country = list(geo['Country'].unique()) + ['all']\n",
|
92 |
"# local_type = list(geo['LOCAL TYPE'].unique()) + ['all']\n",
|
93 |
"\n",
|
94 |
+
"user_rating_df = pd.read_csv('data/simulated_ratings.csv')\n",
|
95 |
+
"user_rating_df.set_index('user', inplace=True)\n",
|
96 |
+
"user_rating_df['user'] = user_rating_df.index\n",
|
97 |
+
"user_ids = user_rating_df['user']\n",
|
98 |
"\n",
|
|
|
99 |
"\n",
|
100 |
"\n",
|
101 |
"## Layout ##\n",
|
102 |
"\n",
|
103 |
"dashboard_layout = html.Div([\n",
|
104 |
+
" # dcc.Link('About this project', href='/wiki'),\n",
|
105 |
+
" html.H1(children='Wineyards around the world', style={'textAlign':'center'}),\n",
|
|
|
106 |
" html.H1(children='Country', style={'textAlign':'center'}),\n",
|
107 |
" dcc.Dropdown(wine_country, wine_country[-1], id='dropdown-wc'),\n",
|
108 |
" html.H1(children='Region', style={'textAlign':'center'}),\n",
|
|
|
111 |
"\n",
|
112 |
" html.H1(children='Wine Recommender', style={'textAlign':'center'}),\n",
|
113 |
" dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),\n",
|
114 |
+
" html.Div(id='wine-recommendation', children='', style={'textAlign':'center'}),\n",
|
115 |
+
"\n",
|
116 |
+
"\n",
|
117 |
+
" html.H1(children='Wine Recommender based on feedback and other user', style={'textAlign':'center'}),\n",
|
118 |
+
" dcc.Dropdown(user_ids, user_ids[0], id='dropdown-selection-user'),\n",
|
119 |
+
" html.Div(id='wine-recommendation-from-user', children='', style={'textAlign':'center'}),\n",
|
120 |
+
"\n",
|
121 |
"])\n",
|
122 |
"\n",
|
123 |
"\n",
|
|
|
128 |
"def set_wine_type_options(selected_wine_type):\n",
|
129 |
" # Return the options based on the selected wine country\n",
|
130 |
" pattern = r'.*' if selected_wine_type == 'all' else rf'{selected_wine_type}'\n",
|
|
|
131 |
" return list(geo[geo['Country'].str.match(pattern, na=False)]['Region'].unique()) + ['all']\n",
|
132 |
"\n",
|
133 |
"\n",
|
|
|
174 |
"\n",
|
175 |
"\n",
|
176 |
"@app.callback(\n",
|
|
|
177 |
" Output('wine-recommendation', 'children'),\n",
|
178 |
" Output('world-map-fig', 'figure'),\n",
|
179 |
+
" Output('wine-recommendation-from-user', 'children'),\n",
|
180 |
" Input('dropdown-selection', 'value'),\n",
|
181 |
" Input('dropdown-wr', 'value'),\n",
|
182 |
+
" Input('dropdown-wc', 'value'),\n",
|
183 |
+
" Input('dropdown-selection-user', 'value')\n",
|
184 |
")\n",
|
185 |
+
"def update_graph(value,wr,wc, user_value):\n",
|
186 |
" ### Wine Recommendation ###\n",
|
187 |
" recommended_wines = None\n",
|
188 |
" if value:\n",
|
189 |
" recommended_wines = core.get_top_5_similar_wines(value, wine_similarity_df)[1:]\n",
|
190 |
+
" recommended_wines = f\"Based on ´{value}´, we recommend: \"+\"; \".join(recommended_wines)\n",
|
191 |
+
"\n",
|
192 |
+
"\n",
|
193 |
+
" ## Wine Recommendation from users feedback\n",
|
194 |
+
"\n",
|
195 |
+
" wine_recommendation_from_user = core.recommend_wine_from_users(user_rating_df, user_value, 3)\n",
|
196 |
+
" wine_recommendation_from_user = f\"Based on user information, we recommend: \"+\"; \".join(wine_recommendation_from_user)\n",
|
197 |
"\n",
|
198 |
"\n",
|
199 |
" ### World Map of wineyards ###\n",
|
200 |
"\n",
|
201 |
" geo_df = pd.read_csv('data/processed_wineyards.csv')\n",
|
202 |
" wr = r'.*' if wr == 'all' else rf'{wr}'\n",
|
|
|
|
|
203 |
" wc = r'.*' if wc == 'all' else rf'{wc}'\n",
|
204 |
" geo_df = geo_df[geo_df['Region'].str.contains(wr, case=False, na=False, regex=True) & geo_df['Country'].str.contains(wc, case=False, na=False, regex=True)]\n",
|
205 |
"\n",
|
|
|
222 |
" \n",
|
223 |
"\n",
|
224 |
"\n",
|
225 |
+
" return recommended_wines, world_map_fig, wine_recommendation_from_user\n",
|
226 |
"\n",
|
227 |
"\n",
|
228 |
"if __name__ == \"__main__\":\n",
|
app/data/simulated_ratings.csv
CHANGED
@@ -1,101 +1,101 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
|
|
1 |
+
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 |
+
0.561412018355068,0.25715755397948026,0.5071945265240903,0.0,0.5287329260587544,0.024723588331014512,0.0,0.09572594862771278,0.11135443067488549,0.3514333198846613,0.31670023938182346,0.138918056131482,0.2540725855939209,0.0,0.0,0.4564605087681617,0.5681856713351724,0.0,0.02780393954296112,0.5137231480587153,0.3833129600277686,0.11510300505067661,0,User1
|
3 |
+
0.0,0.0,0.30346828435581263,0.5293060801819723,0.0,0.4735083224085994,0.45408114808764033,0.04449717252774643,0.0,0.0,0.09049895812314146,0.23349646863054707,0.0,0.32831057123689855,0.0,0.05712795543211513,0.0,0.0,0.5056784351734974,0.0,0.46305058548694256,0.12043716581150887,2,User2
|
4 |
+
0.07595973587671656,0.031363462998044045,0.572628230340402,0.43299535966734815,0.2718646072101685,0.5941379357933873,0.5067430929280308,0.0,0.5877909284010061,0.0,0.06528356693548121,0.5614996347228473,0.10091828128427416,0.34936329779476283,0.16511210781684382,0.0,0.16651020385061133,0.0,0.3771121914031258,0.09254974820277162,0.0,0.27966624009669894,1,User3
|
5 |
+
0.021614092510510163,0.23289328398537223,0.0,0.4811976188231968,0.0,0.3285399393500318,0.3949857487401327,0.0,0.11706899181486374,0.06170291859751764,0.13602052755250282,0.0,0.4248180280685042,0.5733412436704056,0.22180861693224851,0.0,0.0,0.0,0.1375050075443216,0.21038780642655586,0.0,0.0,2,User4
|
6 |
+
0.0,0.24348429205471378,0.0,0.4422096715273729,0.574667492147817,0.0,0.0,0.5376074939158649,0.0,0.0,0.0,0.0,0.0,0.0,0.5057614577696253,0.571865330338299,0.5574302863109768,0.5101709287100247,0.008665399718655875,0.0,0.0,0.44614388496461943,0,User5
|
7 |
+
0.0457999002277899,0.45646141820728336,0.0,0.0,0.0,0.3599594695118722,0.0,0.0,0.5920623018047061,0.5905899235830765,0.5824416692423557,0.0,0.57152624999785,0.31286709341244456,0.588175448632372,0.0,0.3626683931145339,0.030759894973775515,0.5661277459209226,0.2608419020212035,0.0,0.1335876466934508,2,User6
|
8 |
+
0.15553190020692986,0.24029725071502928,0.4933010603308484,0.0,0.16117348584690616,0.0,0.2971120954090757,0.5711944265310595,0.0,0.0,0.4212899102661979,0.0,0.0,0.26325070380818827,0.13922240297410782,0.0,0.0,0.16930357885636016,0.41558025824465705,0.11117386794152229,0.0,0.39824000876552745,0,User7
|
9 |
+
0.147606790152101,0.41401246602294517,0.0,0.5558954631456423,0.42197821226075904,0.5136611954550919,0.17590587258200618,0.20670058123365254,0.08101276115026979,0.5706713936544554,0.0,0.4756708572728994,0.4141473189220797,0.5017115494238117,0.0,0.16629386988236838,0.4483728573251582,0.41876726257484975,0.30035036007628046,0.5344524443251097,0.4518317692471542,0.1661990686542566,1,User8
|
10 |
+
0.0,0.0,0.013483953223597078,0.0,0.0,0.47362054254023345,0.5993796534689305,0.0,0.0,0.0,0.5309846852330476,0.5295612526213241,0.24826347209939748,0.23979280152433036,0.0,0.0,0.0,0.0,0.0,0.4365119248440982,0.0,0.2833824290902732,2,User9
|
11 |
+
0.0,0.06089141275161658,0.382187343487407,0.012078490292588118,0.0,0.32057787642861546,0.5776518280222778,0.0,0.0,0.2014957994354909,0.5051732546545054,0.3470013057264716,0.0,0.4772345360065857,0.0,0.03812040376878523,0.07234619213346705,0.5856297003442699,0.34348126613398455,0.29594561443298584,0.2979655609254801,0.5603806812174366,1,User10
|
12 |
+
0.48097159768152675,0.01960123856513951,0.2950179807012263,0.004309749612620206,0.08531346566157028,0.0,0.0,0.0,0.33295071504442575,0.21174761461550717,0.26784450918602454,0.5224290296428228,0.1134388568021506,0.048698318401032115,0.34635693148636504,0.0,0.12024189537712748,0.3624626112664191,0.3855451822286865,0.12579639047917435,0.0,0.27342520489314037,1,User11
|
13 |
+
0.0,0.18008469921441872,0.4301417475645146,0.3015293474218269,0.0,0.0,0.0,0.0,0.0,0.263902810550121,0.0,0.0,0.41835782081727524,0.0942639094813369,0.09673258693566467,0.08947259234210769,0.0,0.08527896773887567,0.0,0.0,0.2861953319498428,0.0,2,User12
|
14 |
+
0.0,0.23450697516692154,0.39689643507407246,0.0,0.4809434366195692,0.0,0.4250908847988798,0.07859505110853826,0.0,0.16357554286150444,0.5306053709627668,0.3772006688809878,0.056369152734771055,0.0,0.1654099646075854,0.24452538799810597,0.0,0.38594247402597237,0.4667691959318684,0.23438249794954236,0.21950198529325649,0.45712804735840706,1,User13
|
15 |
+
0.5097075064153489,0.0,0.0,0.3560742491698927,0.0,0.138399574588146,0.0,0.5356809923397593,0.0,0.18520862540754446,0.496933404524438,0.0,0.47744633966757044,0.0,0.4615952924680826,0.3843149064149629,0.0,0.0,0.014228241344667714,0.0,0.0,0.24449664816707595,2,User14
|
16 |
+
0.5743562200114156,0.0,0.0,0.0,0.20164003740588177,0.025163979875054476,0.17638687257964392,0.0,0.0,0.4779116485005711,0.0,0.0,0.2838451831750931,0.1025779266424699,0.529211468205848,0.0,0.0,0.0,0.0,0.0,0.3312149906445837,0.0,2,User15
|
17 |
+
0.27349525910331174,0.3128329940666644,0.0,0.5984991218417727,0.5442651770262736,0.0,0.0,0.0,0.18468976903094914,0.0,0.5882896832198422,0.4959541927716655,0.0,0.40001859875943835,0.0,0.3784511055611577,0.40043636511499636,0.007800033048540489,0.4657284765748023,0.07385911182785743,0.0,0.07884743022044416,1,User16
|
18 |
+
0.0,0.053474652173935766,0.3996668067130438,0.0,0.0,0.034837256394159355,0.0,0.0,0.06404566255441968,0.025010016902909493,0.0,0.12338189475834926,0.42714054786105937,0.0,0.3306998311897449,0.05617450972066673,0.5837495789687528,0.45352205589430417,0.024374554438054696,0.4945809544296458,0.0,0.5076054314183489,0,User17
|
19 |
+
0.42058363244619756,0.5497767166934294,0.0,0.4905514434549263,0.42013916365621906,0.26588046662843934,0.0,0.0782767410406141,0.0,0.10597438004754611,0.399557675950156,0.5561727243190255,0.5155666429429662,0.0,0.0,0.1895400072179878,0.0,0.4716730853008362,0.5957503871549412,0.0,0.0,0.0,1,User18
|
20 |
+
0.0,0.0,0.0,0.32200003454451764,0.167233681077831,0.15677437545163786,0.0,0.14465556582380557,0.015125243660118026,0.0,0.0,0.09194190499514376,0.5531977081852651,0.1788328684761854,0.43099370448042806,0.0,0.0,0.24143217325531197,0.0,0.0,0.0,0.4931521222295939,2,User19
|
21 |
+
0.0,0.0,0.38849187844430555,0.0,0.0,0.0,0.290544054444972,0.0,0.0,0.3400981259600787,0.45064682726452854,0.0,0.31140786437723467,0.0,0.4256654915292919,0.0,0.24298991312233287,0.02673044194777774,0.0,0.0,0.0,0.3128546137907563,2,User20
|
22 |
+
0.0,0.24463814478974033,0.0,0.39046349123074986,0.0,0.0,0.2653466826685241,0.04686675788350381,0.0,0.3653493584213878,0.0,0.0,0.0,0.0,0.0,0.15433869395305233,0.4507753601889133,0.43034940067224814,0.09868975085488618,0.3300109766216487,0.19273566760492322,0.2441008605485675,0,User21
|
23 |
+
0.23397327744447582,0.18725838893107105,0.0,0.384168387109351,0.15185177126429128,0.0,0.0,0.3937920296881696,0.38583460091496535,0.0,0.05820211219953686,0.08772112980108848,0.0,0.0,0.07842121017723025,0.0,0.4794536912507926,0.3617572881131703,0.0,0.0,0.34644647452725563,0.0,0,User22
|
24 |
+
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.06244221231946845,0.06308483710277124,0.376320579330756,0.0,0.3560259437040949,0.0,0.32635430341492866,0.0,0.0,0.0,0.5866643098588757,0.0,0.0,0.20057256398443413,0.5139037778482713,2,User23
|
25 |
+
0.24844517575065928,0.5868429834543627,0.0,0.0,0.3179668162392085,0.3151197553192714,0.4902536262205548,0.0,0.0,0.21966635546586677,0.15815927895412196,0.0,0.0,0.0,0.0,0.0,0.0,0.3465090028491127,0.0,0.42677269251966343,0.09066510334283084,0.14775043492843365,1,User24
|
26 |
+
0.05708976579430325,0.04748457830128583,0.5973867351426954,0.12418550721975874,0.07850935344680687,0.35868989138000595,0.08921058110367419,0.1160155506587216,0.4855942265565075,0.07490055014964025,0.08800691243745662,0.0,0.054692159784722305,0.4493932180271123,0.218680226026717,0.0,0.22819330843610608,0.16562826524925378,0.3021159616224285,0.4145666169921729,0.5313203484331623,0.5028526556469508,0,User25
|
27 |
+
0.0,0.09684979708562547,0.280466599050742,0.3322753224456011,0.0,0.36632673728360743,0.0,0.0,0.34919541353561034,0.4929115561489952,0.0,0.46618002742261244,0.0,0.22702236020388933,0.24411072866648498,0.40243116244445254,0.0,0.38902989856380166,0.16349394511606608,0.1771364667347819,0.0,0.0,1,User26
|
28 |
+
0.0,0.44612674111320183,0.1504526392353268,0.15566974345296036,0.0,0.26874683058595195,0.0,0.0,0.4011494736542184,0.3410559837867977,0.0,0.5647774099168729,0.1320173812947929,0.5475029730495394,0.5804148573004491,0.0,0.0,0.5885145700510223,0.4216626589954854,0.3005692635303431,0.0,0.23016713916190934,1,User27
|
29 |
+
0.09441246414466598,0.3044467518040076,0.0,0.5457682567478569,0.4984783405592561,0.10091378911019044,0.38024497405973146,0.029368697361578877,0.17786217821007222,0.14650296516317363,0.0,0.0,0.00893965866149049,0.366855230882174,0.08135870861932848,0.2487531590912223,0.010826300980352643,0.0,0.0,0.21357621624522616,0.12165362738501162,0.4122615514913208,2,User28
|
30 |
+
0.0,0.12476068928442197,0.38601445497392695,0.22591046005841875,0.13479915448719215,0.3573978076468092,0.39005200864480494,0.2894020365238483,0.0,0.46291422952424655,0.0,0.0,0.0,0.07310563646096313,0.0,0.0,0.2610809538745834,0.0,0.10654098868420536,0.0,0.0,0.0,2,User29
|
31 |
+
0.0,0.5459964822623877,0.2932465649971383,0.0,0.31999221898056496,0.06435523336609272,0.37047038425231693,0.08869190317553399,0.49097265511805843,0.0,0.0,0.5770891780993401,0.0,0.3213651680468149,0.30935160020075736,0.3038625486776805,0.5482902149066112,0.0,0.3655497124260464,0.5827406053356916,0.22571434733961349,0.1537689252900537,0,User30
|
32 |
+
0.4316002542884583,0.18432076996098445,0.056618394588544674,0.0,0.0,0.05728458521166402,0.0,0.0,0.0,0.493525155769459,0.15197842949781526,0.4397546252039428,0.4027297689447745,0.2488133578238424,0.09978008037933217,0.08544242165384519,0.0,0.32044893903639216,0.07564444175600504,0.01119834922594598,0.310631071531418,0.39280385258212225,2,User31
|
33 |
+
0.23996927009651392,0.5097608780062455,0.0,0.3635777574432736,0.16897648378915142,0.568173071776048,0.46355687874456997,0.055787670203842454,0.0,0.0,0.0,0.09653431580987637,0.0,0.06743284831702745,0.3008761429783773,0.0,0.591350509622267,0.0,0.3397332172467987,0.476543353775012,0.0,0.4514072049066409,0,User32
|
34 |
+
0.14610230304339622,0.1387548375380726,0.0,0.0,0.27284724281171546,0.1938961603881324,0.044748104163985114,0.0,0.0,0.0902501766320849,0.42983254044478536,0.0,0.5695295749821999,0.0,0.1377725637465972,0.5968593552322433,0.47635013899151035,0.0,0.2277701547217703,0.35120945858067554,0.1521201895021379,0.0,0,User33
|
35 |
+
0.20824283167323088,0.1819649319081843,0.0,0.1936752590109242,0.0,0.0,0.055700273905055275,0.0,0.4257791959498832,0.2674050205034664,0.04847458227217705,0.2838664161517077,0.20817491147138079,0.5579539281386959,0.5128384351086519,0.3463813311641222,0.0,0.0,0.0,0.14435462547008315,0.5055964098478138,0.5691382014314478,2,User34
|
36 |
+
0.0,0.0,0.37436969637959094,0.0,0.08081458705302225,0.41203614308602965,0.25168031806223234,0.0,0.0,0.09943788097882378,0.0,0.5128402445750686,0.49086355880927734,0.26538315678868696,0.0,0.0,0.05656395769102218,0.5755392969244825,0.33153894069046974,0.4071474004128679,0.25441620738719906,0.15088205479298333,1,User35
|
37 |
+
0.469528731671668,0.0,0.3064880864975903,0.3106481622414148,0.02236794818328769,0.0,0.1411410430089277,0.24687011553219151,0.0055165435668186324,0.15963808074737262,0.1372487408877463,0.0,0.0,0.5058743839761097,0.3542871601652007,0.07555575561346484,0.06918729072859309,0.0,0.2835195345121584,0.19291654829800375,0.0,0.0,2,User36
|
38 |
+
0.16126871516175856,0.0,0.36988357449797693,0.4585462302598161,0.0,0.043081366322875736,0.5104391561633277,0.27522934953947864,0.47159050946394954,0.0,0.0,0.09807969544345385,0.13316402742159594,0.09139350155146786,0.0,0.0,0.03532471266811987,0.0,0.09377148095080479,0.26601406170512354,0.0,0.3360155380860401,0,User37
|
39 |
+
0.4398508663780467,0.0,0.18836294466165693,0.17585182973638103,0.0,0.0,0.04890222029167035,0.05290485065213435,0.0,0.09108341418512056,0.0,0.2617056534056522,0.0,0.0,0.24776632100526486,0.0,0.3585990031760353,0.5412259675513371,0.0,0.17639310350624526,0.0,0.0,0,User38
|
40 |
+
0.0,0.5244891064062444,0.0,0.11569541363499158,0.11844166157136637,0.0,0.0,0.0,0.0216352992899127,0.0,0.029801807956516657,0.0,0.4715366415646275,0.08606980788631746,0.5225110625751125,0.0,0.0,0.1207160276992576,0.0,0.0,0.41603610655031265,0.36565156644466956,2,User39
|
41 |
+
0.1727990019696476,0.0,0.5373567153944885,0.06750518821437335,0.10174284622782892,0.47655800705483553,0.2551005300057053,0.08441997799828582,0.4856838259512024,0.0,0.4714162366967717,0.0,0.035902636130088816,0.0,0.014340484257957531,0.0,0.46866210621496185,0.0,0.24130183015619722,0.39428772207126916,0.0,0.321868789979326,0,User40
|
42 |
+
0.0,0.46422141886621493,0.2911152182721807,0.44068736906684247,0.0,0.18656810300380322,0.0,0.5313144237193896,0.0,0.0,0.4364388215335434,0.0,0.0,0.2619627955989533,0.2053564539198257,0.045583057926974035,0.5916214710218312,0.0,0.5418957068343961,0.0,0.5131816898853254,0.48912800651045985,0,User41
|
43 |
+
0.47799756778360547,0.24981661729078708,0.2678288758738696,0.26825235189965146,0.0,0.0,0.0,0.3280906549908603,0.40585792102409246,0.0,0.48317772845238904,0.05299199641608743,0.0,0.0,0.0,0.527074557635187,0.35609412466469403,0.06493301001515983,0.006154824065378817,0.5500315433885551,0.1376487135088459,0.20317453338680336,0,User42
|
44 |
+
0.04170250497035799,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.528762642956547,0.39142564714678385,0.03425220683766672,0.22358243213875506,0.10533088189088158,0.09015625026163143,0.45751796974280445,0.0,0.009386069694038324,0.4474258387444219,0.3369173881746189,0.0,0.26167470965109674,0.14415893356433618,2,User43
|
45 |
+
0.0,0.0898380106150064,0.0,0.39475919854866803,0.43768796142658684,0.37985808245354713,0.0,0.0,0.4944596834168453,0.2995812392464712,0.257609403438708,0.0,0.4998745953039221,0.0,0.0,0.0983488199593141,0.2505326344136114,0.5741372369201578,0.4241234385335202,0.18937846397925073,0.5333923475522224,0.33726958066379753,1,User44
|
46 |
+
0.0,0.0,0.5029665860724496,0.18350381038915364,0.2945805980120699,0.3185122425608644,0.019964337804159737,0.0,0.2138594350957086,0.0,0.3038274656736927,0.007397168984884961,0.3217845566689741,0.0,0.0,0.0,0.21550928346875142,0.47812646101599054,0.0763585997968893,0.0512070273983406,0.0,0.0,1,User45
|
47 |
+
0.5002036437099016,0.08607528854438617,0.4246279016833244,0.3530564302253112,0.45595753210251977,0.3954978643295751,0.0,0.24316887099999496,0.0,0.0,0.0,0.21536460526908774,0.34764251939599444,0.0,0.22200828314984788,0.40614419438729,0.04810134384454434,0.0,0.0,0.3242036434676405,0.0,0.5000038509659863,0,User46
|
48 |
+
0.5255479762740471,0.4963807734055359,0.4164467751980724,0.0,0.5921966495852986,0.25885066461497974,0.4896439657735442,0.0,0.43503439533635546,0.5252597292034303,0.0,0.2968979476873067,0.0,0.03320085752440072,0.0,0.37709780759302225,0.0,0.5699006313428934,0.30749471630830283,0.0,0.0,0.0,1,User47
|
49 |
+
0.0,0.3975268167607051,0.0,0.0,0.37855097728938414,0.45327510007668326,0.0,0.12274271649584023,0.20882251982793276,0.5625897803672582,0.3720396586832424,0.1647703841192375,0.37101131322767567,0.0,0.4124309270753068,0.24937437316528865,0.4549227781281605,0.001272059696692751,0.5251255849733509,0.32921563904466034,0.4445436763814852,0.04911565850816335,1,User48
|
50 |
+
0.5127317683381156,0.0,0.026807233509432038,0.0,0.0948599275329044,0.0966677665626201,0.4567606705689595,0.0,0.3874776115191627,0.0,0.0,0.0,0.10312698542222942,0.0,0.10817871793330691,0.0,0.2546650987590501,0.0,0.498116410725561,0.0,0.4358244500426238,0.0,2,User49
|
51 |
+
0.3356173385676632,0.0,0.16778149920297958,0.0,0.19072964045513396,0.5840901516608247,0.42831583639004644,0.0,0.0,0.5965544963706041,0.14103973731560993,0.0,0.036816929846188895,0.0,0.0,0.0,0.0,0.20532881756080468,0.541573787204293,0.2546742437305377,0.0,0.0,2,User50
|
52 |
+
0.0,0.5778253350528813,0.266732307060466,0.5836459130594945,0.3572590324560858,0.3878958497895446,0.3909187403729024,0.0,0.1658569131473916,0.14909642695956649,0.4965377087947478,0.562421082672033,0.10776203279577257,0.0,0.0,0.1112569689283961,0.0,0.5838453705165135,0.5296768371483558,0.0,0.0,0.0,1,User51
|
53 |
+
0.0,0.2263425640573533,0.16152660150610076,0.0,0.0,0.08956898960608983,0.047697424676217404,0.10164369147686392,0.1853816733340744,0.0,0.0,0.0,0.16399680692737317,0.0,0.030177077840216726,0.4878528903244713,0.07739638765127033,0.26587457355081534,0.0,0.0,0.5526884032238772,0.257834124069074,0,User52
|
54 |
+
0.3398274858611642,0.0,0.0,0.23906210309080345,0.21907596520757233,0.0,0.06441914860291409,0.0,0.4021929209102616,0.0,0.30181337299849886,0.5005894282375151,0.0,0.12372713879580044,0.3140862238974419,0.26965953532134646,0.0,0.013945107764374742,0.0,0.0,0.5487297997788588,0.0,2,User53
|
55 |
+
0.0,0.015423634722909974,0.0,0.30064613970893594,0.22757009297261688,0.3081916494180289,0.26615334967636883,0.0,0.18118798435946049,0.5917654220665592,0.22243911554413442,0.0,0.025827026835784306,0.1188910614675962,0.0,0.0,0.15688840919231828,0.0,0.0,0.33905973511610576,0.0,0.0,2,User54
|
56 |
+
0.35544675636306977,0.4589892951999377,0.3479096286938076,0.0,0.0,0.0,0.4189085572979311,0.4223446041644009,0.41550954539404883,0.0,0.23788411180183144,0.21522008188894282,0.14118155394816745,0.0,0.0,0.0,0.5272667401838911,0.0,0.0,0.19969186190593924,0.0,0.17921348141475557,0,User55
|
57 |
+
0.44393632868789856,0.0,0.27479716654187114,0.0,0.0,0.29558617436521206,0.24230873077649095,0.0,0.10106824423879113,0.0,0.0,0.0,0.0,0.4026392606622625,0.0,0.2632780593058549,0.5563873128464407,0.0,0.0,0.49698497384786,0.3667004432980855,0.5575922208074935,0,User56
|
58 |
+
0.061395043103152025,0.13290746796788855,0.5402975024818659,0.2087986846466332,0.2741201808185538,0.0,0.05769366884481353,0.07687572472507664,0.18538747978350734,0.0,0.3295623785584181,0.5434476897873232,0.5364257450090325,0.3939837169244742,0.0,0.0,0.011252721156906453,0.2860270400339495,0.1314281866288144,0.0,0.27589904852536373,0.0,1,User57
|
59 |
+
0.24818359481908192,0.19208519004043534,0.0,0.39854382055731863,0.0,0.4415783129176325,0.2422222964116617,0.0,0.0,0.49827414132637615,0.0,0.4818073702131178,0.34296380144353245,0.22485057765685923,0.0,0.0,0.0,0.059562455044191887,0.5470864440795066,0.0,0.4628331773686344,0.4038534738395536,2,User58
|
60 |
+
0.0,0.34172309586695737,0.2714233287410607,0.4896086123795561,0.18404992343021853,0.0,0.03238038618236794,0.0,0.0,0.0,0.0,0.0,0.5462740801864041,0.2127696792928062,0.0,0.0,0.42030932078621686,0.0,0.0,0.2633944710055446,0.0,0.4314422722308392,0,User59
|
61 |
+
0.0,0.0,0.4479837203385626,0.0,0.0,0.29820656844401305,0.0,0.40775183991807173,0.15108479784596685,0.13089835648662895,0.0,0.20127746641589084,0.29471800261267167,0.0,0.0,0.04711180857663433,0.5440883572577483,0.0,0.1349661469652601,0.4283779594307654,0.25289604508576957,0.4566868483611841,0,User60
|
62 |
+
0.36840032069377215,0.0,0.0,0.2956102855722421,0.0,0.07162682702977485,0.03676695840821287,0.0,0.0,0.5160990769014628,0.07879484291862648,0.0,0.28117203916744904,0.5242664637665919,0.16328832662320691,0.0,0.2662433021978322,0.0,0.0,0.2274268104072722,0.4927694567948846,0.24491174674552296,2,User61
|
63 |
+
0.3399948507383638,0.33327350515213405,0.0,0.0,0.0,0.19579471772318402,0.457563146906271,0.0,0.0,0.2604711068193478,0.20507978775809532,0.0,0.4060058854509062,0.22202970578368564,0.1390736708745799,0.0,0.4058482820991721,0.0,0.0,0.0,0.2525485734999804,0.0,2,User62
|
64 |
+
0.0,0.0,0.0,0.0,0.06740426037297098,0.45724310434328663,0.030455074333124554,0.0,0.3023278736138214,0.0,0.0,0.23473381219185552,0.0,0.0,0.49203590720134915,0.0,0.5603382818026063,0.4917420087791924,0.0,0.40308745933680246,0.0,0.5255572766958255,0,User63
|
65 |
+
0.4446256724995562,0.07321396350477916,0.47913806186767227,0.5619198097000965,0.0,0.0,0.0,0.37899255458795067,0.420299816777882,0.056832770114735864,0.2007264510944733,0.05912314558657095,0.0,0.06716314618191077,0.36121084574196727,0.337401032139908,0.4430849841050297,0.5446097060948865,0.02045727911798867,0.4176117392848111,0.224346903779993,0.0,0,User64
|
66 |
+
0.49462492487530285,0.23108436059503168,0.0,0.08042495419849727,0.0,0.2066117965465235,0.0,0.41118440596673456,0.008171049603666436,0.27656367883006716,0.08743927739353419,0.0,0.0,0.17117872750958218,0.5590801628604489,0.0,0.47888516634149525,0.1661231139958127,0.0,0.0,0.38010665837550395,0.2948636030260059,2,User65
|
67 |
+
0.0,0.0,0.5398848677876542,0.0,0.0,0.4070255335908477,0.06379140029702712,0.3406351790424629,0.06492511976801407,0.5173194236378694,0.33757500106564686,0.0,0.3034708837712916,0.0,0.2531163333495421,0.0,0.0,0.0,0.0,0.0308778010732077,0.4690918778007295,0.4558035672187696,2,User66
|
68 |
+
0.0,0.2301075402067405,0.3182736818989599,0.0,0.5808996648449205,0.013914754439994015,0.39125788256860927,0.0,0.21842714760352144,0.5755779313570476,0.149296309464364,0.2646813667197846,0.0,0.008365141966276357,0.0,0.0,0.0,0.5730977377762115,0.27775481744306085,0.0,0.560613263795333,0.3265838753793746,1,User67
|
69 |
+
0.0,0.0469883628887231,0.4880885994281924,0.3220868675718501,0.2761335384506819,0.0,0.0,0.4638881116179252,0.20405274613640645,0.2960221297976411,0.2575250284855126,0.018391912221961237,0.03370145474701014,0.06715909991067737,0.0,0.1952089549944851,0.5063529489391538,0.4488930806525687,0.1393186583520275,0.1511080518805965,0.0,0.0,0,User68
|
70 |
+
0.0,0.009955439438976699,0.009841523277905884,0.2125516610300433,0.0,0.0,0.524160916119833,0.11731899111108168,0.0,0.4475453587587678,0.0,0.07071267552757754,0.0,0.5974707089189812,0.0,0.24347753160649832,0.04082869928663291,0.0,0.5914383776057325,0.036811081879989715,0.0,0.03368598783048482,2,User69
|
71 |
+
0.17849941272212788,0.49117768761546055,0.0,0.0,0.258765639187552,0.0,0.11674605836949037,0.11414966083509137,0.0,0.5359105894329798,0.12733965921181167,0.2858558701835706,0.3360255000405451,0.0,0.0,0.23060542836535902,0.0,0.0,0.025017165576544986,0.14639698196730921,0.0,0.14078611291082632,2,User70
|
72 |
+
0.0,0.006134503382806966,0.0673854311547527,0.0,0.5495414023845249,0.4619732657129183,0.24041671384315566,0.3628575323855061,0.3458368786793682,0.4112040506085949,0.0,0.0,0.0,0.2244967939583763,0.1883195710853368,0.0,0.3596296541868519,0.5756862585653345,0.5042954480240847,0.31676541602483355,0.18133025128826774,0.0,1,User71
|
73 |
+
0.0,0.0,0.24789621290985542,0.07773245220991332,0.18266675506376184,0.29901769398670497,0.41274148061798877,0.0,0.24913165872310994,0.599578573264547,0.0,0.0,0.4045200261298426,0.0,0.0,0.3445050418698813,0.5107692475354533,0.027858508950095895,0.3790788947915822,0.289512572269111,0.3551843199174357,0.45962504917987224,0,User72
|
74 |
+
0.10888856642390365,0.0118915764194375,0.056046107503201825,0.0,0.0,0.0,0.23828870138788105,0.4130785938305497,0.27218358303327606,0.0,0.0,0.46459675058956007,0.007842304014960555,0.0,0.19797578645144653,0.0,0.5800581502774074,0.2814053488903113,0.5526813100889574,0.09139763744495688,0.0003807332030271171,0.0,0,User73
|
75 |
+
0.0,0.4487084800707609,0.4541792973005052,0.592875220100524,0.07113652103451784,0.0,0.37684548078771596,0.0,0.0,0.5123430469514167,0.29224207588704143,0.0,0.0,0.5083637549917668,0.0,0.2738382864660672,0.0,0.44880286187598795,0.0,0.06465048989895605,0.04046381649087771,0.5559049166798641,2,User74
|
76 |
+
0.023017839968530462,0.25308408418800354,0.5624725957751379,0.0,0.12695010095921155,0.5469110386575667,0.5204572569462316,0.040992359018600655,0.0,0.5115469537906515,0.1605704133638941,0.30673115110895155,0.3838542116373149,0.0,0.3425253962862498,0.5564729645254937,0.1982899628094924,0.39641157605310395,0.0,0.0,0.0,0.5871652238305144,1,User75
|
77 |
+
0.0,0.18125621968503147,0.17974637894997658,0.0,0.38810090525754803,0.576096176436232,0.1463756560081667,0.052514742936570435,0.0,0.0,0.0,0.41198190301869,0.0,0.0,0.295990999433285,0.0,0.06750663470824969,0.5704398207554036,0.23249200197267694,0.0,0.0,0.0,1,User76
|
78 |
+
0.4297466780875857,0.2173340603571582,0.0465278336258893,0.351856893925071,0.0,0.3855602896161471,0.39471249135202335,0.3603877584547621,0.0,0.5800316144452276,0.0,0.11973206179800977,0.0,0.5848398891189314,0.05819321219222506,0.0,0.22849527079876875,0.422735782113817,0.26735493336892624,0.4578864483073002,0.0,0.0,2,User77
|
79 |
+
0.5011547103643953,0.3360547387670869,0.0,0.5742639601247378,0.0,0.0,0.4280234376126473,0.3952512004839872,0.0,0.42097429627892535,0.0,0.10385153742431785,0.0,0.5034546892821865,0.3735565486011415,0.37232528176414226,0.03533151560662362,0.3753988838390391,0.029112792481909455,0.18362567557172504,0.0,0.0,2,User78
|
80 |
+
0.4917675158359901,0.1202081378374098,0.5188684249724451,0.0,0.5290323708233476,0.41192961685993845,0.002851622843114354,0.08436795839691791,0.4517775658212452,0.0,0.13983824491471197,0.5176615200295782,0.0,0.4063128701584867,0.0,0.31176453528910275,0.0,0.0,0.3915299887429259,0.5151941875182496,0.5810601699711584,0.250653456496016,1,User79
|
81 |
+
0.25799955817665354,0.58382078535009,0.09385805834109384,0.0,0.27244234191336847,0.0,0.0,0.1762895964994834,0.5943497606122365,0.033544525027673355,0.37404294544277605,0.2324623282168795,0.5437566754167334,0.3923558565114471,0.0,0.36548793998827755,0.0,0.09519330036858054,0.21416125463119895,0.45553485220909384,0.0,0.21135592836794848,1,User80
|
82 |
+
0.21834970061789283,0.0,0.1039067203251991,0.5143769708800734,0.0,0.0,0.4192627007612647,0.012171102941430978,0.12646533400615878,0.3172166359577405,0.21224079915349636,0.42612559579329334,0.3668534744821904,0.0,0.0,0.0,0.0,0.0,0.0,0.22268057363604776,0.31499038697541326,0.0,2,User81
|
83 |
+
0.0,0.0,0.0,0.5067738531341908,0.0680676329512,0.0,0.39327079224942507,0.35298312514910335,0.00595046185348147,0.5394934896728648,0.1257029861530785,0.3026350198888408,0.0,0.0,0.12282262705806335,0.0,0.0,0.0,0.4928488034230585,0.0,0.22305372249243505,0.4864469694667819,2,User82
|
84 |
+
0.31467491663635727,0.5440558311371989,0.0,0.2232456854868884,0.1920250893411395,0.015264571389708936,0.0,0.004336572278151762,0.5892508100167211,0.3662062218731099,0.0,0.45589433346428465,0.0,0.0,0.5968790020137617,0.3901213300285492,0.0,0.0,0.16018242948939454,0.0,0.0,0.459591247064549,2,User83
|
85 |
+
0.3946287909997853,0.0,0.042692841955348615,0.5407240814437739,0.5876904439349586,0.078280040010553,0.24066159613530813,0.0,0.21476628815489518,0.027859179759894936,0.5935117593550856,0.0,0.0,0.0,0.5319703889143749,0.0,0.0,0.192934494459175,0.5972703020672648,0.28579317712472796,0.40168565055228944,0.297505840938576,1,User84
|
86 |
+
0.0,0.48466780573357127,0.0,0.0,0.0,0.38337727260071974,0.3412891624402695,0.0,0.3095988283156277,0.0,0.0,0.0,0.229406822801292,0.0,0.2569763701866341,0.578581810070181,0.0,0.4222550466852544,0.0,0.36256420759659325,0.4095226510144956,0.37995119038156155,0,User85
|
87 |
+
0.3053802674914381,0.3366645447347838,0.0,0.08994393046046523,0.0,0.5781595172100183,0.0,0.03539875956916638,0.04035967575894317,0.35449168771386363,0.590552410693864,0.21655224927242678,0.0,0.04435518799250948,0.5958845574225521,0.5950269724433653,0.0,0.0,0.10659059985023489,0.0,0.0,0.5743779031938155,2,User86
|
88 |
+
0.09070274642138298,0.0,0.5395166251777317,0.5387578115458003,0.02843860417344901,0.12087725710439923,0.0,0.445955108506665,0.43439458591842517,0.0,0.5213438199591682,0.0,0.18288766355382569,0.0,0.24012643469531914,0.3352412329459412,0.22897251079224368,0.0,0.0,0.04138236110531823,0.0,0.24470158644602513,0,User87
|
89 |
+
0.5213901202017697,0.22809530300016245,0.0,0.5856114541774999,0.0,0.34644667493751113,0.0,0.5875572956425077,0.15824453268292948,0.0,0.1291935278153159,0.0,0.0,0.0,0.0,0.35720448058217746,0.1382299673807641,0.30992594463097334,0.024378093792666977,0.0,0.0,0.361660328611775,0,User88
|
90 |
+
0.0,0.07110209147508184,0.3606701145602538,0.0,0.0,0.114760889720249,0.0,0.2766636082939645,0.0,0.5972040431389973,0.0,0.48783701717789363,0.4871694226079891,0.33574307268418624,0.2850770412019875,0.0,0.3208324931354124,0.0,0.5219557598794219,0.0,0.0,0.3717468998277025,2,User89
|
91 |
+
0.37928199969498777,0.20671683116526063,0.008752188006543982,0.475520756803293,0.0,0.0,0.3589893482796471,0.0,0.0,0.20630741919420836,0.24316553870635615,0.0,0.5516567234363184,0.011366048310557098,0.04325766970446776,0.0,0.0,0.3155753969692524,0.4138635724270391,0.43089393616839955,0.0,0.0,2,User90
|
92 |
+
0.0,0.32370729505342133,0.0,0.0,0.06740125417266574,0.061863623874142126,0.0,0.5432886980179835,0.588867524534103,0.0,0.3631229778251437,0.18295222960673796,0.0,0.0,0.026535062433246326,0.4424783084233229,0.3122604376782452,0.26866617103811696,0.09863596123659135,0.03876630062030206,0.18991758795340508,0.04054296991408479,0,User91
|
93 |
+
0.0,0.0,0.0,0.0,0.004530996534159448,0.0,0.0,0.0,0.0,0.0,0.06975932041243094,0.48933774255434426,0.0,0.0,0.1700159714238928,0.0,0.1997509466837729,0.4633199652948784,0.10533931793930829,0.563268990120901,0.0,0.44794654605195594,0,User92
|
94 |
+
0.0,0.0,0.0,0.26119440125024784,0.0,0.5838867594781952,0.5351596638697823,0.3817856921875511,0.0,0.5851521022958127,0.2777220425454845,0.5180500952448895,0.0,0.30314821814057413,0.0,0.2157762100982088,0.33162402071574504,0.0,0.0,0.31341263513239803,0.0,0.3507317573307568,2,User93
|
95 |
+
0.0,0.0,0.0,0.3667576377962596,0.14439799020509148,0.5303588952362661,0.0,0.32023636573604064,0.0,0.5238704768287725,0.0,0.0,0.5887555295418991,0.2206398174082902,0.0,0.0,0.0,0.0,0.21286846834428252,0.3484291744193687,0.46402255577212004,0.20944270401056186,2,User94
|
96 |
+
0.1815999322432167,0.23264122697953582,0.3135549525124798,0.4145091324302024,0.5047327503086099,0.5133931002484401,0.5389039306068107,0.0,0.3978609474020407,0.415741263448942,0.10119460046117612,0.28570260499487454,0.1529338186046475,0.0,0.18594060525365053,0.2618971608215459,0.0,0.4406838804053035,0.0,0.48236625973260927,0.4758230662279006,0.4129205149578936,1,User95
|
97 |
+
0.0,0.11148382263133472,0.0,0.2690143341647816,0.08622764506833469,0.0,0.20618421085431193,0.110045742595272,0.22650893765563784,0.4275499796431066,0.0704241795571392,0.0,0.10703113927356045,0.0,0.3704217489343459,0.2862012199161693,0.0929169662353907,0.042774358704068094,0.5224888702577891,0.32733590904070275,0.5216018843782126,0.0,2,User96
|
98 |
+
0.2781192382053649,0.0,0.3105627522800273,0.10347020406642526,0.0,0.32468750317140715,0.5969211234759723,0.3064890587736787,0.0,0.4124919268294994,0.5650925357762769,0.1928993567732169,0.0,0.14133890447133945,0.5999604281208468,0.0,0.2661366494113985,0.0,0.0,0.0,0.3719458529116676,0.11327709013869969,2,User97
|
99 |
+
0.0,0.0,0.0,0.4868115392266763,0.19350443413554663,0.0,0.30875718570362065,0.25895291904176143,0.07769143085665386,0.27201237777966647,0.3345559871399748,0.0,0.0,0.571223257645141,0.5589143940674188,0.0,0.0,0.2865225582935046,0.37913139648689953,0.0,0.21826225647713315,0.39946799903430374,2,User98
|
100 |
+
0.2640750535205947,0.39091384350430003,0.0,0.3876322048483122,0.0,0.22532418914884744,0.0,0.0,0.11397547690653331,0.5875481018524651,0.14638282044057638,0.5471512225812482,0.18968273913058042,0.0,0.44817336112082595,0.0,0.17128941888593485,0.050893816235659695,0.0,0.0,0.1657747651118574,0.03336941620114853,2,User99
|
101 |
+
0.0,0.47306271037228764,0.20512165032318352,0.3166759445435239,0.0,0.4498884624299011,0.16064722874572335,0.4076093071251937,0.4905666087723205,0.0,0.5471852797399916,0.5874244922793807,0.4689130841082261,0.0,0.0,0.0,0.0,0.2370799857031285,0.18257768549127562,0.0,0.0,0.5112662463175096,1,User100
|