├── .gitignore ├── LICENSE ├── README.md ├── WiP.md ├── auto_analytics ├── supervisor_loop.py ├── tabular_analysis_session.py ├── tool_chat_loop.py ├── utils │ ├── format_utils.py │ ├── ipython_utils.py │ ├── json_utils.py │ ├── nbformat_utils.py │ └── vision_utils.py └── vision_chat_loop.py ├── docs ├── Schematics.png ├── _config.yml └── index.md ├── notebooks ├── Multi-agent_predictive_ontime_delivery.ipynb ├── MultiAgent_explorative_analysis_Blood_diabetes.ipynb ├── MultiAgent_explorative_analysis_Huminos.ipynb ├── MultiAgent_explorative_analysis_Pokemon.ipynb ├── MultiAgent_explorative_analysis_Pokemon_run2.ipynb ├── MultiAgent_explorative_analysis_ontime_delivery_run2.ipynb ├── MultiAgent_predictive_analysis_housing_price.ipynb ├── anthropics_playground.ipynb ├── auto_nb_report_gen_demo.ipynb ├── data_analysis_demo.ipynb ├── kaggle_dataset_analysis.ipynb ├── openai_function_calling_playground.ipynb ├── report_output_playground.ipynb ├── tool_use_data_analysis.ipynb ├── tool_use_math_demo.ipynb ├── tool_using_math_playground.ipynb └── vision-api-figure-description.ipynb ├── setup.py └── table_data ├── BostonHousing.csv ├── Country statistics.csv ├── Diabetes_Blood_Classification.csv ├── Homininos_DataSet(1).csv ├── Housing_Price_Data.csv ├── Pokemon.csv ├── banana_quality.csv ├── boston.csv ├── customer_booking.csv ├── laptops.csv ├── ontime_delivery.csv └── world_gdp_data.csv /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | .DS_Store 6 | */.DS_Store 7 | *.code-workspace 8 | scripts/* 9 | # C extensions 10 | *.so 11 | reports/* 12 | # Distribution / packaging 13 | .Python 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | wheels/ 26 | share/python-wheels/ 27 | *.egg-info/ 28 | .installed.cfg 29 | *.egg 30 | MANIFEST 31 | 32 | # PyInstaller 33 | # Usually these files are written by a python script from a template 34 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 35 | *.manifest 36 | *.spec 37 | 38 | # Installer logs 39 | pip-log.txt 40 | pip-delete-this-directory.txt 41 | 42 | # Unit test / coverage reports 43 | htmlcov/ 44 | .tox/ 45 | .nox/ 46 | .coverage 47 | .coverage.* 48 | .cache 49 | nosetests.xml 50 | coverage.xml 51 | *.cover 52 | *.py,cover 53 | .hypothesis/ 54 | .pytest_cache/ 55 | cover/ 56 | 57 | # Translations 58 | *.mo 59 | *.pot 60 | 61 | # Django stuff: 62 | *.log 63 | local_settings.py 64 | db.sqlite3 65 | db.sqlite3-journal 66 | 67 | # Flask stuff: 68 | instance/ 69 | .webassets-cache 70 | 71 | # Scrapy stuff: 72 | .scrapy 73 | 74 | # Sphinx documentation 75 | docs/_build/ 76 | 77 | # PyBuilder 78 | .pybuilder/ 79 | target/ 80 | 81 | # Jupyter Notebook 82 | .ipynb_checkpoints 83 | 84 | # IPython 85 | profile_default/ 86 | ipython_config.py 87 | 88 | # pyenv 89 | # For a library or package, you might want to ignore these files since the code is 90 | # intended to run in multiple environments; otherwise, check them in: 91 | # .python-version 92 | 93 | # pipenv 94 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 95 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 96 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 97 | # install all needed dependencies. 98 | #Pipfile.lock 99 | 100 | # poetry 101 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 102 | # This is especially recommended for binary packages to ensure reproducibility, and is more 103 | # commonly ignored for libraries. 104 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 105 | #poetry.lock 106 | 107 | # pdm 108 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 109 | #pdm.lock 110 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 111 | # in version control. 112 | # https://pdm.fming.dev/#use-with-ide 113 | .pdm.toml 114 | 115 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 116 | __pypackages__/ 117 | 118 | # Celery stuff 119 | celerybeat-schedule 120 | celerybeat.pid 121 | 122 | # SageMath parsed files 123 | *.sage.py 124 | 125 | # Environments 126 | .env 127 | .venv 128 | env/ 129 | venv/ 130 | ENV/ 131 | env.bak/ 132 | venv.bak/ 133 | 134 | # Spyder project settings 135 | .spyderproject 136 | .spyproject 137 | 138 | # Rope project settings 139 | .ropeproject 140 | 141 | # mkdocs documentation 142 | /site 143 | 144 | # mypy 145 | .mypy_cache/ 146 | .dmypy.json 147 | dmypy.json 148 | 149 | # Pyre type checker 150 | .pyre/ 151 | 152 | # pytype static type analyzer 153 | .pytype/ 154 | 155 | # Cython debug symbols 156 | cython_debug/ 157 | 158 | # PyCharm 159 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 160 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 161 | # and can be added to the global gitignore or merged into this file. For a more nuclear 162 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 163 | #.idea/ 164 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Binxu 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GPT-Auto-Data-Analytics 2 | 3 | ### Automate local data analysis with groups of tool-using GPT agents. 4 | 5 | ChatGPT and Code Interpreter has changed the way of data analysis. 6 | But have you ever got frustrated about ... 7 | 8 | * 🤔 Limited runtime and computing resources (no GPU access!) 9 | * 📊 Challenges in handling large and complex local datasets (which is hard to upload) 10 | * 📦 Certain Python packages being unavailable in online environment. 11 | * 🚫 No vision ability to interpret the generated figures. 12 | * 🧩 Lack of organized output from the analysis. 13 | 14 | 15 | This project aims to replicate the online code interpreter experience locally, but also addressing all the issues mentioned above: 16 | 17 | * 💻 Code generation and execution in a local Python kernel 18 | * 📂 Full access to your data on local storage 19 | * 🤖 A supervisor agent guides the coding agent to iteratively solve data analysis problems 20 | * 👀 Vision capabilities for the coding agent to interpret visual figures 21 | * 📚 Organized output, exported as Jupyter notebooks, PDF, and HTML 22 | 23 | 24 | 25 | 28 | 29 | ## 🚀 Installation 30 | ```bash 31 | git clone https://github.com/Animadversio/GPT-Auto-Data-Analytics.git 32 | cd GPT-Auto-Data-Analytics 33 | pip install -e . 34 | ``` 35 | ## Usage 36 | 37 | ```python 38 | # set up openai key env variable 39 | from auto_analytics.tabular_analysis_session import TabularAnalysisPipeline 40 | # Tell the agent some info about your data and columns, and your overall objective. 41 | table_descriptions = """...""" 42 | column_descriptions = """...""" 43 | task_objective = """Perform explorative data analysis of this dataset to uncover relationships among different variables.""" 44 | csvpath = "~/GPT-Auto-Data-Analytics/table_data/Diabetes_Blood_Classification.csv" 45 | report_root = "reports" 46 | 47 | # Example usage 48 | analysis_session = TabularAnalysisPipeline("Diabetes_Classification", csvpath, report_root=report_root) 49 | # Set up dataset and column descriptions 50 | analysis_session.set_dataset_description(table_descriptions, column_descriptions) 51 | # Let supervisor agent setup and save analysis task 52 | analysis_session.supervisor_set_analysis_task(task_objective, ) 53 | # Let research assitent perform data analysis 54 | analysis_session.perform_data_analysis(query=None, MAX_ROUND=30) 55 | # Save results to notebook, HTML, and PDF 56 | analysis_session.save_results() 57 | ``` 58 | 59 | [Play with our Colab demo! ![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/17DnAiE6EdAtLfX7xjdxvMEV5HUtBKTq6?usp=sharing) 60 | 61 | [Video walk-through of our system ](https://youtu.be/APP0uvU3QAQ?si=B4bVy646wH1WkMxX) 62 | 63 | ### ✅ Current Features 🌟 64 | 65 | - **Auto Analytics in Local Env:** The coding agent have access to a local python kernel, which runs code and interacts with data on your computer. No more concerns about file uploads, compute limitations, or the online ChatGPT code interpreter environment. Leverage any Python library or computing resources as needed. 66 | - **Collaborative Intelligence:** We've built a team of LLM agents assuming the roles of research supervisor and coding assistant. Their interaction allows the supervisor's overarching vision to guide the detailed coding and data analysis process, leading to a cohesive report. 67 | - **Tabular Data Analysis:** Full support for tabular data analysis (e.g., Kaggle competitions). From tables to analytical insights in one step. 68 | - **Vision Analytics:** Integration with Vision API enables the data analytics agent to generate and understand the meaning of plots in a closed loop. 69 | - **Versatile Report Export:** After automated data analysis, a Jupyter notebook is generated, combining code, results, and visuals into a narrative that tells the story of your data. Exports are available in Jupyter notebook, PDF, and HTML formats for your review and reproduction. 70 | 71 | ### How does it work? 72 | ![](docs/Schematics.png) 73 |
74 | Click to expand! 75 | 76 | **System Overview**. Our high-level idea is to emulate the workflow in research labs: we will assign roles to AI agents, such as research supervisor or student coding agent and let them work in a closed loop. The supervisor, equipped with broader background knowledge, is tasked to set an overarching research goal, and then break it down into detailed code-solvable tasks which are sent to the student. Then, the student coding agent, equipped with coding tool and vision capability, will tackle the tasks one-by-one, synthesizing their findings into reports for the supervisor's review. This iterative process allows the supervisor to refine their understanding and possibly adjust the research agenda, prompting further investigation. Through this collaborative effort, both parties converge to a unified conclusion, culminating in a final report with code, figures and text interpretations. 77 | 78 | **Internal Coding Loop**. At the core of our system lies the coding agent, an LLM agent who is tasked for conducting interactive data analysis. This agent will take in task objective, and then analyze datasets by outputting code snippets, which are executed in a local IPython kernel. The results of code execution (including error message) will be sent back to LLM in the form of text strings. Notably, when figures are generated, they will also be turned into text descriptions by a multimodal LLM prompted to interpret the figure . 79 | 80 |
81 | 82 | ### 🌐 What's Next? 83 | - [ ] Better report summarization. 84 | - [ ] Enhanced report presentation. (filtering, formating etc.) 85 | - [ ] CLI interface to auto data analysis. 86 | - [ ] Addressing complex, multi-file data analysis challenges. 87 | - [ ] Tackling multi-modal data analysis problems, including text, image and neural data. 88 | - [ ] Enhancing multi-round communication between the supervisor and the coding agent, adjusting the research goal based on the report 89 | 90 | ## Join Us on This Journey 91 | As an end goal, we hope our tools can auto-pilot data analysis on its own. 92 | If you're interested in using our tool in your daily data analysis work or scientific research, we'd love to hear your thoughts and what you find interesting! 93 | 94 | * Binxu Wang 95 | * **Email**: binxu_wang@hms.harvard.edu 96 | 97 | 98 | -------------------------------------------------------------------------------- /WiP.md: -------------------------------------------------------------------------------- 1 | 2 | ## Work-in-Progress 3 | * [x] Terminate the loop properly and avoid repeated run of loop. 4 | * [x] **Dataset** Demo dataset of for data analysis from Kaggle. Mar. 3 5 | * [x] **ipynb report export** @Mar 10 6 | * [x] Export a ipynb type output from recorded analysis chat history! @Mar 10 7 | * [x] support multi media outputs (table, image) in the captured output and export! @Mar 10 8 | * [x] Export a ipynb type output from the system, record. Build up the ipynb in the process `tool_chat_loop_2nb`. 9 | * [x] Support PDF and HTML formulated export of ipynb. 10 | * [ ] **Presentation** Nicer way to summarize results, code and figures into a nice looking report for human to read, instead of reading through the debugging history. 11 | * [x] Jupyter notebook report 12 | * [x] PDF and HTML report 13 | * [ ] Post processing and filtering of report. 14 | * [ ] **Bug fix**, if the loop in running in a terminal then the captured won't get the figure component! wont go to report!! 15 | * [ ] **Folder structure** Design file structure for storing analysis results. 16 | * [x] *reports* sub-directory 17 | * [x] notebook 18 | * [ ] export figure directory? 19 | * [ ] cleaned up code 20 | * [ ] **Multi agent** tool chat, one assigning tasks and objectives the other one execute it. 21 | * Code architecture for these multi agent system. 22 | * **Roles** 23 | * [x] **Analysis Supervisor**. Breaking down the overall objective into smaller questions that could be analyzed by code, assign them to data analyst. 24 | * [x] **Data analyst**. Taking the objective and tasks into account, using code to solve each one of them. 25 | * [x] **Visual analyst**. Draw conclusions from reading the figures and code. @Mar.12th 26 | * [ ] **Research Manager**. Maintain a list of TODO for the analyst, hand out task one by one, when one analysis is finished check the result and write summary, assign a new one. 27 | * [x] Format the objective in a structred list, as json etc. @Mar.12th 28 | * [ ] Then we can ask / answer them one by one? How to manage better? 29 | * [ ] **Summary writer**. Taking the output of data analyst and polish it into a report. 30 | * [x] **Vision interface**, current agent cannot see the plot, so the analysis is not quite informative.... 31 | * [x] Demo for vision api drawing conclusions from the figures. @Mar.11. 32 | * [x] Integrating vision agent with the main chat loop and integrating visual insight @Mar.12th. 33 | * Vision API is significantly slower than others..... 34 | * [ ] Overall CLI for default data analysis of a data set. Have a default workflow. Supervisor => Data analysis => 35 | * [ ] Think about input structure. `csvpath`, `column description`, `dataset description`. `overall objective` 36 | * [ ] Add memory slot, let it remember the objective by reading it back. 37 | * [ ] Multi-file complex system analysis project. 38 | -------------------------------------------------------------------------------- /auto_analytics/supervisor_loop.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import sys 4 | import textwrap 5 | from openai import OpenAI 6 | import IPython 7 | from IPython.core.interactiveshell import InteractiveShell 8 | from auto_analytics.utils.json_utils import parse_partial_json 9 | from auto_analytics.utils.ipython_utils import richoutput_to_image 10 | from auto_analytics.utils.format_utils import wrap_breakline 11 | from nbformat.v4 import new_notebook, new_code_cell, new_output, new_markdown_cell 12 | from auto_analytics.utils.nbformat_utils import create_code_cell_from_captured, save_cells_to_nb 13 | from auto_analytics.utils.nbformat_utils import convert_notebook_to_html, convert_notebook_to_pdf 14 | 15 | client = OpenAI( 16 | api_key=os.environ['OPENAI_API_KEY'], 17 | ) 18 | system_message_library = { 19 | "Data Analysis Question Generator": 20 | """As a Data Analysis Research Manager, your primary role is to bridge the gap between raw datasets and the insights they can provide. 21 | This requires a deep understanding of both the content of datasets and the various analytical tools available to process them. Upon receiving a new dataset and reading their descriptions, you are expected to: 22 | 23 | 1. Research Questions Generation: Based on the dataset overview, formulate a set of research questions that can be explored through data analysis. 24 | These questions should be clear, focused, and aligned with potential research outcomes. 25 | 26 | 2. Categorization of Questions: Group the generated research questions by the type of analytical tools required to address them. Categories may include: 27 | 28 | * Statistical Analysis (for questions related to trends, averages, variances) 29 | * Machine Learning (for predictive modeling, clustering, classification) 30 | * Data Visualization (for questions best answered through charts, graphs, heat maps) 31 | * Natural Language Processing (for datasets involving textual data) 32 | * Time Series Analysis (for datasets with a temporal component) 33 | 34 | 3. Data Preparation Guidelines: Provide guidelines for preparing the dataset for analysis. This includes data cleaning steps, handling missing data, data transformation, and feature engineering techniques relevant to the questions posed and the analytical methods chosen. 35 | """, 36 | 37 | 38 | "Data Analysis Research Manager": 39 | """As a Data Analysis Research Manager, your primary role is to bridge the gap between raw datasets and the insights they can provide. This requires a deep understanding of both the content of datasets and the various analytical tools available to process them. Upon receiving a new dataset, you are expected to: 40 | 41 | 1. Dataset Overview: Provide a comprehensive description of the dataset, including its source, size, structure (e.g., columns, types of data), and any peculiarities (e.g., missing values, anomalies). 42 | 43 | 2. Research Questions Generation: Based on the dataset overview, formulate a set of research questions that can be explored through data analysis. These questions should be clear, focused, and aligned with potential business or research outcomes. 44 | 45 | 3. Categorization of Questions: Group the generated research questions by the type of analytical tools required to address them. Categories may include: 46 | 47 | * Statistical Analysis (for questions related to trends, averages, variances) 48 | * Machine Learning (for predictive modeling, clustering, classification) 49 | * Data Visualization (for questions best answered through charts, graphs, heat maps) 50 | * Natural Language Processing (for datasets involving textual data) 51 | * Time Series Analysis (for datasets with a temporal component) 52 | 53 | 4. Analysis Plan: For each category of questions, outline a preliminary analysis plan. This plan should include the selection of specific tools or software (e.g., Python libraries like Pandas for data manipulation, scikit-learn for machine learning), methodologies to be employed, and any initial hypotheses or expected outcomes. 54 | 55 | 5. Data Preparation Guidelines: Provide guidelines for preparing the dataset for analysis. This includes data cleaning steps, handling missing data, data transformation, and feature engineering techniques relevant to the questions posed and the analytical methods chosen. 56 | 57 | 6. Collaboration and Reporting: Describe how you plan to collaborate with other team members (e.g., data scientists, domain experts) in the analysis process and report your findings. Include any specific formats or templates for reporting results, insights, and recommendations. 58 | """ 59 | } 60 | 61 | 62 | 63 | system_message = system_message_library["Data Analysis Question Generator"] 64 | 65 | def supervisor_chat_loop_2nb(question, model_name='gpt-3.5-turbo-1106', 66 | MAX_ROUND=1, chat_history=None, nbcells=None, 67 | system_message=system_message, ): 68 | # available_functions=available_functions, 69 | # codeexec_tools=codeexec_tools, 70 | # Step 1: send the conversation and available functions to the model 71 | cell_cache = [] 72 | if nbcells is None: 73 | nbcells = [] 74 | else: 75 | nbcells = nbcells 76 | if chat_history is None: 77 | messages = [ 78 | {'role': 'system', 'content': system_message}, 79 | {'role': 'user', 'content': question} 80 | ] 81 | else: 82 | if question is None: 83 | messages = chat_history 84 | else: 85 | messages = chat_history 86 | messages.append({'role': 'user', 'content': question}) 87 | # decide if the final message is asking for human input, 88 | # then append the question as result to that. 89 | # if dict(messages[-1])["role"] == "assistant" and \ 90 | # chat_history[-1].tool_calls and \ 91 | # (chat_history[-1].tool_calls[-1].function.name == "seek_human_input"): 92 | # print("[put the question as human input]") 93 | # messages.append({ 94 | # "role": "tool", 95 | # "tool_call_id": chat_history[-1].tool_calls[-1].id, 96 | # "name": "seek_human_input", 97 | # "content": question 98 | # }) 99 | # else: 100 | # messages.append({'role': 'user', 'content': question}) 101 | # add the user input as markdown cell 102 | nbcells.append(new_markdown_cell(source="**User**:\n"+question)) 103 | # this flag allows us to break out of the loop when human input is needed. 104 | LOOP_END = False 105 | for iteration in range(MAX_ROUND): 106 | response = client.chat.completions.create( 107 | model = model_name, 108 | messages = messages, 109 | # tools = codeexec_tools, 110 | # tool_choice = 'auto', # auto is default, but we'll be explicit 111 | ) 112 | response_message = response.choices[0].message 113 | # extract token count 114 | # token_count = response_message.token_count 115 | messages.append(response_message) # extend conversation with assistant's reply 116 | if response_message.content: 117 | print(wrap_breakline(response_message.content, width=80)) 118 | nbcells.append(new_markdown_cell(source="**Assistant**:\n"+response_message.content)) 119 | # else: 120 | # print("[No tool use. Finishing conversation.]") 121 | # break 122 | return messages, nbcells, cell_cache -------------------------------------------------------------------------------- /auto_analytics/tabular_analysis_session.py: -------------------------------------------------------------------------------- 1 | # %% 2 | import sys 3 | sys.path.append('../') 4 | import os 5 | from os.path import join 6 | import pandas as pd 7 | import pickle as pkl 8 | import openai_multi_tool_use_parallel_patch 9 | from auto_analytics.tool_chat_loop import tool_chat_loop,tool_chat_loop_2, shell, tool_chat_loop_2nb, tool_chat_loop_2nb_with_vision 10 | from auto_analytics.supervisor_loop import supervisor_chat_loop_2nb, system_message_library 11 | from auto_analytics.utils.format_utils import message_thread_render 12 | from auto_analytics.utils.nbformat_utils import save_cells_to_nb 13 | from nbformat.v4 import new_notebook, new_code_cell, new_output, new_markdown_cell 14 | from auto_analytics.utils.nbformat_utils import create_code_cell_from_captured, save_cells_to_nb 15 | from auto_analytics.utils.nbformat_utils import convert_notebook_to_html, convert_notebook_to_pdf 16 | 17 | 18 | class TabularAnalysisPipeline: 19 | def __init__(self, analysis_name, dataset_path, report_root="", ): 20 | self.report_dir = report_root 21 | self.dataset_path = dataset_path 22 | self.result_dir = None 23 | self.analysis_name = analysis_name 24 | self.nbcells = [] 25 | self.messages = [] 26 | self.cache = [] 27 | self.result_dir = join(self.report_dir, analysis_name) 28 | os.makedirs(self.result_dir, exist_ok=True) 29 | print(f"Result of analysis [{analysis_name}] will be saved to {self.result_dir}") 30 | assert os.path.exists(dataset_path), f"Dataset path {dataset_path} does not exist! check the path." 31 | # self.setup_directories(analysis_name) 32 | # TODO: check and clear the ipython kernel 33 | 34 | def setup_directories(self, name): 35 | self.result_dir = join(self.report_dir, name) 36 | os.makedirs(self.result_dir, exist_ok=True) 37 | 38 | def set_dataset_description(self, table_descriptions, column_descriptions): 39 | self.table_descriptions = table_descriptions 40 | self.column_descriptions = column_descriptions 41 | 42 | def supervisor_set_analysis_task(self, task_objective, 43 | model_name="gpt-4-turbo-preview", MAX_ROUND=1): 44 | self.task_objective = task_objective 45 | self.messages, self.nbcells, _ = supervisor_chat_loop_2nb( 46 | f"Here is a dataset, that can be loaded from {self.dataset_path}."\ 47 | f"the dataset description {self.table_descriptions}. "\ 48 | f"and the column description {self.column_descriptions}.\n"\ 49 | f"Our objective is to {self.task_objective}", 50 | model_name=model_name, MAX_ROUND=MAX_ROUND, 51 | nbcells=self.nbcells) 52 | 53 | content = self.messages[-1].content 54 | with open(join(self.result_dir, "analysis_questions.md"), "w") as file: 55 | file.write(content) 56 | 57 | def perform_data_analysis(self, query=None, MAX_ROUND=15, model_name='gpt-3.5-turbo-1106', 58 | enable_vision=True, vision_token_count=1024): 59 | 60 | if query is None: 61 | print("No query is provided, using the default query from the supervisor.") 62 | with open(join(self.result_dir, "analysis_questions.md"), "r") as file: 63 | supervisor_objective = file.read() 64 | query = f"""Here is a dataset, that can be loaded from {self.dataset_path}. 65 | The dataset description {self.table_descriptions}. 66 | And the column description {self.column_descriptions}.\n 67 | Our overall objective is to {self.task_objective}, \n 68 | The specific questions are listed as follows, 69 | {supervisor_objective}""" 70 | else: 71 | query = query 72 | 73 | self.messages, self.nbcells, cache = tool_chat_loop_2nb_with_vision(query, 74 | enable_vision=enable_vision, vision_token_count=vision_token_count, 75 | MAX_ROUND=MAX_ROUND, model_name=model_name, 76 | nbcells=self.nbcells, chat_history=self.messages) 77 | self.cache += cache 78 | pkl.dump((self.messages, self.nbcells, self.cache), 79 | open(join(self.result_dir, "datasci_messages.pkl"), "wb")) 80 | 81 | def perform_data_analysis_human_in_loop(self, query=None, 82 | MAX_ROUND=15, model_name='gpt-3.5-turbo-1106', 83 | enable_vision=True, vision_token_count=1024): 84 | 85 | if query is None: 86 | print("No query is provided, using the default query from the supervisor.") 87 | with open(join(self.result_dir, "analysis_questions.md"), "r") as file: 88 | supervisor_objective = file.read() 89 | query = f"""Here is a dataset, that can be loaded from {self.dataset_path}. 90 | The dataset description {self.table_descriptions}. 91 | And the column description {self.column_descriptions}.\n 92 | Our overall objective is to {self.task_objective}, \n 93 | The specific questions are listed as follows, 94 | {supervisor_objective}""" 95 | else: 96 | query = query 97 | 98 | while True: 99 | self.messages, self.nbcells, cache = tool_chat_loop_2nb_with_vision(query, 100 | enable_vision=enable_vision, vision_token_count=vision_token_count, 101 | MAX_ROUND=MAX_ROUND, model_name=model_name, 102 | nbcells=self.nbcells, chat_history=self.messages) 103 | self.cache += cache 104 | pkl.dump((self.messages, self.nbcells, self.cache), 105 | open(join(self.result_dir, "datasci_messages.pkl"), "wb")) 106 | 107 | next_query = input("Human input: (QUIT to break loop)") 108 | if next_query.strip().lower() == "quit": 109 | break 110 | else: 111 | query = next_query 112 | 113 | def save_results(self, savename=None): 114 | if savename is None: 115 | savename = self.analysis_name 116 | save_cells_to_nb(self.nbcells, join(self.result_dir, f"{savename}_report.ipynb"), 117 | save_html=True, save_pdf=True) 118 | 119 | 120 | if __name__ == "__main__": 121 | report_dir = "/Users/binxuwang/Github/GPT-Auto-Data-Analytics/reports" 122 | csvpath = "/Users/binxuwang/Github/GPT-Auto-Data-Analytics/table_data/Diabetes_Blood_Classification.csv" 123 | table_descriptions = """ 124 | This dataset contains clinical data from a number of patients that have been analyzed to examine cardiovascular health and kidney function. This data is important for evaluating the risk of heart disease and diabetes, as well as the impaired kidney function often associated with these conditions. 125 | 126 | This dataset was created to support research and development of risk prediction models for heart disease, diabetes and impaired kidney function. With relevant features and clear diagnosis labels, this dataset can be used to build and test accurate prediction models.""" 127 | column_descriptions = """ 128 | About this file 129 | 130 | * Age: Represents the age of the patient in years. Age can be a risk factor for diabetes, as the risk of diabetes increases with age. 131 | 132 | * Gender: Indicates the gender of the patient, which can be a factor in the prediction of diabetes. Some studies suggest that women may have a different risk than men in developing diabetes. 133 | 134 | * Body Mass Index (BMI): BMI is a measure that uses a person's height and weight to determine whether they are in the normal weight, overweight, or obese category. A high BMI is associated with a higher risk of diabetes. 135 | 136 | * Chol: total cholesterol level in the blood. Cholesterol is a fat found in the blood and can come from foods consumed and also be produced by the body. High cholesterol can be a risk factor for heart disease and diabetes. 137 | 138 | * TG (Triglycerides): Represents the level of triglycerides in the blood. Triglycerides are a type of fat found in the blood, and high levels can also increase the risk of heart disease and diabetes. 139 | 140 | * HDL (High-Density Lipoprotein): Is the "good" cholesterol that helps transport excess cholesterol from body tissues back to the liver for further processing or excretion. High levels of HDL are usually considered good for heart health. 141 | 142 | * LDL (Low-Density Lipoprotein): Is the "bad" cholesterol that can cause plaque buildup in the arteries, increasing the risk of heart disease and stroke. High LDL levels can be a risk factor for diabetes. 143 | 144 | * Cr (Creatinine): A waste product of muscle metabolism that is excreted from the body through the kidneys. Creatinine levels in the blood can provide information about kidney function. Kidney disease may be linked to the risk of diabetes. 145 | 146 | * BUN (Blood Urea Nitrogen): Is a measure used to evaluate kidney and liver function. High levels of BUN may indicate kidney or liver disorders that can be related to diabetes. 147 | 148 | * Diagonisis: An indicator that someone has diabetes. 149 | """ 150 | task_objective = """Perform explorative data analysis of this dataset, 151 | This analyis is poised to uncover relationships among different variables, 152 | and to find predictive model of diabetes and attribute their importance for prediction. 153 | 154 | First, pose potential questions that could be answered by analyzing this dataset 155 | Organize these question by the type of analysis that would be required to answer them. 156 | These questions will be send to data scientist to write code to answer. 157 | """ 158 | #%% 159 | # Example usage 160 | analysis_session = TabularAnalysisPipeline("Diabetes_Classification", csvpath, report_root=report_dir) 161 | # Set up dataset and column descriptions 162 | analysis_session.set_dataset_description(table_descriptions, column_descriptions) 163 | # Setup and document analysis task 164 | analysis_session.supervisor_set_analysis_task(task_objective) 165 | # Perform data analysis 166 | analysis_session.perform_data_analysis(query=None, MAX_ROUND=2) 167 | # Save results to notebook, HTML, and PDF 168 | analysis_session.save_results() 169 | -------------------------------------------------------------------------------- /auto_analytics/tool_chat_loop.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import sys 4 | import textwrap 5 | import time 6 | import copy 7 | import openai_multi_tool_use_parallel_patch 8 | from openai import OpenAI 9 | import IPython 10 | from IPython.core.interactiveshell import InteractiveShell 11 | from auto_analytics.utils.json_utils import parse_partial_json 12 | from auto_analytics.utils.ipython_utils import richoutput_to_image 13 | from auto_analytics.utils.format_utils import wrap_breakline 14 | from auto_analytics.vision_chat_loop import vision_qa_response 15 | 16 | client = OpenAI( 17 | api_key=os.environ['OPENAI_API_KEY'], 18 | ) 19 | 20 | system_message = """You are an intelligent assistent with access to a running ipython kernel. 21 | You can use `python_code_exec` to execute python code to solve computational problems and return the output. 22 | You can also use `inspect_variable` to inspect the state of the kernel by getting the value of a variable. 23 | You should use `seek_human_input` when analysis finishes. When you stuck, use this function to ask human for clarification, instruction. 24 | These functions execute code in local terminal with no cost, you can use them as many times as you want. 25 | When facing complex problems, you can divide them into smaller problems and run code to solve smaller ones, check the returned results and then solve the more complex one. 26 | 27 | Under no circumstances should you attempt to call functions / tools that are not available to you. 28 | Any functions / tools you do call must have the name satisfy the following regex: ^[a-zA-Z0-9_-]{1,64}$ 29 | """ 30 | 31 | codeexec_functions = [ 32 | { 33 | 'name': 'python_code_exec', 34 | 'description': 'Execute python code to solve computational problems and return the output', 35 | 'parameters': { 36 | 'type': 'object', 37 | 'properties': { 38 | 'code': { 39 | 'type': 'string', 40 | 'description': 'Python code to execute, multiline string supported.' 41 | }, 42 | } 43 | } 44 | }, 45 | { 46 | 'name': 'inspect_variable', 47 | 'description': 'Get the value of a variable from the kernel. Used to inspect the state of the kernel.', 48 | 'parameters': { 49 | 'type': 'object', 50 | 'properties': { 51 | 'var_name': { 52 | 'type': 'string', 53 | 'description': 'Name of the variable to get the value of.' 54 | }, 55 | } 56 | } 57 | }, 58 | { 59 | 'name': 'seek_human_input', 60 | 'description': 'When analysis finishes, stuck or is exhausted, ask human for clarification, instruction for further progress.', 61 | 'parameters': { 62 | 'type': 'object', 63 | 'properties': { 64 | 'question': { 65 | 'type': 'string', 66 | 'description': 'Question for human to progress and get unstuck.' 67 | }, 68 | } 69 | } 70 | } 71 | ] 72 | 73 | codeexec_tools = [ 74 | { 75 | "type": "function", 76 | "function": codeexec_functions[0] 77 | } 78 | ] 79 | 80 | # Step 0: define the python functions. 81 | def python_code_exec(code, verbose=False): 82 | with IPython.utils.io.capture_output() as captured: 83 | # Execute the code 84 | out = shell.run_cell(code) 85 | # except Exception as e: 86 | # results = f"query failed with error: {e}" 87 | if verbose: 88 | print("Result of the code execution: ", type(out.result), "\n", out.result) 89 | print("Standard Output:", captured.stdout) 90 | print("Standard Error:", captured.stderr) 91 | print("Captured Outputs:", captured.outputs) 92 | disp_images = [] 93 | if captured.outputs: 94 | for display_output in captured.outputs: 95 | # Process each display output as needed 96 | disp_images.append(richoutput_to_image(display_output)) 97 | return out, captured, disp_images 98 | 99 | 100 | def inspect_variable(var_name): 101 | return shell.user_ns[var_name] 102 | 103 | 104 | def seek_human_input(question): 105 | return question 106 | 107 | # start the ipython kernel 108 | shell = InteractiveShell.instance() 109 | 110 | available_functions = { 111 | "python_code_exec": python_code_exec, 112 | "inspect_variable": inspect_variable, 113 | "seek_human_input": seek_human_input 114 | } 115 | 116 | MAX_ROUND = 4 117 | # model_name = 'gpt-3.5-turbo-1106' # "gpt-4-turbo-preview" 118 | # question = "We have already loaded a dataframe `df` in the kernel. Do not reload this. Each row denotes one model and its performance. find the best performing 10 models and summarize their similarities in time window" 119 | def tool_chat_loop_obsolete(question, model_name='gpt-3.5-turbo-1106', 120 | available_functions=available_functions, 121 | codeexec_tools=codeexec_tools, MAX_ROUND=4): 122 | # Step 1: send the conversation and available functions to the model 123 | messages = [ 124 | {'role': 'system', 'content': system_message}, 125 | {'role': 'user', 'content': question} 126 | ] 127 | # this flag allows us to break out of the loop when human input is needed. 128 | LOOP_END = False 129 | for iteration in range(MAX_ROUND): 130 | response = client.chat.completions.create( 131 | model = model_name, 132 | messages = messages, 133 | tools = codeexec_tools, 134 | tool_choice = 'auto', # auto is default, but we'll be explicit 135 | ) 136 | response_message = response.choices[0].message 137 | messages.append(response_message) # extend conversation with assistant's reply 138 | tool_calls = response_message.tool_calls 139 | if response_message.content: 140 | print(wrap_breakline(response_message.content, width=80)) 141 | # Step 2: check if the model wanted to call a function 142 | if tool_calls: 143 | # iterate over all the function calls 144 | for tool_call in tool_calls: 145 | # Parse the function call 146 | function_name = tool_call.function.name 147 | function_to_call = available_functions[function_name] 148 | # Note: the JSON response may not always be valid; be sure to handle errors 149 | # function_args = json.loads(tool_call.function.arguments) 150 | function_args = parse_partial_json(tool_call.function.arguments) 151 | # Step 3: call the function 152 | if function_name == "python_code_exec": 153 | out, captured, disp_images = function_to_call(*list(function_args.values())) 154 | print("Python Code executed:\n```python", function_args['code'], "```", sep="\n") 155 | if not out.success: 156 | # if not success, return the error message as function response. 157 | print("Execution error:", out.error_in_exec.__class__.__name__, out.error_in_exec) 158 | function_response = "Execution error: %s : %s" % (out.error_in_exec.__class__.__name__, out.error_in_exec) 159 | else: 160 | # if success return the output as function response. 161 | print("Execution Succeed:") 162 | captured.show() 163 | if captured.stdout: 164 | function_response = captured.stdout 165 | elif captured.outputs: 166 | function_response = captured.outputs[0].data['text/plain'] 167 | else: 168 | function_response = "Multimedia output e.g. image and code." 169 | messages.append( 170 | { 171 | "role": "tool", 172 | "tool_call_id": tool_call.id, 173 | "name": function_name, 174 | "content": function_response, 175 | } 176 | ) # extend conversation with function response 177 | LOOP_END = False 178 | elif function_name == "inspect_variable": 179 | insp_var = function_to_call(*list(function_args.values())) 180 | print("Variable inspected:", function_args['var_name']) 181 | print(insp_var) 182 | messages.append( 183 | { 184 | "role": "tool", 185 | "tool_call_id": tool_call.id, 186 | "name": function_name, 187 | "content": insp_var.__repr__(), 188 | } 189 | ) 190 | LOOP_END = False 191 | elif function_name == "seek_human_input": 192 | print(f"[Loop end, human input needed]\nAI request {list(function_args.values())}") 193 | LOOP_END = True 194 | if LOOP_END: 195 | break 196 | # Step 4: send the info for each function call and function response to the model 197 | second_response = client.chat.completions.create( 198 | model=model_name, 199 | messages=messages, 200 | ) 201 | # get a new response from the model where it can see the function response 202 | response_message_w_func = second_response.choices[0].message 203 | print(wrap_breakline(response_message_w_func.content, width=80)) 204 | messages.append(response_message_w_func) 205 | else: 206 | print("[No tool use. Finishing conversation.]") 207 | break 208 | return messages 209 | 210 | 211 | def tool_chat_loop_2(question, model_name='gpt-3.5-turbo-1106', 212 | available_functions=available_functions, 213 | codeexec_tools=codeexec_tools, MAX_ROUND=4, chat_history=None): 214 | # Step 1: send the conversation and available functions to the model 215 | if chat_history is None: 216 | messages = [ 217 | {'role': 'system', 'content': system_message}, 218 | {'role': 'user', 'content': question} 219 | ] 220 | else: 221 | if question is None: 222 | messages = chat_history 223 | else: 224 | messages = chat_history 225 | # decide if the final message is asking for human input, 226 | # then append the question as result to that. 227 | if dict(messages[-1])["role"] == "assistant" and \ 228 | chat_history[-1].tool_calls and \ 229 | (chat_history[-1].tool_calls[-1].function.name == "seek_human_input"): 230 | print("[put the question as human input]") 231 | messages.append({ 232 | "role": "tool", 233 | "tool_call_id": chat_history[-1].tool_calls[-1].id, 234 | "name": "seek_human_input", 235 | "content": question 236 | }) 237 | else: 238 | messages.append({'role': 'user', 'content': question}) 239 | 240 | # this flag allows us to break out of the loop when human input is needed. 241 | LOOP_END = False 242 | for iteration in range(MAX_ROUND): 243 | response = client.chat.completions.create( 244 | model = model_name, 245 | messages = messages, 246 | tools = codeexec_tools, 247 | tool_choice = 'auto', # auto is default, but we'll be explicit 248 | ) 249 | response_message = response.choices[0].message 250 | # extract token count 251 | # token_count = response_message.token_count 252 | messages.append(response_message) # extend conversation with assistant's reply 253 | tool_calls = response_message.tool_calls 254 | if response_message.content: 255 | print(wrap_breakline(response_message.content, width=80)) 256 | # Step 2: check if the model wanted to call a function 257 | if tool_calls: 258 | # iterate over all the function calls 259 | for tool_call in tool_calls: 260 | # Parse the function call 261 | function_name = tool_call.function.name 262 | function_to_call = available_functions[function_name] 263 | # Note: the JSON response may not always be valid; be sure to handle errors 264 | # function_args = json.loads(tool_call.function.arguments) 265 | function_args = parse_partial_json(tool_call.function.arguments) 266 | # Step 3: call the function 267 | if function_name == "python_code_exec": 268 | out, captured, disp_images = function_to_call(*list(function_args.values())) 269 | print("Python Code executed:\n```python", function_args['code'], "```", sep="\n") 270 | if not out.success: 271 | # if not success, return the error message as function response. 272 | print("Execution error:", out.error_in_exec.__class__.__name__, out.error_in_exec) 273 | function_response = "Execution error: %s : %s" % (out.error_in_exec.__class__.__name__, out.error_in_exec) 274 | else: 275 | # if success return the output as function response. 276 | print("Execution Succeed:") 277 | captured.show() 278 | if captured.stdout: 279 | function_response = captured.stdout 280 | elif captured.outputs: 281 | function_response = captured.outputs[0].data['text/plain'] 282 | else: 283 | function_response = "Multimedia output e.g. image and code." 284 | messages.append( 285 | { 286 | "role": "tool", 287 | "tool_call_id": tool_call.id, 288 | "name": function_name, 289 | "content": function_response, 290 | } 291 | ) # extend conversation with function response 292 | LOOP_END = False 293 | elif function_name == "inspect_variable": 294 | insp_var = function_to_call(*list(function_args.values())) 295 | print("Variable inspected:", function_args['var_name']) 296 | print(insp_var) 297 | messages.append( 298 | { 299 | "role": "tool", 300 | "tool_call_id": tool_call.id, 301 | "name": function_name, 302 | "content": insp_var.__repr__(), 303 | } 304 | ) 305 | LOOP_END = False 306 | elif function_name == "seek_human_input": 307 | print(f"[Loop end, human input needed]\nAI request {list(function_args.values())}") 308 | LOOP_END = True 309 | if LOOP_END: 310 | break 311 | # # Step 4: send the info for each function call and function response to the model 312 | # second_response = client.chat.completions.create( 313 | # model=model_name, 314 | # messages=messages, 315 | # ) 316 | # # get a new response from the model where it can see the function response 317 | # response_message_w_func = second_response.choices[0].message 318 | # print(wrap_breakline(response_message_w_func.content, width=80)) 319 | # messages.append(response_message_w_func) 320 | else: 321 | print("[No tool use. Finishing conversation.]") 322 | break 323 | return messages 324 | 325 | tool_chat_loop = tool_chat_loop_2 326 | from nbformat.v4 import new_notebook, new_code_cell, new_output, new_markdown_cell 327 | from auto_analytics.utils.nbformat_utils import create_code_cell_from_captured, save_cells_to_nb 328 | from auto_analytics.utils.nbformat_utils import convert_notebook_to_html, convert_notebook_to_pdf 329 | def tool_chat_loop_2nb(question, model_name='gpt-3.5-turbo-1106', 330 | available_functions=available_functions, 331 | codeexec_tools=codeexec_tools, MAX_ROUND=15, 332 | chat_history=None, nbcells=None): 333 | # Step 1: send the conversation and available functions to the model 334 | cell_cache = [] 335 | if nbcells is None: 336 | nbcells = [] 337 | else: 338 | nbcells = nbcells 339 | if chat_history is None: 340 | messages = [ 341 | {'role': 'system', 'content': system_message}, 342 | {'role': 'user', 'content': question} 343 | ] 344 | else: 345 | if question is None: 346 | messages = chat_history 347 | else: 348 | messages = chat_history 349 | # decide if the final message is asking for human input, 350 | # then append the question as result to that. 351 | if dict(messages[-1])["role"] == "assistant" and \ 352 | chat_history[-1].tool_calls and \ 353 | (chat_history[-1].tool_calls[-1].function.name == "seek_human_input"): 354 | print("[put the question as human input]") 355 | messages.append({ 356 | "role": "tool", 357 | "tool_call_id": chat_history[-1].tool_calls[-1].id, 358 | "name": "seek_human_input", 359 | "content": question 360 | }) 361 | else: 362 | messages.append({'role': 'user', 'content': question}) 363 | # add the user input as markdown cell 364 | nbcells.append(new_markdown_cell(source="**User**:\n"+question)) 365 | # this flag allows us to break out of the loop when human input is needed. 366 | LOOP_END = False 367 | for iteration in range(MAX_ROUND): 368 | response = client.chat.completions.create( 369 | model = model_name, 370 | messages = messages, 371 | tools = codeexec_tools, 372 | tool_choice = 'auto', # auto is default, but we'll be explicit 373 | ) 374 | response_message = response.choices[0].message 375 | # extract token count 376 | # token_count = response_message.token_count 377 | messages.append(response_message) # extend conversation with assistant's reply 378 | if response_message.content: 379 | print(wrap_breakline(response_message.content, width=80)) 380 | nbcells.append(new_markdown_cell(source="**Assistant**:\n"+response_message.content)) 381 | 382 | tool_calls = response_message.tool_calls 383 | # Step 2: check if the model wanted to call a function 384 | if tool_calls: 385 | # iterate over all the function calls 386 | for tool_call in tool_calls: 387 | # Parse the function call 388 | function_name = tool_call.function.name 389 | function_to_call = available_functions[function_name] 390 | # Note: the JSON response may not always be valid; be sure to handle errors 391 | # function_args = json.loads(tool_call.function.arguments) 392 | function_args = parse_partial_json(tool_call.function.arguments) 393 | # Step 3: call the function 394 | if function_name == "python_code_exec": 395 | out, captured, disp_images = function_to_call(*list(function_args.values())) 396 | print("Python Code executed:\n```python", function_args['code'], "```", sep="\n") 397 | if not out.success: 398 | # if not success, return the error message as function response. 399 | print("Execution error:", out.error_in_exec.__class__.__name__, out.error_in_exec) 400 | function_response = "Execution error: %s : %s" % (out.error_in_exec.__class__.__name__, out.error_in_exec) 401 | else: 402 | # if success return the output as function response. 403 | print("Execution Succeed:") 404 | captured.show() 405 | if captured.stdout: 406 | function_response = captured.stdout 407 | elif captured.outputs: 408 | function_response = captured.outputs[0].data['text/plain'] 409 | else: 410 | function_response = "Multimedia output e.g. image and code." 411 | messages.append( 412 | { 413 | "role": "tool", 414 | "tool_call_id": tool_call.id, 415 | "name": function_name, 416 | "content": function_response, 417 | } 418 | ) # extend conversation with function response 419 | code_cell_out = create_code_cell_from_captured(function_args['code'], out, captured) 420 | cell_cache.append((function_args['code'], out, captured)) 421 | nbcells.append(code_cell_out) 422 | LOOP_END = False 423 | # elif function_name == "inspect_variable": 424 | # insp_var = function_to_call(*list(function_args.values())) 425 | # print("Variable inspected:", function_args['var_name']) 426 | # print(insp_var) 427 | # messages.append( 428 | # { 429 | # "role": "tool", 430 | # "tool_call_id": tool_call.id, 431 | # "name": function_name, 432 | # "content": insp_var.__repr__(), 433 | # } 434 | # ) 435 | # LOOP_END = False 436 | elif function_name == "seek_human_input": 437 | print(f"[Loop end, human input needed]\nAI request {list(function_args.values())}") 438 | LOOP_END = True 439 | if LOOP_END: 440 | break 441 | # # Step 4: send the info for each function call and function response to the model 442 | # second_response = client.chat.completions.create( 443 | # model=model_name, 444 | # messages=messages, 445 | # ) 446 | # # get a new response from the model where it can see the function response 447 | # response_message_w_func = second_response.choices[0].message 448 | # print(wrap_breakline(response_message_w_func.content, width=80)) 449 | # messages.append(response_message_w_func) 450 | else: 451 | print("[No tool use. Finishing conversation.]") 452 | break 453 | return messages, nbcells, cell_cache 454 | 455 | 456 | def tool_chat_loop_2nb_with_vision(question, model_name='gpt-3.5-turbo-1106', 457 | available_functions=available_functions, 458 | codeexec_tools=codeexec_tools, MAX_ROUND=15, 459 | chat_history=None, nbcells=None, 460 | enable_vision=False, vision_token_count=1024): 461 | # Step 1: send the conversation and available functions to the model 462 | cell_cache = [] 463 | if nbcells is None: 464 | nbcells = [] 465 | else: 466 | nbcells = nbcells 467 | if chat_history is None: 468 | messages = [ 469 | {'role': 'system', 'content': system_message}, 470 | {'role': 'user', 'content': question} 471 | ] 472 | elif type(chat_history) == list and len(chat_history) == 0: 473 | messages = chat_history 474 | messages.extend([ 475 | {'role': 'system', 'content': system_message}, 476 | {'role': 'user', 'content': question} 477 | ]) 478 | else: 479 | if question is None: 480 | messages = chat_history 481 | else: 482 | messages = chat_history 483 | # decide if the final message is asking for human input, 484 | # then append the question as result to that. 485 | if dict(messages[-1])["role"] == "assistant" and \ 486 | chat_history[-1].tool_calls and \ 487 | (chat_history[-1].tool_calls[-1].function.name == "seek_human_input"): 488 | print("[put the question as human input]") 489 | messages.append({ 490 | "role": "tool", 491 | "tool_call_id": chat_history[-1].tool_calls[-1].id, 492 | "name": "seek_human_input", 493 | "content": question 494 | }) 495 | else: 496 | messages.append({'role': 'user', 'content': question}) 497 | # add the user input as markdown cell 498 | nbcells.append(new_markdown_cell(source="**User**:\n"+question)) 499 | # this flag allows us to break out of the loop when human input is needed. 500 | LOOP_END = False 501 | for iteration in range(MAX_ROUND): 502 | response = client.chat.completions.create( 503 | model = model_name, 504 | messages = messages, 505 | tools = codeexec_tools, 506 | tool_choice = 'auto', # auto is default, but we'll be explicit 507 | ) 508 | response_message = response.choices[0].message 509 | # extract token count 510 | # token_count = response_message.token_count 511 | messages.append(response_message) # extend conversation with assistant's reply 512 | if response_message.content: 513 | print(wrap_breakline(response_message.content, width=80)) 514 | nbcells.append(new_markdown_cell(source="**Assistant**:\n"+response_message.content)) 515 | 516 | tool_calls = response_message.tool_calls 517 | # Step 2: check if the model wanted to call a function 518 | if tool_calls: 519 | # iterate over all the function calls 520 | for tool_call in tool_calls: 521 | # Parse the function call 522 | function_name = tool_call.function.name 523 | if function_name not in available_functions: 524 | print(f"{function_name} called by agent, which is not available. Use quick hacky fix") 525 | # quick fix for the function not available. 526 | # 'multi_tool_use.parallel' issue may need separate handling. 527 | messages.append( 528 | { 529 | "role": "tool", 530 | "tool_call_id": tool_call.id, 531 | "name": function_name, 532 | "content": "Function not available. Please call sequentially. Available functions are: " + \ 533 | ", ".join(available_functions.keys()), 534 | } 535 | ) 536 | continue 537 | function_to_call = available_functions[function_name] 538 | # Note: the JSON response may not always be valid; be sure to handle errors 539 | # function_args = json.loads(tool_call.function.arguments) 540 | function_args = parse_partial_json(tool_call.function.arguments) 541 | # Step 3: call the function 542 | if function_name == "python_code_exec": 543 | vision_api_messages = [] 544 | out, captured, disp_images = function_to_call(*list(function_args.values())) 545 | print("Python Code executed:\n```python", function_args['code'], "```", sep="\n") 546 | code2run = function_args['code'] 547 | if not out.success: 548 | # if execution not success, return the error message as function response. 549 | print("Execution error:", out.error_in_exec.__class__.__name__, out.error_in_exec) 550 | function_response = "Execution error: %s : %s" % (out.error_in_exec.__class__.__name__, out.error_in_exec) 551 | else: 552 | # if execution success, return the output as function response. 553 | print("Execution Succeed:") 554 | # first show the captured outputs to the user in current notebook. 555 | captured.show() 556 | function_response = "" 557 | if captured.stdout: 558 | function_response += captured.stdout 559 | # reconsider the logic of streaming capturing outputs to model. 560 | if captured.outputs: 561 | # function_response = captured.outputs[0].data['text/plain'] 562 | for outi, output in enumerate(captured.outputs): 563 | if hasattr(output, "data"): 564 | if 'text/plain' in output.data: 565 | function_response += output.data['text/plain'] + "\n" 566 | # print(output.data['text/plain']) 567 | if 'text/html' in output.data: 568 | function_response += output.data['text/html'] + "\n" 569 | # print(output.data['text/html']) 570 | if "image/png" in output.data: 571 | image = richoutput_to_image(output) 572 | if enable_vision: 573 | #TODO: maybe resize oversized images. 574 | image_encoded = output.data['image/png'] 575 | vision_prompt = f"Describe the figure from a data analysis notebook "\ 576 | f"generated from the code {code2run}. Try to draw some insights from the figure." 577 | 578 | t0 = time.time() 579 | vision_api_message = vision_qa_response(vision_prompt, 580 | image_encoded, img_fmt='image/png', 581 | max_tokens=vision_token_count, display_output=False) 582 | t1 = time.time() 583 | 584 | print("Vision API response time:", t1-t0) 585 | function_response += "**Visual Analyst Figure Description**:\n" + \ 586 | vision_api_message.content 587 | print(wrap_breakline("**Visual Analyst Figure Description**:\n" + 588 | vision_api_message.content, width=80)) 589 | vision_api_messages.append(vision_api_message) 590 | if ('text/plain' not in output.data) and \ 591 | ('text/html' not in output.data) and \ 592 | ("image/png" not in output.data): 593 | print("output data not recognized !!!") 594 | print(output.data) 595 | # print(output.data) 596 | else: 597 | print("output has no data !!!") 598 | print(output) 599 | else: 600 | function_response = "Multimedia output e.g. image and code." 601 | messages.append( 602 | { 603 | "role": "tool", 604 | "tool_call_id": tool_call.id, 605 | "name": function_name, 606 | "content": function_response, 607 | } 608 | ) # extend conversation with function response 609 | code_cell_out = create_code_cell_from_captured(function_args['code'], out, captured) 610 | nbcells.append(code_cell_out) 611 | for vision_api_message in vision_api_messages: 612 | nbcells.append(new_markdown_cell(source="**Vision Analyst Response**: \n"+vision_api_message.content)) 613 | cell_cache.append((function_args['code'], out, captured, copy.deepcopy(vision_api_messages))) 614 | LOOP_END = False 615 | # elif function_name == "inspect_variable": 616 | # insp_var = function_to_call(*list(function_args.values())) 617 | # print("Variable inspected:", function_args['var_name']) 618 | # print(insp_var) 619 | # messages.append( 620 | # { 621 | # "role": "tool", 622 | # "tool_call_id": tool_call.id, 623 | # "name": function_name, 624 | # "content": insp_var.__repr__(), 625 | # } 626 | # ) 627 | # LOOP_END = False 628 | elif function_name == "seek_human_input": 629 | print(f"[Loop end, human input needed]\nAI request {list(function_args.values())}") 630 | LOOP_END = True 631 | if LOOP_END: 632 | break 633 | # # Step 4: send the info for each function call and function response to the model 634 | # second_response = client.chat.completions.create( 635 | # model=model_name, 636 | # messages=messages, 637 | # ) 638 | # # get a new response from the model where it can see the function response 639 | # response_message_w_func = second_response.choices[0].message 640 | # print(wrap_breakline(response_message_w_func.content, width=80)) 641 | # messages.append(response_message_w_func) 642 | else: 643 | print("[No tool use. Finishing conversation.]") 644 | break 645 | return messages, nbcells, cell_cache 646 | 647 | class DataAnalysisAgent: 648 | 649 | def __init__(self, model_name='gpt-3.5-turbo-1106', 650 | codeexec_tools=codeexec_tools, 651 | available_functions=available_functions): 652 | self.model_name = model_name 653 | self.messages = [] 654 | self.nbcells = [] 655 | self.cell_cache = [] 656 | self.codeexec_tools = codeexec_tools 657 | self.available_functions = available_functions 658 | 659 | def chat(self, question, MAX_ROUND=15): 660 | self.messages, self.nbcells, self.cell_cache = tool_chat_loop_2nb( 661 | question, model_name=self.model_name, 662 | available_functions=available_functions, 663 | codeexec_tools=codeexec_tools, MAX_ROUND=MAX_ROUND, 664 | chat_history=self.messages, nbcells=self.nbcells) 665 | return self.messages 666 | 667 | def save_nb(self, filename='notebook_with_plot_all.ipynb', save_pdf=False, save_html=False): 668 | nb = save_cells_to_nb(self.nbcells, filename) 669 | if save_pdf: 670 | convert_notebook_to_pdf(nb, filename.replace('.ipynb', '.pdf')) 671 | if save_html: 672 | convert_notebook_to_html(nb, filename.replace('.ipynb', '.html')) 673 | return filename 674 | 675 | def dump_messages(self, filename='messages.json'): 676 | import json 677 | with open(filename, 'w', encoding='utf-8') as f: 678 | json.dump(self.messages, f, indent=4) 679 | 680 | -------------------------------------------------------------------------------- /auto_analytics/utils/format_utils.py: -------------------------------------------------------------------------------- 1 | import textwrap 2 | from IPython.display import display, Math, Markdown, Code 3 | from auto_analytics.utils.json_utils import parse_partial_json 4 | 5 | def wrap_breakline(s, width=70): 6 | return "\n".join("\n".join(textwrap.wrap(x, width=width)) for x in s.splitlines()) 7 | 8 | 9 | def replace_equsymbol_markdown(message): 10 | return message.replace("\(", "$").replace("\)", "$").\ 11 | replace("\[", "$$").replace("\]", "$$") 12 | 13 | 14 | def message_thread_render(messages): 15 | """Render a list of messages in a thread using IPython.display, Markdown, and Code.""" 16 | for message in messages: 17 | # if isinstance(message, dict): 18 | print(dict(message)["role"].upper()) 19 | if "content" in dict(message) and dict(message)["content"] is not None: 20 | display(Markdown(replace_equsymbol_markdown(dict(message)["content"]))) 21 | if "tool_calls" in dict(message) and message.tool_calls is not None: 22 | for tool_call in message.tool_calls: 23 | tool_name = tool_call.function.name 24 | function_args = parse_partial_json(tool_call.function.arguments) 25 | print("Called tool: ", tool_name.upper()) 26 | if "code" in function_args: 27 | display(Code(function_args["code"], language="python")) 28 | else: 29 | print(function_args) 30 | # print(function_args) 31 | -------------------------------------------------------------------------------- /auto_analytics/utils/ipython_utils.py: -------------------------------------------------------------------------------- 1 | import base64 2 | from PIL import Image 3 | import numpy as np 4 | from io import BytesIO 5 | import IPython 6 | from IPython.utils.capture import RichOutput 7 | from IPython.core.interactiveshell import InteractiveShell 8 | 9 | def richoutput_to_image(output): 10 | try: 11 | assert isinstance(output, RichOutput) 12 | # assert output.data['image/png'] 13 | if "image/png" in output.data: 14 | image_data = output.data['image/png'] 15 | image_data = base64.b64decode(image_data) 16 | image = Image.open(BytesIO(image_data)) 17 | return image 18 | elif "text/html" in output.data: 19 | html = output.data['text/html'] 20 | return html 21 | elif "text/plain" in output.data: 22 | # note mostly text/plain and text/html co exist. not one or the other. 23 | text = output.data['text/plain'] 24 | return text 25 | except AssertionError and KeyError: 26 | return None 27 | 28 | 29 | def ipyshell_code_exec(shell, code, verbose=False): 30 | with IPython.utils.io.capture_output() as captured: 31 | # Execute the code 32 | out = shell.run_cell(code) 33 | if verbose: 34 | print("Result of the code execution: ", type(out.result), "\n", out.result) 35 | print("Standard Output:", captured.stdout) 36 | print("Standard Error:", captured.stderr) 37 | print("Captured Outputs:", captured.outputs) 38 | disp_images = [] 39 | if captured.outputs: 40 | for display_output in captured.outputs: 41 | # Process each display output as needed 42 | disp_images.append(richoutput_to_image(display_output)) 43 | # note stdout returns a string 44 | # out.result returns real objects like tensors! important! 45 | return out, captured, disp_images 46 | 47 | 48 | def ipyshell_get_var(shell, var_name): 49 | return shell.user_ns[var_name] -------------------------------------------------------------------------------- /auto_analytics/utils/json_utils.py: -------------------------------------------------------------------------------- 1 | # parse partial json (by replacing and regex) 2 | # Credit to Killian Lucas‘s open-interpreter for this function 3 | # https://github.com/KillianLucas/open-interpreter/blob/a609ba93096ebea4b4fd044d8372a38519218f6a/interpreter/core/llm/utils/parse_partial_json.py 4 | 5 | import json 6 | import re 7 | 8 | 9 | def parse_partial_json(s): 10 | # Attempt to parse the string as-is. 11 | try: 12 | return json.loads(s) 13 | except: 14 | pass 15 | 16 | # Initialize variables. 17 | new_s = "" 18 | stack = [] 19 | is_inside_string = False 20 | escaped = False 21 | 22 | # Process each character in the string one at a time. 23 | for char in s: 24 | if is_inside_string: 25 | if char == '"' and not escaped: 26 | is_inside_string = False 27 | elif char == "\n" and not escaped: 28 | char = "\\n" # Replace the newline character with the escape sequence. 29 | elif char == "\\": 30 | escaped = not escaped 31 | else: 32 | escaped = False 33 | else: 34 | if char == '"': 35 | is_inside_string = True 36 | escaped = False 37 | elif char == "{": 38 | stack.append("}") 39 | elif char == "[": 40 | stack.append("]") 41 | elif char == "}" or char == "]": 42 | if stack and stack[-1] == char: 43 | stack.pop() 44 | else: 45 | # Mismatched closing character; the input is malformed. 46 | return None 47 | 48 | # Append the processed character to the new string. 49 | new_s += char 50 | 51 | # If we're still inside a string at the end of processing, we need to close the string. 52 | if is_inside_string: 53 | new_s += '"' 54 | 55 | # Close any remaining open structures in the reverse order that they were opened. 56 | for closing_char in reversed(stack): 57 | new_s += closing_char 58 | 59 | # Attempt to parse the modified string as JSON. 60 | try: 61 | return json.loads(new_s) 62 | except: 63 | # If we still can't parse the string as JSON, return None to indicate failure. 64 | return None -------------------------------------------------------------------------------- /auto_analytics/utils/nbformat_utils.py: -------------------------------------------------------------------------------- 1 | import nbformat 2 | from nbformat.v4 import new_notebook, new_code_cell, new_output 3 | 4 | def create_code_cell_from_captured(code, out, captured): 5 | """ 6 | Example script of creating a Jupyter notebook from captured outputs 7 | 8 | from nbformat.v4 import new_notebook, new_code_cell, new_output 9 | # Create a new notebook 10 | nb = new_notebook() 11 | # Add a code cell with the executed code 12 | code = "import pandas as pd\ndf = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})\ndf" 13 | out, captured, disp_images = python_code_exec(code) 14 | # code_cell = create_code_cell_from_captured(code, out, captured) 15 | nb.cells.append(create_code_cell_from_captured(code, out, captured)) 16 | code = "print('welcome!');import matplotlib.pyplot as plt\nplt.plot([1,2],[1,2,3,4])\nplt.show()" 17 | out, captured, disp_images = python_code_exec(code) 18 | nb.cells.append(create_code_cell_from_captured(code, out, captured)) 19 | code = "print('welcome!');import matplotlib.pyplot as plt\nplt.plot([1,2,3,4])\nplt.show()" 20 | out, captured, disp_images = python_code_exec(code) 21 | nb.cells.append(create_code_cell_from_captured(code, out, captured)) 22 | 23 | # Write the notebook to a file 24 | filename = 'notebook_with_plot_all.ipynb' 25 | with open(filename, 'w', encoding='utf-8') as f: 26 | nbformat.write(nb, f) 27 | """ 28 | # Add a code cell with the executed code 29 | code_cell = new_code_cell(source=code) 30 | # handle errors 31 | if not out.success: 32 | if out.error_before_exec: 33 | output_stderr = new_output(output_type="stream", 34 | name="stderr", text=repr(out.error_before_exec) ) 35 | code_cell.outputs.append(output_stderr) 36 | if out.error_in_exec: 37 | output_stderr = new_output(output_type="stream", 38 | name="stderr", text=repr(out.error_in_exec) ) 39 | code_cell.outputs.append(output_stderr) 40 | # handle stdout outputs 41 | output_stdout = new_output(output_type="stream", 42 | name="stdout", text=captured.stdout ) 43 | code_cell.outputs.append(output_stdout) 44 | # handle stderror outputs 45 | output_stderr = new_output(output_type="stream", 46 | name="stderr", text=captured.stderr ) 47 | code_cell.outputs.append(output_stderr) 48 | # Process captured outputs 49 | for output in captured.outputs: 50 | if hasattr(output, 'data'): 51 | # For rich outputs (e.g., plots), `data` attribute holds the MIME-typed representations 52 | output_cell = new_output( 53 | output_type='display_data', 54 | data=output.data, 55 | metadata=output.metadata 56 | ) 57 | elif hasattr(output, 'text'): 58 | # For text outputs, `text` attribute holds the content 59 | output_cell = new_output( 60 | output_type='stream', 61 | name='stdout', # or 'stderr' for error outputs 62 | text=output.text 63 | ) 64 | else: 65 | continue # Skip any unsupported output types 66 | 67 | # Append each output cell to the code cell 68 | code_cell.outputs.append(output_cell) 69 | return code_cell 70 | 71 | 72 | def save_cells_to_nb(cells, nbpath, save_pdf=False, save_html=False): 73 | # Create a new notebook 74 | nb = new_notebook() 75 | for cell in cells: 76 | nb.cells.append(cell) 77 | # Write the notebook to a file 78 | with open(nbpath, 'w', encoding='utf-8') as f: 79 | nbformat.write(nb, f) 80 | print(f"Notebook saved to {nbpath}") 81 | if save_html: 82 | try: 83 | convert_notebook_to_html(nb, nbpath.replace('.ipynb', '.html')) 84 | except Exception as e: 85 | print("Failed to convert to html") 86 | print(e) 87 | if save_pdf: 88 | try: 89 | convert_notebook_to_pdf(nb, nbpath.replace('.ipynb', '.pdf')) 90 | except Exception as e: 91 | print("Failed to convert to pdf") 92 | print(e) 93 | return nb 94 | 95 | from nbconvert import HTMLExporter, PDFExporter 96 | import nbformat 97 | 98 | def convert_notebook_to_html(notebook_path, output_path=None): 99 | """ 100 | Converts a Jupyter Notebook to an HTML file. 101 | 102 | Parameters: 103 | - notebook_path: Path to the input Jupyter Notebook (.ipynb). 104 | - output_path: Path for the output HTML file. 105 | """ 106 | # Load the notebook 107 | if type(notebook_path) == str: 108 | with open(notebook_path, 'r', encoding='utf-8') as f: 109 | nb = nbformat.read(f, as_version=4) 110 | elif type(notebook_path) == nbformat.notebooknode.NotebookNode: 111 | nb = notebook_path 112 | else: 113 | raise ValueError("notebook_path must be a string or a NotebookNode") 114 | 115 | # Initialize the HTML Exporter and convert 116 | html_exporter = HTMLExporter() 117 | html_body, _ = html_exporter.from_notebook_node(nb) 118 | if output_path is None and type(notebook_path) == str: 119 | output_path = notebook_path.replace('.ipynb', '.html') 120 | # Write the HTML output 121 | with open(output_path, 'w', encoding='utf-8') as f: 122 | f.write(html_body) 123 | 124 | print(f"HTML report saved to {output_path}") 125 | 126 | 127 | def convert_notebook_to_pdf(notebook_path, output_path=None): 128 | """ 129 | Converts a Jupyter Notebook to a PDF file. 130 | 131 | Parameters: 132 | - notebook_path: Path to the input Jupyter Notebook (.ipynb). 133 | - output_path: Path for the output PDF file. 134 | """ 135 | # Load the notebook 136 | if type(notebook_path) == str: 137 | with open(notebook_path, 'r', encoding='utf-8') as f: 138 | nb = nbformat.read(f, as_version=4) 139 | elif type(notebook_path) == nbformat.notebooknode.NotebookNode: 140 | nb = notebook_path 141 | else: 142 | raise ValueError("notebook_path must be a string or a NotebookNode") 143 | # Initialize the PDF Exporter and convert 144 | pdf_exporter = PDFExporter() 145 | # pdf_exporter.template_file = 'article' 146 | pdf_body, _ = pdf_exporter.from_notebook_node(nb) 147 | if output_path is None and type(notebook_path) == str: 148 | output_path = notebook_path.replace('.ipynb', '.pdf') 149 | # Write the PDF output 150 | with open(output_path, 'wb') as f: 151 | f.write(pdf_body) 152 | 153 | print(f"PDF report saved to {output_path}") 154 | 155 | -------------------------------------------------------------------------------- /auto_analytics/utils/vision_utils.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import requests 3 | 4 | def encode_image(image_path): 5 | with open(image_path, "rb") as image_file: 6 | return base64.b64encode(image_file.read()).decode('utf-8') 7 | 8 | # # Path to your image 9 | # image_path = "path_to_your_image.jpg" 10 | 11 | # # Getting the base64 string 12 | # base64_image = encode_image(image_path) 13 | 14 | # headers = { 15 | # "Content-Type": "application/json", 16 | # "Authorization": f"Bearer {api_key}" 17 | # } 18 | 19 | # payload = { 20 | # "model": "gpt-4-vision-preview", 21 | # "messages": [ 22 | # { 23 | # "role": "user", 24 | # "content": [ 25 | # { 26 | # "type": "text", 27 | # "text": "What’s in this image?" 28 | # }, 29 | # { 30 | # "type": "image_url", 31 | # "image_url": { 32 | # "url": f"data:image/jpeg;base64,{base64_image}" 33 | # } 34 | # } 35 | # ] 36 | # } 37 | # ], 38 | # "max_tokens": 300 39 | # } 40 | 41 | # response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload) 42 | 43 | # print(response.json()) -------------------------------------------------------------------------------- /auto_analytics/vision_chat_loop.py: -------------------------------------------------------------------------------- 1 | from openai import OpenAI 2 | import time 3 | from auto_analytics.utils.format_utils import Markdown, display 4 | from auto_analytics.utils.vision_utils import encode_image 5 | client = OpenAI() 6 | 7 | def vision_qa_response(prompt, base64_image, 8 | img_fmt='image/png', max_tokens=1024, 9 | model_name="gpt-4-vision-preview", display_output=True): 10 | response = client.chat.completions.create( 11 | model=model_name, 12 | messages=[ 13 | { 14 | "role": "user", 15 | "content": [ 16 | { 17 | "type": "text", 18 | "text": prompt, 19 | }, 20 | { 21 | "type": "image_url", 22 | "image_url": { 23 | # "url": f"data:image/jpeg;base64,{base64_image}" 24 | "url": f"data:{img_fmt};base64,{base64_image}" 25 | } 26 | } 27 | ] 28 | } 29 | ], 30 | max_tokens=max_tokens, 31 | ) 32 | # print(response.choices[0]) 33 | # print(response.choices[0].message.content) 34 | if display_output: 35 | display(Markdown(response.choices[0].message.content)) 36 | return response.choices[0].message 37 | 38 | -------------------------------------------------------------------------------- /docs/Schematics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Animadversio/GPT-Auto-Data-Analytics/7aeb2d505c2ee152da1d515813dcc30f76a057a8/docs/Schematics.png -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman 2 | title: GPT-Auto-Data-Analytics 3 | description: Project Page for GPT-Auto-Data-Analytics 4 | author: Binxu Wang -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # GPT-Auto-Data-Analytics 2 | 3 | ### Automate local data analysis with groups of tool-using GPT agents. 4 | 5 | ChatGPT and Code Interpreter has changed the way of data analysis. 6 | But have you ever got frustrated about ... 7 | 8 | * 🤔 Limited runtime and computing resources (no GPU access!) 9 | * 📊 Challenges in handling large and complex local datasets (which is hard to upload) 10 | * 📦 Certain Python packages being unavailable in online environment. 11 | * 🚫 No vision ability to interpret the generated figures. 12 | * 🧩 Lack of organized output from the analysis. 13 | 14 | 15 | This project aims to replicate the online code interpreter experience locally, but also addressing all the issues mentioned above: 16 | 17 | * 💻 Code generation and execution in a local Python kernel 18 | * 📂 Full access to your data on local storage 19 | * 🤖 A supervisor agent guides the coding agent to iteratively solve data analysis problems 20 | * 👀 Vision capabilities for the coding agent to interpret visual figures 21 | * 📚 Organized output, exported as Jupyter notebooks, PDF, and HTML 22 | 23 | 24 | 27 | 28 | ## 🚀 Installation 29 | ```bash 30 | git clone https://github.com/Animadversio/GPT-Auto-Data-Analytics.git 31 | cd GPT-Auto-Data-Analytics 32 | pip install -e . 33 | ``` 34 | ## Usage 35 | 36 | ```python 37 | # set up openai key env variable 38 | from auto_analytics.tabular_analysis_session import TabularAnalysisPipeline 39 | # Tell the agent some info about your data and columns, and your overall objective. 40 | table_descriptions = """...""" 41 | column_descriptions = """...""" 42 | task_objective = """Perform explorative data analysis of this dataset to uncover relationships among different variables.""" 43 | csvpath = "~/GPT-Auto-Data-Analytics/table_data/Diabetes_Blood_Classification.csv" 44 | report_root = "reports" 45 | 46 | # Example usage 47 | analysis_session = TabularAnalysisPipeline("Diabetes_Classification", csvpath, report_root=report_root) 48 | # Set up dataset and column descriptions 49 | analysis_session.set_dataset_description(table_descriptions, column_descriptions) 50 | # Let supervisor agent setup and save analysis task 51 | analysis_session.supervisor_set_analysis_task(task_objective, ) 52 | # Let research assitent perform data analysis 53 | analysis_session.perform_data_analysis(query=None, MAX_ROUND=30) 54 | # Save results to notebook, HTML, and PDF 55 | analysis_session.save_results() 56 | ``` 57 | 58 | [Play with our Colab demo! ![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/17DnAiE6EdAtLfX7xjdxvMEV5HUtBKTq6?usp=sharing) 59 | 60 | [Video walk-through of our system](https://youtu.be/APP0uvU3QAQ?si=B4bVy646wH1WkMxX) 61 | 62 | ### ✅ Current Features 🌟 63 | 64 | - **Auto Analytics in Local Env:** The coding agent have access to a local python kernel, which runs code and interacts with data on your computer. No more concerns about file uploads, compute limitations, or the online ChatGPT code interpreter environment. Leverage any Python library or computing resources as needed. 65 | - **Collaborative Intelligence:** We've built a team of LLM agents assuming the roles of research supervisor and coding assistant. Their interaction allows the supervisor's overarching vision to guide the detailed coding and data analysis process, leading to a cohesive report. 66 | - **Tabular Data Analysis:** Full support for tabular data analysis (e.g., Kaggle competitions). From tables to analytical insights in one step. 67 | - **Vision Analytics:** Integration with Vision API enables the data analytics agent to generate and understand the meaning of plots in a closed loop. 68 | - **Versatile Report Export:** After automated data analysis, a Jupyter notebook is generated, combining code, results, and visuals into a narrative that tells the story of your data. Exports are available in Jupyter notebook, PDF, and HTML formats for your review and reproduction. 69 | 70 | ### How does it work? 71 | ![](Schematics.png) 72 |
73 | Click to expand! 74 | 75 | **System Overview**. Our high-level idea is to emulate the workflow in research labs: we will assign roles to AI agents, such as research supervisor or student coding agent and let them work in a closed loop. The supervisor, equipped with broader background knowledge, is tasked to set an overarching research goal, and then break it down into detailed code-solvable tasks which are sent to the student. Then, the student coding agent, equipped with coding tool and vision capability, will tackle the tasks one-by-one, synthesizing their findings into reports for the supervisor's review. This iterative process allows the supervisor to refine their understanding and possibly adjust the research agenda, prompting further investigation. Through this collaborative effort, both parties converge to a unified conclusion, culminating in a final report with code, figures and text interpretations. 76 | 77 | **Internal Coding Loop**. At the core of our system lies the coding agent, an LLM agent who is tasked for conducting interactive data analysis. This agent will take in task objective, and then analyze datasets by outputting code snippets, which are executed in a local IPython kernel. The results of code execution (including error message) will be sent back to LLM in the form of text strings. Notably, when figures are generated, they will also be turned into text descriptions by a multimodal LLM prompted to interpret the figure . 78 | 79 |
80 | 81 | ### 🌐 What's Next? 82 | - [ ] Better report summarization. 83 | - [ ] Enhanced report presentation. (filtering, formating etc.) 84 | - [ ] CLI interface to auto data analysis. 85 | - [ ] Addressing complex, multi-file data analysis challenges. 86 | - [ ] Tackling multi-modal data analysis problems, including text, image and neural data. 87 | - [ ] Enhancing multi-round communication between the supervisor and the coding agent, adjusting the research goal based on the report 88 | 89 | ## Join Us on This Journey 90 | As an end goal, we hope our tools can auto-pilot data analysis on its own. 91 | If you're interested in using our tool in your daily data analysis work or scientific research, we'd love to hear your thoughts and what you find interesting! 92 | 93 | * Binxu Wang 94 | * **Email**: binxu_wang@hms.harvard.edu 95 | 96 | 97 | -------------------------------------------------------------------------------- /notebooks/tool_use_math_demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import sys\n", 10 | "sys.path.append('../')\n", 11 | "from auto_analytics.tool_chat_loop import tool_chat_loop,tool_chat_loop_2, shell\n", 12 | "from auto_analytics.utils.format_utils import message_thread_render" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 3, 18 | "metadata": {}, 19 | "outputs": [ 20 | { 21 | "name": "stdout", 22 | "output_type": "stream", 23 | "text": [ 24 | "Python Code executed:\n", 25 | "```python\n", 26 | "import numpy as np\n", 27 | "from sympy import Matrix\n", 28 | "\n", 29 | "# Define matrix\n", 30 | "A = np.array([[1, 2], [3, 4]])\n", 31 | "\n", 32 | "# Calculate the inverse in the finite field of 7\n", 33 | "A_mod7 = Matrix(A).inv_mod(7)\n", 34 | "A_mod7\n", 35 | "```\n", 36 | "Execution Succeed:\n" 37 | ] 38 | }, 39 | { 40 | "data": { 41 | "text/latex": [ 42 | "$\\displaystyle \\left[\\begin{matrix}5 & 1\\\\5 & 3\\end{matrix}\\right]$" 43 | ], 44 | "text/plain": [ 45 | "Matrix([\n", 46 | "[5, 1],\n", 47 | "[5, 3]])" 48 | ] 49 | }, 50 | "metadata": {}, 51 | "output_type": "display_data" 52 | }, 53 | { 54 | "name": "stdout", 55 | "output_type": "stream", 56 | "text": [ 57 | "The inverse of the matrix [[1, 2], [3, 4]] in the finite field of 7 is:\n", 58 | "\n", 59 | "[[5, 1],\n", 60 | "[5, 3]]\n", 61 | "[No tool use. Finishing conversation.]\n" 62 | ] 63 | } 64 | ], 65 | "source": [ 66 | "messages = tool_chat_loop_2(\"Can you solve the matrix inverse of [[1 2],[3 4]] in the finite field of 7?\")" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 6, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "data": { 76 | "text/latex": [ 77 | "$\\displaystyle \\left[\\begin{matrix}1 & 0\\\\0 & 1\\end{matrix}\\right]$" 78 | ], 79 | "text/plain": [ 80 | "Matrix([\n", 81 | "[1, 0],\n", 82 | "[0, 1]])" 83 | ] 84 | }, 85 | "execution_count": 6, 86 | "metadata": {}, 87 | "output_type": "execute_result" 88 | } 89 | ], 90 | "source": [ 91 | "(shell.user_ns[\"A\"] @ shell.user_ns[\"A_mod7\"])%7" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": null, 97 | "metadata": {}, 98 | "outputs": [], 99 | "source": [] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": null, 104 | "metadata": {}, 105 | "outputs": [], 106 | "source": [] 107 | } 108 | ], 109 | "metadata": { 110 | "kernelspec": { 111 | "display_name": "torch", 112 | "language": "python", 113 | "name": "python3" 114 | }, 115 | "language_info": { 116 | "codemirror_mode": { 117 | "name": "ipython", 118 | "version": 3 119 | }, 120 | "file_extension": ".py", 121 | "mimetype": "text/x-python", 122 | "name": "python", 123 | "nbconvert_exporter": "python", 124 | "pygments_lexer": "ipython3", 125 | "version": "3.11.6" 126 | } 127 | }, 128 | "nbformat": 4, 129 | "nbformat_minor": 2 130 | } 131 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | setup( 4 | name='auto_analytics', 5 | version='0.1.0', 6 | author='Binxu Wang', 7 | author_email='binxu_wang@hms.harvard.edu', 8 | description='Automated local data analytics and report generation powered by GPT models.', 9 | long_description="", 10 | long_description_content_type='text/markdown', 11 | url='https://github.com/Animadversio/GPT-Auto-Data-Analytics', 12 | packages=find_packages(), 13 | install_requires=[ 14 | 'openai_multi_tool_use_parallel_patch', 15 | 'nbformat', 16 | 'openai', 17 | # Add your package dependencies here 18 | # Example: 19 | # 'numpy>=1.19.2', 20 | # 'pandas>=1.1.3', 21 | # 'transformers>=4.0.0', 22 | ], 23 | python_requires='>=3.7', 24 | classifiers=[ 25 | 'Development Status :: 3 - Alpha', 26 | 'Intended Audience :: Developers', 27 | 'Topic :: Software Development :: Build Tools', 28 | 'License :: OSI Approved :: MIT License', 29 | 'Programming Language :: Python :: 3', 30 | 'Programming Language :: Python :: 3.7', 31 | 'Programming Language :: Python :: 3.8', 32 | 'Programming Language :: Python :: 3.9', 33 | 'Programming Language :: Python :: 3.10', 34 | ], 35 | keywords='data analytics, GPT, automation', 36 | ) -------------------------------------------------------------------------------- /table_data/BostonHousing.csv: -------------------------------------------------------------------------------- 1 | crim,zn,indus,chas,nox,rm,age,dis,rad,tax,ptratio,b,lstat,medv 2 | 0.00632,18,2.31,0,0.538,6.575,65.2,4.09,1,296,15.3,396.9,4.98,24 3 | 0.02731,0,7.07,0,0.469,6.421,78.9,4.9671,2,242,17.8,396.9,9.14,21.6 4 | 0.02729,0,7.07,0,0.469,7.185,61.1,4.9671,2,242,17.8,392.83,4.03,34.7 5 | 0.03237,0,2.18,0,0.458,6.998,45.8,6.0622,3,222,18.7,394.63,2.94,33.4 6 | 0.06905,0,2.18,0,0.458,7.147,54.2,6.0622,3,222,18.7,396.9,5.33,36.2 7 | 0.02985,0,2.18,0,0.458,6.43,58.7,6.0622,3,222,18.7,394.12,5.21,28.7 8 | 0.08829,12.5,7.87,0,0.524,6.012,66.6,5.5605,5,311,15.2,395.6,12.43,22.9 9 | 0.14455,12.5,7.87,0,0.524,6.172,96.1,5.9505,5,311,15.2,396.9,19.15,27.1 10 | 0.21124,12.5,7.87,0,0.524,5.631,100,6.0821,5,311,15.2,386.63,29.93,16.5 11 | 0.17004,12.5,7.87,0,0.524,6.004,85.9,6.5921,5,311,15.2,386.71,17.1,18.9 12 | 0.22489,12.5,7.87,0,0.524,,94.3,6.3467,5,311,15.2,392.52,20.45,15 13 | 0.11747,12.5,7.87,0,0.524,6.009,82.9,6.2267,5,311,15.2,396.9,13.27,18.9 14 | 0.09378,12.5,7.87,0,0.524,5.889,39,5.4509,5,311,15.2,390.5,15.71,21.7 15 | 0.62976,0,8.14,0,0.538,5.949,61.8,4.7075,4,307,21,396.9,8.26,20.4 16 | 0.63796,0,8.14,0,0.538,6.096,84.5,4.4619,4,307,21,380.02,10.26,18.2 17 | 0.62739,0,8.14,0,0.538,5.834,56.5,4.4986,4,307,21,395.62,8.47,19.9 18 | 1.05393,0,8.14,0,0.538,5.935,29.3,4.4986,4,307,21,386.85,6.58,23.1 19 | 0.7842,0,8.14,0,0.538,5.99,81.7,4.2579,4,307,21,386.75,14.67,17.5 20 | 0.80271,0,8.14,0,0.538,5.456,36.6,3.7965,4,307,21,288.99,11.69,20.2 21 | 0.7258,0,8.14,0,0.538,5.727,69.5,3.7965,4,307,21,390.95,11.28,18.2 22 | 1.25179,0,8.14,0,0.538,5.57,98.1,3.7979,4,307,21,376.57,21.02,13.6 23 | 0.85204,0,8.14,0,0.538,5.965,89.2,4.0123,4,307,21,392.53,13.83,19.6 24 | 1.23247,0,8.14,0,0.538,6.142,91.7,3.9769,4,307,21,396.9,18.72,15.2 25 | 0.98843,0,8.14,0,0.538,5.813,100,4.0952,4,307,21,394.54,19.88,14.5 26 | 0.75026,0,8.14,0,0.538,5.924,94.1,4.3996,4,307,21,394.33,16.3,15.6 27 | 0.84054,0,8.14,0,0.538,5.599,85.7,4.4546,4,307,21,303.42,16.51,13.9 28 | 0.67191,0,8.14,0,0.538,5.813,90.3,4.682,4,307,21,376.88,14.81,16.6 29 | 0.95577,0,8.14,0,0.538,6.047,88.8,4.4534,4,307,21,306.38,17.28,14.8 30 | 0.77299,0,8.14,0,0.538,6.495,94.4,4.4547,4,307,21,387.94,12.8,18.4 31 | 1.00245,0,8.14,0,0.538,6.674,87.3,4.239,4,307,21,380.23,11.98,21 32 | 1.13081,0,8.14,0,0.538,5.713,94.1,4.233,4,307,21,360.17,22.6,12.7 33 | 1.35472,0,8.14,0,0.538,6.072,100,4.175,4,307,21,376.73,13.04,14.5 34 | 1.38799,0,8.14,0,0.538,5.95,82,3.99,4,307,21,232.6,27.71,13.2 35 | 1.15172,0,8.14,0,0.538,5.701,95,3.7872,4,307,21,358.77,18.35,13.1 36 | 1.61282,0,8.14,0,0.538,6.096,96.9,3.7598,4,307,21,248.31,20.34,13.5 37 | 0.06417,0,5.96,0,0.499,,68.2,3.3603,5,279,19.2,396.9,9.68,18.9 38 | 0.09744,0,5.96,0,0.499,5.841,61.4,3.3779,5,279,19.2,377.56,11.41,20 39 | 0.08014,0,5.96,0,0.499,5.85,41.5,3.9342,5,279,19.2,396.9,8.77,21 40 | 0.17505,0,5.96,0,0.499,5.966,30.2,3.8473,5,279,19.2,393.43,10.13,24.7 41 | 0.02763,75,2.95,0,0.428,6.595,21.8,5.4011,3,252,18.3,395.63,4.32,30.8 42 | 0.03359,75,2.95,0,0.428,7.024,15.8,5.4011,3,252,18.3,395.62,1.98,34.9 43 | 0.12744,0,6.91,0,0.448,6.77,2.9,5.7209,3,233,17.9,385.41,4.84,26.6 44 | 0.1415,0,6.91,0,0.448,6.169,6.6,5.7209,3,233,17.9,383.37,5.81,25.3 45 | 0.15936,0,6.91,0,0.448,6.211,6.5,5.7209,3,233,17.9,394.46,7.44,24.7 46 | 0.12269,0,6.91,0,0.448,6.069,40,5.7209,3,233,17.9,389.39,9.55,21.2 47 | 0.17142,0,6.91,0,0.448,5.682,33.8,5.1004,3,233,17.9,396.9,10.21,19.3 48 | 0.18836,0,6.91,0,0.448,5.786,33.3,5.1004,3,233,17.9,396.9,14.15,20 49 | 0.22927,0,6.91,0,0.448,6.03,85.5,5.6894,3,233,17.9,392.74,18.8,16.6 50 | 0.25387,0,6.91,0,0.448,5.399,95.3,5.87,3,233,17.9,396.9,30.81,14.4 51 | 0.21977,0,6.91,0,0.448,5.602,62,6.0877,3,233,17.9,396.9,16.2,19.4 52 | 0.08873,21,5.64,0,0.439,5.963,45.7,6.8147,4,243,16.8,395.56,13.45,19.7 53 | 0.04337,21,5.64,0,0.439,6.115,63,6.8147,4,243,16.8,393.97,9.43,20.5 54 | 0.0536,21,5.64,0,0.439,6.511,21.1,6.8147,4,243,16.8,396.9,5.28,25 55 | 0.04981,21,5.64,0,0.439,5.998,21.4,6.8147,4,243,16.8,396.9,8.43,23.4 56 | 0.0136,75,4,0,0.41,5.888,47.6,7.3197,3,469,21.1,396.9,14.8,18.9 57 | 0.01311,90,1.22,0,0.403,7.249,21.9,8.6966,5,226,17.9,395.93,4.81,35.4 58 | 0.02055,85,0.74,0,0.41,6.383,35.7,9.1876,2,313,17.3,396.9,5.77,24.7 59 | 0.01432,100,1.32,0,0.411,6.816,40.5,8.3248,5,256,15.1,392.9,3.95,31.6 60 | 0.15445,25,5.13,0,0.453,6.145,29.2,7.8148,8,284,19.7,390.68,6.86,23.3 61 | 0.10328,25,5.13,0,0.453,5.927,47.2,6.932,8,284,19.7,396.9,9.22,19.6 62 | 0.14932,25,5.13,0,0.453,5.741,66.2,7.2254,8,284,19.7,395.11,13.15,18.7 63 | 0.17171,25,5.13,0,0.453,5.966,93.4,6.8185,8,284,19.7,378.08,14.44,16 64 | 0.11027,25,5.13,0,0.453,6.456,67.8,7.2255,8,284,19.7,396.9,6.73,22.2 65 | 0.1265,25,5.13,0,0.453,,43.4,7.9809,8,284,19.7,395.58,9.5,25 66 | 0.01951,17.5,1.38,0,0.4161,7.104,59.5,9.2229,3,216,18.6,393.24,8.05,33 67 | 0.03584,80,3.37,0,0.398,6.29,17.8,6.6115,4,337,16.1,396.9,4.67,23.5 68 | 0.04379,80,3.37,0,0.398,5.787,31.1,6.6115,4,337,16.1,396.9,10.24,19.4 69 | 0.05789,12.5,6.07,0,0.409,5.878,21.4,6.498,4,345,18.9,396.21,8.1,22 70 | 0.13554,12.5,6.07,0,0.409,5.594,36.8,6.498,4,345,18.9,396.9,13.09,17.4 71 | 0.12816,12.5,6.07,0,0.409,5.885,33,6.498,4,345,18.9,396.9,8.79,20.9 72 | 0.08826,0,10.81,0,0.413,6.417,6.6,5.2873,4,305,19.2,383.73,6.72,24.2 73 | 0.15876,0,10.81,0,0.413,5.961,17.5,5.2873,4,305,19.2,376.94,9.88,21.7 74 | 0.09164,0,10.81,0,0.413,6.065,7.8,5.2873,4,305,19.2,390.91,5.52,22.8 75 | 0.19539,0,10.81,0,0.413,6.245,6.2,5.2873,4,305,19.2,377.17,7.54,23.4 76 | 0.07896,0,12.83,0,0.437,6.273,6,4.2515,5,398,18.7,394.92,6.78,24.1 77 | 0.09512,0,12.83,0,0.437,6.286,45,4.5026,5,398,18.7,383.23,8.94,21.4 78 | 0.10153,0,12.83,0,0.437,6.279,74.5,4.0522,5,398,18.7,373.66,11.97,20 79 | 0.08707,0,12.83,0,0.437,6.14,45.8,4.0905,5,398,18.7,386.96,10.27,20.8 80 | 0.05646,0,12.83,0,0.437,6.232,53.7,5.0141,5,398,18.7,386.4,12.34,21.2 81 | 0.08387,0,12.83,0,0.437,5.874,36.6,4.5026,5,398,18.7,396.06,9.1,20.3 82 | 0.04113,25,4.86,0,0.426,6.727,33.5,5.4007,4,281,19,396.9,5.29,28 83 | 0.04462,25,4.86,0,0.426,6.619,70.4,5.4007,4,281,19,395.63,7.22,23.9 84 | 0.03659,25,4.86,0,0.426,6.302,32.2,5.4007,4,281,19,396.9,6.72,24.8 85 | 0.03551,25,4.86,0,0.426,6.167,46.7,5.4007,4,281,19,390.64,7.51,22.9 86 | 0.05059,0,4.49,0,0.449,6.389,48,4.7794,3,247,18.5,396.9,9.62,23.9 87 | 0.05735,0,4.49,0,0.449,6.63,56.1,4.4377,3,247,18.5,392.3,6.53,26.6 88 | 0.05188,0,4.49,0,0.449,6.015,45.1,4.4272,3,247,18.5,395.99,12.86,22.5 89 | 0.07151,0,4.49,0,0.449,6.121,56.8,3.7476,3,247,18.5,395.15,8.44,22.2 90 | 0.0566,0,3.41,0,0.489,7.007,86.3,3.4217,2,270,17.8,396.9,5.5,23.6 91 | 0.05302,0,3.41,0,0.489,7.079,63.1,3.4145,2,270,17.8,396.06,5.7,28.7 92 | 0.04684,0,3.41,0,0.489,6.417,66.1,3.0923,2,270,17.8,392.18,8.81,22.6 93 | 0.03932,0,3.41,0,0.489,6.405,73.9,3.0921,2,270,17.8,393.55,8.2,22 94 | 0.04203,28,15.04,0,0.464,6.442,53.6,3.6659,4,270,18.2,395.01,8.16,22.9 95 | 0.02875,28,15.04,0,0.464,6.211,28.9,3.6659,4,270,18.2,396.33,6.21,25 96 | 0.04294,28,15.04,0,0.464,6.249,77.3,3.615,4,270,18.2,396.9,10.59,20.6 97 | 0.12204,0,2.89,0,0.445,6.625,57.8,3.4952,2,276,18,357.98,6.65,28.4 98 | 0.11504,0,2.89,0,0.445,,69.6,3.4952,2,276,18,391.83,11.34,21.4 99 | 0.12083,0,2.89,0,0.445,8.069,76,3.4952,2,276,18,396.9,4.21,38.7 100 | 0.08187,0,2.89,0,0.445,7.82,36.9,3.4952,2,276,18,393.53,3.57,43.8 101 | 0.0686,0,2.89,0,0.445,7.416,62.5,3.4952,2,276,18,396.9,6.19,33.2 102 | 0.14866,0,8.56,0,0.52,6.727,79.9,2.7778,5,384,20.9,394.76,9.42,27.5 103 | 0.11432,0,8.56,0,0.52,6.781,71.3,2.8561,5,384,20.9,395.58,7.67,26.5 104 | 0.22876,0,8.56,0,0.52,6.405,85.4,2.7147,5,384,20.9,70.8,10.63,18.6 105 | 0.21161,0,8.56,0,0.52,6.137,87.4,2.7147,5,384,20.9,394.47,13.44,19.3 106 | 0.1396,0,8.56,0,0.52,6.167,90,2.421,5,384,20.9,392.69,12.33,20.1 107 | 0.13262,0,8.56,0,0.52,5.851,96.7,2.1069,5,384,20.9,394.05,16.47,19.5 108 | 0.1712,0,8.56,0,0.52,5.836,91.9,2.211,5,384,20.9,395.67,18.66,19.5 109 | 0.13117,0,8.56,0,0.52,6.127,85.2,2.1224,5,384,20.9,387.69,14.09,20.4 110 | 0.12802,0,8.56,0,0.52,6.474,97.1,2.4329,5,384,20.9,395.24,12.27,19.8 111 | 0.26363,0,8.56,0,0.52,6.229,91.2,2.5451,5,384,20.9,391.23,15.55,19.4 112 | 0.10793,0,8.56,0,0.52,6.195,54.4,2.7778,5,384,20.9,393.49,13,21.7 113 | 0.10084,0,10.01,0,0.547,6.715,81.6,2.6775,6,432,17.8,395.59,10.16,22.8 114 | 0.12329,0,10.01,0,0.547,5.913,92.9,2.3534,6,432,17.8,394.95,16.21,18.8 115 | 0.22212,0,10.01,0,0.547,6.092,95.4,2.548,6,432,17.8,396.9,17.09,18.7 116 | 0.14231,0,10.01,0,0.547,6.254,84.2,2.2565,6,432,17.8,388.74,10.45,18.5 117 | 0.17134,0,10.01,0,0.547,5.928,88.2,2.4631,6,432,17.8,344.91,15.76,18.3 118 | 0.13158,0,10.01,0,0.547,6.176,72.5,2.7301,6,432,17.8,393.3,12.04,21.2 119 | 0.15098,0,10.01,0,0.547,6.021,82.6,2.7474,6,432,17.8,394.51,10.3,19.2 120 | 0.13058,0,10.01,0,0.547,5.872,73.1,2.4775,6,432,17.8,338.63,15.37,20.4 121 | 0.14476,0,10.01,0,0.547,5.731,65.2,2.7592,6,432,17.8,391.5,13.61,19.3 122 | 0.06899,0,25.65,0,0.581,5.87,69.7,2.2577,2,188,19.1,389.15,14.37,22 123 | 0.07165,0,25.65,0,0.581,6.004,84.1,2.1974,2,188,19.1,377.67,14.27,20.3 124 | 0.09299,0,25.65,0,0.581,5.961,92.9,2.0869,2,188,19.1,378.09,17.93,20.5 125 | 0.15038,0,25.65,0,0.581,5.856,97,1.9444,2,188,19.1,370.31,25.41,17.3 126 | 0.09849,0,25.65,0,0.581,5.879,95.8,2.0063,2,188,19.1,379.38,17.58,18.8 127 | 0.16902,0,25.65,0,0.581,5.986,88.4,1.9929,2,188,19.1,385.02,14.81,21.4 128 | 0.38735,0,25.65,0,0.581,5.613,95.6,1.7572,2,188,19.1,359.29,27.26,15.7 129 | 0.25915,0,21.89,0,0.624,5.693,96,1.7883,4,437,21.2,392.11,17.19,16.2 130 | 0.32543,0,21.89,0,0.624,6.431,98.8,1.8125,4,437,21.2,396.9,15.39,18 131 | 0.88125,0,21.89,0,0.624,5.637,94.7,1.9799,4,437,21.2,396.9,18.34,14.3 132 | 0.34006,0,21.89,0,0.624,6.458,98.9,2.1185,4,437,21.2,395.04,12.6,19.2 133 | 1.19294,0,21.89,0,0.624,6.326,97.7,2.271,4,437,21.2,396.9,12.26,19.6 134 | 0.59005,0,21.89,0,0.624,6.372,97.9,2.3274,4,437,21.2,385.76,11.12,23 135 | 0.32982,0,21.89,0,0.624,5.822,95.4,2.4699,4,437,21.2,388.69,15.03,18.4 136 | 0.97617,0,21.89,0,0.624,5.757,98.4,2.346,4,437,21.2,262.76,17.31,15.6 137 | 0.55778,0,21.89,0,0.624,,98.2,2.1107,4,437,21.2,394.67,16.96,18.1 138 | 0.32264,0,21.89,0,0.624,5.942,93.5,1.9669,4,437,21.2,378.25,16.9,17.4 139 | 0.35233,0,21.89,0,0.624,6.454,98.4,1.8498,4,437,21.2,394.08,14.59,17.1 140 | 0.2498,0,21.89,0,0.624,5.857,98.2,1.6686,4,437,21.2,392.04,21.32,13.3 141 | 0.54452,0,21.89,0,0.624,6.151,97.9,1.6687,4,437,21.2,396.9,18.46,17.8 142 | 0.2909,0,21.89,0,0.624,6.174,93.6,1.6119,4,437,21.2,388.08,24.16,14 143 | 1.62864,0,21.89,0,0.624,5.019,100,1.4394,4,437,21.2,396.9,34.41,14.4 144 | 3.32105,0,19.58,1,0.871,5.403,100,1.3216,5,403,14.7,396.9,26.82,13.4 145 | 4.0974,0,19.58,0,0.871,5.468,100,1.4118,5,403,14.7,396.9,26.42,15.6 146 | 2.77974,0,19.58,0,0.871,4.903,97.8,1.3459,5,403,14.7,396.9,29.29,11.8 147 | 2.37934,0,19.58,0,0.871,6.13,100,1.4191,5,403,14.7,172.91,27.8,13.8 148 | 2.15505,0,19.58,0,0.871,5.628,100,1.5166,5,403,14.7,169.27,16.65,15.6 149 | 2.36862,0,19.58,0,0.871,4.926,95.7,1.4608,5,403,14.7,391.71,29.53,14.6 150 | 2.33099,0,19.58,0,0.871,5.186,93.8,1.5296,5,403,14.7,356.99,28.32,17.8 151 | 2.73397,0,19.58,0,0.871,5.597,94.9,1.5257,5,403,14.7,351.85,21.45,15.4 152 | 1.6566,0,19.58,0,0.871,6.122,97.3,1.618,5,403,14.7,372.8,14.1,21.5 153 | 1.49632,0,19.58,0,0.871,5.404,100,1.5916,5,403,14.7,341.6,13.28,19.6 154 | 1.12658,0,19.58,1,0.871,5.012,88,1.6102,5,403,14.7,343.28,12.12,15.3 155 | 2.14918,0,19.58,0,0.871,5.709,98.5,1.6232,5,403,14.7,261.95,15.79,19.4 156 | 1.41385,0,19.58,1,0.871,6.129,96,1.7494,5,403,14.7,321.02,15.12,17 157 | 3.53501,0,19.58,1,0.871,6.152,82.6,1.7455,5,403,14.7,88.01,15.02,15.6 158 | 2.44668,0,19.58,0,0.871,5.272,94,1.7364,5,403,14.7,88.63,16.14,13.1 159 | 1.22358,0,19.58,0,0.605,6.943,97.4,1.8773,5,403,14.7,363.43,4.59,41.3 160 | 1.34284,0,19.58,0,0.605,6.066,100,1.7573,5,403,14.7,353.89,6.43,24.3 161 | 1.42502,0,19.58,0,0.871,6.51,100,1.7659,5,403,14.7,364.31,7.39,23.3 162 | 1.27346,0,19.58,1,0.605,6.25,92.6,1.7984,5,403,14.7,338.92,5.5,27 163 | 1.46336,0,19.58,0,0.605,7.489,90.8,1.9709,5,403,14.7,374.43,1.73,50 164 | 1.83377,0,19.58,1,0.605,7.802,98.2,2.0407,5,403,14.7,389.61,1.92,50 165 | 1.51902,0,19.58,1,0.605,8.375,93.9,2.162,5,403,14.7,388.45,3.32,50 166 | 2.24236,0,19.58,0,0.605,5.854,91.8,2.422,5,403,14.7,395.11,11.64,22.7 167 | 2.924,0,19.58,0,0.605,6.101,93,2.2834,5,403,14.7,240.16,9.81,25 168 | 2.01019,0,19.58,0,0.605,7.929,96.2,2.0459,5,403,14.7,369.3,3.7,50 169 | 1.80028,0,19.58,0,0.605,5.877,79.2,2.4259,5,403,14.7,227.61,12.14,23.8 170 | 2.3004,0,19.58,0,0.605,6.319,96.1,2.1,5,403,14.7,297.09,11.1,23.8 171 | 2.44953,0,19.58,0,0.605,6.402,95.2,2.2625,5,403,14.7,330.04,11.32,22.3 172 | 1.20742,0,19.58,0,0.605,5.875,94.6,2.4259,5,403,14.7,292.29,14.43,17.4 173 | 2.3139,0,19.58,0,0.605,5.88,97.3,2.3887,5,403,14.7,348.13,12.03,19.1 174 | 0.13914,0,4.05,0,0.51,5.572,88.5,2.5961,5,296,16.6,396.9,14.69,23.1 175 | 0.09178,0,4.05,0,0.51,6.416,84.1,2.6463,5,296,16.6,395.5,9.04,23.6 176 | 0.08447,0,4.05,0,0.51,5.859,68.7,2.7019,5,296,16.6,393.23,9.64,22.6 177 | 0.06664,0,4.05,0,0.51,6.546,33.1,3.1323,5,296,16.6,390.96,5.33,29.4 178 | 0.07022,0,4.05,0,0.51,6.02,47.2,3.5549,5,296,16.6,393.23,10.11,23.2 179 | 0.05425,0,4.05,0,0.51,6.315,73.4,3.3175,5,296,16.6,395.6,6.29,24.6 180 | 0.06642,0,4.05,0,0.51,6.86,74.4,2.9153,5,296,16.6,391.27,6.92,29.9 181 | 0.0578,0,2.46,0,0.488,6.98,58.4,2.829,3,193,17.8,396.9,5.04,37.2 182 | 0.06588,0,2.46,0,0.488,7.765,83.3,2.741,3,193,17.8,395.56,7.56,39.8 183 | 0.06888,0,2.46,0,0.488,6.144,62.2,2.5979,3,193,17.8,396.9,9.45,36.2 184 | 0.09103,0,2.46,0,0.488,7.155,92.2,2.7006,3,193,17.8,394.12,4.82,37.9 185 | 0.10008,0,2.46,0,0.488,6.563,95.6,2.847,3,193,17.8,396.9,5.68,32.5 186 | 0.08308,0,2.46,0,0.488,5.604,89.8,2.9879,3,193,17.8,391,13.98,26.4 187 | 0.06047,0,2.46,0,0.488,6.153,68.8,3.2797,3,193,17.8,387.11,13.15,29.6 188 | 0.05602,0,2.46,0,0.488,7.831,53.6,3.1992,3,193,17.8,392.63,4.45,50 189 | 0.07875,45,3.44,0,0.437,6.782,41.1,3.7886,5,398,15.2,393.87,6.68,32 190 | 0.12579,45,3.44,0,0.437,6.556,29.1,4.5667,5,398,15.2,382.84,4.56,29.8 191 | 0.0837,45,3.44,0,0.437,7.185,38.9,4.5667,5,398,15.2,396.9,5.39,34.9 192 | 0.09068,45,3.44,0,0.437,6.951,21.5,6.4798,5,398,15.2,377.68,5.1,37 193 | 0.06911,45,3.44,0,0.437,6.739,30.8,6.4798,5,398,15.2,389.71,4.69,30.5 194 | 0.08664,45,3.44,0,0.437,7.178,26.3,6.4798,5,398,15.2,390.49,2.87,36.4 195 | 0.02187,60,2.93,0,0.401,6.8,9.9,6.2196,1,265,15.6,393.37,5.03,31.1 196 | 0.01439,60,2.93,0,0.401,6.604,18.8,6.2196,1,265,15.6,376.7,4.38,29.1 197 | 0.01381,80,0.46,0,0.422,7.875,32,5.6484,4,255,14.4,394.23,2.97,50 198 | 0.04011,80,1.52,0,0.404,7.287,34.1,7.309,2,329,12.6,396.9,4.08,33.3 199 | 0.04666,80,1.52,0,0.404,7.107,36.6,7.309,2,329,12.6,354.31,8.61,30.3 200 | 0.03768,80,1.52,0,0.404,7.274,38.3,7.309,2,329,12.6,392.2,6.62,34.6 201 | 0.0315,95,1.47,0,0.403,6.975,15.3,7.6534,3,402,17,396.9,4.56,34.9 202 | 0.01778,95,1.47,0,0.403,7.135,13.9,7.6534,3,402,17,384.3,4.45,32.9 203 | 0.03445,82.5,2.03,0,0.415,6.162,38.4,6.27,2,348,14.7,393.77,7.43,24.1 204 | 0.02177,82.5,2.03,0,0.415,7.61,15.7,6.27,2,348,14.7,395.38,3.11,42.3 205 | 0.0351,95,2.68,0,0.4161,7.853,33.2,5.118,4,224,14.7,392.78,3.81,48.5 206 | 0.02009,95,2.68,0,0.4161,8.034,31.9,5.118,4,224,14.7,390.55,2.88,50 207 | 0.13642,0,10.59,0,0.489,5.891,22.3,3.9454,4,277,18.6,396.9,10.87,22.6 208 | 0.22969,0,10.59,0,0.489,6.326,52.5,4.3549,4,277,18.6,394.87,10.97,24.4 209 | 0.25199,0,10.59,0,0.489,5.783,72.7,4.3549,4,277,18.6,389.43,18.06,22.5 210 | 0.13587,0,10.59,1,0.489,6.064,59.1,4.2392,4,277,18.6,381.32,14.66,24.4 211 | 0.43571,0,10.59,1,0.489,5.344,100,3.875,4,277,18.6,396.9,23.09,20 212 | 0.17446,0,10.59,1,0.489,5.96,92.1,3.8771,4,277,18.6,393.25,17.27,21.7 213 | 0.37578,0,10.59,1,0.489,5.404,88.6,3.665,4,277,18.6,395.24,23.98,19.3 214 | 0.21719,0,10.59,1,0.489,5.807,53.8,3.6526,4,277,18.6,390.94,16.03,22.4 215 | 0.14052,0,10.59,0,0.489,6.375,32.3,3.9454,4,277,18.6,385.81,9.38,28.1 216 | 0.28955,0,10.59,0,0.489,5.412,9.8,3.5875,4,277,18.6,348.93,29.55,23.7 217 | 0.19802,0,10.59,0,0.489,6.182,42.4,3.9454,4,277,18.6,393.63,9.47,25 218 | 0.0456,0,13.89,1,0.55,5.888,56,3.1121,5,276,16.4,392.8,13.51,23.3 219 | 0.07013,0,13.89,0,0.55,6.642,85.1,3.4211,5,276,16.4,392.78,9.69,28.7 220 | 0.11069,0,13.89,1,0.55,5.951,93.8,2.8893,5,276,16.4,396.9,17.92,21.5 221 | 0.11425,0,13.89,1,0.55,6.373,92.4,3.3633,5,276,16.4,393.74,10.5,23 222 | 0.35809,0,6.2,1,0.507,6.951,88.5,2.8617,8,307,17.4,391.7,9.71,26.7 223 | 0.40771,0,6.2,1,0.507,6.164,91.3,3.048,8,307,17.4,395.24,21.46,21.7 224 | 0.62356,0,6.2,1,0.507,6.879,77.7,3.2721,8,307,17.4,390.39,9.93,27.5 225 | 0.6147,0,6.2,0,0.507,6.618,80.8,3.2721,8,307,17.4,396.9,7.6,30.1 226 | 0.31533,0,6.2,0,0.504,8.266,78.3,2.8944,8,307,17.4,385.05,4.14,44.8 227 | 0.52693,0,6.2,0,0.504,8.725,83,2.8944,8,307,17.4,382,4.63,50 228 | 0.38214,0,6.2,0,0.504,8.04,86.5,3.2157,8,307,17.4,387.38,3.13,37.6 229 | 0.41238,0,6.2,0,0.504,7.163,79.9,3.2157,8,307,17.4,372.08,6.36,31.6 230 | 0.29819,0,6.2,0,0.504,7.686,17,3.3751,8,307,17.4,377.51,3.92,46.7 231 | 0.44178,0,6.2,0,0.504,6.552,21.4,3.3751,8,307,17.4,380.34,3.76,31.5 232 | 0.537,0,6.2,0,0.504,5.981,68.1,3.6715,8,307,17.4,378.35,11.65,24.3 233 | 0.46296,0,6.2,0,0.504,7.412,76.9,3.6715,8,307,17.4,376.14,5.25,31.7 234 | 0.57529,0,6.2,0,0.507,8.337,73.3,3.8384,8,307,17.4,385.91,2.47,41.7 235 | 0.33147,0,6.2,0,0.507,8.247,70.4,3.6519,8,307,17.4,378.95,3.95,48.3 236 | 0.44791,0,6.2,1,0.507,6.726,66.5,3.6519,8,307,17.4,360.2,8.05,29 237 | 0.33045,0,6.2,0,0.507,6.086,61.5,3.6519,8,307,17.4,376.75,10.88,24 238 | 0.52058,0,6.2,1,0.507,6.631,76.5,4.148,8,307,17.4,388.45,9.54,25.1 239 | 0.51183,0,6.2,0,0.507,7.358,71.6,4.148,8,307,17.4,390.07,4.73,31.5 240 | 0.08244,30,4.93,0,0.428,6.481,18.5,6.1899,6,300,16.6,379.41,6.36,23.7 241 | 0.09252,30,4.93,0,0.428,6.606,42.2,6.1899,6,300,16.6,383.78,7.37,23.3 242 | 0.11329,30,4.93,0,0.428,6.897,54.3,6.3361,6,300,16.6,391.25,11.38,22 243 | 0.10612,30,4.93,0,0.428,6.095,65.1,6.3361,6,300,16.6,394.62,12.4,20.1 244 | 0.1029,30,4.93,0,0.428,6.358,52.9,7.0355,6,300,16.6,372.75,11.22,22.2 245 | 0.12757,30,4.93,0,0.428,6.393,7.8,7.0355,6,300,16.6,374.71,5.19,23.7 246 | 0.20608,22,5.86,0,0.431,5.593,76.5,7.9549,7,330,19.1,372.49,12.5,17.6 247 | 0.19133,22,5.86,0,0.431,5.605,70.2,7.9549,7,330,19.1,389.13,18.46,18.5 248 | 0.33983,22,5.86,0,0.431,6.108,34.9,8.0555,7,330,19.1,390.18,9.16,24.3 249 | 0.19657,22,5.86,0,0.431,6.226,79.2,8.0555,7,330,19.1,376.14,10.15,20.5 250 | 0.16439,22,5.86,0,0.431,6.433,49.1,7.8265,7,330,19.1,374.71,9.52,24.5 251 | 0.19073,22,5.86,0,0.431,6.718,17.5,7.8265,7,330,19.1,393.74,6.56,26.2 252 | 0.1403,22,5.86,0,0.431,6.487,13,7.3967,7,330,19.1,396.28,5.9,24.4 253 | 0.21409,22,5.86,0,0.431,6.438,8.9,7.3967,7,330,19.1,377.07,3.59,24.8 254 | 0.08221,22,5.86,0,0.431,6.957,6.8,8.9067,7,330,19.1,386.09,3.53,29.6 255 | 0.36894,22,5.86,0,0.431,8.259,8.4,8.9067,7,330,19.1,396.9,3.54,42.8 256 | 0.04819,80,3.64,0,0.392,6.108,32,9.2203,1,315,16.4,392.89,6.57,21.9 257 | 0.03548,80,3.64,0,0.392,5.876,19.1,9.2203,1,315,16.4,395.18,9.25,20.9 258 | 0.01538,90,3.75,0,0.394,7.454,34.2,6.3361,3,244,15.9,386.34,3.11,44 259 | 0.61154,20,3.97,0,0.647,8.704,86.9,1.801,5,264,13,389.7,5.12,50 260 | 0.66351,20,3.97,0,0.647,7.333,100,1.8946,5,264,13,383.29,7.79,36 261 | 0.65665,20,3.97,0,0.647,6.842,100,2.0107,5,264,13,391.93,6.9,30.1 262 | 0.54011,20,3.97,0,0.647,7.203,81.8,2.1121,5,264,13,392.8,9.59,33.8 263 | 0.53412,20,3.97,0,0.647,7.52,89.4,2.1398,5,264,13,388.37,7.26,43.1 264 | 0.52014,20,3.97,0,0.647,8.398,91.5,2.2885,5,264,13,386.86,5.91,48.8 265 | 0.82526,20,3.97,0,0.647,7.327,94.5,2.0788,5,264,13,393.42,11.25,31 266 | 0.55007,20,3.97,0,0.647,7.206,91.6,1.9301,5,264,13,387.89,8.1,36.5 267 | 0.76162,20,3.97,0,0.647,5.56,62.8,1.9865,5,264,13,392.4,10.45,22.8 268 | 0.7857,20,3.97,0,0.647,7.014,84.6,2.1329,5,264,13,384.07,14.79,30.7 269 | 0.57834,20,3.97,0,0.575,8.297,67,2.4216,5,264,13,384.54,7.44,50 270 | 0.5405,20,3.97,0,0.575,7.47,52.6,2.872,5,264,13,390.3,3.16,43.5 271 | 0.09065,20,6.96,1,0.464,5.92,61.5,3.9175,3,223,18.6,391.34,13.65,20.7 272 | 0.29916,20,6.96,0,0.464,5.856,42.1,4.429,3,223,18.6,388.65,13,21.1 273 | 0.16211,20,6.96,0,0.464,6.24,16.3,4.429,3,223,18.6,396.9,6.59,25.2 274 | 0.1146,20,6.96,0,0.464,6.538,58.7,3.9175,3,223,18.6,394.96,7.73,24.4 275 | 0.22188,20,6.96,1,0.464,7.691,51.8,4.3665,3,223,18.6,390.77,6.58,35.2 276 | 0.05644,40,6.41,1,0.447,6.758,32.9,4.0776,4,254,17.6,396.9,3.53,32.4 277 | 0.09604,40,6.41,0,0.447,6.854,42.8,4.2673,4,254,17.6,396.9,2.98,32 278 | 0.10469,40,6.41,1,0.447,7.267,49,4.7872,4,254,17.6,389.25,6.05,33.2 279 | 0.06127,40,6.41,1,0.447,6.826,27.6,4.8628,4,254,17.6,393.45,4.16,33.1 280 | 0.07978,40,6.41,0,0.447,6.482,32.1,4.1403,4,254,17.6,396.9,7.19,29.1 281 | 0.21038,20,3.33,0,0.4429,6.812,32.2,4.1007,5,216,14.9,396.9,4.85,35.1 282 | 0.03578,20,3.33,0,0.4429,7.82,64.5,4.6947,5,216,14.9,387.31,3.76,45.4 283 | 0.03705,20,3.33,0,0.4429,6.968,37.2,5.2447,5,216,14.9,392.23,4.59,35.4 284 | 0.06129,20,3.33,1,0.4429,7.645,49.7,5.2119,5,216,14.9,377.07,3.01,46 285 | 0.01501,90,1.21,1,0.401,7.923,24.8,5.885,1,198,13.6,395.52,3.16,50 286 | 0.00906,90,2.97,0,0.4,7.088,20.8,7.3073,1,285,15.3,394.72,7.85,32.2 287 | 0.01096,55,2.25,0,0.389,6.453,31.9,7.3073,1,300,15.3,394.72,8.23,22 288 | 0.01965,80,1.76,0,0.385,6.23,31.5,9.0892,1,241,18.2,341.6,12.93,20.1 289 | 0.03871,52.5,5.32,0,0.405,6.209,31.3,7.3172,6,293,16.6,396.9,7.14,23.2 290 | 0.0459,52.5,5.32,0,0.405,6.315,45.6,7.3172,6,293,16.6,396.9,7.6,22.3 291 | 0.04297,52.5,5.32,0,0.405,6.565,22.9,7.3172,6,293,16.6,371.72,9.51,24.8 292 | 0.03502,80,4.95,0,0.411,6.861,27.9,5.1167,4,245,19.2,396.9,3.33,28.5 293 | 0.07886,80,4.95,0,0.411,7.148,27.7,5.1167,4,245,19.2,396.9,3.56,37.3 294 | 0.03615,80,4.95,0,0.411,6.63,23.4,5.1167,4,245,19.2,396.9,4.7,27.9 295 | 0.08265,0,13.92,0,0.437,6.127,18.4,5.5027,4,289,16,396.9,8.58,23.9 296 | 0.08199,0,13.92,0,0.437,6.009,42.3,5.5027,4,289,16,396.9,10.4,21.7 297 | 0.12932,0,13.92,0,0.437,6.678,31.1,5.9604,4,289,16,396.9,6.27,28.6 298 | 0.05372,0,13.92,0,0.437,6.549,51,5.9604,4,289,16,392.85,7.39,27.1 299 | 0.14103,0,13.92,0,0.437,5.79,58,6.32,4,289,16,396.9,15.84,20.3 300 | 0.06466,70,2.24,0,0.4,6.345,20.1,7.8278,5,358,14.8,368.24,4.97,22.5 301 | 0.05561,70,2.24,0,0.4,7.041,10,7.8278,5,358,14.8,371.58,4.74,29 302 | 0.04417,70,2.24,0,0.4,6.871,47.4,7.8278,5,358,14.8,390.86,6.07,24.8 303 | 0.03537,34,6.09,0,0.433,6.59,40.4,5.4917,7,329,16.1,395.75,9.5,22 304 | 0.09266,34,6.09,0,0.433,6.495,18.4,5.4917,7,329,16.1,383.61,8.67,26.4 305 | 0.1,34,6.09,0,0.433,6.982,17.7,5.4917,7,329,16.1,390.43,4.86,33.1 306 | 0.05515,33,2.18,0,0.472,7.236,41.1,4.022,7,222,18.4,393.68,6.93,36.1 307 | 0.05479,33,2.18,0,0.472,6.616,58.1,3.37,7,222,18.4,393.36,8.93,28.4 308 | 0.07503,33,2.18,0,0.472,7.42,71.9,3.0992,7,222,18.4,396.9,6.47,33.4 309 | 0.04932,33,2.18,0,0.472,6.849,70.3,3.1827,7,222,18.4,396.9,7.53,28.2 310 | 0.49298,0,9.9,0,0.544,6.635,82.5,3.3175,4,304,18.4,396.9,4.54,22.8 311 | 0.3494,0,9.9,0,0.544,5.972,76.7,3.1025,4,304,18.4,396.24,9.97,20.3 312 | 2.63548,0,9.9,0,0.544,4.973,37.8,2.5194,4,304,18.4,350.45,12.64,16.1 313 | 0.79041,0,9.9,0,0.544,6.122,52.8,2.6403,4,304,18.4,396.9,5.98,22.1 314 | 0.26169,0,9.9,0,0.544,6.023,90.4,2.834,4,304,18.4,396.3,11.72,19.4 315 | 0.26938,0,9.9,0,0.544,6.266,82.8,3.2628,4,304,18.4,393.39,7.9,21.6 316 | 0.3692,0,9.9,0,0.544,6.567,87.3,3.6023,4,304,18.4,395.69,9.28,23.8 317 | 0.25356,0,9.9,0,0.544,5.705,77.7,3.945,4,304,18.4,396.42,11.5,16.2 318 | 0.31827,0,9.9,0,0.544,5.914,83.2,3.9986,4,304,18.4,390.7,18.33,17.8 319 | 0.24522,0,9.9,0,0.544,5.782,71.7,4.0317,4,304,18.4,396.9,15.94,19.8 320 | 0.40202,0,9.9,0,0.544,6.382,67.2,3.5325,4,304,18.4,395.21,10.36,23.1 321 | 0.47547,0,9.9,0,0.544,6.113,58.8,4.0019,4,304,18.4,396.23,12.73,21 322 | 0.1676,0,7.38,0,0.493,6.426,52.3,4.5404,5,287,19.6,396.9,7.2,23.8 323 | 0.18159,0,7.38,0,0.493,6.376,54.3,4.5404,5,287,19.6,396.9,6.87,23.1 324 | 0.35114,0,7.38,0,0.493,6.041,49.9,4.7211,5,287,19.6,396.9,7.7,20.4 325 | 0.28392,0,7.38,0,0.493,5.708,74.3,4.7211,5,287,19.6,391.13,11.74,18.5 326 | 0.34109,0,7.38,0,0.493,6.415,40.1,4.7211,5,287,19.6,396.9,6.12,25 327 | 0.19186,0,7.38,0,0.493,6.431,14.7,5.4159,5,287,19.6,393.68,5.08,24.6 328 | 0.30347,0,7.38,0,0.493,6.312,28.9,5.4159,5,287,19.6,396.9,6.15,23 329 | 0.24103,0,7.38,0,0.493,6.083,43.7,5.4159,5,287,19.6,396.9,12.79,22.2 330 | 0.06617,0,3.24,0,0.46,5.868,25.8,5.2146,4,430,16.9,382.44,9.97,19.3 331 | 0.06724,0,3.24,0,0.46,6.333,17.2,5.2146,4,430,16.9,375.21,7.34,22.6 332 | 0.04544,0,3.24,0,0.46,6.144,32.2,5.8736,4,430,16.9,368.57,9.09,19.8 333 | 0.05023,35,6.06,0,0.4379,5.706,28.4,6.6407,1,304,16.9,394.02,12.43,17.1 334 | 0.03466,35,6.06,0,0.4379,6.031,23.3,6.6407,1,304,16.9,362.25,7.83,19.4 335 | 0.05083,0,5.19,0,0.515,6.316,38.1,6.4584,5,224,20.2,389.71,5.68,22.2 336 | 0.03738,0,5.19,0,0.515,6.31,38.5,6.4584,5,224,20.2,389.4,6.75,20.7 337 | 0.03961,0,5.19,0,0.515,6.037,34.5,5.9853,5,224,20.2,396.9,8.01,21.1 338 | 0.03427,0,5.19,0,0.515,5.869,46.3,5.2311,5,224,20.2,396.9,9.8,19.5 339 | 0.03041,0,5.19,0,0.515,5.895,59.6,5.615,5,224,20.2,394.81,10.56,18.5 340 | 0.03306,0,5.19,0,0.515,6.059,37.3,4.8122,5,224,20.2,396.14,8.51,20.6 341 | 0.05497,0,5.19,0,0.515,5.985,45.4,4.8122,5,224,20.2,396.9,9.74,19 342 | 0.06151,0,5.19,0,0.515,5.968,58.5,4.8122,5,224,20.2,396.9,9.29,18.7 343 | 0.01301,35,1.52,0,0.442,7.241,49.3,7.0379,1,284,15.5,394.74,5.49,32.7 344 | 0.02498,0,1.89,0,0.518,6.54,59.7,6.2669,1,422,15.9,389.96,8.65,16.5 345 | 0.02543,55,3.78,0,0.484,6.696,56.4,5.7321,5,370,17.6,396.9,7.18,23.9 346 | 0.03049,55,3.78,0,0.484,6.874,28.1,6.4654,5,370,17.6,387.97,4.61,31.2 347 | 0.03113,0,4.39,0,0.442,6.014,48.5,8.0136,3,352,18.8,385.64,10.53,17.5 348 | 0.06162,0,4.39,0,0.442,5.898,52.3,8.0136,3,352,18.8,364.61,12.67,17.2 349 | 0.0187,85,4.15,0,0.429,6.516,27.7,8.5353,4,351,17.9,392.43,6.36,23.1 350 | 0.01501,80,2.01,0,0.435,6.635,29.7,8.344,4,280,17,390.94,5.99,24.5 351 | 0.02899,40,1.25,0,0.429,6.939,34.5,8.7921,1,335,19.7,389.85,5.89,26.6 352 | 0.06211,40,1.25,0,0.429,6.49,44.4,8.7921,1,335,19.7,396.9,5.98,22.9 353 | 0.0795,60,1.69,0,0.411,6.579,35.9,10.7103,4,411,18.3,370.78,5.49,24.1 354 | 0.07244,60,1.69,0,0.411,5.884,18.5,10.7103,4,411,18.3,392.33,7.79,18.6 355 | 0.01709,90,2.02,0,0.41,6.728,36.1,12.1265,5,187,17,384.46,4.5,30.1 356 | 0.04301,80,1.91,0,0.413,5.663,21.9,10.5857,4,334,22,382.8,8.05,18.2 357 | 0.10659,80,1.91,0,0.413,5.936,19.5,10.5857,4,334,22,376.04,5.57,20.6 358 | 8.98296,0,18.1,1,0.77,6.212,97.4,2.1222,24,666,20.2,377.73,17.6,17.8 359 | 3.8497,0,18.1,1,0.77,6.395,91,2.5052,24,666,20.2,391.34,13.27,21.7 360 | 5.20177,0,18.1,1,0.77,6.127,83.4,2.7227,24,666,20.2,395.43,11.48,22.7 361 | 4.26131,0,18.1,0,0.77,6.112,81.3,2.5091,24,666,20.2,390.74,12.67,22.6 362 | 4.54192,0,18.1,0,0.77,6.398,88,2.5182,24,666,20.2,374.56,7.79,25 363 | 3.83684,0,18.1,0,0.77,6.251,91.1,2.2955,24,666,20.2,350.65,14.19,19.9 364 | 3.67822,0,18.1,0,0.77,5.362,96.2,2.1036,24,666,20.2,380.79,10.19,20.8 365 | 4.22239,0,18.1,1,0.77,5.803,89,1.9047,24,666,20.2,353.04,14.64,16.8 366 | 3.47428,0,18.1,1,0.718,8.78,82.9,1.9047,24,666,20.2,354.55,5.29,21.9 367 | 4.55587,0,18.1,0,0.718,3.561,87.9,1.6132,24,666,20.2,354.7,7.12,27.5 368 | 3.69695,0,18.1,0,0.718,4.963,91.4,1.7523,24,666,20.2,316.03,14,21.9 369 | 13.5222,0,18.1,0,0.631,3.863,100,1.5106,24,666,20.2,131.42,13.33,23.1 370 | 4.89822,0,18.1,0,0.631,4.97,100,1.3325,24,666,20.2,375.52,3.26,50 371 | 5.66998,0,18.1,1,0.631,6.683,96.8,1.3567,24,666,20.2,375.33,3.73,50 372 | 6.53876,0,18.1,1,0.631,7.016,97.5,1.2024,24,666,20.2,392.05,2.96,50 373 | 9.2323,0,18.1,0,0.631,6.216,100,1.1691,24,666,20.2,366.15,9.53,50 374 | 8.26725,0,18.1,1,0.668,5.875,89.6,1.1296,24,666,20.2,347.88,8.88,50 375 | 11.1081,0,18.1,0,0.668,4.906,100,1.1742,24,666,20.2,396.9,34.77,13.8 376 | 18.4982,0,18.1,0,0.668,4.138,100,1.137,24,666,20.2,396.9,37.97,13.8 377 | 19.6091,0,18.1,0,0.671,7.313,97.9,1.3163,24,666,20.2,396.9,13.44,15 378 | 15.288,0,18.1,0,0.671,6.649,93.3,1.3449,24,666,20.2,363.02,23.24,13.9 379 | 9.82349,0,18.1,0,0.671,6.794,98.8,1.358,24,666,20.2,396.9,21.24,13.3 380 | 23.6482,0,18.1,0,0.671,6.38,96.2,1.3861,24,666,20.2,396.9,23.69,13.1 381 | 17.8667,0,18.1,0,0.671,6.223,100,1.3861,24,666,20.2,393.74,21.78,10.2 382 | 88.9762,0,18.1,0,0.671,6.968,91.9,1.4165,24,666,20.2,396.9,17.21,10.4 383 | 15.8744,0,18.1,0,0.671,6.545,99.1,1.5192,24,666,20.2,396.9,21.08,10.9 384 | 9.18702,0,18.1,0,0.7,5.536,100,1.5804,24,666,20.2,396.9,23.6,11.3 385 | 7.99248,0,18.1,0,0.7,5.52,100,1.5331,24,666,20.2,396.9,24.56,12.3 386 | 20.0849,0,18.1,0,0.7,4.368,91.2,1.4395,24,666,20.2,285.83,30.63,8.8 387 | 16.8118,0,18.1,0,0.7,5.277,98.1,1.4261,24,666,20.2,396.9,30.81,7.2 388 | 24.3938,0,18.1,0,0.7,4.652,100,1.4672,24,666,20.2,396.9,28.28,10.5 389 | 22.5971,0,18.1,0,0.7,5,89.5,1.5184,24,666,20.2,396.9,31.99,7.4 390 | 14.3337,0,18.1,0,0.7,4.88,100,1.5895,24,666,20.2,372.92,30.62,10.2 391 | 8.15174,0,18.1,0,0.7,5.39,98.9,1.7281,24,666,20.2,396.9,20.85,11.5 392 | 6.96215,0,18.1,0,0.7,5.713,97,1.9265,24,666,20.2,394.43,17.11,15.1 393 | 5.29305,0,18.1,0,0.7,6.051,82.5,2.1678,24,666,20.2,378.38,18.76,23.2 394 | 11.5779,0,18.1,0,0.7,5.036,97,1.77,24,666,20.2,396.9,25.68,9.7 395 | 8.64476,0,18.1,0,0.693,6.193,92.6,1.7912,24,666,20.2,396.9,15.17,13.8 396 | 13.3598,0,18.1,0,0.693,5.887,94.7,1.7821,24,666,20.2,396.9,16.35,12.7 397 | 8.71675,0,18.1,0,0.693,6.471,98.8,1.7257,24,666,20.2,391.98,17.12,13.1 398 | 5.87205,0,18.1,0,0.693,6.405,96,1.6768,24,666,20.2,396.9,19.37,12.5 399 | 7.67202,0,18.1,0,0.693,5.747,98.9,1.6334,24,666,20.2,393.1,19.92,8.5 400 | 38.3518,0,18.1,0,0.693,5.453,100,1.4896,24,666,20.2,396.9,30.59,5 401 | 9.91655,0,18.1,0,0.693,5.852,77.8,1.5004,24,666,20.2,338.16,29.97,6.3 402 | 25.0461,0,18.1,0,0.693,5.987,100,1.5888,24,666,20.2,396.9,26.77,5.6 403 | 14.2362,0,18.1,0,0.693,6.343,100,1.5741,24,666,20.2,396.9,20.32,7.2 404 | 9.59571,0,18.1,0,0.693,6.404,100,1.639,24,666,20.2,376.11,20.31,12.1 405 | 24.8017,0,18.1,0,0.693,5.349,96,1.7028,24,666,20.2,396.9,19.77,8.3 406 | 41.5292,0,18.1,0,0.693,5.531,85.4,1.6074,24,666,20.2,329.46,27.38,8.5 407 | 67.9208,0,18.1,0,0.693,5.683,100,1.4254,24,666,20.2,384.97,22.98,5 408 | 20.7162,0,18.1,0,0.659,4.138,100,1.1781,24,666,20.2,370.22,23.34,11.9 409 | 11.9511,0,18.1,0,0.659,5.608,100,1.2852,24,666,20.2,332.09,12.13,27.9 410 | 7.40389,0,18.1,0,0.597,5.617,97.9,1.4547,24,666,20.2,314.64,26.4,17.2 411 | 14.4383,0,18.1,0,0.597,6.852,100,1.4655,24,666,20.2,179.36,19.78,27.5 412 | 51.1358,0,18.1,0,0.597,5.757,100,1.413,24,666,20.2,2.6,10.11,15 413 | 14.0507,0,18.1,0,0.597,6.657,100,1.5275,24,666,20.2,35.05,21.22,17.2 414 | 18.811,0,18.1,0,0.597,4.628,100,1.5539,24,666,20.2,28.79,34.37,17.9 415 | 28.6558,0,18.1,0,0.597,5.155,100,1.5894,24,666,20.2,210.97,20.08,16.3 416 | 45.7461,0,18.1,0,0.693,4.519,100,1.6582,24,666,20.2,88.27,36.98,7 417 | 18.0846,0,18.1,0,0.679,6.434,100,1.8347,24,666,20.2,27.25,29.05,7.2 418 | 10.8342,0,18.1,0,0.679,6.782,90.8,1.8195,24,666,20.2,21.57,25.79,7.5 419 | 25.9406,0,18.1,0,0.679,5.304,89.1,1.6475,24,666,20.2,127.36,26.64,10.4 420 | 73.5341,0,18.1,0,0.679,5.957,100,1.8026,24,666,20.2,16.45,20.62,8.8 421 | 11.8123,0,18.1,0,0.718,6.824,76.5,1.794,24,666,20.2,48.45,22.74,8.4 422 | 11.0874,0,18.1,0,0.718,6.411,100,1.8589,24,666,20.2,318.75,15.02,16.7 423 | 7.02259,0,18.1,0,0.718,6.006,95.3,1.8746,24,666,20.2,319.98,15.7,14.2 424 | 12.0482,0,18.1,0,0.614,5.648,87.6,1.9512,24,666,20.2,291.55,14.1,20.8 425 | 7.05042,0,18.1,0,0.614,6.103,85.1,2.0218,24,666,20.2,2.52,23.29,13.4 426 | 8.79212,0,18.1,0,0.584,5.565,70.6,2.0635,24,666,20.2,3.65,17.16,11.7 427 | 15.8603,0,18.1,0,0.679,5.896,95.4,1.9096,24,666,20.2,7.68,24.39,8.3 428 | 12.2472,0,18.1,0,0.584,5.837,59.7,1.9976,24,666,20.2,24.65,15.69,10.2 429 | 37.6619,0,18.1,0,0.679,6.202,78.7,1.8629,24,666,20.2,18.82,14.52,10.9 430 | 7.36711,0,18.1,0,0.679,6.193,78.1,1.9356,24,666,20.2,96.73,21.52,11 431 | 9.33889,0,18.1,0,0.679,6.38,95.6,1.9682,24,666,20.2,60.72,24.08,9.5 432 | 8.49213,0,18.1,0,0.584,6.348,86.1,2.0527,24,666,20.2,83.45,17.64,14.5 433 | 10.0623,0,18.1,0,0.584,6.833,94.3,2.0882,24,666,20.2,81.33,19.69,14.1 434 | 6.44405,0,18.1,0,0.584,6.425,74.8,2.2004,24,666,20.2,97.95,12.03,16.1 435 | 5.58107,0,18.1,0,0.713,6.436,87.9,2.3158,24,666,20.2,100.19,16.22,14.3 436 | 13.9134,0,18.1,0,0.713,6.208,95,2.2222,24,666,20.2,100.63,15.17,11.7 437 | 11.1604,0,18.1,0,0.74,6.629,94.6,2.1247,24,666,20.2,109.85,23.27,13.4 438 | 14.4208,0,18.1,0,0.74,6.461,93.3,2.0026,24,666,20.2,27.49,18.05,9.6 439 | 15.1772,0,18.1,0,0.74,6.152,100,1.9142,24,666,20.2,9.32,26.45,8.7 440 | 13.6781,0,18.1,0,0.74,5.935,87.9,1.8206,24,666,20.2,68.95,34.02,8.4 441 | 9.39063,0,18.1,0,0.74,5.627,93.9,1.8172,24,666,20.2,396.9,22.88,12.8 442 | 22.0511,0,18.1,0,0.74,5.818,92.4,1.8662,24,666,20.2,391.45,22.11,10.5 443 | 9.72418,0,18.1,0,0.74,6.406,97.2,2.0651,24,666,20.2,385.96,19.52,17.1 444 | 5.66637,0,18.1,0,0.74,6.219,100,2.0048,24,666,20.2,395.69,16.59,18.4 445 | 9.96654,0,18.1,0,0.74,6.485,100,1.9784,24,666,20.2,386.73,18.85,15.4 446 | 12.8023,0,18.1,0,0.74,5.854,96.6,1.8956,24,666,20.2,240.52,23.79,10.8 447 | 10.6718,0,18.1,0,0.74,6.459,94.8,1.9879,24,666,20.2,43.06,23.98,11.8 448 | 6.28807,0,18.1,0,0.74,6.341,96.4,2.072,24,666,20.2,318.01,17.79,14.9 449 | 9.92485,0,18.1,0,0.74,6.251,96.6,2.198,24,666,20.2,388.52,16.44,12.6 450 | 9.32909,0,18.1,0,0.713,6.185,98.7,2.2616,24,666,20.2,396.9,18.13,14.1 451 | 7.52601,0,18.1,0,0.713,6.417,98.3,2.185,24,666,20.2,304.21,19.31,13 452 | 6.71772,0,18.1,0,0.713,6.749,92.6,2.3236,24,666,20.2,0.32,17.44,13.4 453 | 5.44114,0,18.1,0,0.713,6.655,98.2,2.3552,24,666,20.2,355.29,17.73,15.2 454 | 5.09017,0,18.1,0,0.713,6.297,91.8,2.3682,24,666,20.2,385.09,17.27,16.1 455 | 8.24809,0,18.1,0,0.713,7.393,99.3,2.4527,24,666,20.2,375.87,16.74,17.8 456 | 9.51363,0,18.1,0,0.713,6.728,94.1,2.4961,24,666,20.2,6.68,18.71,14.9 457 | 4.75237,0,18.1,0,0.713,6.525,86.5,2.4358,24,666,20.2,50.92,18.13,14.1 458 | 4.66883,0,18.1,0,0.713,5.976,87.9,2.5806,24,666,20.2,10.48,19.01,12.7 459 | 8.20058,0,18.1,0,0.713,5.936,80.3,2.7792,24,666,20.2,3.5,16.94,13.5 460 | 7.75223,0,18.1,0,0.713,6.301,83.7,2.7831,24,666,20.2,272.21,16.23,14.9 461 | 6.80117,0,18.1,0,0.713,6.081,84.4,2.7175,24,666,20.2,396.9,14.7,20 462 | 4.81213,0,18.1,0,0.713,6.701,90,2.5975,24,666,20.2,255.23,16.42,16.4 463 | 3.69311,0,18.1,0,0.713,6.376,88.4,2.5671,24,666,20.2,391.43,14.65,17.7 464 | 6.65492,0,18.1,0,0.713,6.317,83,2.7344,24,666,20.2,396.9,13.99,19.5 465 | 5.82115,0,18.1,0,0.713,6.513,89.9,2.8016,24,666,20.2,393.82,10.29,20.2 466 | 7.83932,0,18.1,0,0.655,6.209,65.4,2.9634,24,666,20.2,396.9,13.22,21.4 467 | 3.1636,0,18.1,0,0.655,5.759,48.2,3.0665,24,666,20.2,334.4,14.13,19.9 468 | 3.77498,0,18.1,0,0.655,5.952,84.7,2.8715,24,666,20.2,22.01,17.15,19 469 | 4.42228,0,18.1,0,0.584,6.003,94.5,2.5403,24,666,20.2,331.29,21.32,19.1 470 | 15.5757,0,18.1,0,0.58,5.926,71,2.9084,24,666,20.2,368.74,18.13,19.1 471 | 13.0751,0,18.1,0,0.58,5.713,56.7,2.8237,24,666,20.2,396.9,14.76,20.1 472 | 4.34879,0,18.1,0,0.58,6.167,84,3.0334,24,666,20.2,396.9,16.29,19.9 473 | 4.03841,0,18.1,0,0.532,6.229,90.7,3.0993,24,666,20.2,395.33,12.87,19.6 474 | 3.56868,0,18.1,0,0.58,6.437,75,2.8965,24,666,20.2,393.37,14.36,23.2 475 | 4.64689,0,18.1,0,0.614,6.98,67.6,2.5329,24,666,20.2,374.68,11.66,29.8 476 | 8.05579,0,18.1,0,0.584,5.427,95.4,2.4298,24,666,20.2,352.58,18.14,13.8 477 | 6.39312,0,18.1,0,0.584,6.162,97.4,2.206,24,666,20.2,302.76,24.1,13.3 478 | 4.87141,0,18.1,0,0.614,6.484,93.6,2.3053,24,666,20.2,396.21,18.68,16.7 479 | 15.0234,0,18.1,0,0.614,5.304,97.3,2.1007,24,666,20.2,349.48,24.91,12 480 | 10.233,0,18.1,0,0.614,6.185,96.7,2.1705,24,666,20.2,379.7,18.03,14.6 481 | 14.3337,0,18.1,0,0.614,6.229,88,1.9512,24,666,20.2,383.32,13.11,21.4 482 | 5.82401,0,18.1,0,0.532,6.242,64.7,3.4242,24,666,20.2,396.9,10.74,23 483 | 5.70818,0,18.1,0,0.532,6.75,74.9,3.3317,24,666,20.2,393.07,7.74,23.7 484 | 5.73116,0,18.1,0,0.532,7.061,77,3.4106,24,666,20.2,395.28,7.01,25 485 | 2.81838,0,18.1,0,0.532,5.762,40.3,4.0983,24,666,20.2,392.92,10.42,21.8 486 | 2.37857,0,18.1,0,0.583,5.871,41.9,3.724,24,666,20.2,370.73,13.34,20.6 487 | 3.67367,0,18.1,0,0.583,6.312,51.9,3.9917,24,666,20.2,388.62,10.58,21.2 488 | 5.69175,0,18.1,0,0.583,6.114,79.8,3.5459,24,666,20.2,392.68,14.98,19.1 489 | 4.83567,0,18.1,0,0.583,5.905,53.2,3.1523,24,666,20.2,388.22,11.45,20.6 490 | 0.15086,0,27.74,0,0.609,5.454,92.7,1.8209,4,711,20.1,395.09,18.06,15.2 491 | 0.18337,0,27.74,0,0.609,5.414,98.3,1.7554,4,711,20.1,344.05,23.97,7 492 | 0.20746,0,27.74,0,0.609,5.093,98,1.8226,4,711,20.1,318.43,29.68,8.1 493 | 0.10574,0,27.74,0,0.609,5.983,98.8,1.8681,4,711,20.1,390.11,18.07,13.6 494 | 0.11132,0,27.74,0,0.609,5.983,83.5,2.1099,4,711,20.1,396.9,13.35,20.1 495 | 0.17331,0,9.69,0,0.585,5.707,54,2.3817,6,391,19.2,396.9,12.01,21.8 496 | 0.27957,0,9.69,0,0.585,5.926,42.6,2.3817,6,391,19.2,396.9,13.59,24.5 497 | 0.17899,0,9.69,0,0.585,5.67,28.8,2.7986,6,391,19.2,393.29,17.6,23.1 498 | 0.2896,0,9.69,0,0.585,5.39,72.9,2.7986,6,391,19.2,396.9,21.14,19.7 499 | 0.26838,0,9.69,0,0.585,5.794,70.6,2.8927,6,391,19.2,396.9,14.1,18.3 500 | 0.23912,0,9.69,0,0.585,6.019,65.3,2.4091,6,391,19.2,396.9,12.92,21.2 501 | 0.17783,0,9.69,0,0.585,5.569,73.5,2.3999,6,391,19.2,395.77,15.1,17.5 502 | 0.22438,0,9.69,0,0.585,6.027,79.7,2.4982,6,391,19.2,396.9,14.33,16.8 503 | 0.06263,0,11.93,0,0.573,6.593,69.1,2.4786,1,273,21,391.99,9.67,22.4 504 | 0.04527,0,11.93,0,0.573,6.12,76.7,2.2875,1,273,21,396.9,9.08,20.6 505 | 0.06076,0,11.93,0,0.573,6.976,91,2.1675,1,273,21,396.9,5.64,23.9 506 | 0.10959,0,11.93,0,0.573,6.794,89.3,2.3889,1,273,21,393.45,6.48,22 507 | 0.04741,0,11.93,0,0.573,6.03,80.8,2.505,1,273,21,396.9,7.88,11.9 508 | -------------------------------------------------------------------------------- /table_data/Country statistics.csv: -------------------------------------------------------------------------------- 1 | HDI rank,Country,Human Development Index (HDI) ,Life expectancy at birth,Expected years of schooling,Mean years of schooling,Gross national income (GNI) per capita,GNI per capita rank minus HDI rank,HDI rank 2 | 1,Switzerland,0.962,84.0,16.5,13.9,"66,933",5,3 3 | 2,Norway,0.961,83.2,18.2,13.0,"64,660",6,1 4 | 3,Iceland,0.959,82.7,19.2,13.8,"55,782",11,2 5 | 4,"Hong Kong, China (SAR)",0.952,85.5,17.3,12.2,"62,607",6,4 6 | 5,Australia,0.951,84.5,21.1,12.7,"49,238",18,5 7 | 6,Denmark,0.948,81.4,18.7,13.0,"60,365",6,5 8 | 7,Sweden,0.947,83.0,19.4,12.6,"54,489",9,9 9 | 8,Ireland,0.945,82.0,18.9,11.6,"76,169",-3,8 10 | 9,Germany,0.942,80.6,17.0,14.1,"54,534",6,7 11 | 10,Netherlands,0.941,81.7,18.7,12.6,"55,979",3,10 12 | 11,Finland,0.940,82.0,19.1,12.9,"49,452",11,12 13 | 12,Singapore,0.939,82.8,16.5,11.9,"90,919",-10,10 14 | 13,Belgium,0.937,81.9,19.6,12.4,"52,293",7,16 15 | 13,New Zealand,0.937,82.5,20.3,12.9,"44,057",16,13 16 | 15,Canada,0.936,82.7,16.4,13.8,"46,808",9,15 17 | 16,Liechtenstein,0.935,83.3,15.2,12.5,"146,830",-15,14 18 | 17,Luxembourg,0.930,82.6,14.4,13.0,"84,649",-13,17 19 | 18,United Kingdom,0.929,80.7,17.3,13.4,"45,225",9,17 20 | 19,Japan,0.925,84.8,15.2,13.4,"42,274",12,19 21 | 19,Korea (Republic of),0.925,83.7,16.5,12.5,"44,501",9,20 22 | 21,United States,0.921,77.2,16.3,13.7,"64,765",-14,21 23 | 22,Israel,0.919,82.3,16.1,13.3,"41,524",10,22 24 | 23,Malta,0.918,83.8,16.8,12.2,"38,884",12,26 25 | 23,Slovenia,0.918,80.7,17.7,12.8,"39,746",10,23 26 | 25,Austria,0.916,81.6,16.0,12.3,"53,619",-8,23 27 | 26,United Arab Emirates,0.911,78.7,15.7,12.7,"62,574",-15,25 28 | 27,Spain,0.905,83.0,17.9,10.6,"38,354",10,27 29 | 28,France,0.903,82.5,15.8,11.6,"45,937",-2,28 30 | 29,Cyprus,0.896,81.2,15.6,12.4,"38,188",9,29 31 | 30,Italy,0.895,82.9,16.2,10.7,"42,840",0,32 32 | 31,Estonia,0.890,77.1,15.9,13.5,"38,048",8,30 33 | 32,Czechia,0.889,77.7,16.2,12.9,"38,745",4,30 34 | 33,Greece,0.887,80.1,20.0,11.4,"29,002",17,33 35 | 34,Poland,0.876,76.5,16.0,13.2,"33,034",8,36 36 | 35,Bahrain,0.875,78.8,16.3,11.0,"39,497",-1,35 37 | 35,Lithuania,0.875,73.7,16.3,13.5,"37,931",5,34 38 | 35,Saudi Arabia,0.875,76.9,16.1,11.3,"46,112",-10,38 39 | 38,Portugal,0.866,81.0,16.9,9.6,"33,155",3,39 40 | 39,Latvia,0.863,73.6,16.2,13.3,"32,803",4,37 41 | 40,Andorra,0.858,80.4,13.3,10.6,"51,167",-19,45 42 | 40,Croatia,0.858,77.6,15.1,12.2,"30,132",8,41 43 | 42,Chile,0.855,78.9,16.7,10.9,"24,563",14,43 44 | 42,Qatar,0.855,79.3,12.6,10.0,"87,134",-39,42 45 | 44,San Marino,0.853,80.9,12.3,10.8,"52,654",-25,46 46 | 45,Slovakia,0.848,74.9,14.5,12.9,"30,690",1,40 47 | 46,Hungary,0.846,74.5,15.0,12.2,"32,789",-2,44 48 | 47,Argentina,0.842,75.4,17.9,11.1,"20,925",17,47 49 | 48,Turkiye,0.838,76.0,18.3,8.6,"31,033",-3,48 50 | 49,Montenegro,0.832,76.3,15.1,12.2,"20,839",16,52 51 | 50,Kuwait,0.831,78.7,15.3,7.3,"52,920",-32,54 52 | 51,Brunei Darussalam,0.829,74.6,14.0,9.2,"64,490",-42,49 53 | 52,Russian Federation,0.822,69.4,15.8,12.8,"27,166",-1,49 54 | 53,Romania,0.821,74.2,14.2,11.3,"30,027",-4,53 55 | 54,Oman,0.816,72.5,14.6,11.7,"27,054",-2,51 56 | 55,Bahamas,0.812,71.6,12.9,12.6,"30,486",-8,58 57 | 56,Kazakhstan,0.811,69.4,15.8,12.3,"23,943",1,59 58 | 57,Trinidad and Tobago,0.810,73.0,14.5,11.6,"23,392",1,56 59 | 58,Costa Rica,0.809,77.0,16.5,8.8,"19,974",8,57 60 | 58,Uruguay,0.809,75.4,16.8,9.0,"21,269",5,55 61 | 60,Belarus,0.808,72.4,15.2,12.1,"18,849",8,60 62 | 61,Panama,0.805,76.2,13.1,10.5,"26,957",-8,67 63 | 62,Malaysia,0.803,74.9,13.3,10.6,"26,658",-8,61 64 | 63,Georgia,0.802,71.7,15.6,12.8,"14,664",17,64 65 | 63,Mauritius,0.802,73.6,15.2,10.4,"22,025",-1,62 66 | 63,Serbia,0.802,74.2,14.4,11.4,"19,123",4,62 67 | 66,Thailand,0.800,78.7,15.9,8.7,"17,030",6,64 68 | 67,Albania,0.796,76.5,14.4,11.3,"14,131",17,68 69 | 68,Bulgaria,0.795,71.8,13.9,11.4,"23,079",-8,64 70 | 68,Grenada,0.795,74.9,18.7,9.0,"13,484",18,70 71 | 70,Barbados,0.790,77.6,15.7,9.9,"12,306",26,71 72 | 71,Antigua and Barbuda,0.788,78.5,14.2,9.3,"16,792",2,71 73 | 72,Seychelles,0.785,71.3,13.9,10.3,"25,831",-17,69 74 | 73,Sri Lanka,0.782,76.4,14.1,10.8,"12,578",21,75 75 | 74,Bosnia and Herzegovina,0.780,75.3,13.8,10.5,"15,242",4,73 76 | 75,Saint Kitts and Nevis,0.777,71.7,15.4,8.7,"23,358",-16,76 77 | 76,Iran (Islamic Republic of),0.774,73.9,14.6,10.6,"13,001",15,77 78 | 77,Ukraine,0.773,71.6,15.0,11.1,"13,256",11,78 79 | 78,North Macedonia,0.770,73.8,13.6,10.2,"15,918",-3,79 80 | 79,China,0.768,78.2,14.2,7.6,"17,504",-8,82 81 | 80,Dominican Republic,0.767,72.6,14.5,9.3,"17,990",-11,82 82 | 80,Moldova (Republic of),0.767,68.8,14.4,11.8,"14,875",-1,81 83 | 80,Palau,0.767,66.0,15.8,12.5,"13,819",5,80 84 | 83,Cuba,0.764,73.7,14.4,12.5,"7,879",37,73 85 | 84,Peru,0.762,72.4,15.4,9.9,"12,246",13,85 86 | 85,Armenia,0.759,72.0,13.1,11.3,"13,158",4,87 87 | 86,Mexico,0.758,70.2,14.9,9.2,"17,896",-16,88 88 | 87,Brazil,0.754,72.8,15.6,8.1,"14,370",-5,86 89 | 88,Colombia,0.752,72.8,14.4,8.9,"14,384",-7,88 90 | 89,Saint Vincent and the Grenadines,0.751,69.6,14.7,10.8,"11,961",11,82 91 | 90,Maldives,0.747,79.9,12.6,7.3,"15,448",-14,97 92 | 91,Algeria,0.745,76.4,14.6,8.1,"10,800",13,96 93 | 91,Azerbaijan,0.745,69.4,13.5,10.5,"14,257",-8,100 94 | 91,Tonga,0.745,71.0,16.0,11.4,"6,822",34,90 95 | 91,Turkmenistan,0.745,69.3,13.2,11.3,"13,021",-1,93 96 | 95,Ecuador,0.740,73.7,14.6,8.8,"10,312",11,99 97 | 96,Mongolia,0.739,71.0,15.0,9.4,"10,588",9,90 98 | 97,Egypt,0.731,70.2,13.8,9.6,"11,732",4,97 99 | 97,Tunisia,0.731,73.8,15.4,7.4,"10,258",10,94 100 | 99,Fiji,0.730,67.1,14.7,10.9,"9,980",9,94 101 | 99,Suriname,0.730,70.3,13.0,9.8,"12,672",-6,92 102 | 101,Uzbekistan,0.727,70.9,12.5,11.9,"7,917",18,107 103 | 102,Dominica,0.720,72.8,13.3,8.1,"11,488",0,106 104 | 102,Jordan,0.720,74.3,10.6,10.4,"9,924",8,104 105 | 104,Libya,0.718,71.9,12.9,7.6,"15,336",-27,117 106 | 105,Paraguay,0.717,70.3,13.0,8.9,"12,349",-10,100 107 | 106,"Palestine, State of",0.715,73.5,13.4,9.9,"6,583",21,109 108 | 106,Saint Lucia,0.715,71.1,12.9,8.5,"12,048",-7,104 109 | 108,Guyana,0.714,65.7,12.5,8.6,"22,465",-47,107 110 | 109,South Africa,0.713,62.3,13.6,11.4,"12,948",-17,102 111 | 110,Jamaica,0.709,70.5,13.4,9.2,"8,834",4,110 112 | 111,Samoa,0.707,72.8,12.4,11.4,"5,308",24,112 113 | 112,Gabon,0.706,65.8,13.0,9.4,"13,367",-25,113 114 | 112,Lebanon,0.706,75.0,11.3,8.7,"9,526",-1,103 115 | 114,Indonesia,0.705,67.6,13.7,8.6,"11,466",-11,116 116 | 115,Viet Nam,0.703,73.6,13.0,8.4,"7,867",6,113 117 | 116,Philippines,0.699,69.3,13.1,9.0,"8,920",-3,113 118 | 117,Botswana,0.693,61.1,12.3,10.3,"16,198",-43,110 119 | 118,Bolivia (Plurinational State of),0.692,63.6,14.9,9.8,"8,111",0,119 120 | 118,Kyrgyzstan,0.692,70.0,13.2,11.4,"4,566",26,121 121 | 120,Venezuela (Bolivarian Republic of),0.691,70.6,12.8,11.1,"4,811",20,118 122 | 121,Iraq,0.686,70.4,12.1,7.9,"9,977",-12,122 123 | 122,Tajikistan,0.685,71.6,11.7,11.3,"4,548",23,126 124 | 123,Belize,0.683,70.5,13.0,8.8,"6,309",6,120 125 | 123,Morocco,0.683,74.0,14.2,5.9,"7,303",1,122 126 | 125,El Salvador,0.675,70.7,12.7,7.2,"8,296",-8,124 127 | 126,Nicaragua,0.667,73.8,12.6,7.1,"5,625",6,129 128 | 127,Bhutan,0.666,71.8,13.2,5.2,"9,438",-15,125 129 | 128,Cabo Verde,0.662,74.1,12.6,6.3,"6,230",2,127 130 | 129,Bangladesh,0.661,72.4,12.4,7.4,"5,472",4,128 131 | 130,Tuvalu,0.641,64.5,9.4,10.6,"6,351",-2,131 132 | 131,Marshall Islands,0.639,65.3,10.2,10.9,"4,620",12,131 133 | 132,India,0.633,67.2,11.9,6.7,"6,590",-6,130 134 | 133,Ghana,0.632,63.8,12.0,8.3,"5,745",-2,135 135 | 134,Micronesia (Federated States of),0.628,70.7,11.5,7.8,"3,696",22,136 136 | 135,Guatemala,0.627,69.2,10.6,5.7,"8,723",-20,133 137 | 136,Kiribati,0.624,67.4,11.8,8.0,"4,063",14,137 138 | 137,Honduras,0.621,70.1,10.1,7.1,"5,298",-1,138 139 | 138,Sao Tome and Principe,0.618,67.6,13.4,6.2,"4,021",13,139 140 | 139,Namibia,0.615,59.3,11.9,7.2,"8,634",-23,134 141 | 140,Lao People's Democratic Republic,0.607,68.1,10.1,5.4,"7,700",-18,142 142 | 140,Timor-Leste,0.607,67.7,12.6,5.4,"4,461",7,140 143 | 140,Vanuatu,0.607,70.4,11.5,7.1,"3,085",23,142 144 | 143,Nepal,0.602,68.4,12.9,5.1,"3,877",10,144 145 | 144,Eswatini (Kingdom of),0.597,57.1,13.7,5.6,"7,679",-21,141 146 | 145,Equatorial Guinea,0.596,60.6,9.7,5.9,"12,074",-47,147 147 | 146,Cambodia,0.593,69.6,11.5,5.1,"4,079",3,148 148 | 146,Zimbabwe,0.593,59.3,12.1,8.7,"3,810",9,145 149 | 148,Angola,0.586,61.6,12.2,5.4,"5,466",-14,149 150 | 149,Myanmar,0.585,65.7,10.9,6.4,"3,851",5,145 151 | 150,Syrian Arab Republic,0.577,72.1,9.2,5.1,"4,192",-2,152 152 | 151,Cameroon,0.576,60.3,13.1,6.2,"3,621",6,150 153 | 152,Kenya,0.575,61.4,10.7,6.7,"4,474",-6,150 154 | 153,Congo,0.571,63.5,12.3,6.2,"2,889",11,153 155 | 154,Zambia,0.565,61.2,10.9,7.2,"3,218",7,154 156 | 155,Solomon Islands,0.564,70.3,10.3,5.7,"2,482",13,155 157 | 156,Comoros,0.558,63.4,11.9,5.1,"3,142",6,156 158 | 156,Papua New Guinea,0.558,65.4,10.4,4.7,"4,009",-4,157 159 | 158,Mauritania,0.556,64.4,9.4,4.9,"5,075",-20,158 160 | 159,C�te d'Ivoire,0.550,58.6,10.7,5.2,"5,217",-22,159 161 | 160,Tanzania (United Republic of),0.549,66.2,9.2,6.4,"2,664",7,160 162 | 161,Pakistan,0.544,66.1,8.7,4.5,"4,624",-19,161 163 | 162,Togo,0.539,61.6,13.0,5.0,"2,167",12,163 164 | 163,Haiti,0.535,63.2,9.7,5.6,"2,848",2,162 165 | 163,Nigeria,0.535,52.7,10.1,7.2,"4,790",-22,163 166 | 165,Rwanda,0.534,66.1,11.2,4.4,"2,210",6,165 167 | 166,Benin,0.525,59.8,10.8,4.3,"3,409",-7,166 168 | 166,Uganda,0.525,62.7,10.1,5.7,"2,181",6,166 169 | 168,Lesotho,0.514,53.1,12.0,6.0,"2,700",-2,168 170 | 169,Malawi,0.512,62.9,12.7,4.5,"1,466",13,169 171 | 170,Senegal,0.511,67.1,9.0,2.9,"3,344",-10,170 172 | 171,Djibouti,0.509,62.3,7.4,4.1,"5,025",-32,171 173 | 172,Sudan,0.508,65.3,7.9,3.8,"3,575",-14,171 174 | 173,Madagascar,0.501,64.5,10.1,5.1,"1,484",8,173 175 | 174,Gambia,0.500,62.1,9.4,4.6,"2,172",-1,173 176 | 175,Ethiopia,0.498,65.0,9.7,3.2,"2,361",-5,175 177 | 176,Eritrea,0.492,66.5,8.1,4.9,"1,729",3,176 178 | 177,Guinea-Bissau,0.483,59.7,10.6,3.6,"1,908",0,177 179 | 178,Liberia,0.481,60.7,10.4,5.1,"1,289",7,179 180 | 179,Congo (Democratic Republic of the),0.479,59.2,9.8,7.0,"1,076",9,180 181 | 180,Afghanistan,0.478,62.0,10.3,3.0,"1,824",-2,177 182 | 181,Sierra Leone,0.477,60.1,9.6,4.6,"1,622",-1,181 183 | 182,Guinea,0.465,58.9,9.8,2.2,"2,481",-13,182 184 | 183,Yemen,0.455,63.8,9.1,3.2,"1,314",1,183 185 | 184,Burkina Faso,0.449,59.3,9.1,2.1,"2,118",-8,185 186 | 185,Mozambique,0.446,59.3,10.2,3.2,"1,198",2,184 187 | 186,Mali,0.428,58.9,7.4,2.3,"2,133",-11,186 188 | 187,Burundi,0.426,61.7,10.7,3.1,732,4,187 189 | 188,Central African Republic,0.404,53.9,8.0,4.3,966,1,188 190 | 189,Niger,0.400,61.6,7.0,2.1,"1,240",-3,189 191 | 190,Chad,0.394,52.5,8.0,2.6,"1,364",-7,190 192 | 191,South Sudan,0.385,55.0,5.5,5.7,768,-1,191 193 | -------------------------------------------------------------------------------- /table_data/Housing_Price_Data.csv: -------------------------------------------------------------------------------- 1 | price,area,bedrooms,bathrooms,stories,mainroad,guestroom,basement,hotwaterheating,airconditioning,parking,prefarea,furnishingstatus 2 | 13300000,7420,4,2,3,yes,no,no,no,yes,2,yes,furnished 3 | 12250000,8960,4,4,4,yes,no,no,no,yes,3,no,furnished 4 | 12250000,9960,3,2,2,yes,no,yes,no,no,2,yes,semi-furnished 5 | 12215000,7500,4,2,2,yes,no,yes,no,yes,3,yes,furnished 6 | 11410000,7420,4,1,2,yes,yes,yes,no,yes,2,no,furnished 7 | 10850000,7500,3,3,1,yes,no,yes,no,yes,2,yes,semi-furnished 8 | 10150000,8580,4,3,4,yes,no,no,no,yes,2,yes,semi-furnished 9 | 10150000,16200,5,3,2,yes,no,no,no,no,0,no,unfurnished 10 | 9870000,8100,4,1,2,yes,yes,yes,no,yes,2,yes,furnished 11 | 9800000,5750,3,2,4,yes,yes,no,no,yes,1,yes,unfurnished 12 | 9800000,13200,3,1,2,yes,no,yes,no,yes,2,yes,furnished 13 | 9681000,6000,4,3,2,yes,yes,yes,yes,no,2,no,semi-furnished 14 | 9310000,6550,4,2,2,yes,no,no,no,yes,1,yes,semi-furnished 15 | 9240000,3500,4,2,2,yes,no,no,yes,no,2,no,furnished 16 | 9240000,7800,3,2,2,yes,no,no,no,no,0,yes,semi-furnished 17 | 9100000,6000,4,1,2,yes,no,yes,no,no,2,no,semi-furnished 18 | 9100000,6600,4,2,2,yes,yes,yes,no,yes,1,yes,unfurnished 19 | 8960000,8500,3,2,4,yes,no,no,no,yes,2,no,furnished 20 | 8890000,4600,3,2,2,yes,yes,no,no,yes,2,no,furnished 21 | 8855000,6420,3,2,2,yes,no,no,no,yes,1,yes,semi-furnished 22 | 8750000,4320,3,1,2,yes,no,yes,yes,no,2,no,semi-furnished 23 | 8680000,7155,3,2,1,yes,yes,yes,no,yes,2,no,unfurnished 24 | 8645000,8050,3,1,1,yes,yes,yes,no,yes,1,no,furnished 25 | 8645000,4560,3,2,2,yes,yes,yes,no,yes,1,no,furnished 26 | 8575000,8800,3,2,2,yes,no,no,no,yes,2,no,furnished 27 | 8540000,6540,4,2,2,yes,yes,yes,no,yes,2,yes,furnished 28 | 8463000,6000,3,2,4,yes,yes,yes,no,yes,0,yes,semi-furnished 29 | 8400000,8875,3,1,1,yes,no,no,no,no,1,no,semi-furnished 30 | 8400000,7950,5,2,2,yes,no,yes,yes,no,2,no,unfurnished 31 | 8400000,5500,4,2,2,yes,no,yes,no,yes,1,yes,semi-furnished 32 | 8400000,7475,3,2,4,yes,no,no,no,yes,2,no,unfurnished 33 | 8400000,7000,3,1,4,yes,no,no,no,yes,2,no,semi-furnished 34 | 8295000,4880,4,2,2,yes,no,no,no,yes,1,yes,furnished 35 | 8190000,5960,3,3,2,yes,yes,yes,no,no,1,no,unfurnished 36 | 8120000,6840,5,1,2,yes,yes,yes,no,yes,1,no,furnished 37 | 8080940,7000,3,2,4,yes,no,no,no,yes,2,no,furnished 38 | 8043000,7482,3,2,3,yes,no,no,yes,no,1,yes,furnished 39 | 7980000,9000,4,2,4,yes,no,no,no,yes,2,no,furnished 40 | 7962500,6000,3,1,4,yes,yes,no,no,yes,2,no,unfurnished 41 | 7910000,6000,4,2,4,yes,no,no,no,yes,1,no,semi-furnished 42 | 7875000,6550,3,1,2,yes,no,yes,no,yes,0,yes,furnished 43 | 7840000,6360,3,2,4,yes,no,no,no,yes,0,yes,furnished 44 | 7700000,6480,3,2,4,yes,no,no,no,yes,2,no,unfurnished 45 | 7700000,6000,4,2,4,yes,no,no,no,no,2,no,semi-furnished 46 | 7560000,6000,4,2,4,yes,no,no,no,yes,1,no,furnished 47 | 7560000,6000,3,2,3,yes,no,no,no,yes,0,no,semi-furnished 48 | 7525000,6000,3,2,4,yes,no,no,no,yes,1,no,furnished 49 | 7490000,6600,3,1,4,yes,no,no,no,yes,3,yes,furnished 50 | 7455000,4300,3,2,2,yes,no,yes,no,no,1,no,unfurnished 51 | 7420000,7440,3,2,1,yes,yes,yes,no,yes,0,yes,semi-furnished 52 | 7420000,7440,3,2,4,yes,no,no,no,no,1,yes,unfurnished 53 | 7420000,6325,3,1,4,yes,no,no,no,yes,1,no,unfurnished 54 | 7350000,6000,4,2,4,yes,yes,no,no,yes,1,no,furnished 55 | 7350000,5150,3,2,4,yes,no,no,no,yes,2,no,semi-furnished 56 | 7350000,6000,3,2,2,yes,yes,no,no,yes,1,no,semi-furnished 57 | 7350000,6000,3,1,2,yes,no,no,no,yes,1,no,unfurnished 58 | 7343000,11440,4,1,2,yes,no,yes,no,no,1,yes,semi-furnished 59 | 7245000,9000,4,2,4,yes,yes,no,no,yes,1,yes,furnished 60 | 7210000,7680,4,2,4,yes,yes,no,no,yes,1,no,semi-furnished 61 | 7210000,6000,3,2,4,yes,yes,no,no,yes,1,no,furnished 62 | 7140000,6000,3,2,2,yes,yes,no,no,no,1,no,semi-furnished 63 | 7070000,8880,2,1,1,yes,no,no,no,yes,1,no,semi-furnished 64 | 7070000,6240,4,2,2,yes,no,no,no,yes,1,no,furnished 65 | 7035000,6360,4,2,3,yes,no,no,no,yes,2,yes,furnished 66 | 7000000,11175,3,1,1,yes,no,yes,no,yes,1,yes,furnished 67 | 6930000,8880,3,2,2,yes,no,yes,no,yes,1,no,furnished 68 | 6930000,13200,2,1,1,yes,no,yes,yes,no,1,no,furnished 69 | 6895000,7700,3,2,1,yes,no,no,no,no,2,no,unfurnished 70 | 6860000,6000,3,1,1,yes,no,no,no,yes,1,no,furnished 71 | 6790000,12090,4,2,2,yes,no,no,no,no,2,yes,furnished 72 | 6790000,4000,3,2,2,yes,no,yes,no,yes,0,yes,semi-furnished 73 | 6755000,6000,4,2,4,yes,no,no,no,yes,0,no,unfurnished 74 | 6720000,5020,3,1,4,yes,no,no,no,yes,0,yes,unfurnished 75 | 6685000,6600,2,2,4,yes,no,yes,no,no,0,yes,furnished 76 | 6650000,4040,3,1,2,yes,no,yes,yes,no,1,no,furnished 77 | 6650000,4260,4,2,2,yes,no,no,yes,no,0,no,semi-furnished 78 | 6650000,6420,3,2,3,yes,no,no,no,yes,0,yes,furnished 79 | 6650000,6500,3,2,3,yes,no,no,no,yes,0,yes,furnished 80 | 6650000,5700,3,1,1,yes,yes,yes,no,yes,2,yes,furnished 81 | 6650000,6000,3,2,3,yes,yes,no,no,yes,0,no,furnished 82 | 6629000,6000,3,1,2,yes,no,no,yes,no,1,yes,semi-furnished 83 | 6615000,4000,3,2,2,yes,no,yes,no,yes,1,no,semi-furnished 84 | 6615000,10500,3,2,1,yes,no,yes,no,yes,1,yes,furnished 85 | 6580000,6000,3,2,4,yes,no,no,no,yes,0,no,semi-furnished 86 | 6510000,3760,3,1,2,yes,no,no,yes,no,2,no,semi-furnished 87 | 6510000,8250,3,2,3,yes,no,no,no,yes,0,no,furnished 88 | 6510000,6670,3,1,3,yes,no,yes,no,no,0,yes,unfurnished 89 | 6475000,3960,3,1,1,yes,no,yes,no,no,2,no,semi-furnished 90 | 6475000,7410,3,1,1,yes,yes,yes,no,yes,2,yes,unfurnished 91 | 6440000,8580,5,3,2,yes,no,no,no,no,2,no,furnished 92 | 6440000,5000,3,1,2,yes,no,no,no,yes,0,no,semi-furnished 93 | 6419000,6750,2,1,1,yes,yes,yes,no,no,2,yes,furnished 94 | 6405000,4800,3,2,4,yes,yes,no,no,yes,0,no,furnished 95 | 6300000,7200,3,2,1,yes,no,yes,no,yes,3,no,semi-furnished 96 | 6300000,6000,4,2,4,yes,no,no,no,no,1,no,semi-furnished 97 | 6300000,4100,3,2,3,yes,no,no,no,yes,2,no,semi-furnished 98 | 6300000,9000,3,1,1,yes,no,yes,no,no,1,yes,furnished 99 | 6300000,6400,3,1,1,yes,yes,yes,no,yes,1,yes,semi-furnished 100 | 6293000,6600,3,2,3,yes,no,no,no,yes,0,yes,unfurnished 101 | 6265000,6000,4,1,3,yes,yes,yes,no,no,0,yes,unfurnished 102 | 6230000,6600,3,2,1,yes,no,yes,no,yes,0,yes,unfurnished 103 | 6230000,5500,3,1,3,yes,no,no,no,no,1,yes,unfurnished 104 | 6195000,5500,3,2,4,yes,yes,no,no,yes,1,no,semi-furnished 105 | 6195000,6350,3,2,3,yes,yes,no,no,yes,0,no,furnished 106 | 6195000,5500,3,2,1,yes,yes,yes,no,no,2,yes,furnished 107 | 6160000,4500,3,1,4,yes,no,no,no,yes,0,no,unfurnished 108 | 6160000,5450,4,2,1,yes,no,yes,no,yes,0,yes,semi-furnished 109 | 6125000,6420,3,1,3,yes,no,yes,no,no,0,yes,unfurnished 110 | 6107500,3240,4,1,3,yes,no,no,no,no,1,no,semi-furnished 111 | 6090000,6615,4,2,2,yes,yes,no,yes,no,1,no,semi-furnished 112 | 6090000,6600,3,1,1,yes,yes,yes,no,no,2,yes,semi-furnished 113 | 6090000,8372,3,1,3,yes,no,no,no,yes,2,no,unfurnished 114 | 6083000,4300,6,2,2,yes,no,no,no,no,0,no,furnished 115 | 6083000,9620,3,1,1,yes,no,yes,no,no,2,yes,furnished 116 | 6020000,6800,2,1,1,yes,yes,yes,no,no,2,no,furnished 117 | 6020000,8000,3,1,1,yes,yes,yes,no,yes,2,yes,semi-furnished 118 | 6020000,6900,3,2,1,yes,yes,yes,no,no,0,yes,unfurnished 119 | 5950000,3700,4,1,2,yes,yes,no,no,yes,0,no,furnished 120 | 5950000,6420,3,1,1,yes,no,yes,no,yes,0,yes,furnished 121 | 5950000,7020,3,1,1,yes,no,yes,no,yes,2,yes,semi-furnished 122 | 5950000,6540,3,1,1,yes,yes,yes,no,no,2,yes,furnished 123 | 5950000,7231,3,1,2,yes,yes,yes,no,yes,0,yes,semi-furnished 124 | 5950000,6254,4,2,1,yes,no,yes,no,no,1,yes,semi-furnished 125 | 5950000,7320,4,2,2,yes,no,no,no,no,0,no,furnished 126 | 5950000,6525,3,2,4,yes,no,no,no,no,1,no,furnished 127 | 5943000,15600,3,1,1,yes,no,no,no,yes,2,no,semi-furnished 128 | 5880000,7160,3,1,1,yes,no,yes,no,no,2,yes,unfurnished 129 | 5880000,6500,3,2,3,yes,no,no,no,yes,0,no,unfurnished 130 | 5873000,5500,3,1,3,yes,yes,no,no,yes,1,no,furnished 131 | 5873000,11460,3,1,3,yes,no,no,no,no,2,yes,semi-furnished 132 | 5866000,4800,3,1,1,yes,yes,yes,no,no,0,no,unfurnished 133 | 5810000,5828,4,1,4,yes,yes,no,no,no,0,no,semi-furnished 134 | 5810000,5200,3,1,3,yes,no,no,no,yes,0,no,semi-furnished 135 | 5810000,4800,3,1,3,yes,no,no,no,yes,0,no,unfurnished 136 | 5803000,7000,3,1,1,yes,no,yes,no,no,2,yes,semi-furnished 137 | 5775000,6000,3,2,4,yes,no,no,no,yes,0,no,unfurnished 138 | 5740000,5400,4,2,2,yes,no,no,no,yes,2,no,unfurnished 139 | 5740000,4640,4,1,2,yes,no,no,no,no,1,no,semi-furnished 140 | 5740000,5000,3,1,3,yes,no,no,no,yes,0,no,semi-furnished 141 | 5740000,6360,3,1,1,yes,yes,yes,no,yes,2,yes,furnished 142 | 5740000,5800,3,2,4,yes,no,no,no,yes,0,no,unfurnished 143 | 5652500,6660,4,2,2,yes,yes,yes,no,no,1,yes,semi-furnished 144 | 5600000,10500,4,2,2,yes,no,no,no,no,1,no,semi-furnished 145 | 5600000,4800,5,2,3,no,no,yes,yes,no,0,no,unfurnished 146 | 5600000,4700,4,1,2,yes,yes,yes,no,yes,1,no,furnished 147 | 5600000,5000,3,1,4,yes,no,no,no,no,0,no,furnished 148 | 5600000,10500,2,1,1,yes,no,no,no,no,1,no,semi-furnished 149 | 5600000,5500,3,2,2,yes,no,no,no,no,1,no,semi-furnished 150 | 5600000,6360,3,1,3,yes,no,no,no,no,0,yes,semi-furnished 151 | 5600000,6600,4,2,1,yes,no,yes,no,no,0,yes,semi-furnished 152 | 5600000,5136,3,1,2,yes,yes,yes,no,yes,0,yes,unfurnished 153 | 5565000,4400,4,1,2,yes,no,no,no,yes,2,yes,semi-furnished 154 | 5565000,5400,5,1,2,yes,yes,yes,no,yes,0,yes,furnished 155 | 5530000,3300,3,3,2,yes,no,yes,no,no,0,no,semi-furnished 156 | 5530000,3650,3,2,2,yes,no,no,no,no,2,no,semi-furnished 157 | 5530000,6100,3,2,1,yes,no,yes,no,no,2,yes,furnished 158 | 5523000,6900,3,1,1,yes,yes,yes,no,no,0,yes,semi-furnished 159 | 5495000,2817,4,2,2,no,yes,yes,no,no,1,no,furnished 160 | 5495000,7980,3,1,1,yes,no,no,no,no,2,no,semi-furnished 161 | 5460000,3150,3,2,1,yes,yes,yes,no,yes,0,no,furnished 162 | 5460000,6210,4,1,4,yes,yes,no,no,yes,0,no,furnished 163 | 5460000,6100,3,1,3,yes,yes,no,no,yes,0,yes,semi-furnished 164 | 5460000,6600,4,2,2,yes,yes,yes,no,no,0,yes,semi-furnished 165 | 5425000,6825,3,1,1,yes,yes,yes,no,yes,0,yes,semi-furnished 166 | 5390000,6710,3,2,2,yes,yes,yes,no,no,1,yes,furnished 167 | 5383000,6450,3,2,1,yes,yes,yes,yes,no,0,no,unfurnished 168 | 5320000,7800,3,1,1,yes,no,yes,no,yes,2,yes,unfurnished 169 | 5285000,4600,2,2,1,yes,no,no,no,yes,2,no,semi-furnished 170 | 5250000,4260,4,1,2,yes,no,yes,no,yes,0,no,furnished 171 | 5250000,6540,4,2,2,no,no,no,no,yes,0,no,semi-furnished 172 | 5250000,5500,3,2,1,yes,no,yes,no,no,0,no,semi-furnished 173 | 5250000,10269,3,1,1,yes,no,no,no,no,1,yes,semi-furnished 174 | 5250000,8400,3,1,2,yes,yes,yes,no,yes,2,yes,unfurnished 175 | 5250000,5300,4,2,1,yes,no,no,no,yes,0,yes,unfurnished 176 | 5250000,3800,3,1,2,yes,yes,yes,no,no,1,yes,unfurnished 177 | 5250000,9800,4,2,2,yes,yes,no,no,no,2,no,semi-furnished 178 | 5250000,8520,3,1,1,yes,no,no,no,yes,2,no,furnished 179 | 5243000,6050,3,1,1,yes,no,yes,no,no,0,yes,semi-furnished 180 | 5229000,7085,3,1,1,yes,yes,yes,no,no,2,yes,semi-furnished 181 | 5215000,3180,3,2,2,yes,no,no,no,no,2,no,semi-furnished 182 | 5215000,4500,4,2,1,no,no,yes,no,yes,2,no,semi-furnished 183 | 5215000,7200,3,1,2,yes,yes,yes,no,no,1,yes,furnished 184 | 5145000,3410,3,1,2,no,no,no,no,yes,0,no,semi-furnished 185 | 5145000,7980,3,1,1,yes,no,no,no,no,1,yes,semi-furnished 186 | 5110000,3000,3,2,2,yes,yes,yes,no,no,0,no,furnished 187 | 5110000,3000,3,1,2,yes,no,yes,no,no,0,no,unfurnished 188 | 5110000,11410,2,1,2,yes,no,no,no,no,0,yes,furnished 189 | 5110000,6100,3,1,1,yes,no,yes,no,yes,0,yes,semi-furnished 190 | 5075000,5720,2,1,2,yes,no,no,no,yes,0,yes,unfurnished 191 | 5040000,3540,2,1,1,no,yes,yes,no,no,0,no,semi-furnished 192 | 5040000,7600,4,1,2,yes,no,no,no,yes,2,no,furnished 193 | 5040000,10700,3,1,2,yes,yes,yes,no,no,0,no,semi-furnished 194 | 5040000,6600,3,1,1,yes,yes,yes,no,no,0,yes,furnished 195 | 5033000,4800,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished 196 | 5005000,8150,3,2,1,yes,yes,yes,no,no,0,no,semi-furnished 197 | 4970000,4410,4,3,2,yes,no,yes,no,no,2,no,semi-furnished 198 | 4970000,7686,3,1,1,yes,yes,yes,yes,no,0,no,semi-furnished 199 | 4956000,2800,3,2,2,no,no,yes,no,yes,1,no,semi-furnished 200 | 4935000,5948,3,1,2,yes,no,no,no,yes,0,no,semi-furnished 201 | 4907000,4200,3,1,2,yes,no,no,no,no,1,no,furnished 202 | 4900000,4520,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished 203 | 4900000,4095,3,1,2,no,yes,yes,no,yes,0,no,semi-furnished 204 | 4900000,4120,2,1,1,yes,no,yes,no,no,1,no,semi-furnished 205 | 4900000,5400,4,1,2,yes,no,no,no,no,0,no,semi-furnished 206 | 4900000,4770,3,1,1,yes,yes,yes,no,no,0,no,semi-furnished 207 | 4900000,6300,3,1,1,yes,no,no,no,yes,2,no,semi-furnished 208 | 4900000,5800,2,1,1,yes,yes,yes,no,yes,0,no,semi-furnished 209 | 4900000,3000,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished 210 | 4900000,2970,3,1,3,yes,no,no,no,no,0,no,semi-furnished 211 | 4900000,6720,3,1,1,yes,no,no,no,no,0,no,unfurnished 212 | 4900000,4646,3,1,2,yes,yes,yes,no,no,2,no,semi-furnished 213 | 4900000,12900,3,1,1,yes,no,no,no,no,2,no,furnished 214 | 4893000,3420,4,2,2,yes,no,yes,no,yes,2,no,semi-furnished 215 | 4893000,4995,4,2,1,yes,no,yes,no,no,0,no,semi-furnished 216 | 4865000,4350,2,1,1,yes,no,yes,no,no,0,no,unfurnished 217 | 4830000,4160,3,1,3,yes,no,no,no,no,0,no,unfurnished 218 | 4830000,6040,3,1,1,yes,no,no,no,no,2,yes,semi-furnished 219 | 4830000,6862,3,1,2,yes,no,no,no,yes,2,yes,furnished 220 | 4830000,4815,2,1,1,yes,no,no,no,yes,0,yes,semi-furnished 221 | 4795000,7000,3,1,2,yes,no,yes,no,no,0,no,unfurnished 222 | 4795000,8100,4,1,4,yes,no,yes,no,yes,2,no,semi-furnished 223 | 4767000,3420,4,2,2,yes,no,no,no,no,0,no,semi-furnished 224 | 4760000,9166,2,1,1,yes,no,yes,no,yes,2,no,semi-furnished 225 | 4760000,6321,3,1,2,yes,no,yes,no,yes,1,no,furnished 226 | 4760000,10240,2,1,1,yes,no,no,no,yes,2,yes,unfurnished 227 | 4753000,6440,2,1,1,yes,no,no,no,yes,3,no,semi-furnished 228 | 4690000,5170,3,1,4,yes,no,no,no,yes,0,no,semi-furnished 229 | 4690000,6000,2,1,1,yes,no,yes,no,yes,1,no,furnished 230 | 4690000,3630,3,1,2,yes,no,no,no,no,2,no,semi-furnished 231 | 4690000,9667,4,2,2,yes,yes,yes,no,no,1,no,semi-furnished 232 | 4690000,5400,2,1,2,yes,no,no,no,no,0,yes,semi-furnished 233 | 4690000,4320,3,1,1,yes,no,no,no,no,0,yes,semi-furnished 234 | 4655000,3745,3,1,2,yes,no,yes,no,no,0,no,furnished 235 | 4620000,4160,3,1,1,yes,yes,yes,no,yes,0,no,unfurnished 236 | 4620000,3880,3,2,2,yes,no,yes,no,no,2,no,semi-furnished 237 | 4620000,5680,3,1,2,yes,yes,no,no,yes,1,no,semi-furnished 238 | 4620000,2870,2,1,2,yes,yes,yes,no,no,0,yes,semi-furnished 239 | 4620000,5010,3,1,2,yes,no,yes,no,no,0,no,semi-furnished 240 | 4613000,4510,4,2,2,yes,no,yes,no,no,0,no,semi-furnished 241 | 4585000,4000,3,1,2,yes,no,no,no,no,1,no,furnished 242 | 4585000,3840,3,1,2,yes,no,no,no,no,1,yes,semi-furnished 243 | 4550000,3760,3,1,1,yes,no,no,no,no,2,no,semi-furnished 244 | 4550000,3640,3,1,2,yes,no,no,no,yes,0,no,furnished 245 | 4550000,2550,3,1,2,yes,no,yes,no,no,0,no,furnished 246 | 4550000,5320,3,1,2,yes,yes,yes,no,no,0,yes,semi-furnished 247 | 4550000,5360,3,1,2,yes,no,no,no,no,2,yes,unfurnished 248 | 4550000,3520,3,1,1,yes,no,no,no,no,0,yes,semi-furnished 249 | 4550000,8400,4,1,4,yes,no,no,no,no,3,no,unfurnished 250 | 4543000,4100,2,2,1,yes,yes,yes,no,no,0,no,semi-furnished 251 | 4543000,4990,4,2,2,yes,yes,yes,no,no,0,yes,furnished 252 | 4515000,3510,3,1,3,yes,no,no,no,no,0,no,semi-furnished 253 | 4515000,3450,3,1,2,yes,no,yes,no,no,1,no,semi-furnished 254 | 4515000,9860,3,1,1,yes,no,no,no,no,0,no,semi-furnished 255 | 4515000,3520,2,1,2,yes,no,no,no,no,0,yes,furnished 256 | 4480000,4510,4,1,2,yes,no,no,no,yes,2,no,semi-furnished 257 | 4480000,5885,2,1,1,yes,no,no,no,yes,1,no,unfurnished 258 | 4480000,4000,3,1,2,yes,no,no,no,no,2,no,furnished 259 | 4480000,8250,3,1,1,yes,no,no,no,no,0,no,furnished 260 | 4480000,4040,3,1,2,yes,no,no,no,no,1,no,semi-furnished 261 | 4473000,6360,2,1,1,yes,no,yes,no,yes,1,no,furnished 262 | 4473000,3162,3,1,2,yes,no,no,no,yes,1,no,furnished 263 | 4473000,3510,3,1,2,yes,no,no,no,no,0,no,semi-furnished 264 | 4445000,3750,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished 265 | 4410000,3968,3,1,2,no,no,no,no,no,0,no,semi-furnished 266 | 4410000,4900,2,1,2,yes,no,yes,no,no,0,no,semi-furnished 267 | 4403000,2880,3,1,2,yes,no,no,no,no,0,yes,semi-furnished 268 | 4403000,4880,3,1,1,yes,no,no,no,no,2,yes,unfurnished 269 | 4403000,4920,3,1,2,yes,no,no,no,no,1,no,semi-furnished 270 | 4382000,4950,4,1,2,yes,no,no,no,yes,0,no,semi-furnished 271 | 4375000,3900,3,1,2,yes,no,no,no,no,0,no,unfurnished 272 | 4340000,4500,3,2,3,yes,no,no,yes,no,1,no,furnished 273 | 4340000,1905,5,1,2,no,no,yes,no,no,0,no,semi-furnished 274 | 4340000,4075,3,1,1,yes,yes,yes,no,no,2,no,semi-furnished 275 | 4340000,3500,4,1,2,yes,no,no,no,no,2,no,furnished 276 | 4340000,6450,4,1,2,yes,no,no,no,no,0,no,semi-furnished 277 | 4319000,4032,2,1,1,yes,no,yes,no,no,0,no,furnished 278 | 4305000,4400,2,1,1,yes,no,no,no,no,1,no,semi-furnished 279 | 4305000,10360,2,1,1,yes,no,no,no,no,1,yes,semi-furnished 280 | 4277000,3400,3,1,2,yes,no,yes,no,no,2,yes,semi-furnished 281 | 4270000,6360,2,1,1,yes,no,no,no,no,0,no,furnished 282 | 4270000,6360,2,1,2,yes,no,no,no,no,0,no,unfurnished 283 | 4270000,4500,2,1,1,yes,no,no,no,yes,2,no,furnished 284 | 4270000,2175,3,1,2,no,yes,yes,no,yes,0,no,unfurnished 285 | 4270000,4360,4,1,2,yes,no,no,no,no,0,no,furnished 286 | 4270000,7770,2,1,1,yes,no,no,no,no,1,no,furnished 287 | 4235000,6650,3,1,2,yes,yes,no,no,no,0,no,semi-furnished 288 | 4235000,2787,3,1,1,yes,no,yes,no,no,0,yes,furnished 289 | 4200000,5500,3,1,2,yes,no,no,no,yes,0,no,unfurnished 290 | 4200000,5040,3,1,2,yes,no,yes,no,yes,0,no,unfurnished 291 | 4200000,5850,2,1,1,yes,yes,yes,no,no,2,no,semi-furnished 292 | 4200000,2610,4,3,2,no,no,no,no,no,0,no,semi-furnished 293 | 4200000,2953,3,1,2,yes,no,yes,no,yes,0,no,unfurnished 294 | 4200000,2747,4,2,2,no,no,no,no,no,0,no,semi-furnished 295 | 4200000,4410,2,1,1,no,no,no,no,no,1,no,unfurnished 296 | 4200000,4000,4,2,2,no,no,no,no,no,0,no,semi-furnished 297 | 4200000,2325,3,1,2,no,no,no,no,no,0,no,semi-furnished 298 | 4200000,4600,3,2,2,yes,no,no,no,yes,1,no,semi-furnished 299 | 4200000,3640,3,2,2,yes,no,yes,no,no,0,no,unfurnished 300 | 4200000,5800,3,1,1,yes,no,no,yes,no,2,no,semi-furnished 301 | 4200000,7000,3,1,1,yes,no,no,no,no,3,no,furnished 302 | 4200000,4079,3,1,3,yes,no,no,no,no,0,no,semi-furnished 303 | 4200000,3520,3,1,2,yes,no,no,no,no,0,yes,semi-furnished 304 | 4200000,2145,3,1,3,yes,no,no,no,no,1,yes,unfurnished 305 | 4200000,4500,3,1,1,yes,no,yes,no,no,0,no,furnished 306 | 4193000,8250,3,1,1,yes,no,yes,no,no,3,no,semi-furnished 307 | 4193000,3450,3,1,2,yes,no,no,no,no,1,no,semi-furnished 308 | 4165000,4840,3,1,2,yes,no,no,no,no,1,no,semi-furnished 309 | 4165000,4080,3,1,2,yes,no,no,no,no,2,no,semi-furnished 310 | 4165000,4046,3,1,2,yes,no,yes,no,no,1,no,semi-furnished 311 | 4130000,4632,4,1,2,yes,no,no,no,yes,0,no,semi-furnished 312 | 4130000,5985,3,1,1,yes,no,yes,no,no,0,no,semi-furnished 313 | 4123000,6060,2,1,1,yes,no,yes,no,no,1,no,semi-furnished 314 | 4098500,3600,3,1,1,yes,no,yes,no,yes,0,yes,furnished 315 | 4095000,3680,3,2,2,yes,no,no,no,no,0,no,semi-furnished 316 | 4095000,4040,2,1,2,yes,no,no,no,no,1,no,semi-furnished 317 | 4095000,5600,2,1,1,yes,no,no,no,yes,0,no,semi-furnished 318 | 4060000,5900,4,2,2,no,no,yes,no,no,1,no,unfurnished 319 | 4060000,4992,3,2,2,yes,no,no,no,no,2,no,unfurnished 320 | 4060000,4340,3,1,1,yes,no,no,no,no,0,no,semi-furnished 321 | 4060000,3000,4,1,3,yes,no,yes,no,yes,2,no,semi-furnished 322 | 4060000,4320,3,1,2,yes,no,no,no,no,2,yes,furnished 323 | 4025000,3630,3,2,2,yes,no,no,yes,no,2,no,semi-furnished 324 | 4025000,3460,3,2,1,yes,no,yes,no,yes,1,no,furnished 325 | 4025000,5400,3,1,1,yes,no,no,no,no,3,no,semi-furnished 326 | 4007500,4500,3,1,2,no,no,yes,no,yes,0,no,semi-furnished 327 | 4007500,3460,4,1,2,yes,no,no,no,yes,0,no,semi-furnished 328 | 3990000,4100,4,1,1,no,no,yes,no,no,0,no,unfurnished 329 | 3990000,6480,3,1,2,no,no,no,no,yes,1,no,semi-furnished 330 | 3990000,4500,3,2,2,no,no,yes,no,yes,0,no,semi-furnished 331 | 3990000,3960,3,1,2,yes,no,no,no,no,0,no,furnished 332 | 3990000,4050,2,1,2,yes,yes,yes,no,no,0,yes,unfurnished 333 | 3920000,7260,3,2,1,yes,yes,yes,no,no,3,no,furnished 334 | 3920000,5500,4,1,2,yes,yes,yes,no,no,0,no,semi-furnished 335 | 3920000,3000,3,1,2,yes,no,no,no,no,0,no,semi-furnished 336 | 3920000,3290,2,1,1,yes,no,no,yes,no,1,no,furnished 337 | 3920000,3816,2,1,1,yes,no,yes,no,yes,2,no,furnished 338 | 3920000,8080,3,1,1,yes,no,no,no,yes,2,no,semi-furnished 339 | 3920000,2145,4,2,1,yes,no,yes,no,no,0,yes,unfurnished 340 | 3885000,3780,2,1,2,yes,yes,yes,no,no,0,no,semi-furnished 341 | 3885000,3180,4,2,2,yes,no,no,no,no,0,no,furnished 342 | 3850000,5300,5,2,2,yes,no,no,no,no,0,no,semi-furnished 343 | 3850000,3180,2,2,1,yes,no,yes,no,no,2,no,semi-furnished 344 | 3850000,7152,3,1,2,yes,no,no,no,yes,0,no,furnished 345 | 3850000,4080,2,1,1,yes,no,no,no,no,0,no,semi-furnished 346 | 3850000,3850,2,1,1,yes,no,no,no,no,0,no,semi-furnished 347 | 3850000,2015,3,1,2,yes,no,yes,no,no,0,yes,semi-furnished 348 | 3850000,2176,2,1,2,yes,yes,no,no,no,0,yes,semi-furnished 349 | 3836000,3350,3,1,2,yes,no,no,no,no,0,no,unfurnished 350 | 3815000,3150,2,2,1,no,no,yes,no,no,0,no,semi-furnished 351 | 3780000,4820,3,1,2,yes,no,no,no,no,0,no,semi-furnished 352 | 3780000,3420,2,1,2,yes,no,no,yes,no,1,no,semi-furnished 353 | 3780000,3600,2,1,1,yes,no,no,no,no,0,no,semi-furnished 354 | 3780000,5830,2,1,1,yes,no,no,no,no,2,no,unfurnished 355 | 3780000,2856,3,1,3,yes,no,no,no,no,0,yes,furnished 356 | 3780000,8400,2,1,1,yes,no,no,no,no,1,no,furnished 357 | 3773000,8250,3,1,1,yes,no,no,no,no,2,no,furnished 358 | 3773000,2520,5,2,1,no,no,yes,no,yes,1,no,furnished 359 | 3773000,6930,4,1,2,no,no,no,no,no,1,no,furnished 360 | 3745000,3480,2,1,1,yes,no,no,no,no,0,yes,semi-furnished 361 | 3710000,3600,3,1,1,yes,no,no,no,no,1,no,unfurnished 362 | 3710000,4040,2,1,1,yes,no,no,no,no,0,no,semi-furnished 363 | 3710000,6020,3,1,1,yes,no,no,no,no,0,no,semi-furnished 364 | 3710000,4050,2,1,1,yes,no,no,no,no,0,no,furnished 365 | 3710000,3584,2,1,1,yes,no,no,yes,no,0,no,semi-furnished 366 | 3703000,3120,3,1,2,no,no,yes,yes,no,0,no,semi-furnished 367 | 3703000,5450,2,1,1,yes,no,no,no,no,0,no,furnished 368 | 3675000,3630,2,1,1,yes,no,yes,no,no,0,no,furnished 369 | 3675000,3630,2,1,1,yes,no,no,no,yes,0,no,unfurnished 370 | 3675000,5640,2,1,1,no,no,no,no,no,0,no,semi-furnished 371 | 3675000,3600,2,1,1,yes,no,no,no,no,0,no,furnished 372 | 3640000,4280,2,1,1,yes,no,no,no,yes,2,no,semi-furnished 373 | 3640000,3570,3,1,2,yes,no,yes,no,no,0,no,semi-furnished 374 | 3640000,3180,3,1,2,no,no,yes,no,no,0,no,semi-furnished 375 | 3640000,3000,2,1,2,yes,no,no,no,yes,0,no,furnished 376 | 3640000,3520,2,2,1,yes,no,yes,no,no,0,no,semi-furnished 377 | 3640000,5960,3,1,2,yes,yes,yes,no,no,0,no,unfurnished 378 | 3640000,4130,3,2,2,yes,no,no,no,no,2,no,semi-furnished 379 | 3640000,2850,3,2,2,no,no,yes,no,no,0,yes,unfurnished 380 | 3640000,2275,3,1,3,yes,no,no,yes,yes,0,yes,semi-furnished 381 | 3633000,3520,3,1,1,yes,no,no,no,no,2,yes,unfurnished 382 | 3605000,4500,2,1,1,yes,no,no,no,no,0,no,semi-furnished 383 | 3605000,4000,2,1,1,yes,no,no,no,no,0,yes,semi-furnished 384 | 3570000,3150,3,1,2,yes,no,yes,no,no,0,no,furnished 385 | 3570000,4500,4,2,2,yes,no,yes,no,no,2,no,furnished 386 | 3570000,4500,2,1,1,no,no,no,no,no,0,no,furnished 387 | 3570000,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished 388 | 3535000,3850,3,1,1,yes,no,no,no,no,2,no,unfurnished 389 | 3500000,4240,3,1,2,yes,no,no,no,yes,0,no,semi-furnished 390 | 3500000,3650,3,1,2,yes,no,no,no,no,0,no,unfurnished 391 | 3500000,4600,4,1,2,yes,no,no,no,no,0,no,semi-furnished 392 | 3500000,2135,3,2,2,no,no,no,no,no,0,no,unfurnished 393 | 3500000,3036,3,1,2,yes,no,yes,no,no,0,no,semi-furnished 394 | 3500000,3990,3,1,2,yes,no,no,no,no,0,no,semi-furnished 395 | 3500000,7424,3,1,1,no,no,no,no,no,0,no,unfurnished 396 | 3500000,3480,3,1,1,no,no,no,no,yes,0,no,unfurnished 397 | 3500000,3600,6,1,2,yes,no,no,no,no,1,no,unfurnished 398 | 3500000,3640,2,1,1,yes,no,no,no,no,1,no,semi-furnished 399 | 3500000,5900,2,1,1,yes,no,no,no,no,1,no,furnished 400 | 3500000,3120,3,1,2,yes,no,no,no,no,1,no,unfurnished 401 | 3500000,7350,2,1,1,yes,no,no,no,no,1,no,semi-furnished 402 | 3500000,3512,2,1,1,yes,no,no,no,no,1,yes,unfurnished 403 | 3500000,9500,3,1,2,yes,no,no,no,no,3,yes,unfurnished 404 | 3500000,5880,2,1,1,yes,no,no,no,no,0,no,unfurnished 405 | 3500000,12944,3,1,1,yes,no,no,no,no,0,no,unfurnished 406 | 3493000,4900,3,1,2,no,no,no,no,no,0,no,unfurnished 407 | 3465000,3060,3,1,1,yes,no,no,no,no,0,no,unfurnished 408 | 3465000,5320,2,1,1,yes,no,no,no,no,1,yes,unfurnished 409 | 3465000,2145,3,1,3,yes,no,no,no,no,0,yes,furnished 410 | 3430000,4000,2,1,1,yes,no,no,no,no,0,no,unfurnished 411 | 3430000,3185,2,1,1,yes,no,no,no,no,2,no,unfurnished 412 | 3430000,3850,3,1,1,yes,no,no,no,no,0,no,unfurnished 413 | 3430000,2145,3,1,3,yes,no,no,no,no,0,yes,furnished 414 | 3430000,2610,3,1,2,yes,no,yes,no,no,0,yes,unfurnished 415 | 3430000,1950,3,2,2,yes,no,yes,no,no,0,yes,unfurnished 416 | 3423000,4040,2,1,1,yes,no,no,no,no,0,no,unfurnished 417 | 3395000,4785,3,1,2,yes,yes,yes,no,yes,1,no,furnished 418 | 3395000,3450,3,1,1,yes,no,yes,no,no,2,no,unfurnished 419 | 3395000,3640,2,1,1,yes,no,no,no,no,0,no,furnished 420 | 3360000,3500,4,1,2,yes,no,no,no,yes,2,no,unfurnished 421 | 3360000,4960,4,1,3,no,no,no,no,no,0,no,semi-furnished 422 | 3360000,4120,2,1,2,yes,no,no,no,no,0,no,unfurnished 423 | 3360000,4750,2,1,1,yes,no,no,no,no,0,no,unfurnished 424 | 3360000,3720,2,1,1,no,no,no,no,yes,0,no,unfurnished 425 | 3360000,3750,3,1,1,yes,no,no,no,no,0,no,unfurnished 426 | 3360000,3100,3,1,2,no,no,yes,no,no,0,no,semi-furnished 427 | 3360000,3185,2,1,1,yes,no,yes,no,no,2,no,furnished 428 | 3353000,2700,3,1,1,no,no,no,no,no,0,no,furnished 429 | 3332000,2145,3,1,2,yes,no,yes,no,no,0,yes,furnished 430 | 3325000,4040,2,1,1,yes,no,no,no,no,1,no,unfurnished 431 | 3325000,4775,4,1,2,yes,no,no,no,no,0,no,unfurnished 432 | 3290000,2500,2,1,1,no,no,no,no,yes,0,no,unfurnished 433 | 3290000,3180,4,1,2,yes,no,yes,no,yes,0,no,unfurnished 434 | 3290000,6060,3,1,1,yes,yes,yes,no,no,0,no,furnished 435 | 3290000,3480,4,1,2,no,no,no,no,no,1,no,semi-furnished 436 | 3290000,3792,4,1,2,yes,no,no,no,no,0,no,semi-furnished 437 | 3290000,4040,2,1,1,yes,no,no,no,no,0,no,unfurnished 438 | 3290000,2145,3,1,2,yes,no,yes,no,no,0,yes,furnished 439 | 3290000,5880,3,1,1,yes,no,no,no,no,1,no,unfurnished 440 | 3255000,4500,2,1,1,no,no,no,no,no,0,no,semi-furnished 441 | 3255000,3930,2,1,1,no,no,no,no,no,0,no,unfurnished 442 | 3234000,3640,4,1,2,yes,no,yes,no,no,0,no,unfurnished 443 | 3220000,4370,3,1,2,yes,no,no,no,no,0,no,unfurnished 444 | 3220000,2684,2,1,1,yes,no,no,no,yes,1,no,unfurnished 445 | 3220000,4320,3,1,1,no,no,no,no,no,1,no,unfurnished 446 | 3220000,3120,3,1,2,no,no,no,no,no,0,no,furnished 447 | 3150000,3450,1,1,1,yes,no,no,no,no,0,no,furnished 448 | 3150000,3986,2,2,1,no,yes,yes,no,no,1,no,unfurnished 449 | 3150000,3500,2,1,1,no,no,yes,no,no,0,no,semi-furnished 450 | 3150000,4095,2,1,1,yes,no,no,no,no,2,no,semi-furnished 451 | 3150000,1650,3,1,2,no,no,yes,no,no,0,no,unfurnished 452 | 3150000,3450,3,1,2,yes,no,yes,no,no,0,no,semi-furnished 453 | 3150000,6750,2,1,1,yes,no,no,no,no,0,no,semi-furnished 454 | 3150000,9000,3,1,2,yes,no,no,no,no,2,no,semi-furnished 455 | 3150000,3069,2,1,1,yes,no,no,no,no,1,no,unfurnished 456 | 3143000,4500,3,1,2,yes,no,no,no,yes,0,no,unfurnished 457 | 3129000,5495,3,1,1,yes,no,yes,no,no,0,no,unfurnished 458 | 3118850,2398,3,1,1,yes,no,no,no,no,0,yes,semi-furnished 459 | 3115000,3000,3,1,1,no,no,no,no,yes,0,no,unfurnished 460 | 3115000,3850,3,1,2,yes,no,no,no,no,0,no,unfurnished 461 | 3115000,3500,2,1,1,yes,no,no,no,no,0,no,unfurnished 462 | 3087000,8100,2,1,1,yes,no,no,no,no,1,no,unfurnished 463 | 3080000,4960,2,1,1,yes,no,yes,no,yes,0,no,unfurnished 464 | 3080000,2160,3,1,2,no,no,yes,no,no,0,no,semi-furnished 465 | 3080000,3090,2,1,1,yes,yes,yes,no,no,0,no,unfurnished 466 | 3080000,4500,2,1,2,yes,no,no,yes,no,1,no,semi-furnished 467 | 3045000,3800,2,1,1,yes,no,no,no,no,0,no,unfurnished 468 | 3010000,3090,3,1,2,no,no,no,no,no,0,no,semi-furnished 469 | 3010000,3240,3,1,2,yes,no,no,no,no,2,no,semi-furnished 470 | 3010000,2835,2,1,1,yes,no,no,no,no,0,no,semi-furnished 471 | 3010000,4600,2,1,1,yes,no,no,no,no,0,no,furnished 472 | 3010000,5076,3,1,1,no,no,no,no,no,0,no,unfurnished 473 | 3010000,3750,3,1,2,yes,no,no,no,no,0,no,unfurnished 474 | 3010000,3630,4,1,2,yes,no,no,no,no,3,no,semi-furnished 475 | 3003000,8050,2,1,1,yes,no,no,no,no,0,no,unfurnished 476 | 2975000,4352,4,1,2,no,no,no,no,no,1,no,unfurnished 477 | 2961000,3000,2,1,2,yes,no,no,no,no,0,no,semi-furnished 478 | 2940000,5850,3,1,2,yes,no,yes,no,no,1,no,unfurnished 479 | 2940000,4960,2,1,1,yes,no,no,no,no,0,no,unfurnished 480 | 2940000,3600,3,1,2,no,no,no,no,no,1,no,unfurnished 481 | 2940000,3660,4,1,2,no,no,no,no,no,0,no,unfurnished 482 | 2940000,3480,3,1,2,no,no,no,no,no,1,no,semi-furnished 483 | 2940000,2700,2,1,1,no,no,no,no,no,0,no,furnished 484 | 2940000,3150,3,1,2,no,no,no,no,no,0,no,unfurnished 485 | 2940000,6615,3,1,2,yes,no,no,no,no,0,no,semi-furnished 486 | 2870000,3040,2,1,1,no,no,no,no,no,0,no,unfurnished 487 | 2870000,3630,2,1,1,yes,no,no,no,no,0,no,unfurnished 488 | 2870000,6000,2,1,1,yes,no,no,no,no,0,no,semi-furnished 489 | 2870000,5400,4,1,2,yes,no,no,no,no,0,no,unfurnished 490 | 2852500,5200,4,1,3,yes,no,no,no,no,0,no,unfurnished 491 | 2835000,3300,3,1,2,no,no,no,no,no,1,no,semi-furnished 492 | 2835000,4350,3,1,2,no,no,no,yes,no,1,no,unfurnished 493 | 2835000,2640,2,1,1,no,no,no,no,no,1,no,furnished 494 | 2800000,2650,3,1,2,yes,no,yes,no,no,1,no,unfurnished 495 | 2800000,3960,3,1,1,yes,no,no,no,no,0,no,furnished 496 | 2730000,6800,2,1,1,yes,no,no,no,no,0,no,unfurnished 497 | 2730000,4000,3,1,2,yes,no,no,no,no,1,no,unfurnished 498 | 2695000,4000,2,1,1,yes,no,no,no,no,0,no,unfurnished 499 | 2660000,3934,2,1,1,yes,no,no,no,no,0,no,unfurnished 500 | 2660000,2000,2,1,2,yes,no,no,no,no,0,no,semi-furnished 501 | 2660000,3630,3,3,2,no,yes,no,no,no,0,no,unfurnished 502 | 2660000,2800,3,1,1,yes,no,no,no,no,0,no,unfurnished 503 | 2660000,2430,3,1,1,no,no,no,no,no,0,no,unfurnished 504 | 2660000,3480,2,1,1,yes,no,no,no,no,1,no,semi-furnished 505 | 2660000,4000,3,1,1,yes,no,no,no,no,0,no,semi-furnished 506 | 2653000,3185,2,1,1,yes,no,no,no,yes,0,no,unfurnished 507 | 2653000,4000,3,1,2,yes,no,no,no,yes,0,no,unfurnished 508 | 2604000,2910,2,1,1,no,no,no,no,no,0,no,unfurnished 509 | 2590000,3600,2,1,1,yes,no,no,no,no,0,no,unfurnished 510 | 2590000,4400,2,1,1,yes,no,no,no,no,0,no,unfurnished 511 | 2590000,3600,2,2,2,yes,no,yes,no,no,1,no,furnished 512 | 2520000,2880,3,1,1,no,no,no,no,no,0,no,unfurnished 513 | 2520000,3180,3,1,1,no,no,no,no,no,0,no,unfurnished 514 | 2520000,3000,2,1,2,yes,no,no,no,no,0,no,furnished 515 | 2485000,4400,3,1,2,yes,no,no,no,no,0,no,unfurnished 516 | 2485000,3000,3,1,2,no,no,no,no,no,0,no,semi-furnished 517 | 2450000,3210,3,1,2,yes,no,yes,no,no,0,no,unfurnished 518 | 2450000,3240,2,1,1,no,yes,no,no,no,1,no,unfurnished 519 | 2450000,3000,2,1,1,yes,no,no,no,no,1,no,unfurnished 520 | 2450000,3500,2,1,1,yes,yes,no,no,no,0,no,unfurnished 521 | 2450000,4840,2,1,2,yes,no,no,no,no,0,no,unfurnished 522 | 2450000,7700,2,1,1,yes,no,no,no,no,0,no,unfurnished 523 | 2408000,3635,2,1,1,no,no,no,no,no,0,no,unfurnished 524 | 2380000,2475,3,1,2,yes,no,no,no,no,0,no,furnished 525 | 2380000,2787,4,2,2,yes,no,no,no,no,0,no,furnished 526 | 2380000,3264,2,1,1,yes,no,no,no,no,0,no,unfurnished 527 | 2345000,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished 528 | 2310000,3180,2,1,1,yes,no,no,no,no,0,no,unfurnished 529 | 2275000,1836,2,1,1,no,no,yes,no,no,0,no,semi-furnished 530 | 2275000,3970,1,1,1,no,no,no,no,no,0,no,unfurnished 531 | 2275000,3970,3,1,2,yes,no,yes,no,no,0,no,unfurnished 532 | 2240000,1950,3,1,1,no,no,no,yes,no,0,no,unfurnished 533 | 2233000,5300,3,1,1,no,no,no,no,yes,0,yes,unfurnished 534 | 2135000,3000,2,1,1,no,no,no,no,no,0,no,unfurnished 535 | 2100000,2400,3,1,2,yes,no,no,no,no,0,no,unfurnished 536 | 2100000,3000,4,1,2,yes,no,no,no,no,0,no,unfurnished 537 | 2100000,3360,2,1,1,yes,no,no,no,no,1,no,unfurnished 538 | 1960000,3420,5,1,2,no,no,no,no,no,0,no,unfurnished 539 | 1890000,1700,3,1,2,yes,no,no,no,no,0,no,unfurnished 540 | 1890000,3649,2,1,1,yes,no,no,no,no,0,no,unfurnished 541 | 1855000,2990,2,1,1,no,no,no,no,no,1,no,unfurnished 542 | 1820000,3000,2,1,1,yes,no,yes,no,no,2,no,unfurnished 543 | 1767150,2400,3,1,1,no,no,no,no,no,0,no,semi-furnished 544 | 1750000,3620,2,1,1,yes,no,no,no,no,0,no,unfurnished 545 | 1750000,2910,3,1,1,no,no,no,no,no,0,no,furnished 546 | 1750000,3850,3,1,2,yes,no,no,no,no,0,no,unfurnished 547 | -------------------------------------------------------------------------------- /table_data/boston.csv: -------------------------------------------------------------------------------- 1 | CRIM,ZN,INDUS,CHAS,NOX,RM,AGE,DIS,RAD,TAX,PTRATIO,B,LSTAT,MEDV 2 | 0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98,24.00 3 | 0.02731,0.00,7.070,0,0.4690,6.4210,78.90,4.9671,2,242.0,17.80,396.90,9.14,21.60 4 | 0.02729,0.00,7.070,0,0.4690,7.1850,61.10,4.9671,2,242.0,17.80,392.83,4.03,34.70 5 | 0.03237,0.00,2.180,0,0.4580,6.9980,45.80,6.0622,3,222.0,18.70,394.63,2.94,33.40 6 | 0.06905,0.00,2.180,0,0.4580,7.1470,54.20,6.0622,3,222.0,18.70,396.90,5.33,36.20 7 | 0.02985,0.00,2.180,0,0.4580,6.4300,58.70,6.0622,3,222.0,18.70,394.12,5.21,28.70 8 | 0.08829,12.50,7.870,0,0.5240,6.0120,66.60,5.5605,5,311.0,15.20,395.60,12.43,22.90 9 | 0.14455,12.50,7.870,0,0.5240,6.1720,96.10,5.9505,5,311.0,15.20,396.90,19.15,27.10 10 | 0.21124,12.50,7.870,0,0.5240,5.6310,100.00,6.0821,5,311.0,15.20,386.63,29.93,16.50 11 | 0.17004,12.50,7.870,0,0.5240,6.0040,85.90,6.5921,5,311.0,15.20,386.71,17.10,18.90 12 | 0.22489,12.50,7.870,0,0.5240,6.3770,94.30,6.3467,5,311.0,15.20,392.52,20.45,15.00 13 | 0.11747,12.50,7.870,0,0.5240,6.0090,82.90,6.2267,5,311.0,15.20,396.90,13.27,18.90 14 | 0.09378,12.50,7.870,0,0.5240,5.8890,39.00,5.4509,5,311.0,15.20,390.50,15.71,21.70 15 | 0.62976,0.00,8.140,0,0.5380,5.9490,61.80,4.7075,4,307.0,21.00,396.90,8.26,20.40 16 | 0.63796,0.00,8.140,0,0.5380,6.0960,84.50,4.4619,4,307.0,21.00,380.02,10.26,18.20 17 | 0.62739,0.00,8.140,0,0.5380,5.8340,56.50,4.4986,4,307.0,21.00,395.62,8.47,19.90 18 | 1.05393,0.00,8.140,0,0.5380,5.9350,29.30,4.4986,4,307.0,21.00,386.85,6.58,23.10 19 | 0.78420,0.00,8.140,0,0.5380,5.9900,81.70,4.2579,4,307.0,21.00,386.75,14.67,17.50 20 | 0.80271,0.00,8.140,0,0.5380,5.4560,36.60,3.7965,4,307.0,21.00,288.99,11.69,20.20 21 | 0.72580,0.00,8.140,0,0.5380,5.7270,69.50,3.7965,4,307.0,21.00,390.95,11.28,18.20 22 | 1.25179,0.00,8.140,0,0.5380,5.5700,98.10,3.7979,4,307.0,21.00,376.57,21.02,13.60 23 | 0.85204,0.00,8.140,0,0.5380,5.9650,89.20,4.0123,4,307.0,21.00,392.53,13.83,19.60 24 | 1.23247,0.00,8.140,0,0.5380,6.1420,91.70,3.9769,4,307.0,21.00,396.90,18.72,15.20 25 | 0.98843,0.00,8.140,0,0.5380,5.8130,100.00,4.0952,4,307.0,21.00,394.54,19.88,14.50 26 | 0.75026,0.00,8.140,0,0.5380,5.9240,94.10,4.3996,4,307.0,21.00,394.33,16.30,15.60 27 | 0.84054,0.00,8.140,0,0.5380,5.5990,85.70,4.4546,4,307.0,21.00,303.42,16.51,13.90 28 | 0.67191,0.00,8.140,0,0.5380,5.8130,90.30,4.6820,4,307.0,21.00,376.88,14.81,16.60 29 | 0.95577,0.00,8.140,0,0.5380,6.0470,88.80,4.4534,4,307.0,21.00,306.38,17.28,14.80 30 | 0.77299,0.00,8.140,0,0.5380,6.4950,94.40,4.4547,4,307.0,21.00,387.94,12.80,18.40 31 | 1.00245,0.00,8.140,0,0.5380,6.6740,87.30,4.2390,4,307.0,21.00,380.23,11.98,21.00 32 | 1.13081,0.00,8.140,0,0.5380,5.7130,94.10,4.2330,4,307.0,21.00,360.17,22.60,12.70 33 | 1.35472,0.00,8.140,0,0.5380,6.0720,100.00,4.1750,4,307.0,21.00,376.73,13.04,14.50 34 | 1.38799,0.00,8.140,0,0.5380,5.9500,82.00,3.9900,4,307.0,21.00,232.60,27.71,13.20 35 | 1.15172,0.00,8.140,0,0.5380,5.7010,95.00,3.7872,4,307.0,21.00,358.77,18.35,13.10 36 | 1.61282,0.00,8.140,0,0.5380,6.0960,96.90,3.7598,4,307.0,21.00,248.31,20.34,13.50 37 | 0.06417,0.00,5.960,0,0.4990,5.9330,68.20,3.3603,5,279.0,19.20,396.90,9.68,18.90 38 | 0.09744,0.00,5.960,0,0.4990,5.8410,61.40,3.3779,5,279.0,19.20,377.56,11.41,20.00 39 | 0.08014,0.00,5.960,0,0.4990,5.8500,41.50,3.9342,5,279.0,19.20,396.90,8.77,21.00 40 | 0.17505,0.00,5.960,0,0.4990,5.9660,30.20,3.8473,5,279.0,19.20,393.43,10.13,24.70 41 | 0.02763,75.00,2.950,0,0.4280,6.5950,21.80,5.4011,3,252.0,18.30,395.63,4.32,30.80 42 | 0.03359,75.00,2.950,0,0.4280,7.0240,15.80,5.4011,3,252.0,18.30,395.62,1.98,34.90 43 | 0.12744,0.00,6.910,0,0.4480,6.7700,2.90,5.7209,3,233.0,17.90,385.41,4.84,26.60 44 | 0.14150,0.00,6.910,0,0.4480,6.1690,6.60,5.7209,3,233.0,17.90,383.37,5.81,25.30 45 | 0.15936,0.00,6.910,0,0.4480,6.2110,6.50,5.7209,3,233.0,17.90,394.46,7.44,24.70 46 | 0.12269,0.00,6.910,0,0.4480,6.0690,40.00,5.7209,3,233.0,17.90,389.39,9.55,21.20 47 | 0.17142,0.00,6.910,0,0.4480,5.6820,33.80,5.1004,3,233.0,17.90,396.90,10.21,19.30 48 | 0.18836,0.00,6.910,0,0.4480,5.7860,33.30,5.1004,3,233.0,17.90,396.90,14.15,20.00 49 | 0.22927,0.00,6.910,0,0.4480,6.0300,85.50,5.6894,3,233.0,17.90,392.74,18.80,16.60 50 | 0.25387,0.00,6.910,0,0.4480,5.3990,95.30,5.8700,3,233.0,17.90,396.90,30.81,14.40 51 | 0.21977,0.00,6.910,0,0.4480,5.6020,62.00,6.0877,3,233.0,17.90,396.90,16.20,19.40 52 | 0.08873,21.00,5.640,0,0.4390,5.9630,45.70,6.8147,4,243.0,16.80,395.56,13.45,19.70 53 | 0.04337,21.00,5.640,0,0.4390,6.1150,63.00,6.8147,4,243.0,16.80,393.97,9.43,20.50 54 | 0.05360,21.00,5.640,0,0.4390,6.5110,21.10,6.8147,4,243.0,16.80,396.90,5.28,25.00 55 | 0.04981,21.00,5.640,0,0.4390,5.9980,21.40,6.8147,4,243.0,16.80,396.90,8.43,23.40 56 | 0.01360,75.00,4.000,0,0.4100,5.8880,47.60,7.3197,3,469.0,21.10,396.90,14.80,18.90 57 | 0.01311,90.00,1.220,0,0.4030,7.2490,21.90,8.6966,5,226.0,17.90,395.93,4.81,35.40 58 | 0.02055,85.00,0.740,0,0.4100,6.3830,35.70,9.1876,2,313.0,17.30,396.90,5.77,24.70 59 | 0.01432,100.00,1.320,0,0.4110,6.8160,40.50,8.3248,5,256.0,15.10,392.90,3.95,31.60 60 | 0.15445,25.00,5.130,0,0.4530,6.1450,29.20,7.8148,8,284.0,19.70,390.68,6.86,23.30 61 | 0.10328,25.00,5.130,0,0.4530,5.9270,47.20,6.9320,8,284.0,19.70,396.90,9.22,19.60 62 | 0.14932,25.00,5.130,0,0.4530,5.7410,66.20,7.2254,8,284.0,19.70,395.11,13.15,18.70 63 | 0.17171,25.00,5.130,0,0.4530,5.9660,93.40,6.8185,8,284.0,19.70,378.08,14.44,16.00 64 | 0.11027,25.00,5.130,0,0.4530,6.4560,67.80,7.2255,8,284.0,19.70,396.90,6.73,22.20 65 | 0.12650,25.00,5.130,0,0.4530,6.7620,43.40,7.9809,8,284.0,19.70,395.58,9.50,25.00 66 | 0.01951,17.50,1.380,0,0.4161,7.1040,59.50,9.2229,3,216.0,18.60,393.24,8.05,33.00 67 | 0.03584,80.00,3.370,0,0.3980,6.2900,17.80,6.6115,4,337.0,16.10,396.90,4.67,23.50 68 | 0.04379,80.00,3.370,0,0.3980,5.7870,31.10,6.6115,4,337.0,16.10,396.90,10.24,19.40 69 | 0.05789,12.50,6.070,0,0.4090,5.8780,21.40,6.4980,4,345.0,18.90,396.21,8.10,22.00 70 | 0.13554,12.50,6.070,0,0.4090,5.5940,36.80,6.4980,4,345.0,18.90,396.90,13.09,17.40 71 | 0.12816,12.50,6.070,0,0.4090,5.8850,33.00,6.4980,4,345.0,18.90,396.90,8.79,20.90 72 | 0.08826,0.00,10.810,0,0.4130,6.4170,6.60,5.2873,4,305.0,19.20,383.73,6.72,24.20 73 | 0.15876,0.00,10.810,0,0.4130,5.9610,17.50,5.2873,4,305.0,19.20,376.94,9.88,21.70 74 | 0.09164,0.00,10.810,0,0.4130,6.0650,7.80,5.2873,4,305.0,19.20,390.91,5.52,22.80 75 | 0.19539,0.00,10.810,0,0.4130,6.2450,6.20,5.2873,4,305.0,19.20,377.17,7.54,23.40 76 | 0.07896,0.00,12.830,0,0.4370,6.2730,6.00,4.2515,5,398.0,18.70,394.92,6.78,24.10 77 | 0.09512,0.00,12.830,0,0.4370,6.2860,45.00,4.5026,5,398.0,18.70,383.23,8.94,21.40 78 | 0.10153,0.00,12.830,0,0.4370,6.2790,74.50,4.0522,5,398.0,18.70,373.66,11.97,20.00 79 | 0.08707,0.00,12.830,0,0.4370,6.1400,45.80,4.0905,5,398.0,18.70,386.96,10.27,20.80 80 | 0.05646,0.00,12.830,0,0.4370,6.2320,53.70,5.0141,5,398.0,18.70,386.40,12.34,21.20 81 | 0.08387,0.00,12.830,0,0.4370,5.8740,36.60,4.5026,5,398.0,18.70,396.06,9.10,20.30 82 | 0.04113,25.00,4.860,0,0.4260,6.7270,33.50,5.4007,4,281.0,19.00,396.90,5.29,28.00 83 | 0.04462,25.00,4.860,0,0.4260,6.6190,70.40,5.4007,4,281.0,19.00,395.63,7.22,23.90 84 | 0.03659,25.00,4.860,0,0.4260,6.3020,32.20,5.4007,4,281.0,19.00,396.90,6.72,24.80 85 | 0.03551,25.00,4.860,0,0.4260,6.1670,46.70,5.4007,4,281.0,19.00,390.64,7.51,22.90 86 | 0.05059,0.00,4.490,0,0.4490,6.3890,48.00,4.7794,3,247.0,18.50,396.90,9.62,23.90 87 | 0.05735,0.00,4.490,0,0.4490,6.6300,56.10,4.4377,3,247.0,18.50,392.30,6.53,26.60 88 | 0.05188,0.00,4.490,0,0.4490,6.0150,45.10,4.4272,3,247.0,18.50,395.99,12.86,22.50 89 | 0.07151,0.00,4.490,0,0.4490,6.1210,56.80,3.7476,3,247.0,18.50,395.15,8.44,22.20 90 | 0.05660,0.00,3.410,0,0.4890,7.0070,86.30,3.4217,2,270.0,17.80,396.90,5.50,23.60 91 | 0.05302,0.00,3.410,0,0.4890,7.0790,63.10,3.4145,2,270.0,17.80,396.06,5.70,28.70 92 | 0.04684,0.00,3.410,0,0.4890,6.4170,66.10,3.0923,2,270.0,17.80,392.18,8.81,22.60 93 | 0.03932,0.00,3.410,0,0.4890,6.4050,73.90,3.0921,2,270.0,17.80,393.55,8.20,22.00 94 | 0.04203,28.00,15.040,0,0.4640,6.4420,53.60,3.6659,4,270.0,18.20,395.01,8.16,22.90 95 | 0.02875,28.00,15.040,0,0.4640,6.2110,28.90,3.6659,4,270.0,18.20,396.33,6.21,25.00 96 | 0.04294,28.00,15.040,0,0.4640,6.2490,77.30,3.6150,4,270.0,18.20,396.90,10.59,20.60 97 | 0.12204,0.00,2.890,0,0.4450,6.6250,57.80,3.4952,2,276.0,18.00,357.98,6.65,28.40 98 | 0.11504,0.00,2.890,0,0.4450,6.1630,69.60,3.4952,2,276.0,18.00,391.83,11.34,21.40 99 | 0.12083,0.00,2.890,0,0.4450,8.0690,76.00,3.4952,2,276.0,18.00,396.90,4.21,38.70 100 | 0.08187,0.00,2.890,0,0.4450,7.8200,36.90,3.4952,2,276.0,18.00,393.53,3.57,43.80 101 | 0.06860,0.00,2.890,0,0.4450,7.4160,62.50,3.4952,2,276.0,18.00,396.90,6.19,33.20 102 | 0.14866,0.00,8.560,0,0.5200,6.7270,79.90,2.7778,5,384.0,20.90,394.76,9.42,27.50 103 | 0.11432,0.00,8.560,0,0.5200,6.7810,71.30,2.8561,5,384.0,20.90,395.58,7.67,26.50 104 | 0.22876,0.00,8.560,0,0.5200,6.4050,85.40,2.7147,5,384.0,20.90,70.80,10.63,18.60 105 | 0.21161,0.00,8.560,0,0.5200,6.1370,87.40,2.7147,5,384.0,20.90,394.47,13.44,19.30 106 | 0.13960,0.00,8.560,0,0.5200,6.1670,90.00,2.4210,5,384.0,20.90,392.69,12.33,20.10 107 | 0.13262,0.00,8.560,0,0.5200,5.8510,96.70,2.1069,5,384.0,20.90,394.05,16.47,19.50 108 | 0.17120,0.00,8.560,0,0.5200,5.8360,91.90,2.2110,5,384.0,20.90,395.67,18.66,19.50 109 | 0.13117,0.00,8.560,0,0.5200,6.1270,85.20,2.1224,5,384.0,20.90,387.69,14.09,20.40 110 | 0.12802,0.00,8.560,0,0.5200,6.4740,97.10,2.4329,5,384.0,20.90,395.24,12.27,19.80 111 | 0.26363,0.00,8.560,0,0.5200,6.2290,91.20,2.5451,5,384.0,20.90,391.23,15.55,19.40 112 | 0.10793,0.00,8.560,0,0.5200,6.1950,54.40,2.7778,5,384.0,20.90,393.49,13.00,21.70 113 | 0.10084,0.00,10.010,0,0.5470,6.7150,81.60,2.6775,6,432.0,17.80,395.59,10.16,22.80 114 | 0.12329,0.00,10.010,0,0.5470,5.9130,92.90,2.3534,6,432.0,17.80,394.95,16.21,18.80 115 | 0.22212,0.00,10.010,0,0.5470,6.0920,95.40,2.5480,6,432.0,17.80,396.90,17.09,18.70 116 | 0.14231,0.00,10.010,0,0.5470,6.2540,84.20,2.2565,6,432.0,17.80,388.74,10.45,18.50 117 | 0.17134,0.00,10.010,0,0.5470,5.9280,88.20,2.4631,6,432.0,17.80,344.91,15.76,18.30 118 | 0.13158,0.00,10.010,0,0.5470,6.1760,72.50,2.7301,6,432.0,17.80,393.30,12.04,21.20 119 | 0.15098,0.00,10.010,0,0.5470,6.0210,82.60,2.7474,6,432.0,17.80,394.51,10.30,19.20 120 | 0.13058,0.00,10.010,0,0.5470,5.8720,73.10,2.4775,6,432.0,17.80,338.63,15.37,20.40 121 | 0.14476,0.00,10.010,0,0.5470,5.7310,65.20,2.7592,6,432.0,17.80,391.50,13.61,19.30 122 | 0.06899,0.00,25.650,0,0.5810,5.8700,69.70,2.2577,2,188.0,19.10,389.15,14.37,22.00 123 | 0.07165,0.00,25.650,0,0.5810,6.0040,84.10,2.1974,2,188.0,19.10,377.67,14.27,20.30 124 | 0.09299,0.00,25.650,0,0.5810,5.9610,92.90,2.0869,2,188.0,19.10,378.09,17.93,20.50 125 | 0.15038,0.00,25.650,0,0.5810,5.8560,97.00,1.9444,2,188.0,19.10,370.31,25.41,17.30 126 | 0.09849,0.00,25.650,0,0.5810,5.8790,95.80,2.0063,2,188.0,19.10,379.38,17.58,18.80 127 | 0.16902,0.00,25.650,0,0.5810,5.9860,88.40,1.9929,2,188.0,19.10,385.02,14.81,21.40 128 | 0.38735,0.00,25.650,0,0.5810,5.6130,95.60,1.7572,2,188.0,19.10,359.29,27.26,15.70 129 | 0.25915,0.00,21.890,0,0.6240,5.6930,96.00,1.7883,4,437.0,21.20,392.11,17.19,16.20 130 | 0.32543,0.00,21.890,0,0.6240,6.4310,98.80,1.8125,4,437.0,21.20,396.90,15.39,18.00 131 | 0.88125,0.00,21.890,0,0.6240,5.6370,94.70,1.9799,4,437.0,21.20,396.90,18.34,14.30 132 | 0.34006,0.00,21.890,0,0.6240,6.4580,98.90,2.1185,4,437.0,21.20,395.04,12.60,19.20 133 | 1.19294,0.00,21.890,0,0.6240,6.3260,97.70,2.2710,4,437.0,21.20,396.90,12.26,19.60 134 | 0.59005,0.00,21.890,0,0.6240,6.3720,97.90,2.3274,4,437.0,21.20,385.76,11.12,23.00 135 | 0.32982,0.00,21.890,0,0.6240,5.8220,95.40,2.4699,4,437.0,21.20,388.69,15.03,18.40 136 | 0.97617,0.00,21.890,0,0.6240,5.7570,98.40,2.3460,4,437.0,21.20,262.76,17.31,15.60 137 | 0.55778,0.00,21.890,0,0.6240,6.3350,98.20,2.1107,4,437.0,21.20,394.67,16.96,18.10 138 | 0.32264,0.00,21.890,0,0.6240,5.9420,93.50,1.9669,4,437.0,21.20,378.25,16.90,17.40 139 | 0.35233,0.00,21.890,0,0.6240,6.4540,98.40,1.8498,4,437.0,21.20,394.08,14.59,17.10 140 | 0.24980,0.00,21.890,0,0.6240,5.8570,98.20,1.6686,4,437.0,21.20,392.04,21.32,13.30 141 | 0.54452,0.00,21.890,0,0.6240,6.1510,97.90,1.6687,4,437.0,21.20,396.90,18.46,17.80 142 | 0.29090,0.00,21.890,0,0.6240,6.1740,93.60,1.6119,4,437.0,21.20,388.08,24.16,14.00 143 | 1.62864,0.00,21.890,0,0.6240,5.0190,100.00,1.4394,4,437.0,21.20,396.90,34.41,14.40 144 | 3.32105,0.00,19.580,1,0.8710,5.4030,100.00,1.3216,5,403.0,14.70,396.90,26.82,13.40 145 | 4.09740,0.00,19.580,0,0.8710,5.4680,100.00,1.4118,5,403.0,14.70,396.90,26.42,15.60 146 | 2.77974,0.00,19.580,0,0.8710,4.9030,97.80,1.3459,5,403.0,14.70,396.90,29.29,11.80 147 | 2.37934,0.00,19.580,0,0.8710,6.1300,100.00,1.4191,5,403.0,14.70,172.91,27.80,13.80 148 | 2.15505,0.00,19.580,0,0.8710,5.6280,100.00,1.5166,5,403.0,14.70,169.27,16.65,15.60 149 | 2.36862,0.00,19.580,0,0.8710,4.9260,95.70,1.4608,5,403.0,14.70,391.71,29.53,14.60 150 | 2.33099,0.00,19.580,0,0.8710,5.1860,93.80,1.5296,5,403.0,14.70,356.99,28.32,17.80 151 | 2.73397,0.00,19.580,0,0.8710,5.5970,94.90,1.5257,5,403.0,14.70,351.85,21.45,15.40 152 | 1.65660,0.00,19.580,0,0.8710,6.1220,97.30,1.6180,5,403.0,14.70,372.80,14.10,21.50 153 | 1.49632,0.00,19.580,0,0.8710,5.4040,100.00,1.5916,5,403.0,14.70,341.60,13.28,19.60 154 | 1.12658,0.00,19.580,1,0.8710,5.0120,88.00,1.6102,5,403.0,14.70,343.28,12.12,15.30 155 | 2.14918,0.00,19.580,0,0.8710,5.7090,98.50,1.6232,5,403.0,14.70,261.95,15.79,19.40 156 | 1.41385,0.00,19.580,1,0.8710,6.1290,96.00,1.7494,5,403.0,14.70,321.02,15.12,17.00 157 | 3.53501,0.00,19.580,1,0.8710,6.1520,82.60,1.7455,5,403.0,14.70,88.01,15.02,15.60 158 | 2.44668,0.00,19.580,0,0.8710,5.2720,94.00,1.7364,5,403.0,14.70,88.63,16.14,13.10 159 | 1.22358,0.00,19.580,0,0.6050,6.9430,97.40,1.8773,5,403.0,14.70,363.43,4.59,41.30 160 | 1.34284,0.00,19.580,0,0.6050,6.0660,100.00,1.7573,5,403.0,14.70,353.89,6.43,24.30 161 | 1.42502,0.00,19.580,0,0.8710,6.5100,100.00,1.7659,5,403.0,14.70,364.31,7.39,23.30 162 | 1.27346,0.00,19.580,1,0.6050,6.2500,92.60,1.7984,5,403.0,14.70,338.92,5.50,27.00 163 | 1.46336,0.00,19.580,0,0.6050,7.4890,90.80,1.9709,5,403.0,14.70,374.43,1.73,50.00 164 | 1.83377,0.00,19.580,1,0.6050,7.8020,98.20,2.0407,5,403.0,14.70,389.61,1.92,50.00 165 | 1.51902,0.00,19.580,1,0.6050,8.3750,93.90,2.1620,5,403.0,14.70,388.45,3.32,50.00 166 | 2.24236,0.00,19.580,0,0.6050,5.8540,91.80,2.4220,5,403.0,14.70,395.11,11.64,22.70 167 | 2.92400,0.00,19.580,0,0.6050,6.1010,93.00,2.2834,5,403.0,14.70,240.16,9.81,25.00 168 | 2.01019,0.00,19.580,0,0.6050,7.9290,96.20,2.0459,5,403.0,14.70,369.30,3.70,50.00 169 | 1.80028,0.00,19.580,0,0.6050,5.8770,79.20,2.4259,5,403.0,14.70,227.61,12.14,23.80 170 | 2.30040,0.00,19.580,0,0.6050,6.3190,96.10,2.1000,5,403.0,14.70,297.09,11.10,23.80 171 | 2.44953,0.00,19.580,0,0.6050,6.4020,95.20,2.2625,5,403.0,14.70,330.04,11.32,22.30 172 | 1.20742,0.00,19.580,0,0.6050,5.8750,94.60,2.4259,5,403.0,14.70,292.29,14.43,17.40 173 | 2.31390,0.00,19.580,0,0.6050,5.8800,97.30,2.3887,5,403.0,14.70,348.13,12.03,19.10 174 | 0.13914,0.00,4.050,0,0.5100,5.5720,88.50,2.5961,5,296.0,16.60,396.90,14.69,23.10 175 | 0.09178,0.00,4.050,0,0.5100,6.4160,84.10,2.6463,5,296.0,16.60,395.50,9.04,23.60 176 | 0.08447,0.00,4.050,0,0.5100,5.8590,68.70,2.7019,5,296.0,16.60,393.23,9.64,22.60 177 | 0.06664,0.00,4.050,0,0.5100,6.5460,33.10,3.1323,5,296.0,16.60,390.96,5.33,29.40 178 | 0.07022,0.00,4.050,0,0.5100,6.0200,47.20,3.5549,5,296.0,16.60,393.23,10.11,23.20 179 | 0.05425,0.00,4.050,0,0.5100,6.3150,73.40,3.3175,5,296.0,16.60,395.60,6.29,24.60 180 | 0.06642,0.00,4.050,0,0.5100,6.8600,74.40,2.9153,5,296.0,16.60,391.27,6.92,29.90 181 | 0.05780,0.00,2.460,0,0.4880,6.9800,58.40,2.8290,3,193.0,17.80,396.90,5.04,37.20 182 | 0.06588,0.00,2.460,0,0.4880,7.7650,83.30,2.7410,3,193.0,17.80,395.56,7.56,39.80 183 | 0.06888,0.00,2.460,0,0.4880,6.1440,62.20,2.5979,3,193.0,17.80,396.90,9.45,36.20 184 | 0.09103,0.00,2.460,0,0.4880,7.1550,92.20,2.7006,3,193.0,17.80,394.12,4.82,37.90 185 | 0.10008,0.00,2.460,0,0.4880,6.5630,95.60,2.8470,3,193.0,17.80,396.90,5.68,32.50 186 | 0.08308,0.00,2.460,0,0.4880,5.6040,89.80,2.9879,3,193.0,17.80,391.00,13.98,26.40 187 | 0.06047,0.00,2.460,0,0.4880,6.1530,68.80,3.2797,3,193.0,17.80,387.11,13.15,29.60 188 | 0.05602,0.00,2.460,0,0.4880,7.8310,53.60,3.1992,3,193.0,17.80,392.63,4.45,50.00 189 | 0.07875,45.00,3.440,0,0.4370,6.7820,41.10,3.7886,5,398.0,15.20,393.87,6.68,32.00 190 | 0.12579,45.00,3.440,0,0.4370,6.5560,29.10,4.5667,5,398.0,15.20,382.84,4.56,29.80 191 | 0.08370,45.00,3.440,0,0.4370,7.1850,38.90,4.5667,5,398.0,15.20,396.90,5.39,34.90 192 | 0.09068,45.00,3.440,0,0.4370,6.9510,21.50,6.4798,5,398.0,15.20,377.68,5.10,37.00 193 | 0.06911,45.00,3.440,0,0.4370,6.7390,30.80,6.4798,5,398.0,15.20,389.71,4.69,30.50 194 | 0.08664,45.00,3.440,0,0.4370,7.1780,26.30,6.4798,5,398.0,15.20,390.49,2.87,36.40 195 | 0.02187,60.00,2.930,0,0.4010,6.8000,9.90,6.2196,1,265.0,15.60,393.37,5.03,31.10 196 | 0.01439,60.00,2.930,0,0.4010,6.6040,18.80,6.2196,1,265.0,15.60,376.70,4.38,29.10 197 | 0.01381,80.00,0.460,0,0.4220,7.8750,32.00,5.6484,4,255.0,14.40,394.23,2.97,50.00 198 | 0.04011,80.00,1.520,0,0.4040,7.2870,34.10,7.3090,2,329.0,12.60,396.90,4.08,33.30 199 | 0.04666,80.00,1.520,0,0.4040,7.1070,36.60,7.3090,2,329.0,12.60,354.31,8.61,30.30 200 | 0.03768,80.00,1.520,0,0.4040,7.2740,38.30,7.3090,2,329.0,12.60,392.20,6.62,34.60 201 | 0.03150,95.00,1.470,0,0.4030,6.9750,15.30,7.6534,3,402.0,17.00,396.90,4.56,34.90 202 | 0.01778,95.00,1.470,0,0.4030,7.1350,13.90,7.6534,3,402.0,17.00,384.30,4.45,32.90 203 | 0.03445,82.50,2.030,0,0.4150,6.1620,38.40,6.2700,2,348.0,14.70,393.77,7.43,24.10 204 | 0.02177,82.50,2.030,0,0.4150,7.6100,15.70,6.2700,2,348.0,14.70,395.38,3.11,42.30 205 | 0.03510,95.00,2.680,0,0.4161,7.8530,33.20,5.1180,4,224.0,14.70,392.78,3.81,48.50 206 | 0.02009,95.00,2.680,0,0.4161,8.0340,31.90,5.1180,4,224.0,14.70,390.55,2.88,50.00 207 | 0.13642,0.00,10.590,0,0.4890,5.8910,22.30,3.9454,4,277.0,18.60,396.90,10.87,22.60 208 | 0.22969,0.00,10.590,0,0.4890,6.3260,52.50,4.3549,4,277.0,18.60,394.87,10.97,24.40 209 | 0.25199,0.00,10.590,0,0.4890,5.7830,72.70,4.3549,4,277.0,18.60,389.43,18.06,22.50 210 | 0.13587,0.00,10.590,1,0.4890,6.0640,59.10,4.2392,4,277.0,18.60,381.32,14.66,24.40 211 | 0.43571,0.00,10.590,1,0.4890,5.3440,100.00,3.8750,4,277.0,18.60,396.90,23.09,20.00 212 | 0.17446,0.00,10.590,1,0.4890,5.9600,92.10,3.8771,4,277.0,18.60,393.25,17.27,21.70 213 | 0.37578,0.00,10.590,1,0.4890,5.4040,88.60,3.6650,4,277.0,18.60,395.24,23.98,19.30 214 | 0.21719,0.00,10.590,1,0.4890,5.8070,53.80,3.6526,4,277.0,18.60,390.94,16.03,22.40 215 | 0.14052,0.00,10.590,0,0.4890,6.3750,32.30,3.9454,4,277.0,18.60,385.81,9.38,28.10 216 | 0.28955,0.00,10.590,0,0.4890,5.4120,9.80,3.5875,4,277.0,18.60,348.93,29.55,23.70 217 | 0.19802,0.00,10.590,0,0.4890,6.1820,42.40,3.9454,4,277.0,18.60,393.63,9.47,25.00 218 | 0.04560,0.00,13.890,1,0.5500,5.8880,56.00,3.1121,5,276.0,16.40,392.80,13.51,23.30 219 | 0.07013,0.00,13.890,0,0.5500,6.6420,85.10,3.4211,5,276.0,16.40,392.78,9.69,28.70 220 | 0.11069,0.00,13.890,1,0.5500,5.9510,93.80,2.8893,5,276.0,16.40,396.90,17.92,21.50 221 | 0.11425,0.00,13.890,1,0.5500,6.3730,92.40,3.3633,5,276.0,16.40,393.74,10.50,23.00 222 | 0.35809,0.00,6.200,1,0.5070,6.9510,88.50,2.8617,8,307.0,17.40,391.70,9.71,26.70 223 | 0.40771,0.00,6.200,1,0.5070,6.1640,91.30,3.0480,8,307.0,17.40,395.24,21.46,21.70 224 | 0.62356,0.00,6.200,1,0.5070,6.8790,77.70,3.2721,8,307.0,17.40,390.39,9.93,27.50 225 | 0.61470,0.00,6.200,0,0.5070,6.6180,80.80,3.2721,8,307.0,17.40,396.90,7.60,30.10 226 | 0.31533,0.00,6.200,0,0.5040,8.2660,78.30,2.8944,8,307.0,17.40,385.05,4.14,44.80 227 | 0.52693,0.00,6.200,0,0.5040,8.7250,83.00,2.8944,8,307.0,17.40,382.00,4.63,50.00 228 | 0.38214,0.00,6.200,0,0.5040,8.0400,86.50,3.2157,8,307.0,17.40,387.38,3.13,37.60 229 | 0.41238,0.00,6.200,0,0.5040,7.1630,79.90,3.2157,8,307.0,17.40,372.08,6.36,31.60 230 | 0.29819,0.00,6.200,0,0.5040,7.6860,17.00,3.3751,8,307.0,17.40,377.51,3.92,46.70 231 | 0.44178,0.00,6.200,0,0.5040,6.5520,21.40,3.3751,8,307.0,17.40,380.34,3.76,31.50 232 | 0.53700,0.00,6.200,0,0.5040,5.9810,68.10,3.6715,8,307.0,17.40,378.35,11.65,24.30 233 | 0.46296,0.00,6.200,0,0.5040,7.4120,76.90,3.6715,8,307.0,17.40,376.14,5.25,31.70 234 | 0.57529,0.00,6.200,0,0.5070,8.3370,73.30,3.8384,8,307.0,17.40,385.91,2.47,41.70 235 | 0.33147,0.00,6.200,0,0.5070,8.2470,70.40,3.6519,8,307.0,17.40,378.95,3.95,48.30 236 | 0.44791,0.00,6.200,1,0.5070,6.7260,66.50,3.6519,8,307.0,17.40,360.20,8.05,29.00 237 | 0.33045,0.00,6.200,0,0.5070,6.0860,61.50,3.6519,8,307.0,17.40,376.75,10.88,24.00 238 | 0.52058,0.00,6.200,1,0.5070,6.6310,76.50,4.1480,8,307.0,17.40,388.45,9.54,25.10 239 | 0.51183,0.00,6.200,0,0.5070,7.3580,71.60,4.1480,8,307.0,17.40,390.07,4.73,31.50 240 | 0.08244,30.00,4.930,0,0.4280,6.4810,18.50,6.1899,6,300.0,16.60,379.41,6.36,23.70 241 | 0.09252,30.00,4.930,0,0.4280,6.6060,42.20,6.1899,6,300.0,16.60,383.78,7.37,23.30 242 | 0.11329,30.00,4.930,0,0.4280,6.8970,54.30,6.3361,6,300.0,16.60,391.25,11.38,22.00 243 | 0.10612,30.00,4.930,0,0.4280,6.0950,65.10,6.3361,6,300.0,16.60,394.62,12.40,20.10 244 | 0.10290,30.00,4.930,0,0.4280,6.3580,52.90,7.0355,6,300.0,16.60,372.75,11.22,22.20 245 | 0.12757,30.00,4.930,0,0.4280,6.3930,7.80,7.0355,6,300.0,16.60,374.71,5.19,23.70 246 | 0.20608,22.00,5.860,0,0.4310,5.5930,76.50,7.9549,7,330.0,19.10,372.49,12.50,17.60 247 | 0.19133,22.00,5.860,0,0.4310,5.6050,70.20,7.9549,7,330.0,19.10,389.13,18.46,18.50 248 | 0.33983,22.00,5.860,0,0.4310,6.1080,34.90,8.0555,7,330.0,19.10,390.18,9.16,24.30 249 | 0.19657,22.00,5.860,0,0.4310,6.2260,79.20,8.0555,7,330.0,19.10,376.14,10.15,20.50 250 | 0.16439,22.00,5.860,0,0.4310,6.4330,49.10,7.8265,7,330.0,19.10,374.71,9.52,24.50 251 | 0.19073,22.00,5.860,0,0.4310,6.7180,17.50,7.8265,7,330.0,19.10,393.74,6.56,26.20 252 | 0.14030,22.00,5.860,0,0.4310,6.4870,13.00,7.3967,7,330.0,19.10,396.28,5.90,24.40 253 | 0.21409,22.00,5.860,0,0.4310,6.4380,8.90,7.3967,7,330.0,19.10,377.07,3.59,24.80 254 | 0.08221,22.00,5.860,0,0.4310,6.9570,6.80,8.9067,7,330.0,19.10,386.09,3.53,29.60 255 | 0.36894,22.00,5.860,0,0.4310,8.2590,8.40,8.9067,7,330.0,19.10,396.90,3.54,42.80 256 | 0.04819,80.00,3.640,0,0.3920,6.1080,32.00,9.2203,1,315.0,16.40,392.89,6.57,21.90 257 | 0.03548,80.00,3.640,0,0.3920,5.8760,19.10,9.2203,1,315.0,16.40,395.18,9.25,20.90 258 | 0.01538,90.00,3.750,0,0.3940,7.4540,34.20,6.3361,3,244.0,15.90,386.34,3.11,44.00 259 | 0.61154,20.00,3.970,0,0.6470,8.7040,86.90,1.8010,5,264.0,13.00,389.70,5.12,50.00 260 | 0.66351,20.00,3.970,0,0.6470,7.3330,100.00,1.8946,5,264.0,13.00,383.29,7.79,36.00 261 | 0.65665,20.00,3.970,0,0.6470,6.8420,100.00,2.0107,5,264.0,13.00,391.93,6.90,30.10 262 | 0.54011,20.00,3.970,0,0.6470,7.2030,81.80,2.1121,5,264.0,13.00,392.80,9.59,33.80 263 | 0.53412,20.00,3.970,0,0.6470,7.5200,89.40,2.1398,5,264.0,13.00,388.37,7.26,43.10 264 | 0.52014,20.00,3.970,0,0.6470,8.3980,91.50,2.2885,5,264.0,13.00,386.86,5.91,48.80 265 | 0.82526,20.00,3.970,0,0.6470,7.3270,94.50,2.0788,5,264.0,13.00,393.42,11.25,31.00 266 | 0.55007,20.00,3.970,0,0.6470,7.2060,91.60,1.9301,5,264.0,13.00,387.89,8.10,36.50 267 | 0.76162,20.00,3.970,0,0.6470,5.5600,62.80,1.9865,5,264.0,13.00,392.40,10.45,22.80 268 | 0.78570,20.00,3.970,0,0.6470,7.0140,84.60,2.1329,5,264.0,13.00,384.07,14.79,30.70 269 | 0.57834,20.00,3.970,0,0.5750,8.2970,67.00,2.4216,5,264.0,13.00,384.54,7.44,50.00 270 | 0.54050,20.00,3.970,0,0.5750,7.4700,52.60,2.8720,5,264.0,13.00,390.30,3.16,43.50 271 | 0.09065,20.00,6.960,1,0.4640,5.9200,61.50,3.9175,3,223.0,18.60,391.34,13.65,20.70 272 | 0.29916,20.00,6.960,0,0.4640,5.8560,42.10,4.4290,3,223.0,18.60,388.65,13.00,21.10 273 | 0.16211,20.00,6.960,0,0.4640,6.2400,16.30,4.4290,3,223.0,18.60,396.90,6.59,25.20 274 | 0.11460,20.00,6.960,0,0.4640,6.5380,58.70,3.9175,3,223.0,18.60,394.96,7.73,24.40 275 | 0.22188,20.00,6.960,1,0.4640,7.6910,51.80,4.3665,3,223.0,18.60,390.77,6.58,35.20 276 | 0.05644,40.00,6.410,1,0.4470,6.7580,32.90,4.0776,4,254.0,17.60,396.90,3.53,32.40 277 | 0.09604,40.00,6.410,0,0.4470,6.8540,42.80,4.2673,4,254.0,17.60,396.90,2.98,32.00 278 | 0.10469,40.00,6.410,1,0.4470,7.2670,49.00,4.7872,4,254.0,17.60,389.25,6.05,33.20 279 | 0.06127,40.00,6.410,1,0.4470,6.8260,27.60,4.8628,4,254.0,17.60,393.45,4.16,33.10 280 | 0.07978,40.00,6.410,0,0.4470,6.4820,32.10,4.1403,4,254.0,17.60,396.90,7.19,29.10 281 | 0.21038,20.00,3.330,0,0.4429,6.8120,32.20,4.1007,5,216.0,14.90,396.90,4.85,35.10 282 | 0.03578,20.00,3.330,0,0.4429,7.8200,64.50,4.6947,5,216.0,14.90,387.31,3.76,45.40 283 | 0.03705,20.00,3.330,0,0.4429,6.9680,37.20,5.2447,5,216.0,14.90,392.23,4.59,35.40 284 | 0.06129,20.00,3.330,1,0.4429,7.6450,49.70,5.2119,5,216.0,14.90,377.07,3.01,46.00 285 | 0.01501,90.00,1.210,1,0.4010,7.9230,24.80,5.8850,1,198.0,13.60,395.52,3.16,50.00 286 | 0.00906,90.00,2.970,0,0.4000,7.0880,20.80,7.3073,1,285.0,15.30,394.72,7.85,32.20 287 | 0.01096,55.00,2.250,0,0.3890,6.4530,31.90,7.3073,1,300.0,15.30,394.72,8.23,22.00 288 | 0.01965,80.00,1.760,0,0.3850,6.2300,31.50,9.0892,1,241.0,18.20,341.60,12.93,20.10 289 | 0.03871,52.50,5.320,0,0.4050,6.2090,31.30,7.3172,6,293.0,16.60,396.90,7.14,23.20 290 | 0.04590,52.50,5.320,0,0.4050,6.3150,45.60,7.3172,6,293.0,16.60,396.90,7.60,22.30 291 | 0.04297,52.50,5.320,0,0.4050,6.5650,22.90,7.3172,6,293.0,16.60,371.72,9.51,24.80 292 | 0.03502,80.00,4.950,0,0.4110,6.8610,27.90,5.1167,4,245.0,19.20,396.90,3.33,28.50 293 | 0.07886,80.00,4.950,0,0.4110,7.1480,27.70,5.1167,4,245.0,19.20,396.90,3.56,37.30 294 | 0.03615,80.00,4.950,0,0.4110,6.6300,23.40,5.1167,4,245.0,19.20,396.90,4.70,27.90 295 | 0.08265,0.00,13.920,0,0.4370,6.1270,18.40,5.5027,4,289.0,16.00,396.90,8.58,23.90 296 | 0.08199,0.00,13.920,0,0.4370,6.0090,42.30,5.5027,4,289.0,16.00,396.90,10.40,21.70 297 | 0.12932,0.00,13.920,0,0.4370,6.6780,31.10,5.9604,4,289.0,16.00,396.90,6.27,28.60 298 | 0.05372,0.00,13.920,0,0.4370,6.5490,51.00,5.9604,4,289.0,16.00,392.85,7.39,27.10 299 | 0.14103,0.00,13.920,0,0.4370,5.7900,58.00,6.3200,4,289.0,16.00,396.90,15.84,20.30 300 | 0.06466,70.00,2.240,0,0.4000,6.3450,20.10,7.8278,5,358.0,14.80,368.24,4.97,22.50 301 | 0.05561,70.00,2.240,0,0.4000,7.0410,10.00,7.8278,5,358.0,14.80,371.58,4.74,29.00 302 | 0.04417,70.00,2.240,0,0.4000,6.8710,47.40,7.8278,5,358.0,14.80,390.86,6.07,24.80 303 | 0.03537,34.00,6.090,0,0.4330,6.5900,40.40,5.4917,7,329.0,16.10,395.75,9.50,22.00 304 | 0.09266,34.00,6.090,0,0.4330,6.4950,18.40,5.4917,7,329.0,16.10,383.61,8.67,26.40 305 | 0.10000,34.00,6.090,0,0.4330,6.9820,17.70,5.4917,7,329.0,16.10,390.43,4.86,33.10 306 | 0.05515,33.00,2.180,0,0.4720,7.2360,41.10,4.0220,7,222.0,18.40,393.68,6.93,36.10 307 | 0.05479,33.00,2.180,0,0.4720,6.6160,58.10,3.3700,7,222.0,18.40,393.36,8.93,28.40 308 | 0.07503,33.00,2.180,0,0.4720,7.4200,71.90,3.0992,7,222.0,18.40,396.90,6.47,33.40 309 | 0.04932,33.00,2.180,0,0.4720,6.8490,70.30,3.1827,7,222.0,18.40,396.90,7.53,28.20 310 | 0.49298,0.00,9.900,0,0.5440,6.6350,82.50,3.3175,4,304.0,18.40,396.90,4.54,22.80 311 | 0.34940,0.00,9.900,0,0.5440,5.9720,76.70,3.1025,4,304.0,18.40,396.24,9.97,20.30 312 | 2.63548,0.00,9.900,0,0.5440,4.9730,37.80,2.5194,4,304.0,18.40,350.45,12.64,16.10 313 | 0.79041,0.00,9.900,0,0.5440,6.1220,52.80,2.6403,4,304.0,18.40,396.90,5.98,22.10 314 | 0.26169,0.00,9.900,0,0.5440,6.0230,90.40,2.8340,4,304.0,18.40,396.30,11.72,19.40 315 | 0.26938,0.00,9.900,0,0.5440,6.2660,82.80,3.2628,4,304.0,18.40,393.39,7.90,21.60 316 | 0.36920,0.00,9.900,0,0.5440,6.5670,87.30,3.6023,4,304.0,18.40,395.69,9.28,23.80 317 | 0.25356,0.00,9.900,0,0.5440,5.7050,77.70,3.9450,4,304.0,18.40,396.42,11.50,16.20 318 | 0.31827,0.00,9.900,0,0.5440,5.9140,83.20,3.9986,4,304.0,18.40,390.70,18.33,17.80 319 | 0.24522,0.00,9.900,0,0.5440,5.7820,71.70,4.0317,4,304.0,18.40,396.90,15.94,19.80 320 | 0.40202,0.00,9.900,0,0.5440,6.3820,67.20,3.5325,4,304.0,18.40,395.21,10.36,23.10 321 | 0.47547,0.00,9.900,0,0.5440,6.1130,58.80,4.0019,4,304.0,18.40,396.23,12.73,21.00 322 | 0.16760,0.00,7.380,0,0.4930,6.4260,52.30,4.5404,5,287.0,19.60,396.90,7.20,23.80 323 | 0.18159,0.00,7.380,0,0.4930,6.3760,54.30,4.5404,5,287.0,19.60,396.90,6.87,23.10 324 | 0.35114,0.00,7.380,0,0.4930,6.0410,49.90,4.7211,5,287.0,19.60,396.90,7.70,20.40 325 | 0.28392,0.00,7.380,0,0.4930,5.7080,74.30,4.7211,5,287.0,19.60,391.13,11.74,18.50 326 | 0.34109,0.00,7.380,0,0.4930,6.4150,40.10,4.7211,5,287.0,19.60,396.90,6.12,25.00 327 | 0.19186,0.00,7.380,0,0.4930,6.4310,14.70,5.4159,5,287.0,19.60,393.68,5.08,24.60 328 | 0.30347,0.00,7.380,0,0.4930,6.3120,28.90,5.4159,5,287.0,19.60,396.90,6.15,23.00 329 | 0.24103,0.00,7.380,0,0.4930,6.0830,43.70,5.4159,5,287.0,19.60,396.90,12.79,22.20 330 | 0.06617,0.00,3.240,0,0.4600,5.8680,25.80,5.2146,4,430.0,16.90,382.44,9.97,19.30 331 | 0.06724,0.00,3.240,0,0.4600,6.3330,17.20,5.2146,4,430.0,16.90,375.21,7.34,22.60 332 | 0.04544,0.00,3.240,0,0.4600,6.1440,32.20,5.8736,4,430.0,16.90,368.57,9.09,19.80 333 | 0.05023,35.00,6.060,0,0.4379,5.7060,28.40,6.6407,1,304.0,16.90,394.02,12.43,17.10 334 | 0.03466,35.00,6.060,0,0.4379,6.0310,23.30,6.6407,1,304.0,16.90,362.25,7.83,19.40 335 | 0.05083,0.00,5.190,0,0.5150,6.3160,38.10,6.4584,5,224.0,20.20,389.71,5.68,22.20 336 | 0.03738,0.00,5.190,0,0.5150,6.3100,38.50,6.4584,5,224.0,20.20,389.40,6.75,20.70 337 | 0.03961,0.00,5.190,0,0.5150,6.0370,34.50,5.9853,5,224.0,20.20,396.90,8.01,21.10 338 | 0.03427,0.00,5.190,0,0.5150,5.8690,46.30,5.2311,5,224.0,20.20,396.90,9.80,19.50 339 | 0.03041,0.00,5.190,0,0.5150,5.8950,59.60,5.6150,5,224.0,20.20,394.81,10.56,18.50 340 | 0.03306,0.00,5.190,0,0.5150,6.0590,37.30,4.8122,5,224.0,20.20,396.14,8.51,20.60 341 | 0.05497,0.00,5.190,0,0.5150,5.9850,45.40,4.8122,5,224.0,20.20,396.90,9.74,19.00 342 | 0.06151,0.00,5.190,0,0.5150,5.9680,58.50,4.8122,5,224.0,20.20,396.90,9.29,18.70 343 | 0.01301,35.00,1.520,0,0.4420,7.2410,49.30,7.0379,1,284.0,15.50,394.74,5.49,32.70 344 | 0.02498,0.00,1.890,0,0.5180,6.5400,59.70,6.2669,1,422.0,15.90,389.96,8.65,16.50 345 | 0.02543,55.00,3.780,0,0.4840,6.6960,56.40,5.7321,5,370.0,17.60,396.90,7.18,23.90 346 | 0.03049,55.00,3.780,0,0.4840,6.8740,28.10,6.4654,5,370.0,17.60,387.97,4.61,31.20 347 | 0.03113,0.00,4.390,0,0.4420,6.0140,48.50,8.0136,3,352.0,18.80,385.64,10.53,17.50 348 | 0.06162,0.00,4.390,0,0.4420,5.8980,52.30,8.0136,3,352.0,18.80,364.61,12.67,17.20 349 | 0.01870,85.00,4.150,0,0.4290,6.5160,27.70,8.5353,4,351.0,17.90,392.43,6.36,23.10 350 | 0.01501,80.00,2.010,0,0.4350,6.6350,29.70,8.3440,4,280.0,17.00,390.94,5.99,24.50 351 | 0.02899,40.00,1.250,0,0.4290,6.9390,34.50,8.7921,1,335.0,19.70,389.85,5.89,26.60 352 | 0.06211,40.00,1.250,0,0.4290,6.4900,44.40,8.7921,1,335.0,19.70,396.90,5.98,22.90 353 | 0.07950,60.00,1.690,0,0.4110,6.5790,35.90,10.7103,4,411.0,18.30,370.78,5.49,24.10 354 | 0.07244,60.00,1.690,0,0.4110,5.8840,18.50,10.7103,4,411.0,18.30,392.33,7.79,18.60 355 | 0.01709,90.00,2.020,0,0.4100,6.7280,36.10,12.1265,5,187.0,17.00,384.46,4.50,30.10 356 | 0.04301,80.00,1.910,0,0.4130,5.6630,21.90,10.5857,4,334.0,22.00,382.80,8.05,18.20 357 | 0.10659,80.00,1.910,0,0.4130,5.9360,19.50,10.5857,4,334.0,22.00,376.04,5.57,20.60 358 | 8.98296,0.00,18.100,1,0.7700,6.2120,97.40,2.1222,24,666.0,20.20,377.73,17.60,17.80 359 | 3.84970,0.00,18.100,1,0.7700,6.3950,91.00,2.5052,24,666.0,20.20,391.34,13.27,21.70 360 | 5.20177,0.00,18.100,1,0.7700,6.1270,83.40,2.7227,24,666.0,20.20,395.43,11.48,22.70 361 | 4.26131,0.00,18.100,0,0.7700,6.1120,81.30,2.5091,24,666.0,20.20,390.74,12.67,22.60 362 | 4.54192,0.00,18.100,0,0.7700,6.3980,88.00,2.5182,24,666.0,20.20,374.56,7.79,25.00 363 | 3.83684,0.00,18.100,0,0.7700,6.2510,91.10,2.2955,24,666.0,20.20,350.65,14.19,19.90 364 | 3.67822,0.00,18.100,0,0.7700,5.3620,96.20,2.1036,24,666.0,20.20,380.79,10.19,20.80 365 | 4.22239,0.00,18.100,1,0.7700,5.8030,89.00,1.9047,24,666.0,20.20,353.04,14.64,16.80 366 | 3.47428,0.00,18.100,1,0.7180,8.7800,82.90,1.9047,24,666.0,20.20,354.55,5.29,21.90 367 | 4.55587,0.00,18.100,0,0.7180,3.5610,87.90,1.6132,24,666.0,20.20,354.70,7.12,27.50 368 | 3.69695,0.00,18.100,0,0.7180,4.9630,91.40,1.7523,24,666.0,20.20,316.03,14.00,21.90 369 | 13.52220,0.00,18.100,0,0.6310,3.8630,100.00,1.5106,24,666.0,20.20,131.42,13.33,23.10 370 | 4.89822,0.00,18.100,0,0.6310,4.9700,100.00,1.3325,24,666.0,20.20,375.52,3.26,50.00 371 | 5.66998,0.00,18.100,1,0.6310,6.6830,96.80,1.3567,24,666.0,20.20,375.33,3.73,50.00 372 | 6.53876,0.00,18.100,1,0.6310,7.0160,97.50,1.2024,24,666.0,20.20,392.05,2.96,50.00 373 | 9.23230,0.00,18.100,0,0.6310,6.2160,100.00,1.1691,24,666.0,20.20,366.15,9.53,50.00 374 | 8.26725,0.00,18.100,1,0.6680,5.8750,89.60,1.1296,24,666.0,20.20,347.88,8.88,50.00 375 | 11.10810,0.00,18.100,0,0.6680,4.9060,100.00,1.1742,24,666.0,20.20,396.90,34.77,13.80 376 | 18.49820,0.00,18.100,0,0.6680,4.1380,100.00,1.1370,24,666.0,20.20,396.90,37.97,13.80 377 | 19.60910,0.00,18.100,0,0.6710,7.3130,97.90,1.3163,24,666.0,20.20,396.90,13.44,15.00 378 | 15.28800,0.00,18.100,0,0.6710,6.6490,93.30,1.3449,24,666.0,20.20,363.02,23.24,13.90 379 | 9.82349,0.00,18.100,0,0.6710,6.7940,98.80,1.3580,24,666.0,20.20,396.90,21.24,13.30 380 | 23.64820,0.00,18.100,0,0.6710,6.3800,96.20,1.3861,24,666.0,20.20,396.90,23.69,13.10 381 | 17.86670,0.00,18.100,0,0.6710,6.2230,100.00,1.3861,24,666.0,20.20,393.74,21.78,10.20 382 | 88.97620,0.00,18.100,0,0.6710,6.9680,91.90,1.4165,24,666.0,20.20,396.90,17.21,10.40 383 | 15.87440,0.00,18.100,0,0.6710,6.5450,99.10,1.5192,24,666.0,20.20,396.90,21.08,10.90 384 | 9.18702,0.00,18.100,0,0.7000,5.5360,100.00,1.5804,24,666.0,20.20,396.90,23.60,11.30 385 | 7.99248,0.00,18.100,0,0.7000,5.5200,100.00,1.5331,24,666.0,20.20,396.90,24.56,12.30 386 | 20.08490,0.00,18.100,0,0.7000,4.3680,91.20,1.4395,24,666.0,20.20,285.83,30.63,8.80 387 | 16.81180,0.00,18.100,0,0.7000,5.2770,98.10,1.4261,24,666.0,20.20,396.90,30.81,7.20 388 | 24.39380,0.00,18.100,0,0.7000,4.6520,100.00,1.4672,24,666.0,20.20,396.90,28.28,10.50 389 | 22.59710,0.00,18.100,0,0.7000,5.0000,89.50,1.5184,24,666.0,20.20,396.90,31.99,7.40 390 | 14.33370,0.00,18.100,0,0.7000,4.8800,100.00,1.5895,24,666.0,20.20,372.92,30.62,10.20 391 | 8.15174,0.00,18.100,0,0.7000,5.3900,98.90,1.7281,24,666.0,20.20,396.90,20.85,11.50 392 | 6.96215,0.00,18.100,0,0.7000,5.7130,97.00,1.9265,24,666.0,20.20,394.43,17.11,15.10 393 | 5.29305,0.00,18.100,0,0.7000,6.0510,82.50,2.1678,24,666.0,20.20,378.38,18.76,23.20 394 | 11.57790,0.00,18.100,0,0.7000,5.0360,97.00,1.7700,24,666.0,20.20,396.90,25.68,9.70 395 | 8.64476,0.00,18.100,0,0.6930,6.1930,92.60,1.7912,24,666.0,20.20,396.90,15.17,13.80 396 | 13.35980,0.00,18.100,0,0.6930,5.8870,94.70,1.7821,24,666.0,20.20,396.90,16.35,12.70 397 | 8.71675,0.00,18.100,0,0.6930,6.4710,98.80,1.7257,24,666.0,20.20,391.98,17.12,13.10 398 | 5.87205,0.00,18.100,0,0.6930,6.4050,96.00,1.6768,24,666.0,20.20,396.90,19.37,12.50 399 | 7.67202,0.00,18.100,0,0.6930,5.7470,98.90,1.6334,24,666.0,20.20,393.10,19.92,8.50 400 | 38.35180,0.00,18.100,0,0.6930,5.4530,100.00,1.4896,24,666.0,20.20,396.90,30.59,5.00 401 | 9.91655,0.00,18.100,0,0.6930,5.8520,77.80,1.5004,24,666.0,20.20,338.16,29.97,6.30 402 | 25.04610,0.00,18.100,0,0.6930,5.9870,100.00,1.5888,24,666.0,20.20,396.90,26.77,5.60 403 | 14.23620,0.00,18.100,0,0.6930,6.3430,100.00,1.5741,24,666.0,20.20,396.90,20.32,7.20 404 | 9.59571,0.00,18.100,0,0.6930,6.4040,100.00,1.6390,24,666.0,20.20,376.11,20.31,12.10 405 | 24.80170,0.00,18.100,0,0.6930,5.3490,96.00,1.7028,24,666.0,20.20,396.90,19.77,8.30 406 | 41.52920,0.00,18.100,0,0.6930,5.5310,85.40,1.6074,24,666.0,20.20,329.46,27.38,8.50 407 | 67.92080,0.00,18.100,0,0.6930,5.6830,100.00,1.4254,24,666.0,20.20,384.97,22.98,5.00 408 | 20.71620,0.00,18.100,0,0.6590,4.1380,100.00,1.1781,24,666.0,20.20,370.22,23.34,11.90 409 | 11.95110,0.00,18.100,0,0.6590,5.6080,100.00,1.2852,24,666.0,20.20,332.09,12.13,27.90 410 | 7.40389,0.00,18.100,0,0.5970,5.6170,97.90,1.4547,24,666.0,20.20,314.64,26.40,17.20 411 | 14.43830,0.00,18.100,0,0.5970,6.8520,100.00,1.4655,24,666.0,20.20,179.36,19.78,27.50 412 | 51.13580,0.00,18.100,0,0.5970,5.7570,100.00,1.4130,24,666.0,20.20,2.60,10.11,15.00 413 | 14.05070,0.00,18.100,0,0.5970,6.6570,100.00,1.5275,24,666.0,20.20,35.05,21.22,17.20 414 | 18.81100,0.00,18.100,0,0.5970,4.6280,100.00,1.5539,24,666.0,20.20,28.79,34.37,17.90 415 | 28.65580,0.00,18.100,0,0.5970,5.1550,100.00,1.5894,24,666.0,20.20,210.97,20.08,16.30 416 | 45.74610,0.00,18.100,0,0.6930,4.5190,100.00,1.6582,24,666.0,20.20,88.27,36.98,7.00 417 | 18.08460,0.00,18.100,0,0.6790,6.4340,100.00,1.8347,24,666.0,20.20,27.25,29.05,7.20 418 | 10.83420,0.00,18.100,0,0.6790,6.7820,90.80,1.8195,24,666.0,20.20,21.57,25.79,7.50 419 | 25.94060,0.00,18.100,0,0.6790,5.3040,89.10,1.6475,24,666.0,20.20,127.36,26.64,10.40 420 | 73.53410,0.00,18.100,0,0.6790,5.9570,100.00,1.8026,24,666.0,20.20,16.45,20.62,8.80 421 | 11.81230,0.00,18.100,0,0.7180,6.8240,76.50,1.7940,24,666.0,20.20,48.45,22.74,8.40 422 | 11.08740,0.00,18.100,0,0.7180,6.4110,100.00,1.8589,24,666.0,20.20,318.75,15.02,16.70 423 | 7.02259,0.00,18.100,0,0.7180,6.0060,95.30,1.8746,24,666.0,20.20,319.98,15.70,14.20 424 | 12.04820,0.00,18.100,0,0.6140,5.6480,87.60,1.9512,24,666.0,20.20,291.55,14.10,20.80 425 | 7.05042,0.00,18.100,0,0.6140,6.1030,85.10,2.0218,24,666.0,20.20,2.52,23.29,13.40 426 | 8.79212,0.00,18.100,0,0.5840,5.5650,70.60,2.0635,24,666.0,20.20,3.65,17.16,11.70 427 | 15.86030,0.00,18.100,0,0.6790,5.8960,95.40,1.9096,24,666.0,20.20,7.68,24.39,8.30 428 | 12.24720,0.00,18.100,0,0.5840,5.8370,59.70,1.9976,24,666.0,20.20,24.65,15.69,10.20 429 | 37.66190,0.00,18.100,0,0.6790,6.2020,78.70,1.8629,24,666.0,20.20,18.82,14.52,10.90 430 | 7.36711,0.00,18.100,0,0.6790,6.1930,78.10,1.9356,24,666.0,20.20,96.73,21.52,11.00 431 | 9.33889,0.00,18.100,0,0.6790,6.3800,95.60,1.9682,24,666.0,20.20,60.72,24.08,9.50 432 | 8.49213,0.00,18.100,0,0.5840,6.3480,86.10,2.0527,24,666.0,20.20,83.45,17.64,14.50 433 | 10.06230,0.00,18.100,0,0.5840,6.8330,94.30,2.0882,24,666.0,20.20,81.33,19.69,14.10 434 | 6.44405,0.00,18.100,0,0.5840,6.4250,74.80,2.2004,24,666.0,20.20,97.95,12.03,16.10 435 | 5.58107,0.00,18.100,0,0.7130,6.4360,87.90,2.3158,24,666.0,20.20,100.19,16.22,14.30 436 | 13.91340,0.00,18.100,0,0.7130,6.2080,95.00,2.2222,24,666.0,20.20,100.63,15.17,11.70 437 | 11.16040,0.00,18.100,0,0.7400,6.6290,94.60,2.1247,24,666.0,20.20,109.85,23.27,13.40 438 | 14.42080,0.00,18.100,0,0.7400,6.4610,93.30,2.0026,24,666.0,20.20,27.49,18.05,9.60 439 | 15.17720,0.00,18.100,0,0.7400,6.1520,100.00,1.9142,24,666.0,20.20,9.32,26.45,8.70 440 | 13.67810,0.00,18.100,0,0.7400,5.9350,87.90,1.8206,24,666.0,20.20,68.95,34.02,8.40 441 | 9.39063,0.00,18.100,0,0.7400,5.6270,93.90,1.8172,24,666.0,20.20,396.90,22.88,12.80 442 | 22.05110,0.00,18.100,0,0.7400,5.8180,92.40,1.8662,24,666.0,20.20,391.45,22.11,10.50 443 | 9.72418,0.00,18.100,0,0.7400,6.4060,97.20,2.0651,24,666.0,20.20,385.96,19.52,17.10 444 | 5.66637,0.00,18.100,0,0.7400,6.2190,100.00,2.0048,24,666.0,20.20,395.69,16.59,18.40 445 | 9.96654,0.00,18.100,0,0.7400,6.4850,100.00,1.9784,24,666.0,20.20,386.73,18.85,15.40 446 | 12.80230,0.00,18.100,0,0.7400,5.8540,96.60,1.8956,24,666.0,20.20,240.52,23.79,10.80 447 | 10.67180,0.00,18.100,0,0.7400,6.4590,94.80,1.9879,24,666.0,20.20,43.06,23.98,11.80 448 | 6.28807,0.00,18.100,0,0.7400,6.3410,96.40,2.0720,24,666.0,20.20,318.01,17.79,14.90 449 | 9.92485,0.00,18.100,0,0.7400,6.2510,96.60,2.1980,24,666.0,20.20,388.52,16.44,12.60 450 | 9.32909,0.00,18.100,0,0.7130,6.1850,98.70,2.2616,24,666.0,20.20,396.90,18.13,14.10 451 | 7.52601,0.00,18.100,0,0.7130,6.4170,98.30,2.1850,24,666.0,20.20,304.21,19.31,13.00 452 | 6.71772,0.00,18.100,0,0.7130,6.7490,92.60,2.3236,24,666.0,20.20,0.32,17.44,13.40 453 | 5.44114,0.00,18.100,0,0.7130,6.6550,98.20,2.3552,24,666.0,20.20,355.29,17.73,15.20 454 | 5.09017,0.00,18.100,0,0.7130,6.2970,91.80,2.3682,24,666.0,20.20,385.09,17.27,16.10 455 | 8.24809,0.00,18.100,0,0.7130,7.3930,99.30,2.4527,24,666.0,20.20,375.87,16.74,17.80 456 | 9.51363,0.00,18.100,0,0.7130,6.7280,94.10,2.4961,24,666.0,20.20,6.68,18.71,14.90 457 | 4.75237,0.00,18.100,0,0.7130,6.5250,86.50,2.4358,24,666.0,20.20,50.92,18.13,14.10 458 | 4.66883,0.00,18.100,0,0.7130,5.9760,87.90,2.5806,24,666.0,20.20,10.48,19.01,12.70 459 | 8.20058,0.00,18.100,0,0.7130,5.9360,80.30,2.7792,24,666.0,20.20,3.50,16.94,13.50 460 | 7.75223,0.00,18.100,0,0.7130,6.3010,83.70,2.7831,24,666.0,20.20,272.21,16.23,14.90 461 | 6.80117,0.00,18.100,0,0.7130,6.0810,84.40,2.7175,24,666.0,20.20,396.90,14.70,20.00 462 | 4.81213,0.00,18.100,0,0.7130,6.7010,90.00,2.5975,24,666.0,20.20,255.23,16.42,16.40 463 | 3.69311,0.00,18.100,0,0.7130,6.3760,88.40,2.5671,24,666.0,20.20,391.43,14.65,17.70 464 | 6.65492,0.00,18.100,0,0.7130,6.3170,83.00,2.7344,24,666.0,20.20,396.90,13.99,19.50 465 | 5.82115,0.00,18.100,0,0.7130,6.5130,89.90,2.8016,24,666.0,20.20,393.82,10.29,20.20 466 | 7.83932,0.00,18.100,0,0.6550,6.2090,65.40,2.9634,24,666.0,20.20,396.90,13.22,21.40 467 | 3.16360,0.00,18.100,0,0.6550,5.7590,48.20,3.0665,24,666.0,20.20,334.40,14.13,19.90 468 | 3.77498,0.00,18.100,0,0.6550,5.9520,84.70,2.8715,24,666.0,20.20,22.01,17.15,19.00 469 | 4.42228,0.00,18.100,0,0.5840,6.0030,94.50,2.5403,24,666.0,20.20,331.29,21.32,19.10 470 | 15.57570,0.00,18.100,0,0.5800,5.9260,71.00,2.9084,24,666.0,20.20,368.74,18.13,19.10 471 | 13.07510,0.00,18.100,0,0.5800,5.7130,56.70,2.8237,24,666.0,20.20,396.90,14.76,20.10 472 | 4.34879,0.00,18.100,0,0.5800,6.1670,84.00,3.0334,24,666.0,20.20,396.90,16.29,19.90 473 | 4.03841,0.00,18.100,0,0.5320,6.2290,90.70,3.0993,24,666.0,20.20,395.33,12.87,19.60 474 | 3.56868,0.00,18.100,0,0.5800,6.4370,75.00,2.8965,24,666.0,20.20,393.37,14.36,23.20 475 | 4.64689,0.00,18.100,0,0.6140,6.9800,67.60,2.5329,24,666.0,20.20,374.68,11.66,29.80 476 | 8.05579,0.00,18.100,0,0.5840,5.4270,95.40,2.4298,24,666.0,20.20,352.58,18.14,13.80 477 | 6.39312,0.00,18.100,0,0.5840,6.1620,97.40,2.2060,24,666.0,20.20,302.76,24.10,13.30 478 | 4.87141,0.00,18.100,0,0.6140,6.4840,93.60,2.3053,24,666.0,20.20,396.21,18.68,16.70 479 | 15.02340,0.00,18.100,0,0.6140,5.3040,97.30,2.1007,24,666.0,20.20,349.48,24.91,12.00 480 | 10.23300,0.00,18.100,0,0.6140,6.1850,96.70,2.1705,24,666.0,20.20,379.70,18.03,14.60 481 | 14.33370,0.00,18.100,0,0.6140,6.2290,88.00,1.9512,24,666.0,20.20,383.32,13.11,21.40 482 | 5.82401,0.00,18.100,0,0.5320,6.2420,64.70,3.4242,24,666.0,20.20,396.90,10.74,23.00 483 | 5.70818,0.00,18.100,0,0.5320,6.7500,74.90,3.3317,24,666.0,20.20,393.07,7.74,23.70 484 | 5.73116,0.00,18.100,0,0.5320,7.0610,77.00,3.4106,24,666.0,20.20,395.28,7.01,25.00 485 | 2.81838,0.00,18.100,0,0.5320,5.7620,40.30,4.0983,24,666.0,20.20,392.92,10.42,21.80 486 | 2.37857,0.00,18.100,0,0.5830,5.8710,41.90,3.7240,24,666.0,20.20,370.73,13.34,20.60 487 | 3.67367,0.00,18.100,0,0.5830,6.3120,51.90,3.9917,24,666.0,20.20,388.62,10.58,21.20 488 | 5.69175,0.00,18.100,0,0.5830,6.1140,79.80,3.5459,24,666.0,20.20,392.68,14.98,19.10 489 | 4.83567,0.00,18.100,0,0.5830,5.9050,53.20,3.1523,24,666.0,20.20,388.22,11.45,20.60 490 | 0.15086,0.00,27.740,0,0.6090,5.4540,92.70,1.8209,4,711.0,20.10,395.09,18.06,15.20 491 | 0.18337,0.00,27.740,0,0.6090,5.4140,98.30,1.7554,4,711.0,20.10,344.05,23.97,7.00 492 | 0.20746,0.00,27.740,0,0.6090,5.0930,98.00,1.8226,4,711.0,20.10,318.43,29.68,8.10 493 | 0.10574,0.00,27.740,0,0.6090,5.9830,98.80,1.8681,4,711.0,20.10,390.11,18.07,13.60 494 | 0.11132,0.00,27.740,0,0.6090,5.9830,83.50,2.1099,4,711.0,20.10,396.90,13.35,20.10 495 | 0.17331,0.00,9.690,0,0.5850,5.7070,54.00,2.3817,6,391.0,19.20,396.90,12.01,21.80 496 | 0.27957,0.00,9.690,0,0.5850,5.9260,42.60,2.3817,6,391.0,19.20,396.90,13.59,24.50 497 | 0.17899,0.00,9.690,0,0.5850,5.6700,28.80,2.7986,6,391.0,19.20,393.29,17.60,23.10 498 | 0.28960,0.00,9.690,0,0.5850,5.3900,72.90,2.7986,6,391.0,19.20,396.90,21.14,19.70 499 | 0.26838,0.00,9.690,0,0.5850,5.7940,70.60,2.8927,6,391.0,19.20,396.90,14.10,18.30 500 | 0.23912,0.00,9.690,0,0.5850,6.0190,65.30,2.4091,6,391.0,19.20,396.90,12.92,21.20 501 | 0.17783,0.00,9.690,0,0.5850,5.5690,73.50,2.3999,6,391.0,19.20,395.77,15.10,17.50 502 | 0.22438,0.00,9.690,0,0.5850,6.0270,79.70,2.4982,6,391.0,19.20,396.90,14.33,16.80 503 | 0.06263,0.00,11.930,0,0.5730,6.5930,69.10,2.4786,1,273.0,21.00,391.99,9.67,22.40 504 | 0.04527,0.00,11.930,0,0.5730,6.1200,76.70,2.2875,1,273.0,21.00,396.90,9.08,20.60 505 | 0.06076,0.00,11.930,0,0.5730,6.9760,91.00,2.1675,1,273.0,21.00,396.90,5.64,23.90 506 | 0.10959,0.00,11.930,0,0.5730,6.7940,89.30,2.3889,1,273.0,21.00,393.45,6.48,22.00 507 | 0.04741,0.00,11.930,0,0.5730,6.0300,80.80,2.5050,1,273.0,21.00,396.90,7.88,11.90 508 | -------------------------------------------------------------------------------- /table_data/world_gdp_data.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Animadversio/GPT-Auto-Data-Analytics/7aeb2d505c2ee152da1d515813dcc30f76a057a8/table_data/world_gdp_data.csv --------------------------------------------------------------------------------