├── .gitignore ├── DrawRandom.py ├── FontUpdate.py ├── GenRandom.py ├── LICENSE ├── PimaPrediction.py ├── PolyFit.py ├── QuadraticEquation.py ├── README.md ├── SimpleDataFrame.ipynb ├── SimpleDataFrame.py ├── TwoBarCharts.py ├── data ├── Readme.md ├── cars.csv └── pima-indians-diabetes.csv └── images ├── DrawRandom.gif ├── FontUpdate.gif ├── GenRandom.gif ├── Pima-Prediction.gif ├── PolyFitting.gif ├── QuadraticEquation.PNG ├── Readme.md ├── SimpleDataFrame-0.PNG ├── SimpleDataFrame-1.PNG ├── SimpleDataFrame-2.PNG ├── SimpleDataFrame-3.PNG ├── SimpleDataFrame-4.PNG ├── SimpleDataFrame-5.PNG ├── SimpleDataFrame-6.png ├── SimpleDataFrame-7.PNG └── SimpleDataFrame-8.PNG /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /DrawRandom.py: -------------------------------------------------------------------------------- 1 | import PySimpleGUI as sg 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 5 | 6 | # Update function 7 | def data_gen(): 8 | fig1 = plt.figure(dpi=125) 9 | x = np.round(10*np.random.random(20),3) 10 | y = np.round(10*np.random.random(20),3) 11 | p1 = plt.scatter(x,y,edgecolor='k') 12 | plt.ylabel('Y-Values') 13 | plt.xlabel('X-Values') 14 | plt.title('Scatter plot') 15 | figure_x, figure_y, figure_w, figure_h = fig1.bbox.bounds 16 | return (x,y,fig1,figure_x, figure_y, figure_w, figure_h) 17 | 18 | def draw_figure(canvas, figure, loc=(0, 0)): 19 | figure_canvas_agg = FigureCanvasTkAgg(figure, canvas) 20 | figure_canvas_agg.draw() 21 | figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1) 22 | return figure_canvas_agg 23 | 24 | def delete_fig_agg(fig_agg): 25 | fig_agg.get_tk_widget().forget() 26 | plt.close('all') 27 | 28 | # Define the window's contents i.e. layout 29 | layout = [ 30 | [sg.Button('Generate a random scatter plot',enable_events=True, key='-GENERATE-', font='Helvetica 16')], 31 | [sg.Canvas(size=(350,350), key='-CANVAS-', pad=(20,20))], 32 | [sg.Button('Exit')], 33 | ] 34 | 35 | # Create the window 36 | window = sg.Window('Generate random integer', layout, size=(700,700)) 37 | 38 | # Event loop 39 | fig_agg = None 40 | while True: 41 | event, values = window.read() 42 | if event in (sg.WIN_CLOSED, 'Exit'): 43 | break 44 | if event == '-GENERATE-': 45 | if fig_agg is not None: 46 | delete_fig_agg(fig_agg) 47 | _,_,fig1,figure_x, figure_y, figure_w, figure_h = data_gen() 48 | canvas_elem = window['-CANVAS-'].TKCanvas 49 | canvas_elem.Size=(int(figure_w),int(figure_h)) 50 | fig_agg = draw_figure(canvas_elem, fig1) 51 | 52 | # Close the window i.e. release resource 53 | window.close() -------------------------------------------------------------------------------- /FontUpdate.py: -------------------------------------------------------------------------------- 1 | import PySimpleGUI as sg 2 | 3 | ''' 4 | App that shows "how fonts work in PySimpleGUI". 5 | ''' 6 | 7 | layout = [[sg.Text('This is my sample text', size=(20, 1), key='-text-')], 8 | [sg.CB('Bold', key='-bold-', change_submits=True), 9 | sg.CB('Italics', key='-italics-', change_submits=True), 10 | sg.CB('Underline', key='-underline-', change_submits=True)], 11 | [sg.Slider((6, 50), default_value=12, size=(14, 20), 12 | orientation='h', key='-slider-', change_submits=True), 13 | sg.Text('Font size')], 14 | [sg.Text('Font string = '), sg.Text('', size=(25, 1), key='-fontstring-')], 15 | [sg.Button('Exit')]] 16 | 17 | window = sg.Window('Font string builder', layout) 18 | 19 | text_elem = window['-text-'] 20 | while True: # Event Loop 21 | event, values = window.read() 22 | if event in (sg.WIN_CLOSED, 'Exit'): 23 | break 24 | font_string = 'Helvitica ' 25 | font_string += str(int(values['-slider-'])) 26 | if values['-bold-']: 27 | font_string += ' bold' 28 | if values['-italics-']: 29 | font_string += ' italic' 30 | if values['-underline-']: 31 | font_string += ' underline' 32 | #text_elem.update(font=int(font_string.split(' ')[1].split('.')[0])) 33 | text_elem.update(font=font_string) 34 | window['-fontstring-'].update('"'+font_string+'"') 35 | 36 | window.close() -------------------------------------------------------------------------------- /GenRandom.py: -------------------------------------------------------------------------------- 1 | import PySimpleGUI as sg 2 | import numpy as np 3 | 4 | # Update function 5 | def update(): 6 | r = np.random.randint(1,100) 7 | text_elem = window['-text-'] 8 | text_elem.update("This is a random integer: {}".format(r)) 9 | 10 | # Define the window's contents i.e. layout 11 | layout = [[sg.Button('Generate',enable_events=True, key='-FUNCTION-', font='Helvetica 16')], 12 | [sg.Text('This is a random integer:', size=(25, 1), key='-text-', font='Helvetica 16')]] 13 | 14 | # Create the window 15 | window = sg.Window('Generate random integer', layout, size=(350,100)) 16 | 17 | # Event loop 18 | while True: 19 | event, values = window.read() 20 | if event in (sg.WIN_CLOSED, 'Exit'): 21 | break 22 | if event == '-FUNCTION-': 23 | update() 24 | 25 | # Close the window i.e. release resource 26 | window.close() -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Tirthajyoti Sarkar 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PimaPrediction.py: -------------------------------------------------------------------------------- 1 | import PySimpleGUI as sg 2 | import pandas as pd 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 6 | 7 | def read_table(): 8 | sg.set_options(auto_size_buttons=True) 9 | layout = [[sg.Text('Dataset (a CSV file)', size=(16, 1)),sg.InputText(), 10 | sg.FileBrowse(file_types=(("CSV Files", "*.csv"),("Text Files", "*.txt")))], 11 | [sg.Submit(), sg.Cancel()]] 12 | 13 | window1 = sg.Window('Input file', layout) 14 | try: 15 | event, values = window1.read() 16 | window1.close() 17 | except: 18 | window1.close() 19 | return 20 | 21 | filename = values[0] 22 | 23 | if filename == '': 24 | return 25 | 26 | data = [] 27 | header_list = [] 28 | 29 | if filename is not None: 30 | fn = filename.split('/')[-1] 31 | try: 32 | if colnames_checked: 33 | df = pd.read_csv(filename, sep=',', engine='python') 34 | # Uses the first row (which should be column names) as columns names 35 | header_list = list(df.columns) 36 | # Drops the first row in the table (otherwise the header names and the first row will be the same) 37 | data = df[1:].values.tolist() 38 | else: 39 | df = pd.read_csv(filename, sep=',', engine='python', header=None) 40 | # Creates columns names for each column ('column0', 'column1', etc) 41 | header_list = ['column' + str(x) for x in range(len(df.iloc[0]))] 42 | df.columns = header_list 43 | # read everything else into a list of rows 44 | data = df.values.tolist() 45 | # NaN drop? 46 | if dropnan_checked: 47 | df = df.dropna() 48 | data = df.values.tolist() 49 | window1.close() 50 | return (df,data, header_list,fn) 51 | except: 52 | sg.popup_error('Error reading file') 53 | window1.close() 54 | return 55 | 56 | def show_table(data, header_list, fn): 57 | layout = [ 58 | [sg.Table(values=data, 59 | headings=header_list, 60 | font='Helvetica', 61 | pad=(25,25), 62 | display_row_numbers=False, 63 | auto_size_columns=True, 64 | num_rows=min(25, len(data)))] 65 | ] 66 | 67 | window = sg.Window(fn, layout, grab_anywhere=False) 68 | event, values = window.read() 69 | window.close() 70 | 71 | def show_stats(df): 72 | stats = df.describe().T 73 | header_list = list(stats.columns) 74 | data = stats.values.tolist() 75 | for i,d in enumerate(data): 76 | d.insert(0,list(stats.index)[i]) 77 | header_list=['Feature']+header_list 78 | layout = [ 79 | [sg.Table(values=data, 80 | headings=header_list, 81 | font='Helvetica', 82 | pad=(10,10), 83 | display_row_numbers=False, 84 | auto_size_columns=True, 85 | num_rows=min(25, len(data)))] 86 | ] 87 | 88 | window = sg.Window("Statistics", layout, grab_anywhere=False) 89 | event, values = window.read() 90 | window.close() 91 | 92 | def sklearn_model(output_var): 93 | """ 94 | Builds and fits a ML model 95 | """ 96 | from sklearn.ensemble import RandomForestClassifier 97 | X = df.drop([output_var], axis=1) 98 | y = df[output_var] 99 | 100 | clf = RandomForestClassifier(n_estimators=20, 101 | max_depth=4) 102 | clf.fit(X, y) 103 | #print("Prediction accuracy {}".format(clf.score(X,y))) 104 | return clf, np.round(clf.score(X,y),3) 105 | 106 | #=====================================================# 107 | # Define the window's contents i.e. layout 108 | layout = [ 109 | [sg.Button('Load data',size=(10,1), enable_events=True, key='-READ-', font='Helvetica 16'), 110 | sg.Checkbox('Has column names?', size=(15,1), key='colnames-check',default=True), 111 | sg.Checkbox('Drop NaN entries?', size=(15,1), key='drop-nan',default=True)], 112 | [sg.Button('Show data',size=(10,1),enable_events=True, key='-SHOW-', font='Helvetica 16',), 113 | sg.Button('Show stats',size=(15,1),enable_events=True, key='-STATS-', font='Helvetica 16',)], 114 | [sg.Text("", size=(50,1),key='-loaded-', pad=(5,5), font='Helvetica 14'),], 115 | [sg.Text("Select output column",size=(18,1), pad=(5,5), font='Helvetica 12'),], 116 | [sg.Listbox(values=(''), key='colnames',size=(30,3),enable_events=True),], 117 | [sg.Text("", size=(50,1),key='-prediction-', pad=(5,5), font='Helvetica 12')], 118 | [sg.ProgressBar(50, orientation='h', size=(100,20), key='progressbar')], 119 | ] 120 | 121 | # Create the window 122 | window = sg.Window('Pima', layout, size=(600,300)) 123 | progress_bar = window['progressbar'] 124 | prediction_text = window['-prediction-'] 125 | colnames_checked = False 126 | dropnan_checked = False 127 | read_successful = False 128 | # Event loop 129 | while True: 130 | event, values = window.read() 131 | loaded_text = window['-loaded-'] 132 | if event in (sg.WIN_CLOSED, 'Exit'): 133 | break 134 | if event == '-READ-': 135 | if values['colnames-check']==True: 136 | colnames_checked=True 137 | if values['drop-nan']==True: 138 | dropnan_checked=True 139 | try: 140 | df,data, header_list,fn = read_table() 141 | read_successful = True 142 | except: 143 | pass 144 | if read_successful: 145 | loaded_text.update("Datset loaded: '{}'".format(fn)) 146 | col_vals = [i for i in df.columns] 147 | window.Element('colnames').Update(values=col_vals, ) 148 | if event == '-SHOW-': 149 | if read_successful: 150 | show_table(data,header_list,fn) 151 | else: 152 | loaded_text.update("No dataset was loaded") 153 | if event=='-STATS-': 154 | if read_successful: 155 | show_stats(df) 156 | else: 157 | loaded_text.update("No dataset was loaded") 158 | if event=='colnames': 159 | if len(values['colnames'])!=0: 160 | output_var = values['colnames'][0] 161 | if output_var!='Class variable': 162 | sg.Popup("Wrong output column selected!", title='Wrong',font="Helvetica 14") 163 | else: 164 | prediction_text.update("Fitting model...") 165 | for i in range(50): 166 | event, values = window.read(timeout=10) 167 | progress_bar.UpdateBar(i + 1) 168 | _,score = sklearn_model(output_var) 169 | prediction_text.update("Accuracy of Random Forest model is: {}".format(score)) -------------------------------------------------------------------------------- /PolyFit.py: -------------------------------------------------------------------------------- 1 | import PySimpleGUI as sg 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 5 | 6 | # Update function 7 | def data_gen(): 8 | fig1 = plt.figure(dpi=125) 9 | x = np.round(10*np.random.random(20),3) 10 | y = 0.5*x**2+3*x+5+np.random.normal(scale=noise,size=20) 11 | p1 = plt.scatter(x,y,edgecolor='k') 12 | plt.ylabel('Y-Values') 13 | plt.xlabel('X-Values') 14 | plt.title('Scatter plot') 15 | figure_x, figure_y, figure_w, figure_h = fig1.bbox.bounds 16 | return (x,y,fig1,figure_x, figure_y, figure_w, figure_h) 17 | 18 | def fit_redraw(x,y,model): 19 | fig2 = plt.figure(dpi=125) 20 | x_min,x_max = np.min(x),np.max(x) 21 | x_reg = np.arange(x_min,x_max,0.01) 22 | y_reg = np.poly1d(model)(x_reg) 23 | p1 = plt.scatter(x,y,edgecolor='k') 24 | p2 = plt.plot(x_reg,y_reg,color='orange',lw=3) 25 | plt.ylabel('Y-Values') 26 | plt.xlabel('X-Values') 27 | plt.title('Scatter plot with fit') 28 | return fig2 29 | 30 | def draw_figure(canvas, figure, loc=(0, 0)): 31 | figure_canvas_agg = FigureCanvasTkAgg(figure, canvas) 32 | figure_canvas_agg.draw() 33 | figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1) 34 | return figure_canvas_agg 35 | 36 | def delete_fig_agg(fig_agg): 37 | fig_agg.get_tk_widget().forget() 38 | plt.close('all') 39 | 40 | # Define the window's contents i.e. layout 41 | layout = [ 42 | [sg.Button('Generate',enable_events=True, key='-GENERATE-', font='Helvetica 16'), 43 | sg.Button('Fit',enable_events=True, key='-FIT-', font='Helvetica 16', size=(10,1))], 44 | [sg.Text("Gaussian noise (std. devition)", font=('Helvetica', 12)), 45 | sg.Slider(range=(0,6), default_value=3, size=(20,20), orientation='h',font=('Helvetica', 12), key='-NOISE-')], 46 | [sg.Canvas(size=(350,350), key='-CANVAS-', pad=(20,20))], 47 | [sg.Button('Exit')], 48 | ] 49 | 50 | # Create the window 51 | window = sg.Window('Polynomial fitting', layout, size=(700,700)) 52 | 53 | # Event loop 54 | fig_agg = None 55 | while True: 56 | event, values = window.read() 57 | if event in (sg.WIN_CLOSED, 'Exit'): 58 | break 59 | if event == '-GENERATE-': 60 | noise = values['-NOISE-'] 61 | if fig_agg is not None: 62 | delete_fig_agg(fig_agg) 63 | x,y,fig1,figure_x, figure_y, figure_w, figure_h = data_gen() 64 | canvas_elem = window['-CANVAS-'].TKCanvas 65 | canvas_elem.Size=(int(figure_w),int(figure_h)) 66 | fig_agg = draw_figure(canvas_elem, fig1) 67 | if event == '-FIT-': 68 | model = np.polyfit(x, y, 2) 69 | if fig_agg is not None: 70 | delete_fig_agg(fig_agg) 71 | fig2 = fit_redraw(x,y,model) 72 | canvas_elem = window['-CANVAS-'].TKCanvas 73 | fig_agg = draw_figure(canvas_elem, fig2) 74 | # Close the window i.e. release resource 75 | window.close() -------------------------------------------------------------------------------- /QuadraticEquation.py: -------------------------------------------------------------------------------- 1 | import PySimpleGUI as sg 2 | from math import sqrt 3 | 4 | def solver(a,b,c): 5 | if b**2 >=4*a*c: 6 | x1 = (-b+sqrt(b**2-4*a*c))/(2*a) 7 | x2 = (-b-sqrt(b**2-4*a*c))/(2*a) 8 | return round(x1,3),round(x2,3) 9 | else: 10 | omega1 = round(-b/(2*a),3) 11 | omega2 = round(sqrt(4*a*c-b**2)/(2*a),3) 12 | x1 = str(omega1)+" + "+str(omega2)+"i" 13 | x2 = str(omega1)+" - "+str(omega2)+"i" 14 | return x1,x2 15 | 16 | layout = [ 17 | [sg.T('a', key='lbl_a',font='consalo 14'), sg.I('', key='edit_a', size=(10,1),pad=(10,10)), 18 | sg.T('b', key='lbl_b', font='consalo 14'), sg.I('', key='edit_b', size=(10,1),pad=(10,10)), 19 | sg.T('c', key='lbl_c', font='consalo 14'), sg.I('', key='edit_c', size=(10,1),pad=(10,10))], 20 | [sg.B('Calculate', key='calc', border_width=5, pad=(10,10))], 21 | [sg.T('x1', key='lbl_x1', font='consalo 14'), sg.I('', key='x1', size=(15,1),pad=(10,10))], 22 | [sg.T('x2', key='lbl_x2', font='consalo 14'), sg.I('', key='x2', size=(15,1),pad=(10,10))] 23 | ] 24 | 25 | window = sg.Window('Quadratic solver', layout, size=(400,180)) 26 | 27 | while True: 28 | event, values = window.read() 29 | if event in (None, 'Exit'): 30 | break 31 | 32 | if event == 'calc': 33 | try: 34 | a = float(values['edit_a']) 35 | except: 36 | a = 0 37 | sg.popup_error("The leading coefficient cannot be zero") 38 | break 39 | try: 40 | b = float(values['edit_b']) 41 | except: 42 | b = 0 43 | try: 44 | c = float(values['edit_c']) 45 | except: 46 | c = 0 47 | 48 | x1,x2 = solver(a,b,c) 49 | window['x1'].update(str(x1)) 50 | window['x2'].update(str(x2)) 51 | 52 | window.close() -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DS-with-PySimpleGUI 2 | 3 | ## [Dr. Tirthajyoti Sarkar](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/), Fremont, CA 4 | 5 | Data science GUI programs with awesome `PySimpleGUI` package. 6 | 7 | --- 8 | 9 | ## What is `PySimpleGUI` and what is this repo? 10 | 11 | As per their website, ___"Python GUI For Humans - Transforms tkinter, Qt, Remi, WxPython into portable people-friendly Pythonic interfaces"___. In this repo, I specifically focus on creating simple demo programs related to data science (simple analytics, statistical modeling and visualizations, basic machine learning) using this powerful GUI building tool. 12 | 13 | ## Requirements 14 | 15 | Install `PySimpleGUI` by, 16 | ``` 17 | pip install pysimplegui 18 | ``` 19 | 20 | You will also need, 21 | 22 | - Numpy 23 | - Pandas 24 | - Matplotlib 25 | - Scikit-learn 26 | - Seaborn 27 | 28 | etc. to run the demo codes. 29 | 30 | ## A very simple [random integer generator app](https://github.com/tirthajyoti/DS-with-PySimpleGUI/blob/main/GenRandom.py) 31 | 32 | Here is the code to program this app, 33 | 34 | ``` 35 | import PySimpleGUI as sg 36 | import numpy as np 37 | 38 | # Update function 39 | def update(): 40 | r = np.random.randint(1,100) 41 | text_elem = window['-text-'] 42 | text_elem.update("This is a random integer: {}".format(r)) 43 | 44 | # Define the window's contents i.e. layout 45 | layout = [[sg.Button('Generate',enable_events=True, key='-FUNCTION-', font='Helvetica 16')], 46 | [sg.Text('This is a random integer:', size=(25, 1), key='-text-', font='Helvetica 16')]] 47 | 48 | # Create the window 49 | window = sg.Window('Generate random integer', layout, size=(350,100)) 50 | 51 | # Event loop 52 | while True: 53 | event, values = window.read() 54 | if event in (sg.WIN_CLOSED, 'Exit'): 55 | break 56 | if event == '-FUNCTION-': 57 | update() 58 | 59 | # Close the window i.e. release resource 60 | window.close() 61 | ``` 62 | 63 | When you save this code in a Python script and run it, you will see a simple window pop up where you can click on a button to call the `update` function as many times as you want (note the `while True` loop in the code for this infinite loop action) and generate a random integer between 1 and 99. 64 | 65 | ![genrandom](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/GenRandom.gif) 66 | 67 | Although this is a very simple code, it features, 68 | 69 | - layout (with styling arguments e.g. `size` and `font`) and a window 70 | - a button element which calls an external function (event) 71 | - the function updating a text element of the window object 72 | 73 | We can essentially follow the same path and add more layers of layout, events, logic, and widgets to make powerful data science apps. 74 | 75 | --- 76 | 77 | ## [App to show other widgets](https://github.com/tirthajyoti/DS-with-PySimpleGUI/blob/main/FontUpdate.py) (`FontUpdate.py`) 78 | 79 | Just run with `python FontUpdate.py` command and you will see this window pop up where you can dynamically update the font of the text. Here is the demo video, 80 | 81 | ![fontupdate](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/FontUpdate.gif) 82 | 83 | This app gets you familiar with other widgets available, 84 | 85 | - slider 86 | - checkboxes 87 | 88 | --- 89 | 90 | ## [A quadratic equation solver](https://github.com/tirthajyoti/DS-with-PySimpleGUI/blob/main/QuadraticEquation.py) 91 | 92 | Just run with `python QuadraticEquation.py` command and you will see this window pop up where you can enter coefficients of a quadratic equation and get the solution (even if the roots turn out to be complex numbers!) 93 | 94 | ![quadratic](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/QuadraticEquation.PNG) 95 | 96 | --- 97 | 98 | ## Demo of `SimpleDataFrame.py` ([Pandas DataFrame app](https://github.com/tirthajyoti/DS-with-PySimpleGUI/blob/main/SimpleDataFrame.py)) 99 | 100 | There are both Jupyter notebooks and .PY scripts. The simplest way to run a GUI is to execute the .PY scripts, e.g. 101 | ``` 102 | python SimpleDataFrame.py 103 | ``` 104 | 105 | ### Input file 106 | At the start, it will ask you for a dataset file (a CSV) 107 | 108 | ![input](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/SimpleDataFrame-0.PNG) 109 | 110 | ### File browser 111 | When you click on the 'Browse' button, it will show a file browser dialog first. Make sure you select the correct dataset for this demo from under the `data` directory. 112 | 113 | ![browser](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/SimpleDataFrame-1.PNG) 114 | 115 | ### Prompts 116 | After you select the `cars.csv`, you will see other prompts popping up, 117 | 118 | ![prompts](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/SimpleDataFrame-6.png) 119 | ### Dataset 120 | If you click 'Yes' on that last prompt, you will see the dataset that was read in a new window, 121 | 122 | ![data](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/SimpleDataFrame-5.PNG) 123 | ### Descriptive stats 124 | After you close that window, a new popup will ask if you want to see the descriptive statistics about this dataset. If you click 'Yes', then you will see something like this, 125 | 126 | ![stat](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/SimpleDataFrame-7.PNG) 127 | ### A plot 128 | After you close that window, another popup will ask if you want to see a sample plot. If you click 'Yes', then you will see something like this, 129 | 130 | ![plot](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/SimpleDataFrame-8.PNG) 131 | ### Play with the notebooks if you like 132 | If you want to experiment with the code, you can look at the Notebooks and play with them. 133 | 134 | --- 135 | 136 | ## [Random scatter plots](https://github.com/tirthajyoti/DS-with-PySimpleGUI/blob/main/DrawRandom.py) 137 | 138 | Generate as many random scatter plots as you wish. 139 | 140 | ![drawrandom](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/DrawRandom.gif) 141 | 142 | --- 143 | 144 | ## [Polynomial fitting](https://github.com/tirthajyoti/DS-with-PySimpleGUI/blob/main/PolyFit.py) 145 | 146 | A simple 2nd degree polynomial fitting app wher you can adjust the noise level of the randomly generated data. 147 | 148 | ![polyfit](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/PolyFitting.gif) 149 | 150 | --- 151 | 152 | ## [A Scikit-learn model fitting example](https://github.com/tirthajyoti/DS-with-PySimpleGUI/blob/main/PimaPrediction.py) 153 | 154 | We build a simple app which lets you load the [Pima Indians diabetes](https://www.kaggle.com/uciml/pima-indians-diabetes-database) dataset and fit a Random Forest model to this data using Scikit-learn in the background. 155 | 156 | ![pima](https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/main/images/Pima-Prediction.gif) 157 | 158 | --- 159 | 160 | ## PySimpleGUI website 161 | 162 | [Read the docs here](https://pysimplegui.readthedocs.io/en/latest/) 163 | 164 | [Github repo](https://github.com/PySimpleGUI/PySimpleGUI) 165 | 166 | [Cool demos](https://github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms) 167 | 168 | ## Use Qt Designer to build complex forms 169 | 170 | Qt Desginer is a popular visual aid for building complex forms for Python GUI programming. You can build PySimpleGUI comppatible code with Qt Designer by using an intermediary - [`PySimpleGUIDesigner`](https://github.com/nngogol/PySimpleGUIDesigner). 171 | 172 | Here is the Github for that program. 173 | 174 | And, here is an [YouTube tutorial](https://www.youtube.com/watch?v=dN7gXwnNoBA) on how to use it. 175 | -------------------------------------------------------------------------------- /SimpleDataFrame.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import PySimpleGUI as sg\n", 10 | "import pandas as pd\n", 11 | "import numpy as np\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "def read_table():\n", 23 | "\n", 24 | " sg.set_options(auto_size_buttons=True)\n", 25 | " filename = sg.popup_get_file(\n", 26 | " 'Dataset to read',\n", 27 | " title='Dataset to read',\n", 28 | " no_window=True, \n", 29 | " file_types=((\"CSV Files\", \"*.csv\"),(\"Text Files\", \"*.txt\")))\n", 30 | " # --- populate table with file contents --- #\n", 31 | " if filename == '':\n", 32 | " return\n", 33 | "\n", 34 | " data = []\n", 35 | " header_list = []\n", 36 | " colnames_prompt = sg.popup_yes_no('Does this file have column names already?')\n", 37 | " nan_prompt = sg.popup_yes_no('Drop NaN entries?')\n", 38 | "\n", 39 | " if filename is not None:\n", 40 | " fn = filename.split('/')[-1]\n", 41 | " try: \n", 42 | " if colnames_prompt == 'Yes':\n", 43 | " df = pd.read_csv(filename, sep=',', engine='python')\n", 44 | " # Uses the first row (which should be column names) as columns names\n", 45 | " header_list = list(df.columns)\n", 46 | " # Drops the first row in the table (otherwise the header names and the first row will be the same)\n", 47 | " data = df[1:].values.tolist()\n", 48 | " else:\n", 49 | " df = pd.read_csv(filename, sep=',', engine='python', header=None)\n", 50 | " # Creates columns names for each column ('column0', 'column1', etc)\n", 51 | " header_list = ['column' + str(x) for x in range(len(df.iloc[0]))]\n", 52 | " df.columns = header_list\n", 53 | " # read everything else into a list of rows\n", 54 | " data = df.values.tolist()\n", 55 | " # NaN drop?\n", 56 | " if nan_prompt=='Yes':\n", 57 | " df = df.dropna()\n", 58 | " \n", 59 | " return (df,data, header_list,fn)\n", 60 | " except:\n", 61 | " sg.popup_error('Error reading file')\n", 62 | " return" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 3, 68 | "metadata": {}, 69 | "outputs": [], 70 | "source": [ 71 | "def show_table(data, header_list, fn):\n", 72 | " layout = [\n", 73 | " [sg.Table(values=data,\n", 74 | " headings=header_list,\n", 75 | " font='Helvetica',\n", 76 | " pad=(25,25),\n", 77 | " display_row_numbers=False,\n", 78 | " auto_size_columns=True,\n", 79 | " num_rows=min(25, len(data)))]\n", 80 | " ]\n", 81 | "\n", 82 | " window = sg.Window(fn, layout, grab_anywhere=False)\n", 83 | " event, values = window.read()\n", 84 | " window.close()" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 4, 90 | "metadata": {}, 91 | "outputs": [], 92 | "source": [ 93 | "def show_stats(df):\n", 94 | " stats = df.describe().T\n", 95 | " header_list = list(stats.columns)\n", 96 | " data = stats.values.tolist()\n", 97 | " for i,d in enumerate(data):\n", 98 | " d.insert(0,list(stats.index)[i])\n", 99 | " header_list=['Feature']+header_list\n", 100 | " layout = [\n", 101 | " [sg.Table(values=data,\n", 102 | " headings=header_list,\n", 103 | " font='Helvetica',\n", 104 | " pad=(10,10),\n", 105 | " display_row_numbers=False,\n", 106 | " auto_size_columns=True,\n", 107 | " num_rows=min(25, len(data)))]\n", 108 | " ]\n", 109 | "\n", 110 | " window = sg.Window(\"Statistics\", layout, grab_anywhere=False)\n", 111 | " event, values = window.read()\n", 112 | " window.close()" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": 5, 118 | "metadata": {}, 119 | "outputs": [], 120 | "source": [ 121 | "def plot_fig(df):\n", 122 | " \"\"\"\n", 123 | " Plots\n", 124 | " \"\"\"\n", 125 | " fig = plt.figure(dpi=125)\n", 126 | " x = list(df.columns)[3]\n", 127 | " y = list(df.columns)[5]\n", 128 | " fig.add_subplot(111).scatter(df[x],df[y], color='blue',edgecolor='k')\n", 129 | " plt.xlabel(x)\n", 130 | " plt.ylabel(y)\n", 131 | " plt.show(block=True)\n", 132 | "\n", 133 | " # ------------------------------- END OF YOUR MATPLOTLIB CODE -------------------------------\n", 134 | "\n", 135 | " # ------------------------------- Beginning of Matplotlib helper code -----------------------\n", 136 | "\n", 137 | " def draw_figure(canvas, figure):\n", 138 | " figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)\n", 139 | " figure_canvas_agg.draw()\n", 140 | " figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)\n", 141 | " return figure_canvas_agg\n", 142 | "\n", 143 | " # ------------------------------- Beginning of GUI CODE -------------------------------\n", 144 | "\n", 145 | " # define the window layout\n", 146 | " layout = [[sg.Text('Plot test')],\n", 147 | " [sg.Canvas(key='-CANVAS-', \n", 148 | " size=(750,520),\n", 149 | " pad=(25,25))],\n", 150 | " [sg.Button('Ok')]]\n", 151 | "\n", 152 | " # create the form and show it without the plot\n", 153 | " window = sg.Window('Plot', \n", 154 | " layout,\n", 155 | " size=(800,600),\n", 156 | " finalize=True, \n", 157 | " element_justification='center', \n", 158 | " font='Helvetica 18')\n", 159 | "\n", 160 | " # add the plot to the window\n", 161 | " fig_canvas_agg = draw_figure(window['-CANVAS-'].TKCanvas, fig)\n", 162 | "\n", 163 | " event, values = window.read()\n", 164 | "\n", 165 | " window.close()" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": 6, 171 | "metadata": {}, 172 | "outputs": [], 173 | "source": [ 174 | "def main(): \n", 175 | " # Reads the data\n", 176 | " df,data, header_list,fn=read_table()\n", 177 | "\n", 178 | " # Show data?\n", 179 | " show_prompt = sg.popup_yes_no('Show the dataset?')\n", 180 | " if show_prompt=='Yes':\n", 181 | " show_table(data,header_list,fn)\n", 182 | "\n", 183 | " # Show stats?\n", 184 | " stats_prompt = sg.popup_yes_no('Show the descriptive stats?')\n", 185 | " if stats_prompt=='Yes':\n", 186 | " show_stats(df)\n", 187 | "\n", 188 | " # Show a plot?\n", 189 | " plot_prompt = sg.popup_yes_no('Show a scatter plot?')\n", 190 | " if plot_prompt=='Yes':\n", 191 | " plot_fig(df)" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": 7, 197 | "metadata": {}, 198 | "outputs": [ 199 | { 200 | "data": { 201 | "image/png": "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\n", 202 | "text/plain": [ 203 | "
" 204 | ] 205 | }, 206 | "metadata": { 207 | "needs_background": "light" 208 | }, 209 | "output_type": "display_data" 210 | } 211 | ], 212 | "source": [ 213 | "if __name__ == '__main__':\n", 214 | " main()" 215 | ] 216 | } 217 | ], 218 | "metadata": { 219 | "kernelspec": { 220 | "display_name": "Python 3", 221 | "language": "python", 222 | "name": "python3" 223 | }, 224 | "language_info": { 225 | "codemirror_mode": { 226 | "name": "ipython", 227 | "version": 3 228 | }, 229 | "file_extension": ".py", 230 | "mimetype": "text/x-python", 231 | "name": "python", 232 | "nbconvert_exporter": "python", 233 | "pygments_lexer": "ipython3", 234 | "version": "3.7.0" 235 | } 236 | }, 237 | "nbformat": 4, 238 | "nbformat_minor": 4 239 | } 240 | -------------------------------------------------------------------------------- /SimpleDataFrame.py: -------------------------------------------------------------------------------- 1 | import PySimpleGUI as sg 2 | import pandas as pd 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 6 | 7 | def read_table(): 8 | 9 | sg.set_options(auto_size_buttons=True) 10 | filename = sg.popup_get_file( 11 | 'Dataset to read', 12 | title='Dataset to read', 13 | no_window=True, 14 | file_types=(("CSV Files", "*.csv"),("Text Files", "*.txt"))) 15 | # --- populate table with file contents --- # 16 | if filename == '': 17 | return 18 | 19 | data = [] 20 | header_list = [] 21 | colnames_prompt = sg.popup_yes_no('Does this file have column names already?') 22 | nan_prompt = sg.popup_yes_no('Drop NaN entries?') 23 | 24 | if filename is not None: 25 | fn = filename.split('/')[-1] 26 | try: 27 | if colnames_prompt == 'Yes': 28 | df = pd.read_csv(filename, sep=',', engine='python') 29 | # Uses the first row (which should be column names) as columns names 30 | header_list = list(df.columns) 31 | # Drops the first row in the table (otherwise the header names and the first row will be the same) 32 | data = df[1:].values.tolist() 33 | else: 34 | df = pd.read_csv(filename, sep=',', engine='python', header=None) 35 | # Creates columns names for each column ('column0', 'column1', etc) 36 | header_list = ['column' + str(x) for x in range(len(df.iloc[0]))] 37 | df.columns = header_list 38 | # read everything else into a list of rows 39 | data = df.values.tolist() 40 | # NaN drop? 41 | if nan_prompt=='Yes': 42 | df = df.dropna() 43 | 44 | return (df,data, header_list,fn) 45 | except: 46 | sg.popup_error('Error reading file') 47 | return 48 | 49 | def show_table(data, header_list, fn): 50 | layout = [ 51 | [sg.Table(values=data, 52 | headings=header_list, 53 | font='Helvetica', 54 | pad=(25,25), 55 | display_row_numbers=False, 56 | auto_size_columns=True, 57 | num_rows=min(25, len(data)))] 58 | ] 59 | 60 | window = sg.Window(fn, layout, grab_anywhere=False) 61 | event, values = window.read() 62 | window.close() 63 | 64 | def show_stats(df): 65 | stats = df.describe().T 66 | header_list = list(stats.columns) 67 | data = stats.values.tolist() 68 | for i,d in enumerate(data): 69 | d.insert(0,list(stats.index)[i]) 70 | header_list=['Feature']+header_list 71 | layout = [ 72 | [sg.Table(values=data, 73 | headings=header_list, 74 | font='Helvetica', 75 | pad=(10,10), 76 | display_row_numbers=False, 77 | auto_size_columns=True, 78 | num_rows=min(25, len(data)))] 79 | ] 80 | 81 | window = sg.Window("Statistics", layout, grab_anywhere=False) 82 | event, values = window.read() 83 | window.close() 84 | 85 | def plot_fig(df): 86 | """ 87 | Plots 88 | """ 89 | fig = plt.figure(dpi=100) 90 | x = list(df.columns)[3] 91 | y = list(df.columns)[5] 92 | fig.add_subplot(111).scatter(df[x],df[y], color='blue',edgecolor='k') 93 | plt.xlabel(x) 94 | plt.ylabel(y) 95 | 96 | # ------------------------------- END OF YOUR MATPLOTLIB CODE ------------------------------- 97 | 98 | # ------------------------------- Beginning of Matplotlib helper code ----------------------- 99 | 100 | def draw_figure(canvas, figure): 101 | figure_canvas_agg = FigureCanvasTkAgg(figure, canvas) 102 | figure_canvas_agg.draw() 103 | figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1) 104 | return figure_canvas_agg 105 | 106 | # ------------------------------- Beginning of GUI CODE ------------------------------- 107 | 108 | # define the window layout 109 | layout = [[sg.Text('Plot of {} vs. {}'.format(x,y))], 110 | [sg.Canvas(key='-CANVAS-', 111 | size=(700,500), 112 | pad=(15,15))], 113 | [sg.Button('Ok')]] 114 | 115 | # create the form and show it without the plot 116 | window = sg.Window('Plot', 117 | layout, 118 | size=(800,600), 119 | finalize=True, 120 | element_justification='center', 121 | font='Helvetica 18') 122 | 123 | # add the plot to the window 124 | fig_canvas_agg = draw_figure(window['-CANVAS-'].TKCanvas, fig) 125 | 126 | event, values = window.read() 127 | 128 | window.close() 129 | 130 | def main(): 131 | df,data, header_list,fn=read_table() 132 | 133 | # Show data? 134 | show_prompt = sg.popup_yes_no('Show the dataset?') 135 | if show_prompt=='Yes': 136 | show_table(data,header_list,fn) 137 | 138 | # Show stats? 139 | stats_prompt = sg.popup_yes_no('Show the descriptive stats?') 140 | if stats_prompt=='Yes': 141 | show_stats(df) 142 | 143 | # Show a plot? 144 | plot_prompt = sg.popup_yes_no('Show a scatter plot?') 145 | if plot_prompt=='Yes': 146 | plot_fig(df) 147 | 148 | # Executes main 149 | if __name__ == '__main__': 150 | main() -------------------------------------------------------------------------------- /TwoBarCharts.py: -------------------------------------------------------------------------------- 1 | import PySimpleGUI as sg 2 | import matplotlib.pyplot as plt 3 | from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 4 | # matplotlib.use('TkAgg') 5 | import numpy as np 6 | import matplotlib.pyplot as plt 7 | 8 | sg.theme('Light Brown 3') 9 | FIG_WIDTH = 5 10 | FIG_HEIGHT = 3 11 | 12 | def draw_figure(canvas, figure, loc=(0, 0)): 13 | figure_canvas_agg = FigureCanvasTkAgg(figure, canvas) 14 | figure_canvas_agg.draw() 15 | figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1) 16 | return figure_canvas_agg 17 | 18 | values_to_plot = (20, 35, 30, 35, 27) 19 | ind = np.arange(len(values_to_plot)) 20 | width = 0.4 21 | fig1 = plt.figure(figsize=(FIG_WIDTH, FIG_HEIGHT)) 22 | p1 = plt.bar(ind, values_to_plot, width) 23 | plt.ylabel('Y-Axis Values') 24 | plt.title('First bar chart') 25 | plt.xticks(ind, ['Item'+str(i) for i in ind]) 26 | plt.yticks(np.arange(0, 81, 10)) 27 | plt.legend((p1[0],), ('Data Group 1',)) 28 | figure_x, figure_y, figure_w, figure_h = fig1.bbox.bounds 29 | 30 | # define the window layout 31 | layout = [[sg.Text('Two bar charts', font='Times 18 bold')], 32 | [sg.Canvas(size=(figure_w, figure_h), key='-CANVAS-1')], 33 | [sg.Canvas(size=(figure_w, figure_h), key='-CANVAS-2')], 34 | [sg.OK(pad=((0, 0), 3), size=(4, 2))]] 35 | 36 | # create the form and show it without the plot 37 | window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI', 38 | layout, force_toplevel=True, finalize=True, 39 | element_justification='center',) 40 | 41 | # add the plot to the window 42 | fig_photo1 = draw_figure(window['-CANVAS-1'].TKCanvas, fig1) 43 | 44 | fig2 = plt.figure(figsize=(FIG_WIDTH, FIG_HEIGHT)) 45 | values_to_plot = (10, 55, 20, 31, 17, 65, 44) 46 | ind = np.arange(len(values_to_plot)) 47 | p2 = plt.bar(ind, values_to_plot, width) 48 | plt.ylabel('Y-Axis Values') 49 | plt.title('Second bar chart') 50 | plt.xticks(ind, ['Item'+str(i) for i in ind]) 51 | plt.yticks(np.arange(0, 81, 10)) 52 | plt.legend((p2[0],), ('Data Group 2',)) 53 | 54 | fig_photo2 = draw_figure(window['-CANVAS-2'].TKCanvas, fig2) 55 | 56 | # show it all again and get buttons 57 | event, values = window.read() 58 | window.close() -------------------------------------------------------------------------------- /data/Readme.md: -------------------------------------------------------------------------------- 1 | ## Data 2 | -------------------------------------------------------------------------------- /data/cars.csv: -------------------------------------------------------------------------------- 1 | "Miles_per_Gallon","Cylinders","Origin","Weight_in_lbs","Displacement","Acceleration","Name","Year","Horsepower" 2 | 18.0,8,"USA",3504,307.0,12.0,"chevrolet chevelle malibu","1970-01-01",130 3 | 15.0,8,"USA",3693,350.0,11.5,"buick skylark 320","1970-01-01",165 4 | 18.0,8,"USA",3436,318.0,11.0,"plymouth satellite","1970-01-01",150 5 | 16.0,8,"USA",3433,304.0,12.0,"amc rebel sst","1970-01-01",150 6 | 17.0,8,"USA",3449,302.0,10.5,"ford torino","1970-01-01",140 7 | 15.0,8,"USA",4341,429.0,10.0,"ford galaxie 500","1970-01-01",198 8 | 14.0,8,"USA",4354,454.0,9.0,"chevrolet impala","1970-01-01",220 9 | 14.0,8,"USA",4312,440.0,8.5,"plymouth fury iii","1970-01-01",215 10 | 14.0,8,"USA",4425,455.0,10.0,"pontiac catalina","1970-01-01",225 11 | 15.0,8,"USA",3850,390.0,8.5,"amc ambassador dpl","1970-01-01",190 12 | NA,4,"Europe",3090,133.0,17.5,"citroen ds-21 pallas","1970-01-01",115 13 | NA,8,"USA",4142,350.0,11.5,"chevrolet chevelle concours (sw)","1970-01-01",165 14 | NA,8,"USA",4034,351.0,11.0,"ford torino (sw)","1970-01-01",153 15 | NA,8,"USA",4166,383.0,10.5,"plymouth satellite (sw)","1970-01-01",175 16 | NA,8,"USA",3850,360.0,11.0,"amc rebel sst (sw)","1970-01-01",175 17 | 15.0,8,"USA",3563,383.0,10.0,"dodge challenger se","1970-01-01",170 18 | 14.0,8,"USA",3609,340.0,8.0,"plymouth 'cuda 340","1970-01-01",160 19 | NA,8,"USA",3353,302.0,8.0,"ford mustang boss 302","1970-01-01",140 20 | 15.0,8,"USA",3761,400.0,9.5,"chevrolet monte carlo","1970-01-01",150 21 | 14.0,8,"USA",3086,455.0,10.0,"buick estate wagon (sw)","1970-01-01",225 22 | 24.0,4,"Japan",2372,113.0,15.0,"toyota corona mark ii","1970-01-01",95 23 | 22.0,6,"USA",2833,198.0,15.5,"plymouth duster","1970-01-01",95 24 | 18.0,6,"USA",2774,199.0,15.5,"amc hornet","1970-01-01",97 25 | 21.0,6,"USA",2587,200.0,16.0,"ford maverick","1970-01-01",85 26 | 27.0,4,"Japan",2130,97.0,14.5,"datsun pl510","1970-01-01",88 27 | 26.0,4,"Europe",1835,97.0,20.5,"volkswagen 1131 deluxe sedan","1970-01-01",46 28 | 25.0,4,"Europe",2672,110.0,17.5,"peugeot 504","1970-01-01",87 29 | 24.0,4,"Europe",2430,107.0,14.5,"audi 100 ls","1970-01-01",90 30 | 25.0,4,"Europe",2375,104.0,17.5,"saab 99e","1970-01-01",95 31 | 26.0,4,"Europe",2234,121.0,12.5,"bmw 2002","1970-01-01",113 32 | 21.0,6,"USA",2648,199.0,15.0,"amc gremlin","1970-01-01",90 33 | 10.0,8,"USA",4615,360.0,14.0,"ford f250","1970-01-01",215 34 | 10.0,8,"USA",4376,307.0,15.0,"chevy c20","1970-01-01",200 35 | 11.0,8,"USA",4382,318.0,13.5,"dodge d200","1970-01-01",210 36 | 9.0,8,"USA",4732,304.0,18.5,"hi 1200d","1970-01-01",193 37 | 27.0,4,"Japan",2130,97.0,14.5,"datsun pl510","1971-01-01",88 38 | 28.0,4,"USA",2264,140.0,15.5,"chevrolet vega 2300","1971-01-01",90 39 | 25.0,4,"Japan",2228,113.0,14.0,"toyota corona","1971-01-01",95 40 | 25.0,4,"USA",2046,98.0,19.0,"ford pinto","1971-01-01",NA 41 | NA,4,"Europe",1978,97.0,20.0,"volkswagen super beetle 117","1971-01-01",48 42 | 19.0,6,"USA",2634,232.0,13.0,"amc gremlin","1971-01-01",100 43 | 16.0,6,"USA",3439,225.0,15.5,"plymouth satellite custom","1971-01-01",105 44 | 17.0,6,"USA",3329,250.0,15.5,"chevrolet chevelle malibu","1971-01-01",100 45 | 19.0,6,"USA",3302,250.0,15.5,"ford torino 500","1971-01-01",88 46 | 18.0,6,"USA",3288,232.0,15.5,"amc matador","1971-01-01",100 47 | 14.0,8,"USA",4209,350.0,12.0,"chevrolet impala","1971-01-01",165 48 | 14.0,8,"USA",4464,400.0,11.5,"pontiac catalina brougham","1971-01-01",175 49 | 14.0,8,"USA",4154,351.0,13.5,"ford galaxie 500","1971-01-01",153 50 | 14.0,8,"USA",4096,318.0,13.0,"plymouth fury iii","1971-01-01",150 51 | 12.0,8,"USA",4955,383.0,11.5,"dodge monaco (sw)","1971-01-01",180 52 | 13.0,8,"USA",4746,400.0,12.0,"ford country squire (sw)","1971-01-01",170 53 | 13.0,8,"USA",5140,400.0,12.0,"pontiac safari (sw)","1971-01-01",175 54 | 18.0,6,"USA",2962,258.0,13.5,"amc hornet sportabout (sw)","1971-01-01",110 55 | 22.0,4,"USA",2408,140.0,19.0,"chevrolet vega (sw)","1971-01-01",72 56 | 19.0,6,"USA",3282,250.0,15.0,"pontiac firebird","1971-01-01",100 57 | 18.0,6,"USA",3139,250.0,14.5,"ford mustang","1971-01-01",88 58 | 23.0,4,"USA",2220,122.0,14.0,"mercury capri 2000","1971-01-01",86 59 | 28.0,4,"Europe",2123,116.0,14.0,"opel 1900","1971-01-01",90 60 | 30.0,4,"Europe",2074,79.0,19.5,"peugeot 304","1971-01-01",70 61 | 30.0,4,"Europe",2065,88.0,14.5,"fiat 124b","1971-01-01",76 62 | 31.0,4,"Japan",1773,71.0,19.0,"toyota corolla 1200","1971-01-01",65 63 | 35.0,4,"Japan",1613,72.0,18.0,"datsun 1200","1971-01-01",69 64 | 27.0,4,"Europe",1834,97.0,19.0,"volkswagen model 111","1971-01-01",60 65 | 26.0,4,"USA",1955,91.0,20.5,"plymouth cricket","1971-01-01",70 66 | 24.0,4,"Japan",2278,113.0,15.5,"toyota corona hardtop","1972-01-01",95 67 | 25.0,4,"USA",2126,97.5,17.0,"dodge colt hardtop","1972-01-01",80 68 | 23.0,4,"Europe",2254,97.0,23.5,"volkswagen type 3","1972-01-01",54 69 | 20.0,4,"USA",2408,140.0,19.5,"chevrolet vega","1972-01-01",90 70 | 21.0,4,"USA",2226,122.0,16.5,"ford pinto runabout","1972-01-01",86 71 | 13.0,8,"USA",4274,350.0,12.0,"chevrolet impala","1972-01-01",165 72 | 14.0,8,"USA",4385,400.0,12.0,"pontiac catalina","1972-01-01",175 73 | 15.0,8,"USA",4135,318.0,13.5,"plymouth fury iii","1972-01-01",150 74 | 14.0,8,"USA",4129,351.0,13.0,"ford galaxie 500","1972-01-01",153 75 | 17.0,8,"USA",3672,304.0,11.5,"amc ambassador sst","1972-01-01",150 76 | 11.0,8,"USA",4633,429.0,11.0,"mercury marquis","1972-01-01",208 77 | 13.0,8,"USA",4502,350.0,13.5,"buick lesabre custom","1972-01-01",155 78 | 12.0,8,"USA",4456,350.0,13.5,"oldsmobile delta 88 royale","1972-01-01",160 79 | 13.0,8,"USA",4422,400.0,12.5,"chrysler newport royal","1972-01-01",190 80 | 19.0,3,"Japan",2330,70.0,13.5,"mazda rx2 coupe","1972-01-01",97 81 | 15.0,8,"USA",3892,304.0,12.5,"amc matador (sw)","1972-01-01",150 82 | 13.0,8,"USA",4098,307.0,14.0,"chevrolet chevelle concours (sw)","1972-01-01",130 83 | 13.0,8,"USA",4294,302.0,16.0,"ford gran torino (sw)","1972-01-01",140 84 | 14.0,8,"USA",4077,318.0,14.0,"plymouth satellite custom (sw)","1972-01-01",150 85 | 18.0,4,"Europe",2933,121.0,14.5,"volvo 145e (sw)","1972-01-01",112 86 | 22.0,4,"Europe",2511,121.0,18.0,"volkswagen 411 (sw)","1972-01-01",76 87 | 21.0,4,"Europe",2979,120.0,19.5,"peugeot 504 (sw)","1972-01-01",87 88 | 26.0,4,"Europe",2189,96.0,18.0,"renault 12 (sw)","1972-01-01",69 89 | 22.0,4,"USA",2395,122.0,16.0,"ford pinto (sw)","1972-01-01",86 90 | 28.0,4,"Japan",2288,97.0,17.0,"datsun 510 (sw)","1972-01-01",92 91 | 23.0,4,"Japan",2506,120.0,14.5,"toyouta corona mark ii (sw)","1972-01-01",97 92 | 28.0,4,"USA",2164,98.0,15.0,"dodge colt (sw)","1972-01-01",80 93 | 27.0,4,"Japan",2100,97.0,16.5,"toyota corolla 1600 (sw)","1972-01-01",88 94 | 13.0,8,"USA",4100,350.0,13.0,"buick century 350","1973-01-01",175 95 | 14.0,8,"USA",3672,304.0,11.5,"amc matador","1973-01-01",150 96 | 13.0,8,"USA",3988,350.0,13.0,"chevrolet malibu","1973-01-01",145 97 | 14.0,8,"USA",4042,302.0,14.5,"ford gran torino","1973-01-01",137 98 | 15.0,8,"USA",3777,318.0,12.5,"dodge coronet custom","1973-01-01",150 99 | 12.0,8,"USA",4952,429.0,11.5,"mercury marquis brougham","1973-01-01",198 100 | 13.0,8,"USA",4464,400.0,12.0,"chevrolet caprice classic","1973-01-01",150 101 | 13.0,8,"USA",4363,351.0,13.0,"ford ltd","1973-01-01",158 102 | 14.0,8,"USA",4237,318.0,14.5,"plymouth fury gran sedan","1973-01-01",150 103 | 13.0,8,"USA",4735,440.0,11.0,"chrysler new yorker brougham","1973-01-01",215 104 | 12.0,8,"USA",4951,455.0,11.0,"buick electra 225 custom","1973-01-01",225 105 | 13.0,8,"USA",3821,360.0,11.0,"amc ambassador brougham","1973-01-01",175 106 | 18.0,6,"USA",3121,225.0,16.5,"plymouth valiant","1973-01-01",105 107 | 16.0,6,"USA",3278,250.0,18.0,"chevrolet nova custom","1973-01-01",100 108 | 18.0,6,"USA",2945,232.0,16.0,"amc hornet","1973-01-01",100 109 | 18.0,6,"USA",3021,250.0,16.5,"ford maverick","1973-01-01",88 110 | 23.0,6,"USA",2904,198.0,16.0,"plymouth duster","1973-01-01",95 111 | 26.0,4,"Europe",1950,97.0,21.0,"volkswagen super beetle","1973-01-01",46 112 | 11.0,8,"USA",4997,400.0,14.0,"chevrolet impala","1973-01-01",150 113 | 12.0,8,"USA",4906,400.0,12.5,"ford country","1973-01-01",167 114 | 13.0,8,"USA",4654,360.0,13.0,"plymouth custom suburb","1973-01-01",170 115 | 12.0,8,"USA",4499,350.0,12.5,"oldsmobile vista cruiser","1973-01-01",180 116 | 18.0,6,"USA",2789,232.0,15.0,"amc gremlin","1973-01-01",100 117 | 20.0,4,"Japan",2279,97.0,19.0,"toyota carina","1973-01-01",88 118 | 21.0,4,"USA",2401,140.0,19.5,"chevrolet vega","1973-01-01",72 119 | 22.0,4,"Japan",2379,108.0,16.5,"datsun 610","1973-01-01",94 120 | 18.0,3,"Japan",2124,70.0,13.5,"maxda rx3","1973-01-01",90 121 | 19.0,4,"USA",2310,122.0,18.5,"ford pinto","1973-01-01",85 122 | 21.0,6,"USA",2472,155.0,14.0,"mercury capri v6","1973-01-01",107 123 | 26.0,4,"Europe",2265,98.0,15.5,"fiat 124 sport coupe","1973-01-01",90 124 | 15.0,8,"USA",4082,350.0,13.0,"chevrolet monte carlo s","1973-01-01",145 125 | 16.0,8,"USA",4278,400.0,9.5,"pontiac grand prix","1973-01-01",230 126 | 29.0,4,"Europe",1867,68.0,19.5,"fiat 128","1973-01-01",49 127 | 24.0,4,"Europe",2158,116.0,15.5,"opel manta","1973-01-01",75 128 | 20.0,4,"Europe",2582,114.0,14.0,"audi 100ls","1973-01-01",91 129 | 19.0,4,"Europe",2868,121.0,15.5,"volvo 144ea","1973-01-01",112 130 | 15.0,8,"USA",3399,318.0,11.0,"dodge dart custom","1973-01-01",150 131 | 24.0,4,"Europe",2660,121.0,14.0,"saab 99le","1973-01-01",110 132 | 20.0,6,"Japan",2807,156.0,13.5,"toyota mark ii","1973-01-01",122 133 | 11.0,8,"USA",3664,350.0,11.0,"oldsmobile omega","1973-01-01",180 134 | 20.0,6,"USA",3102,198.0,16.5,"plymouth duster","1974-01-01",95 135 | 21.0,6,"USA",2875,200.0,17.0,"ford maverick","1974-01-01",NA 136 | 19.0,6,"USA",2901,232.0,16.0,"amc hornet","1974-01-01",100 137 | 15.0,6,"USA",3336,250.0,17.0,"chevrolet nova","1974-01-01",100 138 | 31.0,4,"Japan",1950,79.0,19.0,"datsun b210","1974-01-01",67 139 | 26.0,4,"USA",2451,122.0,16.5,"ford pinto","1974-01-01",80 140 | 32.0,4,"Japan",1836,71.0,21.0,"toyota corolla 1200","1974-01-01",65 141 | 25.0,4,"USA",2542,140.0,17.0,"chevrolet vega","1974-01-01",75 142 | 16.0,6,"USA",3781,250.0,17.0,"chevrolet chevelle malibu classic","1974-01-01",100 143 | 16.0,6,"USA",3632,258.0,18.0,"amc matador","1974-01-01",110 144 | 18.0,6,"USA",3613,225.0,16.5,"plymouth satellite sebring","1974-01-01",105 145 | 16.0,8,"USA",4141,302.0,14.0,"ford gran torino","1974-01-01",140 146 | 13.0,8,"USA",4699,350.0,14.5,"buick century luxus (sw)","1974-01-01",150 147 | 14.0,8,"USA",4457,318.0,13.5,"dodge coronet custom (sw)","1974-01-01",150 148 | 14.0,8,"USA",4638,302.0,16.0,"ford gran torino (sw)","1974-01-01",140 149 | 14.0,8,"USA",4257,304.0,15.5,"amc matador (sw)","1974-01-01",150 150 | 29.0,4,"Europe",2219,98.0,16.5,"audi fox","1974-01-01",83 151 | 26.0,4,"Europe",1963,79.0,15.5,"volkswagen dasher","1974-01-01",67 152 | 26.0,4,"Europe",2300,97.0,14.5,"opel manta","1974-01-01",78 153 | 31.0,4,"Japan",1649,76.0,16.5,"toyota corona","1974-01-01",52 154 | 32.0,4,"Japan",2003,83.0,19.0,"datsun 710","1974-01-01",61 155 | 28.0,4,"USA",2125,90.0,14.5,"dodge colt","1974-01-01",75 156 | 24.0,4,"Europe",2108,90.0,15.5,"fiat 128","1974-01-01",75 157 | 26.0,4,"Europe",2246,116.0,14.0,"fiat 124 tc","1974-01-01",75 158 | 24.0,4,"Japan",2489,120.0,15.0,"honda civic","1974-01-01",97 159 | 26.0,4,"Japan",2391,108.0,15.5,"subaru","1974-01-01",93 160 | 31.0,4,"Europe",2000,79.0,16.0,"fiat x1.9","1974-01-01",67 161 | 19.0,6,"USA",3264,225.0,16.0,"plymouth valiant custom","1975-01-01",95 162 | 18.0,6,"USA",3459,250.0,16.0,"chevrolet nova","1975-01-01",105 163 | 15.0,6,"USA",3432,250.0,21.0,"mercury monarch","1975-01-01",72 164 | 15.0,6,"USA",3158,250.0,19.5,"ford maverick","1975-01-01",72 165 | 16.0,8,"USA",4668,400.0,11.5,"pontiac catalina","1975-01-01",170 166 | 15.0,8,"USA",4440,350.0,14.0,"chevrolet bel air","1975-01-01",145 167 | 16.0,8,"USA",4498,318.0,14.5,"plymouth grand fury","1975-01-01",150 168 | 14.0,8,"USA",4657,351.0,13.5,"ford ltd","1975-01-01",148 169 | 17.0,6,"USA",3907,231.0,21.0,"buick century","1975-01-01",110 170 | 16.0,6,"USA",3897,250.0,18.5,"chevroelt chevelle malibu","1975-01-01",105 171 | 15.0,6,"USA",3730,258.0,19.0,"amc matador","1975-01-01",110 172 | 18.0,6,"USA",3785,225.0,19.0,"plymouth fury","1975-01-01",95 173 | 21.0,6,"USA",3039,231.0,15.0,"buick skyhawk","1975-01-01",110 174 | 20.0,8,"USA",3221,262.0,13.5,"chevrolet monza 2+2","1975-01-01",110 175 | 13.0,8,"USA",3169,302.0,12.0,"ford mustang ii","1975-01-01",129 176 | 29.0,4,"Japan",2171,97.0,16.0,"toyota corolla","1975-01-01",75 177 | 23.0,4,"USA",2639,140.0,17.0,"ford pinto","1975-01-01",83 178 | 20.0,6,"USA",2914,232.0,16.0,"amc gremlin","1975-01-01",100 179 | 23.0,4,"USA",2592,140.0,18.5,"pontiac astro","1975-01-01",78 180 | 24.0,4,"Japan",2702,134.0,13.5,"toyota corona","1975-01-01",96 181 | 25.0,4,"Europe",2223,90.0,16.5,"volkswagen dasher","1975-01-01",71 182 | 24.0,4,"Japan",2545,119.0,17.0,"datsun 710","1975-01-01",97 183 | 18.0,6,"USA",2984,171.0,14.5,"ford pinto","1975-01-01",97 184 | 29.0,4,"Europe",1937,90.0,14.0,"volkswagen rabbit","1975-01-01",70 185 | 19.0,6,"USA",3211,232.0,17.0,"amc pacer","1975-01-01",90 186 | 23.0,4,"Europe",2694,115.0,15.0,"audi 100ls","1975-01-01",95 187 | 23.0,4,"Europe",2957,120.0,17.0,"peugeot 504","1975-01-01",88 188 | 22.0,4,"Europe",2945,121.0,14.5,"volvo 244dl","1975-01-01",98 189 | 25.0,4,"Europe",2671,121.0,13.5,"saab 99le","1975-01-01",115 190 | 33.0,4,"Japan",1795,91.0,17.5,"honda civic cvcc","1975-01-01",53 191 | 28.0,4,"Europe",2464,107.0,15.5,"fiat 131","1976-01-01",86 192 | 25.0,4,"Europe",2220,116.0,16.9,"opel 1900","1976-01-01",81 193 | 25.0,4,"USA",2572,140.0,14.9,"capri ii","1976-01-01",92 194 | 26.0,4,"USA",2255,98.0,17.7,"dodge colt","1976-01-01",79 195 | 27.0,4,"Europe",2202,101.0,15.3,"renault 12tl","1976-01-01",83 196 | 17.5,8,"USA",4215,305.0,13.0,"chevrolet chevelle malibu classic","1976-01-01",140 197 | 16.0,8,"USA",4190,318.0,13.0,"dodge coronet brougham","1976-01-01",150 198 | 15.5,8,"USA",3962,304.0,13.9,"amc matador","1976-01-01",120 199 | 14.5,8,"USA",4215,351.0,12.8,"ford gran torino","1976-01-01",152 200 | 22.0,6,"USA",3233,225.0,15.4,"plymouth valiant","1976-01-01",100 201 | 22.0,6,"USA",3353,250.0,14.5,"chevrolet nova","1976-01-01",105 202 | 24.0,6,"USA",3012,200.0,17.6,"ford maverick","1976-01-01",81 203 | 22.5,6,"USA",3085,232.0,17.6,"amc hornet","1976-01-01",90 204 | 29.0,4,"USA",2035,85.0,22.2,"chevrolet chevette","1976-01-01",52 205 | 24.5,4,"USA",2164,98.0,22.1,"chevrolet woody","1976-01-01",60 206 | 29.0,4,"Europe",1937,90.0,14.2,"vw rabbit","1976-01-01",70 207 | 33.0,4,"Japan",1795,91.0,17.4,"honda civic","1976-01-01",53 208 | 20.0,6,"USA",3651,225.0,17.7,"dodge aspen se","1976-01-01",100 209 | 18.0,6,"USA",3574,250.0,21.0,"ford granada ghia","1976-01-01",78 210 | 18.5,6,"USA",3645,250.0,16.2,"pontiac ventura sj","1976-01-01",110 211 | 17.5,6,"USA",3193,258.0,17.8,"amc pacer d/l","1976-01-01",95 212 | 29.5,4,"Europe",1825,97.0,12.2,"volkswagen rabbit","1976-01-01",71 213 | 32.0,4,"Japan",1990,85.0,17.0,"datsun b-210","1976-01-01",70 214 | 28.0,4,"Japan",2155,97.0,16.4,"toyota corolla","1976-01-01",75 215 | 26.5,4,"USA",2565,140.0,13.6,"ford pinto","1976-01-01",72 216 | 20.0,4,"Europe",3150,130.0,15.7,"volvo 245","1976-01-01",102 217 | 13.0,8,"USA",3940,318.0,13.2,"plymouth volare premier v8","1976-01-01",150 218 | 19.0,4,"Europe",3270,120.0,21.9,"peugeot 504","1976-01-01",88 219 | 19.0,6,"Japan",2930,156.0,15.5,"toyota mark ii","1976-01-01",108 220 | 16.5,6,"Europe",3820,168.0,16.7,"mercedes-benz 280s","1976-01-01",120 221 | 16.5,8,"USA",4380,350.0,12.1,"cadillac seville","1976-01-01",180 222 | 13.0,8,"USA",4055,350.0,12.0,"chevy c10","1976-01-01",145 223 | 13.0,8,"USA",3870,302.0,15.0,"ford f108","1976-01-01",130 224 | 13.0,8,"USA",3755,318.0,14.0,"dodge d100","1976-01-01",150 225 | 31.5,4,"Japan",2045,98.0,18.5,"honda Accelerationord cvcc","1977-01-01",68 226 | 30.0,4,"USA",2155,111.0,14.8,"buick opel isuzu deluxe","1977-01-01",80 227 | 36.0,4,"Europe",1825,79.0,18.6,"renault 5 gtl","1977-01-01",58 228 | 25.5,4,"USA",2300,122.0,15.5,"plymouth arrow gs","1977-01-01",96 229 | 33.5,4,"Japan",1945,85.0,16.8,"datsun f-10 hatchback","1977-01-01",70 230 | 17.5,8,"USA",3880,305.0,12.5,"chevrolet caprice classic","1977-01-01",145 231 | 17.0,8,"USA",4060,260.0,19.0,"oldsmobile cutlass supreme","1977-01-01",110 232 | 15.5,8,"USA",4140,318.0,13.7,"dodge monaco brougham","1977-01-01",145 233 | 15.0,8,"USA",4295,302.0,14.9,"mercury cougar brougham","1977-01-01",130 234 | 17.5,6,"USA",3520,250.0,16.4,"chevrolet concours","1977-01-01",110 235 | 20.5,6,"USA",3425,231.0,16.9,"buick skylark","1977-01-01",105 236 | 19.0,6,"USA",3630,225.0,17.7,"plymouth volare custom","1977-01-01",100 237 | 18.5,6,"USA",3525,250.0,19.0,"ford granada","1977-01-01",98 238 | 16.0,8,"USA",4220,400.0,11.1,"pontiac grand prix lj","1977-01-01",180 239 | 15.5,8,"USA",4165,350.0,11.4,"chevrolet monte carlo landau","1977-01-01",170 240 | 15.5,8,"USA",4325,400.0,12.2,"chrysler cordoba","1977-01-01",190 241 | 16.0,8,"USA",4335,351.0,14.5,"ford thunderbird","1977-01-01",149 242 | 29.0,4,"Europe",1940,97.0,14.5,"volkswagen rabbit custom","1977-01-01",78 243 | 24.5,4,"USA",2740,151.0,16.0,"pontiac sunbird coupe","1977-01-01",88 244 | 26.0,4,"Japan",2265,97.0,18.2,"toyota corolla liftback","1977-01-01",75 245 | 25.5,4,"USA",2755,140.0,15.8,"ford mustang ii 2+2","1977-01-01",89 246 | 30.5,4,"USA",2051,98.0,17.0,"chevrolet chevette","1977-01-01",63 247 | 33.5,4,"USA",2075,98.0,15.9,"dodge colt m/m","1977-01-01",83 248 | 30.0,4,"Japan",1985,97.0,16.4,"subaru dl","1977-01-01",67 249 | 30.5,4,"Europe",2190,97.0,14.1,"volkswagen dasher","1977-01-01",78 250 | 22.0,6,"Japan",2815,146.0,14.5,"datsun 810","1977-01-01",97 251 | 21.5,4,"Europe",2600,121.0,12.8,"bmw 320i","1977-01-01",110 252 | 21.5,3,"Japan",2720,80.0,13.5,"mazda rx-4","1977-01-01",110 253 | 43.1,4,"Europe",1985,90.0,21.5,"volkswagen rabbit custom diesel","1978-01-01",48 254 | 36.1,4,"USA",1800,98.0,14.4,"ford fiesta","1978-01-01",66 255 | 32.8,4,"Japan",1985,78.0,19.4,"mazda glc deluxe","1978-01-01",52 256 | 39.4,4,"Japan",2070,85.0,18.6,"datsun b210 gx","1978-01-01",70 257 | 36.1,4,"Japan",1800,91.0,16.4,"honda civic cvcc","1978-01-01",60 258 | 19.9,8,"USA",3365,260.0,15.5,"oldsmobile cutlass salon brougham","1978-01-01",110 259 | 19.4,8,"USA",3735,318.0,13.2,"dodge diplomat","1978-01-01",140 260 | 20.2,8,"USA",3570,302.0,12.8,"mercury monarch ghia","1978-01-01",139 261 | 19.2,6,"USA",3535,231.0,19.2,"pontiac phoenix lj","1978-01-01",105 262 | 20.5,6,"USA",3155,200.0,18.2,"chevrolet malibu","1978-01-01",95 263 | 20.2,6,"USA",2965,200.0,15.8,"ford fairmont (auto)","1978-01-01",85 264 | 25.1,4,"USA",2720,140.0,15.4,"ford fairmont (man)","1978-01-01",88 265 | 20.5,6,"USA",3430,225.0,17.2,"plymouth volare","1978-01-01",100 266 | 19.4,6,"USA",3210,232.0,17.2,"amc concord","1978-01-01",90 267 | 20.6,6,"USA",3380,231.0,15.8,"buick century special","1978-01-01",105 268 | 20.8,6,"USA",3070,200.0,16.7,"mercury zephyr","1978-01-01",85 269 | 18.6,6,"USA",3620,225.0,18.7,"dodge aspen","1978-01-01",110 270 | 18.1,6,"USA",3410,258.0,15.1,"amc concord d/l","1978-01-01",120 271 | 19.2,8,"USA",3425,305.0,13.2,"chevrolet monte carlo landau","1978-01-01",145 272 | 17.7,6,"USA",3445,231.0,13.4,"buick regal sport coupe (turbo)","1978-01-01",165 273 | 18.1,8,"USA",3205,302.0,11.2,"ford futura","1978-01-01",139 274 | 17.5,8,"USA",4080,318.0,13.7,"dodge magnum xe","1978-01-01",140 275 | 30.0,4,"USA",2155,98.0,16.5,"chevrolet chevette","1978-01-01",68 276 | 27.5,4,"Japan",2560,134.0,14.2,"toyota corona","1978-01-01",95 277 | 27.2,4,"Japan",2300,119.0,14.7,"datsun 510","1978-01-01",97 278 | 30.9,4,"USA",2230,105.0,14.5,"dodge omni","1978-01-01",75 279 | 21.1,4,"Japan",2515,134.0,14.8,"toyota celica gt liftback","1978-01-01",95 280 | 23.2,4,"USA",2745,156.0,16.7,"plymouth sapporo","1978-01-01",105 281 | 23.8,4,"USA",2855,151.0,17.6,"oldsmobile starfire sx","1978-01-01",85 282 | 23.9,4,"Japan",2405,119.0,14.9,"datsun 200-sx","1978-01-01",97 283 | 20.3,5,"Europe",2830,131.0,15.9,"audi 5000","1978-01-01",103 284 | 17.0,6,"Europe",3140,163.0,13.6,"volvo 264gl","1978-01-01",125 285 | 21.6,4,"Europe",2795,121.0,15.7,"saab 99gle","1978-01-01",115 286 | 16.2,6,"Europe",3410,163.0,15.8,"peugeot 604sl","1978-01-01",133 287 | 31.5,4,"Europe",1990,89.0,14.9,"volkswagen scirocco","1978-01-01",71 288 | 29.5,4,"Japan",2135,98.0,16.6,"honda Accelerationord lx","1978-01-01",68 289 | 21.5,6,"USA",3245,231.0,15.4,"pontiac lemans v6","1979-01-01",115 290 | 19.8,6,"USA",2990,200.0,18.2,"mercury zephyr 6","1979-01-01",85 291 | 22.3,4,"USA",2890,140.0,17.3,"ford fairmont 4","1979-01-01",88 292 | 20.2,6,"USA",3265,232.0,18.2,"amc concord dl 6","1979-01-01",90 293 | 20.6,6,"USA",3360,225.0,16.6,"dodge aspen 6","1979-01-01",110 294 | 17.0,8,"USA",3840,305.0,15.4,"chevrolet caprice classic","1979-01-01",130 295 | 17.6,8,"USA",3725,302.0,13.4,"ford ltd landau","1979-01-01",129 296 | 16.5,8,"USA",3955,351.0,13.2,"mercury grand marquis","1979-01-01",138 297 | 18.2,8,"USA",3830,318.0,15.2,"dodge st. regis","1979-01-01",135 298 | 16.9,8,"USA",4360,350.0,14.9,"buick estate wagon (sw)","1979-01-01",155 299 | 15.5,8,"USA",4054,351.0,14.3,"ford country squire (sw)","1979-01-01",142 300 | 19.2,8,"USA",3605,267.0,15.0,"chevrolet malibu classic (sw)","1979-01-01",125 301 | 18.5,8,"USA",3940,360.0,13.0,"chrysler lebaron town @ country (sw)","1979-01-01",150 302 | 31.9,4,"Europe",1925,89.0,14.0,"vw rabbit custom","1979-01-01",71 303 | 34.1,4,"Japan",1975,86.0,15.2,"maxda glc deluxe","1979-01-01",65 304 | 35.7,4,"USA",1915,98.0,14.4,"dodge colt hatchback custom","1979-01-01",80 305 | 27.4,4,"USA",2670,121.0,15.0,"amc spirit dl","1979-01-01",80 306 | 25.4,5,"Europe",3530,183.0,20.1,"mercedes benz 300d","1979-01-01",77 307 | 23.0,8,"USA",3900,350.0,17.4,"cadillac eldorado","1979-01-01",125 308 | 27.2,4,"Europe",3190,141.0,24.8,"peugeot 504","1979-01-01",71 309 | 23.9,8,"USA",3420,260.0,22.2,"oldsmobile cutlass salon brougham","1979-01-01",90 310 | 34.2,4,"USA",2200,105.0,13.2,"plymouth horizon","1979-01-01",70 311 | 34.5,4,"USA",2150,105.0,14.9,"plymouth horizon tc3","1979-01-01",70 312 | 31.8,4,"Japan",2020,85.0,19.2,"datsun 210","1979-01-01",65 313 | 37.3,4,"Europe",2130,91.0,14.7,"fiat strada custom","1979-01-01",69 314 | 28.4,4,"USA",2670,151.0,16.0,"buick skylark limited","1979-01-01",90 315 | 28.8,6,"USA",2595,173.0,11.3,"chevrolet citation","1979-01-01",115 316 | 26.8,6,"USA",2700,173.0,12.9,"oldsmobile omega brougham","1979-01-01",115 317 | 33.5,4,"USA",2556,151.0,13.2,"pontiac phoenix","1979-01-01",90 318 | 41.5,4,"Europe",2144,98.0,14.7,"vw rabbit","1980-01-01",76 319 | 38.1,4,"Japan",1968,89.0,18.8,"toyota corolla tercel","1980-01-01",60 320 | 32.1,4,"USA",2120,98.0,15.5,"chevrolet chevette","1980-01-01",70 321 | 37.2,4,"Japan",2019,86.0,16.4,"datsun 310","1980-01-01",65 322 | 28.0,4,"USA",2678,151.0,16.5,"chevrolet citation","1980-01-01",90 323 | 26.4,4,"USA",2870,140.0,18.1,"ford fairmont","1980-01-01",88 324 | 24.3,4,"USA",3003,151.0,20.1,"amc concord","1980-01-01",90 325 | 19.1,6,"USA",3381,225.0,18.7,"dodge aspen","1980-01-01",90 326 | 34.3,4,"Europe",2188,97.0,15.8,"audi 4000","1980-01-01",78 327 | 29.8,4,"Japan",2711,134.0,15.5,"toyota corona liftback","1980-01-01",90 328 | 31.3,4,"Japan",2542,120.0,17.5,"mazda 626","1980-01-01",75 329 | 37.0,4,"Japan",2434,119.0,15.0,"datsun 510 hatchback","1980-01-01",92 330 | 32.2,4,"Japan",2265,108.0,15.2,"toyota corolla","1980-01-01",75 331 | 46.6,4,"Japan",2110,86.0,17.9,"mazda glc","1980-01-01",65 332 | 27.9,4,"USA",2800,156.0,14.4,"dodge colt","1980-01-01",105 333 | 40.8,4,"Japan",2110,85.0,19.2,"datsun 210","1980-01-01",65 334 | 44.3,4,"Europe",2085,90.0,21.7,"vw rabbit c (diesel)","1980-01-01",48 335 | 43.4,4,"Europe",2335,90.0,23.7,"vw dasher (diesel)","1980-01-01",48 336 | 36.4,5,"Europe",2950,121.0,19.9,"audi 5000s (diesel)","1980-01-01",67 337 | 30.0,4,"Europe",3250,146.0,21.8,"mercedes-benz 240d","1980-01-01",67 338 | 44.6,4,"Japan",1850,91.0,13.8,"honda civic 1500 gl","1980-01-01",67 339 | 40.9,4,"Europe",1835,85.0,17.3,"renault lecar deluxe","1980-01-01",NA 340 | 33.8,4,"Japan",2145,97.0,18.0,"subaru dl","1980-01-01",67 341 | 29.8,4,"Europe",1845,89.0,15.3,"vokswagen rabbit","1980-01-01",62 342 | 32.7,6,"Japan",2910,168.0,11.4,"datsun 280-zx","1980-01-01",132 343 | 23.7,3,"Japan",2420,70.0,12.5,"mazda rx-7 gs","1980-01-01",100 344 | 35.0,4,"Europe",2500,122.0,15.1,"triumph tr7 coupe","1980-01-01",88 345 | 23.6,4,"USA",2905,140.0,14.3,"ford mustang cobra","1980-01-01",NA 346 | 32.4,4,"Japan",2290,107.0,17.0,"honda Accelerationord","1980-01-01",72 347 | 27.2,4,"USA",2490,135.0,15.7,"plymouth reliant","1982-01-01",84 348 | 26.6,4,"USA",2635,151.0,16.4,"buick skylark","1982-01-01",84 349 | 25.8,4,"USA",2620,156.0,14.4,"dodge aries wagon (sw)","1982-01-01",92 350 | 23.5,6,"USA",2725,173.0,12.6,"chevrolet citation","1982-01-01",110 351 | 30.0,4,"USA",2385,135.0,12.9,"plymouth reliant","1982-01-01",84 352 | 39.1,4,"Japan",1755,79.0,16.9,"toyota starlet","1982-01-01",58 353 | 39.0,4,"USA",1875,86.0,16.4,"plymouth champ","1982-01-01",64 354 | 35.1,4,"Japan",1760,81.0,16.1,"honda civic 1300","1982-01-01",60 355 | 32.3,4,"Japan",2065,97.0,17.8,"subaru","1982-01-01",67 356 | 37.0,4,"Japan",1975,85.0,19.4,"datsun 210","1982-01-01",65 357 | 37.7,4,"Japan",2050,89.0,17.3,"toyota tercel","1982-01-01",62 358 | 34.1,4,"Japan",1985,91.0,16.0,"mazda glc 4","1982-01-01",68 359 | 34.7,4,"USA",2215,105.0,14.9,"plymouth horizon 4","1982-01-01",63 360 | 34.4,4,"USA",2045,98.0,16.2,"ford escort 4w","1982-01-01",65 361 | 29.9,4,"USA",2380,98.0,20.7,"ford escort 2h","1982-01-01",65 362 | 33.0,4,"Europe",2190,105.0,14.2,"volkswagen jetta","1982-01-01",74 363 | 34.5,4,"Europe",2320,100.0,15.8,"renault 18i","1982-01-01",NA 364 | 33.7,4,"Japan",2210,107.0,14.4,"honda prelude","1982-01-01",75 365 | 32.4,4,"Japan",2350,108.0,16.8,"toyota corolla","1982-01-01",75 366 | 32.9,4,"Japan",2615,119.0,14.8,"datsun 200sx","1982-01-01",100 367 | 31.6,4,"Japan",2635,120.0,18.3,"mazda 626","1982-01-01",74 368 | 28.1,4,"Europe",3230,141.0,20.4,"peugeot 505s turbo diesel","1982-01-01",80 369 | NA,4,"Europe",2800,121.0,15.4,"saab 900s","1982-01-01",110 370 | 30.7,6,"Europe",3160,145.0,19.6,"volvo diesel","1982-01-01",76 371 | 25.4,6,"Japan",2900,168.0,12.6,"toyota cressida","1982-01-01",116 372 | 24.2,6,"Japan",2930,146.0,13.8,"datsun 810 maxima","1982-01-01",120 373 | 22.4,6,"USA",3415,231.0,15.8,"buick century","1982-01-01",110 374 | 26.6,8,"USA",3725,350.0,19.0,"oldsmobile cutlass ls","1982-01-01",105 375 | 20.2,6,"USA",3060,200.0,17.1,"ford granada gl","1982-01-01",88 376 | 17.6,6,"USA",3465,225.0,16.6,"chrysler lebaron salon","1982-01-01",85 377 | 28.0,4,"USA",2605,112.0,19.6,"chevrolet cavalier","1982-01-01",88 378 | 27.0,4,"USA",2640,112.0,18.6,"chevrolet cavalier wagon","1982-01-01",88 379 | 34.0,4,"USA",2395,112.0,18.0,"chevrolet cavalier 2-door","1982-01-01",88 380 | 31.0,4,"USA",2575,112.0,16.2,"pontiac j2000 se hatchback","1982-01-01",85 381 | 29.0,4,"USA",2525,135.0,16.0,"dodge aries se","1982-01-01",84 382 | 27.0,4,"USA",2735,151.0,18.0,"pontiac phoenix","1982-01-01",90 383 | 24.0,4,"USA",2865,140.0,16.4,"ford fairmont futura","1982-01-01",92 384 | 23.0,4,"USA",3035,151.0,20.5,"amc concord dl","1982-01-01",NA 385 | 36.0,4,"Europe",1980,105.0,15.3,"volkswagen rabbit l","1982-01-01",74 386 | 37.0,4,"Japan",2025,91.0,18.2,"mazda glc custom l","1982-01-01",68 387 | 31.0,4,"Japan",1970,91.0,17.6,"mazda glc custom","1982-01-01",68 388 | 38.0,4,"USA",2125,105.0,14.7,"plymouth horizon miser","1982-01-01",63 389 | 36.0,4,"USA",2125,98.0,17.3,"mercury lynx l","1982-01-01",70 390 | 36.0,4,"Japan",2160,120.0,14.5,"nissan stanza xe","1982-01-01",88 391 | 36.0,4,"Japan",2205,107.0,14.5,"honda Accelerationord","1982-01-01",75 392 | 34.0,4,"Japan",2245,108.0,16.9,"toyota corolla","1982-01-01",70 393 | 38.0,4,"Japan",1965,91.0,15.0,"honda civic","1982-01-01",67 394 | 32.0,4,"Japan",1965,91.0,15.7,"honda civic (auto)","1982-01-01",67 395 | 38.0,4,"Japan",1995,91.0,16.2,"datsun 310 gx","1982-01-01",67 396 | 25.0,6,"USA",2945,181.0,16.4,"buick century limited","1982-01-01",110 397 | 38.0,6,"USA",3015,262.0,17.0,"oldsmobile cutlass ciera (diesel)","1982-01-01",85 398 | 26.0,4,"USA",2585,156.0,14.5,"chrysler lebaron medallion","1982-01-01",92 399 | 22.0,6,"USA",2835,232.0,14.7,"ford granada l","1982-01-01",112 400 | 32.0,4,"Japan",2665,144.0,13.9,"toyota celica gt","1982-01-01",96 401 | 36.0,4,"USA",2370,135.0,13.0,"dodge charger 2.2","1982-01-01",84 402 | 27.0,4,"USA",2950,151.0,17.3,"chevrolet camaro","1982-01-01",90 403 | 27.0,4,"USA",2790,140.0,15.6,"ford mustang gl","1982-01-01",86 404 | 44.0,4,"Europe",2130,97.0,24.6,"vw pickup","1982-01-01",52 405 | 32.0,4,"USA",2295,135.0,11.6,"dodge rampage","1982-01-01",84 406 | 28.0,4,"USA",2625,120.0,18.6,"ford ranger","1982-01-01",79 407 | 31.0,4,"USA",2720,119.0,19.4,"chevy s-10","1982-01-01",82 408 | -------------------------------------------------------------------------------- /data/pima-indians-diabetes.csv: -------------------------------------------------------------------------------- 1 | pregnant,Plasma glucose,Diastolic BP,Triceps skin fold thickness,Serum insulin,BMI,Diabetes pedigree function,Age,Class variable 2 | 6,148,72,35,0,33.6,0.627,50,1 3 | 1,85,66,29,0,26.6,0.351,31,0 4 | 8,183,64,0,0,23.3,0.672,32,1 5 | 1,89,66,23,94,28.1,0.167,21,0 6 | 0,137,40,35,168,43.1,2.288,33,1 7 | 5,116,74,0,0,25.6,0.201,30,0 8 | 3,78,50,32,88,31.0,0.248,26,1 9 | 10,115,0,0,0,35.3,0.134,29,0 10 | 2,197,70,45,543,30.5,0.158,53,1 11 | 8,125,96,0,0,0.0,0.232,54,1 12 | 4,110,92,0,0,37.6,0.191,30,0 13 | 10,168,74,0,0,38.0,0.537,34,1 14 | 10,139,80,0,0,27.1,1.441,57,0 15 | 1,189,60,23,846,30.1,0.398,59,1 16 | 5,166,72,19,175,25.8,0.587,51,1 17 | 7,100,0,0,0,30.0,0.484,32,1 18 | 0,118,84,47,230,45.8,0.551,31,1 19 | 7,107,74,0,0,29.6,0.254,31,1 20 | 1,103,30,38,83,43.3,0.183,33,0 21 | 1,115,70,30,96,34.6,0.529,32,1 22 | 3,126,88,41,235,39.3,0.704,27,0 23 | 8,99,84,0,0,35.4,0.388,50,0 24 | 7,196,90,0,0,39.8,0.451,41,1 25 | 9,119,80,35,0,29.0,0.263,29,1 26 | 11,143,94,33,146,36.6,0.254,51,1 27 | 10,125,70,26,115,31.1,0.205,41,1 28 | 7,147,76,0,0,39.4,0.257,43,1 29 | 1,97,66,15,140,23.2,0.487,22,0 30 | 13,145,82,19,110,22.2,0.245,57,0 31 | 5,117,92,0,0,34.1,0.337,38,0 32 | 5,109,75,26,0,36.0,0.546,60,0 33 | 3,158,76,36,245,31.6,0.851,28,1 34 | 3,88,58,11,54,24.8,0.267,22,0 35 | 6,92,92,0,0,19.9,0.188,28,0 36 | 10,122,78,31,0,27.6,0.512,45,0 37 | 4,103,60,33,192,24.0,0.966,33,0 38 | 11,138,76,0,0,33.2,0.420,35,0 39 | 9,102,76,37,0,32.9,0.665,46,1 40 | 2,90,68,42,0,38.2,0.503,27,1 41 | 4,111,72,47,207,37.1,1.390,56,1 42 | 3,180,64,25,70,34.0,0.271,26,0 43 | 7,133,84,0,0,40.2,0.696,37,0 44 | 7,106,92,18,0,22.7,0.235,48,0 45 | 9,171,110,24,240,45.4,0.721,54,1 46 | 7,159,64,0,0,27.4,0.294,40,0 47 | 0,180,66,39,0,42.0,1.893,25,1 48 | 1,146,56,0,0,29.7,0.564,29,0 49 | 2,71,70,27,0,28.0,0.586,22,0 50 | 7,103,66,32,0,39.1,0.344,31,1 51 | 7,105,0,0,0,0.0,0.305,24,0 52 | 1,103,80,11,82,19.4,0.491,22,0 53 | 1,101,50,15,36,24.2,0.526,26,0 54 | 5,88,66,21,23,24.4,0.342,30,0 55 | 8,176,90,34,300,33.7,0.467,58,1 56 | 7,150,66,42,342,34.7,0.718,42,0 57 | 1,73,50,10,0,23.0,0.248,21,0 58 | 7,187,68,39,304,37.7,0.254,41,1 59 | 0,100,88,60,110,46.8,0.962,31,0 60 | 0,146,82,0,0,40.5,1.781,44,0 61 | 0,105,64,41,142,41.5,0.173,22,0 62 | 2,84,0,0,0,0.0,0.304,21,0 63 | 8,133,72,0,0,32.9,0.270,39,1 64 | 5,44,62,0,0,25.0,0.587,36,0 65 | 2,141,58,34,128,25.4,0.699,24,0 66 | 7,114,66,0,0,32.8,0.258,42,1 67 | 5,99,74,27,0,29.0,0.203,32,0 68 | 0,109,88,30,0,32.5,0.855,38,1 69 | 2,109,92,0,0,42.7,0.845,54,0 70 | 1,95,66,13,38,19.6,0.334,25,0 71 | 4,146,85,27,100,28.9,0.189,27,0 72 | 2,100,66,20,90,32.9,0.867,28,1 73 | 5,139,64,35,140,28.6,0.411,26,0 74 | 13,126,90,0,0,43.4,0.583,42,1 75 | 4,129,86,20,270,35.1,0.231,23,0 76 | 1,79,75,30,0,32.0,0.396,22,0 77 | 1,0,48,20,0,24.7,0.140,22,0 78 | 7,62,78,0,0,32.6,0.391,41,0 79 | 5,95,72,33,0,37.7,0.370,27,0 80 | 0,131,0,0,0,43.2,0.270,26,1 81 | 2,112,66,22,0,25.0,0.307,24,0 82 | 3,113,44,13,0,22.4,0.140,22,0 83 | 2,74,0,0,0,0.0,0.102,22,0 84 | 7,83,78,26,71,29.3,0.767,36,0 85 | 0,101,65,28,0,24.6,0.237,22,0 86 | 5,137,108,0,0,48.8,0.227,37,1 87 | 2,110,74,29,125,32.4,0.698,27,0 88 | 13,106,72,54,0,36.6,0.178,45,0 89 | 2,100,68,25,71,38.5,0.324,26,0 90 | 15,136,70,32,110,37.1,0.153,43,1 91 | 1,107,68,19,0,26.5,0.165,24,0 92 | 1,80,55,0,0,19.1,0.258,21,0 93 | 4,123,80,15,176,32.0,0.443,34,0 94 | 7,81,78,40,48,46.7,0.261,42,0 95 | 4,134,72,0,0,23.8,0.277,60,1 96 | 2,142,82,18,64,24.7,0.761,21,0 97 | 6,144,72,27,228,33.9,0.255,40,0 98 | 2,92,62,28,0,31.6,0.130,24,0 99 | 1,71,48,18,76,20.4,0.323,22,0 100 | 6,93,50,30,64,28.7,0.356,23,0 101 | 1,122,90,51,220,49.7,0.325,31,1 102 | 1,163,72,0,0,39.0,1.222,33,1 103 | 1,151,60,0,0,26.1,0.179,22,0 104 | 0,125,96,0,0,22.5,0.262,21,0 105 | 1,81,72,18,40,26.6,0.283,24,0 106 | 2,85,65,0,0,39.6,0.930,27,0 107 | 1,126,56,29,152,28.7,0.801,21,0 108 | 1,96,122,0,0,22.4,0.207,27,0 109 | 4,144,58,28,140,29.5,0.287,37,0 110 | 3,83,58,31,18,34.3,0.336,25,0 111 | 0,95,85,25,36,37.4,0.247,24,1 112 | 3,171,72,33,135,33.3,0.199,24,1 113 | 8,155,62,26,495,34.0,0.543,46,1 114 | 1,89,76,34,37,31.2,0.192,23,0 115 | 4,76,62,0,0,34.0,0.391,25,0 116 | 7,160,54,32,175,30.5,0.588,39,1 117 | 4,146,92,0,0,31.2,0.539,61,1 118 | 5,124,74,0,0,34.0,0.220,38,1 119 | 5,78,48,0,0,33.7,0.654,25,0 120 | 4,97,60,23,0,28.2,0.443,22,0 121 | 4,99,76,15,51,23.2,0.223,21,0 122 | 0,162,76,56,100,53.2,0.759,25,1 123 | 6,111,64,39,0,34.2,0.260,24,0 124 | 2,107,74,30,100,33.6,0.404,23,0 125 | 5,132,80,0,0,26.8,0.186,69,0 126 | 0,113,76,0,0,33.3,0.278,23,1 127 | 1,88,30,42,99,55.0,0.496,26,1 128 | 3,120,70,30,135,42.9,0.452,30,0 129 | 1,118,58,36,94,33.3,0.261,23,0 130 | 1,117,88,24,145,34.5,0.403,40,1 131 | 0,105,84,0,0,27.9,0.741,62,1 132 | 4,173,70,14,168,29.7,0.361,33,1 133 | 9,122,56,0,0,33.3,1.114,33,1 134 | 3,170,64,37,225,34.5,0.356,30,1 135 | 8,84,74,31,0,38.3,0.457,39,0 136 | 2,96,68,13,49,21.1,0.647,26,0 137 | 2,125,60,20,140,33.8,0.088,31,0 138 | 0,100,70,26,50,30.8,0.597,21,0 139 | 0,93,60,25,92,28.7,0.532,22,0 140 | 0,129,80,0,0,31.2,0.703,29,0 141 | 5,105,72,29,325,36.9,0.159,28,0 142 | 3,128,78,0,0,21.1,0.268,55,0 143 | 5,106,82,30,0,39.5,0.286,38,0 144 | 2,108,52,26,63,32.5,0.318,22,0 145 | 10,108,66,0,0,32.4,0.272,42,1 146 | 4,154,62,31,284,32.8,0.237,23,0 147 | 0,102,75,23,0,0.0,0.572,21,0 148 | 9,57,80,37,0,32.8,0.096,41,0 149 | 2,106,64,35,119,30.5,1.400,34,0 150 | 5,147,78,0,0,33.7,0.218,65,0 151 | 2,90,70,17,0,27.3,0.085,22,0 152 | 1,136,74,50,204,37.4,0.399,24,0 153 | 4,114,65,0,0,21.9,0.432,37,0 154 | 9,156,86,28,155,34.3,1.189,42,1 155 | 1,153,82,42,485,40.6,0.687,23,0 156 | 8,188,78,0,0,47.9,0.137,43,1 157 | 7,152,88,44,0,50.0,0.337,36,1 158 | 2,99,52,15,94,24.6,0.637,21,0 159 | 1,109,56,21,135,25.2,0.833,23,0 160 | 2,88,74,19,53,29.0,0.229,22,0 161 | 17,163,72,41,114,40.9,0.817,47,1 162 | 4,151,90,38,0,29.7,0.294,36,0 163 | 7,102,74,40,105,37.2,0.204,45,0 164 | 0,114,80,34,285,44.2,0.167,27,0 165 | 2,100,64,23,0,29.7,0.368,21,0 166 | 0,131,88,0,0,31.6,0.743,32,1 167 | 6,104,74,18,156,29.9,0.722,41,1 168 | 3,148,66,25,0,32.5,0.256,22,0 169 | 4,120,68,0,0,29.6,0.709,34,0 170 | 4,110,66,0,0,31.9,0.471,29,0 171 | 3,111,90,12,78,28.4,0.495,29,0 172 | 6,102,82,0,0,30.8,0.180,36,1 173 | 6,134,70,23,130,35.4,0.542,29,1 174 | 2,87,0,23,0,28.9,0.773,25,0 175 | 1,79,60,42,48,43.5,0.678,23,0 176 | 2,75,64,24,55,29.7,0.370,33,0 177 | 8,179,72,42,130,32.7,0.719,36,1 178 | 6,85,78,0,0,31.2,0.382,42,0 179 | 0,129,110,46,130,67.1,0.319,26,1 180 | 5,143,78,0,0,45.0,0.190,47,0 181 | 5,130,82,0,0,39.1,0.956,37,1 182 | 6,87,80,0,0,23.2,0.084,32,0 183 | 0,119,64,18,92,34.9,0.725,23,0 184 | 1,0,74,20,23,27.7,0.299,21,0 185 | 5,73,60,0,0,26.8,0.268,27,0 186 | 4,141,74,0,0,27.6,0.244,40,0 187 | 7,194,68,28,0,35.9,0.745,41,1 188 | 8,181,68,36,495,30.1,0.615,60,1 189 | 1,128,98,41,58,32.0,1.321,33,1 190 | 8,109,76,39,114,27.9,0.640,31,1 191 | 5,139,80,35,160,31.6,0.361,25,1 192 | 3,111,62,0,0,22.6,0.142,21,0 193 | 9,123,70,44,94,33.1,0.374,40,0 194 | 7,159,66,0,0,30.4,0.383,36,1 195 | 11,135,0,0,0,52.3,0.578,40,1 196 | 8,85,55,20,0,24.4,0.136,42,0 197 | 5,158,84,41,210,39.4,0.395,29,1 198 | 1,105,58,0,0,24.3,0.187,21,0 199 | 3,107,62,13,48,22.9,0.678,23,1 200 | 4,109,64,44,99,34.8,0.905,26,1 201 | 4,148,60,27,318,30.9,0.150,29,1 202 | 0,113,80,16,0,31.0,0.874,21,0 203 | 1,138,82,0,0,40.1,0.236,28,0 204 | 0,108,68,20,0,27.3,0.787,32,0 205 | 2,99,70,16,44,20.4,0.235,27,0 206 | 6,103,72,32,190,37.7,0.324,55,0 207 | 5,111,72,28,0,23.9,0.407,27,0 208 | 8,196,76,29,280,37.5,0.605,57,1 209 | 5,162,104,0,0,37.7,0.151,52,1 210 | 1,96,64,27,87,33.2,0.289,21,0 211 | 7,184,84,33,0,35.5,0.355,41,1 212 | 2,81,60,22,0,27.7,0.290,25,0 213 | 0,147,85,54,0,42.8,0.375,24,0 214 | 7,179,95,31,0,34.2,0.164,60,0 215 | 0,140,65,26,130,42.6,0.431,24,1 216 | 9,112,82,32,175,34.2,0.260,36,1 217 | 12,151,70,40,271,41.8,0.742,38,1 218 | 5,109,62,41,129,35.8,0.514,25,1 219 | 6,125,68,30,120,30.0,0.464,32,0 220 | 5,85,74,22,0,29.0,1.224,32,1 221 | 5,112,66,0,0,37.8,0.261,41,1 222 | 0,177,60,29,478,34.6,1.072,21,1 223 | 2,158,90,0,0,31.6,0.805,66,1 224 | 7,119,0,0,0,25.2,0.209,37,0 225 | 7,142,60,33,190,28.8,0.687,61,0 226 | 1,100,66,15,56,23.6,0.666,26,0 227 | 1,87,78,27,32,34.6,0.101,22,0 228 | 0,101,76,0,0,35.7,0.198,26,0 229 | 3,162,52,38,0,37.2,0.652,24,1 230 | 4,197,70,39,744,36.7,2.329,31,0 231 | 0,117,80,31,53,45.2,0.089,24,0 232 | 4,142,86,0,0,44.0,0.645,22,1 233 | 6,134,80,37,370,46.2,0.238,46,1 234 | 1,79,80,25,37,25.4,0.583,22,0 235 | 4,122,68,0,0,35.0,0.394,29,0 236 | 3,74,68,28,45,29.7,0.293,23,0 237 | 4,171,72,0,0,43.6,0.479,26,1 238 | 7,181,84,21,192,35.9,0.586,51,1 239 | 0,179,90,27,0,44.1,0.686,23,1 240 | 9,164,84,21,0,30.8,0.831,32,1 241 | 0,104,76,0,0,18.4,0.582,27,0 242 | 1,91,64,24,0,29.2,0.192,21,0 243 | 4,91,70,32,88,33.1,0.446,22,0 244 | 3,139,54,0,0,25.6,0.402,22,1 245 | 6,119,50,22,176,27.1,1.318,33,1 246 | 2,146,76,35,194,38.2,0.329,29,0 247 | 9,184,85,15,0,30.0,1.213,49,1 248 | 10,122,68,0,0,31.2,0.258,41,0 249 | 0,165,90,33,680,52.3,0.427,23,0 250 | 9,124,70,33,402,35.4,0.282,34,0 251 | 1,111,86,19,0,30.1,0.143,23,0 252 | 9,106,52,0,0,31.2,0.380,42,0 253 | 2,129,84,0,0,28.0,0.284,27,0 254 | 2,90,80,14,55,24.4,0.249,24,0 255 | 0,86,68,32,0,35.8,0.238,25,0 256 | 12,92,62,7,258,27.6,0.926,44,1 257 | 1,113,64,35,0,33.6,0.543,21,1 258 | 3,111,56,39,0,30.1,0.557,30,0 259 | 2,114,68,22,0,28.7,0.092,25,0 260 | 1,193,50,16,375,25.9,0.655,24,0 261 | 11,155,76,28,150,33.3,1.353,51,1 262 | 3,191,68,15,130,30.9,0.299,34,0 263 | 3,141,0,0,0,30.0,0.761,27,1 264 | 4,95,70,32,0,32.1,0.612,24,0 265 | 3,142,80,15,0,32.4,0.200,63,0 266 | 4,123,62,0,0,32.0,0.226,35,1 267 | 5,96,74,18,67,33.6,0.997,43,0 268 | 0,138,0,0,0,36.3,0.933,25,1 269 | 2,128,64,42,0,40.0,1.101,24,0 270 | 0,102,52,0,0,25.1,0.078,21,0 271 | 2,146,0,0,0,27.5,0.240,28,1 272 | 10,101,86,37,0,45.6,1.136,38,1 273 | 2,108,62,32,56,25.2,0.128,21,0 274 | 3,122,78,0,0,23.0,0.254,40,0 275 | 1,71,78,50,45,33.2,0.422,21,0 276 | 13,106,70,0,0,34.2,0.251,52,0 277 | 2,100,70,52,57,40.5,0.677,25,0 278 | 7,106,60,24,0,26.5,0.296,29,1 279 | 0,104,64,23,116,27.8,0.454,23,0 280 | 5,114,74,0,0,24.9,0.744,57,0 281 | 2,108,62,10,278,25.3,0.881,22,0 282 | 0,146,70,0,0,37.9,0.334,28,1 283 | 10,129,76,28,122,35.9,0.280,39,0 284 | 7,133,88,15,155,32.4,0.262,37,0 285 | 7,161,86,0,0,30.4,0.165,47,1 286 | 2,108,80,0,0,27.0,0.259,52,1 287 | 7,136,74,26,135,26.0,0.647,51,0 288 | 5,155,84,44,545,38.7,0.619,34,0 289 | 1,119,86,39,220,45.6,0.808,29,1 290 | 4,96,56,17,49,20.8,0.340,26,0 291 | 5,108,72,43,75,36.1,0.263,33,0 292 | 0,78,88,29,40,36.9,0.434,21,0 293 | 0,107,62,30,74,36.6,0.757,25,1 294 | 2,128,78,37,182,43.3,1.224,31,1 295 | 1,128,48,45,194,40.5,0.613,24,1 296 | 0,161,50,0,0,21.9,0.254,65,0 297 | 6,151,62,31,120,35.5,0.692,28,0 298 | 2,146,70,38,360,28.0,0.337,29,1 299 | 0,126,84,29,215,30.7,0.520,24,0 300 | 14,100,78,25,184,36.6,0.412,46,1 301 | 8,112,72,0,0,23.6,0.840,58,0 302 | 0,167,0,0,0,32.3,0.839,30,1 303 | 2,144,58,33,135,31.6,0.422,25,1 304 | 5,77,82,41,42,35.8,0.156,35,0 305 | 5,115,98,0,0,52.9,0.209,28,1 306 | 3,150,76,0,0,21.0,0.207,37,0 307 | 2,120,76,37,105,39.7,0.215,29,0 308 | 10,161,68,23,132,25.5,0.326,47,1 309 | 0,137,68,14,148,24.8,0.143,21,0 310 | 0,128,68,19,180,30.5,1.391,25,1 311 | 2,124,68,28,205,32.9,0.875,30,1 312 | 6,80,66,30,0,26.2,0.313,41,0 313 | 0,106,70,37,148,39.4,0.605,22,0 314 | 2,155,74,17,96,26.6,0.433,27,1 315 | 3,113,50,10,85,29.5,0.626,25,0 316 | 7,109,80,31,0,35.9,1.127,43,1 317 | 2,112,68,22,94,34.1,0.315,26,0 318 | 3,99,80,11,64,19.3,0.284,30,0 319 | 3,182,74,0,0,30.5,0.345,29,1 320 | 3,115,66,39,140,38.1,0.150,28,0 321 | 6,194,78,0,0,23.5,0.129,59,1 322 | 4,129,60,12,231,27.5,0.527,31,0 323 | 3,112,74,30,0,31.6,0.197,25,1 324 | 0,124,70,20,0,27.4,0.254,36,1 325 | 13,152,90,33,29,26.8,0.731,43,1 326 | 2,112,75,32,0,35.7,0.148,21,0 327 | 1,157,72,21,168,25.6,0.123,24,0 328 | 1,122,64,32,156,35.1,0.692,30,1 329 | 10,179,70,0,0,35.1,0.200,37,0 330 | 2,102,86,36,120,45.5,0.127,23,1 331 | 6,105,70,32,68,30.8,0.122,37,0 332 | 8,118,72,19,0,23.1,1.476,46,0 333 | 2,87,58,16,52,32.7,0.166,25,0 334 | 1,180,0,0,0,43.3,0.282,41,1 335 | 12,106,80,0,0,23.6,0.137,44,0 336 | 1,95,60,18,58,23.9,0.260,22,0 337 | 0,165,76,43,255,47.9,0.259,26,0 338 | 0,117,0,0,0,33.8,0.932,44,0 339 | 5,115,76,0,0,31.2,0.343,44,1 340 | 9,152,78,34,171,34.2,0.893,33,1 341 | 7,178,84,0,0,39.9,0.331,41,1 342 | 1,130,70,13,105,25.9,0.472,22,0 343 | 1,95,74,21,73,25.9,0.673,36,0 344 | 1,0,68,35,0,32.0,0.389,22,0 345 | 5,122,86,0,0,34.7,0.290,33,0 346 | 8,95,72,0,0,36.8,0.485,57,0 347 | 8,126,88,36,108,38.5,0.349,49,0 348 | 1,139,46,19,83,28.7,0.654,22,0 349 | 3,116,0,0,0,23.5,0.187,23,0 350 | 3,99,62,19,74,21.8,0.279,26,0 351 | 5,0,80,32,0,41.0,0.346,37,1 352 | 4,92,80,0,0,42.2,0.237,29,0 353 | 4,137,84,0,0,31.2,0.252,30,0 354 | 3,61,82,28,0,34.4,0.243,46,0 355 | 1,90,62,12,43,27.2,0.580,24,0 356 | 3,90,78,0,0,42.7,0.559,21,0 357 | 9,165,88,0,0,30.4,0.302,49,1 358 | 1,125,50,40,167,33.3,0.962,28,1 359 | 13,129,0,30,0,39.9,0.569,44,1 360 | 12,88,74,40,54,35.3,0.378,48,0 361 | 1,196,76,36,249,36.5,0.875,29,1 362 | 5,189,64,33,325,31.2,0.583,29,1 363 | 5,158,70,0,0,29.8,0.207,63,0 364 | 5,103,108,37,0,39.2,0.305,65,0 365 | 4,146,78,0,0,38.5,0.520,67,1 366 | 4,147,74,25,293,34.9,0.385,30,0 367 | 5,99,54,28,83,34.0,0.499,30,0 368 | 6,124,72,0,0,27.6,0.368,29,1 369 | 0,101,64,17,0,21.0,0.252,21,0 370 | 3,81,86,16,66,27.5,0.306,22,0 371 | 1,133,102,28,140,32.8,0.234,45,1 372 | 3,173,82,48,465,38.4,2.137,25,1 373 | 0,118,64,23,89,0.0,1.731,21,0 374 | 0,84,64,22,66,35.8,0.545,21,0 375 | 2,105,58,40,94,34.9,0.225,25,0 376 | 2,122,52,43,158,36.2,0.816,28,0 377 | 12,140,82,43,325,39.2,0.528,58,1 378 | 0,98,82,15,84,25.2,0.299,22,0 379 | 1,87,60,37,75,37.2,0.509,22,0 380 | 4,156,75,0,0,48.3,0.238,32,1 381 | 0,93,100,39,72,43.4,1.021,35,0 382 | 1,107,72,30,82,30.8,0.821,24,0 383 | 0,105,68,22,0,20.0,0.236,22,0 384 | 1,109,60,8,182,25.4,0.947,21,0 385 | 1,90,62,18,59,25.1,1.268,25,0 386 | 1,125,70,24,110,24.3,0.221,25,0 387 | 1,119,54,13,50,22.3,0.205,24,0 388 | 5,116,74,29,0,32.3,0.660,35,1 389 | 8,105,100,36,0,43.3,0.239,45,1 390 | 5,144,82,26,285,32.0,0.452,58,1 391 | 3,100,68,23,81,31.6,0.949,28,0 392 | 1,100,66,29,196,32.0,0.444,42,0 393 | 5,166,76,0,0,45.7,0.340,27,1 394 | 1,131,64,14,415,23.7,0.389,21,0 395 | 4,116,72,12,87,22.1,0.463,37,0 396 | 4,158,78,0,0,32.9,0.803,31,1 397 | 2,127,58,24,275,27.7,1.600,25,0 398 | 3,96,56,34,115,24.7,0.944,39,0 399 | 0,131,66,40,0,34.3,0.196,22,1 400 | 3,82,70,0,0,21.1,0.389,25,0 401 | 3,193,70,31,0,34.9,0.241,25,1 402 | 4,95,64,0,0,32.0,0.161,31,1 403 | 6,137,61,0,0,24.2,0.151,55,0 404 | 5,136,84,41,88,35.0,0.286,35,1 405 | 9,72,78,25,0,31.6,0.280,38,0 406 | 5,168,64,0,0,32.9,0.135,41,1 407 | 2,123,48,32,165,42.1,0.520,26,0 408 | 4,115,72,0,0,28.9,0.376,46,1 409 | 0,101,62,0,0,21.9,0.336,25,0 410 | 8,197,74,0,0,25.9,1.191,39,1 411 | 1,172,68,49,579,42.4,0.702,28,1 412 | 6,102,90,39,0,35.7,0.674,28,0 413 | 1,112,72,30,176,34.4,0.528,25,0 414 | 1,143,84,23,310,42.4,1.076,22,0 415 | 1,143,74,22,61,26.2,0.256,21,0 416 | 0,138,60,35,167,34.6,0.534,21,1 417 | 3,173,84,33,474,35.7,0.258,22,1 418 | 1,97,68,21,0,27.2,1.095,22,0 419 | 4,144,82,32,0,38.5,0.554,37,1 420 | 1,83,68,0,0,18.2,0.624,27,0 421 | 3,129,64,29,115,26.4,0.219,28,1 422 | 1,119,88,41,170,45.3,0.507,26,0 423 | 2,94,68,18,76,26.0,0.561,21,0 424 | 0,102,64,46,78,40.6,0.496,21,0 425 | 2,115,64,22,0,30.8,0.421,21,0 426 | 8,151,78,32,210,42.9,0.516,36,1 427 | 4,184,78,39,277,37.0,0.264,31,1 428 | 0,94,0,0,0,0.0,0.256,25,0 429 | 1,181,64,30,180,34.1,0.328,38,1 430 | 0,135,94,46,145,40.6,0.284,26,0 431 | 1,95,82,25,180,35.0,0.233,43,1 432 | 2,99,0,0,0,22.2,0.108,23,0 433 | 3,89,74,16,85,30.4,0.551,38,0 434 | 1,80,74,11,60,30.0,0.527,22,0 435 | 2,139,75,0,0,25.6,0.167,29,0 436 | 1,90,68,8,0,24.5,1.138,36,0 437 | 0,141,0,0,0,42.4,0.205,29,1 438 | 12,140,85,33,0,37.4,0.244,41,0 439 | 5,147,75,0,0,29.9,0.434,28,0 440 | 1,97,70,15,0,18.2,0.147,21,0 441 | 6,107,88,0,0,36.8,0.727,31,0 442 | 0,189,104,25,0,34.3,0.435,41,1 443 | 2,83,66,23,50,32.2,0.497,22,0 444 | 4,117,64,27,120,33.2,0.230,24,0 445 | 8,108,70,0,0,30.5,0.955,33,1 446 | 4,117,62,12,0,29.7,0.380,30,1 447 | 0,180,78,63,14,59.4,2.420,25,1 448 | 1,100,72,12,70,25.3,0.658,28,0 449 | 0,95,80,45,92,36.5,0.330,26,0 450 | 0,104,64,37,64,33.6,0.510,22,1 451 | 0,120,74,18,63,30.5,0.285,26,0 452 | 1,82,64,13,95,21.2,0.415,23,0 453 | 2,134,70,0,0,28.9,0.542,23,1 454 | 0,91,68,32,210,39.9,0.381,25,0 455 | 2,119,0,0,0,19.6,0.832,72,0 456 | 2,100,54,28,105,37.8,0.498,24,0 457 | 14,175,62,30,0,33.6,0.212,38,1 458 | 1,135,54,0,0,26.7,0.687,62,0 459 | 5,86,68,28,71,30.2,0.364,24,0 460 | 10,148,84,48,237,37.6,1.001,51,1 461 | 9,134,74,33,60,25.9,0.460,81,0 462 | 9,120,72,22,56,20.8,0.733,48,0 463 | 1,71,62,0,0,21.8,0.416,26,0 464 | 8,74,70,40,49,35.3,0.705,39,0 465 | 5,88,78,30,0,27.6,0.258,37,0 466 | 10,115,98,0,0,24.0,1.022,34,0 467 | 0,124,56,13,105,21.8,0.452,21,0 468 | 0,74,52,10,36,27.8,0.269,22,0 469 | 0,97,64,36,100,36.8,0.600,25,0 470 | 8,120,0,0,0,30.0,0.183,38,1 471 | 6,154,78,41,140,46.1,0.571,27,0 472 | 1,144,82,40,0,41.3,0.607,28,0 473 | 0,137,70,38,0,33.2,0.170,22,0 474 | 0,119,66,27,0,38.8,0.259,22,0 475 | 7,136,90,0,0,29.9,0.210,50,0 476 | 4,114,64,0,0,28.9,0.126,24,0 477 | 0,137,84,27,0,27.3,0.231,59,0 478 | 2,105,80,45,191,33.7,0.711,29,1 479 | 7,114,76,17,110,23.8,0.466,31,0 480 | 8,126,74,38,75,25.9,0.162,39,0 481 | 4,132,86,31,0,28.0,0.419,63,0 482 | 3,158,70,30,328,35.5,0.344,35,1 483 | 0,123,88,37,0,35.2,0.197,29,0 484 | 4,85,58,22,49,27.8,0.306,28,0 485 | 0,84,82,31,125,38.2,0.233,23,0 486 | 0,145,0,0,0,44.2,0.630,31,1 487 | 0,135,68,42,250,42.3,0.365,24,1 488 | 1,139,62,41,480,40.7,0.536,21,0 489 | 0,173,78,32,265,46.5,1.159,58,0 490 | 4,99,72,17,0,25.6,0.294,28,0 491 | 8,194,80,0,0,26.1,0.551,67,0 492 | 2,83,65,28,66,36.8,0.629,24,0 493 | 2,89,90,30,0,33.5,0.292,42,0 494 | 4,99,68,38,0,32.8,0.145,33,0 495 | 4,125,70,18,122,28.9,1.144,45,1 496 | 3,80,0,0,0,0.0,0.174,22,0 497 | 6,166,74,0,0,26.6,0.304,66,0 498 | 5,110,68,0,0,26.0,0.292,30,0 499 | 2,81,72,15,76,30.1,0.547,25,0 500 | 7,195,70,33,145,25.1,0.163,55,1 501 | 6,154,74,32,193,29.3,0.839,39,0 502 | 2,117,90,19,71,25.2,0.313,21,0 503 | 3,84,72,32,0,37.2,0.267,28,0 504 | 6,0,68,41,0,39.0,0.727,41,1 505 | 7,94,64,25,79,33.3,0.738,41,0 506 | 3,96,78,39,0,37.3,0.238,40,0 507 | 10,75,82,0,0,33.3,0.263,38,0 508 | 0,180,90,26,90,36.5,0.314,35,1 509 | 1,130,60,23,170,28.6,0.692,21,0 510 | 2,84,50,23,76,30.4,0.968,21,0 511 | 8,120,78,0,0,25.0,0.409,64,0 512 | 12,84,72,31,0,29.7,0.297,46,1 513 | 0,139,62,17,210,22.1,0.207,21,0 514 | 9,91,68,0,0,24.2,0.200,58,0 515 | 2,91,62,0,0,27.3,0.525,22,0 516 | 3,99,54,19,86,25.6,0.154,24,0 517 | 3,163,70,18,105,31.6,0.268,28,1 518 | 9,145,88,34,165,30.3,0.771,53,1 519 | 7,125,86,0,0,37.6,0.304,51,0 520 | 13,76,60,0,0,32.8,0.180,41,0 521 | 6,129,90,7,326,19.6,0.582,60,0 522 | 2,68,70,32,66,25.0,0.187,25,0 523 | 3,124,80,33,130,33.2,0.305,26,0 524 | 6,114,0,0,0,0.0,0.189,26,0 525 | 9,130,70,0,0,34.2,0.652,45,1 526 | 3,125,58,0,0,31.6,0.151,24,0 527 | 3,87,60,18,0,21.8,0.444,21,0 528 | 1,97,64,19,82,18.2,0.299,21,0 529 | 3,116,74,15,105,26.3,0.107,24,0 530 | 0,117,66,31,188,30.8,0.493,22,0 531 | 0,111,65,0,0,24.6,0.660,31,0 532 | 2,122,60,18,106,29.8,0.717,22,0 533 | 0,107,76,0,0,45.3,0.686,24,0 534 | 1,86,66,52,65,41.3,0.917,29,0 535 | 6,91,0,0,0,29.8,0.501,31,0 536 | 1,77,56,30,56,33.3,1.251,24,0 537 | 4,132,0,0,0,32.9,0.302,23,1 538 | 0,105,90,0,0,29.6,0.197,46,0 539 | 0,57,60,0,0,21.7,0.735,67,0 540 | 0,127,80,37,210,36.3,0.804,23,0 541 | 3,129,92,49,155,36.4,0.968,32,1 542 | 8,100,74,40,215,39.4,0.661,43,1 543 | 3,128,72,25,190,32.4,0.549,27,1 544 | 10,90,85,32,0,34.9,0.825,56,1 545 | 4,84,90,23,56,39.5,0.159,25,0 546 | 1,88,78,29,76,32.0,0.365,29,0 547 | 8,186,90,35,225,34.5,0.423,37,1 548 | 5,187,76,27,207,43.6,1.034,53,1 549 | 4,131,68,21,166,33.1,0.160,28,0 550 | 1,164,82,43,67,32.8,0.341,50,0 551 | 4,189,110,31,0,28.5,0.680,37,0 552 | 1,116,70,28,0,27.4,0.204,21,0 553 | 3,84,68,30,106,31.9,0.591,25,0 554 | 6,114,88,0,0,27.8,0.247,66,0 555 | 1,88,62,24,44,29.9,0.422,23,0 556 | 1,84,64,23,115,36.9,0.471,28,0 557 | 7,124,70,33,215,25.5,0.161,37,0 558 | 1,97,70,40,0,38.1,0.218,30,0 559 | 8,110,76,0,0,27.8,0.237,58,0 560 | 11,103,68,40,0,46.2,0.126,42,0 561 | 11,85,74,0,0,30.1,0.300,35,0 562 | 6,125,76,0,0,33.8,0.121,54,1 563 | 0,198,66,32,274,41.3,0.502,28,1 564 | 1,87,68,34,77,37.6,0.401,24,0 565 | 6,99,60,19,54,26.9,0.497,32,0 566 | 0,91,80,0,0,32.4,0.601,27,0 567 | 2,95,54,14,88,26.1,0.748,22,0 568 | 1,99,72,30,18,38.6,0.412,21,0 569 | 6,92,62,32,126,32.0,0.085,46,0 570 | 4,154,72,29,126,31.3,0.338,37,0 571 | 0,121,66,30,165,34.3,0.203,33,1 572 | 3,78,70,0,0,32.5,0.270,39,0 573 | 2,130,96,0,0,22.6,0.268,21,0 574 | 3,111,58,31,44,29.5,0.430,22,0 575 | 2,98,60,17,120,34.7,0.198,22,0 576 | 1,143,86,30,330,30.1,0.892,23,0 577 | 1,119,44,47,63,35.5,0.280,25,0 578 | 6,108,44,20,130,24.0,0.813,35,0 579 | 2,118,80,0,0,42.9,0.693,21,1 580 | 10,133,68,0,0,27.0,0.245,36,0 581 | 2,197,70,99,0,34.7,0.575,62,1 582 | 0,151,90,46,0,42.1,0.371,21,1 583 | 6,109,60,27,0,25.0,0.206,27,0 584 | 12,121,78,17,0,26.5,0.259,62,0 585 | 8,100,76,0,0,38.7,0.190,42,0 586 | 8,124,76,24,600,28.7,0.687,52,1 587 | 1,93,56,11,0,22.5,0.417,22,0 588 | 8,143,66,0,0,34.9,0.129,41,1 589 | 6,103,66,0,0,24.3,0.249,29,0 590 | 3,176,86,27,156,33.3,1.154,52,1 591 | 0,73,0,0,0,21.1,0.342,25,0 592 | 11,111,84,40,0,46.8,0.925,45,1 593 | 2,112,78,50,140,39.4,0.175,24,0 594 | 3,132,80,0,0,34.4,0.402,44,1 595 | 2,82,52,22,115,28.5,1.699,25,0 596 | 6,123,72,45,230,33.6,0.733,34,0 597 | 0,188,82,14,185,32.0,0.682,22,1 598 | 0,67,76,0,0,45.3,0.194,46,0 599 | 1,89,24,19,25,27.8,0.559,21,0 600 | 1,173,74,0,0,36.8,0.088,38,1 601 | 1,109,38,18,120,23.1,0.407,26,0 602 | 1,108,88,19,0,27.1,0.400,24,0 603 | 6,96,0,0,0,23.7,0.190,28,0 604 | 1,124,74,36,0,27.8,0.100,30,0 605 | 7,150,78,29,126,35.2,0.692,54,1 606 | 4,183,0,0,0,28.4,0.212,36,1 607 | 1,124,60,32,0,35.8,0.514,21,0 608 | 1,181,78,42,293,40.0,1.258,22,1 609 | 1,92,62,25,41,19.5,0.482,25,0 610 | 0,152,82,39,272,41.5,0.270,27,0 611 | 1,111,62,13,182,24.0,0.138,23,0 612 | 3,106,54,21,158,30.9,0.292,24,0 613 | 3,174,58,22,194,32.9,0.593,36,1 614 | 7,168,88,42,321,38.2,0.787,40,1 615 | 6,105,80,28,0,32.5,0.878,26,0 616 | 11,138,74,26,144,36.1,0.557,50,1 617 | 3,106,72,0,0,25.8,0.207,27,0 618 | 6,117,96,0,0,28.7,0.157,30,0 619 | 2,68,62,13,15,20.1,0.257,23,0 620 | 9,112,82,24,0,28.2,1.282,50,1 621 | 0,119,0,0,0,32.4,0.141,24,1 622 | 2,112,86,42,160,38.4,0.246,28,0 623 | 2,92,76,20,0,24.2,1.698,28,0 624 | 6,183,94,0,0,40.8,1.461,45,0 625 | 0,94,70,27,115,43.5,0.347,21,0 626 | 2,108,64,0,0,30.8,0.158,21,0 627 | 4,90,88,47,54,37.7,0.362,29,0 628 | 0,125,68,0,0,24.7,0.206,21,0 629 | 0,132,78,0,0,32.4,0.393,21,0 630 | 5,128,80,0,0,34.6,0.144,45,0 631 | 4,94,65,22,0,24.7,0.148,21,0 632 | 7,114,64,0,0,27.4,0.732,34,1 633 | 0,102,78,40,90,34.5,0.238,24,0 634 | 2,111,60,0,0,26.2,0.343,23,0 635 | 1,128,82,17,183,27.5,0.115,22,0 636 | 10,92,62,0,0,25.9,0.167,31,0 637 | 13,104,72,0,0,31.2,0.465,38,1 638 | 5,104,74,0,0,28.8,0.153,48,0 639 | 2,94,76,18,66,31.6,0.649,23,0 640 | 7,97,76,32,91,40.9,0.871,32,1 641 | 1,100,74,12,46,19.5,0.149,28,0 642 | 0,102,86,17,105,29.3,0.695,27,0 643 | 4,128,70,0,0,34.3,0.303,24,0 644 | 6,147,80,0,0,29.5,0.178,50,1 645 | 4,90,0,0,0,28.0,0.610,31,0 646 | 3,103,72,30,152,27.6,0.730,27,0 647 | 2,157,74,35,440,39.4,0.134,30,0 648 | 1,167,74,17,144,23.4,0.447,33,1 649 | 0,179,50,36,159,37.8,0.455,22,1 650 | 11,136,84,35,130,28.3,0.260,42,1 651 | 0,107,60,25,0,26.4,0.133,23,0 652 | 1,91,54,25,100,25.2,0.234,23,0 653 | 1,117,60,23,106,33.8,0.466,27,0 654 | 5,123,74,40,77,34.1,0.269,28,0 655 | 2,120,54,0,0,26.8,0.455,27,0 656 | 1,106,70,28,135,34.2,0.142,22,0 657 | 2,155,52,27,540,38.7,0.240,25,1 658 | 2,101,58,35,90,21.8,0.155,22,0 659 | 1,120,80,48,200,38.9,1.162,41,0 660 | 11,127,106,0,0,39.0,0.190,51,0 661 | 3,80,82,31,70,34.2,1.292,27,1 662 | 10,162,84,0,0,27.7,0.182,54,0 663 | 1,199,76,43,0,42.9,1.394,22,1 664 | 8,167,106,46,231,37.6,0.165,43,1 665 | 9,145,80,46,130,37.9,0.637,40,1 666 | 6,115,60,39,0,33.7,0.245,40,1 667 | 1,112,80,45,132,34.8,0.217,24,0 668 | 4,145,82,18,0,32.5,0.235,70,1 669 | 10,111,70,27,0,27.5,0.141,40,1 670 | 6,98,58,33,190,34.0,0.430,43,0 671 | 9,154,78,30,100,30.9,0.164,45,0 672 | 6,165,68,26,168,33.6,0.631,49,0 673 | 1,99,58,10,0,25.4,0.551,21,0 674 | 10,68,106,23,49,35.5,0.285,47,0 675 | 3,123,100,35,240,57.3,0.880,22,0 676 | 8,91,82,0,0,35.6,0.587,68,0 677 | 6,195,70,0,0,30.9,0.328,31,1 678 | 9,156,86,0,0,24.8,0.230,53,1 679 | 0,93,60,0,0,35.3,0.263,25,0 680 | 3,121,52,0,0,36.0,0.127,25,1 681 | 2,101,58,17,265,24.2,0.614,23,0 682 | 2,56,56,28,45,24.2,0.332,22,0 683 | 0,162,76,36,0,49.6,0.364,26,1 684 | 0,95,64,39,105,44.6,0.366,22,0 685 | 4,125,80,0,0,32.3,0.536,27,1 686 | 5,136,82,0,0,0.0,0.640,69,0 687 | 2,129,74,26,205,33.2,0.591,25,0 688 | 3,130,64,0,0,23.1,0.314,22,0 689 | 1,107,50,19,0,28.3,0.181,29,0 690 | 1,140,74,26,180,24.1,0.828,23,0 691 | 1,144,82,46,180,46.1,0.335,46,1 692 | 8,107,80,0,0,24.6,0.856,34,0 693 | 13,158,114,0,0,42.3,0.257,44,1 694 | 2,121,70,32,95,39.1,0.886,23,0 695 | 7,129,68,49,125,38.5,0.439,43,1 696 | 2,90,60,0,0,23.5,0.191,25,0 697 | 7,142,90,24,480,30.4,0.128,43,1 698 | 3,169,74,19,125,29.9,0.268,31,1 699 | 0,99,0,0,0,25.0,0.253,22,0 700 | 4,127,88,11,155,34.5,0.598,28,0 701 | 4,118,70,0,0,44.5,0.904,26,0 702 | 2,122,76,27,200,35.9,0.483,26,0 703 | 6,125,78,31,0,27.6,0.565,49,1 704 | 1,168,88,29,0,35.0,0.905,52,1 705 | 2,129,0,0,0,38.5,0.304,41,0 706 | 4,110,76,20,100,28.4,0.118,27,0 707 | 6,80,80,36,0,39.8,0.177,28,0 708 | 10,115,0,0,0,0.0,0.261,30,1 709 | 2,127,46,21,335,34.4,0.176,22,0 710 | 9,164,78,0,0,32.8,0.148,45,1 711 | 2,93,64,32,160,38.0,0.674,23,1 712 | 3,158,64,13,387,31.2,0.295,24,0 713 | 5,126,78,27,22,29.6,0.439,40,0 714 | 10,129,62,36,0,41.2,0.441,38,1 715 | 0,134,58,20,291,26.4,0.352,21,0 716 | 3,102,74,0,0,29.5,0.121,32,0 717 | 7,187,50,33,392,33.9,0.826,34,1 718 | 3,173,78,39,185,33.8,0.970,31,1 719 | 10,94,72,18,0,23.1,0.595,56,0 720 | 1,108,60,46,178,35.5,0.415,24,0 721 | 5,97,76,27,0,35.6,0.378,52,1 722 | 4,83,86,19,0,29.3,0.317,34,0 723 | 1,114,66,36,200,38.1,0.289,21,0 724 | 1,149,68,29,127,29.3,0.349,42,1 725 | 5,117,86,30,105,39.1,0.251,42,0 726 | 1,111,94,0,0,32.8,0.265,45,0 727 | 4,112,78,40,0,39.4,0.236,38,0 728 | 1,116,78,29,180,36.1,0.496,25,0 729 | 0,141,84,26,0,32.4,0.433,22,0 730 | 2,175,88,0,0,22.9,0.326,22,0 731 | 2,92,52,0,0,30.1,0.141,22,0 732 | 3,130,78,23,79,28.4,0.323,34,1 733 | 8,120,86,0,0,28.4,0.259,22,1 734 | 2,174,88,37,120,44.5,0.646,24,1 735 | 2,106,56,27,165,29.0,0.426,22,0 736 | 2,105,75,0,0,23.3,0.560,53,0 737 | 4,95,60,32,0,35.4,0.284,28,0 738 | 0,126,86,27,120,27.4,0.515,21,0 739 | 8,65,72,23,0,32.0,0.600,42,0 740 | 2,99,60,17,160,36.6,0.453,21,0 741 | 1,102,74,0,0,39.5,0.293,42,1 742 | 11,120,80,37,150,42.3,0.785,48,1 743 | 3,102,44,20,94,30.8,0.400,26,0 744 | 1,109,58,18,116,28.5,0.219,22,0 745 | 9,140,94,0,0,32.7,0.734,45,1 746 | 13,153,88,37,140,40.6,1.174,39,0 747 | 12,100,84,33,105,30.0,0.488,46,0 748 | 1,147,94,41,0,49.3,0.358,27,1 749 | 1,81,74,41,57,46.3,1.096,32,0 750 | 3,187,70,22,200,36.4,0.408,36,1 751 | 6,162,62,0,0,24.3,0.178,50,1 752 | 4,136,70,0,0,31.2,1.182,22,1 753 | 1,121,78,39,74,39.0,0.261,28,0 754 | 3,108,62,24,0,26.0,0.223,25,0 755 | 0,181,88,44,510,43.3,0.222,26,1 756 | 8,154,78,32,0,32.4,0.443,45,1 757 | 1,128,88,39,110,36.5,1.057,37,1 758 | 7,137,90,41,0,32.0,0.391,39,0 759 | 0,123,72,0,0,36.3,0.258,52,1 760 | 1,106,76,0,0,37.5,0.197,26,0 761 | 6,190,92,0,0,35.5,0.278,66,1 762 | 2,88,58,26,16,28.4,0.766,22,0 763 | 9,170,74,31,0,44.0,0.403,43,1 764 | 9,89,62,0,0,22.5,0.142,33,0 765 | 10,101,76,48,180,32.9,0.171,63,0 766 | 2,122,70,27,0,36.8,0.340,27,0 767 | 5,121,72,23,112,26.2,0.245,30,0 768 | 1,126,60,0,0,30.1,0.349,47,1 769 | 1,93,70,31,0,30.4,0.315,23,0 -------------------------------------------------------------------------------- /images/DrawRandom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/DrawRandom.gif -------------------------------------------------------------------------------- /images/FontUpdate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/FontUpdate.gif -------------------------------------------------------------------------------- /images/GenRandom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/GenRandom.gif -------------------------------------------------------------------------------- /images/Pima-Prediction.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/Pima-Prediction.gif -------------------------------------------------------------------------------- /images/PolyFitting.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/PolyFitting.gif -------------------------------------------------------------------------------- /images/QuadraticEquation.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/QuadraticEquation.PNG -------------------------------------------------------------------------------- /images/Readme.md: -------------------------------------------------------------------------------- 1 | ## Images 2 | -------------------------------------------------------------------------------- /images/SimpleDataFrame-0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-0.PNG -------------------------------------------------------------------------------- /images/SimpleDataFrame-1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-1.PNG -------------------------------------------------------------------------------- /images/SimpleDataFrame-2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-2.PNG -------------------------------------------------------------------------------- /images/SimpleDataFrame-3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-3.PNG -------------------------------------------------------------------------------- /images/SimpleDataFrame-4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-4.PNG -------------------------------------------------------------------------------- /images/SimpleDataFrame-5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-5.PNG -------------------------------------------------------------------------------- /images/SimpleDataFrame-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-6.png -------------------------------------------------------------------------------- /images/SimpleDataFrame-7.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-7.PNG -------------------------------------------------------------------------------- /images/SimpleDataFrame-8.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tirthajyoti/DS-with-PySimpleGUI/675f25d7ed10a951b2640ae016def1239d6e1adf/images/SimpleDataFrame-8.PNG --------------------------------------------------------------------------------