├── .gitignore ├── README.md ├── data ├── create_tables.py ├── passenger_demographic.csv ├── passenger_labels.csv ├── passenger_ticket.csv └── st_create_tables.py ├── delta_table_setup.py ├── fit_model.py ├── img ├── dbeaver_mysql.png ├── feature_store_architecture.drawio ├── feature_store_architecture.png ├── feature_store_ui.png ├── model_api.png ├── model_registry_ui.png ├── online_store_architecture.drawio └── online_store_architecture.png ├── model_inference.py ├── online_store ├── README.md ├── fit_model.py ├── publish_to_rds.py └── terraform │ ├── provider.tf │ ├── rds.tf │ └── vars.tf ├── passenger_demographic_features.py └── passenger_ticket_features.py.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | 4 | # Terraform 5 | .terraform/ 6 | .terraform* 7 | terraform.tfstate 8 | terraform.tfstate.backup 9 | terraform.tfvars 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Databricks Feature Store example project 2 | 3 | This Databricks [Repo](https://docs.databricks.com/repos.html) provides an example [Feature Store](https://docs.databricks.com/applications/machine-learning/feature-store/index.html) workflow based on the titanic dataset. The dataset is split into two domain specific tables: features based on purchases and demographic information. Machine learning features are typically sourced from many underlying tables/sources, and this simple workflow is designed to mimic this characteristic. 4 | 5 | Also, by creating domain-specific feature sets, tables become more modular and can be leveraged across multiple projects and across teams. 6 | 7 | **Note**: If you require model deployment via Rest API, see the **online_store** directory for a demo deployment. 8 | 9 | 12 | 13 | ## Getting started 14 | 15 | Note: Step 3 below differs slightly for AWS Single Tenant customers. 16 | 17 | 1. Clone this repository into a Databricks Repo 18 | 19 | 2. Provision a Databricks Cluster with an [ML Runtime](https://docs.databricks.com/runtime/mlruntime.html). This project was developed using runtime 10.3 ML. 20 | 21 | 22 | 3. Run the **delta_table_setup** notebook to create the source tables used for feature generation. 23 | - This notebook uses [arbitrary file support](https://docs.databricks.com/repos.html#work-with-non-notebook-files-in-a-databricks-repo) by referencing a function stored in a .py file. Also, note the use of [ipython autoloading](https://ipython.org/ipython-doc/3/config/extensions/autoreload.html) for rapid development of functions and classes. 24 | - Arbitrary files are not support for AWS Single Tenant customers, though this project will still run with minor alterations. 25 | - Clone the repository to your local machine. Then, select the Data tab on the left hand pane of the Databricks UI. Choose DBFS and upload the three .csv files to a directory of your choosing. 26 | 27 | - Instead of running the delta_table_setup notebook, which relies on a .py file, run the **st_create_tables** Notebook in the data folder of the Databricks Repo. Be sure to alter the 'dbfs_file_locations' variable to match the directories you chose during file upload to DBFS. 28 | 29 | 30 | 4. Run the **passenger_demographic_features** and **passenter_ticket_features** notebooks to create and populate the two feature store tables. 31 | - Navitate to the Feature Store icon on the left pane of the Databricks UI. There will be two entries, one for each feature table. 32 | 33 | 34 | 5. Run the **fit_model** notebook, which will perform the following tasks. 35 | - Create an MLflow experiment 36 | - Create a training dataset by joining the two Feature Store tables 37 | - Fit a model to the training dataset 38 | - Log the model and the training dataset creation logic to the MLflow experiment 39 | - Create an entry for the model in the Model Registry 40 | - Promote the model to the 'Production' stage 41 | 42 | 43 | 6. Run the **model_inference** notebook, which will perform the following tasks. 44 | - Create a sample DataFrame of new record ids to score 45 | - Create a helper function that given a model name and stage, will load the model's unique id 46 | - Apply the model to the record ids. MLflow joins the relevent features to the record ids before applying the model and generating a prediction. 47 | -------------------------------------------------------------------------------- /data/create_tables.py: -------------------------------------------------------------------------------- 1 | from pyspark.sql import SparkSession 2 | from pyspark.sql.types import StructType, DoubleType, IntegerType, StringType 3 | import pandas as pd 4 | 5 | spark = SparkSession.builder.getOrCreate() 6 | 7 | def create_tables(): 8 | 9 | # Create Spark DataFrame schemas 10 | passenger_ticket_types = [('PassengerId', StringType()), 11 | ('Ticket', StringType()), 12 | ('Fare', DoubleType()), 13 | ('Cabin', StringType()), 14 | ('Embarked', StringType()), 15 | ('Pclass', StringType()), 16 | ('Parch', StringType())] 17 | 18 | passenger_demographic_types = [('PassengerId',StringType()), 19 | ('Name', StringType()), 20 | ('Sex', StringType()), 21 | ('Age', DoubleType()), 22 | ('SibSp', StringType())] 23 | 24 | passenger_label_types = [('PassengerId',StringType()), 25 | ('Survived', IntegerType())] 26 | 27 | 28 | def create_schema(col_types): 29 | struct = StructType() 30 | for col_name, type in col_types: 31 | struct.add(col_name, type) 32 | return struct 33 | 34 | passenger_ticket_schema = create_schema(passenger_ticket_types) 35 | passenger_dempgraphic_schema = create_schema(passenger_demographic_types) 36 | passenger_label_schema = create_schema(passenger_label_types) 37 | 38 | 39 | def create_pd_dataframe(csv_file_path, schema): 40 | df = pd.read_csv(csv_file_path) 41 | return spark.createDataFrame(df, schema = schema) 42 | 43 | 44 | passenger_ticket_features = create_pd_dataframe('data/passenger_ticket.csv', passenger_ticket_schema) 45 | passenger_demographic_features = create_pd_dataframe('data/passenger_demographic.csv', passenger_dempgraphic_schema) 46 | passenger_labels = create_pd_dataframe('data/passenger_labels.csv', passenger_label_schema) 47 | 48 | 49 | def write_to_delta(spark_df, delta_table_name): 50 | spark_df.write.mode('overwrite').format('delta').saveAsTable(delta_table_name) 51 | 52 | delta_tables = {"ticket": "default.passenger_ticket_feautures", 53 | "demographic": "default.passenger_demographic_features", 54 | "labels": "default.passenger_labels"} 55 | 56 | write_to_delta(passenger_ticket_features, delta_tables['ticket']) 57 | write_to_delta(passenger_demographic_features, delta_tables['demographic']) 58 | write_to_delta(passenger_labels, delta_tables['labels']) 59 | 60 | 61 | out = f"""The following tables were created: 62 | - {delta_tables['ticket']} 63 | - {delta_tables['demographic']} 64 | - {delta_tables['labels']} 65 | """ 66 | 67 | print(out) -------------------------------------------------------------------------------- /data/passenger_demographic.csv: -------------------------------------------------------------------------------- 1 | PassengerId,Name,Sex,Age,SibSp 2 | 1,"Braund, Mr. Owen Harris",male,22.0,1 3 | 2,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38.0,1 4 | 3,"Heikkinen, Miss. Laina",female,26.0,0 5 | 4,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35.0,1 6 | 5,"Allen, Mr. William Henry",male,35.0,0 7 | 6,"Moran, Mr. James",male,,0 8 | 7,"McCarthy, Mr. Timothy J",male,54.0,0 9 | 8,"Palsson, Master. Gosta Leonard",male,2.0,3 10 | 9,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27.0,0 11 | 10,"Nasser, Mrs. Nicholas (Adele Achem)",female,14.0,1 12 | 11,"Sandstrom, Miss. Marguerite Rut",female,4.0,1 13 | 12,"Bonnell, Miss. Elizabeth",female,58.0,0 14 | 13,"Saundercock, Mr. William Henry",male,20.0,0 15 | 14,"Andersson, Mr. Anders Johan",male,39.0,1 16 | 15,"Vestrom, Miss. Hulda Amanda Adolfina",female,14.0,0 17 | 16,"Hewlett, Mrs. (Mary D Kingcome) ",female,55.0,0 18 | 17,"Rice, Master. Eugene",male,2.0,4 19 | 18,"Williams, Mr. Charles Eugene",male,,0 20 | 19,"Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)",female,31.0,1 21 | 20,"Masselmani, Mrs. Fatima",female,,0 22 | 21,"Fynney, Mr. Joseph J",male,35.0,0 23 | 22,"Beesley, Mr. Lawrence",male,34.0,0 24 | 23,"McGowan, Miss. Anna ""Annie""",female,15.0,0 25 | 24,"Sloper, Mr. William Thompson",male,28.0,0 26 | 25,"Palsson, Miss. Torborg Danira",female,8.0,3 27 | 26,"Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)",female,38.0,1 28 | 27,"Emir, Mr. Farred Chehab",male,,0 29 | 28,"Fortune, Mr. Charles Alexander",male,19.0,3 30 | 29,"O'Dwyer, Miss. Ellen ""Nellie""",female,,0 31 | 30,"Todoroff, Mr. Lalio",male,,0 32 | 31,"Uruchurtu, Don. Manuel E",male,40.0,0 33 | 32,"Spencer, Mrs. William Augustus (Marie Eugenie)",female,,1 34 | 33,"Glynn, Miss. Mary Agatha",female,,0 35 | 34,"Wheadon, Mr. Edward H",male,66.0,0 36 | 35,"Meyer, Mr. Edgar Joseph",male,28.0,1 37 | 36,"Holverson, Mr. Alexander Oskar",male,42.0,1 38 | 37,"Mamee, Mr. Hanna",male,,0 39 | 38,"Cann, Mr. Ernest Charles",male,21.0,0 40 | 39,"Vander Planke, Miss. Augusta Maria",female,18.0,2 41 | 40,"Nicola-Yarred, Miss. Jamila",female,14.0,1 42 | 41,"Ahlin, Mrs. Johan (Johanna Persdotter Larsson)",female,40.0,1 43 | 42,"Turpin, Mrs. William John Robert (Dorothy Ann Wonnacott)",female,27.0,1 44 | 43,"Kraeff, Mr. Theodor",male,,0 45 | 44,"Laroche, Miss. Simonne Marie Anne Andree",female,3.0,1 46 | 45,"Devaney, Miss. Margaret Delia",female,19.0,0 47 | 46,"Rogers, Mr. William John",male,,0 48 | 47,"Lennon, Mr. Denis",male,,1 49 | 48,"O'Driscoll, Miss. Bridget",female,,0 50 | 49,"Samaan, Mr. Youssef",male,,2 51 | 50,"Arnold-Franchi, Mrs. Josef (Josefine Franchi)",female,18.0,1 52 | 51,"Panula, Master. Juha Niilo",male,7.0,4 53 | 52,"Nosworthy, Mr. Richard Cater",male,21.0,0 54 | 53,"Harper, Mrs. Henry Sleeper (Myna Haxtun)",female,49.0,1 55 | 54,"Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson)",female,29.0,1 56 | 55,"Ostby, Mr. Engelhart Cornelius",male,65.0,0 57 | 56,"Woolner, Mr. Hugh",male,,0 58 | 57,"Rugg, Miss. Emily",female,21.0,0 59 | 58,"Novel, Mr. Mansouer",male,28.5,0 60 | 59,"West, Miss. Constance Mirium",female,5.0,1 61 | 60,"Goodwin, Master. William Frederick",male,11.0,5 62 | 61,"Sirayanian, Mr. Orsen",male,22.0,0 63 | 62,"Icard, Miss. Amelie",female,38.0,0 64 | 63,"Harris, Mr. Henry Birkhardt",male,45.0,1 65 | 64,"Skoog, Master. Harald",male,4.0,3 66 | 65,"Stewart, Mr. Albert A",male,,0 67 | 66,"Moubarek, Master. Gerios",male,,1 68 | 67,"Nye, Mrs. (Elizabeth Ramell)",female,29.0,0 69 | 68,"Crease, Mr. Ernest James",male,19.0,0 70 | 69,"Andersson, Miss. Erna Alexandra",female,17.0,4 71 | 70,"Kink, Mr. Vincenz",male,26.0,2 72 | 71,"Jenkin, Mr. Stephen Curnow",male,32.0,0 73 | 72,"Goodwin, Miss. Lillian Amy",female,16.0,5 74 | 73,"Hood, Mr. Ambrose Jr",male,21.0,0 75 | 74,"Chronopoulos, Mr. Apostolos",male,26.0,1 76 | 75,"Bing, Mr. Lee",male,32.0,0 77 | 76,"Moen, Mr. Sigurd Hansen",male,25.0,0 78 | 77,"Staneff, Mr. Ivan",male,,0 79 | 78,"Moutal, Mr. Rahamin Haim",male,,0 80 | 79,"Caldwell, Master. Alden Gates",male,0.83,0 81 | 80,"Dowdell, Miss. Elizabeth",female,30.0,0 82 | 81,"Waelens, Mr. Achille",male,22.0,0 83 | 82,"Sheerlinck, Mr. Jan Baptist",male,29.0,0 84 | 83,"McDermott, Miss. Brigdet Delia",female,,0 85 | 84,"Carrau, Mr. Francisco M",male,28.0,0 86 | 85,"Ilett, Miss. Bertha",female,17.0,0 87 | 86,"Backstrom, Mrs. Karl Alfred (Maria Mathilda Gustafsson)",female,33.0,3 88 | 87,"Ford, Mr. William Neal",male,16.0,1 89 | 88,"Slocovski, Mr. Selman Francis",male,,0 90 | 89,"Fortune, Miss. Mabel Helen",female,23.0,3 91 | 90,"Celotti, Mr. Francesco",male,24.0,0 92 | 91,"Christmann, Mr. Emil",male,29.0,0 93 | 92,"Andreasson, Mr. Paul Edvin",male,20.0,0 94 | 93,"Chaffee, Mr. Herbert Fuller",male,46.0,1 95 | 94,"Dean, Mr. Bertram Frank",male,26.0,1 96 | 95,"Coxon, Mr. Daniel",male,59.0,0 97 | 96,"Shorney, Mr. Charles Joseph",male,,0 98 | 97,"Goldschmidt, Mr. George B",male,71.0,0 99 | 98,"Greenfield, Mr. William Bertram",male,23.0,0 100 | 99,"Doling, Mrs. John T (Ada Julia Bone)",female,34.0,0 101 | 100,"Kantor, Mr. Sinai",male,34.0,1 102 | 101,"Petranec, Miss. Matilda",female,28.0,0 103 | 102,"Petroff, Mr. Pastcho (""Pentcho"")",male,,0 104 | 103,"White, Mr. Richard Frasar",male,21.0,0 105 | 104,"Johansson, Mr. Gustaf Joel",male,33.0,0 106 | 105,"Gustafsson, Mr. Anders Vilhelm",male,37.0,2 107 | 106,"Mionoff, Mr. Stoytcho",male,28.0,0 108 | 107,"Salkjelsvik, Miss. Anna Kristine",female,21.0,0 109 | 108,"Moss, Mr. Albert Johan",male,,0 110 | 109,"Rekic, Mr. Tido",male,38.0,0 111 | 110,"Moran, Miss. Bertha",female,,1 112 | 111,"Porter, Mr. Walter Chamberlain",male,47.0,0 113 | 112,"Zabour, Miss. Hileni",female,14.5,1 114 | 113,"Barton, Mr. David John",male,22.0,0 115 | 114,"Jussila, Miss. Katriina",female,20.0,1 116 | 115,"Attalah, Miss. Malake",female,17.0,0 117 | 116,"Pekoniemi, Mr. Edvard",male,21.0,0 118 | 117,"Connors, Mr. Patrick",male,70.5,0 119 | 118,"Turpin, Mr. William John Robert",male,29.0,1 120 | 119,"Baxter, Mr. Quigg Edmond",male,24.0,0 121 | 120,"Andersson, Miss. Ellis Anna Maria",female,2.0,4 122 | 121,"Hickman, Mr. Stanley George",male,21.0,2 123 | 122,"Moore, Mr. Leonard Charles",male,,0 124 | 123,"Nasser, Mr. Nicholas",male,32.5,1 125 | 124,"Webber, Miss. Susan",female,32.5,0 126 | 125,"White, Mr. Percival Wayland",male,54.0,0 127 | 126,"Nicola-Yarred, Master. Elias",male,12.0,1 128 | 127,"McMahon, Mr. Martin",male,,0 129 | 128,"Madsen, Mr. Fridtjof Arne",male,24.0,0 130 | 129,"Peter, Miss. Anna",female,,1 131 | 130,"Ekstrom, Mr. Johan",male,45.0,0 132 | 131,"Drazenoic, Mr. Jozef",male,33.0,0 133 | 132,"Coelho, Mr. Domingos Fernandeo",male,20.0,0 134 | 133,"Robins, Mrs. Alexander A (Grace Charity Laury)",female,47.0,1 135 | 134,"Weisz, Mrs. Leopold (Mathilde Francoise Pede)",female,29.0,1 136 | 135,"Sobey, Mr. Samuel James Hayden",male,25.0,0 137 | 136,"Richard, Mr. Emile",male,23.0,0 138 | 137,"Newsom, Miss. Helen Monypeny",female,19.0,0 139 | 138,"Futrelle, Mr. Jacques Heath",male,37.0,1 140 | 139,"Osen, Mr. Olaf Elon",male,16.0,0 141 | 140,"Giglio, Mr. Victor",male,24.0,0 142 | 141,"Boulos, Mrs. Joseph (Sultana)",female,,0 143 | 142,"Nysten, Miss. Anna Sofia",female,22.0,0 144 | 143,"Hakkarainen, Mrs. Pekka Pietari (Elin Matilda Dolck)",female,24.0,1 145 | 144,"Burke, Mr. Jeremiah",male,19.0,0 146 | 145,"Andrew, Mr. Edgardo Samuel",male,18.0,0 147 | 146,"Nicholls, Mr. Joseph Charles",male,19.0,1 148 | 147,"Andersson, Mr. August Edvard (""Wennerstrom"")",male,27.0,0 149 | 148,"Ford, Miss. Robina Maggie ""Ruby""",female,9.0,2 150 | 149,"Navratil, Mr. Michel (""Louis M Hoffman"")",male,36.5,0 151 | 150,"Byles, Rev. Thomas Roussel Davids",male,42.0,0 152 | 151,"Bateman, Rev. Robert James",male,51.0,0 153 | 152,"Pears, Mrs. Thomas (Edith Wearne)",female,22.0,1 154 | 153,"Meo, Mr. Alfonzo",male,55.5,0 155 | 154,"van Billiard, Mr. Austin Blyler",male,40.5,0 156 | 155,"Olsen, Mr. Ole Martin",male,,0 157 | 156,"Williams, Mr. Charles Duane",male,51.0,0 158 | 157,"Gilnagh, Miss. Katherine ""Katie""",female,16.0,0 159 | 158,"Corn, Mr. Harry",male,30.0,0 160 | 159,"Smiljanic, Mr. Mile",male,,0 161 | 160,"Sage, Master. Thomas Henry",male,,8 162 | 161,"Cribb, Mr. John Hatfield",male,44.0,0 163 | 162,"Watt, Mrs. James (Elizabeth ""Bessie"" Inglis Milne)",female,40.0,0 164 | 163,"Bengtsson, Mr. John Viktor",male,26.0,0 165 | 164,"Calic, Mr. Jovo",male,17.0,0 166 | 165,"Panula, Master. Eino Viljami",male,1.0,4 167 | 166,"Goldsmith, Master. Frank John William ""Frankie""",male,9.0,0 168 | 167,"Chibnall, Mrs. (Edith Martha Bowerman)",female,,0 169 | 168,"Skoog, Mrs. William (Anna Bernhardina Karlsson)",female,45.0,1 170 | 169,"Baumann, Mr. John D",male,,0 171 | 170,"Ling, Mr. Lee",male,28.0,0 172 | 171,"Van der hoef, Mr. Wyckoff",male,61.0,0 173 | 172,"Rice, Master. Arthur",male,4.0,4 174 | 173,"Johnson, Miss. Eleanor Ileen",female,1.0,1 175 | 174,"Sivola, Mr. Antti Wilhelm",male,21.0,0 176 | 175,"Smith, Mr. James Clinch",male,56.0,0 177 | 176,"Klasen, Mr. Klas Albin",male,18.0,1 178 | 177,"Lefebre, Master. Henry Forbes",male,,3 179 | 178,"Isham, Miss. Ann Elizabeth",female,50.0,0 180 | 179,"Hale, Mr. Reginald",male,30.0,0 181 | 180,"Leonard, Mr. Lionel",male,36.0,0 182 | 181,"Sage, Miss. Constance Gladys",female,,8 183 | 182,"Pernot, Mr. Rene",male,,0 184 | 183,"Asplund, Master. Clarence Gustaf Hugo",male,9.0,4 185 | 184,"Becker, Master. Richard F",male,1.0,2 186 | 185,"Kink-Heilmann, Miss. Luise Gretchen",female,4.0,0 187 | 186,"Rood, Mr. Hugh Roscoe",male,,0 188 | 187,"O'Brien, Mrs. Thomas (Johanna ""Hannah"" Godfrey)",female,,1 189 | 188,"Romaine, Mr. Charles Hallace (""Mr C Rolmane"")",male,45.0,0 190 | 189,"Bourke, Mr. John",male,40.0,1 191 | 190,"Turcin, Mr. Stjepan",male,36.0,0 192 | 191,"Pinsky, Mrs. (Rosa)",female,32.0,0 193 | 192,"Carbines, Mr. William",male,19.0,0 194 | 193,"Andersen-Jensen, Miss. Carla Christine Nielsine",female,19.0,1 195 | 194,"Navratil, Master. Michel M",male,3.0,1 196 | 195,"Brown, Mrs. James Joseph (Margaret Tobin)",female,44.0,0 197 | 196,"Lurette, Miss. Elise",female,58.0,0 198 | 197,"Mernagh, Mr. Robert",male,,0 199 | 198,"Olsen, Mr. Karl Siegwart Andreas",male,42.0,0 200 | 199,"Madigan, Miss. Margaret ""Maggie""",female,,0 201 | 200,"Yrois, Miss. Henriette (""Mrs Harbeck"")",female,24.0,0 202 | 201,"Vande Walle, Mr. Nestor Cyriel",male,28.0,0 203 | 202,"Sage, Mr. Frederick",male,,8 204 | 203,"Johanson, Mr. Jakob Alfred",male,34.0,0 205 | 204,"Youseff, Mr. Gerious",male,45.5,0 206 | 205,"Cohen, Mr. Gurshon ""Gus""",male,18.0,0 207 | 206,"Strom, Miss. Telma Matilda",female,2.0,0 208 | 207,"Backstrom, Mr. Karl Alfred",male,32.0,1 209 | 208,"Albimona, Mr. Nassef Cassem",male,26.0,0 210 | 209,"Carr, Miss. Helen ""Ellen""",female,16.0,0 211 | 210,"Blank, Mr. Henry",male,40.0,0 212 | 211,"Ali, Mr. Ahmed",male,24.0,0 213 | 212,"Cameron, Miss. Clear Annie",female,35.0,0 214 | 213,"Perkin, Mr. John Henry",male,22.0,0 215 | 214,"Givard, Mr. Hans Kristensen",male,30.0,0 216 | 215,"Kiernan, Mr. Philip",male,,1 217 | 216,"Newell, Miss. Madeleine",female,31.0,1 218 | 217,"Honkanen, Miss. Eliina",female,27.0,0 219 | 218,"Jacobsohn, Mr. Sidney Samuel",male,42.0,1 220 | 219,"Bazzani, Miss. Albina",female,32.0,0 221 | 220,"Harris, Mr. Walter",male,30.0,0 222 | 221,"Sunderland, Mr. Victor Francis",male,16.0,0 223 | 222,"Bracken, Mr. James H",male,27.0,0 224 | 223,"Green, Mr. George Henry",male,51.0,0 225 | 224,"Nenkoff, Mr. Christo",male,,0 226 | 225,"Hoyt, Mr. Frederick Maxfield",male,38.0,1 227 | 226,"Berglund, Mr. Karl Ivar Sven",male,22.0,0 228 | 227,"Mellors, Mr. William John",male,19.0,0 229 | 228,"Lovell, Mr. John Hall (""Henry"")",male,20.5,0 230 | 229,"Fahlstrom, Mr. Arne Jonas",male,18.0,0 231 | 230,"Lefebre, Miss. Mathilde",female,,3 232 | 231,"Harris, Mrs. Henry Birkhardt (Irene Wallach)",female,35.0,1 233 | 232,"Larsson, Mr. Bengt Edvin",male,29.0,0 234 | 233,"Sjostedt, Mr. Ernst Adolf",male,59.0,0 235 | 234,"Asplund, Miss. Lillian Gertrud",female,5.0,4 236 | 235,"Leyson, Mr. Robert William Norman",male,24.0,0 237 | 236,"Harknett, Miss. Alice Phoebe",female,,0 238 | 237,"Hold, Mr. Stephen",male,44.0,1 239 | 238,"Collyer, Miss. Marjorie ""Lottie""",female,8.0,0 240 | 239,"Pengelly, Mr. Frederick William",male,19.0,0 241 | 240,"Hunt, Mr. George Henry",male,33.0,0 242 | 241,"Zabour, Miss. Thamine",female,,1 243 | 242,"Murphy, Miss. Katherine ""Kate""",female,,1 244 | 243,"Coleridge, Mr. Reginald Charles",male,29.0,0 245 | 244,"Maenpaa, Mr. Matti Alexanteri",male,22.0,0 246 | 245,"Attalah, Mr. Sleiman",male,30.0,0 247 | 246,"Minahan, Dr. William Edward",male,44.0,2 248 | 247,"Lindahl, Miss. Agda Thorilda Viktoria",female,25.0,0 249 | 248,"Hamalainen, Mrs. William (Anna)",female,24.0,0 250 | 249,"Beckwith, Mr. Richard Leonard",male,37.0,1 251 | 250,"Carter, Rev. Ernest Courtenay",male,54.0,1 252 | 251,"Reed, Mr. James George",male,,0 253 | 252,"Strom, Mrs. Wilhelm (Elna Matilda Persson)",female,29.0,1 254 | 253,"Stead, Mr. William Thomas",male,62.0,0 255 | 254,"Lobb, Mr. William Arthur",male,30.0,1 256 | 255,"Rosblom, Mrs. Viktor (Helena Wilhelmina)",female,41.0,0 257 | 256,"Touma, Mrs. Darwis (Hanne Youssef Razi)",female,29.0,0 258 | 257,"Thorne, Mrs. Gertrude Maybelle",female,,0 259 | 258,"Cherry, Miss. Gladys",female,30.0,0 260 | 259,"Ward, Miss. Anna",female,35.0,0 261 | 260,"Parrish, Mrs. (Lutie Davis)",female,50.0,0 262 | 261,"Smith, Mr. Thomas",male,,0 263 | 262,"Asplund, Master. Edvin Rojj Felix",male,3.0,4 264 | 263,"Taussig, Mr. Emil",male,52.0,1 265 | 264,"Harrison, Mr. William",male,40.0,0 266 | 265,"Henry, Miss. Delia",female,,0 267 | 266,"Reeves, Mr. David",male,36.0,0 268 | 267,"Panula, Mr. Ernesti Arvid",male,16.0,4 269 | 268,"Persson, Mr. Ernst Ulrik",male,25.0,1 270 | 269,"Graham, Mrs. William Thompson (Edith Junkins)",female,58.0,0 271 | 270,"Bissette, Miss. Amelia",female,35.0,0 272 | 271,"Cairns, Mr. Alexander",male,,0 273 | 272,"Tornquist, Mr. William Henry",male,25.0,0 274 | 273,"Mellinger, Mrs. (Elizabeth Anne Maidment)",female,41.0,0 275 | 274,"Natsch, Mr. Charles H",male,37.0,0 276 | 275,"Healy, Miss. Hanora ""Nora""",female,,0 277 | 276,"Andrews, Miss. Kornelia Theodosia",female,63.0,1 278 | 277,"Lindblom, Miss. Augusta Charlotta",female,45.0,0 279 | 278,"Parkes, Mr. Francis ""Frank""",male,,0 280 | 279,"Rice, Master. Eric",male,7.0,4 281 | 280,"Abbott, Mrs. Stanton (Rosa Hunt)",female,35.0,1 282 | 281,"Duane, Mr. Frank",male,65.0,0 283 | 282,"Olsson, Mr. Nils Johan Goransson",male,28.0,0 284 | 283,"de Pelsmaeker, Mr. Alfons",male,16.0,0 285 | 284,"Dorking, Mr. Edward Arthur",male,19.0,0 286 | 285,"Smith, Mr. Richard William",male,,0 287 | 286,"Stankovic, Mr. Ivan",male,33.0,0 288 | 287,"de Mulder, Mr. Theodore",male,30.0,0 289 | 288,"Naidenoff, Mr. Penko",male,22.0,0 290 | 289,"Hosono, Mr. Masabumi",male,42.0,0 291 | 290,"Connolly, Miss. Kate",female,22.0,0 292 | 291,"Barber, Miss. Ellen ""Nellie""",female,26.0,0 293 | 292,"Bishop, Mrs. Dickinson H (Helen Walton)",female,19.0,1 294 | 293,"Levy, Mr. Rene Jacques",male,36.0,0 295 | 294,"Haas, Miss. Aloisia",female,24.0,0 296 | 295,"Mineff, Mr. Ivan",male,24.0,0 297 | 296,"Lewy, Mr. Ervin G",male,,0 298 | 297,"Hanna, Mr. Mansour",male,23.5,0 299 | 298,"Allison, Miss. Helen Loraine",female,2.0,1 300 | 299,"Saalfeld, Mr. Adolphe",male,,0 301 | 300,"Baxter, Mrs. James (Helene DeLaudeniere Chaput)",female,50.0,0 302 | 301,"Kelly, Miss. Anna Katherine ""Annie Kate""",female,,0 303 | 302,"McCoy, Mr. Bernard",male,,2 304 | 303,"Johnson, Mr. William Cahoone Jr",male,19.0,0 305 | 304,"Keane, Miss. Nora A",female,,0 306 | 305,"Williams, Mr. Howard Hugh ""Harry""",male,,0 307 | 306,"Allison, Master. Hudson Trevor",male,0.92,1 308 | 307,"Fleming, Miss. Margaret",female,,0 309 | 308,"Penasco y Castellana, Mrs. Victor de Satode (Maria Josefa Perez de Soto y Vallejo)",female,17.0,1 310 | 309,"Abelson, Mr. Samuel",male,30.0,1 311 | 310,"Francatelli, Miss. Laura Mabel",female,30.0,0 312 | 311,"Hays, Miss. Margaret Bechstein",female,24.0,0 313 | 312,"Ryerson, Miss. Emily Borie",female,18.0,2 314 | 313,"Lahtinen, Mrs. William (Anna Sylfven)",female,26.0,1 315 | 314,"Hendekovic, Mr. Ignjac",male,28.0,0 316 | 315,"Hart, Mr. Benjamin",male,43.0,1 317 | 316,"Nilsson, Miss. Helmina Josefina",female,26.0,0 318 | 317,"Kantor, Mrs. Sinai (Miriam Sternin)",female,24.0,1 319 | 318,"Moraweck, Dr. Ernest",male,54.0,0 320 | 319,"Wick, Miss. Mary Natalie",female,31.0,0 321 | 320,"Spedden, Mrs. Frederic Oakley (Margaretta Corning Stone)",female,40.0,1 322 | 321,"Dennis, Mr. Samuel",male,22.0,0 323 | 322,"Danoff, Mr. Yoto",male,27.0,0 324 | 323,"Slayter, Miss. Hilda Mary",female,30.0,0 325 | 324,"Caldwell, Mrs. Albert Francis (Sylvia Mae Harbaugh)",female,22.0,1 326 | 325,"Sage, Mr. George John Jr",male,,8 327 | 326,"Young, Miss. Marie Grice",female,36.0,0 328 | 327,"Nysveen, Mr. Johan Hansen",male,61.0,0 329 | 328,"Ball, Mrs. (Ada E Hall)",female,36.0,0 330 | 329,"Goldsmith, Mrs. Frank John (Emily Alice Brown)",female,31.0,1 331 | 330,"Hippach, Miss. Jean Gertrude",female,16.0,0 332 | 331,"McCoy, Miss. Agnes",female,,2 333 | 332,"Partner, Mr. Austen",male,45.5,0 334 | 333,"Graham, Mr. George Edward",male,38.0,0 335 | 334,"Vander Planke, Mr. Leo Edmondus",male,16.0,2 336 | 335,"Frauenthal, Mrs. Henry William (Clara Heinsheimer)",female,,1 337 | 336,"Denkoff, Mr. Mitto",male,,0 338 | 337,"Pears, Mr. Thomas Clinton",male,29.0,1 339 | 338,"Burns, Miss. Elizabeth Margaret",female,41.0,0 340 | 339,"Dahl, Mr. Karl Edwart",male,45.0,0 341 | 340,"Blackwell, Mr. Stephen Weart",male,45.0,0 342 | 341,"Navratil, Master. Edmond Roger",male,2.0,1 343 | 342,"Fortune, Miss. Alice Elizabeth",female,24.0,3 344 | 343,"Collander, Mr. Erik Gustaf",male,28.0,0 345 | 344,"Sedgwick, Mr. Charles Frederick Waddington",male,25.0,0 346 | 345,"Fox, Mr. Stanley Hubert",male,36.0,0 347 | 346,"Brown, Miss. Amelia ""Mildred""",female,24.0,0 348 | 347,"Smith, Miss. Marion Elsie",female,40.0,0 349 | 348,"Davison, Mrs. Thomas Henry (Mary E Finck)",female,,1 350 | 349,"Coutts, Master. William Loch ""William""",male,3.0,1 351 | 350,"Dimic, Mr. Jovan",male,42.0,0 352 | 351,"Odahl, Mr. Nils Martin",male,23.0,0 353 | 352,"Williams-Lambert, Mr. Fletcher Fellows",male,,0 354 | 353,"Elias, Mr. Tannous",male,15.0,1 355 | 354,"Arnold-Franchi, Mr. Josef",male,25.0,1 356 | 355,"Yousif, Mr. Wazli",male,,0 357 | 356,"Vanden Steen, Mr. Leo Peter",male,28.0,0 358 | 357,"Bowerman, Miss. Elsie Edith",female,22.0,0 359 | 358,"Funk, Miss. Annie Clemmer",female,38.0,0 360 | 359,"McGovern, Miss. Mary",female,,0 361 | 360,"Mockler, Miss. Helen Mary ""Ellie""",female,,0 362 | 361,"Skoog, Mr. Wilhelm",male,40.0,1 363 | 362,"del Carlo, Mr. Sebastiano",male,29.0,1 364 | 363,"Barbara, Mrs. (Catherine David)",female,45.0,0 365 | 364,"Asim, Mr. Adola",male,35.0,0 366 | 365,"O'Brien, Mr. Thomas",male,,1 367 | 366,"Adahl, Mr. Mauritz Nils Martin",male,30.0,0 368 | 367,"Warren, Mrs. Frank Manley (Anna Sophia Atkinson)",female,60.0,1 369 | 368,"Moussa, Mrs. (Mantoura Boulos)",female,,0 370 | 369,"Jermyn, Miss. Annie",female,,0 371 | 370,"Aubart, Mme. Leontine Pauline",female,24.0,0 372 | 371,"Harder, Mr. George Achilles",male,25.0,1 373 | 372,"Wiklund, Mr. Jakob Alfred",male,18.0,1 374 | 373,"Beavan, Mr. William Thomas",male,19.0,0 375 | 374,"Ringhini, Mr. Sante",male,22.0,0 376 | 375,"Palsson, Miss. Stina Viola",female,3.0,3 377 | 376,"Meyer, Mrs. Edgar Joseph (Leila Saks)",female,,1 378 | 377,"Landergren, Miss. Aurora Adelia",female,22.0,0 379 | 378,"Widener, Mr. Harry Elkins",male,27.0,0 380 | 379,"Betros, Mr. Tannous",male,20.0,0 381 | 380,"Gustafsson, Mr. Karl Gideon",male,19.0,0 382 | 381,"Bidois, Miss. Rosalie",female,42.0,0 383 | 382,"Nakid, Miss. Maria (""Mary"")",female,1.0,0 384 | 383,"Tikkanen, Mr. Juho",male,32.0,0 385 | 384,"Holverson, Mrs. Alexander Oskar (Mary Aline Towner)",female,35.0,1 386 | 385,"Plotcharsky, Mr. Vasil",male,,0 387 | 386,"Davies, Mr. Charles Henry",male,18.0,0 388 | 387,"Goodwin, Master. Sidney Leonard",male,1.0,5 389 | 388,"Buss, Miss. Kate",female,36.0,0 390 | 389,"Sadlier, Mr. Matthew",male,,0 391 | 390,"Lehmann, Miss. Bertha",female,17.0,0 392 | 391,"Carter, Mr. William Ernest",male,36.0,1 393 | 392,"Jansson, Mr. Carl Olof",male,21.0,0 394 | 393,"Gustafsson, Mr. Johan Birger",male,28.0,2 395 | 394,"Newell, Miss. Marjorie",female,23.0,1 396 | 395,"Sandstrom, Mrs. Hjalmar (Agnes Charlotta Bengtsson)",female,24.0,0 397 | 396,"Johansson, Mr. Erik",male,22.0,0 398 | 397,"Olsson, Miss. Elina",female,31.0,0 399 | 398,"McKane, Mr. Peter David",male,46.0,0 400 | 399,"Pain, Dr. Alfred",male,23.0,0 401 | 400,"Trout, Mrs. William H (Jessie L)",female,28.0,0 402 | 401,"Niskanen, Mr. Juha",male,39.0,0 403 | 402,"Adams, Mr. John",male,26.0,0 404 | 403,"Jussila, Miss. Mari Aina",female,21.0,1 405 | 404,"Hakkarainen, Mr. Pekka Pietari",male,28.0,1 406 | 405,"Oreskovic, Miss. Marija",female,20.0,0 407 | 406,"Gale, Mr. Shadrach",male,34.0,1 408 | 407,"Widegren, Mr. Carl/Charles Peter",male,51.0,0 409 | 408,"Richards, Master. William Rowe",male,3.0,1 410 | 409,"Birkeland, Mr. Hans Martin Monsen",male,21.0,0 411 | 410,"Lefebre, Miss. Ida",female,,3 412 | 411,"Sdycoff, Mr. Todor",male,,0 413 | 412,"Hart, Mr. Henry",male,,0 414 | 413,"Minahan, Miss. Daisy E",female,33.0,1 415 | 414,"Cunningham, Mr. Alfred Fleming",male,,0 416 | 415,"Sundman, Mr. Johan Julian",male,44.0,0 417 | 416,"Meek, Mrs. Thomas (Annie Louise Rowley)",female,,0 418 | 417,"Drew, Mrs. James Vivian (Lulu Thorne Christian)",female,34.0,1 419 | 418,"Silven, Miss. Lyyli Karoliina",female,18.0,0 420 | 419,"Matthews, Mr. William John",male,30.0,0 421 | 420,"Van Impe, Miss. Catharina",female,10.0,0 422 | 421,"Gheorgheff, Mr. Stanio",male,,0 423 | 422,"Charters, Mr. David",male,21.0,0 424 | 423,"Zimmerman, Mr. Leo",male,29.0,0 425 | 424,"Danbom, Mrs. Ernst Gilbert (Anna Sigrid Maria Brogren)",female,28.0,1 426 | 425,"Rosblom, Mr. Viktor Richard",male,18.0,1 427 | 426,"Wiseman, Mr. Phillippe",male,,0 428 | 427,"Clarke, Mrs. Charles V (Ada Maria Winfield)",female,28.0,1 429 | 428,"Phillips, Miss. Kate Florence (""Mrs Kate Louise Phillips Marshall"")",female,19.0,0 430 | 429,"Flynn, Mr. James",male,,0 431 | 430,"Pickard, Mr. Berk (Berk Trembisky)",male,32.0,0 432 | 431,"Bjornstrom-Steffansson, Mr. Mauritz Hakan",male,28.0,0 433 | 432,"Thorneycroft, Mrs. Percival (Florence Kate White)",female,,1 434 | 433,"Louch, Mrs. Charles Alexander (Alice Adelaide Slow)",female,42.0,1 435 | 434,"Kallio, Mr. Nikolai Erland",male,17.0,0 436 | 435,"Silvey, Mr. William Baird",male,50.0,1 437 | 436,"Carter, Miss. Lucile Polk",female,14.0,1 438 | 437,"Ford, Miss. Doolina Margaret ""Daisy""",female,21.0,2 439 | 438,"Richards, Mrs. Sidney (Emily Hocking)",female,24.0,2 440 | 439,"Fortune, Mr. Mark",male,64.0,1 441 | 440,"Kvillner, Mr. Johan Henrik Johannesson",male,31.0,0 442 | 441,"Hart, Mrs. Benjamin (Esther Ada Bloomfield)",female,45.0,1 443 | 442,"Hampe, Mr. Leon",male,20.0,0 444 | 443,"Petterson, Mr. Johan Emil",male,25.0,1 445 | 444,"Reynaldo, Ms. Encarnacion",female,28.0,0 446 | 445,"Johannesen-Bratthammer, Mr. Bernt",male,,0 447 | 446,"Dodge, Master. Washington",male,4.0,0 448 | 447,"Mellinger, Miss. Madeleine Violet",female,13.0,0 449 | 448,"Seward, Mr. Frederic Kimber",male,34.0,0 450 | 449,"Baclini, Miss. Marie Catherine",female,5.0,2 451 | 450,"Peuchen, Major. Arthur Godfrey",male,52.0,0 452 | 451,"West, Mr. Edwy Arthur",male,36.0,1 453 | 452,"Hagland, Mr. Ingvald Olai Olsen",male,,1 454 | 453,"Foreman, Mr. Benjamin Laventall",male,30.0,0 455 | 454,"Goldenberg, Mr. Samuel L",male,49.0,1 456 | 455,"Peduzzi, Mr. Joseph",male,,0 457 | 456,"Jalsevac, Mr. Ivan",male,29.0,0 458 | 457,"Millet, Mr. Francis Davis",male,65.0,0 459 | 458,"Kenyon, Mrs. Frederick R (Marion)",female,,1 460 | 459,"Toomey, Miss. Ellen",female,50.0,0 461 | 460,"O'Connor, Mr. Maurice",male,,0 462 | 461,"Anderson, Mr. Harry",male,48.0,0 463 | 462,"Morley, Mr. William",male,34.0,0 464 | 463,"Gee, Mr. Arthur H",male,47.0,0 465 | 464,"Milling, Mr. Jacob Christian",male,48.0,0 466 | 465,"Maisner, Mr. Simon",male,,0 467 | 466,"Goncalves, Mr. Manuel Estanslas",male,38.0,0 468 | 467,"Campbell, Mr. William",male,,0 469 | 468,"Smart, Mr. John Montgomery",male,56.0,0 470 | 469,"Scanlan, Mr. James",male,,0 471 | 470,"Baclini, Miss. Helene Barbara",female,0.75,2 472 | 471,"Keefe, Mr. Arthur",male,,0 473 | 472,"Cacic, Mr. Luka",male,38.0,0 474 | 473,"West, Mrs. Edwy Arthur (Ada Mary Worth)",female,33.0,1 475 | 474,"Jerwan, Mrs. Amin S (Marie Marthe Thuillard)",female,23.0,0 476 | 475,"Strandberg, Miss. Ida Sofia",female,22.0,0 477 | 476,"Clifford, Mr. George Quincy",male,,0 478 | 477,"Renouf, Mr. Peter Henry",male,34.0,1 479 | 478,"Braund, Mr. Lewis Richard",male,29.0,1 480 | 479,"Karlsson, Mr. Nils August",male,22.0,0 481 | 480,"Hirvonen, Miss. Hildur E",female,2.0,0 482 | 481,"Goodwin, Master. Harold Victor",male,9.0,5 483 | 482,"Frost, Mr. Anthony Wood ""Archie""",male,,0 484 | 483,"Rouse, Mr. Richard Henry",male,50.0,0 485 | 484,"Turkula, Mrs. (Hedwig)",female,63.0,0 486 | 485,"Bishop, Mr. Dickinson H",male,25.0,1 487 | 486,"Lefebre, Miss. Jeannie",female,,3 488 | 487,"Hoyt, Mrs. Frederick Maxfield (Jane Anne Forby)",female,35.0,1 489 | 488,"Kent, Mr. Edward Austin",male,58.0,0 490 | 489,"Somerton, Mr. Francis William",male,30.0,0 491 | 490,"Coutts, Master. Eden Leslie ""Neville""",male,9.0,1 492 | 491,"Hagland, Mr. Konrad Mathias Reiersen",male,,1 493 | 492,"Windelov, Mr. Einar",male,21.0,0 494 | 493,"Molson, Mr. Harry Markland",male,55.0,0 495 | 494,"Artagaveytia, Mr. Ramon",male,71.0,0 496 | 495,"Stanley, Mr. Edward Roland",male,21.0,0 497 | 496,"Yousseff, Mr. Gerious",male,,0 498 | 497,"Eustis, Miss. Elizabeth Mussey",female,54.0,1 499 | 498,"Shellard, Mr. Frederick William",male,,0 500 | 499,"Allison, Mrs. Hudson J C (Bessie Waldo Daniels)",female,25.0,1 501 | 500,"Svensson, Mr. Olof",male,24.0,0 502 | 501,"Calic, Mr. Petar",male,17.0,0 503 | 502,"Canavan, Miss. Mary",female,21.0,0 504 | 503,"O'Sullivan, Miss. Bridget Mary",female,,0 505 | 504,"Laitinen, Miss. Kristina Sofia",female,37.0,0 506 | 505,"Maioni, Miss. Roberta",female,16.0,0 507 | 506,"Penasco y Castellana, Mr. Victor de Satode",male,18.0,1 508 | 507,"Quick, Mrs. Frederick Charles (Jane Richards)",female,33.0,0 509 | 508,"Bradley, Mr. George (""George Arthur Brayton"")",male,,0 510 | 509,"Olsen, Mr. Henry Margido",male,28.0,0 511 | 510,"Lang, Mr. Fang",male,26.0,0 512 | 511,"Daly, Mr. Eugene Patrick",male,29.0,0 513 | 512,"Webber, Mr. James",male,,0 514 | 513,"McGough, Mr. James Robert",male,36.0,0 515 | 514,"Rothschild, Mrs. Martin (Elizabeth L. Barrett)",female,54.0,1 516 | 515,"Coleff, Mr. Satio",male,24.0,0 517 | 516,"Walker, Mr. William Anderson",male,47.0,0 518 | 517,"Lemore, Mrs. (Amelia Milley)",female,34.0,0 519 | 518,"Ryan, Mr. Patrick",male,,0 520 | 519,"Angle, Mrs. William A (Florence ""Mary"" Agnes Hughes)",female,36.0,1 521 | 520,"Pavlovic, Mr. Stefo",male,32.0,0 522 | 521,"Perreault, Miss. Anne",female,30.0,0 523 | 522,"Vovk, Mr. Janko",male,22.0,0 524 | 523,"Lahoud, Mr. Sarkis",male,,0 525 | 524,"Hippach, Mrs. Louis Albert (Ida Sophia Fischer)",female,44.0,0 526 | 525,"Kassem, Mr. Fared",male,,0 527 | 526,"Farrell, Mr. James",male,40.5,0 528 | 527,"Ridsdale, Miss. Lucy",female,50.0,0 529 | 528,"Farthing, Mr. John",male,,0 530 | 529,"Salonen, Mr. Johan Werner",male,39.0,0 531 | 530,"Hocking, Mr. Richard George",male,23.0,2 532 | 531,"Quick, Miss. Phyllis May",female,2.0,1 533 | 532,"Toufik, Mr. Nakli",male,,0 534 | 533,"Elias, Mr. Joseph Jr",male,17.0,1 535 | 534,"Peter, Mrs. Catherine (Catherine Rizk)",female,,0 536 | 535,"Cacic, Miss. Marija",female,30.0,0 537 | 536,"Hart, Miss. Eva Miriam",female,7.0,0 538 | 537,"Butt, Major. Archibald Willingham",male,45.0,0 539 | 538,"LeRoy, Miss. Bertha",female,30.0,0 540 | 539,"Risien, Mr. Samuel Beard",male,,0 541 | 540,"Frolicher, Miss. Hedwig Margaritha",female,22.0,0 542 | 541,"Crosby, Miss. Harriet R",female,36.0,0 543 | 542,"Andersson, Miss. Ingeborg Constanzia",female,9.0,4 544 | 543,"Andersson, Miss. Sigrid Elisabeth",female,11.0,4 545 | 544,"Beane, Mr. Edward",male,32.0,1 546 | 545,"Douglas, Mr. Walter Donald",male,50.0,1 547 | 546,"Nicholson, Mr. Arthur Ernest",male,64.0,0 548 | 547,"Beane, Mrs. Edward (Ethel Clarke)",female,19.0,1 549 | 548,"Padro y Manent, Mr. Julian",male,,0 550 | 549,"Goldsmith, Mr. Frank John",male,33.0,1 551 | 550,"Davies, Master. John Morgan Jr",male,8.0,1 552 | 551,"Thayer, Mr. John Borland Jr",male,17.0,0 553 | 552,"Sharp, Mr. Percival James R",male,27.0,0 554 | 553,"O'Brien, Mr. Timothy",male,,0 555 | 554,"Leeni, Mr. Fahim (""Philip Zenni"")",male,22.0,0 556 | 555,"Ohman, Miss. Velin",female,22.0,0 557 | 556,"Wright, Mr. George",male,62.0,0 558 | 557,"Duff Gordon, Lady. (Lucille Christiana Sutherland) (""Mrs Morgan"")",female,48.0,1 559 | 558,"Robbins, Mr. Victor",male,,0 560 | 559,"Taussig, Mrs. Emil (Tillie Mandelbaum)",female,39.0,1 561 | 560,"de Messemaeker, Mrs. Guillaume Joseph (Emma)",female,36.0,1 562 | 561,"Morrow, Mr. Thomas Rowan",male,,0 563 | 562,"Sivic, Mr. Husein",male,40.0,0 564 | 563,"Norman, Mr. Robert Douglas",male,28.0,0 565 | 564,"Simmons, Mr. John",male,,0 566 | 565,"Meanwell, Miss. (Marion Ogden)",female,,0 567 | 566,"Davies, Mr. Alfred J",male,24.0,2 568 | 567,"Stoytcheff, Mr. Ilia",male,19.0,0 569 | 568,"Palsson, Mrs. Nils (Alma Cornelia Berglund)",female,29.0,0 570 | 569,"Doharr, Mr. Tannous",male,,0 571 | 570,"Jonsson, Mr. Carl",male,32.0,0 572 | 571,"Harris, Mr. George",male,62.0,0 573 | 572,"Appleton, Mrs. Edward Dale (Charlotte Lamson)",female,53.0,2 574 | 573,"Flynn, Mr. John Irwin (""Irving"")",male,36.0,0 575 | 574,"Kelly, Miss. Mary",female,,0 576 | 575,"Rush, Mr. Alfred George John",male,16.0,0 577 | 576,"Patchett, Mr. George",male,19.0,0 578 | 577,"Garside, Miss. Ethel",female,34.0,0 579 | 578,"Silvey, Mrs. William Baird (Alice Munger)",female,39.0,1 580 | 579,"Caram, Mrs. Joseph (Maria Elias)",female,,1 581 | 580,"Jussila, Mr. Eiriik",male,32.0,0 582 | 581,"Christy, Miss. Julie Rachel",female,25.0,1 583 | 582,"Thayer, Mrs. John Borland (Marian Longstreth Morris)",female,39.0,1 584 | 583,"Downton, Mr. William James",male,54.0,0 585 | 584,"Ross, Mr. John Hugo",male,36.0,0 586 | 585,"Paulner, Mr. Uscher",male,,0 587 | 586,"Taussig, Miss. Ruth",female,18.0,0 588 | 587,"Jarvis, Mr. John Denzil",male,47.0,0 589 | 588,"Frolicher-Stehli, Mr. Maxmillian",male,60.0,1 590 | 589,"Gilinski, Mr. Eliezer",male,22.0,0 591 | 590,"Murdlin, Mr. Joseph",male,,0 592 | 591,"Rintamaki, Mr. Matti",male,35.0,0 593 | 592,"Stephenson, Mrs. Walter Bertram (Martha Eustis)",female,52.0,1 594 | 593,"Elsbury, Mr. William James",male,47.0,0 595 | 594,"Bourke, Miss. Mary",female,,0 596 | 595,"Chapman, Mr. John Henry",male,37.0,1 597 | 596,"Van Impe, Mr. Jean Baptiste",male,36.0,1 598 | 597,"Leitch, Miss. Jessie Wills",female,,0 599 | 598,"Johnson, Mr. Alfred",male,49.0,0 600 | 599,"Boulos, Mr. Hanna",male,,0 601 | 600,"Duff Gordon, Sir. Cosmo Edmund (""Mr Morgan"")",male,49.0,1 602 | 601,"Jacobsohn, Mrs. Sidney Samuel (Amy Frances Christy)",female,24.0,2 603 | 602,"Slabenoff, Mr. Petco",male,,0 604 | 603,"Harrington, Mr. Charles H",male,,0 605 | 604,"Torber, Mr. Ernst William",male,44.0,0 606 | 605,"Homer, Mr. Harry (""Mr E Haven"")",male,35.0,0 607 | 606,"Lindell, Mr. Edvard Bengtsson",male,36.0,1 608 | 607,"Karaic, Mr. Milan",male,30.0,0 609 | 608,"Daniel, Mr. Robert Williams",male,27.0,0 610 | 609,"Laroche, Mrs. Joseph (Juliette Marie Louise Lafargue)",female,22.0,1 611 | 610,"Shutes, Miss. Elizabeth W",female,40.0,0 612 | 611,"Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren)",female,39.0,1 613 | 612,"Jardin, Mr. Jose Neto",male,,0 614 | 613,"Murphy, Miss. Margaret Jane",female,,1 615 | 614,"Horgan, Mr. John",male,,0 616 | 615,"Brocklebank, Mr. William Alfred",male,35.0,0 617 | 616,"Herman, Miss. Alice",female,24.0,1 618 | 617,"Danbom, Mr. Ernst Gilbert",male,34.0,1 619 | 618,"Lobb, Mrs. William Arthur (Cordelia K Stanlick)",female,26.0,1 620 | 619,"Becker, Miss. Marion Louise",female,4.0,2 621 | 620,"Gavey, Mr. Lawrence",male,26.0,0 622 | 621,"Yasbeck, Mr. Antoni",male,27.0,1 623 | 622,"Kimball, Mr. Edwin Nelson Jr",male,42.0,1 624 | 623,"Nakid, Mr. Sahid",male,20.0,1 625 | 624,"Hansen, Mr. Henry Damsgaard",male,21.0,0 626 | 625,"Bowen, Mr. David John ""Dai""",male,21.0,0 627 | 626,"Sutton, Mr. Frederick",male,61.0,0 628 | 627,"Kirkland, Rev. Charles Leonard",male,57.0,0 629 | 628,"Longley, Miss. Gretchen Fiske",female,21.0,0 630 | 629,"Bostandyeff, Mr. Guentcho",male,26.0,0 631 | 630,"O'Connell, Mr. Patrick D",male,,0 632 | 631,"Barkworth, Mr. Algernon Henry Wilson",male,80.0,0 633 | 632,"Lundahl, Mr. Johan Svensson",male,51.0,0 634 | 633,"Stahelin-Maeglin, Dr. Max",male,32.0,0 635 | 634,"Parr, Mr. William Henry Marsh",male,,0 636 | 635,"Skoog, Miss. Mabel",female,9.0,3 637 | 636,"Davis, Miss. Mary",female,28.0,0 638 | 637,"Leinonen, Mr. Antti Gustaf",male,32.0,0 639 | 638,"Collyer, Mr. Harvey",male,31.0,1 640 | 639,"Panula, Mrs. Juha (Maria Emilia Ojala)",female,41.0,0 641 | 640,"Thorneycroft, Mr. Percival",male,,1 642 | 641,"Jensen, Mr. Hans Peder",male,20.0,0 643 | 642,"Sagesser, Mlle. Emma",female,24.0,0 644 | 643,"Skoog, Miss. Margit Elizabeth",female,2.0,3 645 | 644,"Foo, Mr. Choong",male,,0 646 | 645,"Baclini, Miss. Eugenie",female,0.75,2 647 | 646,"Harper, Mr. Henry Sleeper",male,48.0,1 648 | 647,"Cor, Mr. Liudevit",male,19.0,0 649 | 648,"Simonius-Blumer, Col. Oberst Alfons",male,56.0,0 650 | 649,"Willey, Mr. Edward",male,,0 651 | 650,"Stanley, Miss. Amy Zillah Elsie",female,23.0,0 652 | 651,"Mitkoff, Mr. Mito",male,,0 653 | 652,"Doling, Miss. Elsie",female,18.0,0 654 | 653,"Kalvik, Mr. Johannes Halvorsen",male,21.0,0 655 | 654,"O'Leary, Miss. Hanora ""Norah""",female,,0 656 | 655,"Hegarty, Miss. Hanora ""Nora""",female,18.0,0 657 | 656,"Hickman, Mr. Leonard Mark",male,24.0,2 658 | 657,"Radeff, Mr. Alexander",male,,0 659 | 658,"Bourke, Mrs. John (Catherine)",female,32.0,1 660 | 659,"Eitemiller, Mr. George Floyd",male,23.0,0 661 | 660,"Newell, Mr. Arthur Webster",male,58.0,0 662 | 661,"Frauenthal, Dr. Henry William",male,50.0,2 663 | 662,"Badt, Mr. Mohamed",male,40.0,0 664 | 663,"Colley, Mr. Edward Pomeroy",male,47.0,0 665 | 664,"Coleff, Mr. Peju",male,36.0,0 666 | 665,"Lindqvist, Mr. Eino William",male,20.0,1 667 | 666,"Hickman, Mr. Lewis",male,32.0,2 668 | 667,"Butler, Mr. Reginald Fenton",male,25.0,0 669 | 668,"Rommetvedt, Mr. Knud Paust",male,,0 670 | 669,"Cook, Mr. Jacob",male,43.0,0 671 | 670,"Taylor, Mrs. Elmer Zebley (Juliet Cummins Wright)",female,,1 672 | 671,"Brown, Mrs. Thomas William Solomon (Elizabeth Catherine Ford)",female,40.0,1 673 | 672,"Davidson, Mr. Thornton",male,31.0,1 674 | 673,"Mitchell, Mr. Henry Michael",male,70.0,0 675 | 674,"Wilhelms, Mr. Charles",male,31.0,0 676 | 675,"Watson, Mr. Ennis Hastings",male,,0 677 | 676,"Edvardsson, Mr. Gustaf Hjalmar",male,18.0,0 678 | 677,"Sawyer, Mr. Frederick Charles",male,24.5,0 679 | 678,"Turja, Miss. Anna Sofia",female,18.0,0 680 | 679,"Goodwin, Mrs. Frederick (Augusta Tyler)",female,43.0,1 681 | 680,"Cardeza, Mr. Thomas Drake Martinez",male,36.0,0 682 | 681,"Peters, Miss. Katie",female,,0 683 | 682,"Hassab, Mr. Hammad",male,27.0,0 684 | 683,"Olsvigen, Mr. Thor Anderson",male,20.0,0 685 | 684,"Goodwin, Mr. Charles Edward",male,14.0,5 686 | 685,"Brown, Mr. Thomas William Solomon",male,60.0,1 687 | 686,"Laroche, Mr. Joseph Philippe Lemercier",male,25.0,1 688 | 687,"Panula, Mr. Jaako Arnold",male,14.0,4 689 | 688,"Dakic, Mr. Branko",male,19.0,0 690 | 689,"Fischer, Mr. Eberhard Thelander",male,18.0,0 691 | 690,"Madill, Miss. Georgette Alexandra",female,15.0,0 692 | 691,"Dick, Mr. Albert Adrian",male,31.0,1 693 | 692,"Karun, Miss. Manca",female,4.0,0 694 | 693,"Lam, Mr. Ali",male,,0 695 | 694,"Saad, Mr. Khalil",male,25.0,0 696 | 695,"Weir, Col. John",male,60.0,0 697 | 696,"Chapman, Mr. Charles Henry",male,52.0,0 698 | 697,"Kelly, Mr. James",male,44.0,0 699 | 698,"Mullens, Miss. Katherine ""Katie""",female,,0 700 | 699,"Thayer, Mr. John Borland",male,49.0,1 701 | 700,"Humblen, Mr. Adolf Mathias Nicolai Olsen",male,42.0,0 702 | 701,"Astor, Mrs. John Jacob (Madeleine Talmadge Force)",female,18.0,1 703 | 702,"Silverthorne, Mr. Spencer Victor",male,35.0,0 704 | 703,"Barbara, Miss. Saiide",female,18.0,0 705 | 704,"Gallagher, Mr. Martin",male,25.0,0 706 | 705,"Hansen, Mr. Henrik Juul",male,26.0,1 707 | 706,"Morley, Mr. Henry Samuel (""Mr Henry Marshall"")",male,39.0,0 708 | 707,"Kelly, Mrs. Florence ""Fannie""",female,45.0,0 709 | 708,"Calderhead, Mr. Edward Pennington",male,42.0,0 710 | 709,"Cleaver, Miss. Alice",female,22.0,0 711 | 710,"Moubarek, Master. Halim Gonios (""William George"")",male,,1 712 | 711,"Mayne, Mlle. Berthe Antonine (""Mrs de Villiers"")",female,24.0,0 713 | 712,"Klaber, Mr. Herman",male,,0 714 | 713,"Taylor, Mr. Elmer Zebley",male,48.0,1 715 | 714,"Larsson, Mr. August Viktor",male,29.0,0 716 | 715,"Greenberg, Mr. Samuel",male,52.0,0 717 | 716,"Soholt, Mr. Peter Andreas Lauritz Andersen",male,19.0,0 718 | 717,"Endres, Miss. Caroline Louise",female,38.0,0 719 | 718,"Troutt, Miss. Edwina Celia ""Winnie""",female,27.0,0 720 | 719,"McEvoy, Mr. Michael",male,,0 721 | 720,"Johnson, Mr. Malkolm Joackim",male,33.0,0 722 | 721,"Harper, Miss. Annie Jessie ""Nina""",female,6.0,0 723 | 722,"Jensen, Mr. Svend Lauritz",male,17.0,1 724 | 723,"Gillespie, Mr. William Henry",male,34.0,0 725 | 724,"Hodges, Mr. Henry Price",male,50.0,0 726 | 725,"Chambers, Mr. Norman Campbell",male,27.0,1 727 | 726,"Oreskovic, Mr. Luka",male,20.0,0 728 | 727,"Renouf, Mrs. Peter Henry (Lillian Jefferys)",female,30.0,3 729 | 728,"Mannion, Miss. Margareth",female,,0 730 | 729,"Bryhl, Mr. Kurt Arnold Gottfrid",male,25.0,1 731 | 730,"Ilmakangas, Miss. Pieta Sofia",female,25.0,1 732 | 731,"Allen, Miss. Elisabeth Walton",female,29.0,0 733 | 732,"Hassan, Mr. Houssein G N",male,11.0,0 734 | 733,"Knight, Mr. Robert J",male,,0 735 | 734,"Berriman, Mr. William John",male,23.0,0 736 | 735,"Troupiansky, Mr. Moses Aaron",male,23.0,0 737 | 736,"Williams, Mr. Leslie",male,28.5,0 738 | 737,"Ford, Mrs. Edward (Margaret Ann Watson)",female,48.0,1 739 | 738,"Lesurer, Mr. Gustave J",male,35.0,0 740 | 739,"Ivanoff, Mr. Kanio",male,,0 741 | 740,"Nankoff, Mr. Minko",male,,0 742 | 741,"Hawksford, Mr. Walter James",male,,0 743 | 742,"Cavendish, Mr. Tyrell William",male,36.0,1 744 | 743,"Ryerson, Miss. Susan Parker ""Suzette""",female,21.0,2 745 | 744,"McNamee, Mr. Neal",male,24.0,1 746 | 745,"Stranden, Mr. Juho",male,31.0,0 747 | 746,"Crosby, Capt. Edward Gifford",male,70.0,1 748 | 747,"Abbott, Mr. Rossmore Edward",male,16.0,1 749 | 748,"Sinkkonen, Miss. Anna",female,30.0,0 750 | 749,"Marvin, Mr. Daniel Warner",male,19.0,1 751 | 750,"Connaghton, Mr. Michael",male,31.0,0 752 | 751,"Wells, Miss. Joan",female,4.0,1 753 | 752,"Moor, Master. Meier",male,6.0,0 754 | 753,"Vande Velde, Mr. Johannes Joseph",male,33.0,0 755 | 754,"Jonkoff, Mr. Lalio",male,23.0,0 756 | 755,"Herman, Mrs. Samuel (Jane Laver)",female,48.0,1 757 | 756,"Hamalainen, Master. Viljo",male,0.67,1 758 | 757,"Carlsson, Mr. August Sigfrid",male,28.0,0 759 | 758,"Bailey, Mr. Percy Andrew",male,18.0,0 760 | 759,"Theobald, Mr. Thomas Leonard",male,34.0,0 761 | 760,"Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards)",female,33.0,0 762 | 761,"Garfirth, Mr. John",male,,0 763 | 762,"Nirva, Mr. Iisakki Antino Aijo",male,41.0,0 764 | 763,"Barah, Mr. Hanna Assi",male,20.0,0 765 | 764,"Carter, Mrs. William Ernest (Lucile Polk)",female,36.0,1 766 | 765,"Eklund, Mr. Hans Linus",male,16.0,0 767 | 766,"Hogeboom, Mrs. John C (Anna Andrews)",female,51.0,1 768 | 767,"Brewe, Dr. Arthur Jackson",male,,0 769 | 768,"Mangan, Miss. Mary",female,30.5,0 770 | 769,"Moran, Mr. Daniel J",male,,1 771 | 770,"Gronnestad, Mr. Daniel Danielsen",male,32.0,0 772 | 771,"Lievens, Mr. Rene Aime",male,24.0,0 773 | 772,"Jensen, Mr. Niels Peder",male,48.0,0 774 | 773,"Mack, Mrs. (Mary)",female,57.0,0 775 | 774,"Elias, Mr. Dibo",male,,0 776 | 775,"Hocking, Mrs. Elizabeth (Eliza Needs)",female,54.0,1 777 | 776,"Myhrman, Mr. Pehr Fabian Oliver Malkolm",male,18.0,0 778 | 777,"Tobin, Mr. Roger",male,,0 779 | 778,"Emanuel, Miss. Virginia Ethel",female,5.0,0 780 | 779,"Kilgannon, Mr. Thomas J",male,,0 781 | 780,"Robert, Mrs. Edward Scott (Elisabeth Walton McMillan)",female,43.0,0 782 | 781,"Ayoub, Miss. Banoura",female,13.0,0 783 | 782,"Dick, Mrs. Albert Adrian (Vera Gillespie)",female,17.0,1 784 | 783,"Long, Mr. Milton Clyde",male,29.0,0 785 | 784,"Johnston, Mr. Andrew G",male,,1 786 | 785,"Ali, Mr. William",male,25.0,0 787 | 786,"Harmer, Mr. Abraham (David Lishin)",male,25.0,0 788 | 787,"Sjoblom, Miss. Anna Sofia",female,18.0,0 789 | 788,"Rice, Master. George Hugh",male,8.0,4 790 | 789,"Dean, Master. Bertram Vere",male,1.0,1 791 | 790,"Guggenheim, Mr. Benjamin",male,46.0,0 792 | 791,"Keane, Mr. Andrew ""Andy""",male,,0 793 | 792,"Gaskell, Mr. Alfred",male,16.0,0 794 | 793,"Sage, Miss. Stella Anna",female,,8 795 | 794,"Hoyt, Mr. William Fisher",male,,0 796 | 795,"Dantcheff, Mr. Ristiu",male,25.0,0 797 | 796,"Otter, Mr. Richard",male,39.0,0 798 | 797,"Leader, Dr. Alice (Farnham)",female,49.0,0 799 | 798,"Osman, Mrs. Mara",female,31.0,0 800 | 799,"Ibrahim Shawah, Mr. Yousseff",male,30.0,0 801 | 800,"Van Impe, Mrs. Jean Baptiste (Rosalie Paula Govaert)",female,30.0,1 802 | 801,"Ponesell, Mr. Martin",male,34.0,0 803 | 802,"Collyer, Mrs. Harvey (Charlotte Annie Tate)",female,31.0,1 804 | 803,"Carter, Master. William Thornton II",male,11.0,1 805 | 804,"Thomas, Master. Assad Alexander",male,0.42,0 806 | 805,"Hedman, Mr. Oskar Arvid",male,27.0,0 807 | 806,"Johansson, Mr. Karl Johan",male,31.0,0 808 | 807,"Andrews, Mr. Thomas Jr",male,39.0,0 809 | 808,"Pettersson, Miss. Ellen Natalia",female,18.0,0 810 | 809,"Meyer, Mr. August",male,39.0,0 811 | 810,"Chambers, Mrs. Norman Campbell (Bertha Griggs)",female,33.0,1 812 | 811,"Alexander, Mr. William",male,26.0,0 813 | 812,"Lester, Mr. James",male,39.0,0 814 | 813,"Slemen, Mr. Richard James",male,35.0,0 815 | 814,"Andersson, Miss. Ebba Iris Alfrida",female,6.0,4 816 | 815,"Tomlin, Mr. Ernest Portage",male,30.5,0 817 | 816,"Fry, Mr. Richard",male,,0 818 | 817,"Heininen, Miss. Wendla Maria",female,23.0,0 819 | 818,"Mallet, Mr. Albert",male,31.0,1 820 | 819,"Holm, Mr. John Fredrik Alexander",male,43.0,0 821 | 820,"Skoog, Master. Karl Thorsten",male,10.0,3 822 | 821,"Hays, Mrs. Charles Melville (Clara Jennings Gregg)",female,52.0,1 823 | 822,"Lulic, Mr. Nikola",male,27.0,0 824 | 823,"Reuchlin, Jonkheer. John George",male,38.0,0 825 | 824,"Moor, Mrs. (Beila)",female,27.0,0 826 | 825,"Panula, Master. Urho Abraham",male,2.0,4 827 | 826,"Flynn, Mr. John",male,,0 828 | 827,"Lam, Mr. Len",male,,0 829 | 828,"Mallet, Master. Andre",male,1.0,0 830 | 829,"McCormack, Mr. Thomas Joseph",male,,0 831 | 830,"Stone, Mrs. George Nelson (Martha Evelyn)",female,62.0,0 832 | 831,"Yasbeck, Mrs. Antoni (Selini Alexander)",female,15.0,1 833 | 832,"Richards, Master. George Sibley",male,0.83,1 834 | 833,"Saad, Mr. Amin",male,,0 835 | 834,"Augustsson, Mr. Albert",male,23.0,0 836 | 835,"Allum, Mr. Owen George",male,18.0,0 837 | 836,"Compton, Miss. Sara Rebecca",female,39.0,1 838 | 837,"Pasic, Mr. Jakob",male,21.0,0 839 | 838,"Sirota, Mr. Maurice",male,,0 840 | 839,"Chip, Mr. Chang",male,32.0,0 841 | 840,"Marechal, Mr. Pierre",male,,0 842 | 841,"Alhomaki, Mr. Ilmari Rudolf",male,20.0,0 843 | 842,"Mudd, Mr. Thomas Charles",male,16.0,0 844 | 843,"Serepeca, Miss. Augusta",female,30.0,0 845 | 844,"Lemberopolous, Mr. Peter L",male,34.5,0 846 | 845,"Culumovic, Mr. Jeso",male,17.0,0 847 | 846,"Abbing, Mr. Anthony",male,42.0,0 848 | 847,"Sage, Mr. Douglas Bullen",male,,8 849 | 848,"Markoff, Mr. Marin",male,35.0,0 850 | 849,"Harper, Rev. John",male,28.0,0 851 | 850,"Goldenberg, Mrs. Samuel L (Edwiga Grabowska)",female,,1 852 | 851,"Andersson, Master. Sigvard Harald Elias",male,4.0,4 853 | 852,"Svensson, Mr. Johan",male,74.0,0 854 | 853,"Boulos, Miss. Nourelain",female,9.0,1 855 | 854,"Lines, Miss. Mary Conover",female,16.0,0 856 | 855,"Carter, Mrs. Ernest Courtenay (Lilian Hughes)",female,44.0,1 857 | 856,"Aks, Mrs. Sam (Leah Rosen)",female,18.0,0 858 | 857,"Wick, Mrs. George Dennick (Mary Hitchcock)",female,45.0,1 859 | 858,"Daly, Mr. Peter Denis ",male,51.0,0 860 | 859,"Baclini, Mrs. Solomon (Latifa Qurban)",female,24.0,0 861 | 860,"Razi, Mr. Raihed",male,,0 862 | 861,"Hansen, Mr. Claus Peter",male,41.0,2 863 | 862,"Giles, Mr. Frederick Edward",male,21.0,1 864 | 863,"Swift, Mrs. Frederick Joel (Margaret Welles Barron)",female,48.0,0 865 | 864,"Sage, Miss. Dorothy Edith ""Dolly""",female,,8 866 | 865,"Gill, Mr. John William",male,24.0,0 867 | 866,"Bystrom, Mrs. (Karolina)",female,42.0,0 868 | 867,"Duran y More, Miss. Asuncion",female,27.0,1 869 | 868,"Roebling, Mr. Washington Augustus II",male,31.0,0 870 | 869,"van Melkebeke, Mr. Philemon",male,,0 871 | 870,"Johnson, Master. Harold Theodor",male,4.0,1 872 | 871,"Balkic, Mr. Cerin",male,26.0,0 873 | 872,"Beckwith, Mrs. Richard Leonard (Sallie Monypeny)",female,47.0,1 874 | 873,"Carlsson, Mr. Frans Olof",male,33.0,0 875 | 874,"Vander Cruyssen, Mr. Victor",male,47.0,0 876 | 875,"Abelson, Mrs. Samuel (Hannah Wizosky)",female,28.0,1 877 | 876,"Najib, Miss. Adele Kiamie ""Jane""",female,15.0,0 878 | 877,"Gustafsson, Mr. Alfred Ossian",male,20.0,0 879 | 878,"Petroff, Mr. Nedelio",male,19.0,0 880 | 879,"Laleff, Mr. Kristo",male,,0 881 | 880,"Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)",female,56.0,0 882 | 881,"Shelley, Mrs. William (Imanita Parrish Hall)",female,25.0,0 883 | 882,"Markun, Mr. Johann",male,33.0,0 884 | 883,"Dahlberg, Miss. Gerda Ulrika",female,22.0,0 885 | 884,"Banfield, Mr. Frederick James",male,28.0,0 886 | 885,"Sutehall, Mr. Henry Jr",male,25.0,0 887 | 886,"Rice, Mrs. William (Margaret Norton)",female,39.0,0 888 | 887,"Montvila, Rev. Juozas",male,27.0,0 889 | 888,"Graham, Miss. Margaret Edith",female,19.0,0 890 | 889,"Johnston, Miss. Catherine Helen ""Carrie""",female,,1 891 | 890,"Behr, Mr. Karl Howell",male,26.0,0 892 | 891,"Dooley, Mr. Patrick",male,32.0,0 893 | -------------------------------------------------------------------------------- /data/passenger_labels.csv: -------------------------------------------------------------------------------- 1 | PassengerId,Survived 2 | 1,0 3 | 2,1 4 | 3,1 5 | 4,1 6 | 5,0 7 | 6,0 8 | 7,0 9 | 8,0 10 | 9,1 11 | 10,1 12 | 11,1 13 | 12,1 14 | 13,0 15 | 14,0 16 | 15,0 17 | 16,1 18 | 17,0 19 | 18,1 20 | 19,0 21 | 20,1 22 | 21,0 23 | 22,1 24 | 23,1 25 | 24,1 26 | 25,0 27 | 26,1 28 | 27,0 29 | 28,0 30 | 29,1 31 | 30,0 32 | 31,0 33 | 32,1 34 | 33,1 35 | 34,0 36 | 35,0 37 | 36,0 38 | 37,1 39 | 38,0 40 | 39,0 41 | 40,1 42 | 41,0 43 | 42,0 44 | 43,0 45 | 44,1 46 | 45,1 47 | 46,0 48 | 47,0 49 | 48,1 50 | 49,0 51 | 50,0 52 | 51,0 53 | 52,0 54 | 53,1 55 | 54,1 56 | 55,0 57 | 56,1 58 | 57,1 59 | 58,0 60 | 59,1 61 | 60,0 62 | 61,0 63 | 62,1 64 | 63,0 65 | 64,0 66 | 65,0 67 | 66,1 68 | 67,1 69 | 68,0 70 | 69,1 71 | 70,0 72 | 71,0 73 | 72,0 74 | 73,0 75 | 74,0 76 | 75,1 77 | 76,0 78 | 77,0 79 | 78,0 80 | 79,1 81 | 80,1 82 | 81,0 83 | 82,1 84 | 83,1 85 | 84,0 86 | 85,1 87 | 86,1 88 | 87,0 89 | 88,0 90 | 89,1 91 | 90,0 92 | 91,0 93 | 92,0 94 | 93,0 95 | 94,0 96 | 95,0 97 | 96,0 98 | 97,0 99 | 98,1 100 | 99,1 101 | 100,0 102 | 101,0 103 | 102,0 104 | 103,0 105 | 104,0 106 | 105,0 107 | 106,0 108 | 107,1 109 | 108,1 110 | 109,0 111 | 110,1 112 | 111,0 113 | 112,0 114 | 113,0 115 | 114,0 116 | 115,0 117 | 116,0 118 | 117,0 119 | 118,0 120 | 119,0 121 | 120,0 122 | 121,0 123 | 122,0 124 | 123,0 125 | 124,1 126 | 125,0 127 | 126,1 128 | 127,0 129 | 128,1 130 | 129,1 131 | 130,0 132 | 131,0 133 | 132,0 134 | 133,0 135 | 134,1 136 | 135,0 137 | 136,0 138 | 137,1 139 | 138,0 140 | 139,0 141 | 140,0 142 | 141,0 143 | 142,1 144 | 143,1 145 | 144,0 146 | 145,0 147 | 146,0 148 | 147,1 149 | 148,0 150 | 149,0 151 | 150,0 152 | 151,0 153 | 152,1 154 | 153,0 155 | 154,0 156 | 155,0 157 | 156,0 158 | 157,1 159 | 158,0 160 | 159,0 161 | 160,0 162 | 161,0 163 | 162,1 164 | 163,0 165 | 164,0 166 | 165,0 167 | 166,1 168 | 167,1 169 | 168,0 170 | 169,0 171 | 170,0 172 | 171,0 173 | 172,0 174 | 173,1 175 | 174,0 176 | 175,0 177 | 176,0 178 | 177,0 179 | 178,0 180 | 179,0 181 | 180,0 182 | 181,0 183 | 182,0 184 | 183,0 185 | 184,1 186 | 185,1 187 | 186,0 188 | 187,1 189 | 188,1 190 | 189,0 191 | 190,0 192 | 191,1 193 | 192,0 194 | 193,1 195 | 194,1 196 | 195,1 197 | 196,1 198 | 197,0 199 | 198,0 200 | 199,1 201 | 200,0 202 | 201,0 203 | 202,0 204 | 203,0 205 | 204,0 206 | 205,1 207 | 206,0 208 | 207,0 209 | 208,1 210 | 209,1 211 | 210,1 212 | 211,0 213 | 212,1 214 | 213,0 215 | 214,0 216 | 215,0 217 | 216,1 218 | 217,1 219 | 218,0 220 | 219,1 221 | 220,0 222 | 221,1 223 | 222,0 224 | 223,0 225 | 224,0 226 | 225,1 227 | 226,0 228 | 227,1 229 | 228,0 230 | 229,0 231 | 230,0 232 | 231,1 233 | 232,0 234 | 233,0 235 | 234,1 236 | 235,0 237 | 236,0 238 | 237,0 239 | 238,1 240 | 239,0 241 | 240,0 242 | 241,0 243 | 242,1 244 | 243,0 245 | 244,0 246 | 245,0 247 | 246,0 248 | 247,0 249 | 248,1 250 | 249,1 251 | 250,0 252 | 251,0 253 | 252,0 254 | 253,0 255 | 254,0 256 | 255,0 257 | 256,1 258 | 257,1 259 | 258,1 260 | 259,1 261 | 260,1 262 | 261,0 263 | 262,1 264 | 263,0 265 | 264,0 266 | 265,0 267 | 266,0 268 | 267,0 269 | 268,1 270 | 269,1 271 | 270,1 272 | 271,0 273 | 272,1 274 | 273,1 275 | 274,0 276 | 275,1 277 | 276,1 278 | 277,0 279 | 278,0 280 | 279,0 281 | 280,1 282 | 281,0 283 | 282,0 284 | 283,0 285 | 284,1 286 | 285,0 287 | 286,0 288 | 287,1 289 | 288,0 290 | 289,1 291 | 290,1 292 | 291,1 293 | 292,1 294 | 293,0 295 | 294,0 296 | 295,0 297 | 296,0 298 | 297,0 299 | 298,0 300 | 299,1 301 | 300,1 302 | 301,1 303 | 302,1 304 | 303,0 305 | 304,1 306 | 305,0 307 | 306,1 308 | 307,1 309 | 308,1 310 | 309,0 311 | 310,1 312 | 311,1 313 | 312,1 314 | 313,0 315 | 314,0 316 | 315,0 317 | 316,1 318 | 317,1 319 | 318,0 320 | 319,1 321 | 320,1 322 | 321,0 323 | 322,0 324 | 323,1 325 | 324,1 326 | 325,0 327 | 326,1 328 | 327,0 329 | 328,1 330 | 329,1 331 | 330,1 332 | 331,1 333 | 332,0 334 | 333,0 335 | 334,0 336 | 335,1 337 | 336,0 338 | 337,0 339 | 338,1 340 | 339,1 341 | 340,0 342 | 341,1 343 | 342,1 344 | 343,0 345 | 344,0 346 | 345,0 347 | 346,1 348 | 347,1 349 | 348,1 350 | 349,1 351 | 350,0 352 | 351,0 353 | 352,0 354 | 353,0 355 | 354,0 356 | 355,0 357 | 356,0 358 | 357,1 359 | 358,0 360 | 359,1 361 | 360,1 362 | 361,0 363 | 362,0 364 | 363,0 365 | 364,0 366 | 365,0 367 | 366,0 368 | 367,1 369 | 368,1 370 | 369,1 371 | 370,1 372 | 371,1 373 | 372,0 374 | 373,0 375 | 374,0 376 | 375,0 377 | 376,1 378 | 377,1 379 | 378,0 380 | 379,0 381 | 380,0 382 | 381,1 383 | 382,1 384 | 383,0 385 | 384,1 386 | 385,0 387 | 386,0 388 | 387,0 389 | 388,1 390 | 389,0 391 | 390,1 392 | 391,1 393 | 392,1 394 | 393,0 395 | 394,1 396 | 395,1 397 | 396,0 398 | 397,0 399 | 398,0 400 | 399,0 401 | 400,1 402 | 401,1 403 | 402,0 404 | 403,0 405 | 404,0 406 | 405,0 407 | 406,0 408 | 407,0 409 | 408,1 410 | 409,0 411 | 410,0 412 | 411,0 413 | 412,0 414 | 413,1 415 | 414,0 416 | 415,1 417 | 416,0 418 | 417,1 419 | 418,1 420 | 419,0 421 | 420,0 422 | 421,0 423 | 422,0 424 | 423,0 425 | 424,0 426 | 425,0 427 | 426,0 428 | 427,1 429 | 428,1 430 | 429,0 431 | 430,1 432 | 431,1 433 | 432,1 434 | 433,1 435 | 434,0 436 | 435,0 437 | 436,1 438 | 437,0 439 | 438,1 440 | 439,0 441 | 440,0 442 | 441,1 443 | 442,0 444 | 443,0 445 | 444,1 446 | 445,1 447 | 446,1 448 | 447,1 449 | 448,1 450 | 449,1 451 | 450,1 452 | 451,0 453 | 452,0 454 | 453,0 455 | 454,1 456 | 455,0 457 | 456,1 458 | 457,0 459 | 458,1 460 | 459,1 461 | 460,0 462 | 461,1 463 | 462,0 464 | 463,0 465 | 464,0 466 | 465,0 467 | 466,0 468 | 467,0 469 | 468,0 470 | 469,0 471 | 470,1 472 | 471,0 473 | 472,0 474 | 473,1 475 | 474,1 476 | 475,0 477 | 476,0 478 | 477,0 479 | 478,0 480 | 479,0 481 | 480,1 482 | 481,0 483 | 482,0 484 | 483,0 485 | 484,1 486 | 485,1 487 | 486,0 488 | 487,1 489 | 488,0 490 | 489,0 491 | 490,1 492 | 491,0 493 | 492,0 494 | 493,0 495 | 494,0 496 | 495,0 497 | 496,0 498 | 497,1 499 | 498,0 500 | 499,0 501 | 500,0 502 | 501,0 503 | 502,0 504 | 503,0 505 | 504,0 506 | 505,1 507 | 506,0 508 | 507,1 509 | 508,1 510 | 509,0 511 | 510,1 512 | 511,1 513 | 512,0 514 | 513,1 515 | 514,1 516 | 515,0 517 | 516,0 518 | 517,1 519 | 518,0 520 | 519,1 521 | 520,0 522 | 521,1 523 | 522,0 524 | 523,0 525 | 524,1 526 | 525,0 527 | 526,0 528 | 527,1 529 | 528,0 530 | 529,0 531 | 530,0 532 | 531,1 533 | 532,0 534 | 533,0 535 | 534,1 536 | 535,0 537 | 536,1 538 | 537,0 539 | 538,1 540 | 539,0 541 | 540,1 542 | 541,1 543 | 542,0 544 | 543,0 545 | 544,1 546 | 545,0 547 | 546,0 548 | 547,1 549 | 548,1 550 | 549,0 551 | 550,1 552 | 551,1 553 | 552,0 554 | 553,0 555 | 554,1 556 | 555,1 557 | 556,0 558 | 557,1 559 | 558,0 560 | 559,1 561 | 560,1 562 | 561,0 563 | 562,0 564 | 563,0 565 | 564,0 566 | 565,0 567 | 566,0 568 | 567,0 569 | 568,0 570 | 569,0 571 | 570,1 572 | 571,1 573 | 572,1 574 | 573,1 575 | 574,1 576 | 575,0 577 | 576,0 578 | 577,1 579 | 578,1 580 | 579,0 581 | 580,1 582 | 581,1 583 | 582,1 584 | 583,0 585 | 584,0 586 | 585,0 587 | 586,1 588 | 587,0 589 | 588,1 590 | 589,0 591 | 590,0 592 | 591,0 593 | 592,1 594 | 593,0 595 | 594,0 596 | 595,0 597 | 596,0 598 | 597,1 599 | 598,0 600 | 599,0 601 | 600,1 602 | 601,1 603 | 602,0 604 | 603,0 605 | 604,0 606 | 605,1 607 | 606,0 608 | 607,0 609 | 608,1 610 | 609,1 611 | 610,1 612 | 611,0 613 | 612,0 614 | 613,1 615 | 614,0 616 | 615,0 617 | 616,1 618 | 617,0 619 | 618,0 620 | 619,1 621 | 620,0 622 | 621,0 623 | 622,1 624 | 623,1 625 | 624,0 626 | 625,0 627 | 626,0 628 | 627,0 629 | 628,1 630 | 629,0 631 | 630,0 632 | 631,1 633 | 632,0 634 | 633,1 635 | 634,0 636 | 635,0 637 | 636,1 638 | 637,0 639 | 638,0 640 | 639,0 641 | 640,0 642 | 641,0 643 | 642,1 644 | 643,0 645 | 644,1 646 | 645,1 647 | 646,1 648 | 647,0 649 | 648,1 650 | 649,0 651 | 650,1 652 | 651,0 653 | 652,1 654 | 653,0 655 | 654,1 656 | 655,0 657 | 656,0 658 | 657,0 659 | 658,0 660 | 659,0 661 | 660,0 662 | 661,1 663 | 662,0 664 | 663,0 665 | 664,0 666 | 665,1 667 | 666,0 668 | 667,0 669 | 668,0 670 | 669,0 671 | 670,1 672 | 671,1 673 | 672,0 674 | 673,0 675 | 674,1 676 | 675,0 677 | 676,0 678 | 677,0 679 | 678,1 680 | 679,0 681 | 680,1 682 | 681,0 683 | 682,1 684 | 683,0 685 | 684,0 686 | 685,0 687 | 686,0 688 | 687,0 689 | 688,0 690 | 689,0 691 | 690,1 692 | 691,1 693 | 692,1 694 | 693,1 695 | 694,0 696 | 695,0 697 | 696,0 698 | 697,0 699 | 698,1 700 | 699,0 701 | 700,0 702 | 701,1 703 | 702,1 704 | 703,0 705 | 704,0 706 | 705,0 707 | 706,0 708 | 707,1 709 | 708,1 710 | 709,1 711 | 710,1 712 | 711,1 713 | 712,0 714 | 713,1 715 | 714,0 716 | 715,0 717 | 716,0 718 | 717,1 719 | 718,1 720 | 719,0 721 | 720,0 722 | 721,1 723 | 722,0 724 | 723,0 725 | 724,0 726 | 725,1 727 | 726,0 728 | 727,1 729 | 728,1 730 | 729,0 731 | 730,0 732 | 731,1 733 | 732,0 734 | 733,0 735 | 734,0 736 | 735,0 737 | 736,0 738 | 737,0 739 | 738,1 740 | 739,0 741 | 740,0 742 | 741,1 743 | 742,0 744 | 743,1 745 | 744,0 746 | 745,1 747 | 746,0 748 | 747,0 749 | 748,1 750 | 749,0 751 | 750,0 752 | 751,1 753 | 752,1 754 | 753,0 755 | 754,0 756 | 755,1 757 | 756,1 758 | 757,0 759 | 758,0 760 | 759,0 761 | 760,1 762 | 761,0 763 | 762,0 764 | 763,1 765 | 764,1 766 | 765,0 767 | 766,1 768 | 767,0 769 | 768,0 770 | 769,0 771 | 770,0 772 | 771,0 773 | 772,0 774 | 773,0 775 | 774,0 776 | 775,1 777 | 776,0 778 | 777,0 779 | 778,1 780 | 779,0 781 | 780,1 782 | 781,1 783 | 782,1 784 | 783,0 785 | 784,0 786 | 785,0 787 | 786,0 788 | 787,1 789 | 788,0 790 | 789,1 791 | 790,0 792 | 791,0 793 | 792,0 794 | 793,0 795 | 794,0 796 | 795,0 797 | 796,0 798 | 797,1 799 | 798,1 800 | 799,0 801 | 800,0 802 | 801,0 803 | 802,1 804 | 803,1 805 | 804,1 806 | 805,1 807 | 806,0 808 | 807,0 809 | 808,0 810 | 809,0 811 | 810,1 812 | 811,0 813 | 812,0 814 | 813,0 815 | 814,0 816 | 815,0 817 | 816,0 818 | 817,0 819 | 818,0 820 | 819,0 821 | 820,0 822 | 821,1 823 | 822,1 824 | 823,0 825 | 824,1 826 | 825,0 827 | 826,0 828 | 827,0 829 | 828,1 830 | 829,1 831 | 830,1 832 | 831,1 833 | 832,1 834 | 833,0 835 | 834,0 836 | 835,0 837 | 836,1 838 | 837,0 839 | 838,0 840 | 839,1 841 | 840,1 842 | 841,0 843 | 842,0 844 | 843,1 845 | 844,0 846 | 845,0 847 | 846,0 848 | 847,0 849 | 848,0 850 | 849,0 851 | 850,1 852 | 851,0 853 | 852,0 854 | 853,0 855 | 854,1 856 | 855,0 857 | 856,1 858 | 857,1 859 | 858,1 860 | 859,1 861 | 860,0 862 | 861,0 863 | 862,0 864 | 863,1 865 | 864,0 866 | 865,0 867 | 866,1 868 | 867,1 869 | 868,0 870 | 869,0 871 | 870,1 872 | 871,0 873 | 872,1 874 | 873,0 875 | 874,0 876 | 875,1 877 | 876,1 878 | 877,0 879 | 878,0 880 | 879,0 881 | 880,1 882 | 881,1 883 | 882,0 884 | 883,0 885 | 884,0 886 | 885,0 887 | 886,0 888 | 887,0 889 | 888,1 890 | 889,0 891 | 890,1 892 | 891,0 893 | -------------------------------------------------------------------------------- /data/passenger_ticket.csv: -------------------------------------------------------------------------------- 1 | PassengerId,Ticket,Fare,Cabin,Embarked,Pclass,Parch 2 | 1,A/5 21171,7.25,,S,3,0 3 | 2,PC 17599,71.2833,C85,C,1,0 4 | 3,STON/O2. 3101282,7.925,,S,3,0 5 | 4,113803,53.1,C123,S,1,0 6 | 5,373450,8.05,,S,3,0 7 | 6,330877,8.4583,,Q,3,0 8 | 7,17463,51.8625,E46,S,1,0 9 | 8,349909,21.075,,S,3,1 10 | 9,347742,11.1333,,S,3,2 11 | 10,237736,30.0708,,C,2,0 12 | 11,PP 9549,16.7,G6,S,3,1 13 | 12,113783,26.55,C103,S,1,0 14 | 13,A/5. 2151,8.05,,S,3,0 15 | 14,347082,31.275,,S,3,5 16 | 15,350406,7.8542,,S,3,0 17 | 16,248706,16.0,,S,2,0 18 | 17,382652,29.125,,Q,3,1 19 | 18,244373,13.0,,S,2,0 20 | 19,345763,18.0,,S,3,0 21 | 20,2649,7.225,,C,3,0 22 | 21,239865,26.0,,S,2,0 23 | 22,248698,13.0,D56,S,2,0 24 | 23,330923,8.0292,,Q,3,0 25 | 24,113788,35.5,A6,S,1,0 26 | 25,349909,21.075,,S,3,1 27 | 26,347077,31.3875,,S,3,5 28 | 27,2631,7.225,,C,3,0 29 | 28,19950,263.0,C23 C25 C27,S,1,2 30 | 29,330959,7.8792,,Q,3,0 31 | 30,349216,7.8958,,S,3,0 32 | 31,PC 17601,27.7208,,C,1,0 33 | 32,PC 17569,146.5208,B78,C,1,0 34 | 33,335677,7.75,,Q,3,0 35 | 34,C.A. 24579,10.5,,S,2,0 36 | 35,PC 17604,82.1708,,C,1,0 37 | 36,113789,52.0,,S,1,0 38 | 37,2677,7.2292,,C,3,0 39 | 38,A./5. 2152,8.05,,S,3,0 40 | 39,345764,18.0,,S,3,0 41 | 40,2651,11.2417,,C,3,0 42 | 41,7546,9.475,,S,3,0 43 | 42,11668,21.0,,S,2,0 44 | 43,349253,7.8958,,C,3,0 45 | 44,SC/Paris 2123,41.5792,,C,2,2 46 | 45,330958,7.8792,,Q,3,0 47 | 46,S.C./A.4. 23567,8.05,,S,3,0 48 | 47,370371,15.5,,Q,3,0 49 | 48,14311,7.75,,Q,3,0 50 | 49,2662,21.6792,,C,3,0 51 | 50,349237,17.8,,S,3,0 52 | 51,3101295,39.6875,,S,3,1 53 | 52,A/4. 39886,7.8,,S,3,0 54 | 53,PC 17572,76.7292,D33,C,1,0 55 | 54,2926,26.0,,S,2,0 56 | 55,113509,61.9792,B30,C,1,1 57 | 56,19947,35.5,C52,S,1,0 58 | 57,C.A. 31026,10.5,,S,2,0 59 | 58,2697,7.2292,,C,3,0 60 | 59,C.A. 34651,27.75,,S,2,2 61 | 60,CA 2144,46.9,,S,3,2 62 | 61,2669,7.2292,,C,3,0 63 | 62,113572,80.0,B28,,1,0 64 | 63,36973,83.475,C83,S,1,0 65 | 64,347088,27.9,,S,3,2 66 | 65,PC 17605,27.7208,,C,1,0 67 | 66,2661,15.2458,,C,3,1 68 | 67,C.A. 29395,10.5,F33,S,2,0 69 | 68,S.P. 3464,8.1583,,S,3,0 70 | 69,3101281,7.925,,S,3,2 71 | 70,315151,8.6625,,S,3,0 72 | 71,C.A. 33111,10.5,,S,2,0 73 | 72,CA 2144,46.9,,S,3,2 74 | 73,S.O.C. 14879,73.5,,S,2,0 75 | 74,2680,14.4542,,C,3,0 76 | 75,1601,56.4958,,S,3,0 77 | 76,348123,7.65,F G73,S,3,0 78 | 77,349208,7.8958,,S,3,0 79 | 78,374746,8.05,,S,3,0 80 | 79,248738,29.0,,S,2,2 81 | 80,364516,12.475,,S,3,0 82 | 81,345767,9.0,,S,3,0 83 | 82,345779,9.5,,S,3,0 84 | 83,330932,7.7875,,Q,3,0 85 | 84,113059,47.1,,S,1,0 86 | 85,SO/C 14885,10.5,,S,2,0 87 | 86,3101278,15.85,,S,3,0 88 | 87,W./C. 6608,34.375,,S,3,3 89 | 88,SOTON/OQ 392086,8.05,,S,3,0 90 | 89,19950,263.0,C23 C25 C27,S,1,2 91 | 90,343275,8.05,,S,3,0 92 | 91,343276,8.05,,S,3,0 93 | 92,347466,7.8542,,S,3,0 94 | 93,W.E.P. 5734,61.175,E31,S,1,0 95 | 94,C.A. 2315,20.575,,S,3,2 96 | 95,364500,7.25,,S,3,0 97 | 96,374910,8.05,,S,3,0 98 | 97,PC 17754,34.6542,A5,C,1,0 99 | 98,PC 17759,63.3583,D10 D12,C,1,1 100 | 99,231919,23.0,,S,2,1 101 | 100,244367,26.0,,S,2,0 102 | 101,349245,7.8958,,S,3,0 103 | 102,349215,7.8958,,S,3,0 104 | 103,35281,77.2875,D26,S,1,1 105 | 104,7540,8.6542,,S,3,0 106 | 105,3101276,7.925,,S,3,0 107 | 106,349207,7.8958,,S,3,0 108 | 107,343120,7.65,,S,3,0 109 | 108,312991,7.775,,S,3,0 110 | 109,349249,7.8958,,S,3,0 111 | 110,371110,24.15,,Q,3,0 112 | 111,110465,52.0,C110,S,1,0 113 | 112,2665,14.4542,,C,3,0 114 | 113,324669,8.05,,S,3,0 115 | 114,4136,9.825,,S,3,0 116 | 115,2627,14.4583,,C,3,0 117 | 116,STON/O 2. 3101294,7.925,,S,3,0 118 | 117,370369,7.75,,Q,3,0 119 | 118,11668,21.0,,S,2,0 120 | 119,PC 17558,247.5208,B58 B60,C,1,1 121 | 120,347082,31.275,,S,3,2 122 | 121,S.O.C. 14879,73.5,,S,2,0 123 | 122,A4. 54510,8.05,,S,3,0 124 | 123,237736,30.0708,,C,2,0 125 | 124,27267,13.0,E101,S,2,0 126 | 125,35281,77.2875,D26,S,1,1 127 | 126,2651,11.2417,,C,3,0 128 | 127,370372,7.75,,Q,3,0 129 | 128,C 17369,7.1417,,S,3,0 130 | 129,2668,22.3583,F E69,C,3,1 131 | 130,347061,6.975,,S,3,0 132 | 131,349241,7.8958,,C,3,0 133 | 132,SOTON/O.Q. 3101307,7.05,,S,3,0 134 | 133,A/5. 3337,14.5,,S,3,0 135 | 134,228414,26.0,,S,2,0 136 | 135,C.A. 29178,13.0,,S,2,0 137 | 136,SC/PARIS 2133,15.0458,,C,2,0 138 | 137,11752,26.2833,D47,S,1,2 139 | 138,113803,53.1,C123,S,1,0 140 | 139,7534,9.2167,,S,3,0 141 | 140,PC 17593,79.2,B86,C,1,0 142 | 141,2678,15.2458,,C,3,2 143 | 142,347081,7.75,,S,3,0 144 | 143,STON/O2. 3101279,15.85,,S,3,0 145 | 144,365222,6.75,,Q,3,0 146 | 145,231945,11.5,,S,2,0 147 | 146,C.A. 33112,36.75,,S,2,1 148 | 147,350043,7.7958,,S,3,0 149 | 148,W./C. 6608,34.375,,S,3,2 150 | 149,230080,26.0,F2,S,2,2 151 | 150,244310,13.0,,S,2,0 152 | 151,S.O.P. 1166,12.525,,S,2,0 153 | 152,113776,66.6,C2,S,1,0 154 | 153,A.5. 11206,8.05,,S,3,0 155 | 154,A/5. 851,14.5,,S,3,2 156 | 155,Fa 265302,7.3125,,S,3,0 157 | 156,PC 17597,61.3792,,C,1,1 158 | 157,35851,7.7333,,Q,3,0 159 | 158,SOTON/OQ 392090,8.05,,S,3,0 160 | 159,315037,8.6625,,S,3,0 161 | 160,CA. 2343,69.55,,S,3,2 162 | 161,371362,16.1,,S,3,1 163 | 162,C.A. 33595,15.75,,S,2,0 164 | 163,347068,7.775,,S,3,0 165 | 164,315093,8.6625,,S,3,0 166 | 165,3101295,39.6875,,S,3,1 167 | 166,363291,20.525,,S,3,2 168 | 167,113505,55.0,E33,S,1,1 169 | 168,347088,27.9,,S,3,4 170 | 169,PC 17318,25.925,,S,1,0 171 | 170,1601,56.4958,,S,3,0 172 | 171,111240,33.5,B19,S,1,0 173 | 172,382652,29.125,,Q,3,1 174 | 173,347742,11.1333,,S,3,1 175 | 174,STON/O 2. 3101280,7.925,,S,3,0 176 | 175,17764,30.6958,A7,C,1,0 177 | 176,350404,7.8542,,S,3,1 178 | 177,4133,25.4667,,S,3,1 179 | 178,PC 17595,28.7125,C49,C,1,0 180 | 179,250653,13.0,,S,2,0 181 | 180,LINE,0.0,,S,3,0 182 | 181,CA. 2343,69.55,,S,3,2 183 | 182,SC/PARIS 2131,15.05,,C,2,0 184 | 183,347077,31.3875,,S,3,2 185 | 184,230136,39.0,F4,S,2,1 186 | 185,315153,22.025,,S,3,2 187 | 186,113767,50.0,A32,S,1,0 188 | 187,370365,15.5,,Q,3,0 189 | 188,111428,26.55,,S,1,0 190 | 189,364849,15.5,,Q,3,1 191 | 190,349247,7.8958,,S,3,0 192 | 191,234604,13.0,,S,2,0 193 | 192,28424,13.0,,S,2,0 194 | 193,350046,7.8542,,S,3,0 195 | 194,230080,26.0,F2,S,2,1 196 | 195,PC 17610,27.7208,B4,C,1,0 197 | 196,PC 17569,146.5208,B80,C,1,0 198 | 197,368703,7.75,,Q,3,0 199 | 198,4579,8.4042,,S,3,1 200 | 199,370370,7.75,,Q,3,0 201 | 200,248747,13.0,,S,2,0 202 | 201,345770,9.5,,S,3,0 203 | 202,CA. 2343,69.55,,S,3,2 204 | 203,3101264,6.4958,,S,3,0 205 | 204,2628,7.225,,C,3,0 206 | 205,A/5 3540,8.05,,S,3,0 207 | 206,347054,10.4625,G6,S,3,1 208 | 207,3101278,15.85,,S,3,0 209 | 208,2699,18.7875,,C,3,0 210 | 209,367231,7.75,,Q,3,0 211 | 210,112277,31.0,A31,C,1,0 212 | 211,SOTON/O.Q. 3101311,7.05,,S,3,0 213 | 212,F.C.C. 13528,21.0,,S,2,0 214 | 213,A/5 21174,7.25,,S,3,0 215 | 214,250646,13.0,,S,2,0 216 | 215,367229,7.75,,Q,3,0 217 | 216,35273,113.275,D36,C,1,0 218 | 217,STON/O2. 3101283,7.925,,S,3,0 219 | 218,243847,27.0,,S,2,0 220 | 219,11813,76.2917,D15,C,1,0 221 | 220,W/C 14208,10.5,,S,2,0 222 | 221,SOTON/OQ 392089,8.05,,S,3,0 223 | 222,220367,13.0,,S,2,0 224 | 223,21440,8.05,,S,3,0 225 | 224,349234,7.8958,,S,3,0 226 | 225,19943,90.0,C93,S,1,0 227 | 226,PP 4348,9.35,,S,3,0 228 | 227,SW/PP 751,10.5,,S,2,0 229 | 228,A/5 21173,7.25,,S,3,0 230 | 229,236171,13.0,,S,2,0 231 | 230,4133,25.4667,,S,3,1 232 | 231,36973,83.475,C83,S,1,0 233 | 232,347067,7.775,,S,3,0 234 | 233,237442,13.5,,S,2,0 235 | 234,347077,31.3875,,S,3,2 236 | 235,C.A. 29566,10.5,,S,2,0 237 | 236,W./C. 6609,7.55,,S,3,0 238 | 237,26707,26.0,,S,2,0 239 | 238,C.A. 31921,26.25,,S,2,2 240 | 239,28665,10.5,,S,2,0 241 | 240,SCO/W 1585,12.275,,S,2,0 242 | 241,2665,14.4542,,C,3,0 243 | 242,367230,15.5,,Q,3,0 244 | 243,W./C. 14263,10.5,,S,2,0 245 | 244,STON/O 2. 3101275,7.125,,S,3,0 246 | 245,2694,7.225,,C,3,0 247 | 246,19928,90.0,C78,Q,1,0 248 | 247,347071,7.775,,S,3,0 249 | 248,250649,14.5,,S,2,2 250 | 249,11751,52.5542,D35,S,1,1 251 | 250,244252,26.0,,S,2,0 252 | 251,362316,7.25,,S,3,0 253 | 252,347054,10.4625,G6,S,3,1 254 | 253,113514,26.55,C87,S,1,0 255 | 254,A/5. 3336,16.1,,S,3,0 256 | 255,370129,20.2125,,S,3,2 257 | 256,2650,15.2458,,C,3,2 258 | 257,PC 17585,79.2,,C,1,0 259 | 258,110152,86.5,B77,S,1,0 260 | 259,PC 17755,512.3292,,C,1,0 261 | 260,230433,26.0,,S,2,1 262 | 261,384461,7.75,,Q,3,0 263 | 262,347077,31.3875,,S,3,2 264 | 263,110413,79.65,E67,S,1,1 265 | 264,112059,0.0,B94,S,1,0 266 | 265,382649,7.75,,Q,3,0 267 | 266,C.A. 17248,10.5,,S,2,0 268 | 267,3101295,39.6875,,S,3,1 269 | 268,347083,7.775,,S,3,0 270 | 269,PC 17582,153.4625,C125,S,1,1 271 | 270,PC 17760,135.6333,C99,S,1,0 272 | 271,113798,31.0,,S,1,0 273 | 272,LINE,0.0,,S,3,0 274 | 273,250644,19.5,,S,2,1 275 | 274,PC 17596,29.7,C118,C,1,1 276 | 275,370375,7.75,,Q,3,0 277 | 276,13502,77.9583,D7,S,1,0 278 | 277,347073,7.75,,S,3,0 279 | 278,239853,0.0,,S,2,0 280 | 279,382652,29.125,,Q,3,1 281 | 280,C.A. 2673,20.25,,S,3,1 282 | 281,336439,7.75,,Q,3,0 283 | 282,347464,7.8542,,S,3,0 284 | 283,345778,9.5,,S,3,0 285 | 284,A/5. 10482,8.05,,S,3,0 286 | 285,113056,26.0,A19,S,1,0 287 | 286,349239,8.6625,,C,3,0 288 | 287,345774,9.5,,S,3,0 289 | 288,349206,7.8958,,S,3,0 290 | 289,237798,13.0,,S,2,0 291 | 290,370373,7.75,,Q,3,0 292 | 291,19877,78.85,,S,1,0 293 | 292,11967,91.0792,B49,C,1,0 294 | 293,SC/Paris 2163,12.875,D,C,2,0 295 | 294,349236,8.85,,S,3,0 296 | 295,349233,7.8958,,S,3,0 297 | 296,PC 17612,27.7208,,C,1,0 298 | 297,2693,7.2292,,C,3,0 299 | 298,113781,151.55,C22 C26,S,1,2 300 | 299,19988,30.5,C106,S,1,0 301 | 300,PC 17558,247.5208,B58 B60,C,1,1 302 | 301,9234,7.75,,Q,3,0 303 | 302,367226,23.25,,Q,3,0 304 | 303,LINE,0.0,,S,3,0 305 | 304,226593,12.35,E101,Q,2,0 306 | 305,A/5 2466,8.05,,S,3,0 307 | 306,113781,151.55,C22 C26,S,1,2 308 | 307,17421,110.8833,,C,1,0 309 | 308,PC 17758,108.9,C65,C,1,0 310 | 309,P/PP 3381,24.0,,C,2,0 311 | 310,PC 17485,56.9292,E36,C,1,0 312 | 311,11767,83.1583,C54,C,1,0 313 | 312,PC 17608,262.375,B57 B59 B63 B66,C,1,2 314 | 313,250651,26.0,,S,2,1 315 | 314,349243,7.8958,,S,3,0 316 | 315,F.C.C. 13529,26.25,,S,2,1 317 | 316,347470,7.8542,,S,3,0 318 | 317,244367,26.0,,S,2,0 319 | 318,29011,14.0,,S,2,0 320 | 319,36928,164.8667,C7,S,1,2 321 | 320,16966,134.5,E34,C,1,1 322 | 321,A/5 21172,7.25,,S,3,0 323 | 322,349219,7.8958,,S,3,0 324 | 323,234818,12.35,,Q,2,0 325 | 324,248738,29.0,,S,2,1 326 | 325,CA. 2343,69.55,,S,3,2 327 | 326,PC 17760,135.6333,C32,C,1,0 328 | 327,345364,6.2375,,S,3,0 329 | 328,28551,13.0,D,S,2,0 330 | 329,363291,20.525,,S,3,1 331 | 330,111361,57.9792,B18,C,1,1 332 | 331,367226,23.25,,Q,3,0 333 | 332,113043,28.5,C124,S,1,0 334 | 333,PC 17582,153.4625,C91,S,1,1 335 | 334,345764,18.0,,S,3,0 336 | 335,PC 17611,133.65,,S,1,0 337 | 336,349225,7.8958,,S,3,0 338 | 337,113776,66.6,C2,S,1,0 339 | 338,16966,134.5,E40,C,1,0 340 | 339,7598,8.05,,S,3,0 341 | 340,113784,35.5,T,S,1,0 342 | 341,230080,26.0,F2,S,2,1 343 | 342,19950,263.0,C23 C25 C27,S,1,2 344 | 343,248740,13.0,,S,2,0 345 | 344,244361,13.0,,S,2,0 346 | 345,229236,13.0,,S,2,0 347 | 346,248733,13.0,F33,S,2,0 348 | 347,31418,13.0,,S,2,0 349 | 348,386525,16.1,,S,3,0 350 | 349,C.A. 37671,15.9,,S,3,1 351 | 350,315088,8.6625,,S,3,0 352 | 351,7267,9.225,,S,3,0 353 | 352,113510,35.0,C128,S,1,0 354 | 353,2695,7.2292,,C,3,1 355 | 354,349237,17.8,,S,3,0 356 | 355,2647,7.225,,C,3,0 357 | 356,345783,9.5,,S,3,0 358 | 357,113505,55.0,E33,S,1,1 359 | 358,237671,13.0,,S,2,0 360 | 359,330931,7.8792,,Q,3,0 361 | 360,330980,7.8792,,Q,3,0 362 | 361,347088,27.9,,S,3,4 363 | 362,SC/PARIS 2167,27.7208,,C,2,0 364 | 363,2691,14.4542,,C,3,1 365 | 364,SOTON/O.Q. 3101310,7.05,,S,3,0 366 | 365,370365,15.5,,Q,3,0 367 | 366,C 7076,7.25,,S,3,0 368 | 367,110813,75.25,D37,C,1,0 369 | 368,2626,7.2292,,C,3,0 370 | 369,14313,7.75,,Q,3,0 371 | 370,PC 17477,69.3,B35,C,1,0 372 | 371,11765,55.4417,E50,C,1,0 373 | 372,3101267,6.4958,,S,3,0 374 | 373,323951,8.05,,S,3,0 375 | 374,PC 17760,135.6333,,C,1,0 376 | 375,349909,21.075,,S,3,1 377 | 376,PC 17604,82.1708,,C,1,0 378 | 377,C 7077,7.25,,S,3,0 379 | 378,113503,211.5,C82,C,1,2 380 | 379,2648,4.0125,,C,3,0 381 | 380,347069,7.775,,S,3,0 382 | 381,PC 17757,227.525,,C,1,0 383 | 382,2653,15.7417,,C,3,2 384 | 383,STON/O 2. 3101293,7.925,,S,3,0 385 | 384,113789,52.0,,S,1,0 386 | 385,349227,7.8958,,S,3,0 387 | 386,S.O.C. 14879,73.5,,S,2,0 388 | 387,CA 2144,46.9,,S,3,2 389 | 388,27849,13.0,,S,2,0 390 | 389,367655,7.7292,,Q,3,0 391 | 390,SC 1748,12.0,,C,2,0 392 | 391,113760,120.0,B96 B98,S,1,2 393 | 392,350034,7.7958,,S,3,0 394 | 393,3101277,7.925,,S,3,0 395 | 394,35273,113.275,D36,C,1,0 396 | 395,PP 9549,16.7,G6,S,3,2 397 | 396,350052,7.7958,,S,3,0 398 | 397,350407,7.8542,,S,3,0 399 | 398,28403,26.0,,S,2,0 400 | 399,244278,10.5,,S,2,0 401 | 400,240929,12.65,,S,2,0 402 | 401,STON/O 2. 3101289,7.925,,S,3,0 403 | 402,341826,8.05,,S,3,0 404 | 403,4137,9.825,,S,3,0 405 | 404,STON/O2. 3101279,15.85,,S,3,0 406 | 405,315096,8.6625,,S,3,0 407 | 406,28664,21.0,,S,2,0 408 | 407,347064,7.75,,S,3,0 409 | 408,29106,18.75,,S,2,1 410 | 409,312992,7.775,,S,3,0 411 | 410,4133,25.4667,,S,3,1 412 | 411,349222,7.8958,,S,3,0 413 | 412,394140,6.8583,,Q,3,0 414 | 413,19928,90.0,C78,Q,1,0 415 | 414,239853,0.0,,S,2,0 416 | 415,STON/O 2. 3101269,7.925,,S,3,0 417 | 416,343095,8.05,,S,3,0 418 | 417,28220,32.5,,S,2,1 419 | 418,250652,13.0,,S,2,2 420 | 419,28228,13.0,,S,2,0 421 | 420,345773,24.15,,S,3,2 422 | 421,349254,7.8958,,C,3,0 423 | 422,A/5. 13032,7.7333,,Q,3,0 424 | 423,315082,7.875,,S,3,0 425 | 424,347080,14.4,,S,3,1 426 | 425,370129,20.2125,,S,3,1 427 | 426,A/4. 34244,7.25,,S,3,0 428 | 427,2003,26.0,,S,2,0 429 | 428,250655,26.0,,S,2,0 430 | 429,364851,7.75,,Q,3,0 431 | 430,SOTON/O.Q. 392078,8.05,E10,S,3,0 432 | 431,110564,26.55,C52,S,1,0 433 | 432,376564,16.1,,S,3,0 434 | 433,SC/AH 3085,26.0,,S,2,0 435 | 434,STON/O 2. 3101274,7.125,,S,3,0 436 | 435,13507,55.9,E44,S,1,0 437 | 436,113760,120.0,B96 B98,S,1,2 438 | 437,W./C. 6608,34.375,,S,3,2 439 | 438,29106,18.75,,S,2,3 440 | 439,19950,263.0,C23 C25 C27,S,1,4 441 | 440,C.A. 18723,10.5,,S,2,0 442 | 441,F.C.C. 13529,26.25,,S,2,1 443 | 442,345769,9.5,,S,3,0 444 | 443,347076,7.775,,S,3,0 445 | 444,230434,13.0,,S,2,0 446 | 445,65306,8.1125,,S,3,0 447 | 446,33638,81.8583,A34,S,1,2 448 | 447,250644,19.5,,S,2,1 449 | 448,113794,26.55,,S,1,0 450 | 449,2666,19.2583,,C,3,1 451 | 450,113786,30.5,C104,S,1,0 452 | 451,C.A. 34651,27.75,,S,2,2 453 | 452,65303,19.9667,,S,3,0 454 | 453,113051,27.75,C111,C,1,0 455 | 454,17453,89.1042,C92,C,1,0 456 | 455,A/5 2817,8.05,,S,3,0 457 | 456,349240,7.8958,,C,3,0 458 | 457,13509,26.55,E38,S,1,0 459 | 458,17464,51.8625,D21,S,1,0 460 | 459,F.C.C. 13531,10.5,,S,2,0 461 | 460,371060,7.75,,Q,3,0 462 | 461,19952,26.55,E12,S,1,0 463 | 462,364506,8.05,,S,3,0 464 | 463,111320,38.5,E63,S,1,0 465 | 464,234360,13.0,,S,2,0 466 | 465,A/S 2816,8.05,,S,3,0 467 | 466,SOTON/O.Q. 3101306,7.05,,S,3,0 468 | 467,239853,0.0,,S,2,0 469 | 468,113792,26.55,,S,1,0 470 | 469,36209,7.725,,Q,3,0 471 | 470,2666,19.2583,,C,3,1 472 | 471,323592,7.25,,S,3,0 473 | 472,315089,8.6625,,S,3,0 474 | 473,C.A. 34651,27.75,,S,2,2 475 | 474,SC/AH Basle 541,13.7917,D,C,2,0 476 | 475,7553,9.8375,,S,3,0 477 | 476,110465,52.0,A14,S,1,0 478 | 477,31027,21.0,,S,2,0 479 | 478,3460,7.0458,,S,3,0 480 | 479,350060,7.5208,,S,3,0 481 | 480,3101298,12.2875,,S,3,1 482 | 481,CA 2144,46.9,,S,3,2 483 | 482,239854,0.0,,S,2,0 484 | 483,A/5 3594,8.05,,S,3,0 485 | 484,4134,9.5875,,S,3,0 486 | 485,11967,91.0792,B49,C,1,0 487 | 486,4133,25.4667,,S,3,1 488 | 487,19943,90.0,C93,S,1,0 489 | 488,11771,29.7,B37,C,1,0 490 | 489,A.5. 18509,8.05,,S,3,0 491 | 490,C.A. 37671,15.9,,S,3,1 492 | 491,65304,19.9667,,S,3,0 493 | 492,SOTON/OQ 3101317,7.25,,S,3,0 494 | 493,113787,30.5,C30,S,1,0 495 | 494,PC 17609,49.5042,,C,1,0 496 | 495,A/4 45380,8.05,,S,3,0 497 | 496,2627,14.4583,,C,3,0 498 | 497,36947,78.2667,D20,C,1,0 499 | 498,C.A. 6212,15.1,,S,3,0 500 | 499,113781,151.55,C22 C26,S,1,2 501 | 500,350035,7.7958,,S,3,0 502 | 501,315086,8.6625,,S,3,0 503 | 502,364846,7.75,,Q,3,0 504 | 503,330909,7.6292,,Q,3,0 505 | 504,4135,9.5875,,S,3,0 506 | 505,110152,86.5,B79,S,1,0 507 | 506,PC 17758,108.9,C65,C,1,0 508 | 507,26360,26.0,,S,2,2 509 | 508,111427,26.55,,S,1,0 510 | 509,C 4001,22.525,,S,3,0 511 | 510,1601,56.4958,,S,3,0 512 | 511,382651,7.75,,Q,3,0 513 | 512,SOTON/OQ 3101316,8.05,,S,3,0 514 | 513,PC 17473,26.2875,E25,S,1,0 515 | 514,PC 17603,59.4,,C,1,0 516 | 515,349209,7.4958,,S,3,0 517 | 516,36967,34.0208,D46,S,1,0 518 | 517,C.A. 34260,10.5,F33,S,2,0 519 | 518,371110,24.15,,Q,3,0 520 | 519,226875,26.0,,S,2,0 521 | 520,349242,7.8958,,S,3,0 522 | 521,12749,93.5,B73,S,1,0 523 | 522,349252,7.8958,,S,3,0 524 | 523,2624,7.225,,C,3,0 525 | 524,111361,57.9792,B18,C,1,1 526 | 525,2700,7.2292,,C,3,0 527 | 526,367232,7.75,,Q,3,0 528 | 527,W./C. 14258,10.5,,S,2,0 529 | 528,PC 17483,221.7792,C95,S,1,0 530 | 529,3101296,7.925,,S,3,0 531 | 530,29104,11.5,,S,2,1 532 | 531,26360,26.0,,S,2,1 533 | 532,2641,7.2292,,C,3,0 534 | 533,2690,7.2292,,C,3,1 535 | 534,2668,22.3583,,C,3,2 536 | 535,315084,8.6625,,S,3,0 537 | 536,F.C.C. 13529,26.25,,S,2,2 538 | 537,113050,26.55,B38,S,1,0 539 | 538,PC 17761,106.425,,C,1,0 540 | 539,364498,14.5,,S,3,0 541 | 540,13568,49.5,B39,C,1,2 542 | 541,WE/P 5735,71.0,B22,S,1,2 543 | 542,347082,31.275,,S,3,2 544 | 543,347082,31.275,,S,3,2 545 | 544,2908,26.0,,S,2,0 546 | 545,PC 17761,106.425,C86,C,1,0 547 | 546,693,26.0,,S,1,0 548 | 547,2908,26.0,,S,2,0 549 | 548,SC/PARIS 2146,13.8625,,C,2,0 550 | 549,363291,20.525,,S,3,1 551 | 550,C.A. 33112,36.75,,S,2,1 552 | 551,17421,110.8833,C70,C,1,2 553 | 552,244358,26.0,,S,2,0 554 | 553,330979,7.8292,,Q,3,0 555 | 554,2620,7.225,,C,3,0 556 | 555,347085,7.775,,S,3,0 557 | 556,113807,26.55,,S,1,0 558 | 557,11755,39.6,A16,C,1,0 559 | 558,PC 17757,227.525,,C,1,0 560 | 559,110413,79.65,E67,S,1,1 561 | 560,345572,17.4,,S,3,0 562 | 561,372622,7.75,,Q,3,0 563 | 562,349251,7.8958,,S,3,0 564 | 563,218629,13.5,,S,2,0 565 | 564,SOTON/OQ 392082,8.05,,S,3,0 566 | 565,SOTON/O.Q. 392087,8.05,,S,3,0 567 | 566,A/4 48871,24.15,,S,3,0 568 | 567,349205,7.8958,,S,3,0 569 | 568,349909,21.075,,S,3,4 570 | 569,2686,7.2292,,C,3,0 571 | 570,350417,7.8542,,S,3,0 572 | 571,S.W./PP 752,10.5,,S,2,0 573 | 572,11769,51.4792,C101,S,1,0 574 | 573,PC 17474,26.3875,E25,S,1,0 575 | 574,14312,7.75,,Q,3,0 576 | 575,A/4. 20589,8.05,,S,3,0 577 | 576,358585,14.5,,S,3,0 578 | 577,243880,13.0,,S,2,0 579 | 578,13507,55.9,E44,S,1,0 580 | 579,2689,14.4583,,C,3,0 581 | 580,STON/O 2. 3101286,7.925,,S,3,0 582 | 581,237789,30.0,,S,2,1 583 | 582,17421,110.8833,C68,C,1,1 584 | 583,28403,26.0,,S,2,0 585 | 584,13049,40.125,A10,C,1,0 586 | 585,3411,8.7125,,C,3,0 587 | 586,110413,79.65,E68,S,1,2 588 | 587,237565,15.0,,S,2,0 589 | 588,13567,79.2,B41,C,1,1 590 | 589,14973,8.05,,S,3,0 591 | 590,A./5. 3235,8.05,,S,3,0 592 | 591,STON/O 2. 3101273,7.125,,S,3,0 593 | 592,36947,78.2667,D20,C,1,0 594 | 593,A/5 3902,7.25,,S,3,0 595 | 594,364848,7.75,,Q,3,2 596 | 595,SC/AH 29037,26.0,,S,2,0 597 | 596,345773,24.15,,S,3,1 598 | 597,248727,33.0,,S,2,0 599 | 598,LINE,0.0,,S,3,0 600 | 599,2664,7.225,,C,3,0 601 | 600,PC 17485,56.9292,A20,C,1,0 602 | 601,243847,27.0,,S,2,1 603 | 602,349214,7.8958,,S,3,0 604 | 603,113796,42.4,,S,1,0 605 | 604,364511,8.05,,S,3,0 606 | 605,111426,26.55,,C,1,0 607 | 606,349910,15.55,,S,3,0 608 | 607,349246,7.8958,,S,3,0 609 | 608,113804,30.5,,S,1,0 610 | 609,SC/Paris 2123,41.5792,,C,2,2 611 | 610,PC 17582,153.4625,C125,S,1,0 612 | 611,347082,31.275,,S,3,5 613 | 612,SOTON/O.Q. 3101305,7.05,,S,3,0 614 | 613,367230,15.5,,Q,3,0 615 | 614,370377,7.75,,Q,3,0 616 | 615,364512,8.05,,S,3,0 617 | 616,220845,65.0,,S,2,2 618 | 617,347080,14.4,,S,3,1 619 | 618,A/5. 3336,16.1,,S,3,0 620 | 619,230136,39.0,F4,S,2,1 621 | 620,31028,10.5,,S,2,0 622 | 621,2659,14.4542,,C,3,0 623 | 622,11753,52.5542,D19,S,1,0 624 | 623,2653,15.7417,,C,3,1 625 | 624,350029,7.8542,,S,3,0 626 | 625,54636,16.1,,S,3,0 627 | 626,36963,32.3208,D50,S,1,0 628 | 627,219533,12.35,,Q,2,0 629 | 628,13502,77.9583,D9,S,1,0 630 | 629,349224,7.8958,,S,3,0 631 | 630,334912,7.7333,,Q,3,0 632 | 631,27042,30.0,A23,S,1,0 633 | 632,347743,7.0542,,S,3,0 634 | 633,13214,30.5,B50,C,1,0 635 | 634,112052,0.0,,S,1,0 636 | 635,347088,27.9,,S,3,2 637 | 636,237668,13.0,,S,2,0 638 | 637,STON/O 2. 3101292,7.925,,S,3,0 639 | 638,C.A. 31921,26.25,,S,2,1 640 | 639,3101295,39.6875,,S,3,5 641 | 640,376564,16.1,,S,3,0 642 | 641,350050,7.8542,,S,3,0 643 | 642,PC 17477,69.3,B35,C,1,0 644 | 643,347088,27.9,,S,3,2 645 | 644,1601,56.4958,,S,3,0 646 | 645,2666,19.2583,,C,3,1 647 | 646,PC 17572,76.7292,D33,C,1,0 648 | 647,349231,7.8958,,S,3,0 649 | 648,13213,35.5,A26,C,1,0 650 | 649,S.O./P.P. 751,7.55,,S,3,0 651 | 650,CA. 2314,7.55,,S,3,0 652 | 651,349221,7.8958,,S,3,0 653 | 652,231919,23.0,,S,2,1 654 | 653,8475,8.4333,,S,3,0 655 | 654,330919,7.8292,,Q,3,0 656 | 655,365226,6.75,,Q,3,0 657 | 656,S.O.C. 14879,73.5,,S,2,0 658 | 657,349223,7.8958,,S,3,0 659 | 658,364849,15.5,,Q,3,1 660 | 659,29751,13.0,,S,2,0 661 | 660,35273,113.275,D48,C,1,2 662 | 661,PC 17611,133.65,,S,1,0 663 | 662,2623,7.225,,C,3,0 664 | 663,5727,25.5875,E58,S,1,0 665 | 664,349210,7.4958,,S,3,0 666 | 665,STON/O 2. 3101285,7.925,,S,3,0 667 | 666,S.O.C. 14879,73.5,,S,2,0 668 | 667,234686,13.0,,S,2,0 669 | 668,312993,7.775,,S,3,0 670 | 669,A/5 3536,8.05,,S,3,0 671 | 670,19996,52.0,C126,S,1,0 672 | 671,29750,39.0,,S,2,1 673 | 672,F.C. 12750,52.0,B71,S,1,0 674 | 673,C.A. 24580,10.5,,S,2,0 675 | 674,244270,13.0,,S,2,0 676 | 675,239856,0.0,,S,2,0 677 | 676,349912,7.775,,S,3,0 678 | 677,342826,8.05,,S,3,0 679 | 678,4138,9.8417,,S,3,0 680 | 679,CA 2144,46.9,,S,3,6 681 | 680,PC 17755,512.3292,B51 B53 B55,C,1,1 682 | 681,330935,8.1375,,Q,3,0 683 | 682,PC 17572,76.7292,D49,C,1,0 684 | 683,6563,9.225,,S,3,0 685 | 684,CA 2144,46.9,,S,3,2 686 | 685,29750,39.0,,S,2,1 687 | 686,SC/Paris 2123,41.5792,,C,2,2 688 | 687,3101295,39.6875,,S,3,1 689 | 688,349228,10.1708,,S,3,0 690 | 689,350036,7.7958,,S,3,0 691 | 690,24160,211.3375,B5,S,1,1 692 | 691,17474,57.0,B20,S,1,0 693 | 692,349256,13.4167,,C,3,1 694 | 693,1601,56.4958,,S,3,0 695 | 694,2672,7.225,,C,3,0 696 | 695,113800,26.55,,S,1,0 697 | 696,248731,13.5,,S,2,0 698 | 697,363592,8.05,,S,3,0 699 | 698,35852,7.7333,,Q,3,0 700 | 699,17421,110.8833,C68,C,1,1 701 | 700,348121,7.65,F G63,S,3,0 702 | 701,PC 17757,227.525,C62 C64,C,1,0 703 | 702,PC 17475,26.2875,E24,S,1,0 704 | 703,2691,14.4542,,C,3,1 705 | 704,36864,7.7417,,Q,3,0 706 | 705,350025,7.8542,,S,3,0 707 | 706,250655,26.0,,S,2,0 708 | 707,223596,13.5,,S,2,0 709 | 708,PC 17476,26.2875,E24,S,1,0 710 | 709,113781,151.55,,S,1,0 711 | 710,2661,15.2458,,C,3,1 712 | 711,PC 17482,49.5042,C90,C,1,0 713 | 712,113028,26.55,C124,S,1,0 714 | 713,19996,52.0,C126,S,1,0 715 | 714,7545,9.4833,,S,3,0 716 | 715,250647,13.0,,S,2,0 717 | 716,348124,7.65,F G73,S,3,0 718 | 717,PC 17757,227.525,C45,C,1,0 719 | 718,34218,10.5,E101,S,2,0 720 | 719,36568,15.5,,Q,3,0 721 | 720,347062,7.775,,S,3,0 722 | 721,248727,33.0,,S,2,1 723 | 722,350048,7.0542,,S,3,0 724 | 723,12233,13.0,,S,2,0 725 | 724,250643,13.0,,S,2,0 726 | 725,113806,53.1,E8,S,1,0 727 | 726,315094,8.6625,,S,3,0 728 | 727,31027,21.0,,S,2,0 729 | 728,36866,7.7375,,Q,3,0 730 | 729,236853,26.0,,S,2,0 731 | 730,STON/O2. 3101271,7.925,,S,3,0 732 | 731,24160,211.3375,B5,S,1,0 733 | 732,2699,18.7875,,C,3,0 734 | 733,239855,0.0,,S,2,0 735 | 734,28425,13.0,,S,2,0 736 | 735,233639,13.0,,S,2,0 737 | 736,54636,16.1,,S,3,0 738 | 737,W./C. 6608,34.375,,S,3,3 739 | 738,PC 17755,512.3292,B101,C,1,0 740 | 739,349201,7.8958,,S,3,0 741 | 740,349218,7.8958,,S,3,0 742 | 741,16988,30.0,D45,S,1,0 743 | 742,19877,78.85,C46,S,1,0 744 | 743,PC 17608,262.375,B57 B59 B63 B66,C,1,2 745 | 744,376566,16.1,,S,3,0 746 | 745,STON/O 2. 3101288,7.925,,S,3,0 747 | 746,WE/P 5735,71.0,B22,S,1,1 748 | 747,C.A. 2673,20.25,,S,3,1 749 | 748,250648,13.0,,S,2,0 750 | 749,113773,53.1,D30,S,1,0 751 | 750,335097,7.75,,Q,3,0 752 | 751,29103,23.0,,S,2,1 753 | 752,392096,12.475,E121,S,3,1 754 | 753,345780,9.5,,S,3,0 755 | 754,349204,7.8958,,S,3,0 756 | 755,220845,65.0,,S,2,2 757 | 756,250649,14.5,,S,2,1 758 | 757,350042,7.7958,,S,3,0 759 | 758,29108,11.5,,S,2,0 760 | 759,363294,8.05,,S,3,0 761 | 760,110152,86.5,B77,S,1,0 762 | 761,358585,14.5,,S,3,0 763 | 762,SOTON/O2 3101272,7.125,,S,3,0 764 | 763,2663,7.2292,,C,3,0 765 | 764,113760,120.0,B96 B98,S,1,2 766 | 765,347074,7.775,,S,3,0 767 | 766,13502,77.9583,D11,S,1,0 768 | 767,112379,39.6,,C,1,0 769 | 768,364850,7.75,,Q,3,0 770 | 769,371110,24.15,,Q,3,0 771 | 770,8471,8.3625,,S,3,0 772 | 771,345781,9.5,,S,3,0 773 | 772,350047,7.8542,,S,3,0 774 | 773,S.O./P.P. 3,10.5,E77,S,2,0 775 | 774,2674,7.225,,C,3,0 776 | 775,29105,23.0,,S,2,3 777 | 776,347078,7.75,,S,3,0 778 | 777,383121,7.75,F38,Q,3,0 779 | 778,364516,12.475,,S,3,0 780 | 779,36865,7.7375,,Q,3,0 781 | 780,24160,211.3375,B3,S,1,1 782 | 781,2687,7.2292,,C,3,0 783 | 782,17474,57.0,B20,S,1,0 784 | 783,113501,30.0,D6,S,1,0 785 | 784,W./C. 6607,23.45,,S,3,2 786 | 785,SOTON/O.Q. 3101312,7.05,,S,3,0 787 | 786,374887,7.25,,S,3,0 788 | 787,3101265,7.4958,,S,3,0 789 | 788,382652,29.125,,Q,3,1 790 | 789,C.A. 2315,20.575,,S,3,2 791 | 790,PC 17593,79.2,B82 B84,C,1,0 792 | 791,12460,7.75,,Q,3,0 793 | 792,239865,26.0,,S,2,0 794 | 793,CA. 2343,69.55,,S,3,2 795 | 794,PC 17600,30.6958,,C,1,0 796 | 795,349203,7.8958,,S,3,0 797 | 796,28213,13.0,,S,2,0 798 | 797,17465,25.9292,D17,S,1,0 799 | 798,349244,8.6833,,S,3,0 800 | 799,2685,7.2292,,C,3,0 801 | 800,345773,24.15,,S,3,1 802 | 801,250647,13.0,,S,2,0 803 | 802,C.A. 31921,26.25,,S,2,1 804 | 803,113760,120.0,B96 B98,S,1,2 805 | 804,2625,8.5167,,C,3,1 806 | 805,347089,6.975,,S,3,0 807 | 806,347063,7.775,,S,3,0 808 | 807,112050,0.0,A36,S,1,0 809 | 808,347087,7.775,,S,3,0 810 | 809,248723,13.0,,S,2,0 811 | 810,113806,53.1,E8,S,1,0 812 | 811,3474,7.8875,,S,3,0 813 | 812,A/4 48871,24.15,,S,3,0 814 | 813,28206,10.5,,S,2,0 815 | 814,347082,31.275,,S,3,2 816 | 815,364499,8.05,,S,3,0 817 | 816,112058,0.0,B102,S,1,0 818 | 817,STON/O2. 3101290,7.925,,S,3,0 819 | 818,S.C./PARIS 2079,37.0042,,C,2,1 820 | 819,C 7075,6.45,,S,3,0 821 | 820,347088,27.9,,S,3,2 822 | 821,12749,93.5,B69,S,1,1 823 | 822,315098,8.6625,,S,3,0 824 | 823,19972,0.0,,S,1,0 825 | 824,392096,12.475,E121,S,3,1 826 | 825,3101295,39.6875,,S,3,1 827 | 826,368323,6.95,,Q,3,0 828 | 827,1601,56.4958,,S,3,0 829 | 828,S.C./PARIS 2079,37.0042,,C,2,2 830 | 829,367228,7.75,,Q,3,0 831 | 830,113572,80.0,B28,,1,0 832 | 831,2659,14.4542,,C,3,0 833 | 832,29106,18.75,,S,2,1 834 | 833,2671,7.2292,,C,3,0 835 | 834,347468,7.8542,,S,3,0 836 | 835,2223,8.3,,S,3,0 837 | 836,PC 17756,83.1583,E49,C,1,1 838 | 837,315097,8.6625,,S,3,0 839 | 838,392092,8.05,,S,3,0 840 | 839,1601,56.4958,,S,3,0 841 | 840,11774,29.7,C47,C,1,0 842 | 841,SOTON/O2 3101287,7.925,,S,3,0 843 | 842,S.O./P.P. 3,10.5,,S,2,0 844 | 843,113798,31.0,,C,1,0 845 | 844,2683,6.4375,,C,3,0 846 | 845,315090,8.6625,,S,3,0 847 | 846,C.A. 5547,7.55,,S,3,0 848 | 847,CA. 2343,69.55,,S,3,2 849 | 848,349213,7.8958,,C,3,0 850 | 849,248727,33.0,,S,2,1 851 | 850,17453,89.1042,C92,C,1,0 852 | 851,347082,31.275,,S,3,2 853 | 852,347060,7.775,,S,3,0 854 | 853,2678,15.2458,,C,3,1 855 | 854,PC 17592,39.4,D28,S,1,1 856 | 855,244252,26.0,,S,2,0 857 | 856,392091,9.35,,S,3,1 858 | 857,36928,164.8667,,S,1,1 859 | 858,113055,26.55,E17,S,1,0 860 | 859,2666,19.2583,,C,3,3 861 | 860,2629,7.2292,,C,3,0 862 | 861,350026,14.1083,,S,3,0 863 | 862,28134,11.5,,S,2,0 864 | 863,17466,25.9292,D17,S,1,0 865 | 864,CA. 2343,69.55,,S,3,2 866 | 865,233866,13.0,,S,2,0 867 | 866,236852,13.0,,S,2,0 868 | 867,SC/PARIS 2149,13.8583,,C,2,0 869 | 868,PC 17590,50.4958,A24,S,1,0 870 | 869,345777,9.5,,S,3,0 871 | 870,347742,11.1333,,S,3,1 872 | 871,349248,7.8958,,S,3,0 873 | 872,11751,52.5542,D35,S,1,1 874 | 873,695,5.0,B51 B53 B55,S,1,0 875 | 874,345765,9.0,,S,3,0 876 | 875,P/PP 3381,24.0,,C,2,0 877 | 876,2667,7.225,,C,3,0 878 | 877,7534,9.8458,,S,3,0 879 | 878,349212,7.8958,,S,3,0 880 | 879,349217,7.8958,,S,3,0 881 | 880,11767,83.1583,C50,C,1,1 882 | 881,230433,26.0,,S,2,1 883 | 882,349257,7.8958,,S,3,0 884 | 883,7552,10.5167,,S,3,0 885 | 884,C.A./SOTON 34068,10.5,,S,2,0 886 | 885,SOTON/OQ 392076,7.05,,S,3,0 887 | 886,382652,29.125,,Q,3,5 888 | 887,211536,13.0,,S,2,0 889 | 888,112053,30.0,B42,S,1,0 890 | 889,W./C. 6607,23.45,,S,3,2 891 | 890,111369,30.0,C148,C,1,0 892 | 891,370376,7.75,,Q,3,0 893 | -------------------------------------------------------------------------------- /data/st_create_tables.py: -------------------------------------------------------------------------------- 1 | # Databricks notebook source 2 | # MAGIC %md ## Data create notebook for single tenant customers 3 | 4 | # COMMAND ---------- 5 | 6 | from pyspark.sql import SparkSession 7 | from pyspark.sql.types import StructType, DoubleType, IntegerType, StringType 8 | import pandas as pd 9 | 10 | # COMMAND ---------- 11 | 12 | # MAGIC %md Create Delta tables from csv files 13 | 14 | # COMMAND ---------- 15 | 16 | # Enter your dbfs locations for each data file 17 | dbfs_file_locations = {'ticket': '/dbfs/FileStore/marshall.carter/feature_store/passenger_ticket.csv', 18 | 'demographic': '/dbfs/FileStore/marshall.carter/feature_store/passenger_demographic.csv', 19 | 'labels': '/dbfs/FileStore/marshall.carter/feature_store/passenger_labels.csv'} 20 | 21 | 22 | def create_tables(dbfs_file_location=dbfs_file_locations): 23 | 24 | # Create Spark DataFrame schemas 25 | passenger_ticket_types = [('PassengerId', StringType()), 26 | ('Ticket', StringType()), 27 | ('Fare', DoubleType()), 28 | ('Cabin', StringType()), 29 | ('Embarked', StringType()), 30 | ('Pclass', StringType()), 31 | ('Parch', StringType())] 32 | 33 | passenger_demographic_types = [('PassengerId',StringType()), 34 | ('Name', StringType()), 35 | ('Sex', StringType()), 36 | ('Age', DoubleType()), 37 | ('SibSp', StringType())] 38 | 39 | passenger_label_types = [('PassengerId',StringType()), 40 | ('Survived', IntegerType())] 41 | 42 | 43 | def create_schema(col_types): 44 | struct = StructType() 45 | for col_name, type in col_types: 46 | struct.add(col_name, type) 47 | return struct 48 | 49 | passenger_ticket_schema = create_schema(passenger_ticket_types) 50 | passenger_dempgraphic_schema = create_schema(passenger_demographic_types) 51 | passenger_label_schema = create_schema(passenger_label_types) 52 | 53 | 54 | def create_pd_dataframe(csv_file_path, schema): 55 | df = pd.read_csv(csv_file_path) 56 | return spark.createDataFrame(df, schema = schema) 57 | 58 | 59 | passenger_ticket_features = create_pd_dataframe(dbfs_file_location['ticket'], passenger_ticket_schema) 60 | passenger_demographic_features = create_pd_dataframe(dbfs_file_location['demographic'], passenger_dempgraphic_schema) 61 | passenger_labels = create_pd_dataframe(dbfs_file_location['labels'], passenger_label_schema) 62 | 63 | 64 | def write_to_delta(spark_df, delta_table_name): 65 | spark_df.write.mode('overwrite').format('delta').saveAsTable(delta_table_name) 66 | 67 | delta_tables = {"ticket": "default.passenger_ticket_feautures", 68 | "demographic": "default.passenger_demographic_features", 69 | "labels": "default.passenger_labels"} 70 | 71 | write_to_delta(passenger_ticket_features, delta_tables['ticket']) 72 | write_to_delta(passenger_demographic_features, delta_tables['demographic']) 73 | write_to_delta(passenger_labels, delta_tables['labels']) 74 | 75 | 76 | out = f"""The following tables were created: 77 | - {delta_tables['ticket']} 78 | - {delta_tables['demographic']} 79 | - {delta_tables['labels']} 80 | """ 81 | 82 | print(out) 83 | 84 | # COMMAND ---------- 85 | 86 | create_tables() 87 | 88 | # COMMAND ---------- 89 | 90 | # MAGIC %md To drop tables 91 | 92 | # COMMAND ---------- 93 | 94 | # MAGIC %sql 95 | # MAGIC 96 | # MAGIC -- DROP TABLE IF EXISTS default.passenger_ticket_feautures; 97 | # MAGIC -- DROP TABLE IF EXISTS default.passenger_demographic_feautures; 98 | # MAGIC -- DROP TABLE IF EXISTS default.passenger_labels; 99 | -------------------------------------------------------------------------------- /delta_table_setup.py: -------------------------------------------------------------------------------- 1 | # Databricks notebook source 2 | # MAGIC %md ### Generate Delta tables from csv files 3 | # MAGIC These tables will be transformed into feature tables 4 | 5 | # COMMAND ---------- 6 | 7 | from data.create_tables import create_tables 8 | 9 | # COMMAND ---------- 10 | 11 | # See https://ipython.org/ipython-doc/3/config/extensions/autoreload.html 12 | %load_ext autoreload 13 | %autoreload 2 14 | 15 | # COMMAND ---------- 16 | 17 | create_tables() 18 | 19 | # COMMAND ---------- 20 | 21 | # MAGIC %md To drop tables 22 | 23 | # COMMAND ---------- 24 | 25 | # MAGIC %sql 26 | # MAGIC 27 | # MAGIC -- DROP TABLE IF EXISTS default.passenger_ticket_feautures; 28 | # MAGIC -- DROP TABLE IF EXISTS default.passenger_demographic_feautures; 29 | # MAGIC -- DROP TABLE IF EXISTS default.passenger_labels; 30 | -------------------------------------------------------------------------------- /fit_model.py: -------------------------------------------------------------------------------- 1 | # Databricks notebook source 2 | # MAGIC %md ## Model training 3 | 4 | # COMMAND ---------- 5 | 6 | from databricks.feature_store import FeatureLookup 7 | from databricks.feature_store import FeatureStoreClient 8 | import mlflow 9 | from mlflow.tracking import MlflowClient 10 | 11 | import xgboost as xgb 12 | from sklearn.ensemble import RandomForestClassifier 13 | from sklearn.compose import ColumnTransformer 14 | from sklearn.pipeline import FeatureUnion 15 | from sklearn.pipeline import Pipeline 16 | from sklearn.preprocessing import OneHotEncoder, FunctionTransformer 17 | from sklearn.impute import SimpleImputer 18 | from sklearn.pipeline import make_pipeline, make_union 19 | from sklearn.metrics import classification_report, precision_recall_fscore_support 20 | from sklearn.model_selection import train_test_split 21 | import pandas as pd 22 | import numpy as np 23 | 24 | # COMMAND ---------- 25 | 26 | # MAGIC %md Instantiate a FeatureStoreClient instance 27 | 28 | # COMMAND ---------- 29 | 30 | fs = FeatureStoreClient() 31 | 32 | # COMMAND ---------- 33 | 34 | # MAGIC %md Create an MLflow experiment 35 | 36 | # COMMAND ---------- 37 | 38 | def get_or_create_experiment(experiment_location: str) -> None: 39 | 40 | if not mlflow.get_experiment_by_name(experiment_location): 41 | print("Experiment does not exist. Creating experiment") 42 | 43 | mlflow.create_experiment(experiment_location) 44 | 45 | mlflow.set_experiment(experiment_location) 46 | 47 | 48 | experiment_location = '/Shared/feature_store_experiment' 49 | get_or_create_experiment(experiment_location) 50 | 51 | mlflow.set_experiment(experiment_location) 52 | 53 | # COMMAND ---------- 54 | 55 | # MAGIC %md Specify the feature table names, columns, and join keys 56 | 57 | # COMMAND ---------- 58 | 59 | feature_lookups = [ 60 | FeatureLookup( 61 | table_name = 'default.ticket_features', 62 | feature_names = ['CabinChar', 'CabinMulti', 'Embarked', 'FareRounded', 'Parch', 'Pclass'], 63 | lookup_key = 'PassengerId' 64 | ), 65 | FeatureLookup( 66 | table_name = 'default.demographic_features', 67 | feature_names = ['Age', 'NameMultiple', 'NamePrefix', 'Sex', 'SibSp'], 68 | lookup_key = 'PassengerId' 69 | ) 70 | ] 71 | 72 | # COMMAND ---------- 73 | 74 | # MAGIC %md Join the features to form the training dataset 75 | 76 | # COMMAND ---------- 77 | 78 | # Select passenger records of interest 79 | passengers_and_target = spark.table('default.passenger_labels') 80 | 81 | # Attach features to passengers 82 | training_set = fs.create_training_set(df = passengers_and_target, 83 | feature_lookups = feature_lookups, 84 | label = 'Survived', 85 | exclude_columns = ['PassengerId']) 86 | 87 | # Create training datast 88 | training_df = training_set.load_df() 89 | 90 | display(training_df) 91 | 92 | # COMMAND ---------- 93 | 94 | # MAGIC %md Fit a scikit-learn pipeline model to the features. After fitting the model, local the model run in the Mlflow Tracking Server. Promote the model to the Model Registry. Local the model in the Registry and change its "Stage" to "Production" 95 | # MAGIC 96 | # MAGIC See https://www.mlflow.org/docs/latest/model-registry.html#registering-a-model for instructions. 97 | 98 | # COMMAND ---------- 99 | 100 | # Convert to Pandas for scikit-learn training 101 | data = training_df.toPandas() 102 | 103 | # Split into training and test datasets 104 | label = 'Survived' 105 | features = [col for col in data.columns if col not in [label, 'PassengerId']] 106 | 107 | X_train, X_test, y_train, y_test = train_test_split(data[features], data[label], test_size=0.25, random_state=123, shuffle=True) 108 | 109 | # Categorize columns by data type 110 | categorical_vars = ['NamePrefix', 'Sex', 'CabinChar', 'CabinMulti', 'Embarked', 'Parch', 'Pclass', 'SibSp'] 111 | numeric_vars = ['Age', 'FareRounded'] 112 | binary_vars = ['NameMultiple'] 113 | 114 | # Create the a pre-processing and modleing pipeline 115 | binary_transform = make_pipeline(SimpleImputer(strategy = 'constant', fill_value = 'missing')) 116 | 117 | numeric_transform = make_pipeline(SimpleImputer(strategy = 'most_frequent')) 118 | 119 | categorical_transform = make_pipeline(SimpleImputer(missing_values = None, strategy = 'constant', fill_value = 'missing'), 120 | OneHotEncoder(handle_unknown="ignore")) 121 | 122 | transformer = ColumnTransformer([('categorial_vars', categorical_transform, categorical_vars), 123 | ('numeric_vars', numeric_transform, numeric_vars), 124 | ('binary_vars', binary_transform, binary_vars)], 125 | remainder = 'drop') 126 | 127 | # Specify the model 128 | # See Hyperopt for hyperparameter tuning: https://docs.databricks.com/applications/machine-learning/automl-hyperparam-tuning/index.html 129 | model = xgb.XGBClassifier(n_estimators = 50, use_label_encoder=False) 130 | 131 | classification_pipeline = Pipeline([("preprocess", transformer), ("classifier", model)]) 132 | 133 | # Fit the model, collect statistics, and log the model 134 | with mlflow.start_run() as run: 135 | 136 | run_id = run.info.run_id 137 | #mlflow.xgboost.autolog() 138 | 139 | # Fit model 140 | classification_pipeline.fit(X_train, y_train) 141 | 142 | train_pred = classification_pipeline.predict(X_train) 143 | test_pred = classification_pipeline.predict(X_test) 144 | 145 | # Calculate validation statistics 146 | precision_train, recall_train, f1_train, _ = precision_recall_fscore_support(y_train, train_pred, average='weighted') 147 | precision_test, recall_test, f1_test, _ = precision_recall_fscore_support(y_test, test_pred, average='weighted') 148 | 149 | decimals = 2 150 | validation_statistics = {"precision_training": round(precision_train, decimals), 151 | "precision_testing": round(precision_test, decimals), 152 | "recall_training": round(recall_train, decimals), 153 | "recall_testing": round(recall_test, decimals), 154 | "f1_training": round(f1_train, decimals), 155 | "f1_testing": round(f1_test, decimals)} 156 | 157 | # Log the validation statistics 158 | mlflow.log_metrics(validation_statistics) 159 | 160 | # Fit final model 161 | final_model = classification_pipeline.fit(data[features], data[label]) 162 | 163 | # Log the model and training data metadata 164 | fs.log_model( 165 | final_model, 166 | artifact_path="model", 167 | flavor = mlflow.sklearn, 168 | training_set=training_set 169 | ) 170 | 171 | # COMMAND ---------- 172 | 173 | # MAGIC %md Register the model in the Model Registry 174 | 175 | # COMMAND ---------- 176 | 177 | client = MlflowClient() 178 | 179 | # COMMAND ---------- 180 | 181 | # Create a Model Registry entry for the model if one does not exist 182 | model_registry_name = 'feature_store_models' 183 | try: 184 | client.get_registered_model(model_registry_name) 185 | print(" Registered model already exists") 186 | except: 187 | client.create_registered_model(model_registry_name) 188 | 189 | # COMMAND ---------- 190 | 191 | # Get model run id and artifact path 192 | model_info = client.get_run(run_id).to_dictionary() 193 | artifact_uri = model_info['info']['artifact_uri'] 194 | 195 | 196 | # Register the model 197 | registered_model = client.create_model_version( 198 | name = model_registry_name, 199 | source = artifact_uri + "/model", 200 | run_id = run_id 201 | ) 202 | 203 | # COMMAND ---------- 204 | 205 | # MAGIC %md Promote model to the Production stage 206 | 207 | # COMMAND ---------- 208 | 209 | promote_to_prod = client.transition_model_version_stage(name=model_registry_name, 210 | version = int(registered_model.version), 211 | stage="Production", 212 | archive_existing_versions=True) 213 | -------------------------------------------------------------------------------- /img/dbeaver_mysql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marshackVB/databricks_feature_store/ca4359aaf427019493bf9f2757df1f177ad2b276/img/dbeaver_mysql.png -------------------------------------------------------------------------------- /img/feature_store_architecture.drawio: -------------------------------------------------------------------------------- 1 | 7Vxdd9soGv41PnsVHUno8zJJk9nTzWyzk3anezUHS0imkYUH4Tjur19A6BMa27GVJplJLyxeIQTv836DOgOXy8dfKFwtfiUpKmaunT7OwIeZ67peHPAfQdnWFMd27JqSU5wqWke4w99R01FR1zhF1aAjI6RgeDUkJqQsUcIGNEgp2Qy7ZaQYvnUFc6QR7hJY6NTfccoWNTXy7Y7+T4TzRfNmx1Z3lrDprAjVAqZk0yOBqxm4pISw+mr5eIkKwb2GL/Vz1z+4206MopLt8wD4cvnnl0//ZeBT9TVi7m/2zXJ75vn1MA+wWKsVq9mybcMCStZlisQo9gxcbBaYobsVTMTdDUed0xZsWfCWwy/bVYq+GS6KS1IQytslKfkTF/qs1UIeEGXosUdSq/gFkSVidMu7NFKlGNqIVKzamw6fVnwWfWxCRYRKJvJ26I5t/EJx7gAuOhoTrxFka4o48TOcF+LXeYKvzm6+9lk5c0EKUZQlgt+MknvUuxMkEZpnp+E0AANOu7bOacc1cDqYitFgt7TWDGl01dWkcyX6LR9zYa+srCCbZAEps2BZEgYZJuUf4hlY4LzkHQuU8TVdFHCOiltSYdGBk2m91osVwSVD9OqB87hS76BqHN48cyL7NEg4/ggKYIDCJPTxVFDohkOX+adsyVuReYN1eVmZj/eQeSXWeCm92YVYLeY+7GYktnPCGFk28nwBk/tcAtKwMkUZXBesN8K50gNGBDawWtU+NsOPAsQL+cLzhmo3FH69YEx46HOxdve64pDcW5AjvUAWoTknyY4Vv+AhA4NnBbxHZwXJibUq82n8BHB1JD1XRzIMrDieylO8BzQ3m421LITtVFimJBFIFpChivGLPyphAhN+9euN6CaBPctwCYuzecEnejqQAxAO9dU36Kvt6Sh7U+mru4+Teu0QJxSlHBQMi8pKIYNzipP7ykr4ZNxrWFWICcDZAi2lDj/ZvdP09s6JNT0KvKEQBAZVj23LNcgBmEwOPE0O/k0YmhNyr8kDXycbRSoDH6eCZ0M83QQqCRKBiEEQljhNxWuMznYY2g9jd1KyOzVDQ65xMEaxDVr+t741NFhkg2+dDqNIw+iGwFSkbyqVhaVofeNxnsge6winegv4nQCyMLBHePkaXuGLwhVrnEcpT9dVk1C24HaFe5mrjjriUdfnhggTKcH6hhjbqtoDXDMyhBI9YvZVPG75qvW/3p0Pj2pk2dju4r6Y75O8p4i7UfwwLD+YOKkevRUpSA8zLx5gFoyT3oqsaYLUU/1ywaEDMUhzxLSBJLDteo5I9ezdbhSV6bmo8Qj9KbhXwskQuSH0z8ekJ+++Qd4b2pHQOY4fWWEwVLkQWP7zAHTs0N411tQY6oWR31BCaKoePK/rIoGMYOaUX+XiSuvj7tEHaNJxmroVTy8zX/wzJp7yT3nLHr3+O1Hq74S6WIDY0m3xC9di9ohz35eCxqFrhcMQBoBRprivdsbhsM7gjXGaWjX16LSr39wxIn5ff5Bz6iD1zBmaTODHupa9aIQK9Aj1SC3TC6SvXe9Cf+wUvec6xcjdOdTUiqdXgD7K7OL1a9spnFlgN/xuVKwR6J4sgaDp9CI65uthyi1FKU5EFebwZI/7/8idgzouGJWwfRSl3uQWsc5knOg0mMWuPXZ7Xrjn9sMpMPtYXX38V5Z8/z5PPlRfFt//Q3//athyO9IstlleL8frMj5zlicat4hiviQB4pPmdWRLjZjUVuwp4/EzzbAXD52jNy6h7muEgTdOTCYzwUbZcTXZ+UwhLnGZc2oKWYXY2zHHmh4bJOvHWySeNzLHbhQaMovQNxlkz/+xCB2l3Hpm8UFsEnESEzuLlXinDFQpynHFuYpSOV8+Xd5lIe5owaydcVD4e5crSh5k/xRXCb+kcI4LzARX6mLfEpYwR0vOQkvPO3VK96Z2cgkU1cK5oC1Jui4g5RZZDA0TkbXWgsaInEOW8emXCWrVX9bTCaesRI1dTZuiddWbZ0JJJW7ytXxDCausCeRVbX0fIa2nENCRyTHt7sQGk9emwieXzeAgx6N4msJq0e569zAR9FvIuASXkiLKGCYXMnJVJV9IXZGM/LAhyKKk5TTNzmPJ1rbfGvus/T1UbZmf8lDez3RRjnMiF+WPXBSwJ0vPjVJm2pfIW+OWYS4y6ay3SyFNojA69YarNJAMZzARNsz+LJ9iAycHpZezE4rq0yquXZBc7NnaWA5WVERKNTEYV/nad2tz/HjoEh072s/o+FPZnD0ODUxtc/Y1ET9L84NIi2Sa0smhuh9EI/z90UAT675zWG7zl4Q7DqIh2HakHdrZuxQ7GssBrjbW1JDrKcm5MMm47KLDsj08wGGoKhlolmgjednuhVRNYDk01J1b2GA5G8onjNED6lxKu7WtIk5OrlA7uKRTcZzjR/H1pQCaB9BF7WGges2fa1w7ELGFXtXd5iirQ3K4WhVbFQ138/1HHdnKAoygIbYg6Xt1NuOjK4YAF/hOu/8zOKfmTuRuHD3/+lQW2xalkbyVSAIsxU7mPFI8W9JfIWRwnNFRCdDVlXdFDafYoDPDqG/x/O1HxgmDOw70w+DZG+7aWI421tR+ZI/POf4+ezg+e3iU6gN/VMwMjCWKyc4emuVAr1K88bOHx2EUxfrZQ4N5nmpn14xRqGF0jYU5gbMuse95UGP6nqMSUW4AJXm+VXGWCqk2xBSotWXK9+mKQTA8EA6aUH6XH44mC6cO28J/XyXDn7ZZNQ7Ixh9C7evVPT+24mGCCLyRqEzt1Q+r/xxxBuT14un7o+88nn8GJHB3DjX1BqRe4Wk+ne6s/E7zfEr32/e4zcHbo6xwHI/Lca4hLnInOuZh5rpeZGm43quzvGm2x452VGNKvvNm9/16rRzdfwMArv4P -------------------------------------------------------------------------------- /img/feature_store_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marshackVB/databricks_feature_store/ca4359aaf427019493bf9f2757df1f177ad2b276/img/feature_store_architecture.png -------------------------------------------------------------------------------- /img/feature_store_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marshackVB/databricks_feature_store/ca4359aaf427019493bf9f2757df1f177ad2b276/img/feature_store_ui.png -------------------------------------------------------------------------------- /img/model_api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marshackVB/databricks_feature_store/ca4359aaf427019493bf9f2757df1f177ad2b276/img/model_api.png -------------------------------------------------------------------------------- /img/model_registry_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marshackVB/databricks_feature_store/ca4359aaf427019493bf9f2757df1f177ad2b276/img/model_registry_ui.png -------------------------------------------------------------------------------- /img/online_store_architecture.drawio: -------------------------------------------------------------------------------- 1 | 5Vtbd5s4EP41fjQHEGB4jNN0LyfdZpvtbvepRwYZayOQV8ix3V9fCSQbEImdFJw0Th6CBiFgvplvLiIjcJltfmFwufhAE0RGrp1sRuDdyHVd25mIP1KyrSSR71WClOGkEjl7wS3+hpTQVtIVTlDRmMgpJRwvm8KY5jmKeUMGGaPr5rQ5Jc27LmGKDMFtDIkp/QcnfFFJQ9/ey39FOF3oOzu2OpNBPVkJigVM6LomAlcjcMko5dVRtrlERCpP66W67v0DZ3cPxlDOj7kAfL78//PHvzn4WHwJufvJvs62Y8+vlrmHZKXeWD0t32oVMLrKEyRXsUdgul5gjm6XMJZn1wJ0IVvwjIiRIw53bynnzjEhl5RQJsY5zcUVU3U7xDjaPPgizk49wq4QzRBnWzFlZ1TVFcqinEiN13t8wCSqZIs6NhM1ESqbSHdL79UmDpTmnqBFx1DiewT5iiEh/AvOiPzrPKJX57Be66ocuSCBKJzHUt+c0TtUOxPEIZrN+9E0AA1Nu7apaUejUdd0MJSiwWFrrRSifdU1rHMp52WbVNKVNSd0HS8g4xbMc8ohxzT/Kq+BBKe5mEjQXLzTlMAZIje0wHKCELPqXadLinOO2NW9UGih7sHUOmI4dkK7HyQcvwUF6IDC6YAiGgoKz4DiY05wLk3dMP4eDX8+R0HcafjJJJrZPanbC6KmujVPvpjlmzxtUsxj1P2zUEwHmZ9W0dERFKNYBGdl8jCVCsAiZbhuscSMck4zTR9TGN+lJSBalQmawxXhtRUuFO1wKrGBxbJKaeZ4I0Gclje80FJbS8TxgnOZEF3Id3ffF0L/dxYUSC+QRVkqROXEQhyIBI3DMYF3aExoSq1lng4TloFrIum5JpKTwIqioQLzMQHjtaO5Xq+tGWU5ohamdShnDOZJiaIcwQx+o/mYJWLgCzLoD1kvdC2/CW5oW2HUEYGAia8XWY4zFL5vwVslvhmRqYjy1YTGElACOSq4OPhayIwiFkcfruW0EvLxHOeQjGdEPGifTuw1gPacDi/WcxooD8XHrplc6yrzE0pxoe9Rh1y8P28lfo0YpmqRjvJE530xknldB9YZThJ5m85g2qyUmqUQzfmtekKnB6Cc0G0C5TsddNsROMFgQL0Fro0ZSgQCGJLCSiCHM4bju8KKxcMIhi0KxKVn8gXKSgZ+dPo+5O7O9BxyPTdoGoHGoG4EkW25HQ47nB2YlYF22FvE7rF4+TP0Vy9opkevwF+Dw/6K8uRCNtGkhokwfxw3YWoqsLocJUZH7aCSakrwO3SgZQyJmIjvm8t3KUbd4UaW57Vao5Wieu2gVdAVi5G6qt5Kay3kOQcW4pCliBsLlTjtXvsHoJsY0P25QqUm51VVWMhD4ShioXy54uWCxc/gdz24mu+FDXSAFxiuFp3U00IDrmsKEyHJKmI8C1hAq9TvYsDgpLBEJt8J7tKsTxlfiGgtkuyrvbSlo/2cayoTjxKs/xDnW7WTAVecNqFEG8y/yMtFSVWN/q2debdRK5eD7ROJVbxLyWBH2GLFUAcnmmgezcE/1ui1zy04TdrBCYTPC04BcHYJ30NrDRyfgFmzfUIxZYm6UCTbcj8kKDP4mYhSQSqPjDnuEXOAYRf97FfJXrMvfzs7oOWPShNr8uqnH76ceC2DsEODL0+8++IasP6B1qXp70A5lySjjQ6YmElGJzqDhTNwRP39tijTBy0PaW92HUuZ7YX8tgsNzZdmybzf3bnllJl7aK/Qq/oumcetKgv4HR3nk5bMwNyF2216ni1Mnh+1dgeA3ol8OaDMiuutc6EbWoHbhKGt3qPp0FzLs0/MiObGzu/iXj+Df/XgUk5gt13KNV0KBHrSSXzKM0sy8xOEx7Lx1/oJghs0q6WX/9jDM+unx+hLWfSD3KVbDrrJIBsO+/ZDd8vB/IxKaJNtv+i5clBbRw73C5WjAZoX2gQPNi+8l6TiXZ6y20N9bpsZNBdyJ/5JSdgzK4qb1YzgYnEmPOw5jhVOujF4QSI2k5uLm9+EQCjtXJrJgd8q/To4+6TNZN+k7BuGEhzLHe2nN0VEiAvdGah6TK2g6KMw8QavEKr+tRP25EmTJpX5+lvsQ9+vPgMwMdx/VV9x4f5/E8DVdw== -------------------------------------------------------------------------------- /img/online_store_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marshackVB/databricks_feature_store/ca4359aaf427019493bf9f2757df1f177ad2b276/img/online_store_architecture.png -------------------------------------------------------------------------------- /model_inference.py: -------------------------------------------------------------------------------- 1 | # Databricks notebook source 2 | # MAGIC %md ### Apply model to new records 3 | 4 | # COMMAND ---------- 5 | 6 | import mlflow.spark 7 | from mlflow.tracking import MlflowClient 8 | from databricks.feature_store import FeatureStoreClient 9 | 10 | client = MlflowClient() 11 | fs = FeatureStoreClient() 12 | 13 | # COMMAND ---------- 14 | 15 | # MAGIC %md Simulate new records; Notice that only the record IDs need to be passes. The MLflow model has recorded the feature looking logic and will join the necessary features to the record Ids. 16 | 17 | # COMMAND ---------- 18 | 19 | new_passenger_records = (spark.table('default.passenger_labels') 20 | .select('PassengerId') 21 | .limit(20)) 22 | 23 | display(new_passenger_records) 24 | 25 | # COMMAND ---------- 26 | 27 | # MAGIC %md Get model's unique identifier 28 | 29 | # COMMAND ---------- 30 | 31 | def get_run_id(model_name, stage='Production'): 32 | """Get production model id from Model Registry""" 33 | 34 | prod_run = [run for run in client.search_model_versions(f"name='{model_name}'") 35 | if run.current_stage == stage][0] 36 | 37 | return prod_run.run_id 38 | 39 | 40 | # Replace the first parameter with your model's name 41 | run_id = get_run_id('feature_store_models', stage='Production') 42 | run_id 43 | 44 | # COMMAND ---------- 45 | 46 | # MAGIC %md Score records 47 | 48 | # COMMAND ---------- 49 | 50 | model_uri = f'runs:/{run_id}/model' 51 | 52 | with_predictions = fs.score_batch(model_uri, new_passenger_records) 53 | 54 | display(with_predictions) 55 | -------------------------------------------------------------------------------- /online_store/README.md: -------------------------------------------------------------------------------- 1 | # Setting up an Online Feature Store and Model Serving endpoint 2 | 3 | Some use cases require [Rest API model deployment](https://docs.databricks.com/applications/mlflow/model-serving.html) for inference. This is typically the case where an application outside of Databricks is recieving information and requires model predictions based on that information (imagine a user interface where a use can enter information and receive a prediction). Im some cases, this external application may not have access to all the features the model requires. We can leverage the Feature Store to publish tables to an RDBMS that can be access by our MLflow model deployed via Rest API. In our scenario, the external application would only need to pass the PassengerId to the Rest endpoint to retrieve a prediction for a passenger. 4 | 5 | 8 | 9 | ### To implement this demo in your own environment, follow the below steps. 10 | 11 | ## 1. Create an [AWS MySQL RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 12 | 13 | You can use the example Terraform scripts to provision an RDS in the default VPC of your AWS account. You will need to [install and configure the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). As part of this process, you will need to enter your AWS access key id and secret access key. The Terraform scripts provision the below resources; your AWS User must have permission to create these resources. 14 | - A Security Group that provides internet access to the database 15 | - A MySQL RDS 16 | 17 | 18 | Applying the terraform template will output a master username, password, and cluster endpoint address. These must be saved and will be used to authenticate to RDS. To view the non-redacted password, issue the command, 'terraform output -json' from the terminal after terraform provisions the resources. 19 | 20 | To provision the resources, navigate to the terraform folder in your terminal and issue the below commands, [assuming you have installed Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli). 21 | ``` 22 | terraform init 23 | terraform plan 24 | terraform apply 25 | terraform output -json 26 | 27 | # When you are ready to tear down the infrastructure 28 | teffaform destroy 29 | ``` 30 | 31 | Note that the RDS provisioned by these scripts is designed for demonstration purposes. Further configuration would be required for a production deployment. 32 | 33 | 34 | ## 2. Connect to the Aurora cluster using a SQL editor 35 | - [DBeaver](https://dbeaver.io/) is an easy to use and free SQL editor that can easily connect to your RDS through a MySQL connection. 36 | - Create the MySQL connection using the master username, password, cluster endpoint address, and the database, 'feature_store', that was created by the Terraform. 37 | 38 | 41 | 42 | 43 | ## 3. Create a user with write access and a user with read-only access to the feature store database. 44 | - The crendtials for these users (user name and password) will be saved as Databricks Secrets referenceable by the Databricks Feature Store. 45 | ``` 46 | CREATE USER 'writer'@'%' IDENTIFIED BY ''; 47 | CREATE USER 'reader'@'%' IDENTIFIED BY ' 123 | 124 | 125 | ## 9. Submit sample records to the provisioned endpoint. 126 | Databricks will query the features for the input ids from the online feature store and return a prediction. 127 | 128 | -------------------------------------------------------------------------------- /online_store/fit_model.py: -------------------------------------------------------------------------------- 1 | # Databricks notebook source 2 | # MAGIC %md ## Model training 3 | 4 | # COMMAND ---------- 5 | 6 | from databricks.feature_store import FeatureLookup 7 | from databricks.feature_store import FeatureStoreClient 8 | import mlflow 9 | from mlflow.tracking import MlflowClient 10 | 11 | import xgboost as xgb 12 | from sklearn.ensemble import RandomForestClassifier 13 | from sklearn.compose import ColumnTransformer 14 | from sklearn.pipeline import FeatureUnion 15 | from sklearn.pipeline import Pipeline 16 | from sklearn.preprocessing import OneHotEncoder, FunctionTransformer 17 | from sklearn.impute import SimpleImputer 18 | from sklearn.pipeline import make_pipeline, make_union 19 | from sklearn.metrics import classification_report, precision_recall_fscore_support 20 | from sklearn.model_selection import train_test_split 21 | import pandas as pd 22 | import numpy as np 23 | 24 | # COMMAND ---------- 25 | 26 | # MAGIC %md Instantiate a FeatureStoreClient instance 27 | 28 | # COMMAND ---------- 29 | 30 | fs = FeatureStoreClient() 31 | 32 | # COMMAND ---------- 33 | 34 | # MAGIC %md Create an MLflow experiment 35 | 36 | # COMMAND ---------- 37 | 38 | def get_or_create_experiment(experiment_location: str) -> None: 39 | 40 | if not mlflow.get_experiment_by_name(experiment_location): 41 | print("Experiment does not exist. Creating experiment") 42 | 43 | mlflow.create_experiment(experiment_location) 44 | 45 | mlflow.set_experiment(experiment_location) 46 | 47 | 48 | experiment_location = '/Shared/feature_store_experiment' 49 | get_or_create_experiment(experiment_location) 50 | 51 | mlflow.set_experiment(experiment_location) 52 | 53 | # COMMAND ---------- 54 | 55 | # MAGIC %md Specify the feature table names, columns, and join keys 56 | 57 | # COMMAND ---------- 58 | 59 | feature_lookups = [ 60 | FeatureLookup( 61 | table_name = 'default.online_feature_table', 62 | feature_names = ['Age', 'NameMultiple', 'NamePrefix', 'Sex', 'SibSp', 'CabinChar', 'CabinMulti', 'Embarked', 'FareRounded', 'Parch', 'Pclass'], 63 | lookup_key = 'PassengerId' 64 | ) 65 | ] 66 | 67 | # COMMAND ---------- 68 | 69 | # MAGIC %md Join the features to form the training dataset 70 | 71 | # COMMAND ---------- 72 | 73 | # Select passenger records of interest 74 | passengers_and_target = spark.table('default.passenger_labels') 75 | 76 | # Attach features to passengers 77 | training_set = fs.create_training_set(df = passengers_and_target, 78 | feature_lookups = feature_lookups, 79 | label = 'Survived', 80 | exclude_columns = ['PassengerId']) 81 | 82 | # Create training datast 83 | training_df = training_set.load_df() 84 | 85 | display(training_df) 86 | 87 | # COMMAND ---------- 88 | 89 | # MAGIC %md Fit a scikit-learn pipeline model to the features. After fitting the model, local the model run in the Mlflow Tracking Server. Promote the model to the Model Registry. Local the model in the Registry and change its "Stage" to "Production" 90 | # MAGIC 91 | # MAGIC See https://www.mlflow.org/docs/latest/model-registry.html#registering-a-model for instructions. 92 | 93 | # COMMAND ---------- 94 | 95 | # Convert to Pandas for scikit-learn training 96 | data = training_df.toPandas() 97 | 98 | # Split into training and test datasets 99 | label = 'Survived' 100 | features = [col for col in data.columns if col not in [label, 'PassengerId']] 101 | 102 | X_train, X_test, y_train, y_test = train_test_split(data[features], data[label], test_size=0.25, random_state=123, shuffle=True) 103 | 104 | # Categorize columns by data type 105 | categorical_vars = ['NamePrefix', 'Sex', 'CabinChar', 'CabinMulti', 'Embarked', 'Parch', 'Pclass', 'SibSp'] 106 | numeric_vars = ['Age', 'FareRounded'] 107 | binary_vars = ['NameMultiple'] 108 | 109 | # Create the a pre-processing and modleing pipeline 110 | binary_transform = make_pipeline(SimpleImputer(strategy = 'constant', fill_value = 'missing')) 111 | 112 | numeric_transform = make_pipeline(SimpleImputer(strategy = 'most_frequent')) 113 | 114 | categorical_transform = make_pipeline(SimpleImputer(missing_values = None, strategy = 'constant', fill_value = 'missing'), 115 | OneHotEncoder(handle_unknown="ignore")) 116 | 117 | transformer = ColumnTransformer([('categorial_vars', categorical_transform, categorical_vars), 118 | ('numeric_vars', numeric_transform, numeric_vars), 119 | ('binary_vars', binary_transform, binary_vars)], 120 | remainder = 'drop') 121 | 122 | # Specify the model 123 | # See Hyperopt for hyperparameter tuning: https://docs.databricks.com/applications/machine-learning/automl-hyperparam-tuning/index.html 124 | model = xgb.XGBClassifier(n_estimators = 50, use_label_encoder=False) 125 | 126 | classification_pipeline = Pipeline([("preprocess", transformer), ("classifier", model)]) 127 | 128 | # Fit the model, collect statistics, and log the model 129 | with mlflow.start_run() as run: 130 | 131 | run_id = run.info.run_id 132 | #mlflow.xgboost.autolog() 133 | 134 | # Fit model 135 | classification_pipeline.fit(X_train, y_train) 136 | 137 | train_pred = classification_pipeline.predict(X_train) 138 | test_pred = classification_pipeline.predict(X_test) 139 | 140 | # Calculate validation statistics 141 | precision_train, recall_train, f1_train, _ = precision_recall_fscore_support(y_train, train_pred, average='weighted') 142 | precision_test, recall_test, f1_test, _ = precision_recall_fscore_support(y_test, test_pred, average='weighted') 143 | 144 | decimals = 2 145 | validation_statistics = {"precision_training": round(precision_train, decimals), 146 | "precision_testing": round(precision_test, decimals), 147 | "recall_training": round(recall_train, decimals), 148 | "recall_testing": round(recall_test, decimals), 149 | "f1_training": round(f1_train, decimals), 150 | "f1_testing": round(f1_test, decimals)} 151 | 152 | # Log the validation statistics 153 | mlflow.log_metrics(validation_statistics) 154 | 155 | # Fit final model 156 | final_model = classification_pipeline.fit(data[features], data[label]) 157 | 158 | # Log the model and training data metadata 159 | fs.log_model( 160 | final_model, 161 | artifact_path="model", 162 | flavor = mlflow.sklearn, 163 | training_set=training_set 164 | ) 165 | 166 | # COMMAND ---------- 167 | 168 | # MAGIC %md Register the model in the Model Registry 169 | 170 | # COMMAND ---------- 171 | 172 | client = MlflowClient() 173 | 174 | # COMMAND ---------- 175 | 176 | # Create a Model Registry entry for the model if one does not exist 177 | model_registry_name = 'feature_store_models' 178 | try: 179 | client.get_registered_model(model_registry_name) 180 | print(" Registered model already exists") 181 | except: 182 | client.create_registered_model(model_registry_name) 183 | 184 | # COMMAND ---------- 185 | 186 | # Get model run id and artifact path 187 | model_info = client.get_run(run_id).to_dictionary() 188 | artifact_uri = model_info['info']['artifact_uri'] 189 | 190 | 191 | # Register the model 192 | registered_model = client.create_model_version( 193 | name = model_registry_name, 194 | source = artifact_uri + "/model", 195 | run_id = run_id 196 | ) 197 | 198 | # COMMAND ---------- 199 | 200 | # MAGIC %md Promote model to the Production stage 201 | 202 | # COMMAND ---------- 203 | 204 | promote_to_prod = client.transition_model_version_stage(name=model_registry_name, 205 | version = int(registered_model.version), 206 | stage="Production", 207 | archive_existing_versions=True) 208 | -------------------------------------------------------------------------------- /online_store/publish_to_rds.py: -------------------------------------------------------------------------------- 1 | # Databricks notebook source 2 | # MAGIC %md ### Publishing a Delta feature store table to an online store 3 | # MAGIC Some use cases require Rest API model deployment required for inference. This is typically the case where an application outside of Databricks is recieving information and requires model predictions based on that information (imagine a user interface where a use can input information and receive a prediction). Im some cases, this external application may not have access to all the features the model requires. We can publish our features to an RDBMS that can be access by our MLflow model deployed via Rest API. In our scenario, the external application would only need to pass the PassengerId to the Rest endpoint to retrieve a prediction for a passenger. 4 | # MAGIC 5 | # MAGIC 6 | # MAGIC In this example, we will copy a Delta Feature Store table to an AWS Aurora database. See the [online documentation here](https://docs.databricks.com/applications/machine-learning/feature-store/feature-tables.html#publish-features-to-an-online-feature-store). 7 | 8 | # COMMAND ---------- 9 | 10 | from databricks.feature_store.online_store_spec.amazon_rds_mysql_online_store_spec import AmazonRdsMySqlSpec 11 | from databricks.feature_store import FeatureStoreClient, FeatureLookup 12 | 13 | fs = FeatureStoreClient() 14 | 15 | # COMMAND ---------- 16 | 17 | # MAGIC %md #### Pre-join existing feature tables 18 | # MAGIC We currently have two Feature Store tables that are joined based on PassengerId to create the model training dataset. Since Feature Store tables are just Delta tables, and we want to avoid contantly joining tables in our online store each time our Rest API is called, lets create a third Feature Store table that joins the two source tables. 19 | # MAGIC 20 | # MAGIC Note that the underlying feature tables will need to be updated before joining the tables. 21 | 22 | # COMMAND ---------- 23 | 24 | demographic_features = (spark.table('default.demographic_features') 25 | .select('PassengerId','Age', 'NameMultiple', 'NamePrefix', 'Sex', 'SibSp')) 26 | 27 | ticket_features = (spark.table('default.ticket_features') 28 | .select('PassengerId', 'CabinChar', 'CabinMulti', 'Embarked', 'FareRounded', 'Parch', 'Pclass')) 29 | 30 | online_feature_table = demographic_features.join(ticket_features, ['PassengerId'], 'inner') 31 | 32 | display(online_feature_table) 33 | 34 | # COMMAND ---------- 35 | 36 | # MAGIC %md #### Create feature table 37 | 38 | # COMMAND ---------- 39 | 40 | feature_table_name = 'default.online_feature_table' 41 | 42 | # If the feature table has already been created, no need to recreate 43 | try: 44 | fs.get_table(feature_table_name) 45 | print("Feature table entry already exists") 46 | pass 47 | 48 | except Exception: 49 | fs.create_table(name = feature_table_name, 50 | primary_keys = 'PassengerId', 51 | schema = online_feature_table.schema, 52 | description = 'Online feature store table for Titanic passengers') 53 | 54 | # COMMAND ---------- 55 | 56 | # MAGIC %md #### Write the Spark DataFrame to the Feature Table 57 | 58 | # COMMAND ---------- 59 | 60 | fs.write_table( 61 | 62 | name= feature_table_name, 63 | df = online_feature_table, 64 | mode = 'merge' 65 | 66 | ) 67 | 68 | # COMMAND ---------- 69 | 70 | # MAGIC %md #### Configure the online store 71 | # MAGIC Publish a feature table to an online store, int this case an AWS Aurora RDBMS. We will pass the database and name of the Delta table, as well as an [**AmazonRdsMySqlSpec** ](https://docs.databricks.com/dev-tools/api/python/latest/feature-store/online_store_spec/databricks.feature_store.online_store_spec.amazon_rds_mysql_online_store_spec.html#module-databricks.feature_store.online_store_spec.amazon_rds_mysql_online_store_spec)instance that contains connection info associated with our Aurora RDBMS. 72 | 73 | # COMMAND ---------- 74 | 75 | # Aurora cluster's Writer instance endpoint 76 | host = 'feature-store.c7e3jyejr1kf.us-east-1.rds.amazonaws.com' 77 | port = 3306 78 | 79 | # Delta database and table name 80 | database_name = 'feature_store' 81 | table_name = 'online_feature_table' 82 | 83 | user = dbutils.secrets.get(scope="feature_store_writer", key="feature_store-user") 84 | password = dbutils.secrets.get(scope="feature_store_writer", key="feature_store-password") 85 | 86 | read_secret_prefix = 'feature_store_reader/feature_store' 87 | write_secret_prefix = 'feature_store_writer/feature_store' 88 | 89 | fs = FeatureStoreClient() 90 | 91 | # COMMAND ---------- 92 | 93 | # MAGIC %md **Option 1**: Pass username and password stored as Databricks Secrets 94 | 95 | # COMMAND ---------- 96 | 97 | online_store = AmazonRdsMySqlSpec( 98 | hostname=host, 99 | port=port, 100 | user=user, 101 | password=password, 102 | database_name=database_name, 103 | table_name=table_name 104 | ) 105 | 106 | # COMMAND ---------- 107 | 108 | # MAGIC %md **Option 2**: Pass the name of the Databricks Secret Scope that contains the username and password. 109 | # MAGIC - The secret scope syntax is important. See [the examples here](https://docs.databricks.com/applications/machine-learning/feature-store/feature-tables.html#provide-online-store-credentials-using-databricks-secrets). 110 | 111 | # COMMAND ---------- 112 | 113 | online_store = AmazonRdsMySqlSpec( 114 | hostname=host, 115 | port=port, 116 | read_secret_prefix=read_secret_prefix, 117 | write_secret_prefix=write_secret_prefix, 118 | database_name=database_name, 119 | table_name=table_name 120 | ) 121 | 122 | # COMMAND ---------- 123 | 124 | # MAGIC %md View the feature table we will push to the online store 125 | 126 | # COMMAND ---------- 127 | 128 | display(spark.table(f'default.{table_name}')) 129 | 130 | # COMMAND ---------- 131 | 132 | # MAGIC %md Push the table to the Aurora database. 133 | # MAGIC - Available modes are 'merge' and 'overwrite'. 'Merge' will merge new records based on the primary key that was specified when the feature table was created. 134 | 135 | # COMMAND ---------- 136 | 137 | fs.publish_table(name=f'default.{table_name}', 138 | online_store=online_store, 139 | mode='merge') 140 | -------------------------------------------------------------------------------- /online_store/terraform/provider.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | 4 | random = { 5 | source = "hashicorp/random" 6 | version = "3.1.0" 7 | } 8 | 9 | aws = { 10 | source = "hashicorp/aws" 11 | } 12 | 13 | 14 | } 15 | } 16 | 17 | provider "aws" { 18 | region = var.AWS_REGION 19 | } 20 | 21 | provider random {} -------------------------------------------------------------------------------- /online_store/terraform/rds.tf: -------------------------------------------------------------------------------- 1 | # Deploy the Aurora instance in the default VPC 2 | data "aws_vpc" "default" { 3 | default = true 4 | } 5 | 6 | 7 | # Create a security group in the VPC that allow inbound traffic from the internet to Aurora 8 | resource "aws_security_group" "aurora-public-access" { 9 | vpc_id = data.aws_vpc.default.id 10 | name = "aurora-public-access" 11 | description = "allow public access to Aurora db" 12 | 13 | egress { 14 | from_port = 0 15 | to_port = 0 16 | protocol = "-1" 17 | cidr_blocks = ["0.0.0.0/0"] 18 | } 19 | 20 | ingress { 21 | from_port = 3306 22 | to_port = 3306 23 | protocol = "tcp" 24 | cidr_blocks = ["0.0.0.0/0"] 25 | ipv6_cidr_blocks = ["::/0"] 26 | } 27 | 28 | } 29 | 30 | 31 | # Generate a random database password 32 | resource "random_password" "db_master_pass" { 33 | length = 20 34 | special = true 35 | min_special = 4 36 | override_special = "!@#$" 37 | } 38 | 39 | 40 | /* 41 | # Provision the Aurora cluster and a single instance 42 | resource "aws_rds_cluster" "feature-store-cluster" { 43 | cluster_identifier = "feature-store-cluster" 44 | engine = "aurora-mysql" 45 | engine_mode = "provisioned" 46 | engine_version = "5.7.mysql_aurora.2.10.2" 47 | database_name = "feature_store" 48 | master_username = "feature_store_admin" 49 | master_password = random_password.db_master_pass.result 50 | port = 3306 51 | vpc_security_group_ids = [aws_security_group.aurora-public-access.id] 52 | skip_final_snapshot = true 53 | backup_retention_period = 1 54 | apply_immediately = true 55 | 56 | } 57 | 58 | 59 | resource "aws_rds_cluster_instance" "feature-store-instance" { 60 | count = 1 61 | identifier = "feature-store-cluster-${count.index}" 62 | cluster_identifier = aws_rds_cluster.feature-store-cluster.id 63 | instance_class = "db.r6g.large" 64 | engine = aws_rds_cluster.feature-store-cluster.engine 65 | engine_version = aws_rds_cluster.feature-store-cluster.engine_version 66 | publicly_accessible = true 67 | } 68 | 69 | output "endpoint" { 70 | value = aws_rds_cluster.feature-store-cluster.endpoint 71 | } 72 | 73 | output "database_user" { 74 | value = aws_rds_cluster.feature-store-cluster.master_username 75 | } 76 | 77 | output "database_pw" { 78 | value = aws_rds_cluster.feature-store-cluster.master_password 79 | sensitive = true 80 | } 81 | 82 | */ 83 | 84 | 85 | # Provision an RDS instance 86 | resource "aws_db_instance" "feature-store-db" { 87 | identifier = "feature-store" 88 | allocated_storage = 20 89 | storage_type = "gp2" 90 | max_allocated_storage = 0 91 | engine = "mysql" 92 | engine_version = "8.0.28" 93 | instance_class = "db.t3.micro" 94 | multi_az = false 95 | performance_insights_enabled = false 96 | username = "feature_store_admin" 97 | password = random_password.db_master_pass.result 98 | db_name = "feature_store" 99 | vpc_security_group_ids = [aws_security_group.aurora-public-access.id] 100 | publicly_accessible = true 101 | skip_final_snapshot = true 102 | backup_retention_period = 1 103 | apply_immediately = true 104 | 105 | } 106 | 107 | 108 | output "endpoint" { 109 | value = aws_db_instance.feature-store-db.endpoint 110 | } 111 | 112 | output "database_user" { 113 | value = aws_db_instance.feature-store-db.username 114 | } 115 | 116 | output "database_pw" { 117 | value = aws_db_instance.feature-store-db.password 118 | sensitive = true 119 | } 120 | 121 | -------------------------------------------------------------------------------- /online_store/terraform/vars.tf: -------------------------------------------------------------------------------- 1 | variable "AWS_REGION" { 2 | type = string 3 | default = "us-east-1" 4 | } 5 | 6 | -------------------------------------------------------------------------------- /passenger_demographic_features.py: -------------------------------------------------------------------------------- 1 | # Databricks notebook source 2 | # MAGIC %md ### Feature engineering logic for demographic features 3 | 4 | # COMMAND ---------- 5 | 6 | from pyspark.sql.functions import col 7 | import pyspark.sql.functions as func 8 | from databricks.feature_store import FeatureStoreClient 9 | from databricks.feature_store import feature_table 10 | 11 | # COMMAND ---------- 12 | 13 | # MAGIC %md Instatiate feature store client 14 | 15 | # COMMAND ---------- 16 | 17 | fs = FeatureStoreClient() 18 | 19 | # COMMAND ---------- 20 | 21 | # MAGIC %md Define feature transformation logic 22 | 23 | # COMMAND ---------- 24 | 25 | def compute_passenger_demographic_features(df): 26 | 27 | # Extract prefic from name, such as Mr. Mrs., etc. 28 | return (df.withColumn('NamePrefix', func.regexp_extract(col('Name'), '([A-Za-z]+)\.', 1)) 29 | # Extract a secondary name in the Name column if one exists 30 | .withColumn('NameSecondary_extract', func.regexp_extract(col('Name'), '\(([A-Za-z ]+)\)', 1)) 31 | # Create a feature indicating if a secondary name is present in the Name column 32 | .selectExpr("*", "case when length(NameSecondary_extract) > 0 then NameSecondary_extract else NULL end as NameSecondary") 33 | .drop('NameSecondary_extract') 34 | .selectExpr("PassengerId", 35 | "Name", 36 | "Sex", 37 | "case when Age = 'NaN' then NULL else Age end as Age", 38 | "SibSp", 39 | "NamePrefix", 40 | "NameSecondary", 41 | "case when NameSecondary is not NULL then '1' else '0' end as NameMultiple")) 42 | 43 | # COMMAND ---------- 44 | 45 | # MAGIC %md Apply transformation logic to source table 46 | 47 | # COMMAND ---------- 48 | 49 | df = spark.table('default.passenger_demographic_features') 50 | passenger_demographic_features = compute_passenger_demographic_features(df) 51 | 52 | # COMMAND ---------- 53 | 54 | display(passenger_demographic_features) 55 | 56 | # COMMAND ---------- 57 | 58 | # MAGIC %md Create an entry in the feature store if one does not exist 59 | 60 | # COMMAND ---------- 61 | 62 | feature_table_name = 'default.demographic_features' 63 | 64 | # If the feature table has already been created, no need to recreate 65 | try: 66 | fs.get_table(feature_table_name) 67 | print("Feature table entry already exists") 68 | pass 69 | 70 | except Exception: 71 | fs.create_table(name = feature_table_name, 72 | primary_keys = 'PassengerId', 73 | schema = passenger_demographic_features.schema, 74 | description = 'Demographic-related features for Titanic passengers') 75 | 76 | # COMMAND ---------- 77 | 78 | # MAGIC %md Populate the feature table 79 | 80 | # COMMAND ---------- 81 | 82 | fs.write_table( 83 | 84 | name= feature_table_name, 85 | df = passenger_demographic_features, 86 | mode = 'merge' 87 | 88 | ) 89 | 90 | # COMMAND ---------- 91 | 92 | # MAGIC %md To drop the feature table; this table must also be delted in the feature store UI 93 | 94 | # COMMAND ---------- 95 | 96 | # MAGIC %sql 97 | # MAGIC 98 | # MAGIC -- DROP TABLE IF EXISTS default.demographic_features; 99 | -------------------------------------------------------------------------------- /passenger_ticket_features.py.py: -------------------------------------------------------------------------------- 1 | # Databricks notebook source 2 | # MAGIC %md ### Feature engineering logic for ticket features 3 | 4 | # COMMAND ---------- 5 | 6 | from pyspark.sql.functions import col 7 | import pyspark.sql.functions as func 8 | from databricks.feature_store import FeatureStoreClient 9 | from databricks.feature_store import feature_table 10 | 11 | # COMMAND ---------- 12 | 13 | # MAGIC %md Instatiate feature store client 14 | 15 | # COMMAND ---------- 16 | 17 | fs = FeatureStoreClient() 18 | 19 | # COMMAND ---------- 20 | 21 | # MAGIC %md Define feature transformation logic 22 | 23 | # COMMAND ---------- 24 | 25 | def compute_passenger_ticket_features(df): 26 | 27 | # Extract characters of ticket if they exist 28 | return (df.withColumn('TicketChars_extract', func.regexp_extract(col('Ticket'), '([A-Za-z]+)', 1)) 29 | .selectExpr("*", "case when length(TicketChars_extract) > 0 then upper(TicketChars_extract) else NULL end as TicketChars") 30 | .drop("TicketChars_extract") 31 | 32 | # Extract the Cabin character 33 | .withColumn("CabinChar", func.split(col("Cabin"), '')[0]) 34 | 35 | # Indicate if multiple Cabins are present 36 | .withColumn("CabinMulti_extract", func.size(func.split(col("Cabin"), ' '))) 37 | .selectExpr("*", "case when CabinMulti_extract < 0 then '0' else cast(CabinMulti_extract as string) end as CabinMulti") 38 | .drop("CabinMulti_extract") 39 | 40 | # Round the Fare column 41 | .withColumn("FareRounded", func.round(col("Fare"), 0)) 42 | 43 | .drop('Ticket', 'Cabin')) 44 | 45 | # COMMAND ---------- 46 | 47 | # MAGIC %md Apply transformation logic to source table 48 | 49 | # COMMAND ---------- 50 | 51 | df = spark.table('default.passenger_ticket_feautures') 52 | passenger_ticket_features = compute_passenger_ticket_features(df) 53 | 54 | # COMMAND ---------- 55 | 56 | display(passenger_ticket_features) 57 | 58 | # COMMAND ---------- 59 | 60 | # MAGIC %md Create an entry in the feature store if one does not exist 61 | 62 | # COMMAND ---------- 63 | 64 | feature_table_name = 'default.ticket_features' 65 | 66 | # If the feature table has already been created, no need to recreate 67 | try: 68 | fs.get_table(feature_table_name) 69 | print("Feature table entry already exists") 70 | pass 71 | 72 | except Exception: 73 | fs.create_table(name = feature_table_name, 74 | primary_keys = 'PassengerId', 75 | schema = passenger_ticket_features.schema, 76 | description = 'Ticket-related features for Titanic passengers') 77 | 78 | # COMMAND ---------- 79 | 80 | fs.write_table( 81 | 82 | name= feature_table_name, 83 | df = passenger_ticket_features, 84 | mode = 'merge' 85 | 86 | ) 87 | 88 | # COMMAND ---------- 89 | 90 | # MAGIC %md To drop the feature table; this table must also be delted in the feature store UI 91 | 92 | # COMMAND ---------- 93 | 94 | # MAGIC %sql 95 | # MAGIC 96 | # MAGIC -- DROP TABLE IF EXISTS default.ticket_features; 97 | --------------------------------------------------------------------------------