{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-09-18T00:38:38.183351Z","iopub.execute_input":"2023-09-18T00:38:38.184767Z","iopub.status.idle":"2023-09-18T00:38:38.812970Z","shell.execute_reply.started":"2023-09-18T00:38:38.184725Z","shell.execute_reply":"2023-09-18T00:38:38.811716Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n!pip install scanpy\nimport scanpy as sc\nimport matplotlib.pyplot as plt\nimport gc","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:38:38.815472Z","iopub.execute_input":"2023-09-18T00:38:38.816416Z","iopub.status.idle":"2023-09-18T00:39:00.915418Z","shell.execute_reply.started":"2023-09-18T00:38:38.816344Z","shell.execute_reply":"2023-09-18T00:39:00.914105Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df2 = pd.read_parquet('/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet')\ndf2.head()\n","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:23:27.842643Z","iopub.execute_input":"2023-09-18T01:23:27.843125Z","iopub.status.idle":"2023-09-18T01:23:29.230372Z","shell.execute_reply.started":"2023-09-18T01:23:27.843093Z","shell.execute_reply":"2023-09-18T01:23:29.229087Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df21 = df2.drop(df2.columns[[0,1,2,3,4,5]], axis=1)\ndf21","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:03.809257Z","iopub.execute_input":"2023-09-18T00:39:03.809762Z","iopub.status.idle":"2023-09-18T00:39:03.861889Z","shell.execute_reply.started":"2023-09-18T00:39:03.809716Z","shell.execute_reply":"2023-09-18T00:39:03.860738Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\nfrom sklearn.decomposition import PCA\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n%matplotlib inline\nimport seaborn as sns\nfrom sklearn.impute import SimpleImputer","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:03.863286Z","iopub.execute_input":"2023-09-18T00:39:03.863669Z","iopub.status.idle":"2023-09-18T00:39:04.314732Z","shell.execute_reply.started":"2023-09-18T00:39:03.863637Z","shell.execute_reply":"2023-09-18T00:39:04.313533Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sc = StandardScaler()\nX_scl = sc.fit_transform(df21)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:04.316129Z","iopub.execute_input":"2023-09-18T00:39:04.316469Z","iopub.status.idle":"2023-09-18T00:39:04.935512Z","shell.execute_reply.started":"2023-09-18T00:39:04.316440Z","shell.execute_reply":"2023-09-18T00:39:04.934017Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_components=30\npca = PCA(n_components=n_components)\nX_pca = pca.fit_transform(X_scl)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:04.937185Z","iopub.execute_input":"2023-09-18T00:39:04.937539Z","iopub.status.idle":"2023-09-18T00:39:06.578792Z","shell.execute_reply.started":"2023-09-18T00:39:04.937494Z","shell.execute_reply":"2023-09-18T00:39:06.576584Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xpcadf = pd.DataFrame(X_pca)\nXpcadf.columns =['PC'+str(i) for i in range(1,n_components+1)]\nprint(f\"Percent of explained variance with {n_components} Components : \", round(pca.explained_variance_ratio_.sum()*100,2))\nXpcadf.head()\n","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:06.581096Z","iopub.execute_input":"2023-09-18T00:39:06.583342Z","iopub.status.idle":"2023-09-18T00:39:06.642953Z","shell.execute_reply.started":"2023-09-18T00:39:06.583291Z","shell.execute_reply":"2023-09-18T00:39:06.641911Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import plotly.express as px\nimport seaborn as sns\nimport plotly.graph_objects as go","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:06.644432Z","iopub.execute_input":"2023-09-18T00:39:06.644807Z","iopub.status.idle":"2023-09-18T00:39:07.264717Z","shell.execute_reply.started":"2023-09-18T00:39:06.644774Z","shell.execute_reply":"2023-09-18T00:39:07.263813Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = px.scatter_3d(data_frame=Xpcadf,x='PC1',y='PC2',z='PC3',template='plotly_dark')\nfig.update_layout(title = \"3D Scatter plot for first 3 principal components\",title_x=0.5)\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:07.269466Z","iopub.execute_input":"2023-09-18T00:39:07.270239Z","iopub.status.idle":"2023-09-18T00:39:09.176882Z","shell.execute_reply.started":"2023-09-18T00:39:07.270200Z","shell.execute_reply":"2023-09-18T00:39:09.175797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"variance = []\ncomps = []\nfor comp in range(2,31,1):\n    pca = PCA(n_components=comp)\n    imppca = pca.fit_transform(X_scl)\n    var = round(pca.explained_variance_ratio_.sum()*100,2)\n    variance.append(var)\n    comps.append(comp)\n\npcatable = pd.DataFrame({\"Number of components\":comps,\"% of variance explained\":variance})\npcatable.style.background_gradient(cmap=\"Reds\")","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:09.178264Z","iopub.execute_input":"2023-09-18T00:39:09.179002Z","iopub.status.idle":"2023-09-18T00:39:51.402041Z","shell.execute_reply.started":"2023-09-18T00:39:09.178968Z","shell.execute_reply":"2023-09-18T00:39:51.400800Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12,8))\nsns.barplot(data=pcatable,x='Number of components',y='% of variance explained',palette='coolwarm')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:51.403987Z","iopub.execute_input":"2023-09-18T00:39:51.404764Z","iopub.status.idle":"2023-09-18T00:39:51.952566Z","shell.execute_reply.started":"2023-09-18T00:39:51.404719Z","shell.execute_reply":"2023-09-18T00:39:51.951284Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df21.head(30)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:42:56.222953Z","iopub.execute_input":"2023-09-18T00:42:56.223790Z","iopub.status.idle":"2023-09-18T00:42:56.277558Z","shell.execute_reply.started":"2023-09-18T00:42:56.223743Z","shell.execute_reply":"2023-09-18T00:42:56.276703Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_importance_dataframe(pca, original_num_df):\n    importance_df  = pd.DataFrame(pca.components_)\n    importance_df.columns  = original_num_df.columns\n    importance_df =importance_df.apply(np.abs)\n    importance_df=importance_df.transpose()\n    num_pcs = importance_df.shape[1]\n    new_columns = [f'PC{i}' for i in range(1, num_pcs + 1)]\n    importance_df.columns  =new_columns\n    return importance_df\n\nimportance_df  =create_importance_dataframe(pca,df21)\ndisplay(importance_df.head())","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:52.027719Z","iopub.execute_input":"2023-09-18T00:39:52.028100Z","iopub.status.idle":"2023-09-18T00:39:52.063437Z","shell.execute_reply.started":"2023-09-18T00:39:52.028068Z","shell.execute_reply":"2023-09-18T00:39:52.062515Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pc1_top_10_features = importance_df['PC1'].sort_values(ascending = False)[:10]\nprint(), print(f'PC1 top 10 features are \\n')\npd.DataFrame(pc1_top_10_features).reset_index().rename(columns={\"index\":\"Gene\",\"PC1\":\"Importance value for PC1\"})","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:52.065081Z","iopub.execute_input":"2023-09-18T00:39:52.066610Z","iopub.status.idle":"2023-09-18T00:39:52.088074Z","shell.execute_reply.started":"2023-09-18T00:39:52.066564Z","shell.execute_reply":"2023-09-18T00:39:52.087110Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.cluster import KMeans\nsumofsq = {}\nfor k in range(1,15):\n    km = KMeans(n_clusters=k,init='k-means++',max_iter=1000)\n    km = km.fit(X_scl)\n    sumofsq[k] = km.inertia_","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:39:52.112260Z","iopub.execute_input":"2023-09-18T00:39:52.112761Z","iopub.status.idle":"2023-09-18T00:40:58.512091Z","shell.execute_reply.started":"2023-09-18T00:39:52.112729Z","shell.execute_reply":"2023-09-18T00:40:58.510979Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.set_style('whitegrid')\nplt.figure(figsize=(14,8))\nplt.xlabel('Number of Clusters(k)')\nplt.ylabel('Sum of Square Distances')\nplt.title('Elbow Method For Optimal number of Clusters')\nsns.pointplot(x=list(sumofsq.keys()),y=list(sumofsq.values()),color='red')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-09-18T00:40:58.513695Z","iopub.execute_input":"2023-09-18T00:40:58.514023Z","iopub.status.idle":"2023-09-18T00:40:58.996492Z","shell.execute_reply.started":"2023-09-18T00:40:58.513995Z","shell.execute_reply":"2023-09-18T00:40:58.995427Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### This dataset has a number of Cell Types: NK, CD4 T cell, CD8 T cell, Treg and Myeloid and B cells. We will now investigated the top features/genes in the PCA","metadata":{}},{"cell_type":"markdown","source":"### Top NK Genes in PCA","metadata":{}},{"cell_type":"code","source":"df25 = df2.drop(df2.columns[[2,3,4,5]], axis=1)\ndf26 = df25[df25['cell_type'].str.contains('NK cells')]\ndf26\n","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:08:01.955875Z","iopub.execute_input":"2023-09-18T01:08:01.956320Z","iopub.status.idle":"2023-09-18T01:08:02.100688Z","shell.execute_reply.started":"2023-09-18T01:08:01.956288Z","shell.execute_reply":"2023-09-18T01:08:02.099465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df27 = df26.drop(df26.columns[[0, 1]], axis=1)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:14:03.023080Z","iopub.execute_input":"2023-09-18T01:14:03.024451Z","iopub.status.idle":"2023-09-18T01:14:03.062276Z","shell.execute_reply.started":"2023-09-18T01:14:03.024403Z","shell.execute_reply":"2023-09-18T01:14:03.061367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sc = StandardScaler()\nX_scl = sc.fit_transform(df27)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:14:13.292298Z","iopub.execute_input":"2023-09-18T01:14:13.293477Z","iopub.status.idle":"2023-09-18T01:14:13.808123Z","shell.execute_reply.started":"2023-09-18T01:14:13.293435Z","shell.execute_reply":"2023-09-18T01:14:13.807140Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_components=30\npca = PCA(n_components=n_components)\nX_pca = pca.fit_transform(X_scl)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:14:16.808877Z","iopub.execute_input":"2023-09-18T01:14:16.810088Z","iopub.status.idle":"2023-09-18T01:14:17.224327Z","shell.execute_reply.started":"2023-09-18T01:14:16.810044Z","shell.execute_reply":"2023-09-18T01:14:17.222448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xpcadf = pd.DataFrame(X_pca)\nXpcadf.columns =['PC'+str(i) for i in range(1,n_components+1)]\nprint(f\"Percent of explained variance with {n_components} Components : \", round(pca.explained_variance_ratio_.sum()*100,2))\nXpcadf.head()\n","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:14:20.084092Z","iopub.execute_input":"2023-09-18T01:14:20.084506Z","iopub.status.idle":"2023-09-18T01:14:20.115518Z","shell.execute_reply.started":"2023-09-18T01:14:20.084477Z","shell.execute_reply":"2023-09-18T01:14:20.114247Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_importance_dataframe(pca, original_num_df):\n    importance_df  = pd.DataFrame(pca.components_)\n    importance_df.columns  = original_num_df.columns\n    importance_df =importance_df.apply(np.abs)\n    importance_df=importance_df.transpose()\n    num_pcs = importance_df.shape[1]\n    new_columns = [f'PC{i}' for i in range(1, num_pcs + 1)]\n    importance_df.columns  =new_columns\n    return importance_df\n\nimportance_df  =create_importance_dataframe(pca,df27)\ndisplay(importance_df.head())","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:15:12.603853Z","iopub.execute_input":"2023-09-18T01:15:12.604783Z","iopub.status.idle":"2023-09-18T01:15:12.641825Z","shell.execute_reply.started":"2023-09-18T01:15:12.604742Z","shell.execute_reply":"2023-09-18T01:15:12.640920Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pc1_top_10_features = importance_df['PC1'].sort_values(ascending = False)[:10]\nprint(), print(f'PC1 top 10 features in NK cells are \\n')\npd.DataFrame(pc1_top_10_features).reset_index().rename(columns={\"index\":\"Gene\",\"PC1\":\"Importance value for PC1\"})","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:16:27.394716Z","iopub.execute_input":"2023-09-18T01:16:27.395220Z","iopub.status.idle":"2023-09-18T01:16:27.415481Z","shell.execute_reply.started":"2023-09-18T01:16:27.395183Z","shell.execute_reply":"2023-09-18T01:16:27.414450Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df28 = df25[df25['cell_type'].str.contains('T cells CD4+')]\ndf29 = df28.drop(df28.columns[[0, 1]], axis=1)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:27:19.183457Z","iopub.execute_input":"2023-09-18T01:27:19.183927Z","iopub.status.idle":"2023-09-18T01:27:19.221213Z","shell.execute_reply.started":"2023-09-18T01:27:19.183875Z","shell.execute_reply":"2023-09-18T01:27:19.220192Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sc = StandardScaler()\nX_scl = sc.fit_transform(df29)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:27:20.366435Z","iopub.execute_input":"2023-09-18T01:27:20.367650Z","iopub.status.idle":"2023-09-18T01:27:20.859927Z","shell.execute_reply.started":"2023-09-18T01:27:20.367606Z","shell.execute_reply":"2023-09-18T01:27:20.858678Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_components=30\npca = PCA(n_components=n_components)\nX_pca = pca.fit_transform(X_scl)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:27:22.525750Z","iopub.execute_input":"2023-09-18T01:27:22.526988Z","iopub.status.idle":"2023-09-18T01:27:22.969478Z","shell.execute_reply.started":"2023-09-18T01:27:22.526933Z","shell.execute_reply":"2023-09-18T01:27:22.967580Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_components=30\npca = PCA(n_components=n_components)\nX_pca = pca.fit_transform(X_scl)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:27:24.497830Z","iopub.execute_input":"2023-09-18T01:27:24.498294Z","iopub.status.idle":"2023-09-18T01:27:24.923765Z","shell.execute_reply.started":"2023-09-18T01:27:24.498259Z","shell.execute_reply":"2023-09-18T01:27:24.921652Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xpcadf = pd.DataFrame(X_pca)\nXpcadf.columns =['PC'+str(i) for i in range(1,n_components+1)]\nprint(f\"Percent of explained variance with {n_components} Components : \", round(pca.explained_variance_ratio_.sum()*100,2))\nXpcadf.head()\n","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:27:29.391161Z","iopub.execute_input":"2023-09-18T01:27:29.391585Z","iopub.status.idle":"2023-09-18T01:27:29.424608Z","shell.execute_reply.started":"2023-09-18T01:27:29.391553Z","shell.execute_reply":"2023-09-18T01:27:29.423523Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_importance_dataframe(pca, original_num_df):\n    importance_df  = pd.DataFrame(pca.components_)\n    importance_df.columns  = original_num_df.columns\n    importance_df =importance_df.apply(np.abs)\n    importance_df=importance_df.transpose()\n    num_pcs = importance_df.shape[1]\n    new_columns = [f'PC{i}' for i in range(1, num_pcs + 1)]\n    importance_df.columns  =new_columns\n    return importance_df\n\nimportance_df  =create_importance_dataframe(pca,df29)\ndisplay(importance_df.head())","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:27:35.371858Z","iopub.execute_input":"2023-09-18T01:27:35.372346Z","iopub.status.idle":"2023-09-18T01:27:35.409706Z","shell.execute_reply.started":"2023-09-18T01:27:35.372306Z","shell.execute_reply":"2023-09-18T01:27:35.408454Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pc1_top_10_features = importance_df['PC1'].sort_values(ascending = False)[:10]\nprint(), print(f'PC1 top 10 features in CD4+ T cells are \\n')\npd.DataFrame(pc1_top_10_features).reset_index().rename(columns={\"index\":\"Gene\",\"PC1\":\"Importance value for PC1\"})","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:27:39.235325Z","iopub.execute_input":"2023-09-18T01:27:39.236636Z","iopub.status.idle":"2023-09-18T01:27:39.256985Z","shell.execute_reply.started":"2023-09-18T01:27:39.236596Z","shell.execute_reply":"2023-09-18T01:27:39.255791Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df30 = df25[df25['cell_type'].str.contains('T cells CD8+')]\ndf31 = df30.drop(df30.columns[[0, 1]], axis=1)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:36:01.596030Z","iopub.execute_input":"2023-09-18T01:36:01.596538Z","iopub.status.idle":"2023-09-18T01:36:01.635464Z","shell.execute_reply.started":"2023-09-18T01:36:01.596490Z","shell.execute_reply":"2023-09-18T01:36:01.634385Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sc = StandardScaler()\nX_scl = sc.fit_transform(df31)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:38:00.409660Z","iopub.execute_input":"2023-09-18T01:38:00.410702Z","iopub.status.idle":"2023-09-18T01:38:00.911377Z","shell.execute_reply.started":"2023-09-18T01:38:00.410657Z","shell.execute_reply":"2023-09-18T01:38:00.910276Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_components=30\npca = PCA(n_components=n_components)\nX_pca = pca.fit_transform(X_scl)","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:38:02.451954Z","iopub.execute_input":"2023-09-18T01:38:02.453154Z","iopub.status.idle":"2023-09-18T01:38:02.905161Z","shell.execute_reply.started":"2023-09-18T01:38:02.453117Z","shell.execute_reply":"2023-09-18T01:38:02.903448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xpcadf = pd.DataFrame(X_pca)\nXpcadf.columns =['PC'+str(i) for i in range(1,n_components+1)]\nprint(f\"Percent of explained variance with {n_components} Components : \", round(pca.explained_variance_ratio_.sum()*100,2))\nXpcadf.head()\n","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:38:04.726949Z","iopub.execute_input":"2023-09-18T01:38:04.727350Z","iopub.status.idle":"2023-09-18T01:38:04.758207Z","shell.execute_reply.started":"2023-09-18T01:38:04.727320Z","shell.execute_reply":"2023-09-18T01:38:04.756765Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_importance_dataframe(pca, original_num_df):\n    importance_df  = pd.DataFrame(pca.components_)\n    importance_df.columns  = original_num_df.columns\n    importance_df =importance_df.apply(np.abs)\n    importance_df=importance_df.transpose()\n    num_pcs = importance_df.shape[1]\n    new_columns = [f'PC{i}' for i in range(1, num_pcs + 1)]\n    importance_df.columns  =new_columns\n    return importance_df\n\nimportance_df  =create_importance_dataframe(pca,df31)\ndisplay(importance_df.head())","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:38:08.895188Z","iopub.execute_input":"2023-09-18T01:38:08.895607Z","iopub.status.idle":"2023-09-18T01:38:08.930847Z","shell.execute_reply.started":"2023-09-18T01:38:08.895578Z","shell.execute_reply":"2023-09-18T01:38:08.929749Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pc1_top_10_features = importance_df['PC1'].sort_values(ascending = False)[:10]\nprint(), print(f'PC1 top 10 features in CD8+ T cells are \\n')\npd.DataFrame(pc1_top_10_features).reset_index().rename(columns={\"index\":\"Gene\",\"PC1\":\"Importance value for PC1\"})","metadata":{"execution":{"iopub.status.busy":"2023-09-18T01:38:12.678737Z","iopub.execute_input":"2023-09-18T01:38:12.679878Z","iopub.status.idle":"2023-09-18T01:38:12.700514Z","shell.execute_reply.started":"2023-09-18T01:38:12.679838Z","shell.execute_reply":"2023-09-18T01:38:12.699330Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}