From 7b4a7f7b518032641fbd0a9f8591f68699aabbb9 Mon Sep 17 00:00:00 2001 From: Etienne Kornobis <ekornobis@gmail.com> Date: Sun, 26 Sep 2021 22:07:07 +0200 Subject: [PATCH] Adding pandas course and practices --- data/blast.txt | 176 + notebooks/images/pandas_dataframe.png | Bin 0 -> 34313 bytes notebooks/images/pandas_logo.svg | 1 + notebooks/jupyter_cours.ipynb | 125 +- notebooks/jupyter_practice.ipynb | 64 +- notebooks/pandas_TP.ipynb | 481 ++ notebooks/pandas_TP_solution.ipynb | 2933 ++++++++++ notebooks/pandas_cours.ipynb | 7757 +++++++++++++++++++++++++ 8 files changed, 11456 insertions(+), 81 deletions(-) create mode 100644 data/blast.txt create mode 100644 notebooks/images/pandas_dataframe.png create mode 100644 notebooks/images/pandas_logo.svg create mode 100644 notebooks/pandas_TP.ipynb create mode 100644 notebooks/pandas_TP_solution.ipynb create mode 100644 notebooks/pandas_cours.ipynb diff --git a/data/blast.txt b/data/blast.txt new file mode 100644 index 0000000..2a19a67 --- /dev/null +++ b/data/blast.txt @@ -0,0 +1,176 @@ +AK1BA_HUMAN sp|O60218|AK1BA_HUMAN 100.00 316 0 0 1 316 1 316 0.0 654 +AK1BA_HUMAN sp|C9JRZ8|AK1BF_HUMAN 91.16 294 26 0 23 316 51 344 0.0 559 +AK1BA_HUMAN sp|O08782|ALD2_CRIGR 83.23 316 53 0 1 316 1 316 0.0 537 +AK1BA_HUMAN sp|P45377|ALD2_MOUSE 82.28 316 56 0 1 316 1 316 0.0 527 +AK1BA_HUMAN sp|P21300|ALD1_MOUSE 79.75 316 64 0 1 316 1 316 0.0 515 +AK1BA_HUMAN sp|Q5RJP0|ALD1_RAT 78.16 316 69 0 1 316 1 316 2e-177 501 +AK1BA_HUMAN sp|P15122|ALDR_RABIT 72.15 316 88 0 1 316 1 316 1e-162 462 +AK1BA_HUMAN sp|P07943|ALDR_RAT 71.11 315 91 0 1 315 1 315 3e-161 459 +AK1BA_HUMAN sp|P15121|ALDR_HUMAN 70.57 316 93 0 1 316 1 316 1e-160 458 +AK1BA_HUMAN sp|P45376|ALDR_MOUSE 70.48 315 93 0 1 315 1 315 2e-160 457 +AK1BA_HUMAN sp|P16116|ALDR_BOVIN 72.12 312 87 0 5 316 4 315 4e-159 454 +AK1BA_HUMAN sp|P80276|ALDR_PIG 71.52 316 90 0 1 316 1 316 7e-158 451 +AK1BA_HUMAN sp|P82125|AKCL2_PIG 60.00 305 116 1 12 316 3 301 7e-131 382 +AK1BA_HUMAN sp|Q4R802|AKCL2_MACFA 54.46 325 123 2 11 316 2 320 2e-119 353 +AK1BA_HUMAN sp|Q96JD6|AKCL2_HUMAN 54.46 325 123 3 11 316 2 320 2e-117 348 +AK1BA_HUMAN sp|Q9DCT1|AKCL2_MOUSE 56.91 304 125 1 13 316 4 301 4e-117 347 +AK1BA_HUMAN sp|Q6AZW2|A1A1A_DANRE 56.04 298 128 2 1 297 1 296 1e-116 346 +AK1BA_HUMAN sp|Q5U1Y4|AKCL2_RAT 56.39 305 127 1 12 316 3 301 3e-116 344 +AK1BA_HUMAN sp|Q8VCX1|AK1D1_MOUSE 51.90 316 148 2 5 316 10 325 5e-111 332 +AK1BA_HUMAN sp|P51857|AK1D1_HUMAN 50.79 317 151 2 5 316 10 326 8e-111 331 +AK1BA_HUMAN sp|Q9TV64|AK1D1_RABIT 50.79 317 151 2 5 316 10 326 3e-110 330 +AK1BA_HUMAN sp|Q9JII6|AK1A1_MOUSE 50.15 325 150 3 2 316 3 325 1e-108 326 +AK1BA_HUMAN sp|P31210|AK1D1_RAT 51.74 317 148 3 5 316 10 326 1e-108 326 +AK1BA_HUMAN sp|P51635|AK1A1_RAT 50.15 325 150 3 2 316 3 325 1e-108 325 +AK1BA_HUMAN sp|Q5R5D5|AK1A1_PONAB 48.92 325 154 3 2 316 3 325 3e-106 320 +AK1BA_HUMAN sp|P14550|AK1A1_HUMAN 48.92 325 154 3 2 316 3 325 4e-106 319 +AK1BA_HUMAN sp|P80508|PE2R_RABIT 50.63 316 152 2 5 316 8 323 6e-106 319 +AK1BA_HUMAN sp|P50578|AK1A1_PIG 49.54 325 152 3 2 316 3 325 3e-105 317 +AK1BA_HUMAN sp|Q5ZK84|AK1A1_CHICK 52.01 323 143 3 4 316 7 327 6e-105 317 +AK1BA_HUMAN sp|Q6GMC7|AK1A1_XENLA 51.37 329 145 4 1 316 1 327 3e-104 315 +AK1BA_HUMAN sp|Q28FD1|AK1A1_XENTR 51.37 329 145 4 1 316 1 327 3e-103 312 +AK1BA_HUMAN sp|P52895|AK1C2_HUMAN 48.73 316 158 2 5 316 8 323 9e-103 311 +AK1BA_HUMAN sp|Q3ZCJ2|AK1A1_BOVIN 48.31 325 156 3 2 316 3 325 1e-102 310 +AK1BA_HUMAN sp|P52898|DDBX_BOVIN 49.05 316 157 2 5 316 8 323 5e-102 309 +AK1BA_HUMAN sp|Q5REQ0|AK1C1_PONAB 48.10 316 160 2 5 316 8 323 6e-102 308 +AK1BA_HUMAN sp|P17516|AK1C4_HUMAN 48.10 316 160 2 5 316 8 323 1e-101 308 +AK1BA_HUMAN sp|Q04828|AK1C1_HUMAN 48.10 316 160 2 5 316 8 323 1e-101 308 +AK1BA_HUMAN sp|Q5R7C9|AK1C3_PONAB 48.42 316 159 2 5 316 8 323 1e-101 308 +AK1BA_HUMAN sp|Q1XAA8|AK1CN_HORSE 47.94 315 161 1 5 316 8 322 1e-100 305 +AK1BA_HUMAN sp|Q6W8P9|AK1CO_HORSE 48.70 308 154 2 13 316 16 323 1e-100 305 +AK1BA_HUMAN sp|P70694|DHB5_MOUSE 48.10 316 160 2 5 316 8 323 3e-100 304 +AK1BA_HUMAN sp|Q95JH5|AK1C4_MACFA 47.47 316 162 2 5 316 8 323 3e-100 304 +AK1BA_HUMAN sp|P52897|PGFS2_BOVIN 48.38 308 155 2 13 316 16 323 4e-100 304 +AK1BA_HUMAN sp|Q95JH4|AK1C4_MACFU 47.15 316 163 2 5 316 8 323 8e-100 303 +AK1BA_HUMAN sp|P05980|PGFS1_BOVIN 47.47 316 162 2 5 316 8 323 9e-100 303 +AK1BA_HUMAN sp|P42330|AK1C3_HUMAN 47.47 316 162 2 5 316 8 323 9e-100 303 +AK1BA_HUMAN sp|Q95JH6|AK1C1_MACFU 47.78 316 161 2 5 316 8 323 1e-99 303 +AK1BA_HUMAN sp|Q568L5|A1A1B_DANRE 49.08 326 154 3 1 316 1 324 2e-99 302 +AK1BA_HUMAN sp|Q95JH7|AK1C1_MACFA 47.47 316 162 2 5 316 8 323 3e-99 301 +AK1BA_HUMAN sp|P17264|CRO_LITCT 47.17 318 164 2 3 316 7 324 2e-98 300 +AK1BA_HUMAN sp|P02532|CRO_RANTE 46.54 318 166 2 3 316 7 324 2e-98 299 +AK1BA_HUMAN sp|Q8VC28|AK1CD_MOUSE 47.34 319 158 4 5 316 8 323 2e-97 297 +AK1BA_HUMAN sp|P51652|AKC1H_RAT 44.65 318 168 4 5 316 8 323 3e-96 294 +AK1BA_HUMAN sp|P23457|DIDH_RAT 46.03 315 166 2 5 315 8 322 1e-94 290 +AK1BA_HUMAN sp|Q8K023|AKC1H_MOUSE 44.62 316 171 2 5 316 8 323 4e-94 288 +AK1BA_HUMAN sp|Q91WR5|AK1CL_MOUSE 44.48 308 167 2 13 316 16 323 4e-90 278 +AK1BA_HUMAN sp|P82809|AK1CD_MESAU 43.32 307 170 2 13 315 16 322 2e-85 266 +AK1BA_HUMAN sp|Q6AYQ2|AK1CL_RAT 43.71 318 166 5 5 316 8 318 2e-84 263 +AK1BA_HUMAN sp|Q54NZ7|ALRB_DICDI 47.10 293 139 5 13 299 17 299 1e-82 259 +AK1BA_HUMAN sp|Q6IMN8|ALRA_DICDI 44.11 297 148 5 6 300 6 286 5e-79 249 +AK1BA_HUMAN sp|O70473|AK1A1_CRIGR 51.74 230 108 2 15 243 1 228 3e-78 244 +AK1BA_HUMAN sp|Q0PGJ6|AKRC9_ARATH 44.33 291 140 4 3 287 6 280 5e-75 239 +AK1BA_HUMAN sp|P49378|XYL1_KLULA 42.68 314 159 7 1 297 4 313 2e-70 228 +AK1BA_HUMAN sp|Q55FL3|ALRC_DICDI 41.67 300 159 4 6 299 18 307 9e-70 226 +AK1BA_HUMAN sp|H9JTG9|AK2E4_BOMMO 39.56 316 169 5 2 311 5 304 2e-69 224 +AK1BA_HUMAN sp|Q84TF0|AKRCA_ARATH 41.03 290 149 4 4 287 7 280 5e-69 224 +AK1BA_HUMAN sp|P27800|ALDX_SPOSA 43.79 306 156 6 1 301 1 295 2e-68 222 +AK1BA_HUMAN sp|Q6Y0Z3|XYL1_CANPA 40.81 321 156 7 5 301 10 320 3e-68 222 +AK1BA_HUMAN sp|O80944|AKRC8_ARATH 41.91 303 161 6 4 306 7 294 7e-68 221 +AK1BA_HUMAN sp|P22045|PGFS_LEIMA 42.91 296 140 6 3 297 7 274 9e-68 219 +AK1BA_HUMAN sp|Q5BGA7|XYL1_EMENI 42.38 302 163 5 5 297 6 305 2e-67 219 +AK1BA_HUMAN sp|P14065|GCY1_YEAST 41.89 296 150 6 4 291 11 292 6e-67 218 +AK1BA_HUMAN sp|Q10494|YDG7_SCHPO 43.06 288 153 5 7 292 18 296 3e-66 217 +AK1BA_HUMAN sp|Q9GV41|PGFS_TRYBB 41.84 294 134 5 5 297 7 264 3e-66 215 +AK1BA_HUMAN sp|O13283|XYL1_CANTR 40.75 319 159 7 5 301 10 320 4e-66 216 +AK1BA_HUMAN sp|P87039|XYL2_CANTR 40.75 319 159 7 5 301 10 320 5e-66 216 +AK1BA_HUMAN sp|Q4DJ07|PGFS_TRYCC 40.20 296 139 7 5 297 8 268 1e-65 214 +AK1BA_HUMAN sp|O94735|XYL1_PICGU 40.89 313 157 7 5 296 3 308 5e-65 213 +AK1BA_HUMAN sp|P38715|GRE3_YEAST 40.38 317 163 7 1 297 1 311 2e-64 212 +AK1BA_HUMAN sp|A1D4E3|XYL1_NEOFI 40.62 320 171 6 5 311 6 319 3e-64 212 +AK1BA_HUMAN sp|P78736|XYL1_PACTA 41.75 309 156 7 4 297 5 304 3e-64 211 +AK1BA_HUMAN sp|Q12458|YPR1_YEAST 41.95 298 149 8 5 294 12 293 5e-64 211 +AK1BA_HUMAN sp|A0QV10|Y2408_MYCS2 40.07 297 144 5 1 297 1 263 1e-63 209 +AK1BA_HUMAN sp|Q9M338|AKRCB_ARATH 41.46 287 146 4 4 284 7 277 1e-63 209 +AK1BA_HUMAN sp|P28475|S6PD_MALDO 37.70 313 164 6 1 298 1 297 3e-63 209 +AK1BA_HUMAN sp|Q9P430|XYL1_SCHSH 40.38 312 168 5 6 301 10 319 5e-62 206 +AK1BA_HUMAN sp|A1CRI1|XYL1_ASPCL 40.52 306 163 4 5 297 6 305 8e-62 206 +AK1BA_HUMAN sp|Q4WJT9|XYL1_ASPFU 40.20 306 164 6 5 297 6 305 1e-61 205 +AK1BA_HUMAN sp|B0XNR0|XYL1_ASPFC 40.20 306 164 6 5 297 6 305 1e-61 205 +AK1BA_HUMAN sp|Q3ZFI7|GAR1_HYPJE 39.80 299 160 9 1 295 2 284 2e-61 204 +AK1BA_HUMAN sp|Q9P8R5|XYL1_ASPNG 39.40 302 172 4 5 297 6 305 2e-61 204 +AK1BA_HUMAN sp|A2Q8B5|XYL1_ASPNC 39.40 302 172 4 5 297 6 305 2e-61 204 +AK1BA_HUMAN sp|Q2UKD0|XYL1_ASPOR 40.20 306 164 4 5 297 6 305 4e-61 203 +AK1BA_HUMAN sp|B8N195|XYL1_ASPFN 40.20 306 164 4 5 297 6 305 4e-61 203 +AK1BA_HUMAN sp|C5FFQ7|XYL1_ARTOC 39.94 308 174 3 2 300 10 315 9e-61 202 +AK1BA_HUMAN sp|O74237|XYL1_CANTE 39.62 313 171 5 5 301 8 318 1e-60 202 +AK1BA_HUMAN sp|P31867|XYL1_PICST 40.26 308 162 6 5 297 4 304 2e-60 202 +AK1BA_HUMAN sp|Q01213|DTDH_MUCMU 39.93 298 168 4 9 297 11 306 2e-60 201 +AK1BA_HUMAN sp|Q8X195|XYL1_CANBO 39.87 311 165 7 4 296 5 311 2e-59 199 +AK1BA_HUMAN sp|Q0GYU4|GLD2_HYPJE 39.31 290 163 7 7 289 8 291 2e-59 199 +AK1BA_HUMAN sp|P23901|ALDR_HORVU 40.00 290 151 7 7 292 18 288 2e-59 199 +AK1BA_HUMAN sp|Q876L8|XYL1_HYPJE 39.34 305 170 6 5 297 6 307 6e-59 198 +AK1BA_HUMAN sp|O42888|YBN4_SCHPO 38.89 288 165 5 4 289 14 292 3e-58 196 +AK1BA_HUMAN sp|Q0CUL0|XYL1_ASPTN 39.16 309 173 6 1 297 1 306 5e-58 195 +AK1BA_HUMAN sp|Q46857|DKGA_ECOLI 35.93 295 155 6 3 297 5 265 7e-58 193 +AK1BA_HUMAN sp|G4N708|XYL1_MAGO7 39.34 305 170 6 5 297 6 307 2e-57 194 +AK1BA_HUMAN sp|O34678|YTBE_BACSU 41.10 292 139 5 7 297 11 270 4e-57 192 +AK1BA_HUMAN sp|Q8XBT6|DKGA_ECO57 35.59 295 156 6 3 297 5 265 4e-57 191 +AK1BA_HUMAN sp|Q8ZI40|DKGA_YERPE 35.84 293 154 6 1 293 3 261 2e-56 190 +AK1BA_HUMAN sp|Q8SSK6|ALDR_ENCCU 37.88 293 170 5 6 297 7 288 2e-56 191 +AK1BA_HUMAN sp|P38115|ARA1_YEAST 36.81 307 166 8 4 296 24 316 2e-56 192 +AK1BA_HUMAN sp|G4MZI3|PRD1_MAGO7 37.05 305 171 6 3 289 4 305 3e-56 191 +AK1BA_HUMAN sp|P26690|6DCS_SOYBN 38.28 303 160 5 3 295 11 296 3e-56 190 +AK1BA_HUMAN sp|O32210|GR_BACSU 40.82 294 137 5 5 297 9 266 5e-56 189 +AK1BA_HUMAN sp|Q9SQ64|COR2_PAPSO 38.05 297 156 6 5 289 9 289 6e-56 190 +AK1BA_HUMAN sp|A1UEC6|Y1985_MYCSK 37.50 296 151 4 2 297 3 264 5e-55 186 +AK1BA_HUMAN sp|A3PXT0|Y1919_MYCSJ 37.80 291 147 4 2 292 3 259 6e-55 186 +AK1BA_HUMAN sp|O14088|YER5_SCHPO 33.66 303 164 5 1 299 2 271 1e-54 185 +AK1BA_HUMAN sp|O49133|GALUR_FRAAN 37.77 278 161 6 13 286 19 288 2e-54 186 +AK1BA_HUMAN sp|Q9SQ67|COR14_PAPSO 36.91 298 160 7 4 289 8 289 3e-53 182 +AK1BA_HUMAN sp|Q9SQ69|COR12_PAPSO 37.46 299 157 7 4 289 8 289 5e-53 182 +AK1BA_HUMAN sp|Q8ZM06|DKGA_SALTY 37.63 295 150 6 3 297 5 265 6e-52 178 +AK1BA_HUMAN sp|P58744|DKGA_SALTI 37.63 295 150 6 3 297 5 265 8e-52 177 +AK1BA_HUMAN sp|Q0GYU5|GLD1_HYPJE 40.14 294 157 7 5 289 7 290 9e-52 179 +AK1BA_HUMAN sp|P47137|YJ66_YEAST 34.97 286 155 4 4 286 5 262 3e-51 176 +AK1BA_HUMAN sp|Q02198|MORA_PSEPU 36.33 289 157 6 4 289 7 271 1e-50 175 +AK1BA_HUMAN sp|A1T726|Y2161_MYCVP 34.35 294 157 5 5 297 10 268 6e-50 173 +AK1BA_HUMAN sp|Q7G765|NADO2_ORYSJ 34.35 294 175 7 1 285 3 287 1e-48 171 +AK1BA_HUMAN sp|Q7G764|NADO1_ORYSJ 33.89 298 179 7 1 289 1 289 1e-48 171 +AK1BA_HUMAN sp|A4TE41|Y4205_MYCGI 33.45 293 161 4 5 297 10 268 4e-48 168 +AK1BA_HUMAN sp|A1UEC5|Y1984_MYCSK 32.42 293 164 5 5 297 14 272 8e-48 167 +AK1BA_HUMAN sp|Q1BAN7|Y1938_MYCSS 32.42 293 164 5 5 297 14 272 8e-48 167 +AK1BA_HUMAN sp|A3PXS9|Y1918_MYCSJ 32.42 293 164 5 5 297 14 272 8e-48 167 +AK1BA_HUMAN sp|Q9C1X5|YKW2_SCHPO 34.11 299 162 7 2 298 8 273 8e-47 165 +AK1BA_HUMAN sp|A0QV09|Y2407_MYCS2 31.97 294 164 5 5 297 14 272 2e-45 161 +AK1BA_HUMAN sp|Q9SQ68|COR13_PAPSO 36.58 298 161 7 4 289 8 289 1e-44 160 +AK1BA_HUMAN sp|Q9SQ70|COR11_PAPSO 36.54 301 157 8 4 289 8 289 9e-44 158 +AK1BA_HUMAN sp|Q09632|YOF5_CAEEL 35.67 314 166 10 7 314 7 290 1e-43 158 +AK1BA_HUMAN sp|E7C196|MER_ERYCB 37.67 300 152 6 5 285 8 291 1e-43 158 +AK1BA_HUMAN sp|B9VRJ2|COR15_PAPSO 36.75 302 155 8 4 289 8 289 2e-43 157 +AK1BA_HUMAN sp|A5U6Y1|Y2999_MYCTA 33.78 296 156 8 5 297 13 271 4e-43 155 +AK1BA_HUMAN sp|P9WQA5|Y2971_MYCTU 33.78 296 156 8 5 297 13 271 4e-43 155 +AK1BA_HUMAN sp|P9WQA4|Y2971_MYCTO 33.78 296 156 8 5 297 13 271 4e-43 155 +AK1BA_HUMAN sp|Q7TXI6|Y2996_MYCBO 33.78 296 156 8 5 297 13 271 4e-43 155 +AK1BA_HUMAN sp|A1KMW6|Y2993_MYCBP 33.78 296 156 8 5 297 13 271 4e-43 155 +AK1BA_HUMAN sp|P06632|DKGA_CORSC 32.40 287 162 5 7 293 8 262 3e-42 153 +AK1BA_HUMAN sp|A0QL30|Y4483_MYCA1 34.47 293 158 5 5 297 17 275 4e-39 144 +AK1BA_HUMAN sp|Q76L36|CPRC2_CANPA 32.89 301 165 10 3 289 10 287 2e-38 143 +AK1BA_HUMAN sp|Q73SC5|Y4149_MYCPA 33.79 293 160 5 5 297 17 275 3e-37 140 +AK1BA_HUMAN sp|Q8ZH36|DKGB_YERPE 31.14 289 161 7 12 297 2 255 5e-37 138 +AK1BA_HUMAN sp|Q73VK6|Y3007_MYCPA 30.27 294 169 6 5 297 12 270 3e-36 137 +AK1BA_HUMAN sp|A0QJ99|Y3816_MYCA1 30.27 294 169 6 5 297 15 273 4e-36 137 +AK1BA_HUMAN sp|A0PQ11|Y1987_MYCUA 29.25 294 172 6 5 297 13 271 5e-36 136 +AK1BA_HUMAN sp|B2HIJ9|Y1744_MYCMM 29.25 294 172 6 5 297 12 270 5e-36 136 +AK1BA_HUMAN sp|P15339|DKGB_CORSS 32.26 279 156 5 17 295 19 264 3e-34 131 +AK1BA_HUMAN sp|Q8X7Z7|DKGB_ECO57 30.88 285 165 6 13 297 3 255 5e-34 130 +AK1BA_HUMAN sp|Q8ZRM7|DKGB_SALTY 30.53 285 166 6 13 297 3 255 6e-34 130 +AK1BA_HUMAN sp|Q8Z988|DKGB_SALTI 30.18 285 167 6 13 297 3 255 1e-33 129 +AK1BA_HUMAN sp|P30863|DKGB_ECOLI 30.18 285 167 6 13 297 3 255 3e-33 128 +AK1BA_HUMAN sp|O69462|Y1669_MYCLE 28.27 283 167 6 5 286 13 260 2e-30 121 +AK1BA_HUMAN sp|B8ZS00|Y1669_MYCLB 28.27 283 167 6 5 286 13 260 2e-30 121 +AK1BA_HUMAN sp|Q5T2L2|AKCL1_HUMAN 49.57 117 56 1 5 118 11 127 3e-30 116 +AK1BA_HUMAN sp|O13848|I3ACR_SCHPO 31.60 288 159 9 7 286 6 263 2e-29 118 +AK1BA_HUMAN sp|P76234|YEAE_ECOLI 30.30 297 163 8 4 289 5 268 3e-29 117 +AK1BA_HUMAN sp|Q76L37|CPRC1_CANPA 27.18 309 167 9 6 289 9 284 1e-28 116 +AK1BA_HUMAN sp|Q07551|KAR_YEAST 29.04 303 173 10 4 289 7 284 1e-25 108 +AK1BA_HUMAN sp|Q9USV2|YHH5_SCHPO 30.20 255 142 8 35 286 33 254 2e-23 101 +AK1BA_HUMAN sp|P46905|YCCK_BACSU 25.08 299 154 10 29 289 39 305 1e-17 85.1 +AK1BA_HUMAN sp|Q94A68|Y1669_ARATH 24.08 299 176 9 25 292 84 362 7e-15 77.8 +AK1BA_HUMAN sp|P82810|MORA_RABIT 31.18 170 45 5 117 286 27 124 9e-13 68.2 +AK1BA_HUMAN sp|P46336|IOLS_BACSU 25.42 295 159 10 29 289 38 305 3e-12 69.7 +AK1BA_HUMAN sp|P80874|GS69_BACSU 29.36 218 107 9 16 213 16 206 3e-11 67.0 +AK1BA_HUMAN sp|Q56Y42|PLR1_ARATH 23.00 313 178 10 16 285 50 342 6e-09 60.1 +AK1BA_HUMAN sp|P25906|YDBC_ECOLI 23.75 299 181 11 11 294 19 285 6e-09 59.7 +AK1BA_HUMAN sp|C6TBN2|AKR1_SOYBN 25.32 316 178 13 9 290 19 310 6e-08 57.0 +AK1BA_HUMAN sp|P49261|CROB_LEPLU 45.90 61 20 1 95 155 15 62 1e-06 50.1 diff --git a/notebooks/images/pandas_dataframe.png b/notebooks/images/pandas_dataframe.png new file mode 100644 index 0000000000000000000000000000000000000000..2d917747ff871a4cdf3c96a334208dde6d7acbc4 GIT binary patch literal 34313 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%0AXEUhMz=P&X%U&wqcW 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 DBXMbs literal 0 HcmV?d00001 diff --git a/notebooks/images/pandas_logo.svg b/notebooks/images/pandas_logo.svg new file mode 100644 index 0000000..a7af4e4 --- /dev/null +++ b/notebooks/images/pandas_logo.svg @@ -0,0 +1 @@ +<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 818.63 331.21"><defs><style>.cls-1{fill:#130754;}.cls-2{fill:#ffca00;}.cls-3{fill:#e70488;}</style></defs><title>Artboard 63</title><path class="cls-1" d="M290.85,199.21c-10.27,0-20.73-4.25-27.28-12.58v45H243l0-111.09h18.6l.71,12.22c6.38-9.39,17.71-14.35,28.52-14.35,20.73,0,36,17.37,36,40.4S311.58,199.22,290.85,199.21Zm-6.37-65.55c-12.05,0-21.79,9.39-21.79,25.16S272.43,184,284.48,184s21.79-9.39,21.79-25.16S296.53,133.66,284.48,133.66Z"/><path class="cls-1" d="M404.36,197.1l-.71-12.22c-6.38,9.39-17.72,14.35-28.53,14.34-20.73,0-36-17.36-36-40.39s15.24-40.4,36-40.39c10.81,0,22.15,5,28.53,14.35l.71-12.22H423V197.1Zm-22.85-63.43c-12.05,0-21.79,9.39-21.8,25.16S369.45,184,381.5,184s21.8-9.39,21.8-25.16S393.56,133.67,381.51,133.67Z"/><path class="cls-1" d="M494.87,197.11V154.77c0-14.88-5.13-19.84-14.52-19.84-9.75,0-20.38,8.85-20.38,19.48v42.7H439.41V120.57H458.2l.89,14.18c5.14-9.75,16.65-16.3,28.35-16.3,20.37,0,28,14.18,28,33.13v45.54Z"/><path class="cls-1" d="M590.77,197.13l-.71-12.23c-6.38,9.39-17.72,14.35-28.52,14.35-20.73,0-36-17.37-36-40.4s15.24-40.39,36-40.39c10.27,0,20.72,4.26,27.28,12.58V90.83h20.56l0,106.3ZM567.92,133.7c-12,0-21.79,9.39-21.79,25.15S555.87,184,567.92,184s21.79-9.38,21.79-25.15S580,133.7,567.92,133.7Z"/><path class="cls-1" d="M686.6,197.14l-.71-12.22c-6.38,9.39-17.72,14.34-28.53,14.34-20.73,0-36-17.36-36-40.4s15.24-40.39,36-40.39c10.81,0,22.15,5,28.53,14.36l.71-12.23h18.6v76.53Zm-22.85-63.43c-12,0-21.79,9.39-21.8,25.16S651.7,184,663.74,184s21.8-9.39,21.8-25.16S675.8,133.71,663.75,133.71Z"/><path class="cls-1" d="M750.73,199.63a60.16,60.16,0,0,1-30.65-8.69l3.37-14.17c6.2,3.72,15.59,8.51,26.93,8.51,8.15,0,13.82-2.48,13.82-8.86,0-5.49-5.85-7.44-16.3-9.92-18.78-4.08-25.51-14-25.51-24.81,0-12.05,9.39-23.38,30.12-23.38,12.58,0,23.57,5.49,26,6.91l-3.37,13.47A44.59,44.59,0,0,0,753,132.31c-8.32,0-12.4,2.83-12.4,7.44,0,5.13,5.32,7.44,13.46,9.39,20.2,4.25,28.35,13.64,28.35,23.92C782.45,189.53,770.4,199.63,750.73,199.63Z"/><rect class="cls-1" x="74.88" y="68.42" width="24.09" height="50.02"/><rect class="cls-1" x="74.88" y="171.17" width="24.09" height="50.02"/><rect class="cls-2" x="74.88" y="133.04" width="24.09" height="23.6"/><rect class="cls-1" x="36.19" y="109.55" width="24.09" height="166.27"/><rect class="cls-1" x="112.78" y="212.44" width="24.09" height="50.02"/><rect class="cls-1" x="112.78" y="109.61" width="24.09" height="50.02"/><rect class="cls-3" x="112.78" y="174.23" width="24.09" height="23.6"/><rect class="cls-1" x="150.67" y="55.39" width="24.09" height="166.27"/></svg> \ No newline at end of file diff --git a/notebooks/jupyter_cours.ipynb b/notebooks/jupyter_cours.ipynb index c5b9ef6..257fcdb 100644 --- a/notebooks/jupyter_cours.ipynb +++ b/notebooks/jupyter_cours.ipynb @@ -2,30 +2,34 @@ "cells": [ { "cell_type": "markdown", - "id": "danish-perfume", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, + "id": "suitable-agent", + "metadata": {}, "source": [ - "# Introduction to Notebooks and Jupyter\n", - "\n", - "Etienne Kornobis, Bertrand Néron, François Laurent\n", + "# <center>**Cours**</center>\n", "\n", - "2021/09/27\n", - "Institut Pasteur" + "<div style=\"text-align:center\">\n", + " <img src=\"images/jupyter.png\" width=\"600px\">\n", + " <div>\n", + " Bertrand Néron, François Laurent, Etienne Kornobis\n", + " <br />\n", + " <a src=\" https://research.pasteur.fr/en/team/bioinformatics-and-biostatistics-hub/\">Bioinformatics and Biostatistiqucs HUB</a>\n", + " <br />\n", + " © Institut Pasteur, 2021\n", + " </div> \n", + "</div>" ] }, { "cell_type": "markdown", - "id": "successful-hampshire", + "id": "aggressive-microwave", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ + "# Introduction to Notebooks and Jupyter\n", + "\n", "## The concept of literate programming\n", ">*Literate programming: Instead of imagining that our main task is to instruct a\n", ">computer what to do, let us concentrate rather on explaining to human beings\n", @@ -38,7 +42,7 @@ }, { "cell_type": "markdown", - "id": "valued-royal", + "id": "yellow-stick", "metadata": { "slideshow": { "slide_type": "slide" @@ -56,7 +60,7 @@ }, { "cell_type": "markdown", - "id": "relative-settlement", + "id": "vital-watershed", "metadata": { "slideshow": { "slide_type": "slide" @@ -79,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "hungry-developer", + "id": "electoral-disability", "metadata": { "slideshow": { "slide_type": "slide" @@ -98,7 +102,7 @@ }, { "cell_type": "markdown", - "id": "international-measurement", + "id": "corporate-composition", "metadata": { "slideshow": { "slide_type": "slide" @@ -115,7 +119,7 @@ }, { "cell_type": "markdown", - "id": "composite-insulin", + "id": "subsequent-proof", "metadata": { "slideshow": { "slide_type": "slide" @@ -138,7 +142,7 @@ }, { "cell_type": "markdown", - "id": "naughty-kazakhstan", + "id": "caroline-float", "metadata": { "slideshow": { "slide_type": "slide" @@ -159,7 +163,7 @@ }, { "cell_type": "markdown", - "id": "joined-landing", + "id": "funded-singer", "metadata": { "slideshow": { "slide_type": "slide" @@ -173,11 +177,15 @@ "\n", "- Using conda (recommended on jupyter website)\n", "\n", - "```conda env create -n jupyter jupyterlab```\n", + "```shell\n", + "conda env create -n jupyter jupyterlab\n", + "```\n", "\n", "- Using pip\n", "\n", - "```pip install jupyterlab```\n", + "```shell\n", + "pip install jupyterlab\n", + "```\n", "\n", "### On tars\n", "\n", @@ -186,7 +194,7 @@ }, { "cell_type": "markdown", - "id": "decreased-window", + "id": "forward-turkey", "metadata": { "slideshow": { "slide_type": "slide" @@ -212,7 +220,7 @@ }, { "cell_type": "markdown", - "id": "demonstrated-poultry", + "id": "egyptian-wings", "metadata": {}, "source": [ "## Overview" @@ -220,7 +228,7 @@ }, { "cell_type": "markdown", - "id": "lightweight-latex", + "id": "sacred-absolute", "metadata": {}, "source": [ "### Markdown \n", @@ -247,7 +255,7 @@ }, { "cell_type": "markdown", - "id": "important-launch", + "id": "automated-provision", "metadata": {}, "source": [ "### Code examples" @@ -255,7 +263,7 @@ }, { "cell_type": "markdown", - "id": "significant-prison", + "id": "dietary-manual", "metadata": {}, "source": [ "#### Python" @@ -264,7 +272,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "loose-shame", + "id": "dense-fairy", "metadata": {}, "outputs": [ { @@ -281,7 +289,7 @@ }, { "cell_type": "markdown", - "id": "chronic-lyric", + "id": "ordinary-reception", "metadata": {}, "source": [ "#### Bash" @@ -290,7 +298,7 @@ { "cell_type": "code", "execution_count": 3, - "id": "studied-accent", + "id": "moved-drain", "metadata": {}, "outputs": [ { @@ -310,7 +318,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "political-machinery", + "id": "undefined-buying", "metadata": {}, "outputs": [ { @@ -327,7 +335,7 @@ }, { "cell_type": "markdown", - "id": "herbal-budget", + "id": "distinguished-drinking", "metadata": {}, "source": [ "#### Julia" @@ -336,7 +344,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "naval-tsunami", + "id": "immediate-appraisal", "metadata": {}, "outputs": [ { @@ -355,7 +363,7 @@ }, { "cell_type": "markdown", - "id": "offensive-separation", + "id": "senior-notice", "metadata": {}, "source": [ "#### NB\n", @@ -365,7 +373,7 @@ }, { "cell_type": "markdown", - "id": "alternate-housing", + "id": "general-lingerie", "metadata": {}, "source": [ "### Inline plotting" @@ -374,7 +382,7 @@ { "cell_type": "code", "execution_count": 15, - "id": "educated-superintendent", + "id": "similar-color", "metadata": {}, "outputs": [], "source": [ @@ -386,7 +394,7 @@ { "cell_type": "code", "execution_count": 16, - "id": "brilliant-resolution", + "id": "contrary-nicaragua", "metadata": {}, "outputs": [], "source": [ @@ -396,7 +404,7 @@ { "cell_type": "code", "execution_count": 23, - "id": "cleared-federal", + "id": "civil-manner", "metadata": {}, "outputs": [ { @@ -420,7 +428,7 @@ { "cell_type": "code", "execution_count": 25, - "id": "knowing-design", + "id": "noticed-details", "metadata": {}, "outputs": [ { @@ -452,7 +460,7 @@ }, { "cell_type": "markdown", - "id": "blessed-french", + "id": "seventh-desire", "metadata": {}, "source": [ "### Interactivity\n", @@ -467,7 +475,7 @@ }, { "cell_type": "markdown", - "id": "hungarian-version", + "id": "naval-novelty", "metadata": {}, "source": [ "#### Ipywidgets" @@ -476,7 +484,7 @@ { "cell_type": "code", "execution_count": 18, - "id": "economic-stomach", + "id": "atomic-tongue", "metadata": {}, "outputs": [], "source": [ @@ -489,7 +497,7 @@ { "cell_type": "code", "execution_count": 19, - "id": "silver-christmas", + "id": "fallen-heavy", "metadata": {}, "outputs": [ { @@ -516,7 +524,7 @@ { "cell_type": "code", "execution_count": 20, - "id": "independent-cancer", + "id": "comfortable-consistency", "metadata": { "tags": [] }, @@ -544,7 +552,7 @@ }, { "cell_type": "markdown", - "id": "engaged-congo", + "id": "extraordinary-intellectual", "metadata": {}, "source": [ "#### Plotly" @@ -553,7 +561,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "nominated-bench", + "id": "rural-maldives", "metadata": {}, "outputs": [], "source": [ @@ -563,7 +571,7 @@ { "cell_type": "code", "execution_count": 17, - "id": "awful-delaware", + "id": "completed-modification", "metadata": {}, "outputs": [ { @@ -3053,14 +3061,14 @@ }, "xaxis": { "anchor": "y", - "autorange": true, + "autorange": false, "domain": [ 0, 1 ], "range": [ - 17.570230105465004, - 32.92976989453499 + 18.190799316093184, + 22.287828595853814 ], "showspikes": false, "title": { @@ -3070,14 +3078,14 @@ }, "yaxis": { "anchor": "x", - "autorange": true, + "autorange": false, "domain": [ 0, 1 ], "range": [ - -57.78545119705341, - 872.7854511970534 + 198.4717679243281, + 780.8290423258014 ], "showspikes": false, "title": { @@ -3087,7 +3095,7 @@ } } }, - "image/png": "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iCW3Qvz3f3iBTv7vS+jwO+8REdF3L9hMjz75x86f1956h/71i+fS48+8SN865wrPvx3bcgvddtcDRET03rFW4litFWo0l6X8LCDOZTPdJ/EHfyfvZ/3i3vRfg/eOtej9421aXl1L5Wff9wC7srryp+jf8+DbLbrtFy2avqZNt/3C/v+kjv8X97JbE0zMtBP9uUlw9MO2dqyuEX3QWI71e770epuu/WmbZq5t0423temtd9L/PXkUJ9ifn2t/mv6x5YVf3uf77G/pP2as1go126upH3sSzFzrfT02jLbpr29G+16sse2sxilsatOzL6T/+97+C4bM/kP08RPlezj89c02PfSo/W+TOG99cHyZ1tYo9ddcBg89yn5fXno9/WMD4VlZXaNjEe8V3nqnTQ89Zn9W8f73Ju372KzRaK5Qs72S+nEAwMN4rdXVQ9x4vUVra3Lcm24gYsmlEL//oSfo1DM20RvVQ52vDRZ/Qkulpzr//6r5DzrxGxfScy++Rqeescnz74cu29apEP/QWk6c9vIqtZZXpfwsIM6rf2nTxJblzkl876/aifycNw4uMx+stlybzM8LS6O5TKura6n87LePLNMG33LxiS3pvyZBWXyw+70dGG7Tjze36dW/qPH+ZpnV1TVqNOP7fm8cXKYNm7zv5+TV6f+efg78vk17719mVoerdG7JOrxz++KDvf9dK+P3CosPLtOWa9t00+32axT1+/QS4oPDbdqwqU1vH0n3dxX9/P3R6P4eG0bT/71YHG8u0+paOvcKaXDdTd73Jal7xDzyxsFlqWN8ZXWNrNZK6H/39pFlmrx6OdT5HYC4aLZXqJ3hewWgJm8fWaabbrfPfdtu6v88+/YR+7nkwO/te5fjlj15nvbvoSKIWHInxA/8/lk67cxxeufdo56vT113B11/692d/18qPUUDF22lI0c/oBNOPpus5vrsy6lnbKJnX/gzEaFlCkgX1kNz0v3KgxKmZUoSuNuw7NqvX49Y/+asjqSM0gcWhCNqyxRnE7vxmbZnE7u42hckiWfDxCF2//o0l/Xniag9s2W0TImKSu1ImJ/HIXU+m7y9SK6cbdG+pSbt3h+svctiyeq0OylOtJR6D9zkqWWKQ7li0d5F9dr06Epa7QOjtkzhbdSOljVABkc/RMsUIB9/G5Swe3sdfLeBlikcELHkSogf/eBD+uzp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", + "image/png": "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", "text/html": [ "<div> <div id=\"74762f19-ee49-423b-ae1f-8d69b36caedd\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div> <script type=\"text/javascript\"> require([\"plotly\"], function(Plotly) { window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById(\"74762f19-ee49-423b-ae1f-8d69b36caedd\")) { Plotly.newPlot( \"74762f19-ee49-423b-ae1f-8d69b36caedd\", [{\"hovertemplate\":\"x=%{x}<br>index=%{y}<extra></extra>\",\"legendgroup\":\"\",\"marker\":{\"color\":\"#636efa\",\"symbol\":\"circle\"},\"mode\":\"markers\",\"name\":\"\",\"orientation\":\"h\",\"showlegend\":false,\"type\":\"scatter\",\"x\":[20.13,21.33,22.18,18.68,29.01,27.51,22.59,21.6,22.26,23.04,20.06,19.31,24.97,18.82,28.66,27.45,19.57,21.15,23.03,21.55,19.84,23.41,25.21,25.21,28.19,21.9,20.01,23.23,22.86,27.28,21.71,21.93,23.91,22.49,20.57,24.23,20.95,24.6,21.79,19.22,19.38,23.06,21.5,18.59,19.46,21.82,20.56,21.78,19.95,24.38,18.67,21.71,26.02,24.74,20.43,19.1,31.24,27.41,22.22,19.59,20.9,29.0,20.9,20.32,31.83,19.88,24.87,28.73,22.34,25.43,23.5,26.75,23.25,19.92,21.95,23.04,23.05,22.49,31.14,21.63,21.55,21.95,21.36,18.92,24.75,22.83,20.45,22.22,20.3,22.28,20.01,30.63,24.3,19.26,24.89,24.41,23.16,22.53,19.95,21.32,22.72,21.29,23.87,22.47,27.71,29.66,21.27,21.29,23.66,21.16,21.22,20.6,22.85,23.25,31.91,18.72,22.43,20.98,21.19,21.61,20.65,22.71,20.32,25.39,19.05,19.83,21.09,23.14,24.38,31.23,23.04,25.21,24.43,27.47,19.59,27.28,25.72,19.22,22.75,22.98,20.51,27.39,19.57,24.85,23.18,20.43,29.31,29.41,20.04,28.8,26.02,21.1,22.06,28.98,29.96,24.0,19.81,19.81,22.58,20.43,20.2,21.22,24.52,20.83,27.4,20.57,30.11,27.7,21.56,31.58,24.53,18.73,25.01,25.06,24.15,22.83,23.05,27.66,22.46,21.1,23.38,21.54,20.86,23.51,22.13,25.14,24.44,25.39,22.18,27.68,22.72,31.83,20.95,28.19,22.26,24.91,23.87,25.34,19.57,22.76,22.77,24.87,20.93,25.53,20.38,26.7,19.26,24.65,31.96,20.95,20.61,25.73,24.3,20.14,27.11,27.75,22.22,22.53,27.73,19.07,25.81,18.62,23.93,24.96,28.34,25.74,25.64,22.26,25.01,21.22,31.05,24.93,21.3,26.09,24.46,22.95,23.58,25.51,20.66,30.61,25.05,22.72,23.45,22.47,25.35,23.18,24.3,25.9,22.78,25.97,22.44,21.53,25.14,21.91,22.14,31.69,22.64,23.56,22.98,21.26,21.38,28.4,28.71,25.79,22.59,29.4,21.97,23.56,25.18,21.29,22.46,24.16,28.08,23.3,27.28,23.99,22.1,20.42,26.83,19.92,19.91,18.67,21.07,21.48,28.98,18.92,21.9,31.55,20.07,24.24,21.33,20.68,25.46,25.39,21.13,20.06,20.93,24.09,23.59,19.13,27.43,21.56,20.7,23.22,23.73,20.13,23.22,25.96,29.41,20.95,23.53,19.97,30.12,19.06,20.17,24.74,22.95,25.07,26.77,21.41,23.63,22.76,25.55,23.3,22.86,19.33,23.53,27.23,21.15,26.72,26.12,25.65,20.69,25.71,20.19,21.77,24.24,23.62,23.12,22.2,27.77,21.96,19.03,19.47,22.32,30.86,27.47,27.88,20.93,21.33,21.21,20.43,25.35,31.86,22.83,20.2,20.44,24.69,21.48,20.02,20.93,21.25,22.86,25.28,23.18,25.94,23.24,21.06,30.36,24.67,25.71,28.73,27.77,26.47,23.4,28.69,25.3,21.29,23.24,26.19,25.72,22.89,24.53,21.79,27.13,21.87,24.09,22.98,21.3,25.28,26.17,22.53,26.7,24.89,25.5,18.64,23.83,21.63,20.51,24.11,23.09,24.44,26.95,30.05,25.28,24.75,23.24,24.11,28.4,27.75,24.91,21.5,31.48,26.88,22.98,26.19,25.97,26.44,23.22,24.16,25.0,23.76,23.59,22.79,26.77,22.99,26.06,22.54,23.45,21.84,30.48,22.75,23.22,23.24,24.15,22.14,29.58,30.79,20.97,28.98,20.47,29.72,24.28,27.96,26.58,19.36,27.33,23.87,30.81,26.17,27.63,20.71,19.6,25.09,30.46,18.5,25.47,20.39,22.54,23.03,23.91,19.59,19.06,19.46,31.61,20.93,23.91,26.76,30.09,20.66,21.87,24.88,26.37,27.73,19.77,20.7,31.64,26.12,24.6,22.49,24.38,22.94,25.39,21.82,21.56,25.47,24.09,22.13,19.77,20.44,23.63,20.79,23.71,22.1,21.09,20.31,30.44,28.47,28.54,27.4,29.68,21.25,24.16,21.9,27.55,18.9,24.65,24.74,23.14,24.84,26.98,23.42,26.02,26.49,24.0,22.14,22.83,20.83,24.65,20.02,20.96,20.79,26.17,20.83,24.69,20.68,22.06,25.0,23.19,22.37,23.23,21.88,29.24,21.79,24.02,30.48,23.18,30.97,25.55,21.56,23.19,29.6,26.02,25.72,23.73,22.32,29.76,31.4,24.16,25.99,31.95,26.77,25.4,19.75,22.32,23.56,26.21,24.39,27.94,28.68,23.12,27.15,26.21,24.81,31.19,25.28,28.22,19.65,22.53,20.86,23.45,25.09,21.82,28.72,28.68,22.2,22.83,24.87,25.35,24.89,24.15,23.4,25.68,23.8,25.14,21.77,20.59,25.01,30.12,19.71,26.42,22.22,27.39,26.02,23.05,24.25,21.97,25.15,26.67,22.3,24.11,28.39,23.98,23.99,26.86,28.08,30.86,22.83,27.15,25.76,29.66,26.81,22.09,23.95,24.3,27.45,24.48,28.73,25.25,25.18,24.74,28.57,30.4,26.88,24.5,27.1,30.64,28.66,26.87,27.08,25.39,19.94,21.21,28.62,30.99,20.56,23.01,31.64,25.39,28.25,29.68,21.21,21.33,22.36,24.65,22.1,19.04,22.86,23.79,21.63,20.06,23.24,24.14,23.24,18.59,24.74,20.17,21.61,27.29,22.2,24.14,24.38,30.02,30.73,23.23,23.66,21.63,22.86,23.83,30.75,25.47,21.56,19.11,27.99,21.51,29.17,28.08,28.04,23.95,26.44,29.55,24.91,22.31,27.33,19.57,20.32,31.16,23.24,29.47,21.6,24.16,21.09,29.33,29.27,22.67,24.16,25.72,23.5,26.29,28.04,27.53,28.51,25.1,23.3,22.94,23.83,21.71,24.14,26.98,24.77,23.3,22.06,21.64,25.0,26.5,21.5,25.97,31.67,27.33,21.79,23.92,26.36,24.96,21.15,25.18,32.0,28.08,27.06,22.06,28.99,24.28,26.75,24.15,23.73,27.33,26.21,29.76,22.22,25.3,25.05,21.63,26.6,23.03,30.4,23.04,25.61,23.35,22.49,26.07,26.17,21.77,21.46,22.4,25.1,20.28,22.2,29.98,26.86,26.47,24.67,27.17,25.3,31.57,27.21,25.34,26.72,25.59,22.2,25.25,24.22,26.36,28.4,23.51,26.56,28.08,27.33,26.67,25.45,28.05,27.08,27.68,28.08,22.65,22.27,26.49,24.02,31.97,29.33,24.03,23.73,31.8,26.06,27.35,24.53,22.79,28.51,19.59,28.72,21.14,23.14,25.05,26.17,24.5,28.25,26.12,22.86,25.95,22.57,26.39,18.51,24.69,24.75,23.53,20.07,22.77,27.39],\"xaxis\":\"x\",\"y\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815],\"yaxis\":\"y\"}], {\"legend\":{\"tracegroupgap\":0},\"margin\":{\"t\":60},\"template\":{\"data\":{\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"choropleth\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"choropleth\"}],\"contour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"contour\"}],\"contourcarpet\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"contourcarpet\"}],\"heatmap\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmap\"}],\"heatmapgl\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmapgl\"}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"histogram2d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2d\"}],\"histogram2dcontour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2dcontour\"}],\"mesh3d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"mesh3d\"}],\"parcoords\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"parcoords\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}],\"scatter\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter\"}],\"scatter3d\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter3d\"}],\"scattercarpet\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattercarpet\"}],\"scattergeo\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergeo\"}],\"scattergl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergl\"}],\"scattermapbox\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattermapbox\"}],\"scatterpolar\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolar\"}],\"scatterpolargl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolargl\"}],\"scatterternary\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterternary\"}],\"surface\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"surface\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}]},\"layout\":{\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"autotypenumbers\":\"strict\",\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"geo\":{\"bgcolor\":\"white\",\"lakecolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"showlakes\":true,\"showland\":true,\"subunitcolor\":\"white\"},\"hoverlabel\":{\"align\":\"left\"},\"hovermode\":\"closest\",\"mapbox\":{\"style\":\"light\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"bgcolor\":\"#E5ECF6\",\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"ternary\":{\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"bgcolor\":\"#E5ECF6\",\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"title\":{\"x\":0.05},\"xaxis\":{\"automargin\":true,\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"zerolinewidth\":2},\"yaxis\":{\"automargin\":true,\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"zerolinewidth\":2}}},\"xaxis\":{\"anchor\":\"y\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"x\"}},\"yaxis\":{\"anchor\":\"x\",\"domain\":[0.0,1.0],\"title\":{\"text\":\"index\"}}}, {\"responsive\": true} ).then(function(){\n", " \n", @@ -3126,7 +3134,7 @@ }, { "cell_type": "markdown", - "id": "equal-water", + "id": "closing-affect", "metadata": { "slideshow": { "slide_type": "slide" @@ -3137,8 +3145,17 @@ "\n", "- Virtual environment support: venv and conda environment\n", "- Presentations (Reveal.js and Rise)\n", + "- Dashboarding with voila or others\n", "- ..." ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "sustained-radius", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/notebooks/jupyter_practice.ipynb b/notebooks/jupyter_practice.ipynb index e2421e6..ce6afd5 100644 --- a/notebooks/jupyter_practice.ipynb +++ b/notebooks/jupyter_practice.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "expired-highway", + "id": "cultural-palestine", "metadata": {}, "source": [ "# Introduction to JupyterLab\n", @@ -16,28 +16,38 @@ "\n", "After creating a folder for the course, use `venv` to create a virtual environment named for example `sp_env`:\n", "\n", - "```python3 -m venv sp_env```\n", + "```shell\n", + "python3 -m venv sp_env\n", + "```\n", "\n", "This will create a folder `sp_env` in your working directory. The corresponding virtual environment can be activated with:\n", "\n", - "```source sp_env/bin/activate```\n", + "```shell\n", + "source sp_env/bin/activate\n", + "```\n", "\n", "You are now in a virtual environment. You can install librairies in it using pip and these will be installed specifically in this environment (and not globally on your machine). For more on virtual environment, [see the documentation](https://docs.python.org/3/library/venv.html).\n", "\n", "Once the virtal environment activated, we can start composing this environment, now with jupyterlab\n", "\n", - "```pip install jupyterlab```\n", + "```shell\n", + "pip install jupyterlab\n", + "```\n", "\n", "You can now start the jupyter server as follows:\n", "\n", - "```jupyter lab```\n", + "```shell\n", + "jupyter lab\n", + "```\n", "\n", "And open the specified URL in your internet browser (Chrome or Firefox are\n", "better supported). By default, the address will be http://localhost:8888 and you will be automatically redirected to this tab.\n", "\n", "Once all you work is done, you can exit the virtual environment with:\n", "\n", - "```deactivate```\n", + "```shell\n", + "deactivate\n", + "```\n", "\n", "You will need to reactivate it (with `source sp_env/bin/activate`) in order to use it again.\n", "\n", @@ -105,7 +115,7 @@ { "cell_type": "code", "execution_count": 13, - "id": "billion-actress", + "id": "public-nightlife", "metadata": {}, "outputs": [ { @@ -130,7 +140,7 @@ }, { "cell_type": "markdown", - "id": "tight-spring", + "id": "marine-arctic", "metadata": {}, "source": [ "- The exclamation mark character ``!`` can be used as well to execute the following line in a bash subprocess. For example:" @@ -139,7 +149,7 @@ { "cell_type": "code", "execution_count": 21, - "id": "helpful-oasis", + "id": "considerable-fleet", "metadata": {}, "outputs": [ { @@ -156,7 +166,7 @@ }, { "cell_type": "markdown", - "id": "marked-construction", + "id": "satellite-disposal", "metadata": {}, "source": [ "- `%timeit` can be used to check for execution times:" @@ -165,7 +175,7 @@ { "cell_type": "code", "execution_count": 18, - "id": "photographic-premises", + "id": "delayed-thunder", "metadata": {}, "outputs": [ { @@ -182,7 +192,7 @@ }, { "cell_type": "markdown", - "id": "sustained-render", + "id": "vocational-jacksonville", "metadata": {}, "source": [ "- Load more extension for the notebook, for example `autoreload` is useful extension to automatically reload a module imported in a Jupyter notebook if the module has changed locally:" @@ -191,7 +201,7 @@ { "cell_type": "code", "execution_count": 22, - "id": "posted-pleasure", + "id": "physical-steering", "metadata": {}, "outputs": [ { @@ -210,7 +220,7 @@ }, { "cell_type": "markdown", - "id": "insured-entertainment", + "id": "regular-tiger", "metadata": {}, "source": [ "# Exercices" @@ -218,7 +228,7 @@ }, { "cell_type": "markdown", - "id": "helpful-telephone", + "id": "rotary-bouquet", "metadata": {}, "source": [ "The aim here is to get comfortable in Jupyterlab.\n", @@ -235,14 +245,14 @@ { "cell_type": "code", "execution_count": null, - "id": "congressional-light", + "id": "chinese-values", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "little-questionnaire", + "id": "useful-segment", "metadata": {}, "source": [ "## Exercise\n", @@ -258,14 +268,14 @@ { "cell_type": "code", "execution_count": null, - "id": "behavioral-ethnic", + "id": "classical-extraction", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "trained-advantage", + "id": "iraqi-wholesale", "metadata": {}, "source": [ "## Exercise\n", @@ -283,14 +293,14 @@ { "cell_type": "code", "execution_count": null, - "id": "phantom-register", + "id": "refined-relation", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "precise-average", + "id": "manufactured-treatment", "metadata": {}, "source": [ "## Exercise\n", @@ -307,14 +317,14 @@ { "cell_type": "code", "execution_count": null, - "id": "solar-auckland", + "id": "featured-converter", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "inside-approval", + "id": "constant-thriller", "metadata": {}, "source": [ "## Exercise\n", @@ -325,14 +335,14 @@ { "cell_type": "code", "execution_count": null, - "id": "worse-husband", + "id": "illegal-preserve", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "dirty-speaker", + "id": "written-bidding", "metadata": {}, "source": [ "## Exercise\n", @@ -343,14 +353,14 @@ { "cell_type": "code", "execution_count": null, - "id": "injured-thirty", + "id": "waiting-concord", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "perceived-michael", + "id": "varying-providence", "metadata": {}, "source": [ "# More documentation\n", diff --git a/notebooks/pandas_TP.ipynb b/notebooks/pandas_TP.ipynb new file mode 100644 index 0000000..ea7191c --- /dev/null +++ b/notebooks/pandas_TP.ipynb @@ -0,0 +1,481 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "separated-samba", + "metadata": {}, + "source": [ + "# <center>**TP**</center>\n", + "\n", + "<img src=\"./images/pandas_logo.svg\">\n", + "<div style=\"text-align:center\">\n", + " Bertrand Néron, François Laurent, Etienne Kornobis\n", + " <br />\n", + " <a src=\" https://research.pasteur.fr/en/team/bioinformatics-and-biostatistics-hub/\">Bioinformatics and Biostatistiqucs HUB</a>\n", + " <br />\n", + " © Institut Pasteur, 2021\n", + "</div>" + ] + }, + { + "cell_type": "markdown", + "id": "hazardous-berry", + "metadata": {}, + "source": [ + "# Exploring Blast results" + ] + }, + { + "cell_type": "markdown", + "id": "union-charleston", + "metadata": {}, + "source": [ + "- Import the file data/blast.txt into a pandas dataframe variable (named `blast_res`). Verify that its type is a pandas\n", + "dataframe and display the dataframe in jupyterlab.\n", + "\n", + "NB: The column names for this blast format are: \"qseqid\", \"sseqid\", \"pident\", \"length\", \"mismatch\", \"gapopen\", \"qstart\", \"qend\", \"sstart\", \"send\", \"evalue\", \"bitscore\"\n", + "You going to need to pass an extra argument (`names`) to specify the names of the columns." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "assured-telescope", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "parallel-algorithm", + "metadata": {}, + "source": [ + "Explore ``blast_res`` dataframe:\n", + "\n", + "- Display the 5 first lines of the dataframe.\n", + "- Display the 8 last lines of the dataframe.\n", + "- Display a overall statistical description of the dataframe.\n", + "- Display the dimensions of the dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "nuclear-carrier", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "still-scheme", + "metadata": {}, + "source": [ + "- Extract 3rd line from the ``blast_res`` dataframe. Which type of data structure is returned by this extraction ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "northern-worse", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "persistent-beijing", + "metadata": {}, + "source": [ + "- Extract the *sseqid* column from the ``blast_res`` dataframe. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "directed-brazilian", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "generic-hearts", + "metadata": {}, + "source": [ + "- Get the minimum and maximum value of a the *evalue* column." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "prescription-appraisal", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "naughty-brook", + "metadata": {}, + "source": [ + "- Get the median and the mean of the *bitscore* column." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "extended-chicken", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "contrary-allah", + "metadata": {}, + "source": [ + "- Filter in all hits with a percentage of identity (*pident*) superior to 75%." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "liked-shell", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "neutral-experience", + "metadata": {}, + "source": [ + "- Based on the bitscore alone, extract only the best hit(s) (i.e. the highest(s) bitscore(s))." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "three-period", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "blank-digest", + "metadata": {}, + "source": [ + "- Filter in all hits which are corresponding to human hits in the database (*sseqid*)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "empirical-manhattan", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "graphic-corruption", + "metadata": {}, + "source": [ + "- Filter in all hits with a percentage of identity superior to 75% **AND** and is NOT a HUMAN hit (sseqid does not contain \"HUMAN\"). (Hint: To negate a boolean in a query you can use \"~\" in front of it)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "numerical-spread", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "boolean-verse", + "metadata": {}, + "source": [ + "- Plot a histogram of the bitscores. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "genetic-navigation", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "destroyed-velvet", + "metadata": {}, + "source": [ + "- Plot a barplot of the number of hits per species (species are considered the last code after the \"_\" in the sseqid column)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "composite-twelve", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "typical-japan", + "metadata": {}, + "source": [ + "# Extra exercise" + ] + }, + { + "cell_type": "markdown", + "id": "electronic-ferry", + "metadata": {}, + "source": [ + "- Read the 'data/city_temperature.csv'\n", + "\n", + "- Force the City datatype to string by passing `dtype={'City': str}` as argument to the function to read the file.\n", + "Don't worry to the warning, it is due to State wich contains Nan for non US contry, but we do not use these data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "verified-acceptance", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "extreme-radio", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "phantom-inclusion", + "metadata": {}, + "source": [ + "We will work only on the Europe Region, so create a datafrane named europe with only these data.\n", + "Let's explore it a little bit\n", + "* how many data?\n", + "* which columns? \n", + "* index? " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "saving-labor", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "pleased-collaboration", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "tracked-addition", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "manufactured-hierarchy", + "metadata": {}, + "source": [ + "- which countries are in Europe ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "sharing-lawsuit", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "adopted-eligibility", + "metadata": {}, + "source": [ + "- Remove the columns 'Region' and 'State' from the data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "korean-nudist", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "creative-apparatus", + "metadata": {}, + "source": [ + "- From the Europe dataframe create a new dataset containing countries: 'France', 'Spain', 'Italy'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "solar-nursery", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "written-spank", + "metadata": {}, + "source": [ + "- Group the data on 'City' and 'Year' compute the mean of each group and keep only the 'AvgTemperature' column." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "effective-declaration", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "stretch-diesel", + "metadata": {}, + "source": [ + "- Do the same but compute the standard deviation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "occupational-script", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "liked-mobility", + "metadata": {}, + "source": [ + "* reset the index for the mean data and std data\n", + "* rename the column AvgTemperature to Tmp on the mean data\n", + "* rename the column AvgTemperature to std on the std data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fewer-banner", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "continuing-noise", + "metadata": {}, + "source": [ + "- merge the two tables data_mean and data_std" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "noticed-southwest", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "strong-employee", + "metadata": {}, + "source": [ + "- save the data in a file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "involved-weekly", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "young-camping", + "metadata": {}, + "source": [ + "# Teasing\n", + "\n", + "a quick data plotting. we will improve it in matplotlib course" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "japanese-pierre", + "metadata": {}, + "outputs": [], + "source": [ + "for city, df in clean_data.groupby('City'):\n", + " df.plot('Year', 'Tmp', label=city)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "tough-trash", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/pandas_TP_solution.ipynb b/notebooks/pandas_TP_solution.ipynb new file mode 100644 index 0000000..ee623af --- /dev/null +++ b/notebooks/pandas_TP_solution.ipynb @@ -0,0 +1,2933 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "right-artwork", + "metadata": {}, + "source": [ + "# <center>**TP**</center>\n", + "\n", + "<img src=\"./images/pandas_logo.svg\">\n", + "<div style=\"text-align:center\">\n", + " Bertrand Néron\n", + " <br />\n", + " <a src=\" https://research.pasteur.fr/en/team/bioinformatics-and-biostatistics-hub/\">Bioinformatics and Biostatistiqucs HUB</a>\n", + " <br />\n", + " © Institut Pasteur, 2021\n", + "</div>" + ] + }, + { + "cell_type": "markdown", + "id": "sacred-breathing", + "metadata": {}, + "source": [ + "# Exploring Blast results" + ] + }, + { + "cell_type": "markdown", + "id": "technical-crystal", + "metadata": {}, + "source": [ + "- Import the file data/blast.txt into a pandas dataframe variable (named `blast_res`). Verify that its type is a pandas\n", + "dataframe and display the dataframe in jupyterlab.\n", + "\n", + "NB: The column names for this blast format are: \"qseqid\", \"sseqid\", \"pident\", \"length\", \"mismatch\", \"gapopen\", \"qstart\", \"qend\", \"sstart\", \"send\", \"evalue\", \"bitscore\"\n", + "You going to need to pass an extra argument (`names`) to specify the names of the columns." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "recreational-seller", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "major-dream", + "metadata": {}, + "outputs": [], + "source": [ + "blast_colnames = [\"qseqid\",\"sseqid\",\"pident\",\"length\",\"mismatch\",\"gapopen\",\"qstart\",\"qend\",\"sstart\",\"send\",\"evalue\",\"bitscore\"]\n", + "blast_res = pd.read_csv(\"../data/blast.txt\", sep=\"\\t\", names=blast_colnames)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "parliamentary-heaven", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(blast_res)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "changing-drive", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O60218|AK1BA_HUMAN</td>\n", + " <td>100.00</td>\n", + " <td>316</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>654.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|C9JRZ8|AK1BF_HUMAN</td>\n", + " <td>91.16</td>\n", + " <td>294</td>\n", + " <td>26</td>\n", + " <td>0</td>\n", + " <td>23</td>\n", + " <td>316</td>\n", + " <td>51</td>\n", + " <td>344</td>\n", + " <td>0.000000e+00</td>\n", + " <td>559.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O08782|ALD2_CRIGR</td>\n", + " <td>83.23</td>\n", + " <td>316</td>\n", + " <td>53</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>537.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P45377|ALD2_MOUSE</td>\n", + " <td>82.28</td>\n", + " <td>316</td>\n", + " <td>56</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>527.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P21300|ALD1_MOUSE</td>\n", + " <td>79.75</td>\n", + " <td>316</td>\n", + " <td>64</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>515.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>171</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P80874|GS69_BACSU</td>\n", + " <td>29.36</td>\n", + " <td>218</td>\n", + " <td>107</td>\n", + " <td>9</td>\n", + " <td>16</td>\n", + " <td>213</td>\n", + " <td>16</td>\n", + " <td>206</td>\n", + " <td>3.000000e-11</td>\n", + " <td>67.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>172</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q56Y42|PLR1_ARATH</td>\n", + " <td>23.00</td>\n", + " <td>313</td>\n", + " <td>178</td>\n", + " <td>10</td>\n", + " <td>16</td>\n", + " <td>285</td>\n", + " <td>50</td>\n", + " <td>342</td>\n", + " <td>6.000000e-09</td>\n", + " <td>60.1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>173</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P25906|YDBC_ECOLI</td>\n", + " <td>23.75</td>\n", + " <td>299</td>\n", + " <td>181</td>\n", + " <td>11</td>\n", + " <td>11</td>\n", + " <td>294</td>\n", + " <td>19</td>\n", + " <td>285</td>\n", + " <td>6.000000e-09</td>\n", + " <td>59.7</td>\n", + " </tr>\n", + " <tr>\n", + " <th>174</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|C6TBN2|AKR1_SOYBN</td>\n", + " <td>25.32</td>\n", + " <td>316</td>\n", + " <td>178</td>\n", + " <td>13</td>\n", + " <td>9</td>\n", + " <td>290</td>\n", + " <td>19</td>\n", + " <td>310</td>\n", + " <td>6.000000e-08</td>\n", + " <td>57.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>175</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P49261|CROB_LEPLU</td>\n", + " <td>45.90</td>\n", + " <td>61</td>\n", + " <td>20</td>\n", + " <td>1</td>\n", + " <td>95</td>\n", + " <td>155</td>\n", + " <td>15</td>\n", + " <td>62</td>\n", + " <td>1.000000e-06</td>\n", + " <td>50.1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>176 rows × 12 columns</p>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "0 AK1BA_HUMAN sp|O60218|AK1BA_HUMAN 100.00 316 0 0 \n", + "1 AK1BA_HUMAN sp|C9JRZ8|AK1BF_HUMAN 91.16 294 26 0 \n", + "2 AK1BA_HUMAN sp|O08782|ALD2_CRIGR 83.23 316 53 0 \n", + "3 AK1BA_HUMAN sp|P45377|ALD2_MOUSE 82.28 316 56 0 \n", + "4 AK1BA_HUMAN sp|P21300|ALD1_MOUSE 79.75 316 64 0 \n", + ".. ... ... ... ... ... ... \n", + "171 AK1BA_HUMAN sp|P80874|GS69_BACSU 29.36 218 107 9 \n", + "172 AK1BA_HUMAN sp|Q56Y42|PLR1_ARATH 23.00 313 178 10 \n", + "173 AK1BA_HUMAN sp|P25906|YDBC_ECOLI 23.75 299 181 11 \n", + "174 AK1BA_HUMAN sp|C6TBN2|AKR1_SOYBN 25.32 316 178 13 \n", + "175 AK1BA_HUMAN sp|P49261|CROB_LEPLU 45.90 61 20 1 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "0 1 316 1 316 0.000000e+00 654.0 \n", + "1 23 316 51 344 0.000000e+00 559.0 \n", + "2 1 316 1 316 0.000000e+00 537.0 \n", + "3 1 316 1 316 0.000000e+00 527.0 \n", + "4 1 316 1 316 0.000000e+00 515.0 \n", + ".. ... ... ... ... ... ... \n", + "171 16 213 16 206 3.000000e-11 67.0 \n", + "172 16 285 50 342 6.000000e-09 60.1 \n", + "173 11 294 19 285 6.000000e-09 59.7 \n", + "174 9 290 19 310 6.000000e-08 57.0 \n", + "175 95 155 15 62 1.000000e-06 50.1 \n", + "\n", + "[176 rows x 12 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res" + ] + }, + { + "cell_type": "markdown", + "id": "productive-chorus", + "metadata": {}, + "source": [ + "Explore ``blast_res`` dataframe:\n", + "\n", + "- Display the 5 first lines of the dataframe.\n", + "- Display the 8 last lines of the dataframe.\n", + "- Display a overall statistical description of the dataframe.\n", + "- Display the dimensions of the dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "yellow-matthew", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O60218|AK1BA_HUMAN</td>\n", + " <td>100.00</td>\n", + " <td>316</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.0</td>\n", + " <td>654.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|C9JRZ8|AK1BF_HUMAN</td>\n", + " <td>91.16</td>\n", + " <td>294</td>\n", + " <td>26</td>\n", + " <td>0</td>\n", + " <td>23</td>\n", + " <td>316</td>\n", + " <td>51</td>\n", + " <td>344</td>\n", + " <td>0.0</td>\n", + " <td>559.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O08782|ALD2_CRIGR</td>\n", + " <td>83.23</td>\n", + " <td>316</td>\n", + " <td>53</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.0</td>\n", + " <td>537.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P45377|ALD2_MOUSE</td>\n", + " <td>82.28</td>\n", + " <td>316</td>\n", + " <td>56</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.0</td>\n", + " <td>527.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P21300|ALD1_MOUSE</td>\n", + " <td>79.75</td>\n", + " <td>316</td>\n", + " <td>64</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.0</td>\n", + " <td>515.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "0 AK1BA_HUMAN sp|O60218|AK1BA_HUMAN 100.00 316 0 0 \n", + "1 AK1BA_HUMAN sp|C9JRZ8|AK1BF_HUMAN 91.16 294 26 0 \n", + "2 AK1BA_HUMAN sp|O08782|ALD2_CRIGR 83.23 316 53 0 \n", + "3 AK1BA_HUMAN sp|P45377|ALD2_MOUSE 82.28 316 56 0 \n", + "4 AK1BA_HUMAN sp|P21300|ALD1_MOUSE 79.75 316 64 0 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "0 1 316 1 316 0.0 654.0 \n", + "1 23 316 51 344 0.0 559.0 \n", + "2 1 316 1 316 0.0 537.0 \n", + "3 1 316 1 316 0.0 527.0 \n", + "4 1 316 1 316 0.0 515.0 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "handled-details", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>168</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q94A68|Y1669_ARATH</td>\n", + " <td>24.08</td>\n", + " <td>299</td>\n", + " <td>176</td>\n", + " <td>9</td>\n", + " <td>25</td>\n", + " <td>292</td>\n", + " <td>84</td>\n", + " <td>362</td>\n", + " <td>7.000000e-15</td>\n", + " <td>77.8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>169</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P82810|MORA_RABIT</td>\n", + " <td>31.18</td>\n", + " <td>170</td>\n", + " <td>45</td>\n", + " <td>5</td>\n", + " <td>117</td>\n", + " <td>286</td>\n", + " <td>27</td>\n", + " <td>124</td>\n", + " <td>9.000000e-13</td>\n", + " <td>68.2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>170</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P46336|IOLS_BACSU</td>\n", + " <td>25.42</td>\n", + " <td>295</td>\n", + " <td>159</td>\n", + " <td>10</td>\n", + " <td>29</td>\n", + " <td>289</td>\n", + " <td>38</td>\n", + " <td>305</td>\n", + " <td>3.000000e-12</td>\n", + " <td>69.7</td>\n", + " </tr>\n", + " <tr>\n", + " <th>171</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P80874|GS69_BACSU</td>\n", + " <td>29.36</td>\n", + " <td>218</td>\n", + " <td>107</td>\n", + " <td>9</td>\n", + " <td>16</td>\n", + " <td>213</td>\n", + " <td>16</td>\n", + " <td>206</td>\n", + " <td>3.000000e-11</td>\n", + " <td>67.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>172</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q56Y42|PLR1_ARATH</td>\n", + " <td>23.00</td>\n", + " <td>313</td>\n", + " <td>178</td>\n", + " <td>10</td>\n", + " <td>16</td>\n", + " <td>285</td>\n", + " <td>50</td>\n", + " <td>342</td>\n", + " <td>6.000000e-09</td>\n", + " <td>60.1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>173</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P25906|YDBC_ECOLI</td>\n", + " <td>23.75</td>\n", + " <td>299</td>\n", + " <td>181</td>\n", + " <td>11</td>\n", + " <td>11</td>\n", + " <td>294</td>\n", + " <td>19</td>\n", + " <td>285</td>\n", + " <td>6.000000e-09</td>\n", + " <td>59.7</td>\n", + " </tr>\n", + " <tr>\n", + " <th>174</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|C6TBN2|AKR1_SOYBN</td>\n", + " <td>25.32</td>\n", + " <td>316</td>\n", + " <td>178</td>\n", + " <td>13</td>\n", + " <td>9</td>\n", + " <td>290</td>\n", + " <td>19</td>\n", + " <td>310</td>\n", + " <td>6.000000e-08</td>\n", + " <td>57.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>175</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P49261|CROB_LEPLU</td>\n", + " <td>45.90</td>\n", + " <td>61</td>\n", + " <td>20</td>\n", + " <td>1</td>\n", + " <td>95</td>\n", + " <td>155</td>\n", + " <td>15</td>\n", + " <td>62</td>\n", + " <td>1.000000e-06</td>\n", + " <td>50.1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "168 AK1BA_HUMAN sp|Q94A68|Y1669_ARATH 24.08 299 176 9 \n", + "169 AK1BA_HUMAN sp|P82810|MORA_RABIT 31.18 170 45 5 \n", + "170 AK1BA_HUMAN sp|P46336|IOLS_BACSU 25.42 295 159 10 \n", + "171 AK1BA_HUMAN sp|P80874|GS69_BACSU 29.36 218 107 9 \n", + "172 AK1BA_HUMAN sp|Q56Y42|PLR1_ARATH 23.00 313 178 10 \n", + "173 AK1BA_HUMAN sp|P25906|YDBC_ECOLI 23.75 299 181 11 \n", + "174 AK1BA_HUMAN sp|C6TBN2|AKR1_SOYBN 25.32 316 178 13 \n", + "175 AK1BA_HUMAN sp|P49261|CROB_LEPLU 45.90 61 20 1 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "168 25 292 84 362 7.000000e-15 77.8 \n", + "169 117 286 27 124 9.000000e-13 68.2 \n", + "170 29 289 38 305 3.000000e-12 69.7 \n", + "171 16 213 16 206 3.000000e-11 67.0 \n", + "172 16 285 50 342 6.000000e-09 60.1 \n", + "173 11 294 19 285 6.000000e-09 59.7 \n", + "174 9 290 19 310 6.000000e-08 57.0 \n", + "175 95 155 15 62 1.000000e-06 50.1 " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.tail(8)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "virgin-forestry", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>count</th>\n", + " <td>176.000000</td>\n", + " <td>176.000000</td>\n", + " <td>176.000000</td>\n", + " <td>176.000000</td>\n", + " <td>176.000000</td>\n", + " <td>176.000000</td>\n", + " <td>176.000000</td>\n", + " <td>176.000000</td>\n", + " <td>1.760000e+02</td>\n", + " <td>176.000000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>mean</th>\n", + " <td>42.772500</td>\n", + " <td>300.250000</td>\n", + " <td>149.465909</td>\n", + " <td>4.767045</td>\n", + " <td>6.948864</td>\n", + " <td>299.079545</td>\n", + " <td>9.198864</td>\n", + " <td>293.971591</td>\n", + " <td>6.091102e-09</td>\n", + " <td>231.952841</td>\n", + " </tr>\n", + " <tr>\n", + " <th>std</th>\n", + " <td>12.397842</td>\n", + " <td>29.162108</td>\n", + " <td>30.489511</td>\n", + " <td>2.659161</td>\n", + " <td>11.909789</td>\n", + " <td>22.140446</td>\n", + " <td>9.583331</td>\n", + " <td>35.601834</td>\n", + " <td>7.548480e-08</td>\n", + " <td>104.060644</td>\n", + " </tr>\n", + " <tr>\n", + " <th>min</th>\n", + " <td>23.000000</td>\n", + " <td>61.000000</td>\n", + " <td>0.000000</td>\n", + " <td>0.000000</td>\n", + " <td>1.000000</td>\n", + " <td>118.000000</td>\n", + " <td>1.000000</td>\n", + " <td>62.000000</td>\n", + " <td>0.000000e+00</td>\n", + " <td>50.100000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25%</th>\n", + " <td>34.845000</td>\n", + " <td>294.000000</td>\n", + " <td>150.000000</td>\n", + " <td>2.000000</td>\n", + " <td>3.000000</td>\n", + " <td>294.000000</td>\n", + " <td>4.000000</td>\n", + " <td>272.000000</td>\n", + " <td>8.750000e-100</td>\n", + " <td>167.000000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50%</th>\n", + " <td>40.230000</td>\n", + " <td>303.000000</td>\n", + " <td>159.000000</td>\n", + " <td>5.000000</td>\n", + " <td>5.000000</td>\n", + " <td>297.000000</td>\n", + " <td>8.000000</td>\n", + " <td>302.500000</td>\n", + " <td>1.000000e-61</td>\n", + " <td>205.000000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>75%</th>\n", + " <td>47.980000</td>\n", + " <td>316.000000</td>\n", + " <td>164.000000</td>\n", + " <td>6.000000</td>\n", + " <td>5.000000</td>\n", + " <td>316.000000</td>\n", + " <td>11.000000</td>\n", + " <td>320.000000</td>\n", + " <td>8.000000e-48</td>\n", + " <td>303.000000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>max</th>\n", + " <td>100.000000</td>\n", + " <td>329.000000</td>\n", + " <td>181.000000</td>\n", + " <td>13.000000</td>\n", + " <td>117.000000</td>\n", + " <td>316.000000</td>\n", + " <td>84.000000</td>\n", + " <td>362.000000</td>\n", + " <td>1.000000e-06</td>\n", + " <td>654.000000</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " pident length mismatch gapopen qstart qend \\\n", + "count 176.000000 176.000000 176.000000 176.000000 176.000000 176.000000 \n", + "mean 42.772500 300.250000 149.465909 4.767045 6.948864 299.079545 \n", + "std 12.397842 29.162108 30.489511 2.659161 11.909789 22.140446 \n", + "min 23.000000 61.000000 0.000000 0.000000 1.000000 118.000000 \n", + "25% 34.845000 294.000000 150.000000 2.000000 3.000000 294.000000 \n", + "50% 40.230000 303.000000 159.000000 5.000000 5.000000 297.000000 \n", + "75% 47.980000 316.000000 164.000000 6.000000 5.000000 316.000000 \n", + "max 100.000000 329.000000 181.000000 13.000000 117.000000 316.000000 \n", + "\n", + " sstart send evalue bitscore \n", + "count 176.000000 176.000000 1.760000e+02 176.000000 \n", + "mean 9.198864 293.971591 6.091102e-09 231.952841 \n", + "std 9.583331 35.601834 7.548480e-08 104.060644 \n", + "min 1.000000 62.000000 0.000000e+00 50.100000 \n", + "25% 4.000000 272.000000 8.750000e-100 167.000000 \n", + "50% 8.000000 302.500000 1.000000e-61 205.000000 \n", + "75% 11.000000 320.000000 8.000000e-48 303.000000 \n", + "max 84.000000 362.000000 1.000000e-06 654.000000 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "superb-papua", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(176, 12)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.shape" + ] + }, + { + "cell_type": "markdown", + "id": "fourth-pennsylvania", + "metadata": {}, + "source": [ + "- Extract 3rd line from the ``blast_res`` dataframe. Which type of data structure is returned by this extraction ?" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "binding-interest", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "qseqid AK1BA_HUMAN\n", + "sseqid sp|O08782|ALD2_CRIGR\n", + "pident 83.23\n", + "length 316\n", + "mismatch 53\n", + "gapopen 0\n", + "qstart 1\n", + "qend 316\n", + "sstart 1\n", + "send 316\n", + "evalue 0.0\n", + "bitscore 537.0\n", + "Name: 2, dtype: object" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.iloc[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "careful-dining", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(blast_res.iloc[2])" + ] + }, + { + "cell_type": "markdown", + "id": "common-sixth", + "metadata": {}, + "source": [ + "- Extract the *sseqid* column from the ``blast_res`` dataframe. " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "located-waters", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 sp|O60218|AK1BA_HUMAN\n", + "1 sp|C9JRZ8|AK1BF_HUMAN\n", + "2 sp|O08782|ALD2_CRIGR\n", + "3 sp|P45377|ALD2_MOUSE\n", + "4 sp|P21300|ALD1_MOUSE\n", + " ... \n", + "171 sp|P80874|GS69_BACSU\n", + "172 sp|Q56Y42|PLR1_ARATH\n", + "173 sp|P25906|YDBC_ECOLI\n", + "174 sp|C6TBN2|AKR1_SOYBN\n", + "175 sp|P49261|CROB_LEPLU\n", + "Name: sseqid, Length: 176, dtype: object" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.sseqid\n", + "# OR\n", + "blast_res['sseqid']\n", + "# OR\n", + "blast_res.loc[:,'sseqid']" + ] + }, + { + "cell_type": "markdown", + "id": "searching-coach", + "metadata": {}, + "source": [ + "- Get the minimum and maximum value of a the *evalue* column." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "square-airplane", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.evalue.min()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "innovative-audio", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1e-06" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.evalue.max()" + ] + }, + { + "cell_type": "markdown", + "id": "broad-password", + "metadata": {}, + "source": [ + "- Get the median and the mean of the *bitscore* column." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "tamil-aggregate", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "205.0" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.bitscore.median()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "sitting-metallic", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "231.9528409090909" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.bitscore.mean()" + ] + }, + { + "cell_type": "markdown", + "id": "excessive-tournament", + "metadata": {}, + "source": [ + "- Filter in all hits with a percentage of identity (*pident*) superior to 75%." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "duplicate-ghana", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O60218|AK1BA_HUMAN</td>\n", + " <td>100.00</td>\n", + " <td>316</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>654.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|C9JRZ8|AK1BF_HUMAN</td>\n", + " <td>91.16</td>\n", + " <td>294</td>\n", + " <td>26</td>\n", + " <td>0</td>\n", + " <td>23</td>\n", + " <td>316</td>\n", + " <td>51</td>\n", + " <td>344</td>\n", + " <td>0.000000e+00</td>\n", + " <td>559.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O08782|ALD2_CRIGR</td>\n", + " <td>83.23</td>\n", + " <td>316</td>\n", + " <td>53</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>537.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P45377|ALD2_MOUSE</td>\n", + " <td>82.28</td>\n", + " <td>316</td>\n", + " <td>56</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>527.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P21300|ALD1_MOUSE</td>\n", + " <td>79.75</td>\n", + " <td>316</td>\n", + " <td>64</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>515.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q5RJP0|ALD1_RAT</td>\n", + " <td>78.16</td>\n", + " <td>316</td>\n", + " <td>69</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>2.000000e-177</td>\n", + " <td>501.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "0 AK1BA_HUMAN sp|O60218|AK1BA_HUMAN 100.00 316 0 0 \n", + "1 AK1BA_HUMAN sp|C9JRZ8|AK1BF_HUMAN 91.16 294 26 0 \n", + "2 AK1BA_HUMAN sp|O08782|ALD2_CRIGR 83.23 316 53 0 \n", + "3 AK1BA_HUMAN sp|P45377|ALD2_MOUSE 82.28 316 56 0 \n", + "4 AK1BA_HUMAN sp|P21300|ALD1_MOUSE 79.75 316 64 0 \n", + "5 AK1BA_HUMAN sp|Q5RJP0|ALD1_RAT 78.16 316 69 0 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "0 1 316 1 316 0.000000e+00 654.0 \n", + "1 23 316 51 344 0.000000e+00 559.0 \n", + "2 1 316 1 316 0.000000e+00 537.0 \n", + "3 1 316 1 316 0.000000e+00 527.0 \n", + "4 1 316 1 316 0.000000e+00 515.0 \n", + "5 1 316 1 316 2.000000e-177 501.0 " + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.loc[blast_res.pident > 75]" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "developing-browser", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O60218|AK1BA_HUMAN</td>\n", + " <td>100.00</td>\n", + " <td>316</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>654.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|C9JRZ8|AK1BF_HUMAN</td>\n", + " <td>91.16</td>\n", + " <td>294</td>\n", + " <td>26</td>\n", + " <td>0</td>\n", + " <td>23</td>\n", + " <td>316</td>\n", + " <td>51</td>\n", + " <td>344</td>\n", + " <td>0.000000e+00</td>\n", + " <td>559.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O08782|ALD2_CRIGR</td>\n", + " <td>83.23</td>\n", + " <td>316</td>\n", + " <td>53</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>537.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P45377|ALD2_MOUSE</td>\n", + " <td>82.28</td>\n", + " <td>316</td>\n", + " <td>56</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>527.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P21300|ALD1_MOUSE</td>\n", + " <td>79.75</td>\n", + " <td>316</td>\n", + " <td>64</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>515.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q5RJP0|ALD1_RAT</td>\n", + " <td>78.16</td>\n", + " <td>316</td>\n", + " <td>69</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>2.000000e-177</td>\n", + " <td>501.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "0 AK1BA_HUMAN sp|O60218|AK1BA_HUMAN 100.00 316 0 0 \n", + "1 AK1BA_HUMAN sp|C9JRZ8|AK1BF_HUMAN 91.16 294 26 0 \n", + "2 AK1BA_HUMAN sp|O08782|ALD2_CRIGR 83.23 316 53 0 \n", + "3 AK1BA_HUMAN sp|P45377|ALD2_MOUSE 82.28 316 56 0 \n", + "4 AK1BA_HUMAN sp|P21300|ALD1_MOUSE 79.75 316 64 0 \n", + "5 AK1BA_HUMAN sp|Q5RJP0|ALD1_RAT 78.16 316 69 0 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "0 1 316 1 316 0.000000e+00 654.0 \n", + "1 23 316 51 344 0.000000e+00 559.0 \n", + "2 1 316 1 316 0.000000e+00 537.0 \n", + "3 1 316 1 316 0.000000e+00 527.0 \n", + "4 1 316 1 316 0.000000e+00 515.0 \n", + "5 1 316 1 316 2.000000e-177 501.0 " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# OR \n", + "blast_res.query(\"pident > 75\")" + ] + }, + { + "cell_type": "markdown", + "id": "nonprofit-fitting", + "metadata": {}, + "source": [ + "- Based on the bitscore alone, extract only the best hit(s) (i.e. the highest(s) bitscore(s))." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "chronic-wallace", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O60218|AK1BA_HUMAN</td>\n", + " <td>100.0</td>\n", + " <td>316</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.0</td>\n", + " <td>654.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "0 AK1BA_HUMAN sp|O60218|AK1BA_HUMAN 100.0 316 0 0 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "0 1 316 1 316 0.0 654.0 " + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Getting the highest bitscore value\n", + "max_bitscore = blast_res.bitscore.max()\n", + "# Extracting all the rows with a bitscore equal to the maximum bitscore\n", + "blast_res.loc[blast_res.bitscore == max_bitscore]" + ] + }, + { + "cell_type": "markdown", + "id": "saving-homeless", + "metadata": {}, + "source": [ + "- Filter in all hits which are corresponding to human hits in the database (*sseqid*)." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "western-language", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O60218|AK1BA_HUMAN</td>\n", + " <td>100.00</td>\n", + " <td>316</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>654.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|C9JRZ8|AK1BF_HUMAN</td>\n", + " <td>91.16</td>\n", + " <td>294</td>\n", + " <td>26</td>\n", + " <td>0</td>\n", + " <td>23</td>\n", + " <td>316</td>\n", + " <td>51</td>\n", + " <td>344</td>\n", + " <td>0.000000e+00</td>\n", + " <td>559.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P15121|ALDR_HUMAN</td>\n", + " <td>70.57</td>\n", + " <td>316</td>\n", + " <td>93</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1.000000e-160</td>\n", + " <td>458.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q96JD6|AKCL2_HUMAN</td>\n", + " <td>54.46</td>\n", + " <td>325</td>\n", + " <td>123</td>\n", + " <td>3</td>\n", + " <td>11</td>\n", + " <td>316</td>\n", + " <td>2</td>\n", + " <td>320</td>\n", + " <td>2.000000e-117</td>\n", + " <td>348.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>19</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P51857|AK1D1_HUMAN</td>\n", + " <td>50.79</td>\n", + " <td>317</td>\n", + " <td>151</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>10</td>\n", + " <td>326</td>\n", + " <td>8.000000e-111</td>\n", + " <td>331.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P14550|AK1A1_HUMAN</td>\n", + " <td>48.92</td>\n", + " <td>325</td>\n", + " <td>154</td>\n", + " <td>3</td>\n", + " <td>2</td>\n", + " <td>316</td>\n", + " <td>3</td>\n", + " <td>325</td>\n", + " <td>4.000000e-106</td>\n", + " <td>319.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>31</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P52895|AK1C2_HUMAN</td>\n", + " <td>48.73</td>\n", + " <td>316</td>\n", + " <td>158</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>8</td>\n", + " <td>323</td>\n", + " <td>9.000000e-103</td>\n", + " <td>311.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>35</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P17516|AK1C4_HUMAN</td>\n", + " <td>48.10</td>\n", + " <td>316</td>\n", + " <td>160</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>8</td>\n", + " <td>323</td>\n", + " <td>1.000000e-101</td>\n", + " <td>308.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q04828|AK1C1_HUMAN</td>\n", + " <td>48.10</td>\n", + " <td>316</td>\n", + " <td>160</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>8</td>\n", + " <td>323</td>\n", + " <td>1.000000e-101</td>\n", + " <td>308.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>45</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P42330|AK1C3_HUMAN</td>\n", + " <td>47.47</td>\n", + " <td>316</td>\n", + " <td>162</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>8</td>\n", + " <td>323</td>\n", + " <td>9.000000e-100</td>\n", + " <td>303.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>161</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q5T2L2|AKCL1_HUMAN</td>\n", + " <td>49.57</td>\n", + " <td>117</td>\n", + " <td>56</td>\n", + " <td>1</td>\n", + " <td>5</td>\n", + " <td>118</td>\n", + " <td>11</td>\n", + " <td>127</td>\n", + " <td>3.000000e-30</td>\n", + " <td>116.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "0 AK1BA_HUMAN sp|O60218|AK1BA_HUMAN 100.00 316 0 0 \n", + "1 AK1BA_HUMAN sp|C9JRZ8|AK1BF_HUMAN 91.16 294 26 0 \n", + "8 AK1BA_HUMAN sp|P15121|ALDR_HUMAN 70.57 316 93 0 \n", + "14 AK1BA_HUMAN sp|Q96JD6|AKCL2_HUMAN 54.46 325 123 3 \n", + "19 AK1BA_HUMAN sp|P51857|AK1D1_HUMAN 50.79 317 151 2 \n", + "25 AK1BA_HUMAN sp|P14550|AK1A1_HUMAN 48.92 325 154 3 \n", + "31 AK1BA_HUMAN sp|P52895|AK1C2_HUMAN 48.73 316 158 2 \n", + "35 AK1BA_HUMAN sp|P17516|AK1C4_HUMAN 48.10 316 160 2 \n", + "36 AK1BA_HUMAN sp|Q04828|AK1C1_HUMAN 48.10 316 160 2 \n", + "45 AK1BA_HUMAN sp|P42330|AK1C3_HUMAN 47.47 316 162 2 \n", + "161 AK1BA_HUMAN sp|Q5T2L2|AKCL1_HUMAN 49.57 117 56 1 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "0 1 316 1 316 0.000000e+00 654.0 \n", + "1 23 316 51 344 0.000000e+00 559.0 \n", + "8 1 316 1 316 1.000000e-160 458.0 \n", + "14 11 316 2 320 2.000000e-117 348.0 \n", + "19 5 316 10 326 8.000000e-111 331.0 \n", + "25 2 316 3 325 4.000000e-106 319.0 \n", + "31 5 316 8 323 9.000000e-103 311.0 \n", + "35 5 316 8 323 1.000000e-101 308.0 \n", + "36 5 316 8 323 1.000000e-101 308.0 \n", + "45 5 316 8 323 9.000000e-100 303.0 \n", + "161 5 118 11 127 3.000000e-30 116.0 " + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# This could be done with list comprehension creating a list of Booleans \n", + "blast_res.loc[[\"HUMAN\" in x for x in blast_res.sseqid]]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "taken-palmer", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O60218|AK1BA_HUMAN</td>\n", + " <td>100.00</td>\n", + " <td>316</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>654.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|C9JRZ8|AK1BF_HUMAN</td>\n", + " <td>91.16</td>\n", + " <td>294</td>\n", + " <td>26</td>\n", + " <td>0</td>\n", + " <td>23</td>\n", + " <td>316</td>\n", + " <td>51</td>\n", + " <td>344</td>\n", + " <td>0.000000e+00</td>\n", + " <td>559.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P15121|ALDR_HUMAN</td>\n", + " <td>70.57</td>\n", + " <td>316</td>\n", + " <td>93</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1.000000e-160</td>\n", + " <td>458.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q96JD6|AKCL2_HUMAN</td>\n", + " <td>54.46</td>\n", + " <td>325</td>\n", + " <td>123</td>\n", + " <td>3</td>\n", + " <td>11</td>\n", + " <td>316</td>\n", + " <td>2</td>\n", + " <td>320</td>\n", + " <td>2.000000e-117</td>\n", + " <td>348.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>19</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P51857|AK1D1_HUMAN</td>\n", + " <td>50.79</td>\n", + " <td>317</td>\n", + " <td>151</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>10</td>\n", + " <td>326</td>\n", + " <td>8.000000e-111</td>\n", + " <td>331.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P14550|AK1A1_HUMAN</td>\n", + " <td>48.92</td>\n", + " <td>325</td>\n", + " <td>154</td>\n", + " <td>3</td>\n", + " <td>2</td>\n", + " <td>316</td>\n", + " <td>3</td>\n", + " <td>325</td>\n", + " <td>4.000000e-106</td>\n", + " <td>319.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>31</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P52895|AK1C2_HUMAN</td>\n", + " <td>48.73</td>\n", + " <td>316</td>\n", + " <td>158</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>8</td>\n", + " <td>323</td>\n", + " <td>9.000000e-103</td>\n", + " <td>311.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>35</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P17516|AK1C4_HUMAN</td>\n", + " <td>48.10</td>\n", + " <td>316</td>\n", + " <td>160</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>8</td>\n", + " <td>323</td>\n", + " <td>1.000000e-101</td>\n", + " <td>308.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>36</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q04828|AK1C1_HUMAN</td>\n", + " <td>48.10</td>\n", + " <td>316</td>\n", + " <td>160</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>8</td>\n", + " <td>323</td>\n", + " <td>1.000000e-101</td>\n", + " <td>308.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>45</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P42330|AK1C3_HUMAN</td>\n", + " <td>47.47</td>\n", + " <td>316</td>\n", + " <td>162</td>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " <td>316</td>\n", + " <td>8</td>\n", + " <td>323</td>\n", + " <td>9.000000e-100</td>\n", + " <td>303.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>161</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q5T2L2|AKCL1_HUMAN</td>\n", + " <td>49.57</td>\n", + " <td>117</td>\n", + " <td>56</td>\n", + " <td>1</td>\n", + " <td>5</td>\n", + " <td>118</td>\n", + " <td>11</td>\n", + " <td>127</td>\n", + " <td>3.000000e-30</td>\n", + " <td>116.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "0 AK1BA_HUMAN sp|O60218|AK1BA_HUMAN 100.00 316 0 0 \n", + "1 AK1BA_HUMAN sp|C9JRZ8|AK1BF_HUMAN 91.16 294 26 0 \n", + "8 AK1BA_HUMAN sp|P15121|ALDR_HUMAN 70.57 316 93 0 \n", + "14 AK1BA_HUMAN sp|Q96JD6|AKCL2_HUMAN 54.46 325 123 3 \n", + "19 AK1BA_HUMAN sp|P51857|AK1D1_HUMAN 50.79 317 151 2 \n", + "25 AK1BA_HUMAN sp|P14550|AK1A1_HUMAN 48.92 325 154 3 \n", + "31 AK1BA_HUMAN sp|P52895|AK1C2_HUMAN 48.73 316 158 2 \n", + "35 AK1BA_HUMAN sp|P17516|AK1C4_HUMAN 48.10 316 160 2 \n", + "36 AK1BA_HUMAN sp|Q04828|AK1C1_HUMAN 48.10 316 160 2 \n", + "45 AK1BA_HUMAN sp|P42330|AK1C3_HUMAN 47.47 316 162 2 \n", + "161 AK1BA_HUMAN sp|Q5T2L2|AKCL1_HUMAN 49.57 117 56 1 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "0 1 316 1 316 0.000000e+00 654.0 \n", + "1 23 316 51 344 0.000000e+00 559.0 \n", + "8 1 316 1 316 1.000000e-160 458.0 \n", + "14 11 316 2 320 2.000000e-117 348.0 \n", + "19 5 316 10 326 8.000000e-111 331.0 \n", + "25 2 316 3 325 4.000000e-106 319.0 \n", + "31 5 316 8 323 9.000000e-103 311.0 \n", + "35 5 316 8 323 1.000000e-101 308.0 \n", + "36 5 316 8 323 1.000000e-101 308.0 \n", + "45 5 316 8 323 9.000000e-100 303.0 \n", + "161 5 118 11 127 3.000000e-30 116.0 " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# But pandas as a specific syntax to make operation on strings in a Serie: the method str and its method contains\n", + "blast_res.loc[blast_res.sseqid.str.contains(\"HUMAN\")]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "tracked-reform", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>qseqid</th>\n", + " <th>sseqid</th>\n", + " <th>pident</th>\n", + " <th>length</th>\n", + " <th>mismatch</th>\n", + " <th>gapopen</th>\n", + " <th>qstart</th>\n", + " <th>qend</th>\n", + " <th>sstart</th>\n", + " <th>send</th>\n", + " <th>evalue</th>\n", + " <th>bitscore</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|O08782|ALD2_CRIGR</td>\n", + " <td>83.23</td>\n", + " <td>316</td>\n", + " <td>53</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>537.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P45377|ALD2_MOUSE</td>\n", + " <td>82.28</td>\n", + " <td>316</td>\n", + " <td>56</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>527.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|P21300|ALD1_MOUSE</td>\n", + " <td>79.75</td>\n", + " <td>316</td>\n", + " <td>64</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>0.000000e+00</td>\n", + " <td>515.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>AK1BA_HUMAN</td>\n", + " <td>sp|Q5RJP0|ALD1_RAT</td>\n", + " <td>78.16</td>\n", + " <td>316</td>\n", + " <td>69</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>1</td>\n", + " <td>316</td>\n", + " <td>2.000000e-177</td>\n", + " <td>501.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " qseqid sseqid pident length mismatch gapopen \\\n", + "2 AK1BA_HUMAN sp|O08782|ALD2_CRIGR 83.23 316 53 0 \n", + "3 AK1BA_HUMAN sp|P45377|ALD2_MOUSE 82.28 316 56 0 \n", + "4 AK1BA_HUMAN sp|P21300|ALD1_MOUSE 79.75 316 64 0 \n", + "5 AK1BA_HUMAN sp|Q5RJP0|ALD1_RAT 78.16 316 69 0 \n", + "\n", + " qstart qend sstart send evalue bitscore \n", + "2 1 316 1 316 0.000000e+00 537.0 \n", + "3 1 316 1 316 0.000000e+00 527.0 \n", + "4 1 316 1 316 0.000000e+00 515.0 \n", + "5 1 316 1 316 2.000000e-177 501.0 " + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "blast_res.query(\"~sseqid.str.contains('HUMAN') & pident > 75\")" + ] + }, + { + "cell_type": "markdown", + "id": "reliable-dream", + "metadata": {}, + "source": [ + "- Plot a histogram of the bitscores. " + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "suspected-substance", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:>" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "blast_res[\"bitscore\"].hist()" + ] + }, + { + "cell_type": "markdown", + "id": "attempted-development", + "metadata": {}, + "source": [ + "- Plot a barplot of the number of hits per species (species are considered the last code after the \"_\" in the sseqid column)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "swiss-provider", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>0</th>\n", + " <th>1</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>sp|O60218|AK1BA</td>\n", + " <td>HUMAN</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>sp|C9JRZ8|AK1BF</td>\n", + " <td>HUMAN</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>sp|O08782|ALD2</td>\n", + " <td>CRIGR</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>sp|P45377|ALD2</td>\n", + " <td>MOUSE</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>sp|P21300|ALD1</td>\n", + " <td>MOUSE</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>171</th>\n", + " <td>sp|P80874|GS69</td>\n", + " <td>BACSU</td>\n", + " </tr>\n", + " <tr>\n", + " <th>172</th>\n", + " <td>sp|Q56Y42|PLR1</td>\n", + " <td>ARATH</td>\n", + " </tr>\n", + " <tr>\n", + " <th>173</th>\n", + " <td>sp|P25906|YDBC</td>\n", + " <td>ECOLI</td>\n", + " </tr>\n", + " <tr>\n", + " <th>174</th>\n", + " <td>sp|C6TBN2|AKR1</td>\n", + " <td>SOYBN</td>\n", + " </tr>\n", + " <tr>\n", + " <th>175</th>\n", + " <td>sp|P49261|CROB</td>\n", + " <td>LEPLU</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>176 rows × 2 columns</p>\n", + "</div>" + ], + "text/plain": [ + " 0 1\n", + "0 sp|O60218|AK1BA HUMAN\n", + "1 sp|C9JRZ8|AK1BF HUMAN\n", + "2 sp|O08782|ALD2 CRIGR\n", + "3 sp|P45377|ALD2 MOUSE\n", + "4 sp|P21300|ALD1 MOUSE\n", + ".. ... ...\n", + "171 sp|P80874|GS69 BACSU\n", + "172 sp|Q56Y42|PLR1 ARATH\n", + "173 sp|P25906|YDBC ECOLI\n", + "174 sp|C6TBN2|AKR1 SOYBN\n", + "175 sp|P49261|CROB LEPLU\n", + "\n", + "[176 rows x 2 columns]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# First extract the species information from the sseqid column\n", + "hits_by_sp = blast_res.sseqid.str.split(\"_\", expand=True)\n", + "hits_by_sp" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "russian-mystery", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:>" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Then count their occurences and do the barplot\n", + "hits_by_sp.loc[:, 1].value_counts().plot(kind=\"bar\")" + ] + }, + { + "cell_type": "markdown", + "id": "reliable-shark", + "metadata": {}, + "source": [ + "# Extra exercise" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fabulous-endorsement", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "boxed-basin", + "metadata": {}, + "source": [ + "read the 'data/city_temperature.csv'\n", + "\n", + "force the City datatype to string by passing\n", + "```\n", + "dtype={'City': str}\n", + "```\n", + "As argument to the function to read the file.<br />\n", + "Don't worry to the warning, it is due to State wich contains Nan for non US contry, but we do not use these data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "positive-gateway", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/bneron/Projects/MNE/lib/python3.8/site-packages/IPython/core/interactiveshell.py:3165: DtypeWarning: Columns (2) have mixed types.Specify dtype option on import or set low_memory=False.\n", + " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n" + ] + } + ], + "source": [ + "world = pd.read_csv('data/city_temperature.csv' , sep=',', dtype={'City': str})" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "noble-economics", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Region', 'Country', 'State', 'City', 'Month', 'Day', 'Year',\n", + " 'AvgTemperature'],\n", + " dtype='object')" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "world.columns" + ] + }, + { + "cell_type": "markdown", + "id": "international-glenn", + "metadata": {}, + "source": [ + "We will work only on Europe Region. so creat data named europe with only these data" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "exciting-founder", + "metadata": {}, + "outputs": [], + "source": [ + "europe = world[world['Region'] == 'Europe']" + ] + }, + { + "cell_type": "markdown", + "id": "dressed-carbon", + "metadata": {}, + "source": [ + "wich country are in europe?" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "crude-pillow", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Albania', 'Austria', 'Belarus', 'Belgium', 'Bulgaria', 'Croatia',\n", + " 'Cyprus', 'Czech Republic', 'Denmark', 'Finland', 'France',\n", + " 'Germany', 'Georgia', 'Greece', 'Hungary', 'Iceland', 'Ireland',\n", + " 'Italy', 'Latvia', 'Macedonia', 'The Netherlands', 'Norway',\n", + " 'Poland', 'Portugal', 'Romania', 'Russia', 'Serbia-Montenegro',\n", + " 'Slovakia', 'Spain', 'Sweden', 'Switzerland', 'Ukraine',\n", + " 'United Kingdom', 'Yugoslavia'], dtype=object)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "europe.Country.unique()" + ] + }, + { + "cell_type": "markdown", + "id": "dated-guest", + "metadata": {}, + "source": [ + "remove columns 'Region' and 'State' from the data" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "valued-minutes", + "metadata": {}, + "outputs": [], + "source": [ + "europe = europe[['Country', 'City', 'Month', 'Day', 'Year', 'AvgTemperature']]" + ] + }, + { + "cell_type": "markdown", + "id": "million-blank", + "metadata": {}, + "source": [ + "from europe data create a new dataset containing countries: 'France', 'Spain', 'Italy'" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "textile-proof", + "metadata": {}, + "outputs": [], + "source": [ + "fr_sp_it = europe[europe['Country'].isin(['France', 'Spain', 'Italy'])]" + ] + }, + { + "cell_type": "markdown", + "id": "statutory-hierarchy", + "metadata": {}, + "source": [ + "group the data on 'City' and 'Year' compute the mean of each group and keep only the 'AvgTemperature' column." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "induced-finish", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "City Year\n", + "Barcelona 1995 62.019178\n", + " 1996 61.125956\n", + " 1997 62.612329\n", + " 1998 60.273973\n", + " 1999 61.204658\n", + " ... \n", + "Rome 2016 61.185246\n", + " 2017 61.377808\n", + " 2018 60.821370\n", + " 2019 59.215068\n", + " 2020 52.676119\n", + "Name: AvgTemperature, Length: 182, dtype: float64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fr_sp_it_mean = fr_sp_it.groupby(['City', 'Year']).mean()['AvgTemperature']\n", + "fr_sp_it_mean" + ] + }, + { + "cell_type": "markdown", + "id": "bibliographic-bidding", + "metadata": {}, + "source": [ + "do the same but compute the standard deviation" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "valued-smooth", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "City Year\n", + "Barcelona 1995 9.569756\n", + " 1996 9.420765\n", + " 1997 9.827235\n", + " 1998 19.750126\n", + " 1999 13.904526\n", + " ... \n", + "Rome 2016 15.914193\n", + " 2017 11.916595\n", + " 2018 20.327932\n", + " 2019 23.514064\n", + " 2020 6.224294\n", + "Name: AvgTemperature, Length: 182, dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fr_sp_it_std = fr_sp_it.groupby(['City', 'Year']).std()['AvgTemperature']\n", + "fr_sp_it_std" + ] + }, + { + "cell_type": "markdown", + "id": "outdoor-content", + "metadata": {}, + "source": [ + "* reset the index fo the mean data and std data\n", + "* rename the column AvgTemperature to Tmp on the mean data\n", + "* rename the column AvgTemperature to std on the std data" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "dangerous-republican", + "metadata": {}, + "outputs": [], + "source": [ + "data_mean = fr_sp_it_mean.reset_index()\n", + "data_mean.columns = ['City', 'Year', 'Tmp']\n", + "data_std = fr_sp_it_std.reset_index()\n", + "data_std.columns = ['City', 'Year', 'std']" + ] + }, + { + "cell_type": "markdown", + "id": "equivalent-grove", + "metadata": {}, + "source": [ + "merge the two table data_mean and data_std" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "appreciated-europe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>City</th>\n", + " <th>Year</th>\n", + " <th>Tmp</th>\n", + " <th>std</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>Barcelona</td>\n", + " <td>1995</td>\n", + " <td>62.019178</td>\n", + " <td>9.569756</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Barcelona</td>\n", + " <td>1996</td>\n", + " <td>61.125956</td>\n", + " <td>9.420765</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>Barcelona</td>\n", + " <td>1997</td>\n", + " <td>62.612329</td>\n", + " <td>9.827235</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>Barcelona</td>\n", + " <td>1998</td>\n", + " <td>60.273973</td>\n", + " <td>19.750126</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>Barcelona</td>\n", + " <td>1999</td>\n", + " <td>61.204658</td>\n", + " <td>13.904526</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>177</th>\n", + " <td>Rome</td>\n", + " <td>2016</td>\n", + " <td>61.185246</td>\n", + " <td>15.914193</td>\n", + " </tr>\n", + " <tr>\n", + " <th>178</th>\n", + " <td>Rome</td>\n", + " <td>2017</td>\n", + " <td>61.377808</td>\n", + " <td>11.916595</td>\n", + " </tr>\n", + " <tr>\n", + " <th>179</th>\n", + " <td>Rome</td>\n", + " <td>2018</td>\n", + " <td>60.821370</td>\n", + " <td>20.327932</td>\n", + " </tr>\n", + " <tr>\n", + " <th>180</th>\n", + " <td>Rome</td>\n", + " <td>2019</td>\n", + " <td>59.215068</td>\n", + " <td>23.514064</td>\n", + " </tr>\n", + " <tr>\n", + " <th>181</th>\n", + " <td>Rome</td>\n", + " <td>2020</td>\n", + " <td>52.676119</td>\n", + " <td>6.224294</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>182 rows × 4 columns</p>\n", + "</div>" + ], + "text/plain": [ + " City Year Tmp std\n", + "0 Barcelona 1995 62.019178 9.569756\n", + "1 Barcelona 1996 61.125956 9.420765\n", + "2 Barcelona 1997 62.612329 9.827235\n", + "3 Barcelona 1998 60.273973 19.750126\n", + "4 Barcelona 1999 61.204658 13.904526\n", + ".. ... ... ... ...\n", + "177 Rome 2016 61.185246 15.914193\n", + "178 Rome 2017 61.377808 11.916595\n", + "179 Rome 2018 60.821370 20.327932\n", + "180 Rome 2019 59.215068 23.514064\n", + "181 Rome 2020 52.676119 6.224294\n", + "\n", + "[182 rows x 4 columns]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "clean_data = pd.merge(data_mean, data_std, on=['City', 'Year'])\n", + "clean_data" + ] + }, + { + "cell_type": "markdown", + "id": "asian-evanescence", + "metadata": {}, + "source": [ + "save the data in a file" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "analyzed-beaver", + "metadata": {}, + "outputs": [], + "source": [ + "clean_data.to_csv('data/fr_sp_it_temp.tsv', sep='\\t')" + ] + }, + { + "cell_type": "markdown", + "id": "elect-percentage", + "metadata": {}, + "source": [ + "# Teasing\n", + "\n", + "a quick data plotting. we will improve it in matplotlib course" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "beneficial-coordinator", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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JCcnT7jBQggRDJRS2Ly8mMelAK61PmZ8rQOeB5YbDbwNuBK4SXt78zchhAgyNkukf3PgSimLUirOeRu4FNijlLocuBdYo7Xu9FoLhRAiSNlizZz0YgrFlWmEKcDzSinn4zdqrV9VSh0BIoHNxn0faK0/77WWCiFEkEmKjaTsZIfXzj9mANdaHwXyhzk+2ystEkKIEGGzmANzGqEQQojR2WIj6eoboLO3f+wHu0ECuBBCeIm3F/O4tJTem/r6+qiurqa7u9vfTQkYUVFRZGRkEBER4e+mCCEm4KPNjXuYnhjj8fP7PYBXV1cTFxdHdnY2xmDopKa1pqGhgerqambMmOHv5gghJsBmrMb0Vg/c7ymU7u5ubDabBG+DUgqbzSafSIQIAYMpFC8VtPJ7AAckeJ9G/j+ECA22wXooIdoDF0KIUBVtDsNiDgvdFEogUEpx8803D37f399PcnIyV1555bjOc+GFF1JYWDjsfXfeeSf79u074/iGDRu4++67x9dgIUTQsMVGei2F4vdBzEBgsVjYs2cPXV1dREdHs3nzZtLT0z12/oGBAR555BGPnU8IETwcBa1CdBrhUD98cS/7alo9es7cNCsPXLVgzMetXr2al19+mWuvvZannnqKG264gXfffReA7du385WvfIXu7m6io6N57LHHmDdvHl1dXdx+++2UlJSQk5NDV1fX4PliY2P53Oc+xxtvvMHDDz/Md7/7XR566CEKCgp47LHH+NnPfkZCQgL5+flERkZ69JqFEIHDZomkusk75aIkhWL4zGc+w1//+le6u7spLS1lxYoVg/fl5OTw7rvvUlxczI9+9CO+/e1vA/C73/2OmJgY9u/fzw9/+EOKiooGn9PR0cGKFSsoKSlh1apVg8dra2t54IEHeO+999iyZcuwaRUhROhIijV7rSZ4QPXAXekpe0teXh7l5eU89dRTrF69+pT7WlpaWLt2LYcPH0YpRV9fHwDvvPMOX/7ylwefn5eXN/icsLAwPvWpT53xOtu2bePCCy/EWRv9+uuv59ChQ966LCGEn9lizTR29GK3a0wmz84wkx74EGvWrOGee+7hhhtuOOX49773PS666CL27NnDiy++6NIc7aioKMLCwrzVVCFEkLBZIhmwa1q6+jx+bgngQ6xbt44HHniAs84665TjLS0tg4OaGzZsGDx+/vnns3HjRgD2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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for city, df in clean_data.groupby('City'):\n", + " df.plot('Year', 'Tmp', label=city)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "neither-popularity", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "dev", + "language": "python", + "name": "dev" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/pandas_cours.ipynb b/notebooks/pandas_cours.ipynb new file mode 100644 index 0000000..cca2333 --- /dev/null +++ b/notebooks/pandas_cours.ipynb @@ -0,0 +1,7757 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "lesser-criticism", + "metadata": {}, + "source": [ + "# <center>**Cours**</center>\n", + "\n", + "<div style=\"text-align:center\">\n", + " <img src=\"images/pandas_logo.svg\" width=\"600px\">\n", + " <div>\n", + " Bertrand Néron, François Laurent, Etienne Kornobis\n", + " <br />\n", + " <a src=\" https://research.pasteur.fr/en/team/bioinformatics-and-biostatistics-hub/\">Bioinformatics and Biostatistiqucs HUB</a>\n", + " <br />\n", + " © Institut Pasteur, 2021\n", + " </div> \n", + "</div>" + ] + }, + { + "cell_type": "markdown", + "id": "attempted-certificate", + "metadata": {}, + "source": [ + "# Intro\n", + "\n", + "**Pandas** is a library to manipulate data structures and perform data analysis and visualization. Pandas is built on top of **Numpy**, a widely used library for mathematical operation particularly on arrays and matrices. Pandas is helping with data analysis stack, including data cleaning/formatting followed by analysis and visualization.\n", + "\n", + "Pandas is particularly well suited to deal with tabular data which can be imported from different formats such are **csv**, **tsv** or even **xlsx**.\n", + "\n", + "The two primary data structures in pandas are **Series** and **DataFrames**.\n", + "\n", + "Pandas is designed to manipulate tabulated data, Numpy is designed to do computation on arrays. So here are the differences: \n", + "\n", + "**Numpy** \n", + "* handles one structure: the ndarray.\n", + "* an *array* can have 1, 2 or more dimensions.\n", + "* A *ndarray* handles homogeneous data, only one datatype in an array.\n", + "* So numpy is mostly used to do math on arrays.\n", + "\n", + "**Pandas** \n", + "* *Series* have 1 dimension, *DataFrame* have 2 dimensions.\n", + "* *Pandas* does **not** handle structures with more than 2 dimensions.\n", + "* But a *DataFrame* can contain heterogenous data, each column can have a different datatype.\n", + "* *Pandas* is more powerful to query data or manipulate them.\n", + "\n", + "So *Numpy* is mostly used to do math, *Pandas* to explore data structured in tables. " + ] + }, + { + "cell_type": "markdown", + "id": "angry-banking", + "metadata": {}, + "source": [ + "# Installation\n", + "\n", + "For *conda* users\n", + "\n", + "```shell\n", + "conda install pandas\n", + "```\n", + "\n", + "for *pip* users\n", + "```shell\n", + "pip install pandas\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "british-currency", + "metadata": {}, + "source": [ + "# Import Convention" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "proud-coffee", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "english-subdivision", + "metadata": {}, + "source": [ + "# Series\n", + "\n", + "A Series is a one-dimensional array with axis labels. Labels do not need to be\n", + "unique but must be hashable.\n", + "\n", + "To create a series, use the pandas `Series` object and specify a list or tuple\n", + "of value to feed your serie with as the first argument:" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "outer-brass", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_nolabel = pd.Series([1,2,3])\n", + "type(serie_nolabel)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "executive-right", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1\n", + "1 2\n", + "2 3\n", + "dtype: int64" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_nolabel" + ] + }, + { + "cell_type": "markdown", + "id": "personal-cleaners", + "metadata": {}, + "source": [ + "You can specify the labels of your Series by providing a list of labels as\n", + "for the `index` argument:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "spatial-disposal", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "A 1\n", + "B 2\n", + "C 3\n", + "dtype: int64" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label = pd.Series([1,2,3], index=['A', 'B', 'C'])\n", + "serie_label" + ] + }, + { + "cell_type": "markdown", + "id": "reduced-retention", + "metadata": {}, + "source": [ + "And we can access these indices with the `index` property:" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "classical-sapphire", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RangeIndex(start=0, stop=3, step=1)" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_nolabel.index" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "id": "known-absorption", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['A', 'B', 'C'], dtype='object')" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label.index" + ] + }, + { + "cell_type": "markdown", + "id": "amateur-secret", + "metadata": {}, + "source": [ + "## Indexing/Slicing\n", + "\n", + "In order to subset a serie based on an **integer index**, you can use the `iloc` attribute:" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "exact-accuracy", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_nolabel.iloc[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "hairy-inspiration", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label.iloc[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "id": "social-extra", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "A 1\n", + "B 2\n", + "dtype: int64" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label.iloc[0:2]" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "diagnostic-flood", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "C 3\n", + "B 2\n", + "A 1\n", + "dtype: int64" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label.iloc[::-1]" + ] + }, + { + "cell_type": "markdown", + "id": "mysterious-airline", + "metadata": {}, + "source": [ + "Most commonly, You can use **labels** as well for subsetting, using the `loc` attribute:" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "private-profession", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label.loc[\"B\"]" + ] + }, + { + "cell_type": "markdown", + "id": "forbidden-conjunction", + "metadata": {}, + "source": [ + "**WARNING**: With `loc`, the value is interpreted as a label of the\n", + " index, and **never** as an integer position along the index, there is `iloc` for this.\n", + " \n", + "When index labels are strings, you can as well access the corresponding value using this simple syntax `.LABEL_VALUE`" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "hawaiian-fever", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label.A" + ] + }, + { + "cell_type": "markdown", + "id": "prescribed-literature", + "metadata": {}, + "source": [ + "Serie objects benefit from many attributes and methods (see [pandas documentation](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.html)), lot's of them being common with pandas DataFrames. We will see some of the one listed below in action in the DataFrame section of this course.\n", + "\n", + "Here are some attributes of interest:\n", + "\n", + "|Attribute|Action|\n", + "|-|-|\n", + "|index|Returns the index (0 axis labels) of the Serie|\n", + "|name|Return the name of the Serie|\n", + "|shape|Return the number of element in the Serie|\n", + "\n", + "And some useful methods:\n", + "\n", + "|Method|Action|\n", + "|-|-|\n", + "|aggregate|Aggregate using one or more operations over the specified axis|\n", + "|all|Return whether all elements are True potentially over an axis|\n", + "|any|Return whether any element is True potentially over an axis|\n", + "|apply|Invoke function on values of Series|\n", + "|astype|Cast a pandas object to a specified dtype|\n", + "|copy|Make a copy of this object’s indices and data|\n", + "|count|Return number of non-NA/null observations in the Series|\n", + "|describe|Generate descriptive statistics that summarize the central tendency dispersion and shape of a dataset’s distribution, excluding NaN values|\n", + "|drop|Return Series with specified index labels removed|\n", + "|groupby|Group DataFrame or Series using a mapper or by a Series of columns|\n", + "|head / tail|Return the first / last n rows|\n", + "|max, min, median, mean, sum|Perform the corresponding operation on the Serie|\n", + "|plot|Plot graphs from Serie/DataFrame|\n", + "|reset_index|Generate a new DataFrame or Series with the index reset|\n", + "|sort_values|Sort by values a the specified column|\n", + "|str|String methods for series| |\n", + "|to_csv, to_excel|Export to csv or excel file|\n", + "|unique|Return unique values of Series object|\n", + "|value_counts|Return a Series containing counts of unique values|\n" + ] + }, + { + "cell_type": "markdown", + "id": "precious-green", + "metadata": {}, + "source": [ + "## Operations on Series\n", + "\n", + "Comparison operators (ie `==`, `<`, `<=`, `>=`, `>`) can be used on Series as well as DataFrames for subsetting.\n", + "\n", + "For example, we want to see which values are superior to one in our previous Serie:" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "optimum-drama", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "A False\n", + "B True\n", + "C True\n", + "dtype: bool" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label > 1" + ] + }, + { + "cell_type": "markdown", + "id": "twenty-planet", + "metadata": {}, + "source": [ + "Since `loc` can take list or Series of booleans as input, we can then apply this Boolean Serie as a mask for our Serie:" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "universal-responsibility", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "B 2\n", + "C 3\n", + "dtype: int64" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label.loc[serie_label>1]" + ] + }, + { + "cell_type": "markdown", + "id": "pressed-clark", + "metadata": {}, + "source": [ + "## Operations between Series" + ] + }, + { + "cell_type": "markdown", + "id": "thick-meter", + "metadata": {}, + "source": [ + "Operations (ie `+`, `-`, `*`, `/`) between Series will trigger an alignment of the values\n", + "based on the index values:" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "departmental-creature", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "A 2\n", + "B 4\n", + "C 6\n", + "dtype: int64" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label + serie_label" + ] + }, + { + "cell_type": "markdown", + "id": "regulation-listening", + "metadata": {}, + "source": [ + "We can see here that the label are aligned prior operation" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "id": "electric-cherry", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "A 2\n", + "B 4\n", + "C 6\n", + "dtype: int64" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serie_label + serie_label.iloc[::-1]" + ] + }, + { + "cell_type": "markdown", + "id": "positive-batman", + "metadata": {}, + "source": [ + "# DataFrames\n", + "\n", + "A pandas DataFrame is a two-dimensional data structure with axis labels. Labels do not need to be unique but must be hashable. DataFrame in pandas are like dictionary containers of Series objects.\n", + "\n", + "## DataFrame Terminology\n", + "\n", + "<img src=\"images/pandas_dataframe.png\" width=\"300px\" />\n", + "\n", + "## Create a DataFrame\n", + "\n", + "[Dataframes](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) in pandas are rarely created from scratch. One common approach is to create a pandas DataFrame from a dictionary or a file, but you can as well create them from a list of lists or numpy ndarrays. \n", + "\n", + "### From a list of lists:" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "id": "following-houston", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>B</th>\n", + " <th>C</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>a</th>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b</th>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " <td>6</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A B C\n", + "a 1 2 3\n", + "b 4 5 6" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame([[1,2,3],\n", + " [4,5,6]],\n", + " columns=['A', 'B', 'C'],\n", + " index= ['a', 'b'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "personalized-kennedy", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['a', 'b'], dtype='object')" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "id": "conceptual-boards", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['A', 'B', 'C'], dtype='object')" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "markdown", + "id": "agricultural-spotlight", + "metadata": {}, + "source": [ + "### From a numpy ndarray" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "minor-korean", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>0</th>\n", + " <th>1</th>\n", + " <th>2</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " 0 1 2\n", + "0 0 1 2\n", + "1 3 4 5\n", + "2 6 7 8\n", + "3 9 10 11" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame(np.arange(12).reshape(4,3))\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "still-commissioner", + "metadata": {}, + "source": [ + "- From a dictionnary" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "id": "intellectual-wilson", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>B</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>4</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>6</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A B\n", + "0 1 4\n", + "1 2 5\n", + "2 3 6" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({'A': [1,2,3],\n", + " 'B': np.arange(4,7),\n", + " })\n", + " \n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "international-checkout", + "metadata": {}, + "source": [ + "- From a file, many options are available, to name only a few:\n", + " - [pd.read_csv](https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html)\n", + " - [pd.read_excel](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html)\n", + " - [pd.read_html](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_html.html)\n", + " \n", + "NB: For excel and html imports, you might need to install extra libraries." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "bronze-prayer", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "titanic = pd.read_csv(\"data/titanic.csv\")" + ] + }, + { + "cell_type": "markdown", + "id": "laden-composer", + "metadata": {}, + "source": [ + "We want to open *data/bar_data.tsv* file but the 2 first lines are comments and the separator between fields is *tab*\n", + "\n", + "See below the 5 first lines (using the `!` jupyter magic for bash subprocesses)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "grave-party", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# generated with fooo software version 12bis\n", + "# 2021/02/31\n", + "cond1\tcond2\tcond3\tcontrol\n", + "14.644417316782045\t2.9453091400880465\t24.81171864537413\t5.114340165446571\n", + "12.071043262601615\t4.406424332565544\t21.574601309211538\t2.5071180945299716\n" + ] + } + ], + "source": [ + "! head -5 data/bar_data.tsv" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "historical-ivory", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>cond1</th>\n", + " <th>cond2</th>\n", + " <th>cond3</th>\n", + " <th>control</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>14.644417</td>\n", + " <td>2.945309</td>\n", + " <td>24.811719</td>\n", + " <td>5.114340</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12.071043</td>\n", + " <td>4.406424</td>\n", + " <td>21.574601</td>\n", + " <td>2.507118</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>8.227469</td>\n", + " <td>3.185252</td>\n", + " <td>20.651623</td>\n", + " <td>4.449593</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>8.980799</td>\n", + " <td>9.233560</td>\n", + " <td>24.859737</td>\n", + " <td>4.127919</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>9.080359</td>\n", + " <td>5.629192</td>\n", + " <td>18.443504</td>\n", + " <td>4.268572</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " cond1 cond2 cond3 control\n", + "0 14.644417 2.945309 24.811719 5.114340\n", + "1 12.071043 4.406424 21.574601 2.507118\n", + "2 8.227469 3.185252 20.651623 4.449593\n", + "3 8.980799 9.233560 24.859737 4.127919\n", + "4 9.080359 5.629192 18.443504 4.268572" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bar = pd.read_csv(\"data/bar_data.tsv\", sep=\"\\t\", comment=\"#\")\n", + "bar.head()" + ] + }, + { + "cell_type": "markdown", + "id": "bacterial-irrigation", + "metadata": {}, + "source": [ + "If the data in the file are already indexed like in this one:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "supported-health", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\tMW\tAlogP\tPSA\tHBA\n", + "0\t0.0\t1.0\t72.73111270481336\t1.1416684150966834\n", + "1\t3.63\t544.59\t391.4275648686457\t0.9848635571682688\n", + "2\t2.11\t383.4\t437.4589821943501\t15.040385372412596\n", + "3\t1.24\t162.23\t480.1112629835199\t11.401906578750385\n" + ] + } + ], + "source": [ + "! head -5 data/data_for_plt.csv" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "discrete-anaheim", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Unnamed: 0</th>\n", + " <th>MW</th>\n", + " <th>AlogP</th>\n", + " <th>PSA</th>\n", + " <th>HBA</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>0.00</td>\n", + " <td>1.00</td>\n", + " <td>72.731113</td>\n", + " <td>1.141668</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>1</td>\n", + " <td>3.63</td>\n", + " <td>544.59</td>\n", + " <td>391.427565</td>\n", + " <td>0.984864</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>2</td>\n", + " <td>2.11</td>\n", + " <td>383.40</td>\n", + " <td>437.458982</td>\n", + " <td>15.040385</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Unnamed: 0 MW AlogP PSA HBA\n", + "0 0 0.00 1.00 72.731113 1.141668\n", + "1 1 3.63 544.59 391.427565 0.984864\n", + "2 2 2.11 383.40 437.458982 15.040385" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv(\"data/data_for_plt.csv\", sep=\"\\t\")\n", + "data.head(3)" + ] + }, + { + "cell_type": "markdown", + "id": "latest-public", + "metadata": {}, + "source": [ + "To avoiding to have an extra column, you can specify which columns to use as index.\n", + "This column **must** have distincts values." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "casual-buying", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>MW</th>\n", + " <th>AlogP</th>\n", + " <th>PSA</th>\n", + " <th>HBA</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0.00</td>\n", + " <td>1.00</td>\n", + " <td>72.731113</td>\n", + " <td>1.141668</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3.63</td>\n", + " <td>544.59</td>\n", + " <td>391.427565</td>\n", + " <td>0.984864</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>2.11</td>\n", + " <td>383.40</td>\n", + " <td>437.458982</td>\n", + " <td>15.040385</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>1.24</td>\n", + " <td>162.23</td>\n", + " <td>480.111263</td>\n", + " <td>11.401907</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>-1.37</td>\n", + " <td>361.37</td>\n", + " <td>448.864769</td>\n", + " <td>5.732690</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " MW AlogP PSA HBA\n", + "0 0.00 1.00 72.731113 1.141668\n", + "1 3.63 544.59 391.427565 0.984864\n", + "2 2.11 383.40 437.458982 15.040385\n", + "3 1.24 162.23 480.111263 11.401907\n", + "4 -1.37 361.37 448.864769 5.732690" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv(\"data/data_for_plt.csv\", sep=\"\\t\", index_col=0)\n", + "data.head()" + ] + }, + { + "cell_type": "markdown", + "id": "commercial-system", + "metadata": {}, + "source": [ + "The first line is used as header.<br />\n", + "So you can specify the number of the row which represents the header,\n", + "or you can set this parameter to None if the table has no header." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "golden-myrtle", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>1</th>\n", + " <th>2</th>\n", + " <th>3</th>\n", + " <th>4</th>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0.00</td>\n", + " <td>1.00</td>\n", + " <td>72.731113</td>\n", + " <td>1.141668</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3.63</td>\n", + " <td>544.59</td>\n", + " <td>391.427565</td>\n", + " <td>0.984864</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>2.11</td>\n", + " <td>383.40</td>\n", + " <td>437.458982</td>\n", + " <td>15.040385</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>1.24</td>\n", + " <td>162.23</td>\n", + " <td>480.111263</td>\n", + " <td>11.401907</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>-1.37</td>\n", + " <td>361.37</td>\n", + " <td>448.864769</td>\n", + " <td>5.732690</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " 1 2 3 4\n", + "0 \n", + "0 0.00 1.00 72.731113 1.141668\n", + "1 3.63 544.59 391.427565 0.984864\n", + "2 2.11 383.40 437.458982 15.040385\n", + "3 1.24 162.23 480.111263 11.401907\n", + "4 -1.37 361.37 448.864769 5.732690" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv(\"data/no_header.tsv\", sep=\"\\t\", index_col=0, header=None)\n", + "data.head()" + ] + }, + { + "cell_type": "markdown", + "id": "thorough-worth", + "metadata": {}, + "source": [ + "## Characterizing a DataFrame\n", + "\n", + "Several DataFrame attributes and methods are provided to characterize your dataset. Here is a subset of them most commonly used." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "still-pepper", + "metadata": {}, + "outputs": [], + "source": [ + "titanic = pd.read_csv(\"data/titanic.csv\")" + ] + }, + { + "cell_type": "markdown", + "id": "impossible-security", + "metadata": {}, + "source": [ + "`shape` to get the dimensions of the dataframe (ie number or rows, number of columns):" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "nutritional-andrews", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The titanic dataset is 891 length\n", + "The titanic dataset contains 891 rows x 12 columns\n" + ] + } + ], + "source": [ + "print(f\"The titanic dataset is {len(titanic)} length\")\n", + "rows, cols = titanic.shape\n", + "print(f\"The titanic dataset contains {rows} rows x {cols} columns\")" + ] + }, + { + "cell_type": "markdown", + "id": "empirical-prospect", + "metadata": {}, + "source": [ + "`head` to get the first lines of your dataframe:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "ancient-gravity", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Braund, Mr. Owen Harris</td>\n", + " <td>male</td>\n", + " <td>22.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>A/5 21171</td>\n", + " <td>7.2500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>PC 17599</td>\n", + " <td>71.2833</td>\n", + " <td>C85</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Heikkinen, Miss. Laina</td>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O2. 3101282</td>\n", + " <td>7.9250</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>4</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n", + " <td>female</td>\n", + " <td>35.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>113803</td>\n", + " <td>53.1000</td>\n", + " <td>C123</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Allen, Mr. William Henry</td>\n", + " <td>male</td>\n", + " <td>35.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>373450</td>\n", + " <td>8.0500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "powered-navigator", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Braund, Mr. Owen Harris</td>\n", + " <td>male</td>\n", + " <td>22.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>A/5 21171</td>\n", + " <td>7.2500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>PC 17599</td>\n", + " <td>71.2833</td>\n", + " <td>C85</td>\n", + " <td>C</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.head(n=2)" + ] + }, + { + "cell_type": "markdown", + "id": "vocal-pencil", + "metadata": {}, + "source": [ + "`tail` to get the last lines of your dataframe:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "blessed-family", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>889</th>\n", + " <td>890</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Behr, Mr. Karl Howell</td>\n", + " <td>male</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>111369</td>\n", + " <td>30.00</td>\n", + " <td>C148</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>890</th>\n", + " <td>891</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Dooley, Mr. Patrick</td>\n", + " <td>male</td>\n", + " <td>32.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>370376</td>\n", + " <td>7.75</td>\n", + " <td>NaN</td>\n", + " <td>Q</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass Name Sex Age SibSp \\\n", + "889 890 1 1 Behr, Mr. Karl Howell male 26.0 0 \n", + "890 891 0 3 Dooley, Mr. Patrick male 32.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "889 0 111369 30.00 C148 C \n", + "890 0 370376 7.75 NaN Q " + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.tail(2)" + ] + }, + { + "cell_type": "markdown", + "id": "molecular-messaging", + "metadata": {}, + "source": [ + "`describe` to have basic descriptive statistics. The columns on which pandas cannot do statistics are omitted (Name, Sex, ...)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "touched-lawsuit", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Fare</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>count</th>\n", + " <td>891.000000</td>\n", + " <td>891.000000</td>\n", + " <td>891.000000</td>\n", + " <td>714.000000</td>\n", + " <td>891.000000</td>\n", + " <td>891.000000</td>\n", + " <td>891.000000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>mean</th>\n", + " <td>446.000000</td>\n", + " <td>0.383838</td>\n", + " <td>2.308642</td>\n", + " <td>29.699118</td>\n", + " <td>0.523008</td>\n", + " <td>0.381594</td>\n", + " <td>32.204208</td>\n", + " </tr>\n", + " <tr>\n", + " <th>std</th>\n", + " <td>257.353842</td>\n", + " <td>0.486592</td>\n", + " <td>0.836071</td>\n", + " <td>14.526497</td>\n", + " <td>1.102743</td>\n", + " <td>0.806057</td>\n", + " <td>49.693429</td>\n", + " </tr>\n", + " <tr>\n", + " <th>min</th>\n", + " <td>1.000000</td>\n", + " <td>0.000000</td>\n", + " <td>1.000000</td>\n", + " <td>0.420000</td>\n", + " <td>0.000000</td>\n", + " <td>0.000000</td>\n", + " <td>0.000000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25%</th>\n", + " <td>223.500000</td>\n", + " <td>0.000000</td>\n", + " <td>2.000000</td>\n", + " <td>20.125000</td>\n", + " <td>0.000000</td>\n", + " <td>0.000000</td>\n", + " <td>7.910400</td>\n", + " </tr>\n", + " <tr>\n", + " <th>50%</th>\n", + " <td>446.000000</td>\n", + " <td>0.000000</td>\n", + " <td>3.000000</td>\n", + " <td>28.000000</td>\n", + " <td>0.000000</td>\n", + " <td>0.000000</td>\n", + " <td>14.454200</td>\n", + " </tr>\n", + " <tr>\n", + " <th>75%</th>\n", + " <td>668.500000</td>\n", + " <td>1.000000</td>\n", + " <td>3.000000</td>\n", + " <td>38.000000</td>\n", + " <td>1.000000</td>\n", + " <td>0.000000</td>\n", + " <td>31.000000</td>\n", + " </tr>\n", + " <tr>\n", + " <th>max</th>\n", + " <td>891.000000</td>\n", + " <td>1.000000</td>\n", + " <td>3.000000</td>\n", + " <td>80.000000</td>\n", + " <td>8.000000</td>\n", + " <td>6.000000</td>\n", + " <td>512.329200</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass Age SibSp \\\n", + "count 891.000000 891.000000 891.000000 714.000000 891.000000 \n", + "mean 446.000000 0.383838 2.308642 29.699118 0.523008 \n", + "std 257.353842 0.486592 0.836071 14.526497 1.102743 \n", + "min 1.000000 0.000000 1.000000 0.420000 0.000000 \n", + "25% 223.500000 0.000000 2.000000 20.125000 0.000000 \n", + "50% 446.000000 0.000000 3.000000 28.000000 0.000000 \n", + "75% 668.500000 1.000000 3.000000 38.000000 1.000000 \n", + "max 891.000000 1.000000 3.000000 80.000000 8.000000 \n", + "\n", + " Parch Fare \n", + "count 891.000000 891.000000 \n", + "mean 0.381594 32.204208 \n", + "std 0.806057 49.693429 \n", + "min 0.000000 0.000000 \n", + "25% 0.000000 7.910400 \n", + "50% 0.000000 14.454200 \n", + "75% 0.000000 31.000000 \n", + "max 6.000000 512.329200 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desc = titanic.describe()\n", + "desc" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "monthly-plasma", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "titanic have 12 cols\n", + "desc have 7 cols\n" + ] + } + ], + "source": [ + "print(f\"titanic have {len(titanic.columns)} cols\\ndesc have {len(desc.columns)} cols\")" + ] + }, + { + "cell_type": "markdown", + "id": "designing-tuning", + "metadata": {}, + "source": [ + "`median` to get the median by columns with numerical values:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "becoming-living", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "PassengerId 446.0000\n", + "Survived 0.0000\n", + "Pclass 3.0000\n", + "Age 28.0000\n", + "SibSp 0.0000\n", + "Parch 0.0000\n", + "Fare 14.4542\n", + "dtype: float64" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.median()" + ] + }, + { + "cell_type": "markdown", + "id": "ethical-fishing", + "metadata": {}, + "source": [ + "`mean` similarly for the mean:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "weekly-attack", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "PassengerId 446.000000\n", + "Survived 0.383838\n", + "Pclass 2.308642\n", + "Age 29.699118\n", + "SibSp 0.523008\n", + "Parch 0.381594\n", + "Fare 32.204208\n", + "dtype: float64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.mean()" + ] + }, + { + "cell_type": "markdown", + "id": "automatic-syntax", + "metadata": {}, + "source": [ + "`value_counts` is useful the count the number of occurences of a value. For example:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "accepting-gregory", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "male 577\n", + "female 314\n", + "Name: Sex, dtype: int64" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.Sex.value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "heavy-warner", + "metadata": {}, + "source": [ + "`max` and `min` to get the maximum and minimum:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "rough-confusion", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "80.0" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.Age.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "deluxe-veteran", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.42" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.Age.min()" + ] + }, + { + "cell_type": "markdown", + "id": "egyptian-booth", + "metadata": {}, + "source": [ + "## DataFrame manipulation" + ] + }, + { + "cell_type": "markdown", + "id": "noble-number", + "metadata": {}, + "source": [ + "### Renaming columns" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "amino-demographic", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>B</th>\n", + " <th>C</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A B C\n", + "0 0 1 2\n", + "1 3 4 5\n", + "2 6 7 8\n", + "3 9 10 11" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame(np.arange(12).reshape(4,3),\n", + " columns=['A', 'B', 'C'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "surface-dimension", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['A', 'B', 'Z'], dtype='object')" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cols = list(df.columns)\n", + "cols[2] = 'Z'\n", + "df.columns = cols\n", + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "southwest-corruption", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z\n", + "0 0 1 2\n", + "1 3 4 5\n", + "2 6 7 8\n", + "3 9 10 11" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns = ['X', 'Y', 'Z']\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "competitive-strap", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A Y Z\n", + "0 0 1 2\n", + "1 3 4 5\n", + "2 6 7 8\n", + "3 9 10 11" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.rename(columns={'X': 'A'})" + ] + }, + { + "cell_type": "markdown", + "id": "sonic-penalty", + "metadata": {}, + "source": [ + "### Rename index" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "annual-botswana", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>a</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>c</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>e</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z\n", + "a 0 1 2\n", + "b 3 4 5\n", + "c 6 7 8\n", + "e 9 10 11" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index = ['a', 'b', 'c', 'e']\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "olive-master", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>a</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>c</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>d</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z\n", + "a 0 1 2\n", + "b 3 4 5\n", + "c 6 7 8\n", + "d 9 10 11" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.rename(index={'e':'d'})" + ] + }, + { + "cell_type": "markdown", + "id": "coupled-encoding", + "metadata": {}, + "source": [ + "### Add column" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "optional-train", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " <th>id</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>a</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " <td>400</td>\n", + " </tr>\n", + " <tr>\n", + " <th>c</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>e</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " <td>12</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z id\n", + "a 0 1 2 0\n", + "b 3 4 5 400\n", + "c 6 7 8 3\n", + "e 9 10 11 12" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['id'] = [0, 400, 3,12]\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "neural-thought", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " <th>id</th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " <th>id</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>a</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " <td>400</td>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " <td>400</td>\n", + " </tr>\n", + " <tr>\n", + " <th>c</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " <td>3</td>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>e</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " <td>12</td>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " <td>12</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z id X Y Z id\n", + "a 0 1 2 0 0 1 2 0\n", + "b 3 4 5 400 3 4 5 400\n", + "c 6 7 8 3 6 7 8 3\n", + "e 9 10 11 12 9 10 11 12" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df, df], axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "apart-permission", + "metadata": {}, + "source": [ + "### Set column as index\n", + "\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.set_index.html" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "cathedral-bouquet", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " </tr>\n", + " <tr>\n", + " <th>id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>400</th>\n", + " <td>4</td>\n", + " <td>3</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>7</td>\n", + " <td>6</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>10</td>\n", + " <td>9</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z\n", + "id \n", + "0 1 0 2\n", + "400 4 3 5\n", + "3 7 6 8\n", + "12 10 9 11" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.set_index(\"id\")" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "narrative-michael", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " <th>id</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>a</th>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>b</th>\n", + " <td>4</td>\n", + " <td>3</td>\n", + " <td>5</td>\n", + " <td>400</td>\n", + " </tr>\n", + " <tr>\n", + " <th>c</th>\n", + " <td>7</td>\n", + " <td>6</td>\n", + " <td>8</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>e</th>\n", + " <td>10</td>\n", + " <td>9</td>\n", + " <td>11</td>\n", + " <td>12</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z id\n", + "a 1 0 2 0\n", + "b 4 3 5 400\n", + "c 7 6 8 3\n", + "e 10 9 11 12" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "elder-apache", + "metadata": {}, + "source": [ + "The `inplace` argument is present accross different pandas methods in order to directly edit the object we are working on instead of creating a new object:" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "western-commander", + "metadata": {}, + "outputs": [], + "source": [ + "df.set_index(\"id\", inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "sorted-western", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " </tr>\n", + " <tr>\n", + " <th>id</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>400</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z\n", + "id \n", + "0 0 1 2\n", + "400 3 4 5\n", + "3 6 7 8\n", + "12 9 10 11" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "continent-garbage", + "metadata": {}, + "source": [ + "### Add row\n", + "\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.append.html\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.concat.html" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "bigger-cartridge", + "metadata": {}, + "outputs": [], + "source": [ + "rows = pd.DataFrame([[30, 31, 32], [42, 43, 44]], columns=['X', 'Y', 'Z']) " + ] + }, + { + "cell_type": "markdown", + "id": "private-soviet", + "metadata": {}, + "source": [ + "Notice here from the documentation that we are using the default `axis=0` (ie a concatenation along rows)." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "helpful-venezuela", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>400</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>30</td>\n", + " <td>31</td>\n", + " <td>32</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>42</td>\n", + " <td>43</td>\n", + " <td>44</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z\n", + "0 0 1 2\n", + "400 3 4 5\n", + "3 6 7 8\n", + "12 9 10 11\n", + "0 30 31 32\n", + "1 42 43 44" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df, rows])" + ] + }, + { + "cell_type": "markdown", + "id": "representative-silicon", + "metadata": {}, + "source": [ + "You can choose also to `ignore_index`, similar to reseting and dropping the indices (but note that the index values on the other axes are still respected in the join):" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "single-angel", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>X</th>\n", + " <th>Y</th>\n", + " <th>Z</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>3</td>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>6</td>\n", + " <td>7</td>\n", + " <td>8</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>9</td>\n", + " <td>10</td>\n", + " <td>11</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " X Y Z\n", + "0 0 1 2\n", + "1 3 4 5\n", + "2 6 7 8\n", + "3 9 10 11\n", + "4 0 1 2\n", + "5 3 4 5\n", + "6 6 7 8\n", + "7 9 10 11" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.concat([df, df], ignore_index=True)" + ] + }, + { + "cell_type": "markdown", + "id": "residential-jewel", + "metadata": {}, + "source": [ + "## Filtering tables\n", + "\n", + "> https://pandas.pydata.org/docs/user_guide/indexing.html#indexing" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "dominican-vitamin", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Braund, Mr. Owen Harris</td>\n", + " <td>male</td>\n", + " <td>22.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>A/5 21171</td>\n", + " <td>7.2500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>PC 17599</td>\n", + " <td>71.2833</td>\n", + " <td>C85</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Heikkinen, Miss. Laina</td>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O2. 3101282</td>\n", + " <td>7.9250</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>4</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n", + " <td>female</td>\n", + " <td>35.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>113803</td>\n", + " <td>53.1000</td>\n", + " <td>C123</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Allen, Mr. William Henry</td>\n", + " <td>male</td>\n", + " <td>35.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>373450</td>\n", + " <td>8.0500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "0 1 0 3 \n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "0 Braund, Mr. Owen Harris male 22.0 1 \n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "0 0 A/5 21171 7.2500 NaN S \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S " + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.head()" + ] + }, + { + "cell_type": "markdown", + "id": "brown-alberta", + "metadata": {}, + "source": [ + "### Selecting columns" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "rental-airfare", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 male\n", + "1 female\n", + "2 female\n", + "3 female\n", + "4 male\n", + "Name: Sex, dtype: object" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic['Sex'].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "adapted-vitamin", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>Pclass</th>\n", + " <th>Survived</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>male</td>\n", + " <td>22.0</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>3</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>female</td>\n", + " <td>35.0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>male</td>\n", + " <td>35.0</td>\n", + " <td>3</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Sex Age Pclass Survived\n", + "0 male 22.0 3 0\n", + "1 female 38.0 1 1\n", + "2 female 26.0 3 1\n", + "3 female 35.0 1 1\n", + "4 male 35.0 3 0" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic[['Sex', 'Age', 'Pclass', 'Survived']].head()" + ] + }, + { + "cell_type": "markdown", + "id": "incorrect-material", + "metadata": {}, + "source": [ + "### Selecting on a condition" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "historic-headset", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>PC 17599</td>\n", + " <td>71.2833</td>\n", + " <td>C85</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Heikkinen, Miss. Laina</td>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O2. 3101282</td>\n", + " <td>7.9250</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>4</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n", + " <td>female</td>\n", + " <td>35.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>113803</td>\n", + " <td>53.1000</td>\n", + " <td>C123</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Allen, Mr. William Henry</td>\n", + " <td>male</td>\n", + " <td>35.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>373450</td>\n", + " <td>8.0500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>7</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>McCarthy, Mr. Timothy J</td>\n", + " <td>male</td>\n", + " <td>54.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>17463</td>\n", + " <td>51.8625</td>\n", + " <td>E46</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "4 5 0 3 \n", + "6 7 0 1 \n", + "\n", + " Name Sex Age SibSp \\\n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "4 Allen, Mr. William Henry male 35.0 0 \n", + "6 McCarthy, Mr. Timothy J male 54.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "4 0 373450 8.0500 NaN S \n", + "6 0 17463 51.8625 E46 S " + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic[titanic['Age'] > 25].head()" + ] + }, + { + "cell_type": "markdown", + "id": "covered-beads", + "metadata": {}, + "source": [ + "### Indexing/Slicing\n", + "\n", + "> https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html\n", + "\n", + "As for pandas Series, you can use `loc` (with labels or booleans) and `iloc` (with integers) for indexing/slicing.\n", + "The first argument represent rows and the second columns.\n", + "\n", + "Both methods use the same syntax as numpy indexing/slicing" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "conscious-consistency", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Sex Age\n", + "1 female 38.0\n", + "2 female 26.0" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.loc[[1,2], ['Sex', 'Age']]" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "automated-large", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>PC 17599</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O2. 3101282</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>female</td>\n", + " <td>35.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>113803</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>male</td>\n", + " <td>35.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>373450</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Sex Age SibSp Parch Ticket\n", + "1 female 38.0 1 0 PC 17599\n", + "2 female 26.0 0 0 STON/O2. 3101282\n", + "3 female 35.0 1 0 113803\n", + "4 male 35.0 0 0 373450" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.loc[1:4, 'Sex':'Ticket'] # Ticket column is included" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "planned-prescription", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>male</td>\n", + " <td>22.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Sex Age\n", + "0 male 22.0\n", + "1 female 38.0" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.iloc[[0,1], [4, 5]]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "gothic-aluminum", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>male</td>\n", + " <td>22.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>A/5 21171</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>PC 17599</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O2. 3101282</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Sex Age SibSp Parch Ticket\n", + "0 male 22.0 1 0 A/5 21171\n", + "1 female 38.0 1 0 PC 17599\n", + "2 female 26.0 0 0 STON/O2. 3101282" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.iloc[0:3, 4:9] # the 9th column is exclude" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "stone-drill", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Name</th>\n", + " <th>Age</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>183</th>\n", + " <td>Becker, Master. Richard F</td>\n", + " <td>1.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>248</th>\n", + " <td>Beckwith, Mr. Richard Leonard</td>\n", + " <td>37.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>618</th>\n", + " <td>Becker, Miss. Marion Louise</td>\n", + " <td>4.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>871</th>\n", + " <td>Beckwith, Mrs. Richard Leonard (Sallie Monypeny)</td>\n", + " <td>47.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " Name Age\n", + "183 Becker, Master. Richard F 1.0\n", + "248 Beckwith, Mr. Richard Leonard 37.0\n", + "618 Becker, Miss. Marion Louise 4.0\n", + "871 Beckwith, Mrs. Richard Leonard (Sallie Monypeny) 47.0" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mask = titanic['Name'].str.contains('^Bec')\n", + "titanic[mask][['Name', 'Age']]" + ] + }, + { + "cell_type": "markdown", + "id": "subject-campbell", + "metadata": {}, + "source": [ + "### Selecting random samples\n", + "\n", + "> https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sample.html" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "duplicate-branch", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>830</th>\n", + " <td>831</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Yasbeck, Mrs. Antoni (Selini Alexander)</td>\n", + " <td>female</td>\n", + " <td>15.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>2659</td>\n", + " <td>14.4542</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>141</th>\n", + " <td>142</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Nysten, Miss. Anna Sofia</td>\n", + " <td>female</td>\n", + " <td>22.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>347081</td>\n", + " <td>7.7500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>378</th>\n", + " <td>379</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Betros, Mr. Tannous</td>\n", + " <td>male</td>\n", + " <td>20.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2648</td>\n", + " <td>4.0125</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>584</th>\n", + " <td>585</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Paulner, Mr. Uscher</td>\n", + " <td>male</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>3411</td>\n", + " <td>8.7125</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>820</th>\n", + " <td>821</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Hays, Mrs. Charles Melville (Clara Jennings Gr...</td>\n", + " <td>female</td>\n", + " <td>52.0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>12749</td>\n", + " <td>93.5000</td>\n", + " <td>B69</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>497</th>\n", + " <td>498</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Shellard, Mr. Frederick William</td>\n", + " <td>male</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>C.A. 6212</td>\n", + " <td>15.1000</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "830 831 1 3 \n", + "141 142 1 3 \n", + "378 379 0 3 \n", + "584 585 0 3 \n", + "820 821 1 1 \n", + "497 498 0 3 \n", + "\n", + " Name Sex Age SibSp \\\n", + "830 Yasbeck, Mrs. Antoni (Selini Alexander) female 15.0 1 \n", + "141 Nysten, Miss. Anna Sofia female 22.0 0 \n", + "378 Betros, Mr. Tannous male 20.0 0 \n", + "584 Paulner, Mr. Uscher male NaN 0 \n", + "820 Hays, Mrs. Charles Melville (Clara Jennings Gr... female 52.0 1 \n", + "497 Shellard, Mr. Frederick William male NaN 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "830 0 2659 14.4542 NaN C \n", + "141 0 347081 7.7500 NaN S \n", + "378 0 2648 4.0125 NaN C \n", + "584 0 3411 8.7125 NaN C \n", + "820 1 12749 93.5000 B69 S \n", + "497 0 C.A. 6212 15.1000 NaN S " + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.sample(n=6)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "southwest-lighting", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>111</th>\n", + " <td>112</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Zabour, Miss. Hileni</td>\n", + " <td>female</td>\n", + " <td>14.5</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>2665</td>\n", + " <td>14.4542</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>211</th>\n", + " <td>212</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>Cameron, Miss. Clear Annie</td>\n", + " <td>female</td>\n", + " <td>35.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>F.C.C. 13528</td>\n", + " <td>21.0000</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>264</th>\n", + " <td>265</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Henry, Miss. Delia</td>\n", + " <td>female</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>382649</td>\n", + " <td>7.7500</td>\n", + " <td>NaN</td>\n", + " <td>Q</td>\n", + " </tr>\n", + " <tr>\n", + " <th>363</th>\n", + " <td>364</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Asim, Mr. Adola</td>\n", + " <td>male</td>\n", + " <td>35.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>SOTON/O.Q. 3101310</td>\n", + " <td>7.0500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass Name Sex Age \\\n", + "111 112 0 3 Zabour, Miss. Hileni female 14.5 \n", + "211 212 1 2 Cameron, Miss. Clear Annie female 35.0 \n", + "264 265 0 3 Henry, Miss. Delia female NaN \n", + "363 364 0 3 Asim, Mr. Adola male 35.0 \n", + "\n", + " SibSp Parch Ticket Fare Cabin Embarked \n", + "111 1 0 2665 14.4542 NaN C \n", + "211 0 0 F.C.C. 13528 21.0000 NaN S \n", + "264 0 0 382649 7.7500 NaN Q \n", + "363 0 0 SOTON/O.Q. 3101310 7.0500 NaN S " + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.sample(frac=.005)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "complex-transcript", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>753</th>\n", + " <td>754</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Jonkoff, Mr. Lalio</td>\n", + " <td>male</td>\n", + " <td>23.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>349204</td>\n", + " <td>7.8958</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>558</th>\n", + " <td>559</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Taussig, Mrs. Emil (Tillie Mandelbaum)</td>\n", + " <td>female</td>\n", + " <td>39.0</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>110413</td>\n", + " <td>79.6500</td>\n", + " <td>E67</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>374</th>\n", + " <td>375</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Palsson, Miss. Stina Viola</td>\n", + " <td>female</td>\n", + " <td>3.0</td>\n", + " <td>3</td>\n", + " <td>1</td>\n", + " <td>349909</td>\n", + " <td>21.0750</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>61</th>\n", + " <td>62</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Icard, Miss. Amelie</td>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>113572</td>\n", + " <td>80.0000</td>\n", + " <td>B28</td>\n", + " <td>NaN</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass Name \\\n", + "753 754 0 3 Jonkoff, Mr. Lalio \n", + "558 559 1 1 Taussig, Mrs. Emil (Tillie Mandelbaum) \n", + "374 375 0 3 Palsson, Miss. Stina Viola \n", + "61 62 1 1 Icard, Miss. Amelie \n", + "\n", + " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", + "753 male 23.0 0 0 349204 7.8958 NaN S \n", + "558 female 39.0 1 1 110413 79.6500 E67 S \n", + "374 female 3.0 3 1 349909 21.0750 NaN S \n", + "61 female 38.0 0 0 113572 80.0000 B28 NaN " + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.sample(frac=.005)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "regulated-ontario", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>456</th>\n", + " <td>457</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>Millet, Mr. Francis Davis</td>\n", + " <td>male</td>\n", + " <td>65.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>13509</td>\n", + " <td>26.550</td>\n", + " <td>E38</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>351</th>\n", + " <td>352</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>Williams-Lambert, Mr. Fletcher Fellows</td>\n", + " <td>male</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>113510</td>\n", + " <td>35.000</td>\n", + " <td>C128</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>173</th>\n", + " <td>174</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Sivola, Mr. Antti Wilhelm</td>\n", + " <td>male</td>\n", + " <td>21.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O 2. 3101280</td>\n", + " <td>7.925</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>671</th>\n", + " <td>672</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>Davidson, Mr. Thornton</td>\n", + " <td>male</td>\n", + " <td>31.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>F.C. 12750</td>\n", + " <td>52.000</td>\n", + " <td>B71</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass Name \\\n", + "456 457 0 1 Millet, Mr. Francis Davis \n", + "351 352 0 1 Williams-Lambert, Mr. Fletcher Fellows \n", + "173 174 0 3 Sivola, Mr. Antti Wilhelm \n", + "671 672 0 1 Davidson, Mr. Thornton \n", + "\n", + " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", + "456 male 65.0 0 0 13509 26.550 E38 S \n", + "351 male NaN 0 0 113510 35.000 C128 S \n", + "173 male 21.0 0 0 STON/O 2. 3101280 7.925 NaN S \n", + "671 male 31.0 1 0 F.C. 12750 52.000 B71 S " + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.sample(frac=.005, random_state=12)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "fifty-cutting", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>456</th>\n", + " <td>457</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>Millet, Mr. Francis Davis</td>\n", + " <td>male</td>\n", + " <td>65.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>13509</td>\n", + " <td>26.550</td>\n", + " <td>E38</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>351</th>\n", + " <td>352</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>Williams-Lambert, Mr. Fletcher Fellows</td>\n", + " <td>male</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>113510</td>\n", + " <td>35.000</td>\n", + " <td>C128</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>173</th>\n", + " <td>174</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Sivola, Mr. Antti Wilhelm</td>\n", + " <td>male</td>\n", + " <td>21.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O 2. 3101280</td>\n", + " <td>7.925</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>671</th>\n", + " <td>672</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>Davidson, Mr. Thornton</td>\n", + " <td>male</td>\n", + " <td>31.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>F.C. 12750</td>\n", + " <td>52.000</td>\n", + " <td>B71</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass Name \\\n", + "456 457 0 1 Millet, Mr. Francis Davis \n", + "351 352 0 1 Williams-Lambert, Mr. Fletcher Fellows \n", + "173 174 0 3 Sivola, Mr. Antti Wilhelm \n", + "671 672 0 1 Davidson, Mr. Thornton \n", + "\n", + " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", + "456 male 65.0 0 0 13509 26.550 E38 S \n", + "351 male NaN 0 0 113510 35.000 C128 S \n", + "173 male 21.0 0 0 STON/O 2. 3101280 7.925 NaN S \n", + "671 male 31.0 1 0 F.C. 12750 52.000 B71 S " + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.sample(frac=.005, random_state=12)" + ] + }, + { + "cell_type": "markdown", + "id": "introductory-domestic", + "metadata": {}, + "source": [ + "### isin\n", + "\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.isin.html" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "fuzzy-nepal", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>173</th>\n", + " <td>174</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Sivola, Mr. Antti Wilhelm</td>\n", + " <td>male</td>\n", + " <td>21.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O 2. 3101280</td>\n", + " <td>7.925</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>351</th>\n", + " <td>352</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>Williams-Lambert, Mr. Fletcher Fellows</td>\n", + " <td>male</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>113510</td>\n", + " <td>35.000</td>\n", + " <td>C128</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>456</th>\n", + " <td>457</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>Millet, Mr. Francis Davis</td>\n", + " <td>male</td>\n", + " <td>65.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>13509</td>\n", + " <td>26.550</td>\n", + " <td>E38</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass Name \\\n", + "173 174 0 3 Sivola, Mr. Antti Wilhelm \n", + "351 352 0 1 Williams-Lambert, Mr. Fletcher Fellows \n", + "456 457 0 1 Millet, Mr. Francis Davis \n", + "\n", + " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", + "173 male 21.0 0 0 STON/O 2. 3101280 7.925 NaN S \n", + "351 male NaN 0 0 113510 35.000 C128 S \n", + "456 male 65.0 0 0 13509 26.550 E38 S " + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic[titanic['PassengerId'].isin([457, 352, 174])]" + ] + }, + { + "cell_type": "markdown", + "id": "tested-stretch", + "metadata": {}, + "source": [ + "### where\n", + "\n", + "Where cond is **True**, **keep the original** value.<br />\n", + "Where **False**, **replace** with corresponding value from other.\n", + "\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.where.html" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "persistent-processor", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>B</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>-4</td>\n", + " <td>-3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>-2</td>\n", + " <td>-1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A B\n", + "0 -4 -3\n", + "1 -2 -1\n", + "2 0 1\n", + "3 2 3\n", + "4 4 5" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame(np.arange(-4, 6).reshape(-1, 2), columns=['A', 'B'])\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "informative-accident", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>B</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>-4</td>\n", + " <td>-3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>-2</td>\n", + " <td>-1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A B\n", + "0 -4 -3\n", + "1 -2 -1\n", + "2 0 0\n", + "3 0 0\n", + "4 0 0" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.where(df < 0 , 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "usual-soundtrack", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>B</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>4</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A B\n", + "0 4 3\n", + "1 2 1\n", + "2 0 1\n", + "3 2 3\n", + "4 4 5" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.where(df > 0 , -df)" + ] + }, + { + "cell_type": "markdown", + "id": "sudden-biography", + "metadata": {}, + "source": [ + "### mask\n", + "\n", + "Replace values where the condition is True (the opposite of `where`)\n", + "\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.where.html" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "informative-bahamas", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>B</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A B\n", + "0 0 0\n", + "1 0 0\n", + "2 0 1\n", + "3 2 3\n", + "4 4 5" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mask(df < 0, 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "minute-marsh", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>A</th>\n", + " <th>B</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>4</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2</td>\n", + " <td>3</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>4</td>\n", + " <td>5</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " A B\n", + "0 4 3\n", + "1 2 1\n", + "2 0 1\n", + "3 2 3\n", + "4 4 5" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mask(df < 0, -df)" + ] + }, + { + "cell_type": "markdown", + "id": "green-creator", + "metadata": {}, + "source": [ + "### query\n", + "\n", + "Query the columns of a DataFrame with a boolean expression.\n", + "\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.query.html" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "listed-blackberry", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>PC 17599</td>\n", + " <td>71.2833</td>\n", + " <td>C85</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Heikkinen, Miss. Laina</td>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O2. 3101282</td>\n", + " <td>7.9250</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>4</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n", + " <td>female</td>\n", + " <td>35.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>113803</td>\n", + " <td>53.1000</td>\n", + " <td>C123</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>9</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n", + " <td>female</td>\n", + " <td>27.0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>347742</td>\n", + " <td>11.1333</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>10</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n", + " <td>female</td>\n", + " <td>14.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>237736</td>\n", + " <td>30.0708</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>875</th>\n", + " <td>876</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Najib, Miss. Adele Kiamie \"Jane\"</td>\n", + " <td>female</td>\n", + " <td>15.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2667</td>\n", + " <td>7.2250</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>879</th>\n", + " <td>880</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)</td>\n", + " <td>female</td>\n", + " <td>56.0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>11767</td>\n", + " <td>83.1583</td>\n", + " <td>C50</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>880</th>\n", + " <td>881</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>Shelley, Mrs. William (Imanita Parrish Hall)</td>\n", + " <td>female</td>\n", + " <td>25.0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>230433</td>\n", + " <td>26.0000</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>887</th>\n", + " <td>888</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Graham, Miss. Margaret Edith</td>\n", + " <td>female</td>\n", + " <td>19.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>112053</td>\n", + " <td>30.0000</td>\n", + " <td>B42</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>889</th>\n", + " <td>890</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Behr, Mr. Karl Howell</td>\n", + " <td>male</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>111369</td>\n", + " <td>30.0000</td>\n", + " <td>C148</td>\n", + " <td>C</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>342 rows × 12 columns</p>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "8 9 1 3 \n", + "9 10 1 2 \n", + ".. ... ... ... \n", + "875 876 1 3 \n", + "879 880 1 1 \n", + "880 881 1 2 \n", + "887 888 1 1 \n", + "889 890 1 1 \n", + "\n", + " Name Sex Age SibSp \\\n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "8 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 \n", + "9 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 \n", + ".. ... ... ... ... \n", + "875 Najib, Miss. Adele Kiamie \"Jane\" female 15.0 0 \n", + "879 Potter, Mrs. Thomas Jr (Lily Alexenia Wilson) female 56.0 0 \n", + "880 Shelley, Mrs. William (Imanita Parrish Hall) female 25.0 0 \n", + "887 Graham, Miss. Margaret Edith female 19.0 0 \n", + "889 Behr, Mr. Karl Howell male 26.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "8 2 347742 11.1333 NaN S \n", + "9 0 237736 30.0708 NaN C \n", + ".. ... ... ... ... ... \n", + "875 0 2667 7.2250 NaN C \n", + "879 1 11767 83.1583 C50 C \n", + "880 1 230433 26.0000 NaN S \n", + "887 0 112053 30.0000 B42 S \n", + "889 0 111369 30.0000 C148 C \n", + "\n", + "[342 rows x 12 columns]" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.query(\"Survived == 1\")" + ] + }, + { + "cell_type": "markdown", + "id": "infinite-bankruptcy", + "metadata": {}, + "source": [ + "Composing with \"and\" (`&`) \"or\" (`|`) operators:" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "compressed-footage", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>2</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n", + " <td>female</td>\n", + " <td>38.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>PC 17599</td>\n", + " <td>71.2833</td>\n", + " <td>C85</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Heikkinen, Miss. Laina</td>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O2. 3101282</td>\n", + " <td>7.9250</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>4</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n", + " <td>female</td>\n", + " <td>35.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>113803</td>\n", + " <td>53.1000</td>\n", + " <td>C123</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>9</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n", + " <td>female</td>\n", + " <td>27.0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>347742</td>\n", + " <td>11.1333</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>10</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n", + " <td>female</td>\n", + " <td>14.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>237736</td>\n", + " <td>30.0708</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>874</th>\n", + " <td>875</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>Abelson, Mrs. Samuel (Hannah Wizosky)</td>\n", + " <td>female</td>\n", + " <td>28.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>P/PP 3381</td>\n", + " <td>24.0000</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>875</th>\n", + " <td>876</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Najib, Miss. Adele Kiamie \"Jane\"</td>\n", + " <td>female</td>\n", + " <td>15.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2667</td>\n", + " <td>7.2250</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>879</th>\n", + " <td>880</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)</td>\n", + " <td>female</td>\n", + " <td>56.0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>11767</td>\n", + " <td>83.1583</td>\n", + " <td>C50</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>880</th>\n", + " <td>881</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>Shelley, Mrs. William (Imanita Parrish Hall)</td>\n", + " <td>female</td>\n", + " <td>25.0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>230433</td>\n", + " <td>26.0000</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>887</th>\n", + " <td>888</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Graham, Miss. Margaret Edith</td>\n", + " <td>female</td>\n", + " <td>19.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>112053</td>\n", + " <td>30.0000</td>\n", + " <td>B42</td>\n", + " <td>S</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>233 rows × 12 columns</p>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "1 2 1 1 \n", + "2 3 1 3 \n", + "3 4 1 1 \n", + "8 9 1 3 \n", + "9 10 1 2 \n", + ".. ... ... ... \n", + "874 875 1 2 \n", + "875 876 1 3 \n", + "879 880 1 1 \n", + "880 881 1 2 \n", + "887 888 1 1 \n", + "\n", + " Name Sex Age SibSp \\\n", + "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", + "2 Heikkinen, Miss. Laina female 26.0 0 \n", + "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", + "8 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 \n", + "9 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 \n", + ".. ... ... ... ... \n", + "874 Abelson, Mrs. Samuel (Hannah Wizosky) female 28.0 1 \n", + "875 Najib, Miss. Adele Kiamie \"Jane\" female 15.0 0 \n", + "879 Potter, Mrs. Thomas Jr (Lily Alexenia Wilson) female 56.0 0 \n", + "880 Shelley, Mrs. William (Imanita Parrish Hall) female 25.0 0 \n", + "887 Graham, Miss. Margaret Edith female 19.0 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "1 0 PC 17599 71.2833 C85 C \n", + "2 0 STON/O2. 3101282 7.9250 NaN S \n", + "3 0 113803 53.1000 C123 S \n", + "8 2 347742 11.1333 NaN S \n", + "9 0 237736 30.0708 NaN C \n", + ".. ... ... ... ... ... \n", + "874 0 P/PP 3381 24.0000 NaN C \n", + "875 0 2667 7.2250 NaN C \n", + "879 1 11767 83.1583 C50 C \n", + "880 1 230433 26.0000 NaN S \n", + "887 0 112053 30.0000 B42 S \n", + "\n", + "[233 rows x 12 columns]" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.query(\"Survived == 1 & Sex == 'female'\")" + ] + }, + { + "cell_type": "markdown", + "id": "exterior-workstation", + "metadata": {}, + "source": [ + "You can refer to variables in the environment by prefixing them with an ‘@’ character " + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "id": "removable-gather", + "metadata": {}, + "outputs": [], + "source": [ + "vips = titanic.Name.sample(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "fleet-modeling", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "79 Dowdell, Miss. Elizabeth\n", + "354 Yousif, Mr. Wazli\n", + "495 Yousseff, Mr. Gerious\n", + "173 Sivola, Mr. Antti Wilhelm\n", + "615 Herman, Miss. Alice\n", + "614 Brocklebank, Mr. William Alfred\n", + "735 Williams, Mr. Leslie\n", + "666 Butler, Mr. Reginald Fenton\n", + "617 Lobb, Mrs. William Arthur (Cordelia K Stanlick)\n", + "839 Marechal, Mr. Pierre\n", + "Name: Name, dtype: object" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vips" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "opposite-score", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>PassengerId</th>\n", + " <th>Survived</th>\n", + " <th>Pclass</th>\n", + " <th>Name</th>\n", + " <th>Sex</th>\n", + " <th>Age</th>\n", + " <th>SibSp</th>\n", + " <th>Parch</th>\n", + " <th>Ticket</th>\n", + " <th>Fare</th>\n", + " <th>Cabin</th>\n", + " <th>Embarked</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>79</th>\n", + " <td>80</td>\n", + " <td>1</td>\n", + " <td>3</td>\n", + " <td>Dowdell, Miss. Elizabeth</td>\n", + " <td>female</td>\n", + " <td>30.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>364516</td>\n", + " <td>12.4750</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>173</th>\n", + " <td>174</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Sivola, Mr. Antti Wilhelm</td>\n", + " <td>male</td>\n", + " <td>21.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>STON/O 2. 3101280</td>\n", + " <td>7.9250</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>354</th>\n", + " <td>355</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Yousif, Mr. Wazli</td>\n", + " <td>male</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2647</td>\n", + " <td>7.2250</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>495</th>\n", + " <td>496</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Yousseff, Mr. Gerious</td>\n", + " <td>male</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2627</td>\n", + " <td>14.4583</td>\n", + " <td>NaN</td>\n", + " <td>C</td>\n", + " </tr>\n", + " <tr>\n", + " <th>614</th>\n", + " <td>615</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Brocklebank, Mr. William Alfred</td>\n", + " <td>male</td>\n", + " <td>35.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>364512</td>\n", + " <td>8.0500</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>615</th>\n", + " <td>616</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>Herman, Miss. Alice</td>\n", + " <td>female</td>\n", + " <td>24.0</td>\n", + " <td>1</td>\n", + " <td>2</td>\n", + " <td>220845</td>\n", + " <td>65.0000</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>617</th>\n", + " <td>618</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Lobb, Mrs. William Arthur (Cordelia K Stanlick)</td>\n", + " <td>female</td>\n", + " <td>26.0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>A/5. 3336</td>\n", + " <td>16.1000</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>666</th>\n", + " <td>667</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>Butler, Mr. Reginald Fenton</td>\n", + " <td>male</td>\n", + " <td>25.0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>234686</td>\n", + " <td>13.0000</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>735</th>\n", + " <td>736</td>\n", + " <td>0</td>\n", + " <td>3</td>\n", + " <td>Williams, Mr. Leslie</td>\n", + " <td>male</td>\n", + " <td>28.5</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>54636</td>\n", + " <td>16.1000</td>\n", + " <td>NaN</td>\n", + " <td>S</td>\n", + " </tr>\n", + " <tr>\n", + " <th>839</th>\n", + " <td>840</td>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>Marechal, Mr. Pierre</td>\n", + " <td>male</td>\n", + " <td>NaN</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>11774</td>\n", + " <td>29.7000</td>\n", + " <td>C47</td>\n", + " <td>C</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " PassengerId Survived Pclass \\\n", + "79 80 1 3 \n", + "173 174 0 3 \n", + "354 355 0 3 \n", + "495 496 0 3 \n", + "614 615 0 3 \n", + "615 616 1 2 \n", + "617 618 0 3 \n", + "666 667 0 2 \n", + "735 736 0 3 \n", + "839 840 1 1 \n", + "\n", + " Name Sex Age SibSp \\\n", + "79 Dowdell, Miss. Elizabeth female 30.0 0 \n", + "173 Sivola, Mr. Antti Wilhelm male 21.0 0 \n", + "354 Yousif, Mr. Wazli male NaN 0 \n", + "495 Yousseff, Mr. Gerious male NaN 0 \n", + "614 Brocklebank, Mr. William Alfred male 35.0 0 \n", + "615 Herman, Miss. Alice female 24.0 1 \n", + "617 Lobb, Mrs. William Arthur (Cordelia K Stanlick) female 26.0 1 \n", + "666 Butler, Mr. Reginald Fenton male 25.0 0 \n", + "735 Williams, Mr. Leslie male 28.5 0 \n", + "839 Marechal, Mr. Pierre male NaN 0 \n", + "\n", + " Parch Ticket Fare Cabin Embarked \n", + "79 0 364516 12.4750 NaN S \n", + "173 0 STON/O 2. 3101280 7.9250 NaN S \n", + "354 0 2647 7.2250 NaN C \n", + "495 0 2627 14.4583 NaN C \n", + "614 0 364512 8.0500 NaN S \n", + "615 2 220845 65.0000 NaN S \n", + "617 0 A/5. 3336 16.1000 NaN S \n", + "666 0 234686 13.0000 NaN S \n", + "735 0 54636 16.1000 NaN S \n", + "839 0 11774 29.7000 C47 C " + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "titanic.query(\"Name in @vips\")" + ] + }, + { + "cell_type": "markdown", + "id": "apart-glossary", + "metadata": {}, + "source": [ + "### drop_duplicates\n", + "\n", + "Return DataFrame with duplicate rows removed.\n", + "\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop_duplicates.html" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "optional-surfing", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>brand</th>\n", + " <th>style</th>\n", + " <th>rating</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>Yum Yum</td>\n", + " <td>cup</td>\n", + " <td>4.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Yum Yum</td>\n", + " <td>cup</td>\n", + " <td>4.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>Indomie</td>\n", + " <td>cup</td>\n", + " <td>3.5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>Indomie</td>\n", + " <td>pack</td>\n", + " <td>15.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>Indomie</td>\n", + " <td>pack</td>\n", + " <td>5.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " brand style rating\n", + "0 Yum Yum cup 4.0\n", + "1 Yum Yum cup 4.0\n", + "2 Indomie cup 3.5\n", + "3 Indomie pack 15.0\n", + "4 Indomie pack 5.0" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({\n", + " 'brand': ['Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'],\n", + " 'style': ['cup', 'cup', 'cup', 'pack', 'pack'],\n", + " 'rating': [4, 4, 3.5, 15, 5]\n", + "})\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "bulgarian-improvement", + "metadata": {}, + "source": [ + "By default, it removes duplicate rows based on all columns:" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "becoming-carbon", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>brand</th>\n", + " <th>style</th>\n", + " <th>rating</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>Yum Yum</td>\n", + " <td>cup</td>\n", + " <td>4.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>Indomie</td>\n", + " <td>cup</td>\n", + " <td>3.5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>Indomie</td>\n", + " <td>pack</td>\n", + " <td>15.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>Indomie</td>\n", + " <td>pack</td>\n", + " <td>5.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " brand style rating\n", + "0 Yum Yum cup 4.0\n", + "2 Indomie cup 3.5\n", + "3 Indomie pack 15.0\n", + "4 Indomie pack 5.0" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.drop_duplicates()" + ] + }, + { + "cell_type": "markdown", + "id": "supreme-master", + "metadata": {}, + "source": [ + "To remove duplicates on specific column(s), use subset:" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "social-pottery", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>brand</th>\n", + " <th>style</th>\n", + " <th>rating</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>Yum Yum</td>\n", + " <td>cup</td>\n", + " <td>4.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>Indomie</td>\n", + " <td>cup</td>\n", + " <td>3.5</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " brand style rating\n", + "0 Yum Yum cup 4.0\n", + "2 Indomie cup 3.5" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.drop_duplicates(subset=['brand'])" + ] + }, + { + "cell_type": "markdown", + "id": "guided-feeling", + "metadata": {}, + "source": [ + "To remove duplicates and keep last occurrences, use keep:" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "incoming-equipment", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>brand</th>\n", + " <th>style</th>\n", + " <th>rating</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>Yum Yum</td>\n", + " <td>cup</td>\n", + " <td>4.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>Indomie</td>\n", + " <td>cup</td>\n", + " <td>3.5</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>Indomie</td>\n", + " <td>pack</td>\n", + " <td>5.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " brand style rating\n", + "1 Yum Yum cup 4.0\n", + "2 Indomie cup 3.5\n", + "4 Indomie pack 5.0" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.drop_duplicates(subset=['brand', 'style'], keep='last')" + ] + }, + { + "cell_type": "markdown", + "id": "vulnerable-hartford", + "metadata": {}, + "source": [ + "## Group data" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "verified-conservative", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "##################### 1 #########################\n", + " PassengerId Survived Pclass Sex Age\n", + "1 2 1 1 female 38.0\n", + "3 4 1 1 female 35.0\n", + "6 7 0 1 male 54.0\n", + "11 12 1 1 female 58.0\n", + "23 24 1 1 male 28.0\n", + ".. ... ... ... ... ...\n", + "871 872 1 1 female 47.0\n", + "872 873 0 1 male 33.0\n", + "879 880 1 1 female 56.0\n", + "887 888 1 1 female 19.0\n", + "889 890 1 1 male 26.0\n", + "\n", + "[216 rows x 5 columns]\n", + "##################### 2 #########################\n", + " PassengerId Survived Pclass Sex Age\n", + "9 10 1 2 female 14.0\n", + "15 16 1 2 female 55.0\n", + "17 18 1 2 male NaN\n", + "20 21 0 2 male 35.0\n", + "21 22 1 2 male 34.0\n", + ".. ... ... ... ... ...\n", + "866 867 1 2 female 27.0\n", + "874 875 1 2 female 28.0\n", + "880 881 1 2 female 25.0\n", + "883 884 0 2 male 28.0\n", + "886 887 0 2 male 27.0\n", + "\n", + "[184 rows x 5 columns]\n", + "##################### 3 #########################\n", + " PassengerId Survived Pclass Sex Age\n", + "0 1 0 3 male 22.0\n", + "2 3 1 3 female 26.0\n", + "4 5 0 3 male 35.0\n", + "5 6 0 3 male NaN\n", + "7 8 0 3 male 2.0\n", + ".. ... ... ... ... ...\n", + "882 883 0 3 female 22.0\n", + "884 885 0 3 male 25.0\n", + "885 886 0 3 female 39.0\n", + "888 889 0 3 female NaN\n", + "890 891 0 3 male 32.0\n", + "\n", + "[491 rows x 5 columns]\n" + ] + } + ], + "source": [ + "for p_class, df in titanic.groupby('Pclass'):\n", + " print(f\"##################### {p_class} #########################\")\n", + " print(df[['PassengerId', 'Survived', 'Pclass', 'Sex', 'Age']])" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "alternate-pepper", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "##################### 1 #########################\n", + "================== female =================\n", + " Survived Age\n", + "count 94.000000 85.000000\n", + "mean 0.968085 34.611765\n", + "std 0.176716 13.612052\n", + "min 0.000000 2.000000\n", + "25% 1.000000 23.000000\n", + "50% 1.000000 35.000000\n", + "75% 1.000000 44.000000\n", + "max 1.000000 63.000000\n", + "================== male =================\n", + " Survived Age\n", + "count 122.000000 101.000000\n", + "mean 0.368852 41.281386\n", + "std 0.484484 15.139570\n", + "min 0.000000 0.920000\n", + "25% 0.000000 30.000000\n", + "50% 0.000000 40.000000\n", + "75% 1.000000 51.000000\n", + "max 1.000000 80.000000\n", + "##################### 2 #########################\n", + "================== female =================\n", + " Survived Age\n", + "count 76.000000 74.000000\n", + "mean 0.921053 28.722973\n", + "std 0.271448 12.872702\n", + "min 0.000000 2.000000\n", + "25% 1.000000 22.250000\n", + "50% 1.000000 28.000000\n", + "75% 1.000000 36.000000\n", + "max 1.000000 57.000000\n", + "================== male =================\n", + " Survived Age\n", + "count 108.000000 99.000000\n", + "mean 0.157407 30.740707\n", + "std 0.365882 14.793894\n", + "min 0.000000 0.670000\n", + "25% 0.000000 23.000000\n", + "50% 0.000000 30.000000\n", + "75% 0.000000 36.750000\n", + "max 1.000000 70.000000\n", + "##################### 3 #########################\n", + "================== female =================\n", + " Survived Age\n", + "count 144.000000 102.000000\n", + "mean 0.500000 21.750000\n", + "std 0.501745 12.729964\n", + "min 0.000000 0.750000\n", + "25% 0.000000 14.125000\n", + "50% 0.500000 21.500000\n", + "75% 1.000000 29.750000\n", + "max 1.000000 63.000000\n", + "================== male =================\n", + " Survived Age\n", + "count 347.000000 253.000000\n", + "mean 0.135447 26.507589\n", + "std 0.342694 12.159514\n", + "min 0.000000 0.420000\n", + "25% 0.000000 20.000000\n", + "50% 0.000000 25.000000\n", + "75% 0.000000 33.000000\n", + "max 1.000000 74.000000\n" + ] + } + ], + "source": [ + "for p_class, df in titanic.groupby('Pclass'):\n", + " print(f\"##################### {p_class} #########################\")\n", + " for sex, df2 in df.groupby('Sex'):\n", + " print(f\"================== {sex} =================\")\n", + " print(df2[['Survived', 'Age']].describe())" + ] + }, + { + "cell_type": "markdown", + "id": "toxic-madagascar", + "metadata": {}, + "source": [ + "## Table Concatenation/Merging\n", + "\n", + "> https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html\n", + "> https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge.html" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "assumed-driving", + "metadata": {}, + "outputs": [], + "source": [ + "table_1 = pd.DataFrame({'gene_ID':[1,12,3],\n", + " 'species': ['HUMAN', 'RAT', 'HORSE']})\n", + "table_2 = pd.DataFrame({'gene_ID':[12,3,1],\n", + " 'effect': [12, 33, 45]})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "artificial-senegal", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>species</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>HUMAN</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12</td>\n", + " <td>RAT</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>HORSE</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID species\n", + "0 1 HUMAN\n", + "1 12 RAT\n", + "2 3 HORSE" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table_1" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "id": "adjustable-hamburg", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>12</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>33</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>1</td>\n", + " <td>45</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID effect\n", + "0 12 12\n", + "1 3 33\n", + "2 1 45" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table_2" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "focal-wrist", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>species</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>HUMAN</td>\n", + " <td>45</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12</td>\n", + " <td>RAT</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>HORSE</td>\n", + " <td>33</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID species effect\n", + "0 1 HUMAN 45\n", + "1 12 RAT 12\n", + "2 3 HORSE 33" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.merge(table_1, table_2, on='gene_ID')" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "id": "loved-raise", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>ref</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>12</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>33</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>1</td>\n", + " <td>45</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " ref effect\n", + "0 12 12\n", + "1 3 33\n", + "2 1 45" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table_3 = pd.DataFrame({'ref':[12,3,1],\n", + " 'effect': [12, 33, 45]})\n", + "table_3" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "finished-profile", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>species</th>\n", + " <th>ref</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>HUMAN</td>\n", + " <td>1</td>\n", + " <td>45</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12</td>\n", + " <td>RAT</td>\n", + " <td>12</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>HORSE</td>\n", + " <td>3</td>\n", + " <td>33</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID species ref effect\n", + "0 1 HUMAN 1 45\n", + "1 12 RAT 12 12\n", + "2 3 HORSE 3 33" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.merge(table_1, table_3, left_on='gene_ID', right_on='ref')" + ] + }, + { + "cell_type": "markdown", + "id": "digital-blowing", + "metadata": {}, + "source": [ + "### Effect of *how* parameter" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "id": "olive-punch", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>specie</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>HUMAN</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12</td>\n", + " <td>RAT</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>HORSE</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>42</td>\n", + " <td>MONKEY</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID specie\n", + "0 1 HUMAN\n", + "1 12 RAT\n", + "2 3 HORSE\n", + "3 42 MONKEY" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table_4 = pd.DataFrame({'gene_ID':[1,12,3, 42],\n", + " 'specie': ['HUMAN', 'RAT', 'HORSE', 'MONKEY']})\n", + "table_4" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "id": "attached-jimmy", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>ref</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>12</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3</td>\n", + " <td>33</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>1</td>\n", + " <td>45</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>35</td>\n", + " <td>100</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " ref effect\n", + "0 12 12\n", + "1 3 33\n", + "2 1 45\n", + "3 35 100" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table_5 = pd.DataFrame({'ref':[12,3,1, 35],\n", + " 'effect': [12, 33, 45, 100]})\n", + "table_5" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "charged-tragedy", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>specie</th>\n", + " <th>ref</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>HUMAN</td>\n", + " <td>1.0</td>\n", + " <td>45.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12</td>\n", + " <td>RAT</td>\n", + " <td>12.0</td>\n", + " <td>12.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>HORSE</td>\n", + " <td>3.0</td>\n", + " <td>33.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>42</td>\n", + " <td>MONKEY</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID specie ref effect\n", + "0 1 HUMAN 1.0 45.0\n", + "1 12 RAT 12.0 12.0\n", + "2 3 HORSE 3.0 33.0\n", + "3 42 MONKEY NaN NaN" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.merge(table_4, table_5, left_on='gene_ID', right_on='ref', how='left')" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "id": "encouraging-speaking", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>specie</th>\n", + " <th>ref</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>12.0</td>\n", + " <td>RAT</td>\n", + " <td>12</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>3.0</td>\n", + " <td>HORSE</td>\n", + " <td>3</td>\n", + " <td>33</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>1.0</td>\n", + " <td>HUMAN</td>\n", + " <td>1</td>\n", + " <td>45</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>35</td>\n", + " <td>100</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID specie ref effect\n", + "0 12.0 RAT 12 12\n", + "1 3.0 HORSE 3 33\n", + "2 1.0 HUMAN 1 45\n", + "3 NaN NaN 35 100" + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.merge(table_4, table_5, left_on='gene_ID', right_on='ref', how='right')" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "id": "acquired-magnitude", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>specie</th>\n", + " <th>ref</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1</td>\n", + " <td>HUMAN</td>\n", + " <td>1</td>\n", + " <td>45</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12</td>\n", + " <td>RAT</td>\n", + " <td>12</td>\n", + " <td>12</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3</td>\n", + " <td>HORSE</td>\n", + " <td>3</td>\n", + " <td>33</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID specie ref effect\n", + "0 1 HUMAN 1 45\n", + "1 12 RAT 12 12\n", + "2 3 HORSE 3 33" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.merge(table_4, table_5, left_on='gene_ID', right_on='ref', how='inner')" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "id": "imported-candle", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>gene_ID</th>\n", + " <th>specie</th>\n", + " <th>ref</th>\n", + " <th>effect</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>1.0</td>\n", + " <td>HUMAN</td>\n", + " <td>1.0</td>\n", + " <td>45.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12.0</td>\n", + " <td>RAT</td>\n", + " <td>12.0</td>\n", + " <td>12.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>3.0</td>\n", + " <td>HORSE</td>\n", + " <td>3.0</td>\n", + " <td>33.0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>42.0</td>\n", + " <td>MONKEY</td>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>NaN</td>\n", + " <td>NaN</td>\n", + " <td>35.0</td>\n", + " <td>100.0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " gene_ID specie ref effect\n", + "0 1.0 HUMAN 1.0 45.0\n", + "1 12.0 RAT 12.0 12.0\n", + "2 3.0 HORSE 3.0 33.0\n", + "3 42.0 MONKEY NaN NaN\n", + "4 NaN NaN 35.0 100.0" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.merge(table_4, table_5, left_on='gene_ID', right_on='ref', how='outer')" + ] + }, + { + "cell_type": "markdown", + "id": "looking-price", + "metadata": {}, + "source": [ + "## Crosstab\n", + "\n", + "Compute a simple cross tabulation of two (or more) factors. By default computes a frequency table of the factors \n", + "\n", + "> https://pandas.pydata.org/docs/reference/api/pandas.crosstab.html" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "id": "determined-compromise", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>Pclass</th>\n", + " <th>1</th>\n", + " <th>2</th>\n", + " <th>3</th>\n", + " </tr>\n", + " <tr>\n", + " <th>Age</th>\n", + " <th></th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0.42</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0.67</th>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0.75</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0.83</th>\n", + " <td>0</td>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>0.92</th>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>70.00</th>\n", + " <td>1</td>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>70.50</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>71.00</th>\n", + " <td>2</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>74.00</th>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>80.00</th>\n", + " <td>1</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>88 rows × 3 columns</p>\n", + "</div>" + ], + "text/plain": [ + "Pclass 1 2 3\n", + "Age \n", + "0.42 0 0 1\n", + "0.67 0 1 0\n", + "0.75 0 0 2\n", + "0.83 0 2 0\n", + "0.92 1 0 0\n", + "... .. .. ..\n", + "70.00 1 1 0\n", + "70.50 0 0 1\n", + "71.00 2 0 0\n", + "74.00 0 0 1\n", + "80.00 1 0 0\n", + "\n", + "[88 rows x 3 columns]" + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.crosstab(index=titanic.Age, columns=titanic.Pclass)" + ] + }, + { + "cell_type": "markdown", + "id": "differential-solomon", + "metadata": {}, + "source": [ + "## Saving data\n", + "\n", + "To **csv** or **tsv** files:\n", + "\n", + "```python\n", + "df.to_csv(<path to file>, sep='\\t', index=False)\n", + "```\n", + "\n", + "If needed, you can even produce **xlsx** files with multiple spreadsheets:\n", + "\n", + "```python\n", + "with pd.ExcelWriter(\"multi_sheet_excel.xlsx\") as writer:\n", + " df.to_excel(writer, sheet_name=\"stocks1\")\n", + " df2.to_excel(writer, sheet_name=\"stocks2\")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "photographic-citizen", + "metadata": {}, + "source": [ + "# Teasing\n", + "\n", + "pandas use matplotlib to display graphics" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "martial-lover", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<AxesSubplot:>" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "titanic.Age.hist(bins=40)" + ] + }, + { + "cell_type": "markdown", + "id": "pointed-transport", + "metadata": {}, + "source": [ + "# And so much more ...\n", + "\n", + "To name just a few:\n", + "\n", + "- [pivot_table](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html)\n", + "- [apply](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html)\n", + "- [map](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html)\n", + "- [json_normalize](https://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.io.json.json_normalize.html)\n", + "- [multiindex](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.MultiIndex.html)\n", + "- Combination of groupby with mean, max, aggregate or boxplots.\n", + "- ..." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:dev]", + "language": "python", + "name": "conda-env-dev-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab