Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

synced with main, cleaned outputs #134

Draft
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

rahulkulhalli
Copy link

@Abby-Wheelis @shankari Please disregard the previous draft PR. I have synced this branch with the current main implementation.

Copy link
Member

@Abby-Wheelis Abby-Wheelis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few questions for now, I'll return to this when I get to run the notebooks myself

"outputs": [],
"source": [
"# Add path to your emission server here.\n",
"emission_path = Path(os.getcwd()).parent.parent / 'my_emission_server' / 'e-mission-server'\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't needed to do this before, why do you need the path?

"metadata": {},
"outputs": [],
"source": [
"## Source: scaffolding.py\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this differ from the one in scaffolding.py? Could we import it instead

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we could import it directly. I'll make the changes to just use the code from scaffolding instead. I wanted to see how the code works, which is why I had kept everything in one notebook.

"metadata": {},
"outputs": [],
"source": [
"## Source: scaffolding.py\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above! I'll make the changes to use the code from scaffolding.py instead

"survey_data.loc[survey_data.n_residents_with_license == 'more_than_4'] = 4\n",
"survey_data.n_residents_with_license = survey_data.n_residents_with_license.astype(int)\n",
"\n",
"# In allCEO, we see 50 & 9999. What??\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what does this comment mean? Was there a data issue? Did it get resolved?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For some observations in the allCEO demographic data, there was a user who had input 9999 as values for n_residence_members, n_residents_u18, and n_residents_with_license. There were also 2 users who had provided a n_residence_members input as 50. I dealt with these instances by dropping these users.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oooh, ok, they were individual outlier responses, maybe you can update the comment

"source": [
"from sklearn.preprocessing import OneHotEncoder\n",
"\n",
"def generate_ohe_features(df, feature_name):\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For my clarification, is this "flattening" out, for example, all of the occupational categories so that every user has a 0/1 for each occupation (and the column with 1 is their occupation)?

Copy link
Author

@rahulkulhalli rahulkulhalli Apr 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that is correct. Given a set of alternatives, if an observation lies within one of the alternatives, we activate that bit and keep the bits for the remaining alternatives zero. It is indeed a way of flattening-out categorical data.

"metadata": {},
"outputs": [],
"source": [
"# Additional preprocessing to filter unwanted users from sensed trips data.\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does "unwanted" here just mean those who don't have both sensed trip AND demographic survey data? It might be good to clarify that in the comment.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, that was a misplaced comment. I resolved it. Sorry!

"metadata": {},
"outputs": [],
"source": [
"def filter_mph(df: pd.DataFrame, low=0.1, high=0.9) -> pd.DataFrame:\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this remove trips that fall outside of these? That should be ok, but if it removes trips that have any segments faster than these speeds I'd worry about that - anecdotally I've broken both of those speeds several times, but maybe not for a trip on the whole (I think I have sustained walking around 4mph though, back when I was walking in a mostly flat area)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it removes trips that fall outside given range of percentiles. The default arguments are configured to be the 10th and 90th percentile, but in the subsequent cell, I call the method by specifying the 1st and 99th percentile as the outlier ranges. It is fairly standard preprocessing practice to remove these outliers, especially because such outliers can easily dominate/influence any aggregation-based analyses.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So they're removed based on their position as outliers (by percentile) not by these hard cutoff values? I was looking at the 4mph walking and 15mph biking cutoffs

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following up on this based on our call today - it seems that yes, we are cutting off sections over these levels right now, but plan to re-evaluate this decision in the future -- maybe remove outliers since we have data to determine what those are rather than using the outside source.

splitter = StratifiedGroupKFold(n_splits=5, shuffle=shuffle, random_state=SEED)
# splitter = GroupKFold(n_splits=5)

for train_index, test_index in splitter.split(X, y, groups):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this written as a loop if you only ever want it to execute once?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do so create one chunk of train and test sets with 80% and 20% of the stratified data respectively. sklearn's reguar train_test_split method unfortunately does not provide a way to create training and testing splits with groups. There may be other ways to achieve this, but this is what I went with for now.

For clarification, StratifiedGroupKFold creates splits by stratifying w.r.t. the number of trips per user. The algorithm then attempts to preserve the percentage of groups in each split. I purposely mention n=5 splits, because that is the information that the algorithm uses to determine the percentage of data in each split.

n=5 => 20% of test data. Therefore we create one split, get the training and testing data, and break the iteration.

" 1. df = a huge dataframe of user-trips. Each row is a trip.\n",
" 2. every trip is divided into sections: [walk, transit, walk]\n",
" 3. Each section has a corresponding distance and duration: [m1, m2, m3], [t1, t2, t3], [d1, d2, d3]\n",
" 4. What we are doing is only considering the mode, distance, and duration of the section with the largest distance\n",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this mean the summary ends up being just one segment of the trip? Or is the total of all segments with the most represented mode?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For every user, the trip summary is a combination of the aggregation performed over the 'argmax' section information and the entire trip-level distance and duration aggregates.

},
{
"data": {
"image/png": "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0BzpoQAAdqvTg86/+c1vxmWXXRbvvvtunHbaaRER8dhjj8WECRPi8ssvb9ACAQCaCz0UAMBudQqlJkyYEO+8806MGzcutm/fHhERhx12WFx55ZUxceLEBi0QAKC50EMBAOy236HUzp0746mnnoorr7wyvv/978eyZcuioKAgunfvHtls9kDUCADQ5OmhAABq2u9QqkWLFnH66afHsmXLomvXrnHSSScdiLoAAJoVPRQAQE11un3v+OOPjzfffDO6du3a0PUAwEFn1apVUVlZme8ymqz27dvHUUcdle8y9okeqiY/+3W3bNmyfJcAAPVWp1Dq2muvjSuuuCL+4z/+Iz772c/G4YcfXmN5UVFRgxQHAM3dqlWromfP42Lbtq35LqXJKihoHa++uqxJBFN6qN387DeMd6u357sEAKizOoVSZ5xxRkREfPnLX45MJpMbT5IkMplM7Ny5s2GqA4BmrrKyMrZt2xr9/+XqKCo9Ot/lNDlVa1bGc3deE5WVlU0ilNJD7eZnv37WLH0m/vDQbbFjx458lwIAdVanUOqJJ55o6DoA4KBWVHp0tDvq2HyXwQGmh6rNz37dVK1Zme8SAKDe6hRKDRo0qKHrAABo9vRQAAC7HVLXFz755JNx3nnnxcCBA+PPf/5zRET893//dzz11FMNVhwAQHOjhwIAeE+dQqn7778/Tj/99CgoKIgXXnghqqurIyJi06ZNMXny5AYtEACgudBDAQDsVqdQ6oc//GHceuutcfvtt8ehhx6aGx84cGC88MILDVYcAEBzoocCANitTqHUa6+9Fqeeemqt8aKiotiwYUN9awIAaJb0UAAAu9UplCotLY0//vGPtcafeuqpOOaYY+pdFABAc6SHAgDYrU6h1IUXXhiXXnppPPfcc5HJZOLtt9+Oe++9N6644ooYN25cQ9cIANAs6KEAAHZrWZcXTZgwIaqqqmLIkCHxt7/9LU499dTIZrNxxRVXxMUXX9zQNQIANAt6KACA3fYrlNq6dWt897vfjQcffDDefffdGDFiRFx++eUREdGrV69o06bNASkSAKAp00MBANS2X6HU1VdfHdOnT49zzz03CgoKYsaMGbFr16749a9/faDqAwBo8vRQAAC17VcoNWvWrLjjjjvin/7pnyIi4txzz43Pf/7zsXPnzmjRosUBKRAAoKnTQwEA1LZfDzpfvXp1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0pqlz8QfHrotPj3qyjiya898l9PkvH/8duzYke9SAACAfeD3yPrze2T9VK1ZGc/deU1UVlYKpZqDotKjo91Rx+a7jCapas3KiIho0+Eox7AO3j9+AABA0+L3yLrze2Tz4EHnAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6hp1KFVWVhaZTKbGVFJSku+yAAAaNT0UANAUtMx3AR+nd+/e8bvf/S4336JFizxWAwDQNOihAIDGrtGHUi1bttyvb/aqq6ujuro6N19VVXUgygIAaNT0UABAY9eob9+LiFi+fHl07NgxunbtGv/0T/8Ub7755keuX15eHm3bts1NnTt3TqlSAIDGQw8FADR2jTqU6t+/f9x9993x6KOPxu233x4VFRUxcODAWLdu3V5fM3HixNi4cWNuWr16dYoVAwDknx4KAGgKGvXte8OHD8/99/HHHx8DBgyIv/u7v4u77rorxo8fv8fXZLPZyGazaZUIANDo6KEAgKagUV8p9WGHH354HH/88bF8+fJ8lwIA0GTooQCAxqhJhVLV1dWxbNmyKC0tzXcpAABNhh4KAGiMGnUodcUVV8T8+fNjxYoV8dxzz8U//uM/RlVVVYwePTrfpQEANFp6KACgKWjUz5T605/+FP/8z/8clZWVceSRR8bJJ58czz77bHTp0iXfpQEANFp6KACgKWjUodTMmTPzXQIAQJOjhwIAmoJGffseAAAAAM2TUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA1AmlAAAAAEidUAoAAACA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1y4OP/zw6NevXzz33HMxffr0uOaaa+J///d/cz3B+33Gh/uQpUuXxmmnnZbb/7/+67/G5s2bc8vHjBkTX/nKV+I///M/o7S0NI444oi46KKL4t13392n97d27doYMWJEFBQURNeuXePee++tsfzDt+JHRGzYsCEymUzMmzcvInaf3x999NHo169fZLPZePLJJ+ONN96Is846K4qLi6NNmzZx0kknxe9+97vcdgYPHhxvvfVWfOc738kdh4g93743derU+Lu/+7to1apVHHvssfHf//3fNZZnMpn4xS9+EWeffXa0bt06unfvHg899NA+HYOdO3fGN77xjejatWsUFBTEscceG7fcckuNdd4/zuXl5dGxY8fo0aNHREQsXLgwPv3pT+d6nwcffHCPjy549NFH48QTT4yCgoI47bTTYu3atfHII4/EcccdF0VFRfHP//zPsXXr1tz+Zs+eHV/4whfiE5/4RBxxxBHxD//wD/HGG2/klt99993Rpk2bWL58eW7skksuiR49euR+Pj/K0UcfHT/84Q9zPXGXLl3i//7f/xt//etf46yzzoo2bdrE8ccfH4sXL67xuoULF8app54aBQUF0blz5/j2t79dY3/33HNP9OvXLwoLC6OkpCRGjRoVa9euzS1//3g89thj0a9fv2jdunUMHDgwXnvttX34pN7z0EMPRb9+/eKwww6L9u3bx8iRI/d7/x/+WYUGlQB8hG9961tJp06dkjlz5iQvvfRS8g//8A9JmzZtkksvvTRJkiSJiOSBBx6o8Zq2bdsm06ZNS5IkSVasWJFERHL00Ucn999/f/Lmm28mf/7zn5M//elPyY9//OPkxRdfTN54443kJz/5SdKiRYvk2WefTZIkSTZs2JAMGDAgueCCC5I1a9Yka9asSXbs2JE88cQTSUQk69evT5IkSRYvXpwccsghyb//+78nr732WjJt2rSkoKAgt/8kSZIuXbok7dq1S376058my5cvT8rLy5NDDjkkWbZs2ce+//fr79mzZzJ79uzklVdeSU4++eTkM5/5TDJ48ODkqaeeSl544YWkW7duydixY3Ovu+2225LS0tLce77//vuTdu3aJdOnT0+SJEk2b96cHHnkkck555yT/OEPf0h+85vfJMccc0wSEcmLL76YJElS671+3DFLkiQZNGhQUlRUlJSVlSWvv/56ctdddyWZTCaZM2fOPn7iAFA3b7/9dtKyZcvkxhtvTFasWJG89NJLyU9/+tNk06ZNH3te3LRpU3LMMcckp5xySvLkk08my5cvT+67775k4cKFydatW5PLL7886d27d64n2Lp1a5IkNfuQLVu2JB07dkxGjhyZLF26NHnssceSrl27JqNHj87VOHr06KSoqCgZO3ZssmzZsuQ3v/lN0rp16+S2227bp/c4fPjwpE+fPsnChQuTxYsXJwMHDkwKCgqSm266KUmS3X3D++fyJEmS9evXJxGRPPHEE0mS7D6/9+3bN5kzZ07yxz/+MamsrEyWLFmS3HrrrclLL72UvP7668mkSZOSww47LHnrrbeSJEmSdevWJZ06dUr+/d//PXcckiRJpk2blrRt2za3v1mzZiWHHnpo8tOf/jR57bXXkhtuuCFp0aJF8vjjj+fWiYikU6dOyYwZM5Lly5cn3/72t5M2bdok69at+9hjsH379uQHP/hB8vvf/z558803k3vuuSdp3bp1ct9999U4zm3atEnOP//85A9/+EOydOnSpKqqKmnXrl1y3nnnJS+//HLy8MMPJz169Nhj73PyySfX6LEGDRqUDBs2LHnhhReSBQsWJEcccURy3XXX5fb3P//zP8n999+fvP7668mLL76YjBgxIjn++OOTnTt35tb52te+lpx00knJu+++mzzyyCPJoYcemvz+97/fp8/9/V7y1ltvTV5//fXkW9/6VlJYWJicccYZya9+9avktddeS77yla8kxx13XLJr164kSZLkpZdeStq0aZPcdNNNyeuvv548/fTTyYknnpiMGTMmt9077rgjefjhh5M33ngjeeaZZ5KTTz45GT58eG75+8ejf//+ybx585KXX345OeWUU5KBAwfuU93/7//9v6RFixbJD37wg+SVV15JlixZklx77bX7vf8P/6xCQxJKAXu1adOmpFWrVsnMmTNzY+vWrUsKCgr2O5S6+eabP3Z/Z555ZnL55Zfn5gcNGpTbz/s+HNSMGjUqGTp0aI11vvvd7ya9evXKzXfp0iU577zzcvO7du1KOnTokEydOvVja3q//l/84he5sV/+8pdJRCSPPfZYbqy8vDw59thjc/OdO3dOZsyYUWNb//Ef/5EMGDAgSZIk+fnPf560a9cu2bJlS2751KlTPzKU2pM9HbMvfOELNdY56aSTkiuvvPJj3ysA1Mfzzz+fRESycuXKWsv25bxYWFi411Dk6quvTk444YRa4x/sQ2677bbkk5/8ZLJ58+bc8t/+9rfJIYccklRUVCRJ8l5Y0qVLl2THjh25db72ta8l55xzzse+v9deey2JiBpfBi1btiyJiDqFUg8++ODH7rNXr17Jf/3Xf+Xmu3TpktvX+z4cSg0cODC54IILaqzzta99LTnzzDNz8xGRfO9738vNb968OclkMskjjzzysTXtybhx45KvfvWrufnRo0cnxcXFSXV1dW5s6tSpyRFHHJFs27YtN3b77bfvsff53e9+l1unvLw8iYjkjTfeyI1deOGFyemnn77XetauXZtERLJ06dLc2DvvvJN06tQp+da3vpUUFxcnP/zhD/f5/X24l1yzZk0SEcn3v//93NgzzzyTREQuLDz//POTf/3Xf62xnSeffDI55JBDahyDD/r973+fRESyadOmJEn2fDx++9vfJhGx12180IABA5Jzzz13n9/n3va/Lz+rUFdu3wP26o033ojt27fHgAEDcmPt2rWLY489dr+31a9fvxrzO3fujGuvvTb69u0bRxxxRLRp0ybmzJkTq1at2q/tLlu2LD7/+c/XGPv85z8fy5cvj507d+bG+vbtm/vvTCYTJSUlNS5P/jgffH1xcXFERBx//PE1xt7f3l//+tdYvXp1fOMb34g2bdrkph/+8Ie5S8mXLVsWJ5xwQrRu3Tq3jQ8e5z3Z12P2wVojIkpLS/frvQJAXZxwwgnxxS9+MY4//vj42te+FrfffnusX79+n86LS5YsiRNPPDHatWtX5/2/f249/PDDc2Of//znY9euXTVud+rdu3e0aNEiN7+v58lly5ZFy5Yta/Q0PXv2rPNfvvtwb7Rly5aYMGFC9OrVKz7xiU9EmzZt4tVXX22w3mjZsmU1xj7YLxx++OFRWFi4z/3CrbfeGv369Ysjjzwy2rRpE7fffnutOo8//vgaz5F67bXXom/fvnHYYYflxj73uc/tcfsf7rtat24dxxxzTI2xD9b6xhtvxKhRo+KYY46JoqKi6Nq1a0REjZo++clPxh133JG7tfHf/u3f9um97q2m99/jh8fer+v555+P6dOn1/iZP/3002PXrl2xYsWKiIh48cUX46yzzoouXbpEYWFhDB48uFbdH953aWlpjf18lCVLlsQXv/jFvS7f1/1/+GcVGpInlAF7lSTJx66TyWRqrben5zJ8sEGMiLjhhhvipptuiptvvjmOP/74OPzww+Oyyy6L7du373eN7z9T4aPq/vCD1TOZTOzatWuf9/PB17+/vw+Pvb+99//39ttvj/79+9fYzvtN8L4c2w/b12NW3/cKAHXRokWLmDt3bixcuDDmzJkT//Vf/xWTJk2K3/zmNxHx0efFhnhQ9556gvd9cLyu58n3z91720dExCGHHFJj3Yg990URtXuj7373u/Hoo4/Gf/7nf0a3bt2ioKAg/vEf/3G/e6M91binY1PX4/CrX/0qvvOd78QNN9wQAwYMiMLCwvjxj38czz33XI31Pvz+9rVn+3BtmUzmY2sdMWJEdO7cOW6//fbo2LFj7Nq1K/r06VPr2C1YsCBatGgRb7/9dmzZsiWKioo+9v3uraa9jX2wH7zwwgvj29/+dq1tHXXUUbFly5YYNmxYDBs2LO6555448sgjY9WqVXH66ad/ZG/34f18lI/6d7U/+//wZwkNyZVSwF5169YtDj300Hj22WdzY+vXr6/xZ4ePPPLIWLNmTW5++fLlNR48uTdPPvlknHXWWXHeeefFCSecEMccc0yNh09GvPfX5z54tdOe9OrVK5566qkaYwsXLowePXrU+BY0TcXFxfGpT30q3nzzzejWrVuN6f1v7nr16hX/+7//G9u2bcu97oPHeU/25ZgBQD5lMpn4/Oc/H9dcc028+OKL0apVq3j66ac/9rzYt2/fWLJkSbzzzjt73O6+9gRLliyp8SDpp59+Og455JDcg7br47jjjosdO3bUeJj1a6+9VuOPrxx55JERETV6ow8+9PyjPPnkkzFmzJg4++yz4/jjj4+SkpJYuXJljXX25Tgcd9xxe+yNjjvuuH2qY1/qHDhwYIwbNy5OPPHE6NatW42Hiu9Nz54946WXXorq6urc2IcfDF4X69ati2XLlsX3vve9+OIXvxjHHXdcrF+/vtZ6CxcujOuvvz5+85vfRFFRUVxyySX13vdH+cxnPhMvv/xyrZ/5bt26RatWreLVV1+NysrKuO666+KUU06Jnj17NviV7X379o3HHntsj8vS2D/sC6EUsFdt2rSJb3zjG/Hd7343HnvssfjDH/4QY8aMyX0LGBFx2mmnxZQpU+KFF16IxYsXx9ixY2t9m7Un3bp1y32bumzZsrjwwgujoqKixjpHH310PPfcc7Fy5cqorKzc4zdCl19+eTz22GPxH//xH/H666/HXXfdFVOmTIkrrrii/gegHsrKyqK8vDxuueWWeP3112Pp0qUxbdq0uPHGGyMiYtSoUXHIIYfEN77xjXjllVfi4Ycfjv/8z//8yG3uyzEDgHx57rnnYvLkybF48eJYtWpVzJo1K/7617/Gcccd97HnxX/+53+OkpKS+MpXvhJPP/10vPnmm3H//ffHM888ExHv9QQrVqyIJUuWRGVlZY1g433nnntuHHbYYTF69Oj4wx/+EE888URccsklcf755+duraqPY489Ns4444y44IIL4rnnnovnn38+vvnNb9a4GqWgoCBOPvnkuO666+KVV16JBQsWxPe+97192n63bt1i1qxZsWTJkvjf//3fGDVqVK3e5+ijj44FCxbEn//856isrNzjdr773e/G9OnT49Zbb43ly5fHjTfeGLNmzWqw3qhbt26xePHiePTRR+P111+P73//+7Fo0aKPfd377+df//VfY9myZbmrwiI++uqzj/PJT34yjjjiiLjtttvij3/8Yzz++OMxfvz4Guts2rQpzj///Ljkkkti+PDhMWPGjPjVr34Vv/71r+u8349z5ZVXxjPPPBMXXXRRLFmyJJYvXx4PPfRQLgw76qijolWrVvFf//Vf8eabb8ZDDz0U//Ef/9GgNVx99dXxy1/+Mq6++upYtmxZLF26NK6//vrU9g/7QigFfKQf//jHceqpp8aXv/zl+NKXvhRf+MIX4rOf/Wxu+Q033BCdO3eOU089NUaNGhVXXHFFjeck7c33v//9+MxnPhOnn356DB48ONeIftAVV1wRLVq0iF69euUuKf6wz3zmM/GrX/0qZs6cGX369Ikf/OAH8e///u8xZsyY+r71evnmN78Zv/jFL2L69Olx/PHHx6BBg2L69Om5b4TbtGkTv/nNb+KVV16JE088MSZNmhQ/+tGPPnKb+3LMACBfioqKYsGCBXHmmWdGjx494nvf+17ccMMNMXz48I89L7Zq1SrmzJkTHTp0iDPPPDOOP/74uO6663JXPX/1q1+NM844I4YMGRJHHnlk/PKXv6y1/9atW8ejjz4a77zzTpx00knxj//4j/HFL34xpkyZ0mDvcdq0adG5c+cYNGhQjBw5Mv71X/81OnToUGOdO++8M959993o169fXHrppfHDH/5wn7Z90003xSc/+ckYOHBgjBgxIk4//fT4zGc+U2Odf//3f4+VK1fG3/3d3+Wuyvqwr3zlK3HLLbfEj3/84+jdu3f8/Oc/j2nTpuWeF1RfY8eOjZEjR8Y555wT/fv3j3Xr1sW4ceM+9nVFRUXxm9/8JpYsWRKf/vSnY9KkSfGDH/wgIqLGc6b21yGHHBIzZ86M559/Pvr06RPf+c534sc//nGNdS699NI4/PDDY/LkyRHx3nPFfvSjH8XYsWPjz3/+c533/VH69u0b8+fPj+XLl8cpp5wSJ554Ynz/+9/PPRPqyCOPjOnTp8evf/3r6NWrV1x33XUf+wXl/ho8eHD8+te/joceeig+/elPx2mnnZa7zTKN/cO+yCR1ebAJAAAA1MO9994bX//612Pjxo0N8lwxoOnxoHMAAAAOuLvvvjuOOeaY+NSnPhX/+7//G1deeWX8n//zfwRScBBz+x5wUJs8eXKNP9X7wWn48OH5Lg8ASMmTTz65156gTZs2+S4vNWPHjt3rMRg7dmy9tl1RURHnnXdeHHfccfGd73wnvva1r8Vtt93WQJXXTVP+3Hv37r3Xuu+99958lwf7xO17wEHtnXfe2etf+ikoKIhPfepTKVcEAOTDtm3bPvL5Qt26dUuxmvxZu3ZtVFVV7XFZUVFRrWdoNXVN+XN/66234t13393jsuLi4igsLEy5Ith/QikAAAAAUuf2PQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABSJ5QCAAAAIHVCKQAAAABS1zLfBRxou3btirfffjsKCwsjk8nkuxwAoIlJkiQ2bdoUHTt2jEMOOXi+z3v/fQMA1NXHZTHNPpR6++23o3PnzvkuAwBo4lavXh2dOnXKdxmpqaqqik984hP5LgMAaMI2bNgQbdu23evyZh9KFRYWRsR7jWRRUVGeqwEAmpqqqqro3Llzrqc42OihAID99X7/9HGafSj1/mViRUVFGioAoM4OtscA6KEAgPr6uP7p4HkwAgAAAACNhlAKAAAAgNQJpQAAAABInVAKAAAAgNQJpQAAAABInVAKAAAAgNQJpQAAAABInVAKAAAAgNQJpQAAAABInVAKAAAAgNQJpQAAAABInVAKAAAAgNQJpQAAAABInVAKAAAAgNQJpQAAAABInVAKAAAAgNQJpQAAAABIXct8FwANYdWqVVFZWZnvMg5a7du3j6OOOirfZQAAAE2E3+HyrzH8HieUoslbtWpV9Ox5XGzbtjXfpRy0Cgpax6uvLsv7/6EBAACNn9/hGofG8HucUIomr7KyMrZt2xr9/+XqKCo9Ot/lHHSq1qyM5+68JiorK4VSAADAx/I7XP41lt/jhFI0G0WlR0e7o47NdxkAAADsA7/D4UHnAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKROKAUAAABA6oRSAAAAAKQur6HU1KlTo2/fvlFUVBRFRUUxYMCAeOSRR3LLx4wZE5lMpsZ08skn57FiAAAAABpCy3zuvFOnTnHddddFt27dIiLirrvuirPOOitefPHF6N27d0REnHHGGTFt2rTca1q1apWXWgEAAABoOHkNpUaMGFFj/tprr42pU6fGs88+mwulstlslJSU5KM8AAAAAA6QRvNMqZ07d8bMmTNjy5YtMWDAgNz4vHnzokOHDtGjR4+44IILYu3atR+5nerq6qiqqqoxAQAAANC45D2UWrp0abRp0yay2WyMHTs2HnjggejVq1dERAwfPjzuvffeePzxx+OGG26IRYsWxWmnnRbV1dV73V55eXm0bds2N3Xu3DmttwIAAADAPsrr7XsREccee2wsWbIkNmzYEPfff3+MHj065s+fH7169Ypzzjknt16fPn2iX79+0aVLl/jtb38bI0eO3OP2Jk6cGOPHj8/NV1VVCaYAAAAAGpm8h1KtWrXKPei8X79+sWjRorjlllvi5z//ea11S0tLo0uXLrF8+fK9bi+bzUY2mz1g9QIAAABQf3m/fe/DkiTZ6+1569ati9WrV0dpaWnKVQEAAADQkPJ6pdRVV10Vw4cPj86dO8emTZti5syZMW/evJg9e3Zs3rw5ysrK4qtf/WqUlpbGypUr46qrror27dvH2Wefnc+yAQAAAKinvIZSf/nLX+L888+PNWvWRNu2baNv374xe/bsGDp0aGzbti2WLl0ad999d2zYsCFKS0tjyJAhcd9990VhYWE+ywYAAACgnvIaSt1xxx17XVZQUBCPPvpoitUAAAAAkJZG90wpAAAAAJo/oRQAAAAAqRNKAQAAAJA6oRQAAAAA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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line (and the other ones like it in this file) are throwing an error for me

ValueError: 'stat' must be one of ['count', 'density', 'probability', 'frequency'], but percent was passed.

I wonder if it could be something like my seaborn version? I'll check what is installed against what you have in the readme

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep! Updating (with the instructions in the readme you included 🎉 ) fixed the issue!

@Abby-Wheelis
Copy link
Member

With a few exceptions, I am able to run these now:

  • still need to run the models in notebook 03, I'll let those run this evening while I'm at home
  • getting an error with script 02 that there is no key transit - this is confusing since the script has not changed and it ran earlier, I will try this one again tonight as well

@Abby-Wheelis
Copy link
Member

The models in 03 run for me, though they output all 1's, is this a consequence of the dataset (nicr) that I'm using and how small it is?

@rahulkulhalli
Copy link
Author

With a few exceptions, I am able to run these now:

* still need to run the models in notebook 03, I'll let those run this evening while I'm at home

* getting an error with script 02 that there is no key `transit` - this is confusing since the script has not changed and it ran earlier, I will try this one again tonight as well

02 was not updated yesterday. it seems the preprocessing fix might have made introduced some changes in that code. I shall fix it today

@rahulkulhalli
Copy link
Author

The models in 03 run for me, though they output all 1's, is this a consequence of the dataset (nicr) that I'm using and how small it is?

Yes, due to the small data size in NICR, they are overfitting. If you look at the cosine similarities, even they are very high.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants