Spaces:
Sleeping
Sleeping
yolo
Browse files- .DS_Store +0 -0
- app/__pycache__/core.cpython-310.pyc +0 -0
- app/app.py +26 -6
- app/core.py +11 -97
- app/dashboard.ipynb +30 -18
- app/data/wine_similarity.csv +23 -0
.DS_Store
CHANGED
Binary files a/.DS_Store and b/.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
@@ -6,9 +6,9 @@ from dash import Dash, html, dcc, Input, Output, callback
|
|
6 |
import plotly.express as px
|
7 |
import numpy as np
|
8 |
from plotly.subplots import make_subplots
|
|
|
9 |
|
10 |
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv')
|
11 |
-
|
12 |
debug = False
|
13 |
|
14 |
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
|
@@ -23,13 +23,28 @@ app.layout = html.Div([
|
|
23 |
server = app.server
|
24 |
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
dashboard_layout = html.Div([
|
27 |
dcc.Link('About this project', href='/wiki'),
|
28 |
|
29 |
-
|
30 |
-
|
31 |
-
dcc.Graph(id='graph-content')
|
32 |
|
|
|
|
|
|
|
|
|
|
|
33 |
])
|
34 |
|
35 |
|
@@ -85,11 +100,16 @@ def display_page(pathname):
|
|
85 |
|
86 |
@app.callback(
|
87 |
Output('graph-content', 'figure'),
|
|
|
88 |
Input('dropdown-selection', 'value')
|
89 |
)
|
90 |
def update_graph(value):
|
91 |
-
|
92 |
-
|
|
|
|
|
|
|
|
|
93 |
|
94 |
|
95 |
if __name__ == "__main__":
|
|
|
6 |
import plotly.express as px
|
7 |
import numpy as np
|
8 |
from plotly.subplots import make_subplots
|
9 |
+
import core
|
10 |
|
11 |
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv')
|
|
|
12 |
debug = False
|
13 |
|
14 |
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
|
|
|
23 |
server = app.server
|
24 |
|
25 |
|
26 |
+
wine_similarity_df = pd.read_csv('data/wine_similarity.csv')
|
27 |
+
wine_list = wine_similarity_df['NAME'].unique()
|
28 |
+
|
29 |
+
|
30 |
+
|
31 |
+
|
32 |
+
|
33 |
+
|
34 |
+
|
35 |
+
## Layout ##
|
36 |
+
|
37 |
dashboard_layout = html.Div([
|
38 |
dcc.Link('About this project', href='/wiki'),
|
39 |
|
40 |
+
dcc.Graph(id='graph-content'),
|
41 |
+
|
|
|
42 |
|
43 |
+
|
44 |
+
|
45 |
+
html.H1(children='Wine Recommender', style={'textAlign':'center'}),
|
46 |
+
dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),
|
47 |
+
html.Div(id='wine-recommendation', children=''),
|
48 |
])
|
49 |
|
50 |
|
|
|
100 |
|
101 |
@app.callback(
|
102 |
Output('graph-content', 'figure'),
|
103 |
+
Output('wine-recommendation', 'children'),
|
104 |
Input('dropdown-selection', 'value')
|
105 |
)
|
106 |
def update_graph(value):
|
107 |
+
recommended_wines = None
|
108 |
+
if value:
|
109 |
+
recommended_wines = core.get_top_5_similar_wines(value, wine_similarity_df)[1:]
|
110 |
+
recommended_wines = "; ".join(recommended_wines)
|
111 |
+
|
112 |
+
return px.line(df, x='year', y='pop'), recommended_wines
|
113 |
|
114 |
|
115 |
if __name__ == "__main__":
|
app/core.py
CHANGED
@@ -1,99 +1,13 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
def spent_energy(
|
8 |
-
temperatura_inicial_caldeira_t, # existente na cadeira, t sendo a hora
|
9 |
-
temperatura_objetivo_caldeira_t_plus_1,
|
10 |
-
outside_temp,
|
11 |
-
pressao_caldeira,
|
12 |
-
litros_gastos_no_banho=0,
|
13 |
-
temperatura_entrada_agua_na_caldeira=15, # Temperatura ambiente da iNOVA
|
14 |
-
capacidade_caldeira=20, # 20 litros
|
15 |
-
):
|
16 |
-
# E = (4.2 kJ/kgoC) ((90 oC) - (20 oC)) (1000 liter) (1 kg/liter)
|
17 |
-
# cp = specific heat of water (kJ/kgoC, Btu/lb oF) (4.2 kJ/kgoC, 1 Btu/lbmoF for water)
|
18 |
-
heat_capacity = 4.2
|
19 |
-
# Energy = heat_capacity * (temperatura_saida_agua_na_caldeira - outside_temp) * capacidade_caldeira * 1\
|
20 |
-
delta_t = temperatura_objetivo_caldeira_t_plus_1 - temperatura_inicial_caldeira_t
|
21 |
-
|
22 |
-
energy = (
|
23 |
-
heat_capacity
|
24 |
-
* (delta_t - outside_temp)
|
25 |
-
* (capacidade_caldeira - litros_gastos_no_banho)
|
26 |
-
* 1
|
27 |
-
) # isto vai ser minimo
|
28 |
-
|
29 |
-
delta_t = (
|
30 |
-
temperatura_objetivo_caldeira_t_plus_1 - temperatura_entrada_agua_na_caldeira
|
31 |
)
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
# 20 Litros totais
|
37 |
-
# Joao gatou 5 litros
|
38 |
-
# Gastar energia em:
|
39 |
-
# 15 litros para manter a temperatura da caldeira -> minimo
|
40 |
-
# 5 litros para aquecer a agua que entra
|
41 |
-
|
42 |
-
total_energy = energy + energy_incoming_water
|
43 |
-
|
44 |
-
# TODO: Correlação entre pressão e temperatura
|
45 |
-
# https://www.engineeringtoolbox.com/boiling-points-water-altitude-d_1344.html
|
46 |
-
# https://www.engineeringtoolbox.com/boiling-point-water-d_926.html
|
47 |
-
"""
|
48 |
-
That depends on whether the pressure is held constant during the heating. If there is a relief valve which maintains
|
49 |
-
constant pressure as the water heats, then no, the 2 samples will heat at the same rate. However, if the pressurised sample
|
50 |
-
has no pressure relief, then it will heat faster because the pressure will increase, and that increase in pressure will increase
|
51 |
-
the heat in addition to the heat applied.
|
52 |
-
"""
|
53 |
-
# kJ
|
54 |
-
|
55 |
-
# TODO: FIND WHAT SHOULD BE THE RELATION BETWEEN TEMPERATURE OF OUTGOING WATER AND BOILER TEMPERATURE
|
56 |
-
temperatura_saida_agua_na_caldeira = temperatura_objetivo_caldeira_t_plus_1 * 0.87
|
57 |
-
|
58 |
-
return total_energy, temperatura_saida_agua_na_caldeira
|
59 |
-
|
60 |
-
|
61 |
-
def calculate_weights_for_all_hours(
|
62 |
-
temperatura_inicial_caldeira,
|
63 |
-
temperatura_objetivo_caldeira,
|
64 |
-
outside_temp,
|
65 |
-
pressao_caldeira,
|
66 |
-
litros_gastos_no_banho,
|
67 |
-
temperatura_entrada_agua_na_caldeira,
|
68 |
-
capacidade_caldeira,
|
69 |
-
):
|
70 |
-
weights = []
|
71 |
-
temperatures = []
|
72 |
-
for i in range(len(temperatura_inicial_caldeira)):
|
73 |
-
energy, temperature_water = spent_energy(
|
74 |
-
temperatura_inicial_caldeira_t=temperatura_inicial_caldeira[i],
|
75 |
-
temperatura_objetivo_caldeira_t_plus_1=temperatura_objetivo_caldeira,
|
76 |
-
outside_temp=outside_temp[i],
|
77 |
-
pressao_caldeira=pressao_caldeira[i],
|
78 |
-
litros_gastos_no_banho=litros_gastos_no_banho,
|
79 |
-
temperatura_entrada_agua_na_caldeira=temperatura_entrada_agua_na_caldeira[
|
80 |
-
i
|
81 |
-
],
|
82 |
-
capacidade_caldeira=capacidade_caldeira,
|
83 |
-
)
|
84 |
-
weights.append(energy)
|
85 |
-
temperatures.append(temperature_water)
|
86 |
-
return weights, temperatures
|
87 |
-
# Output energy wasted
|
88 |
-
|
89 |
-
|
90 |
-
def calculate_confort(temperatura_given, temperatura_ideal):
|
91 |
-
return abs(temperatura_given - temperatura_ideal)
|
92 |
-
|
93 |
-
|
94 |
-
# create exception for no solution found
|
95 |
-
class NoSolutionFound(Exception):
|
96 |
-
pass
|
97 |
|
98 |
-
|
99 |
-
pass
|
|
|
1 |
+
import pandas as pd
|
2 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
3 |
+
def get_top_5_similar_wines(wine_name: str, df: pd.DataFrame) -> pd.DataFrame:
|
4 |
+
wine_row = df[df["NAME"] == wine_name].drop(columns=["NAME", "cluster"])
|
5 |
+
cosine_similarities = cosine_similarity(
|
6 |
+
wine_row, df.drop(columns=["NAME", "cluster"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
)
|
8 |
+
top_5_indices = cosine_similarities[0].argsort()[-6:-1]
|
9 |
+
res = df.iloc[top_5_indices][["NAME"]]
|
10 |
+
# Convert to list
|
11 |
+
res = res["NAME"].values.tolist()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
+
return res
|
|
app/dashboard.ipynb
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
-
"execution_count":
|
6 |
"metadata": {},
|
7 |
"outputs": [
|
8 |
{
|
@@ -20,7 +20,7 @@
|
|
20 |
" "
|
21 |
],
|
22 |
"text/plain": [
|
23 |
-
"<IPython.lib.display.IFrame at
|
24 |
]
|
25 |
},
|
26 |
"metadata": {},
|
@@ -36,9 +36,9 @@
|
|
36 |
"import plotly.express as px\n",
|
37 |
"import numpy as np\n",
|
38 |
"from plotly.subplots import make_subplots\n",
|
|
|
39 |
"\n",
|
40 |
"df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv')\n",
|
41 |
-
"\n",
|
42 |
"debug = False\n",
|
43 |
"\n",
|
44 |
"external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']\n",
|
@@ -53,13 +53,28 @@
|
|
53 |
"server = app.server\n",
|
54 |
"\n",
|
55 |
"\n",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
"dashboard_layout = html.Div([\n",
|
57 |
" dcc.Link('About this project', href='/wiki'),\n",
|
58 |
"\n",
|
59 |
-
"
|
60 |
-
"
|
61 |
-
" dcc.Graph(id='graph-content')\n",
|
62 |
"\n",
|
|
|
|
|
|
|
|
|
|
|
63 |
"])\n",
|
64 |
"\n",
|
65 |
"\n",
|
@@ -74,8 +89,7 @@
|
|
74 |
"\n",
|
75 |
" html.H3('What is this project about?'),\n",
|
76 |
"\n",
|
77 |
-
" html.P('
|
78 |
-
" html.P('The best policy is the one that maximizes the comfort of the shower and minimizes the energy consumption of the boiler.'),\n",
|
79 |
"\n",
|
80 |
" html.H3('How does it work?'),\n",
|
81 |
"\n",
|
@@ -83,7 +97,7 @@
|
|
83 |
"\n",
|
84 |
" html.H3('\\'Bout us'),\n",
|
85 |
" html.Img(src='/assets/tourdevino_logo.webp', style={'width': '40%', 'height': 'auto', 'display': 'block', 'margin-left': 'auto', 'margin-right': 'auto'}),\n",
|
86 |
-
" html.P('This project was developed by a team of
|
87 |
" html.P('The team members are:'),\n",
|
88 |
" html.H4('Rui Melo'),\n",
|
89 |
" html.H4('André Catarino'),\n",
|
@@ -116,24 +130,22 @@
|
|
116 |
"\n",
|
117 |
"@app.callback(\n",
|
118 |
" Output('graph-content', 'figure'),\n",
|
|
|
119 |
" Input('dropdown-selection', 'value')\n",
|
120 |
")\n",
|
121 |
"def update_graph(value):\n",
|
122 |
-
"
|
123 |
-
"
|
|
|
|
|
|
|
|
|
124 |
"\n",
|
125 |
"\n",
|
126 |
"if __name__ == \"__main__\":\n",
|
127 |
" app.run_server(host=\"0.0.0.0\", port=\"8050\", debug=debug)"
|
128 |
]
|
129 |
},
|
130 |
-
{
|
131 |
-
"cell_type": "code",
|
132 |
-
"execution_count": null,
|
133 |
-
"metadata": {},
|
134 |
-
"outputs": [],
|
135 |
-
"source": []
|
136 |
-
},
|
137 |
{
|
138 |
"cell_type": "code",
|
139 |
"execution_count": null,
|
|
|
2 |
"cells": [
|
3 |
{
|
4 |
"cell_type": "code",
|
5 |
+
"execution_count": 7,
|
6 |
"metadata": {},
|
7 |
"outputs": [
|
8 |
{
|
|
|
20 |
" "
|
21 |
],
|
22 |
"text/plain": [
|
23 |
+
"<IPython.lib.display.IFrame at 0x2b21db970>"
|
24 |
]
|
25 |
},
|
26 |
"metadata": {},
|
|
|
36 |
"import plotly.express as px\n",
|
37 |
"import numpy as np\n",
|
38 |
"from plotly.subplots import make_subplots\n",
|
39 |
+
"import core\n",
|
40 |
"\n",
|
41 |
"df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv')\n",
|
|
|
42 |
"debug = False\n",
|
43 |
"\n",
|
44 |
"external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']\n",
|
|
|
53 |
"server = app.server\n",
|
54 |
"\n",
|
55 |
"\n",
|
56 |
+
"wine_similarity_df = pd.read_csv('data/wine_similarity.csv')\n",
|
57 |
+
"wine_list = wine_similarity_df['NAME'].unique()\n",
|
58 |
+
"\n",
|
59 |
+
"\n",
|
60 |
+
"\n",
|
61 |
+
"\n",
|
62 |
+
"\n",
|
63 |
+
"\n",
|
64 |
+
"\n",
|
65 |
+
"## Layout ##\n",
|
66 |
+
"\n",
|
67 |
"dashboard_layout = html.Div([\n",
|
68 |
" dcc.Link('About this project', href='/wiki'),\n",
|
69 |
"\n",
|
70 |
+
" dcc.Graph(id='graph-content'),\n",
|
71 |
+
"\n",
|
|
|
72 |
"\n",
|
73 |
+
"\n",
|
74 |
+
"\n",
|
75 |
+
" html.H1(children='Wine Recommender', style={'textAlign':'center'}),\n",
|
76 |
+
" dcc.Dropdown(wine_list, wine_list[0], id='dropdown-selection'),\n",
|
77 |
+
" html.Div(id='wine-recommendation', children=''),\n",
|
78 |
"])\n",
|
79 |
"\n",
|
80 |
"\n",
|
|
|
89 |
"\n",
|
90 |
" html.H3('What is this project about?'),\n",
|
91 |
"\n",
|
92 |
+
" html.P('something'),\n",
|
|
|
93 |
"\n",
|
94 |
" html.H3('How does it work?'),\n",
|
95 |
"\n",
|
|
|
97 |
"\n",
|
98 |
" html.H3('\\'Bout us'),\n",
|
99 |
" html.Img(src='/assets/tourdevino_logo.webp', style={'width': '40%', 'height': 'auto', 'display': 'block', 'margin-left': 'auto', 'margin-right': 'auto'}),\n",
|
100 |
+
" html.P('This project was developed by a team of 4, in the context of the SOGRAPE 2024 hackathon.'),\n",
|
101 |
" html.P('The team members are:'),\n",
|
102 |
" html.H4('Rui Melo'),\n",
|
103 |
" html.H4('André Catarino'),\n",
|
|
|
130 |
"\n",
|
131 |
"@app.callback(\n",
|
132 |
" Output('graph-content', 'figure'),\n",
|
133 |
+
" Output('wine-recommendation', 'children'),\n",
|
134 |
" Input('dropdown-selection', 'value')\n",
|
135 |
")\n",
|
136 |
"def update_graph(value):\n",
|
137 |
+
" recommended_wines = None\n",
|
138 |
+
" if value:\n",
|
139 |
+
" recommended_wines = core.get_top_5_similar_wines(value, wine_similarity_df)[1:]\n",
|
140 |
+
" recommended_wines = \"; \".join(recommended_wines)\n",
|
141 |
+
"\n",
|
142 |
+
" return px.line(df, x='year', y='pop'), recommended_wines\n",
|
143 |
"\n",
|
144 |
"\n",
|
145 |
"if __name__ == \"__main__\":\n",
|
146 |
" app.run_server(host=\"0.0.0.0\", port=\"8050\", debug=debug)"
|
147 |
]
|
148 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
{
|
150 |
"cell_type": "code",
|
151 |
"execution_count": null,
|
app/data/wine_similarity.csv
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
NAME,Loureiro,Alvarinho,Pedernã,Trajadura,Verdejo,Merlot, Cabernet Sauvignon, Malbec,Grenache,,Touriga Nacional,Sercialinho,"Touriga Nacional, Touriga Franca, Tinta Roriz","Tempranillo, Touriga Nacional",Malbec,Alicante Bouschet,Tempranillo, Baga, Alicante Bouschet,Cabernet Sauvignon,Sauvignon Blanc,Baga, Rufete, Touriga Franca, Tinta Barroca, Arinto de Bucelas,Albariño,Sea Food, Vegetarian, Snacks,Sea food, Fish,Beef, Lamb, Pork, Birds, Mushrooms, Blue Cheese, Pasta, Carne de Caça,Desserts, Maturated Cheese, Blue cheese, Peixes Magros, Calf, Goat Cheese,Marisco, Carne Curada,Pork, Sea Food,Quinta de Azevedo,Rueda,Vinhas de Mendoza,Douro,Dão,Alentejo,Barrancas; Tupungato;,Cachapoal Andes,Marlborough,La Rioja,Bucelas,Rías Baixas,Diogo Sepúlveda,Olga Torno,Rogelio Rabino,Luís Sottomayor,Beatriz Cabral Almeida,António Braga; Diogo Sepúlveda; Luís Cabral Almeida; Luís Sottomayor,Luís Cabral Almeida,María Barúa,Diego Vergara,Andrew Brown,Luisa Freire,Verde,Branco,Tinto,Porto Wine,Rosé,cluster
|
2 |
+
Azevedo,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,3
|
3 |
+
Gazela,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,7
|
4 |
+
Aura,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4
|
5 |
+
Dedicado,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,6
|
6 |
+
Legado,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,3
|
7 |
+
Offley,0,0,0,0,0,0,0,0,0,1,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,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0
|
8 |
+
Quinta dos Carvalhais,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,3
|
9 |
+
Série Ímpar,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,1,0,0,0,4
|
10 |
+
Antónia Adelaide Ferreira,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,2
|
11 |
+
Casa Ferreirinha,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,2
|
12 |
+
Finca Flichman,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,1,0,0,1
|
13 |
+
Herdade do peso,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,8
|
14 |
+
Marqués de Burgos,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0
|
15 |
+
Porto Ferreira,0,0,0,0,0,0,0,0,0,1,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,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0
|
16 |
+
Sandeman,0,0,0,0,0,0,0,0,0,1,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,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0
|
17 |
+
Silk & Spice,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,8
|
18 |
+
Chateau Los Boldos,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,6
|
19 |
+
Framingham,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1
|
20 |
+
LAN,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1
|
21 |
+
Mateus,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5
|
22 |
+
Quinta da Romeira,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,2
|
23 |
+
Santiago Ruiz,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,9
|