"
],
"text/plain": [
" address total black hispanic white zip %black %hispanic \\\n",
"0 2819 W 21ST PL 342 33 304 2 60623 9.6 88.9 \n",
"\n",
" %white \n",
"0 0.0 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"for i in df23.index:\n",
" df23.loc[i,'%black']=round(100*df23.loc[i,'black']/df23.loc[i,'total'],1)\n",
" df23.loc[i,'%hispanic']=round(100*df23.loc[i,'hispanic']/df23.loc[i,'total'],1)\n",
" df23.loc[i,'%white']=round(df23.loc[i,'white']/df23.loc[i,'total'],1)\n",
"df23.head(1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "34f7bee4",
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Intercept is [98.71284906]\n",
"Slope is [[-0.99515441]]\n",
"R^2 for OLS is 0.9996943205528053\n"
]
},
{
"data": {
"image/png": "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G4GRgDpqdCumwsLCMW26u7spKiqipKTkkg8xubu7s3btWgBSU1PNb3USEbEWhU4RmZYyMjKYPXs2Tz31lEX56LL6V199BYyEw8OHD2MwGMxvM7pS9fX1xMbGMjg4yO23346fn98l6xoMBvMblbKyshgeHgZGZkdLSkrYsGGDue7F95yGh4dja2tLTk4O+fn55vLu7m7i4uLo7e3l4YcfHnM/6MWeeeYZ7rjjDrq6uvjggw/+5tmKiEyMnl4XkWnn8OHDHD9+nKioKBwcHCyOLV++nL1795KZmUlxcTF//PEHvb29REZGYmtrO6l+YmJiLJbpTSYTPT091NXVYTKZMBgMvPPOO+Zl9vHY2dnx8ssvs3PnTjIzM8nPz2fOnDmcPXuWtrY2HBwc8PHx4dixY5w9e9bcztvbmzfffJPt27cTHx9PRkYGBoOBM2fOcOHCBebOnUtMTMxfjt/W1pbo6GjWrl3LN998w/Lly1m0aNGkvgMRkYnSTKeITDu7d+/G09NzzCwnjCyv79q1i/vvv5/GxkZcXFyIjIy02GB9ok6cOEFVVZX57/jx47S2tuLt7c3q1av5/PPPL7l10cVeeOEFEhMT8fX1ZXBwkJqaGhwdHQkMDCQrK8u8DH7o0CGLdmFhYaSlpfHoo4/S399PbW0tBoOB5557jqysrAm9e93Pz4+AgADAcjslEZGrzaajo0OPLYqIiIiIVWmmU0RERESsTqFTRERERKxOoVNERERErE6hU0RERESsTqFTRERERKxOoVNERERErE6hU0RERESsTqFTRERERKxOoVNERERErE6hU0RERESsTqFTRERERKxOoVNERERErE6hU0RERESs7n8fj3ybXhsT6gAAAABJRU5ErkJggg==",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.linear_model import LinearRegression #sklearn is a machine learning library\n",
"X=df23[[\"%black\"]]\n",
"Y=df23[[\"%hispanic\"]]\n",
"reg=LinearRegression()\n",
"reg.fit(X,Y)\n",
"print(\"Intercept is \", reg.intercept_)\n",
"print(\"Slope is \", reg.coef_)\n",
"print(\"R^2 for OLS is \", reg.score(X,Y))\n",
"# x values on the regression line will be between 0 and 100 with a spacing of .0\n",
"x = np.arange(0, 100 ,.01) \n",
"# define the regression line y = mx+b here\n",
"[[m]]=reg.coef_\n",
"[b]=reg.intercept_\n",
"y = m*x + b \n",
"\n",
"fig=df23.plot(x='%black', y='%hispanic', style='o') \n",
"plt.title('% Black vs % Hispanic in 60623 pre-K - 8 Schools') \n",
"plt.xlabel('% Black') \n",
"plt.ylabel('% Hispanic') \n",
"# plot the regression line \n",
"plt.plot(x,y, 'r') #add the color for red\n",
"plt.legend([],[], frameon=True)\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "001650de",
"metadata": {},
"source": [
"## Section 2 Exercise"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "a5df4121",
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"# read from excel file, dropping all entries with N/A values\n",
"violence = pd.read_csv('Violence.csv').dropna(subset = ['LATITUDE', 'LONGITUDE'])\n",
"\n",
"# Streamline columns to just latitude and longitude, reduce to just first 1000 entries\n",
"violence = violence[['LATITUDE', 'LONGITUDE']].head(1000)\n",
"\n",
"# Reset the index for consistent numbering\n",
"violence = violence.reset_index(drop = True)\n",
"\n",
"# Get the 100 colors used to identify clusters\n",
"colorlist = list(mcolors.XKCD_COLORS.values())[:100]\n",
"\n",
"# Make a map that uses k-means clustering to divide locations into up to 100 clusters \n",
"#the inout variable (clusters) specifies the number of clusters. \n",
"#the input variable data specifies the locations.\n",
"def make_map(clusters,data):\n",
" assert clusters >= 1, \"Number of clusters must be at least 1\"\n",
" assert clusters <= len(colorlist), \"Number of clusters exceeds maximum amount\"\n",
" x=data[['LATITUDE', 'LONGITUDE']]\n",
" k_means = KMeans(n_clusters=clusters)\n",
" k_means.fit(x)\n",
" k_means_labels = k_means.labels_\n",
" \n",
" x['labels'] = k_means_labels\n",
" k_map = folium.Map(location=[41.783, -87.621], tiles=\"Stamen Toner\", zoom_start=10)\n",
"\n",
" for i in np.arange(0,len(x),1): #add parcel data one\n",
" p=[x.loc[i,\"LATITUDE\"],x.loc[i,\"LONGITUDE\"]]# by one to the base map.\n",
" k_map.add_child(folium.CircleMarker(p, radius=1,color=colorlist[x.loc[i, 'labels']], fill = True, fill_opacity = 1))\n",
" return k_map"
]
},
{
"cell_type": "markdown",
"id": "3b8fdf49",
"metadata": {},
"source": [
"Let's take a look at the 22 clusters."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "e59e306b",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\pisihara\\AppData\\Local\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:870: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
" warnings.warn(\n",
"C:\\Users\\pisihara\\AppData\\Local\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1382: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=4.\n",
" warnings.warn(\n"
]
},
{
"data": {
"text/html": [
"
Make this Notebook Trusted to load map: File -> Trust Notebook
"
],
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cluster22_map = make_map(22,violence)\n",
"cluster22_map"
]
},
{
"cell_type": "markdown",
"id": "5eae1866",
"metadata": {},
"source": [
"Here is an overlay of this map onto police districts."
]
},
{
"cell_type": "markdown",
"id": "d329d718",
"metadata": {},
"source": [
"\n",
" "
]
},
{
"cell_type": "markdown",
"id": "e61a3d44",
"metadata": {},
"source": [
"While it is not perfect, our k-means algorithm clustered the violent occurrences in a similar manner to the police district boundaries."
]
},
{
"cell_type": "markdown",
"id": "233e4255",
"metadata": {},
"source": [
"## Section 3 Exercise"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "20a06013",
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"def imagetovector(npix,directory,nimages):\n",
" n=npix #use nxn pixel image\n",
" # You'll want to store all your images in a folder within the same directory as this notebook. \n",
" # Enter the name of that directory below.\n",
" directory = directory # example: \"images\"\n",
"\n",
" # Dictionaries to store the image data and the dataframes we'll make from them.\n",
" # The dataframes are used to translate data to and from excel.\n",
" imgs = {}\n",
" dfs = {}\n",
"\n",
" # Each image will be resized to ensure that their proportions are consistent with each other.\n",
" # It's best to start with images that are already similarly sized so that images don't get\n",
" # too distorted in the resize process. \n",
" # Adjust the size to your preference: (width, height)\n",
" dsize = (n, n)\n",
"\n",
" # This will iterate over every image in the directory given, read it into data, and create a \n",
" # dataframe for it. Both the image data and its corresponding dataframe are stored.\n",
" # Note that when being read into data, we interpret the image as grayscale. \n",
" pos = 0\n",
" for filename in os.listdir(directory):\n",
" f = os.path.join(directory, filename)\n",
" # checking if it is a file\n",
" if os.path.isfile(f):\n",
" imgs[pos] = cv2.imread(f, 0) # image data\n",
" imgs[pos] = cv2.resize(imgs[pos], dsize)\n",
" dfs[pos] = pd.DataFrame(imgs[pos]) # dataframe\n",
" pos += 1\n",
"\n",
" # Exports the image dataframes to an excel file, with each excel sheet representing one image.\n",
" # If there's already an excel file by the same name, it will overwrite it. Note that if the\n",
" # excel file it's attempting to overwrite is already open, the write will be blocked.\n",
" with pd.ExcelWriter('image_data.xlsx') as writer: \n",
" for i in np.arange(0, len(dfs)):\n",
" dfs[i].to_excel(writer, sheet_name=str(i))\n",
" def matrixtovector(matrix,n,s):\n",
" t=0\n",
" vec=pd.DataFrame()\n",
" for i in np.arange(0,n,1):\n",
" for j in np.arange(0,n,1):\n",
" vec.loc[t,str(s)]=matrix.loc[i,j]\n",
" t=t+1\n",
" return vec\n",
"\n",
" numimages=nimages\n",
" data=pd.DataFrame()\n",
" for t in np.arange(0,numimages,1):\n",
" data.loc[:,str(t)]=matrixtovector(dfs[t],n,t) \n",
" return data,imgs"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "5e6e8bad",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#image corresponding to the 2nd basis vector.\n",
"fig=plt.figure(figsize=(2,2))\n",
"plt.gca().imshow(pca.components_[1].reshape(64, 64),\n",
" cmap=\"gray\")"
]
},
{
"cell_type": "markdown",
"id": "1ab50b70",
"metadata": {},
"source": [
"Answer to c)."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "4371f192",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1286.48056884, 3118.77874561])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"letter_pca[1]"
]
},
{
"cell_type": "markdown",
"id": "27863c13",
"metadata": {},
"source": [
"Answer to d) We could only model the first two pixels so would not have any idea of the images."
]
},
{
"cell_type": "markdown",
"id": "205ed0cf",
"metadata": {},
"source": [
"## Section 4 Exercise"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "2c093d9e",
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"def imagetovector(npix,directory,nimages):\n",
" n=npix #use nxn pixel image\n",
" # You'll want to store all your images in a folder within the same directory as this notebook. \n",
" # Enter the name of that directory below.\n",
" directory = directory # example: \"images\"\n",
"\n",
" # Dictionaries to store the image data and the dataframes we'll make from them.\n",
" # The dataframes are used to translate data to and from excel.\n",
" imgs = {}\n",
" dfs = {}\n",
"\n",
" # Each image will be resized to ensure that their proportions are consistent with each other.\n",
" # It's best to start with images that are already similarly sized so that images don't get\n",
" # too distorted in the resize process. \n",
" # Adjust the size to your preference: (width, height)\n",
" dsize = (n, n)\n",
"\n",
" # This will iterate over every image in the directory given, read it into data, and create a \n",
" # dataframe for it. Both the image data and its corresponding dataframe are stored.\n",
" # Note that when being read into data, we interpret the image as grayscale. \n",
" pos = 0\n",
" for filename in os.listdir(directory):\n",
" f = os.path.join(directory, filename)\n",
" # checking if it is a file\n",
" if os.path.isfile(f):\n",
" imgs[pos] = cv2.imread(f, 0) # image data\n",
" imgs[pos] = cv2.resize(imgs[pos], dsize)\n",
" dfs[pos] = pd.DataFrame(imgs[pos]) # dataframe\n",
" pos += 1\n",
"\n",
" # Exports the image dataframes to an excel file, with each excel sheet representing one image.\n",
" # If there's already an excel file by the same name, it will overwrite it. Note that if the\n",
" # excel file it's attempting to overwrite is already open, the write will be blocked.\n",
" with pd.ExcelWriter('image_data.xlsx') as writer: \n",
" for i in np.arange(0, len(dfs)):\n",
" dfs[i].to_excel(writer, sheet_name=str(i))\n",
" def matrixtovector(matrix,n,s):\n",
" t=0\n",
" vec=pd.DataFrame()\n",
" for i in np.arange(0,n,1):\n",
" for j in np.arange(0,n,1):\n",
" vec.loc[t,str(s)]=matrix.loc[i,j]\n",
" t=t+1\n",
" return vec\n",
"\n",
" numimages=nimages\n",
" data=pd.DataFrame()\n",
" for t in np.arange(0,numimages,1):\n",
" data.loc[:,str(t)]=matrixtovector(dfs[t],n,t) \n",
" return data,imgs "
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "f991970b",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"