cboettig gordon-posit commited on
Commit
ead2450
0 Parent(s):

Duplicate from posit/shiny-for-python-template

Browse files

Co-authored-by: Gordon Shotwell <[email protected]>

Files changed (10) hide show
  1. .gitattributes +34 -0
  2. .gitignore +4 -0
  3. .vscode/settings.json +6 -0
  4. Dockerfile +13 -0
  5. README.md +20 -0
  6. app.py +162 -0
  7. requirements.txt +6 -0
  8. shared.py +6 -0
  9. styles.css +12 -0
  10. tips.csv +245 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+
2
+ .venv/
3
+ __pycache__
4
+ .DS_Store
.vscode/settings.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "[python]": {
3
+ "editor.defaultFormatter": "ms-python.black-formatter"
4
+ },
5
+ "python.formatting.provider": "none"
6
+ }
Dockerfile ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.12
2
+
3
+ WORKDIR /code
4
+
5
+ COPY ./requirements.txt /code/requirements.txt
6
+
7
+ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
8
+
9
+ COPY . .
10
+
11
+ EXPOSE 7860
12
+
13
+ CMD ["shiny", "run", "app.py", "--host", "0.0.0.0", "--port", "7860"]
README.md ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Shiny for Python template
3
+ emoji: 🌍
4
+ colorFrom: yellow
5
+ colorTo: indigo
6
+ sdk: docker
7
+ pinned: false
8
+ license: mit
9
+ ---
10
+
11
+ This is a templated Space for [Shiny for Python](https://shiny.rstudio.com/py/).
12
+
13
+
14
+ To get started with a new app do the following:
15
+
16
+ 1) Install Shiny with `pip install shiny`
17
+ 2) Create a new app with `shiny create`
18
+ 3) Then run the app with `shiny run --reload`
19
+
20
+ To learn more about this framework please see the [Documentation](https://shiny.rstudio.com/py/docs/overview.html).
app.py ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import faicons as fa
2
+ import plotly.express as px
3
+
4
+ # Load data and compute static values
5
+ from shared import app_dir, tips
6
+ from shinywidgets import render_plotly
7
+
8
+ from shiny import reactive, render
9
+ from shiny.express import input, ui
10
+
11
+ bill_rng = (min(tips.total_bill), max(tips.total_bill))
12
+
13
+ # Add page title and sidebar
14
+ ui.page_opts(title="Restaurant tipping", fillable=True)
15
+
16
+ with ui.sidebar(open="desktop"):
17
+ ui.input_slider(
18
+ "total_bill",
19
+ "Bill amount",
20
+ min=bill_rng[0],
21
+ max=bill_rng[1],
22
+ value=bill_rng,
23
+ pre="$",
24
+ )
25
+ ui.input_checkbox_group(
26
+ "time",
27
+ "Food service",
28
+ ["Lunch", "Dinner"],
29
+ selected=["Lunch", "Dinner"],
30
+ inline=True,
31
+ )
32
+ ui.input_action_button("reset", "Reset filter")
33
+
34
+ # Add main content
35
+ ICONS = {
36
+ "user": fa.icon_svg("user", "regular"),
37
+ "wallet": fa.icon_svg("wallet"),
38
+ "currency-dollar": fa.icon_svg("dollar-sign"),
39
+ "ellipsis": fa.icon_svg("ellipsis"),
40
+ }
41
+
42
+ with ui.layout_columns(fill=False):
43
+ with ui.value_box(showcase=ICONS["user"]):
44
+ "Total tippers"
45
+
46
+ @render.express
47
+ def total_tippers():
48
+ tips_data().shape[0]
49
+
50
+ with ui.value_box(showcase=ICONS["wallet"]):
51
+ "Average tip"
52
+
53
+ @render.express
54
+ def average_tip():
55
+ d = tips_data()
56
+ if d.shape[0] > 0:
57
+ perc = d.tip / d.total_bill
58
+ f"{perc.mean():.1%}"
59
+
60
+ with ui.value_box(showcase=ICONS["currency-dollar"]):
61
+ "Average bill"
62
+
63
+ @render.express
64
+ def average_bill():
65
+ d = tips_data()
66
+ if d.shape[0] > 0:
67
+ bill = d.total_bill.mean()
68
+ f"${bill:.2f}"
69
+
70
+
71
+ with ui.layout_columns(col_widths=[6, 6, 12]):
72
+ with ui.card(full_screen=True):
73
+ ui.card_header("Tips data")
74
+
75
+ @render.data_frame
76
+ def table():
77
+ return render.DataGrid(tips_data())
78
+
79
+ with ui.card(full_screen=True):
80
+ with ui.card_header(class_="d-flex justify-content-between align-items-center"):
81
+ "Total bill vs tip"
82
+ with ui.popover(title="Add a color variable", placement="top"):
83
+ ICONS["ellipsis"]
84
+ ui.input_radio_buttons(
85
+ "scatter_color",
86
+ None,
87
+ ["none", "sex", "smoker", "day", "time"],
88
+ inline=True,
89
+ )
90
+
91
+ @render_plotly
92
+ def scatterplot():
93
+ color = input.scatter_color()
94
+ return px.scatter(
95
+ tips_data(),
96
+ x="total_bill",
97
+ y="tip",
98
+ color=None if color == "none" else color,
99
+ trendline="lowess",
100
+ )
101
+
102
+ with ui.card(full_screen=True):
103
+ with ui.card_header(class_="d-flex justify-content-between align-items-center"):
104
+ "Tip percentages"
105
+ with ui.popover(title="Add a color variable"):
106
+ ICONS["ellipsis"]
107
+ ui.input_radio_buttons(
108
+ "tip_perc_y",
109
+ "Split by:",
110
+ ["sex", "smoker", "day", "time"],
111
+ selected="day",
112
+ inline=True,
113
+ )
114
+
115
+ @render_plotly
116
+ def tip_perc():
117
+ from ridgeplot import ridgeplot
118
+
119
+ dat = tips_data()
120
+ dat["percent"] = dat.tip / dat.total_bill
121
+ yvar = input.tip_perc_y()
122
+ uvals = dat[yvar].unique()
123
+
124
+ samples = [[dat.percent[dat[yvar] == val]] for val in uvals]
125
+
126
+ plt = ridgeplot(
127
+ samples=samples,
128
+ labels=uvals,
129
+ bandwidth=0.01,
130
+ colorscale="viridis",
131
+ colormode="row-index",
132
+ )
133
+
134
+ plt.update_layout(
135
+ legend=dict(
136
+ orientation="h", yanchor="bottom", y=1.02, xanchor="center", x=0.5
137
+ )
138
+ )
139
+
140
+ return plt
141
+
142
+
143
+ ui.include_css(app_dir / "styles.css")
144
+
145
+ # --------------------------------------------------------
146
+ # Reactive calculations and effects
147
+ # --------------------------------------------------------
148
+
149
+
150
+ @reactive.calc
151
+ def tips_data():
152
+ bill = input.total_bill()
153
+ idx1 = tips.total_bill.between(bill[0], bill[1])
154
+ idx2 = tips.time.isin(input.time())
155
+ return tips[idx1 & idx2]
156
+
157
+
158
+ @reactive.effect
159
+ @reactive.event(input.reset)
160
+ def _():
161
+ ui.update_slider("total_bill", value=bill_rng)
162
+ ui.update_checkbox_group("time", selected=["Lunch", "Dinner"])
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ faicons
2
+ shiny
3
+ shinywidgets
4
+ plotly
5
+ pandas
6
+ ridgeplot
shared.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ from pathlib import Path
2
+
3
+ import pandas as pd
4
+
5
+ app_dir = Path(__file__).parent
6
+ tips = pd.read_csv(app_dir / "tips.csv")
styles.css ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ :root {
2
+ --bslib-sidebar-main-bg: #f8f8f8;
3
+ }
4
+
5
+ .popover {
6
+ --bs-popover-header-bg: #222;
7
+ --bs-popover-header-color: #fff;
8
+ }
9
+
10
+ .popover .btn-close {
11
+ filter: var(--bs-btn-close-white-filter);
12
+ }
tips.csv ADDED
@@ -0,0 +1,245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ total_bill,tip,sex,smoker,day,time,size
2
+ 16.99,1.01,Female,No,Sun,Dinner,2
3
+ 10.34,1.66,Male,No,Sun,Dinner,3
4
+ 21.01,3.5,Male,No,Sun,Dinner,3
5
+ 23.68,3.31,Male,No,Sun,Dinner,2
6
+ 24.59,3.61,Female,No,Sun,Dinner,4
7
+ 25.29,4.71,Male,No,Sun,Dinner,4
8
+ 8.77,2.0,Male,No,Sun,Dinner,2
9
+ 26.88,3.12,Male,No,Sun,Dinner,4
10
+ 15.04,1.96,Male,No,Sun,Dinner,2
11
+ 14.78,3.23,Male,No,Sun,Dinner,2
12
+ 10.27,1.71,Male,No,Sun,Dinner,2
13
+ 35.26,5.0,Female,No,Sun,Dinner,4
14
+ 15.42,1.57,Male,No,Sun,Dinner,2
15
+ 18.43,3.0,Male,No,Sun,Dinner,4
16
+ 14.83,3.02,Female,No,Sun,Dinner,2
17
+ 21.58,3.92,Male,No,Sun,Dinner,2
18
+ 10.33,1.67,Female,No,Sun,Dinner,3
19
+ 16.29,3.71,Male,No,Sun,Dinner,3
20
+ 16.97,3.5,Female,No,Sun,Dinner,3
21
+ 20.65,3.35,Male,No,Sat,Dinner,3
22
+ 17.92,4.08,Male,No,Sat,Dinner,2
23
+ 20.29,2.75,Female,No,Sat,Dinner,2
24
+ 15.77,2.23,Female,No,Sat,Dinner,2
25
+ 39.42,7.58,Male,No,Sat,Dinner,4
26
+ 19.82,3.18,Male,No,Sat,Dinner,2
27
+ 17.81,2.34,Male,No,Sat,Dinner,4
28
+ 13.37,2.0,Male,No,Sat,Dinner,2
29
+ 12.69,2.0,Male,No,Sat,Dinner,2
30
+ 21.7,4.3,Male,No,Sat,Dinner,2
31
+ 19.65,3.0,Female,No,Sat,Dinner,2
32
+ 9.55,1.45,Male,No,Sat,Dinner,2
33
+ 18.35,2.5,Male,No,Sat,Dinner,4
34
+ 15.06,3.0,Female,No,Sat,Dinner,2
35
+ 20.69,2.45,Female,No,Sat,Dinner,4
36
+ 17.78,3.27,Male,No,Sat,Dinner,2
37
+ 24.06,3.6,Male,No,Sat,Dinner,3
38
+ 16.31,2.0,Male,No,Sat,Dinner,3
39
+ 16.93,3.07,Female,No,Sat,Dinner,3
40
+ 18.69,2.31,Male,No,Sat,Dinner,3
41
+ 31.27,5.0,Male,No,Sat,Dinner,3
42
+ 16.04,2.24,Male,No,Sat,Dinner,3
43
+ 17.46,2.54,Male,No,Sun,Dinner,2
44
+ 13.94,3.06,Male,No,Sun,Dinner,2
45
+ 9.68,1.32,Male,No,Sun,Dinner,2
46
+ 30.4,5.6,Male,No,Sun,Dinner,4
47
+ 18.29,3.0,Male,No,Sun,Dinner,2
48
+ 22.23,5.0,Male,No,Sun,Dinner,2
49
+ 32.4,6.0,Male,No,Sun,Dinner,4
50
+ 28.55,2.05,Male,No,Sun,Dinner,3
51
+ 18.04,3.0,Male,No,Sun,Dinner,2
52
+ 12.54,2.5,Male,No,Sun,Dinner,2
53
+ 10.29,2.6,Female,No,Sun,Dinner,2
54
+ 34.81,5.2,Female,No,Sun,Dinner,4
55
+ 9.94,1.56,Male,No,Sun,Dinner,2
56
+ 25.56,4.34,Male,No,Sun,Dinner,4
57
+ 19.49,3.51,Male,No,Sun,Dinner,2
58
+ 38.01,3.0,Male,Yes,Sat,Dinner,4
59
+ 26.41,1.5,Female,No,Sat,Dinner,2
60
+ 11.24,1.76,Male,Yes,Sat,Dinner,2
61
+ 48.27,6.73,Male,No,Sat,Dinner,4
62
+ 20.29,3.21,Male,Yes,Sat,Dinner,2
63
+ 13.81,2.0,Male,Yes,Sat,Dinner,2
64
+ 11.02,1.98,Male,Yes,Sat,Dinner,2
65
+ 18.29,3.76,Male,Yes,Sat,Dinner,4
66
+ 17.59,2.64,Male,No,Sat,Dinner,3
67
+ 20.08,3.15,Male,No,Sat,Dinner,3
68
+ 16.45,2.47,Female,No,Sat,Dinner,2
69
+ 3.07,1.0,Female,Yes,Sat,Dinner,1
70
+ 20.23,2.01,Male,No,Sat,Dinner,2
71
+ 15.01,2.09,Male,Yes,Sat,Dinner,2
72
+ 12.02,1.97,Male,No,Sat,Dinner,2
73
+ 17.07,3.0,Female,No,Sat,Dinner,3
74
+ 26.86,3.14,Female,Yes,Sat,Dinner,2
75
+ 25.28,5.0,Female,Yes,Sat,Dinner,2
76
+ 14.73,2.2,Female,No,Sat,Dinner,2
77
+ 10.51,1.25,Male,No,Sat,Dinner,2
78
+ 17.92,3.08,Male,Yes,Sat,Dinner,2
79
+ 27.2,4.0,Male,No,Thur,Lunch,4
80
+ 22.76,3.0,Male,No,Thur,Lunch,2
81
+ 17.29,2.71,Male,No,Thur,Lunch,2
82
+ 19.44,3.0,Male,Yes,Thur,Lunch,2
83
+ 16.66,3.4,Male,No,Thur,Lunch,2
84
+ 10.07,1.83,Female,No,Thur,Lunch,1
85
+ 32.68,5.0,Male,Yes,Thur,Lunch,2
86
+ 15.98,2.03,Male,No,Thur,Lunch,2
87
+ 34.83,5.17,Female,No,Thur,Lunch,4
88
+ 13.03,2.0,Male,No,Thur,Lunch,2
89
+ 18.28,4.0,Male,No,Thur,Lunch,2
90
+ 24.71,5.85,Male,No,Thur,Lunch,2
91
+ 21.16,3.0,Male,No,Thur,Lunch,2
92
+ 28.97,3.0,Male,Yes,Fri,Dinner,2
93
+ 22.49,3.5,Male,No,Fri,Dinner,2
94
+ 5.75,1.0,Female,Yes,Fri,Dinner,2
95
+ 16.32,4.3,Female,Yes,Fri,Dinner,2
96
+ 22.75,3.25,Female,No,Fri,Dinner,2
97
+ 40.17,4.73,Male,Yes,Fri,Dinner,4
98
+ 27.28,4.0,Male,Yes,Fri,Dinner,2
99
+ 12.03,1.5,Male,Yes,Fri,Dinner,2
100
+ 21.01,3.0,Male,Yes,Fri,Dinner,2
101
+ 12.46,1.5,Male,No,Fri,Dinner,2
102
+ 11.35,2.5,Female,Yes,Fri,Dinner,2
103
+ 15.38,3.0,Female,Yes,Fri,Dinner,2
104
+ 44.3,2.5,Female,Yes,Sat,Dinner,3
105
+ 22.42,3.48,Female,Yes,Sat,Dinner,2
106
+ 20.92,4.08,Female,No,Sat,Dinner,2
107
+ 15.36,1.64,Male,Yes,Sat,Dinner,2
108
+ 20.49,4.06,Male,Yes,Sat,Dinner,2
109
+ 25.21,4.29,Male,Yes,Sat,Dinner,2
110
+ 18.24,3.76,Male,No,Sat,Dinner,2
111
+ 14.31,4.0,Female,Yes,Sat,Dinner,2
112
+ 14.0,3.0,Male,No,Sat,Dinner,2
113
+ 7.25,1.0,Female,No,Sat,Dinner,1
114
+ 38.07,4.0,Male,No,Sun,Dinner,3
115
+ 23.95,2.55,Male,No,Sun,Dinner,2
116
+ 25.71,4.0,Female,No,Sun,Dinner,3
117
+ 17.31,3.5,Female,No,Sun,Dinner,2
118
+ 29.93,5.07,Male,No,Sun,Dinner,4
119
+ 10.65,1.5,Female,No,Thur,Lunch,2
120
+ 12.43,1.8,Female,No,Thur,Lunch,2
121
+ 24.08,2.92,Female,No,Thur,Lunch,4
122
+ 11.69,2.31,Male,No,Thur,Lunch,2
123
+ 13.42,1.68,Female,No,Thur,Lunch,2
124
+ 14.26,2.5,Male,No,Thur,Lunch,2
125
+ 15.95,2.0,Male,No,Thur,Lunch,2
126
+ 12.48,2.52,Female,No,Thur,Lunch,2
127
+ 29.8,4.2,Female,No,Thur,Lunch,6
128
+ 8.52,1.48,Male,No,Thur,Lunch,2
129
+ 14.52,2.0,Female,No,Thur,Lunch,2
130
+ 11.38,2.0,Female,No,Thur,Lunch,2
131
+ 22.82,2.18,Male,No,Thur,Lunch,3
132
+ 19.08,1.5,Male,No,Thur,Lunch,2
133
+ 20.27,2.83,Female,No,Thur,Lunch,2
134
+ 11.17,1.5,Female,No,Thur,Lunch,2
135
+ 12.26,2.0,Female,No,Thur,Lunch,2
136
+ 18.26,3.25,Female,No,Thur,Lunch,2
137
+ 8.51,1.25,Female,No,Thur,Lunch,2
138
+ 10.33,2.0,Female,No,Thur,Lunch,2
139
+ 14.15,2.0,Female,No,Thur,Lunch,2
140
+ 16.0,2.0,Male,Yes,Thur,Lunch,2
141
+ 13.16,2.75,Female,No,Thur,Lunch,2
142
+ 17.47,3.5,Female,No,Thur,Lunch,2
143
+ 34.3,6.7,Male,No,Thur,Lunch,6
144
+ 41.19,5.0,Male,No,Thur,Lunch,5
145
+ 27.05,5.0,Female,No,Thur,Lunch,6
146
+ 16.43,2.3,Female,No,Thur,Lunch,2
147
+ 8.35,1.5,Female,No,Thur,Lunch,2
148
+ 18.64,1.36,Female,No,Thur,Lunch,3
149
+ 11.87,1.63,Female,No,Thur,Lunch,2
150
+ 9.78,1.73,Male,No,Thur,Lunch,2
151
+ 7.51,2.0,Male,No,Thur,Lunch,2
152
+ 14.07,2.5,Male,No,Sun,Dinner,2
153
+ 13.13,2.0,Male,No,Sun,Dinner,2
154
+ 17.26,2.74,Male,No,Sun,Dinner,3
155
+ 24.55,2.0,Male,No,Sun,Dinner,4
156
+ 19.77,2.0,Male,No,Sun,Dinner,4
157
+ 29.85,5.14,Female,No,Sun,Dinner,5
158
+ 48.17,5.0,Male,No,Sun,Dinner,6
159
+ 25.0,3.75,Female,No,Sun,Dinner,4
160
+ 13.39,2.61,Female,No,Sun,Dinner,2
161
+ 16.49,2.0,Male,No,Sun,Dinner,4
162
+ 21.5,3.5,Male,No,Sun,Dinner,4
163
+ 12.66,2.5,Male,No,Sun,Dinner,2
164
+ 16.21,2.0,Female,No,Sun,Dinner,3
165
+ 13.81,2.0,Male,No,Sun,Dinner,2
166
+ 17.51,3.0,Female,Yes,Sun,Dinner,2
167
+ 24.52,3.48,Male,No,Sun,Dinner,3
168
+ 20.76,2.24,Male,No,Sun,Dinner,2
169
+ 31.71,4.5,Male,No,Sun,Dinner,4
170
+ 10.59,1.61,Female,Yes,Sat,Dinner,2
171
+ 10.63,2.0,Female,Yes,Sat,Dinner,2
172
+ 50.81,10.0,Male,Yes,Sat,Dinner,3
173
+ 15.81,3.16,Male,Yes,Sat,Dinner,2
174
+ 7.25,5.15,Male,Yes,Sun,Dinner,2
175
+ 31.85,3.18,Male,Yes,Sun,Dinner,2
176
+ 16.82,4.0,Male,Yes,Sun,Dinner,2
177
+ 32.9,3.11,Male,Yes,Sun,Dinner,2
178
+ 17.89,2.0,Male,Yes,Sun,Dinner,2
179
+ 14.48,2.0,Male,Yes,Sun,Dinner,2
180
+ 9.6,4.0,Female,Yes,Sun,Dinner,2
181
+ 34.63,3.55,Male,Yes,Sun,Dinner,2
182
+ 34.65,3.68,Male,Yes,Sun,Dinner,4
183
+ 23.33,5.65,Male,Yes,Sun,Dinner,2
184
+ 45.35,3.5,Male,Yes,Sun,Dinner,3
185
+ 23.17,6.5,Male,Yes,Sun,Dinner,4
186
+ 40.55,3.0,Male,Yes,Sun,Dinner,2
187
+ 20.69,5.0,Male,No,Sun,Dinner,5
188
+ 20.9,3.5,Female,Yes,Sun,Dinner,3
189
+ 30.46,2.0,Male,Yes,Sun,Dinner,5
190
+ 18.15,3.5,Female,Yes,Sun,Dinner,3
191
+ 23.1,4.0,Male,Yes,Sun,Dinner,3
192
+ 15.69,1.5,Male,Yes,Sun,Dinner,2
193
+ 19.81,4.19,Female,Yes,Thur,Lunch,2
194
+ 28.44,2.56,Male,Yes,Thur,Lunch,2
195
+ 15.48,2.02,Male,Yes,Thur,Lunch,2
196
+ 16.58,4.0,Male,Yes,Thur,Lunch,2
197
+ 7.56,1.44,Male,No,Thur,Lunch,2
198
+ 10.34,2.0,Male,Yes,Thur,Lunch,2
199
+ 43.11,5.0,Female,Yes,Thur,Lunch,4
200
+ 13.0,2.0,Female,Yes,Thur,Lunch,2
201
+ 13.51,2.0,Male,Yes,Thur,Lunch,2
202
+ 18.71,4.0,Male,Yes,Thur,Lunch,3
203
+ 12.74,2.01,Female,Yes,Thur,Lunch,2
204
+ 13.0,2.0,Female,Yes,Thur,Lunch,2
205
+ 16.4,2.5,Female,Yes,Thur,Lunch,2
206
+ 20.53,4.0,Male,Yes,Thur,Lunch,4
207
+ 16.47,3.23,Female,Yes,Thur,Lunch,3
208
+ 26.59,3.41,Male,Yes,Sat,Dinner,3
209
+ 38.73,3.0,Male,Yes,Sat,Dinner,4
210
+ 24.27,2.03,Male,Yes,Sat,Dinner,2
211
+ 12.76,2.23,Female,Yes,Sat,Dinner,2
212
+ 30.06,2.0,Male,Yes,Sat,Dinner,3
213
+ 25.89,5.16,Male,Yes,Sat,Dinner,4
214
+ 48.33,9.0,Male,No,Sat,Dinner,4
215
+ 13.27,2.5,Female,Yes,Sat,Dinner,2
216
+ 28.17,6.5,Female,Yes,Sat,Dinner,3
217
+ 12.9,1.1,Female,Yes,Sat,Dinner,2
218
+ 28.15,3.0,Male,Yes,Sat,Dinner,5
219
+ 11.59,1.5,Male,Yes,Sat,Dinner,2
220
+ 7.74,1.44,Male,Yes,Sat,Dinner,2
221
+ 30.14,3.09,Female,Yes,Sat,Dinner,4
222
+ 12.16,2.2,Male,Yes,Fri,Lunch,2
223
+ 13.42,3.48,Female,Yes,Fri,Lunch,2
224
+ 8.58,1.92,Male,Yes,Fri,Lunch,1
225
+ 15.98,3.0,Female,No,Fri,Lunch,3
226
+ 13.42,1.58,Male,Yes,Fri,Lunch,2
227
+ 16.27,2.5,Female,Yes,Fri,Lunch,2
228
+ 10.09,2.0,Female,Yes,Fri,Lunch,2
229
+ 20.45,3.0,Male,No,Sat,Dinner,4
230
+ 13.28,2.72,Male,No,Sat,Dinner,2
231
+ 22.12,2.88,Female,Yes,Sat,Dinner,2
232
+ 24.01,2.0,Male,Yes,Sat,Dinner,4
233
+ 15.69,3.0,Male,Yes,Sat,Dinner,3
234
+ 11.61,3.39,Male,No,Sat,Dinner,2
235
+ 10.77,1.47,Male,No,Sat,Dinner,2
236
+ 15.53,3.0,Male,Yes,Sat,Dinner,2
237
+ 10.07,1.25,Male,No,Sat,Dinner,2
238
+ 12.6,1.0,Male,Yes,Sat,Dinner,2
239
+ 32.83,1.17,Male,Yes,Sat,Dinner,2
240
+ 35.83,4.67,Female,No,Sat,Dinner,3
241
+ 29.03,5.92,Male,No,Sat,Dinner,3
242
+ 27.18,2.0,Female,Yes,Sat,Dinner,2
243
+ 22.67,2.0,Male,Yes,Sat,Dinner,2
244
+ 17.82,1.75,Male,No,Sat,Dinner,2
245
+ 18.78,3.0,Female,No,Thur,Dinner,2