{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "ac7f157f", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from scipy.spatial import distance\n", "# df1 = pd.read_csv('case1 class and location id80.csv')\n", "# df2 = pd.read_csv('case2 cell class and location ID90.csv')" ] }, { "cell_type": "code", "execution_count": 71, "id": "2d82b428", "metadata": {}, "outputs": [], "source": [ "\n", "\n", "def calculate_euclidean(data1, data2):\n", " \"\"\" Calculate pairwise Euclidean distance between two sets of points. \"\"\"\n", " return distance.cdist(data1[['X', 'Y']], data2[['X', 'Y']], 'euclidean')\n", "\n", "def average_distances(df):\n", " # Define masks for each category\n", " cd20_mask = df['Class'] == 'CD20'\n", " cfse_mask = df['Class'] == 'CFSE'\n", " other_mask = df['Class'] == 'Other'\n", " \n", " # Calculate average distance between each cell and all cells\n", "# df['avg_dist_to_all'] = df.apply(lambda row: np.mean(calculate_euclidean(df.loc[[row.name], ['X', 'Y']]), df[['X', 'Y']]), axis=1)\n", " df['avg_dist_to_all'] = df.apply(lambda row: np.mean(calculate_euclidean(df.loc[[row.name], ['X', 'Y']], df[['X', 'Y']])),axis=1)\n", " # Calculate average distance between each CD20 and CFSE cells\n", " if not df[cd20_mask].empty and not df[cfse_mask].empty:\n", " cd20_cfse_dist = calculate_euclidean(df.loc[cd20_mask, ['X', 'Y']], df.loc[cfse_mask, ['X', 'Y']])\n", " \n", " distance_df_cd20_cfse = pd.DataFrame(\n", " cd20_cfse_dist,\n", " index=['CD20_' + str(idx+1) for idx in df[cd20_mask].index], # Use CD20 indices for rows\n", " columns=['CFSE_' + str(idx+1) for idx in df[cfse_mask].index]) # Use CFSE indices for columns\n", " #index=df[cd20_mask].index, # Use CD20 indices for rows\n", " #columns=df[cfse_mask].index) # Use CFSE indices for columns\n", " \n", " avg_cd20_cfse = np.mean(cd20_cfse_dist)\n", " df.loc[cd20_mask, 'avg_dist_CD20_CFSE'] = avg_cd20_cfse\n", " df.loc[cfse_mask, 'avg_dist_CD20_CFSE'] = avg_cd20_cfse\n", "\n", " # Calculate average distance between each CFSE and other cells\n", " if not df[cfse_mask].empty and not df[other_mask].empty:\n", " cfse_other_dist = calculate_euclidean(df.loc[cfse_mask, ['X', 'Y']], df.loc[other_mask, ['X', 'Y']])\n", " \n", " distance_df_cfse_other = pd.DataFrame(\n", " cfse_other_dist,\n", " index=['CFSE_' + str(idx+1) for idx in df[cfse_mask].index], # Use CD20 indices for rows\n", " columns=['Other_' + str(idx+1) for idx in df[other_mask].index]) # Use CFSE indices for columns\n", "# index=df[cfse_mask].index, # Use CD20 indices for rows\n", "# columns=df[other_mask].index) # Use CFSE indices for columns\n", " \n", " avg_cfse_other = np.mean(cfse_other_dist)\n", " df.loc[cfse_mask, 'avg_dist_CFSE_other'] = avg_cfse_other\n", " df.loc[other_mask, 'avg_dist_CFSE_other'] = avg_cfse_other\n", "\n", " return df,cd20_cfse_dist,cfse_other_dist,distance_df_cd20_cfse,distance_df_cfse_other\n" ] }, { "cell_type": "code", "execution_count": 23, "id": "57e370d9", "metadata": {}, "outputs": [], "source": [ "if df1['X'].dtype != 'int':\n", " print('yes it is not')\n", " df1['X'] = df1['X'].astype(int)" ] }, { "cell_type": "code", "execution_count": 76, "id": "5e653264", "metadata": {}, "outputs": [], "source": [ "dff1,cd20_dist,cfse_dist,cd20,cfse=average_distances(df2)" ] }, { "cell_type": "code", "execution_count": 79, "id": "efe5abb1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | Class | \n", "X | \n", "Y | \n", "Image | \n", "Name | \n", "Parent | \n", "ROI | \n", "Nucleus: Area | \n", "Nucleus: Perimeter | \n", "Nucleus: Circularity | \n", "... | \n", "Cytoplasm: IFNG min | \n", "Cytoplasm: CD38 mean | \n", "Cytoplasm: CD38 std dev | \n", "Cytoplasm: CD38 max | \n", "Cytoplasm: CD38 min | \n", "Nucleus/Cell area ratio | \n", "avg_dist_to_all | \n", "avg_dist_CD20_CFSE | \n", "avg_dist_CFSE_other | \n", "try | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "CD20 | \n", "883.90 | \n", "8 | \n", "crop r1 6 color.tif (1) | \n", "CD20 | \n", "PathAnnotationObject | \n", "Polygon | \n", "98 | \n", "41.1937 | \n", "0.7257 | \n", "... | \n", "0 | \n", "344.7448 | \n", "517.1355 | \n", "2465 | \n", "0 | \n", "0.3377 | \n", "638.327917 | \n", "482.773143 | \n", "NaN | \n", "[[0.0, 660.0, 372.0658543860213, 162.373027316... | \n", "
| 1 | \n", "CD20 | \n", "963.23 | \n", "6 | \n", "crop r1 6 color.tif (1) | \n", "CD20 | \n", "PathAnnotationObject | \n", "Polygon | \n", "182 | \n", "74.1237 | \n", "0.4163 | \n", "... | \n", "0 | \n", "58.4732 | \n", "144.4971 | \n", "1189 | \n", "0 | \n", "0.4687 | \n", "671.780571 | \n", "482.773143 | \n", "NaN | \n", "[[660.0, 0.0, 288.0850568842473, 822.073597678... | \n", "
| 2 | \n", "CD20 | \n", "913.31 | \n", "11 | \n", "crop r1 6 color.tif (1) | \n", "CD20 | \n", "PathAnnotationObject | \n", "Polygon | \n", "210 | \n", "68.2952 | \n", "0.5658 | \n", "... | \n", "0 | \n", "120.8731 | \n", "152.5701 | \n", "840 | \n", "0 | \n", "0.4419 | \n", "647.274871 | \n", "482.773143 | \n", "NaN | \n", "[[372.0658543860213, 288.0850568842473, 0.0, 5... | \n", "
| 3 | \n", "CD20 | \n", "199.92 | \n", "11 | \n", "crop r1 6 color.tif (1) | \n", "CD20 | \n", "PathAnnotationObject | \n", "Polygon | \n", "181 | \n", "71.6251 | \n", "0.4434 | \n", "... | \n", "0 | \n", "33.1033 | \n", "96.9694 | \n", "697 | \n", "0 | \n", "0.3749 | \n", "684.015713 | \n", "482.773143 | \n", "NaN | \n", "[[162.3730273167314, 822.073597678456, 534.014... | \n", "
| 4 | \n", "CD20 | \n", "238.15 | \n", "7 | \n", "crop r1 6 color.tif (1) | \n", "CD20 | \n", "PathAnnotationObject | \n", "Polygon | \n", "103 | \n", "40.8192 | \n", "0.7768 | \n", "... | \n", "0 | \n", "37.2159 | \n", "144.8785 | \n", "1294 | \n", "0 | \n", "0.3739 | \n", "667.777435 | \n", "482.773143 | \n", "NaN | \n", "[[658.1709504376504, 15.132745950421556, 286.1... | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 1148 | \n", "Other | \n", "882.10 | \n", "891 | \n", "crop r1 6 color.tif (1) | \n", "Other | \n", "PathAnnotationObject | \n", "Polygon | \n", "111 | \n", "53.6874 | \n", "0.4839 | \n", "... | \n", "0 | \n", "209.5943 | \n", "767.8748 | \n", "5525 | \n", "0 | \n", "0.3084 | \n", "623.928819 | \n", "NaN | \n", "601.552187 | \n", "[[684.0007309937614, 692.6304931202495, 599.17... | \n", "
| 1149 | \n", "Other | \n", "93.93 | \n", "894 | \n", "crop r1 6 color.tif (1) | \n", "Other | \n", "PathAnnotationObject | \n", "Polygon | \n", "121 | \n", "41.8718 | \n", "0.8673 | \n", "... | \n", "0 | \n", "58.2703 | \n", "130.3688 | \n", "896 | \n", "0 | \n", "0.5214 | \n", "733.406021 | \n", "NaN | \n", "601.552187 | \n", "[[795.2741665614444, 623.1059299990652, 615.83... | \n", "
| 1150 | \n", "Other | \n", "304.91 | \n", "894 | \n", "crop r1 6 color.tif (1) | \n", "Other | \n", "PathAnnotationObject | \n", "Polygon | \n", "123 | \n", "48.2781 | \n", "0.6632 | \n", "... | \n", "0 | \n", "11.2387 | \n", "74.1421 | \n", "876 | \n", "0 | \n", "0.4406 | \n", "628.322543 | \n", "NaN | \n", "601.552187 | \n", "[[929.0048439055632, 606.6712454039667, 684.46... | \n", "
| 1151 | \n", "Other | \n", "589.09 | \n", "895 | \n", "crop r1 6 color.tif (1) | \n", "Other | \n", "PathAnnotationObject | \n", "Polygon | \n", "86 | \n", "34.3435 | \n", "0.9163 | \n", "... | \n", "0 | \n", "292.8750 | \n", "515.6979 | \n", "2570 | \n", "0 | \n", "0.4396 | \n", "574.887254 | \n", "NaN | \n", "601.552187 | \n", "[[649.8253611548259, 742.7200010771219, 616.11... | \n", "
| 1152 | \n", "Other | \n", "233.55 | \n", "895 | \n", "crop r1 6 color.tif (1) | \n", "Other | \n", "PathAnnotationObject | \n", "Polygon | \n", "88 | \n", "49.3579 | \n", "0.4539 | \n", "... | \n", "0 | \n", "28.1875 | \n", "115.9910 | \n", "849 | \n", "0 | \n", "0.3817 | \n", "658.199726 | \n", "NaN | \n", "601.552187 | \n", "[[1023.8657138511867, 627.3603430246449, 750.8... | \n", "
1153 rows × 108 columns
\n", "| \n", " | CFSE_244 | \n", "CFSE_245 | \n", "CFSE_246 | \n", "CFSE_247 | \n", "CFSE_248 | \n", "CFSE_249 | \n", "CFSE_250 | \n", "CFSE_251 | \n", "CFSE_252 | \n", "CFSE_253 | \n", "... | \n", "CFSE_258 | \n", "CFSE_259 | \n", "CFSE_260 | \n", "CFSE_261 | \n", "CFSE_262 | \n", "CFSE_263 | \n", "CFSE_264 | \n", "CFSE_265 | \n", "CFSE_266 | \n", "CFSE_267 | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CD20_1 | \n", "535.985894 | \n", "821.854173 | \n", "936.909549 | \n", "1127.826137 | \n", "424.119658 | \n", "518.104478 | \n", "669.211897 | \n", "244.677044 | \n", "263.922474 | \n", "661.057129 | \n", "... | \n", "558.850329 | \n", "728.476967 | \n", "834.436289 | \n", "1020.627534 | \n", "897.261583 | \n", "909.385377 | \n", "1045.867468 | \n", "847.269162 | \n", "910.129701 | \n", "1228.204453 | \n", "
| CD20_2 | \n", "614.836850 | \n", "899.720856 | \n", "1010.589424 | \n", "1184.453781 | \n", "502.745755 | \n", "596.947861 | \n", "745.893569 | \n", "239.716479 | \n", "258.444428 | \n", "735.366679 | \n", "... | \n", "528.326680 | \n", "780.792033 | \n", "894.136520 | \n", "1087.164485 | \n", "956.533187 | \n", "969.150047 | \n", "1110.880797 | \n", "889.148875 | \n", "946.458366 | \n", "1286.111312 | \n", "
| CD20_3 | \n", "564.692745 | \n", "849.876111 | \n", "962.636739 | \n", "1145.805747 | \n", "452.645380 | \n", "546.804762 | \n", "696.513600 | \n", "236.097353 | \n", "255.378059 | \n", "687.066297 | \n", "... | \n", "543.004578 | \n", "744.422488 | \n", "853.645814 | \n", "1042.957811 | \n", "916.309632 | \n", "928.654307 | \n", "1067.510804 | \n", "858.937945 | \n", "919.586559 | \n", "1246.759772 | \n", "
| CD20_4 | \n", "171.022484 | \n", "216.962906 | \n", "416.731262 | \n", "829.933795 | \n", "275.240106 | \n", "186.371646 | \n", "200.064422 | \n", "780.684407 | \n", "789.779960 | \n", "268.058650 | \n", "... | \n", "1065.192602 | \n", "623.304539 | \n", "587.622090 | \n", "609.563264 | \n", "630.758737 | \n", "631.812917 | \n", "652.093736 | \n", "796.418800 | \n", "890.336323 | \n", "894.646505 | \n", "
| CD20_5 | \n", "139.908259 | \n", "242.746469 | \n", "437.335672 | \n", "838.478815 | \n", "239.670110 | \n", "153.897896 | \n", "199.106127 | \n", "745.567592 | \n", "755.016294 | \n", "263.747457 | \n", "... | \n", "1033.327007 | \n", "613.343761 | \n", "587.110780 | \n", "623.609052 | \n", "633.061723 | \n", "635.030169 | \n", "665.432554 | \n", "787.391621 | \n", "881.129077 | \n", "906.657708 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| CD20_239 | \n", "813.506783 | \n", "699.058015 | \n", "520.417675 | \n", "89.639661 | \n", "847.358912 | \n", "819.101178 | \n", "679.776281 | \n", "984.670853 | \n", "975.046897 | \n", "621.248047 | \n", "... | \n", "1023.610334 | \n", "385.764567 | \n", "306.255649 | \n", "314.342158 | \n", "249.365400 | \n", "244.725185 | \n", "275.058467 | \n", "316.063809 | \n", "326.681130 | \n", "167.474655 | \n", "
| CD20_240 | \n", "806.177943 | \n", "709.944130 | \n", "539.733087 | \n", "135.833666 | \n", "833.511385 | \n", "810.713275 | \n", "679.001956 | \n", "947.314343 | \n", "937.104178 | \n", "617.721155 | \n", "... | \n", "977.111133 | \n", "356.547743 | \n", "295.939845 | \n", "340.948760 | \n", "245.001029 | \n", "243.421573 | \n", "304.751236 | \n", "271.014465 | \n", "276.592901 | \n", "218.176671 | \n", "
| CD20_241 | \n", "827.328355 | \n", "700.047519 | \n", "515.577827 | \n", "65.998855 | \n", "865.494255 | \n", "833.633840 | \n", "689.398964 | \n", "1016.901307 | \n", "1007.595857 | \n", "633.015842 | \n", "... | \n", "1060.208449 | \n", "414.636082 | \n", "324.862159 | \n", "305.224724 | \n", "265.185600 | \n", "258.639704 | \n", "263.772174 | \n", "352.422036 | \n", "364.147416 | \n", "130.403834 | \n", "
| CD20_242 | \n", "808.089995 | \n", "721.218346 | \n", "555.272316 | \n", "162.118179 | \n", "831.863460 | \n", "812.054826 | \n", "684.563491 | \n", "931.664556 | \n", "921.082209 | \n", "622.011005 | \n", "... | \n", "955.138172 | \n", "347.376234 | \n", "298.401275 | \n", "360.267641 | \n", "251.290041 | \n", "251.278753 | \n", "325.442146 | \n", "251.047716 | \n", "251.709094 | \n", "244.282047 | \n", "
| CD20_243 | \n", "877.414513 | \n", "702.921285 | \n", "502.383421 | \n", "123.419935 | \n", "931.711860 | \n", "886.369565 | \n", "726.218603 | \n", "1137.995744 | \n", "1130.083109 | \n", "679.600918 | \n", "... | \n", "1201.381675 | \n", "529.391055 | \n", "410.188524 | \n", "293.535926 | \n", "347.189746 | \n", "335.576273 | \n", "250.396082 | \n", "494.500072 | \n", "512.826248 | \n", "19.332341 | \n", "
243 rows × 24 columns
\n", "