├── README.md ├── data ├── .DS_Store ├── act1.csv ├── act3.csv ├── actInfo.csv ├── acts.tsv ├── contributorForEachActFinal.csv ├── contributorWithoutDialogueGender.csv ├── episodes.tsv ├── exportedDataset.csv ├── gender.csv └── tags.csv ├── notebooks ├── .DS_Store ├── .ipynb_checkpoints │ ├── createAct1Csv-checkpoint.ipynb │ └── createAct3Csv-checkpoint.ipynb ├── createAct1Csv.ipynb └── createAct3Csv.ipynb └── python ├── .DS_Store ├── autoClassifyGender.py ├── createBaseCsvsForAnalsyis.py ├── manuallyClassifyGender.py ├── scrapeContributorData.py ├── scrapeEpisodeData.py ├── scrapeTagsOfActs.py └── scrapeTranscripts.py /README.md: -------------------------------------------------------------------------------- 1 | # this-american-life 2 | Methodology and data for [Listen to Her](https://pudding.cool/09/17/this-american-life), an essay on the gender disparity on the popular radio program, This American Life. 3 | 4 | ## `/python` 5 | Python scripts to scrape and format data from thisamericanlife.org 6 | Also contains gender classification scripts 7 | 8 | ## `/notebooks` 9 | iPython notebooks for data analysis 10 | 11 | ## Dataset and `/data` 12 | [Google Drive spreadsheet](https://docs.google.com/spreadsheets/d/1KpGZzeBawsGsiYHhFgCkHFSImFlS2sdWFI4pnpUWdLQ/) 13 | 14 | Folder contains `csv` and `tsv` files with dialogue, speaker, episode, act info. 15 | Files including exact text from transcripts are omitted due to copyright. 16 | -------------------------------------------------------------------------------- /data/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-pudding/this-american-life/81feb975fabaf742fa81c15d87bdecff5d362075/data/.DS_Store -------------------------------------------------------------------------------- /data/act1.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-pudding/this-american-life/81feb975fabaf742fa81c15d87bdecff5d362075/data/act1.csv -------------------------------------------------------------------------------- /data/act3.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-pudding/this-american-life/81feb975fabaf742fa81c15d87bdecff5d362075/data/act3.csv -------------------------------------------------------------------------------- /data/contributorForEachActFinal.csv: -------------------------------------------------------------------------------- 1 | episode-act,name 2 | 33.01,- 3 | 36.01,- 4 | 622.02,Aaron Reiss 5 | 396.03,Aaron Scott 6 | 128.04,Achy Obejas 7 | 199.01,Adam Beckman 8 | 199.02,Adam Beckman 9 | 88.03,Adam Davidson 10 | 94.03,Adam Davidson 11 | 109.05,Adam Davidson 12 | 123.02,Adam Davidson 13 | 171.03,Adam Davidson 14 | 182.03,Adam Davidson 15 | 190.03,Adam Davidson 16 | 217.02,Adam Davidson 17 | 222.03,Adam Davidson 18 | 227.02,Adam Davidson 19 | 240.03,Adam Davidson 20 | 324.01,Adam Davidson 21 | 351.03,Adam Davidson 22 | 355.01,Adam Davidson 23 | 355.02,Adam Davidson 24 | 365.01,Adam Davidson 25 | 365.04,Adam Davidson 26 | 366.04,Adam Davidson 27 | 373.04,Adam Davidson 28 | 375.01,Adam Davidson 29 | 376.01,Adam Davidson 30 | 384.03,Adam Davidson 31 | 390,Adam Davidson 32 | 390.01,Adam Davidson 33 | 390.02,Adam Davidson 34 | 392.02,Adam Davidson 35 | 395.01,Adam Davidson 36 | 397.05,Adam Davidson 37 | 399.02,Adam Davidson 38 | 408.01,Adam Davidson 39 | 415.01,Adam Davidson 40 | 435.03,Adam Davidson 41 | 435.04,Adam Davidson 42 | 261.02,Adam Felber 43 | 177.02,Adam Gopnik 44 | 265.03,Adam Sternbergh 45 | 611.01,Adia White 46 | 144.02,Adrian Nicole LeBlanc 47 | 193.02,Adrian Nicole LeBlanc 48 | 250.03,Adrian Nicole LeBlanc 49 | 569.02,Ahamefule Oluo 50 | 164.04,Aimee Bender 51 | 269.03,Aimee Bender 52 | 264.03,Aimee Phan 53 | 590,Alain De Botton 54 | 319,Albert Donnay 55 | 91.02,Alex Blumberg 56 | 115.04,Alex Blumberg 57 | 141.01,Alex Blumberg 58 | 151.03,Alex Blumberg 59 | 159.01,Alex Blumberg 60 | 171.02,Alex Blumberg 61 | 173.01,Alex Blumberg 62 | 177.01,Alex Blumberg 63 | 180.03,Alex Blumberg 64 | 196.03,Alex Blumberg 65 | 202.02,Alex Blumberg 66 | 206.01,Alex Blumberg 67 | 220,Alex Blumberg 68 | 224.01,Alex Blumberg 69 | 236.02,Alex Blumberg 70 | 238,Alex Blumberg 71 | 250.02,Alex Blumberg 72 | 258.01,Alex Blumberg 73 | 265.02,Alex Blumberg 74 | 272.02,Alex Blumberg 75 | 293.01,Alex Blumberg 76 | 294.01,Alex Blumberg 77 | 296.02,Alex Blumberg 78 | 296.03,Alex Blumberg 79 | 300.01,Alex Blumberg 80 | 316,Alex Blumberg 81 | 319.01,Alex Blumberg 82 | 320.01,Alex Blumberg 83 | 320.03,Alex Blumberg 84 | 325.03,Alex Blumberg 85 | 329.02,Alex Blumberg 86 | 332.04,Alex Blumberg 87 | 351.01,Alex Blumberg 88 | 355.01,Alex Blumberg 89 | 355.02,Alex Blumberg 90 | 363.02,Alex Blumberg 91 | 365.01,Alex Blumberg 92 | 365.02,Alex Blumberg 93 | 366.04,Alex Blumberg 94 | 373.04,Alex Blumberg 95 | 375.01,Alex Blumberg 96 | 382.02,Alex Blumberg 97 | 384.03,Alex Blumberg 98 | 390.01,Alex Blumberg 99 | 390.02,Alex Blumberg 100 | 392.02,Alex Blumberg 101 | 397.05,Alex Blumberg 102 | 400.03,Alex Blumberg 103 | 405.01,Alex Blumberg 104 | 410.02,Alex Blumberg 105 | 415.02,Alex Blumberg 106 | 423.02,Alex Blumberg 107 | 441.01,Alex Blumberg 108 | 441.02,Alex Blumberg 109 | 448.01,Alex Blumberg 110 | 455,Alex Blumberg 111 | 461.01,Alex Blumberg 112 | 463.01,Alex Blumberg 113 | 473.01,Alex Blumberg 114 | 477.04,Alex Blumberg 115 | 496.01,Alex Blumberg 116 | 496.02,Alex Blumberg 117 | 517.01,Alex Blumberg 118 | 518.03,Alex Blumberg 119 | 524.01,Alex Blumberg 120 | 527,Alex Blumberg 121 | 527.01,Alex Blumberg 122 | 605.04,Alex Blumberg 123 | 378.01,Alex French 124 | 159.02,Alex Kotlowitz 125 | 170.03,Alex Kotlowitz 126 | 179.01,Alex Kotlowitz 127 | 179.02,Alex Kotlowitz 128 | 179.03,Alex Kotlowitz 129 | 179.04,Alex Kotlowitz 130 | 271.02,Alex Kotlowitz 131 | 298.01,Alex Kotlowitz 132 | 318.01,Alex Kotlowitz 133 | 358,Alex Kotlowitz 134 | 376.04,Alex Kotlowitz 135 | 484.02,Alex Kotlowitz 136 | 488.01,Alex Kotlowitz 137 | 488.04,Alex Kotlowitz 138 | 315.01,Alex Lane 139 | 415.03,Alex MacInnis 140 | 240,Alex Meyer 141 | 137,Alexa Junge 142 | 183.02,Alexa Junge 143 | 293.04,Alexa Junge 144 | 216.04,Ali Davis 145 | 16.02,Alix Spiegel 146 | 43.03,Alix Spiegel 147 | 58.02,Alix Spiegel 148 | 59.02,Alix Spiegel 149 | 77.01,Alix Spiegel 150 | 101.01,Alix Spiegel 151 | 113.01,Alix Spiegel 152 | 120.01,Alix Spiegel 153 | 120.03,Alix Spiegel 154 | 142.01,Alix Spiegel 155 | 142.02,Alix Spiegel 156 | 158.03,Alix Spiegel 157 | 163.02,Alix Spiegel 158 | 183.01,Alix Spiegel 159 | 189.01,Alix Spiegel 160 | 189.02,Alix Spiegel 161 | 204.01,Alix Spiegel 162 | 204.02,Alix Spiegel 163 | 215.01,Alix Spiegel 164 | 317.01,Alix Spiegel 165 | 322.01,Alix Spiegel 166 | 391.01,Alix Spiegel 167 | 436.01,Alix Spiegel 168 | 445.05,Alix Spiegel 169 | 544,Alix Spiegel 170 | 544.01,Alix Spiegel 171 | 544.02,Alix Spiegel 172 | 60,Allen Ginsberg 173 | 428.01,Allison Silverman 174 | 119.02,Amanda Coyne 175 | 134.03,Amanda Marks 176 | 308,Amy Dickinson 177 | 216.03,Amy Dorn 178 | 453.01,Amy Drozdowska-McGuire 179 | 284.02,Amy O'Leary 180 | 302.02,Amy O'Leary 181 | 358.03,Amy Silverman 182 | 618.01,Ana Adlerstein 183 | 246.01,Andrea Morningstar 184 | 461.01,Andrea Seabrook 185 | 311.04,Andy Raskin 186 | 185.01,Ann Heppermann 187 | 501.02,Ann Heppermann 188 | 394.03,Anna Boiko Weyrauch 189 | 130.02,Anna Lengyl 190 | 525.02,Anna Sale 191 | 104.03,Anne Lamott 192 | 117.01,Annie Cheney 193 | 409.01,Annie Correal 194 | 497.02,Annie Correal 195 | 572.01,Anthony DeVito 196 | 235,Anthony Swofford 197 | 282.01,Anya Bourg 198 | 282.02,Anya Bourg 199 | 408.02,Apricot Irving 200 | 529.02,Ariel Sabar 201 | 568.02,Ariel Sabar 202 | 337.02,Arthur Phillips 203 | 623.02,Azie Dungey 204 | 559.02,Aziz Ansari 205 | 90.03,Barrett Golding 206 | 6.01,Beau O'Reilly 207 | 21.02,Beau O'Reilly 208 | 25.04,Beau O'Reilly 209 | 33.02,Beau O'Reilly 210 | 63.02,Beau O'Reilly 211 | 159.03,Beau O'Reilly 212 | 301.02,Beau O'Reilly 213 | 414.01,Ben Calhoun 214 | 417.01,Ben Calhoun 215 | 439.01,Ben Calhoun 216 | 461.02,Ben Calhoun 217 | 484.01,Ben Calhoun 218 | 488.02,Ben Calhoun 219 | 488.05,Ben Calhoun 220 | 509.03,Ben Calhoun 221 | 515,Ben Calhoun 222 | 515.01,Ben Calhoun 223 | 534,Ben Calhoun 224 | 551,Ben Calhoun 225 | 551.01,Ben Calhoun 226 | 288.03,Ben Karlin 227 | 486.03,Ben Loory 228 | 498.03,Ben Loory 229 | 527.03,Ben Loory 230 | 245.04,Bernard Cooper 231 | 224.02,Beth Landau 232 | 278.02,Beth Lisick 233 | 53.02,Bia Lowe 234 | 567.02,Bianca Giaever 235 | 158.01,Bill Buford 236 | 394.04,Bill Cotter 237 | 319.02,Bill Eville 238 | 202.03,Bill Lychak 239 | 558.01,Blair Braverman 240 | 75.04,Blake Eskin 241 | 82.02,Blake Eskin 242 | 574.05,Blake Eskin 243 | 162.03,Blue Chevigny 244 | 169,Blue Chevigny 245 | 170.01,Blue Chevigny 246 | 229.03,Blue Chevigny 247 | 242.04,Blue Chevigny 248 | 572,Bob Carlson 249 | 141.02,Brady Udall 250 | 154.03,Brady Udall 251 | 336.03,Brady Udall 252 | 149.03,Brent Runyon 253 | 209.02,Brent Runyon 254 | 265.04,Brent Runyon 255 | 53.01,Brett Leveridge 256 | 307.01,Brett Martin 257 | 311.03,Brett Martin 258 | 342.02,Brett Martin 259 | 426.04,Brett Martin 260 | 19.03,Brian Gilmore 261 | 287.03,Brian Montopolis 262 | 513.09,Brian Reed 263 | 524.05,Brian Reed 264 | 536.02,Brian Reed 265 | 547.01,Brian Reed 266 | 547.02,Brian Reed 267 | 554.02,Brian Reed 268 | 584.03,Brian Reed 269 | 621.01,Brian Reed 270 | 309.04,Brian Thomas Gallagher 271 | 182.04,Bruce Jay Friedman 272 | 81.03,Bryn Magnus 273 | 480.02,Camas Davis 274 | 54.05,Camden Joy 275 | 102.02,Candido Tirado 276 | 197.01,Carl Marziali 277 | 242.01,Carl Marziali 278 | 274.02,Carl Marziali 279 | 404.01,Carl Marziali 280 | 361,Carlos Schenck 281 | 35.04,Carmen Delzell 282 | 43.04,Carmen Delzell 283 | 102.02,Carmen Rivera 284 | 284.03,Catherine Keener 285 | 68.04,Cecilia Vaisman 286 | 106.01,Chana Joffe-Walt 287 | 377.02,Chana Joffe-Walt 288 | 382.01,Chana Joffe-Walt 289 | 392.01,Chana Joffe-Walt 290 | 395.01,Chana Joffe-Walt 291 | 408.01,Chana Joffe-Walt 292 | 412.03,Chana Joffe-Walt 293 | 418.01,Chana Joffe-Walt 294 | 418.02,Chana Joffe-Walt 295 | 418.03,Chana Joffe-Walt 296 | 418.04,Chana Joffe-Walt 297 | 418.05,Chana Joffe-Walt 298 | 423.01,Chana Joffe-Walt 299 | 433.01,Chana Joffe-Walt 300 | 435.01,Chana Joffe-Walt 301 | 455,Chana Joffe-Walt 302 | 483.02,Chana Joffe-Walt 303 | 490,Chana Joffe-Walt 304 | 490.01,Chana Joffe-Walt 305 | 490.02,Chana Joffe-Walt 306 | 525.03,Chana Joffe-Walt 307 | 527.02,Chana Joffe-Walt 308 | 530.01,Chana Joffe-Walt 309 | 532.02,Chana Joffe-Walt 310 | 538.03,Chana Joffe-Walt 311 | 550,Chana Joffe-Walt 312 | 550.01,Chana Joffe-Walt 313 | 550.02,Chana Joffe-Walt 314 | 557,Chana Joffe-Walt 315 | 557.01,Chana Joffe-Walt 316 | 563,Chana Joffe-Walt 317 | 563.01,Chana Joffe-Walt 318 | 563.02,Chana Joffe-Walt 319 | 573.03,Chana Joffe-Walt 320 | 583,Chana Joffe-Walt 321 | 583.03,Chana Joffe-Walt 322 | 583.04,Chana Joffe-Walt 323 | 620,Chana Joffe-Walt 324 | 62.01,Chapin Wilson 325 | 366.02,Charles Duhigg 326 | 257.02,Charles Monroe-Kane 327 | 353.03,Charlie Savage 328 | 256.03,Chelsea Merz 329 | 446.03,Chelsea Merz 330 | 45.04,Cheryl Trykv 331 | 50.04,Cheryl Trykv 332 | 102.04,Cheryl Trykv 333 | 129.03,Cheryl Trykv 334 | 184.02,Cheryl Wagner 335 | 296.04,Cheryl Wagner 336 | 307.02,Cheryl Wagner 337 | 316.04,Cheryl Wagner 338 | 380.01,Chris Arnold 339 | 122.02,Chris Brookes 340 | 201.03,Chris Brookes 341 | 576.01,Chris Gethard 342 | 584.02,Chris Gethard 343 | 612.03,Chris Gethard 344 | 409.03,Chris Higgins 345 | 359.02,Chris Neary 346 | 445.03,Chris Neary 347 | 302.01,Chris Tenove 348 | 68.04,Christina Egloff 349 | 148.04,Christine Coyle 350 | 56.02,Christopher Cerf 351 | 542.01,Christopher Rhoads 352 | 241.18,Chuck Klosterman 353 | 244.01,Chuck Klosterman 354 | 362.02,Chuck Klosterman 355 | 267.03,Claire Beckmann 356 | 373.02,Claire Hoffman 357 | 20.04,Claudia Perez 358 | 50.03,Claudia Perez 359 | 302.02,Colby Buzzell 360 | 567.01,Courtney Stein 361 | 190.01,Cris Beam 362 | 214.01,Cris Beam 363 | 448.02,Cristin Milioti 364 | 216.05,Curtis Sittenfeld 365 | 248.04,Curtis Sittenfeld 366 | 279.03,Curtis Sittenfeld 367 | 308.02,Czerina Patel 368 | 31.01,Dael Orlandersmith 369 | 37.03,Dan Collison 370 | 83.02,Dan Collison 371 | 133.04,Dan Collison 372 | 570,Dan Ephron 373 | 570.01,Dan Ephron 374 | 570.02,Dan Ephron 375 | 108.01,Dan Gediman 376 | 279.05,Dan Neil 377 | 32.02,Dan Savage 378 | 46.04,Dan Savage 379 | 92.02,Dan Savage 380 | 95.02,Dan Savage 381 | 106.03,Dan Savage 382 | 113.02,Dan Savage 383 | 129.02,Dan Savage 384 | 139.02,Dan Savage 385 | 183.04,Dan Savage 386 | 293.02,Dan Savage 387 | 316.01,Dan Savage 388 | 328.04,Dan Savage 389 | 341.03,Dan Savage 390 | 379.03,Dan Savage 391 | 594.01,Dana Chivvis 392 | 616.01,Dana Chivvis 393 | 123.03,Dani Shapiro 394 | 393.03,Dani Shapiro 395 | 420.02,Daniel Beirne 396 | 589.04,Daniel Engber 397 | 37.04,Daniel Orozco 398 | 43.05,Daniel Pinkwater 399 | 139.03,Daniel Portado 400 | 29.03,Danny Drennan 401 | 34.04,Danny Drennan 402 | 65.03,Danny Drennan 403 | 133.02,Danny Hoch 404 | 134.02,Danny Hoch 405 | 456.02,Danny Lobell 406 | 359.01,Darin Strauss 407 | 117.03,Dave Eggers 408 | 140.03,Dave Eggers 409 | 448.02,Dave Eggers 410 | 373,Dave Hill 411 | 373.01,Dave Hill 412 | 395.03,Dave Hill 413 | 401,Dave Hill 414 | 422.06,Dave Hill 415 | 475.02,Dave Hill 416 | 214,David Kestenbaum 417 | 229.02,David Kestenbaum 418 | 382.02,David Kestenbaum 419 | 392.03,David Kestenbaum 420 | 413.01,David Kestenbaum 421 | 418.01,David Kestenbaum 422 | 418.02,David Kestenbaum 423 | 418.03,David Kestenbaum 424 | 418.04,David Kestenbaum 425 | 418.05,David Kestenbaum 426 | 423.02,David Kestenbaum 427 | 431.03,David Kestenbaum 428 | 434.05,David Kestenbaum 429 | 503.01,David Kestenbaum 430 | 602.07,David Kestenbaum 431 | 608.06,David Kestenbaum 432 | 611.02,David Kestenbaum 433 | 612.02,David Kestenbaum 434 | 317.02,Dave Royko 435 | 69.02,David Beers 436 | 364.02,David Berkeley 437 | 588.03,David Berkeley 438 | 176.02,David Brock 439 | 91.03,David Cale 440 | 203.04,David Cossin 441 | 326.03,David Ellis Dickerson 442 | 332.05,David Ellis Dickerson 443 | 340.03,David Ellis Dickerson 444 | 358.02,David Ellis Dickerson 445 | 394.02,David Ellis Dickerson 446 | 432.01,David Ellis Dickerson 447 | 577.01,David Epstein 448 | 429.01,David Finkel 449 | 160.02,David Foster Wallace 450 | 391,David Frum 451 | 312.01,David Hauptschein 452 | 312.02,David Hauptschein 453 | 531,David Hill 454 | 531.01,David Hill 455 | 425.01,David Holthouse 456 | 17.03,David Isaacson 457 | 25.03,David Isaacson 458 | 610.02,David Kestenbaum 459 | 617,David Kestenbaum 460 | 617.01,David Kestenbaum 461 | 619,David Kestenbaum 462 | 619.01,David Kestenbaum 463 | 619.02,David Kestenbaum 464 | 620.01,David Kestenbaum 465 | 101.01,David Kodeski 466 | 399.03,David MacLean 467 | 12.02,David Rakoff 468 | 47.03,David Rakoff 469 | 49.02,David Rakoff 470 | 65.01,David Rakoff 471 | 116.04,David Rakoff 472 | 118.03,David Rakoff 473 | 124.01,David Rakoff 474 | 140.01,David Rakoff 475 | 146.01,David Rakoff 476 | 156.01,David Rakoff 477 | 169.01,David Rakoff 478 | 192.03,David Rakoff 479 | 194.02,David Rakoff 480 | 208.02,David Rakoff 481 | 220.03,David Rakoff 482 | 241.15,David Rakoff 483 | 248,David Rakoff 484 | 259.02,David Rakoff 485 | 305.01,David Rakoff 486 | 328.01,David Rakoff 487 | 343.04,David Rakoff 488 | 345.01,David Rakoff 489 | 354.02,David Rakoff 490 | 386.02,David Rakoff 491 | 389.03,David Rakoff 492 | 433.02,David Rakoff 493 | 464.03,David Rakoff 494 | 3.05,David Sedaris 495 | 4.03,David Sedaris 496 | 6,David Sedaris 497 | 11.04,David Sedaris 498 | 12.02,David Sedaris 499 | 23.01,David Sedaris 500 | 27.01,David Sedaris 501 | 28.01,David Sedaris 502 | 35.01,David Sedaris 503 | 44.04,David Sedaris 504 | 47.02,David Sedaris 505 | 49.02,David Sedaris 506 | 52.03,David Sedaris 507 | 57.03,David Sedaris 508 | 60.04,David Sedaris 509 | 73.02,David Sedaris 510 | 82.03,David Sedaris 511 | 87.01,David Sedaris 512 | 87.03,David Sedaris 513 | 97.01,David Sedaris 514 | 99.01,David Sedaris 515 | 104.01,David Sedaris 516 | 136.02,David Sedaris 517 | 137.02,David Sedaris 518 | 141.02,David Sedaris 519 | 148.05,David Sedaris 520 | 154.01,David Sedaris 521 | 161.06,David Sedaris 522 | 173.03,David Sedaris 523 | 193.03,David Sedaris 524 | 194.04,David Sedaris 525 | 198.01,David Sedaris 526 | 201.02,David Sedaris 527 | 214.03,David Sedaris 528 | 221.03,David Sedaris 529 | 225.05,David Sedaris 530 | 235.03,David Sedaris 531 | 240.01,David Sedaris 532 | 241.11,David Sedaris 533 | 257.03,David Sedaris 534 | 277.01,David Sedaris 535 | 288.02,David Sedaris 536 | 303.03,David Sedaris 537 | 305.04,David Sedaris 538 | 308.03,David Sedaris 539 | 315.03,David Sedaris 540 | 319.04,David Sedaris 541 | 464.04,David Sedaris 542 | 517.04,David Sedaris 543 | 268.01,David Segal 544 | 279.01,David Segal 545 | 281.01,David Segal 546 | 285.02,David Segal 547 | 309.03,David Segal 548 | 401.01,David Segal 549 | 531.02,David Segal 550 | 568.03,David Segal 551 | 283.01,David Wilcox 552 | 325.02,David Wilcox 553 | 595.01,David Zax 554 | 184.01,Davy Rothbart 555 | 212.01,Davy Rothbart 556 | 239.03,Davy Rothbart 557 | 262.01,Davy Rothbart 558 | 306.03,Davy Rothbart 559 | 327.01,Davy Rothbart 560 | 89.03,Deb Monroe 561 | 110.04,Deb Monroe 562 | 317,Deborah Blum 563 | 209.01,Debra Gwartney 564 | 298.02,Diane Cook 565 | 44.02,Dick Orkin 566 | 44.06,Dick Orkin 567 | 148.04,Dick Orkin 568 | 57.01,Dierdre Dolan 569 | 74.02,Dishwasher Pete 570 | 102.01,Dishwasher Pete 571 | 115.01,Dishwasher Pete 572 | 344.02,Dmae Roberts 573 | 449.03,Domingo Martinez 574 | 526.01,Domingo Martinez 575 | 89.04,Donald Antrim 576 | 93.03,Donald Hall 577 | 13.01,Doris Wilbur 578 | 329.04,Douglas McGray 579 | 338.02,Douglas McGray 580 | 364.03,Douglas McGray 581 | 131.02,Ed Dixon 582 | 270.01,Eddie Schmidt 583 | 422.02,Edith Zimmerman 584 | 603.01,Eleanor Gordon-Smith 585 | 302,Eli Ramirez 586 | 234.04,Elizabeth Gilbert 587 | 244.03,Elizabeth Gilbert 588 | 116,Elizabeth Meister 589 | 343,Elizabeth Meister 590 | 336.01,Ellen Horne 591 | 313,Ellen Spiro 592 | 347.03,Elna Baker 593 | 421.03,Elna Baker 594 | 483.01,Elna Baker 595 | 506.02,Elna Baker 596 | 524.02,Elna Baker 597 | 541,Elna Baker 598 | 558.04,Elna Baker 599 | 589.02,Elna Baker 600 | 602.09,Elna Baker 601 | 610.03,Elna Baker 602 | 571.02,Elsa Waithe 603 | 306.04,Elsbeth Carruthers 604 | 497.06,Emily Bazelon 605 | 112.03,Emily Colas 606 | 541.01,Emily Hsiao 607 | 596.02,Emmanuel Dzotsi 608 | 602.11,Emmanuel Dzotsi 609 | 285.01,Enid Graham 610 | 315.01,Eric Holm 611 | 346.01,Eric Klinenberg 612 | 434.07,Eric Mennel 613 | 301,Erin EInhorn 614 | 301.01,Erin EInhorn 615 | 161.05,Ernest Castle 616 | 242.03,Etgar Keret 617 | 274.04,Etgar Keret 618 | 285.03,Etgar Keret 619 | 357.01,Etgar Keret 620 | 381.04,Etgar Keret 621 | 393.04,Etgar Keret 622 | 397.04,Etgar Keret 623 | 404.04,Etgar Keret 624 | 428.04,Etgar Keret 625 | 468,Etgar Keret 626 | 518.05,Etgar Keret 627 | 559.04,Etgar Keret 628 | 577.03,Etgar Keret 629 | 413.02,Eugene Mirman 630 | 467.01,Evan Osnos 631 | 575.04,Evan Osnos 632 | 327.03,Eve Abrams 633 | 578.03,Eve Abrams 634 | 144.01,Felicity Jones 635 | 193.01,Felicity Jones 636 | 244.02,Felix Solis 637 | 448.02,Fiona Maazel 638 | 112.04,Frank Browning 639 | 403.01,Frank Langfitt 640 | 403.02,Frank Langfitt 641 | 561.01,Frank Langfitt 642 | 561.02,Frank Langfitt 643 | 227.04,Gabe Hudson 644 | 422.04,Gabe Liedman 645 | 330.02,Gabriel Delahaye 646 | 450.01,Gabriel Rhodes 647 | 288.01,Gabrielle Galanek 648 | 54.04,Gay Talese 649 | 574.01,Gay Talese 650 | 313.01,Gene Cheek 651 | 144.01,Genevieve Jurgensen 652 | 193.01,Genevieve Jurgensen 653 | 134.01,Geoff Dyer 654 | 81.02,Geoffrey Canada 655 | 157.01,George Gurley 656 | 213.01,George Ratliff 657 | 42.02,George Saunders 658 | 51.02,George Saunders 659 | 335.01,Gideon Yago 660 | 121.01,Gillian Aldrich 661 | 508.04,Glynn Washington 662 | 236.03,Greg Tate 663 | 264.02,Greg Warner 664 | 347.01,Greg Warner 665 | 369.01,Greg Warner 666 | 388.02,Greg Warner 667 | 39.06,Gregory Whitehead 668 | 247.02,Griffin Hansbury 669 | 590.02,Harry Enten 670 | 152.03,Haruki Murakami 671 | 194.03,Haruki Murakami 672 | 197.02,Heather O'Neill 673 | 212.03,Heather O'Neill 674 | 222.04,Heather O'Neill 675 | 305.03,Heather O'Neill 676 | 82.04,Heather Woodbury 677 | 281,Helen Thorpe 678 | 273.01,Hilary Hoffman 679 | 131.04,Hillary Frank 680 | 140.04,Hillary Frank 681 | 150.03,Hillary Frank 682 | 166.02,Hillary Frank 683 | 175.01,Hillary Frank 684 | 259.03,Hillary Frank 685 | 263.04,Hillary Frank 686 | 345.03,Hillary Frank 687 | 351.04,Hillary Frank 688 | 549.02,Hillary Frank 689 | 583.01,Hillary Frank 690 | 53.04,Hilton Als 691 | 188.02,Howie Chackowicz 692 | 605.03,Howie Chackowicz 693 | 489.01,Hyder Akbar 694 | 95.03,Ian Brown 695 | 187.02,Ian Brown 696 | 255.01,Ian Brown 697 | 349.03,Ian Brown 698 | 100.01,Iggy Scam 699 | 146.05,Iggy Scam 700 | 185.03,Iggy Scam 701 | 1,Ira Glass 702 | 1.01,Ira Glass 703 | 1.02,Ira Glass 704 | 2,Ira Glass 705 | 3.01,Ira Glass 706 | 4.01,Ira Glass 707 | 5,Ira Glass 708 | 5.01,Ira Glass 709 | 6,Ira Glass 710 | 6.02,Ira Glass 711 | 7,Ira Glass 712 | 7.02,Ira Glass 713 | 8,Ira Glass 714 | 8.01,Ira Glass 715 | 8.02,Ira Glass 716 | 8.03,Ira Glass 717 | 9,Ira Glass 718 | 10,Ira Glass 719 | 10.01,Ira Glass 720 | 10.02,Ira Glass 721 | 10.03,Ira Glass 722 | 11.01,Ira Glass 723 | 11.03,Ira Glass 724 | 12,Ira Glass 725 | 13,Ira Glass 726 | 13.01,Ira Glass 727 | 14,Ira Glass 728 | 14.01,Ira Glass 729 | 14.02,Ira Glass 730 | 15,Ira Glass 731 | 16.01,Ira Glass 732 | 16.02,Ira Glass 733 | 16.04,Ira Glass 734 | 17,Ira Glass 735 | 17.01,Ira Glass 736 | 17.02,Ira Glass 737 | 19.02,Ira Glass 738 | 19.03,Ira Glass 739 | 20.01,Ira Glass 740 | 20.02,Ira Glass 741 | 20.03,Ira Glass 742 | 20.04,Ira Glass 743 | 21.03,Ira Glass 744 | 22,Ira Glass 745 | 22.01,Ira Glass 746 | 23,Ira Glass 747 | 23.02,Ira Glass 748 | 23.03,Ira Glass 749 | 24,Ira Glass 750 | 25.01,Ira Glass 751 | 25.02,Ira Glass 752 | 25.03,Ira Glass 753 | 25.04,Ira Glass 754 | 25.05,Ira Glass 755 | 27,Ira Glass 756 | 28,Ira Glass 757 | 28.02,Ira Glass 758 | 29,Ira Glass 759 | 29.02,Ira Glass 760 | 30.01,Ira Glass 761 | 32.01,Ira Glass 762 | 32.02,Ira Glass 763 | 34,Ira Glass 764 | 34.01,Ira Glass 765 | 34.02,Ira Glass 766 | 34.03,Ira Glass 767 | 35,Ira Glass 768 | 35.03,Ira Glass 769 | 37,Ira Glass 770 | 38.01,Ira Glass 771 | 38.03,Ira Glass 772 | 38.04,Ira Glass 773 | 39,Ira Glass 774 | 39.01,Ira Glass 775 | 39.02,Ira Glass 776 | 39.03,Ira Glass 777 | 39.05,Ira Glass 778 | 41.01,Ira Glass 779 | 42.01,Ira Glass 780 | 43.01,Ira Glass 781 | 43.02,Ira Glass 782 | 44.01,Ira Glass 783 | 44.05,Ira Glass 784 | 45.01,Ira Glass 785 | 46.03,Ira Glass 786 | 47.01,Ira Glass 787 | 48.01,Ira Glass 788 | 48.03,Ira Glass 789 | 49,Ira Glass 790 | 50,Ira Glass 791 | 50.01,Ira Glass 792 | 50.03,Ira Glass 793 | 51,Ira Glass 794 | 51.03,Ira Glass 795 | 52,Ira Glass 796 | 52.02,Ira Glass 797 | 53,Ira Glass 798 | 54,Ira Glass 799 | 54.01,Ira Glass 800 | 54.03,Ira Glass 801 | 55,Ira Glass 802 | 56,Ira Glass 803 | 57,Ira Glass 804 | 58,Ira Glass 805 | 59.02,Ira Glass 806 | 59.04,Ira Glass 807 | 60,Ira Glass 808 | 60.02,Ira Glass 809 | 62,Ira Glass 810 | 63,Ira Glass 811 | 63.04,Ira Glass 812 | 64,Ira Glass 813 | 65,Ira Glass 814 | 65.01,Ira Glass 815 | 67,Ira Glass 816 | 68,Ira Glass 817 | 68.01,Ira Glass 818 | 68.02,Ira Glass 819 | 69,Ira Glass 820 | 70,Ira Glass 821 | 71,Ira Glass 822 | 71.03,Ira Glass 823 | 72,Ira Glass 824 | 73,Ira Glass 825 | 74,Ira Glass 826 | 74.03,Ira Glass 827 | 75,Ira Glass 828 | 76,Ira Glass 829 | 77,Ira Glass 830 | 78.01,Ira Glass 831 | 78.03,Ira Glass 832 | 78.04,Ira Glass 833 | 78.05,Ira Glass 834 | 79,Ira Glass 835 | 79.01,Ira Glass 836 | 79.02,Ira Glass 837 | 80,Ira Glass 838 | 80.02,Ira Glass 839 | 81,Ira Glass 840 | 81.02,Ira Glass 841 | 82,Ira Glass 842 | 82.01,Ira Glass 843 | 83,Ira Glass 844 | 84.01,Ira Glass 845 | 84.02,Ira Glass 846 | 85,Ira Glass 847 | 85.02,Ira Glass 848 | 85.04,Ira Glass 849 | 87,Ira Glass 850 | 87.03,Ira Glass 851 | 88,Ira Glass 852 | 88.01,Ira Glass 853 | 88.02,Ira Glass 854 | 88.04,Ira Glass 855 | 89,Ira Glass 856 | 89.01,Ira Glass 857 | 89.03,Ira Glass 858 | 90,Ira Glass 859 | 90.01,Ira Glass 860 | 90.03,Ira Glass 861 | 91.01,Ira Glass 862 | 92,Ira Glass 863 | 93,Ira Glass 864 | 94,Ira Glass 865 | 94.01,Ira Glass 866 | 95,Ira Glass 867 | 95.01,Ira Glass 868 | 96,Ira Glass 869 | 97,Ira Glass 870 | 97.02,Ira Glass 871 | 97.11,Ira Glass 872 | 98,Ira Glass 873 | 99,Ira Glass 874 | 99.03,Ira Glass 875 | 99.04,Ira Glass 876 | 100,Ira Glass 877 | 100.03,Ira Glass 878 | 100.04,Ira Glass 879 | 102,Ira Glass 880 | 104,Ira Glass 881 | 105,Ira Glass 882 | 105.01,Ira Glass 883 | 105.02,Ira Glass 884 | 106,Ira Glass 885 | 106.04,Ira Glass 886 | 107,Ira Glass 887 | 108,Ira Glass 888 | 109,Ira Glass 889 | 109.01,Ira Glass 890 | 109.02,Ira Glass 891 | 110,Ira Glass 892 | 110.01,Ira Glass 893 | 111,Ira Glass 894 | 111.01,Ira Glass 895 | 111.02,Ira Glass 896 | 112,Ira Glass 897 | 112.01,Ira Glass 898 | 112.02,Ira Glass 899 | 113,Ira Glass 900 | 113.03,Ira Glass 901 | 114,Ira Glass 902 | 114.03,Ira Glass 903 | 114.05,Ira Glass 904 | 115,Ira Glass 905 | 115.02,Ira Glass 906 | 116,Ira Glass 907 | 116.02,Ira Glass 908 | 116.03,Ira Glass 909 | 117,Ira Glass 910 | 118,Ira Glass 911 | 118.02,Ira Glass 912 | 119,Ira Glass 913 | 120,Ira Glass 914 | 122.01,Ira Glass 915 | 123,Ira Glass 916 | 124,Ira Glass 917 | 125,Ira Glass 918 | 125.01,Ira Glass 919 | 125.02,Ira Glass 920 | 125.04,Ira Glass 921 | 126,Ira Glass 922 | 126.01,Ira Glass 923 | 126.02,Ira Glass 924 | 127,Ira Glass 925 | 128,Ira Glass 926 | 128.02,Ira Glass 927 | 129,Ira Glass 928 | 129.02,Ira Glass 929 | 130,Ira Glass 930 | 130.02,Ira Glass 931 | 131,Ira Glass 932 | 131.01,Ira Glass 933 | 132,Ira Glass 934 | 132.01,Ira Glass 935 | 133,Ira Glass 936 | 133.03,Ira Glass 937 | 134,Ira Glass 938 | 135,Ira Glass 939 | 136,Ira Glass 940 | 136.01,Ira Glass 941 | 137,Ira Glass 942 | 137.01,Ira Glass 943 | 138,Ira Glass 944 | 138.02,Ira Glass 945 | 139,Ira Glass 946 | 140,Ira Glass 947 | 141,Ira Glass 948 | 141.03,Ira Glass 949 | 142,Ira Glass 950 | 143,Ira Glass 951 | 143.01,Ira Glass 952 | 143.02,Ira Glass 953 | 143.03,Ira Glass 954 | 144,Ira Glass 955 | 145.01,Ira Glass 956 | 146,Ira Glass 957 | 146.02,Ira Glass 958 | 147.01,Ira Glass 959 | 147.02,Ira Glass 960 | 147.03,Ira Glass 961 | 147.04,Ira Glass 962 | 147.05,Ira Glass 963 | 147.06,Ira Glass 964 | 147.07,Ira Glass 965 | 148,Ira Glass 966 | 149,Ira Glass 967 | 150,Ira Glass 968 | 150.02,Ira Glass 969 | 150.04,Ira Glass 970 | 151,Ira Glass 971 | 152,Ira Glass 972 | 152.02,Ira Glass 973 | 153,Ira Glass 974 | 154,Ira Glass 975 | 154.02,Ira Glass 976 | 155,Ira Glass 977 | 155.01,Ira Glass 978 | 155.03,Ira Glass 979 | 156,Ira Glass 980 | 157,Ira Glass 981 | 158,Ira Glass 982 | 159,Ira Glass 983 | 160,Ira Glass 984 | 160.01,Ira Glass 985 | 160.03,Ira Glass 986 | 160.04,Ira Glass 987 | 161,Ira Glass 988 | 161.01,Ira Glass 989 | 161.04,Ira Glass 990 | 161.07,Ira Glass 991 | 162,Ira Glass 992 | 163,Ira Glass 993 | 163.01,Ira Glass 994 | 164,Ira Glass 995 | 164.01,Ira Glass 996 | 165,Ira Glass 997 | 165.01,Ira Glass 998 | 165.02,Ira Glass 999 | 165.03,Ira Glass 1000 | 166,Ira Glass 1001 | 166.03,Ira Glass 1002 | 167,Ira Glass 1003 | 168,Ira Glass 1004 | 168.01,Ira Glass 1005 | 168.02,Ira Glass 1006 | 169,Ira Glass 1007 | 170,Ira Glass 1008 | 170.02,Ira Glass 1009 | 171,Ira Glass 1010 | 172.01,Ira Glass 1011 | 172.02,Ira Glass 1012 | 173,Ira Glass 1013 | 174,Ira Glass 1014 | 174.02,Ira Glass 1015 | 175.03,Ira Glass 1016 | 176,Ira Glass 1017 | 176.01,Ira Glass 1018 | 176.03,Ira Glass 1019 | 176.04,Ira Glass 1020 | 176.05,Ira Glass 1021 | 177,Ira Glass 1022 | 177.03,Ira Glass 1023 | 178,Ira Glass 1024 | 178.03,Ira Glass 1025 | 178.04,Ira Glass 1026 | 179,Ira Glass 1027 | 179.01,Ira Glass 1028 | 179.02,Ira Glass 1029 | 179.03,Ira Glass 1030 | 179.04,Ira Glass 1031 | 180,Ira Glass 1032 | 180.01,Ira Glass 1033 | 180.02,Ira Glass 1034 | 181,Ira Glass 1035 | 182,Ira Glass 1036 | 182.02,Ira Glass 1037 | 183,Ira Glass 1038 | 184,Ira Glass 1039 | 185,Ira Glass 1040 | 185.02,Ira Glass 1041 | 186,Ira Glass 1042 | 186.02,Ira Glass 1043 | 186.03,Ira Glass 1044 | 187,Ira Glass 1045 | 187.01,Ira Glass 1046 | 188,Ira Glass 1047 | 188.01,Ira Glass 1048 | 189,Ira Glass 1049 | 190,Ira Glass 1050 | 190.03,Ira Glass 1051 | 191.01,Ira Glass 1052 | 192,Ira Glass 1053 | 192.02,Ira Glass 1054 | 193,Ira Glass 1055 | 194,Ira Glass 1056 | 194.01,Ira Glass 1057 | 194.05,Ira Glass 1058 | 195,Ira Glass 1059 | 195.01,Ira Glass 1060 | 195.02,Ira Glass 1061 | 196,Ira Glass 1062 | 197.01,Ira Glass 1063 | 198,Ira Glass 1064 | 199,Ira Glass 1065 | 200,Ira Glass 1066 | 201,Ira Glass 1067 | 202,Ira Glass 1068 | 202.01,Ira Glass 1069 | 203,Ira Glass 1070 | 204,Ira Glass 1071 | 205,Ira Glass 1072 | 205.03,Ira Glass 1073 | 206.01,Ira Glass 1074 | 207,Ira Glass 1075 | 207.01,Ira Glass 1076 | 208,Ira Glass 1077 | 209,Ira Glass 1078 | 210,Ira Glass 1079 | 210.02,Ira Glass 1080 | 211,Ira Glass 1081 | 211.02,Ira Glass 1082 | 212,Ira Glass 1083 | 212.02,Ira Glass 1084 | 213,Ira Glass 1085 | 213.02,Ira Glass 1086 | 214,Ira Glass 1087 | 215,Ira Glass 1088 | 216,Ira Glass 1089 | 216.01,Ira Glass 1090 | 217,Ira Glass 1091 | 217.02,Ira Glass 1092 | 218,Ira Glass 1093 | 219,Ira Glass 1094 | 220,Ira Glass 1095 | 220.01,Ira Glass 1096 | 220.02,Ira Glass 1097 | 220.03,Ira Glass 1098 | 221,Ira Glass 1099 | 221.01,Ira Glass 1100 | 222,Ira Glass 1101 | 222.01,Ira Glass 1102 | 223,Ira Glass 1103 | 224,Ira Glass 1104 | 225,Ira Glass 1105 | 225.02,Ira Glass 1106 | 225.03,Ira Glass 1107 | 227,Ira Glass 1108 | 227.01,Ira Glass 1109 | 227.03,Ira Glass 1110 | 228,Ira Glass 1111 | 229,Ira Glass 1112 | 230,Ira Glass 1113 | 231,Ira Glass 1114 | 231.03,Ira Glass 1115 | 232,Ira Glass 1116 | 233,Ira Glass 1117 | 234,Ira Glass 1118 | 234.03,Ira Glass 1119 | 235.06,Ira Glass 1120 | 236,Ira Glass 1121 | 239,Ira Glass 1122 | 241,Ira Glass 1123 | 242,Ira Glass 1124 | 242.02,Ira Glass 1125 | 243,Ira Glass 1126 | 244,Ira Glass 1127 | 245,Ira Glass 1128 | 245.02,Ira Glass 1129 | 246,Ira Glass 1130 | 249,Ira Glass 1131 | 249.01,Ira Glass 1132 | 249.03,Ira Glass 1133 | 250,Ira Glass 1134 | 251,Ira Glass 1135 | 251.03,Ira Glass 1136 | 252,Ira Glass 1137 | 252.01,Ira Glass 1138 | 252.02,Ira Glass 1139 | 252.04,Ira Glass 1140 | 253,Ira Glass 1141 | 255,Ira Glass 1142 | 256,Ira Glass 1143 | 257,Ira Glass 1144 | 257.04,Ira Glass 1145 | 258,Ira Glass 1146 | 259,Ira Glass 1147 | 260,Ira Glass 1148 | 261,Ira Glass 1149 | 261.01,Ira Glass 1150 | 262,Ira Glass 1151 | 262.02,Ira Glass 1152 | 263,Ira Glass 1153 | 263.01,Ira Glass 1154 | 263.03,Ira Glass 1155 | 264,Ira Glass 1156 | 265,Ira Glass 1157 | 266,Ira Glass 1158 | 267,Ira Glass 1159 | 267.01,Ira Glass 1160 | 268,Ira Glass 1161 | 269,Ira Glass 1162 | 270,Ira Glass 1163 | 271,Ira Glass 1164 | 271.01,Ira Glass 1165 | 272,Ira Glass 1166 | 272.01,Ira Glass 1167 | 272.04,Ira Glass 1168 | 273,Ira Glass 1169 | 274,Ira Glass 1170 | 274.01,Ira Glass 1171 | 274.03,Ira Glass 1172 | 275,Ira Glass 1173 | 275.01,Ira Glass 1174 | 275.02,Ira Glass 1175 | 276,Ira Glass 1176 | 276.01,Ira Glass 1177 | 277,Ira Glass 1178 | 277.02,Ira Glass 1179 | 278,Ira Glass 1180 | 279,Ira Glass 1181 | 280,Ira Glass 1182 | 280.01,Ira Glass 1183 | 282,Ira Glass 1184 | 284,Ira Glass 1185 | 285,Ira Glass 1186 | 286,Ira Glass 1187 | 287,Ira Glass 1188 | 288,Ira Glass 1189 | 289,Ira Glass 1190 | 289.01,Ira Glass 1191 | 290,Ira Glass 1192 | 290.01,Ira Glass 1193 | 291,Ira Glass 1194 | 291.02,Ira Glass 1195 | 292,Ira Glass 1196 | 293,Ira Glass 1197 | 294,Ira Glass 1198 | 295,Ira Glass 1199 | 295.01,Ira Glass 1200 | 296,Ira Glass 1201 | 296.01,Ira Glass 1202 | 297,Ira Glass 1203 | 297.02,Ira Glass 1204 | 298,Ira Glass 1205 | 299.01,Ira Glass 1206 | 300,Ira Glass 1207 | 300.03,Ira Glass 1208 | 303.01,Ira Glass 1209 | 305,Ira Glass 1210 | 306.01,Ira Glass 1211 | 307,Ira Glass 1212 | 308,Ira Glass 1213 | 309,Ira Glass 1214 | 311,Ira Glass 1215 | 312.01,Ira Glass 1216 | 312.02,Ira Glass 1217 | 313,Ira Glass 1218 | 314,Ira Glass 1219 | 315,Ira Glass 1220 | 316,Ira Glass 1221 | 316.02,Ira Glass 1222 | 317,Ira Glass 1223 | 318,Ira Glass 1224 | 318.02,Ira Glass 1225 | 319,Ira Glass 1226 | 320,Ira Glass 1227 | 320.02,Ira Glass 1228 | 320.03,Ira Glass 1229 | 321,Ira Glass 1230 | 322,Ira Glass 1231 | 323,Ira Glass 1232 | 324,Ira Glass 1233 | 325,Ira Glass 1234 | 326,Ira Glass 1235 | 327.02,Ira Glass 1236 | 328,Ira Glass 1237 | 328.03,Ira Glass 1238 | 329,Ira Glass 1239 | 330,Ira Glass 1240 | 332,Ira Glass 1241 | 332.02,Ira Glass 1242 | 332.06,Ira Glass 1243 | 332.08,Ira Glass 1244 | 333,Ira Glass 1245 | 333.02,Ira Glass 1246 | 334,Ira Glass 1247 | 335,Ira Glass 1248 | 336,Ira Glass 1249 | 336.02,Ira Glass 1250 | 337,Ira Glass 1251 | 338,Ira Glass 1252 | 339,Ira Glass 1253 | 339.02,Ira Glass 1254 | 339.03,Ira Glass 1255 | 340,Ira Glass 1256 | 341,Ira Glass 1257 | 341.02,Ira Glass 1258 | 342,Ira Glass 1259 | 344,Ira Glass 1260 | 346,Ira Glass 1261 | 348,Ira Glass 1262 | 348.01,Ira Glass 1263 | 351,Ira Glass 1264 | 351.02,Ira Glass 1265 | 353,Ira Glass 1266 | 353.01,Ira Glass 1267 | 353.03,Ira Glass 1268 | 354,Ira Glass 1269 | 355,Ira Glass 1270 | 356,Ira Glass 1271 | 359,Ira Glass 1272 | 360,Ira Glass 1273 | 361,Ira Glass 1274 | 361.05,Ira Glass 1275 | 362,Ira Glass 1276 | 363.01,Ira Glass 1277 | 364,Ira Glass 1278 | 364.02,Ira Glass 1279 | 365,Ira Glass 1280 | 365.03,Ira Glass 1281 | 365.04,Ira Glass 1282 | 366,Ira Glass 1283 | 366.02,Ira Glass 1284 | 367,Ira Glass 1285 | 368,Ira Glass 1286 | 368.02,Ira Glass 1287 | 369,Ira Glass 1288 | 370,Ira Glass 1289 | 371,Ira Glass 1290 | 371.01,Ira Glass 1291 | 371.02,Ira Glass 1292 | 371.04,Ira Glass 1293 | 372,Ira Glass 1294 | 372.03,Ira Glass 1295 | 372.06,Ira Glass 1296 | 375,Ira Glass 1297 | 376,Ira Glass 1298 | 377,Ira Glass 1299 | 377.01,Ira Glass 1300 | 377.03,Ira Glass 1301 | 378,Ira Glass 1302 | 378.02,Ira Glass 1303 | 378.04,Ira Glass 1304 | 379,Ira Glass 1305 | 380,Ira Glass 1306 | 381,Ira Glass 1307 | 382,Ira Glass 1308 | 383,Ira Glass 1309 | 383.02,Ira Glass 1310 | 384,Ira Glass 1311 | 385,Ira Glass 1312 | 385.02,Ira Glass 1313 | 385.04,Ira Glass 1314 | 386.03,Ira Glass 1315 | 387,Ira Glass 1316 | 387.03,Ira Glass 1317 | 388.01,Ira Glass 1318 | 389,Ira Glass 1319 | 389.04,Ira Glass 1320 | 391.04,Ira Glass 1321 | 392,Ira Glass 1322 | 393,Ira Glass 1323 | 394,Ira Glass 1324 | 395,Ira Glass 1325 | 396,Ira Glass 1326 | 396.01,Ira Glass 1327 | 397,Ira Glass 1328 | 397.02,Ira Glass 1329 | 398,Ira Glass 1330 | 399,Ira Glass 1331 | 400,Ira Glass 1332 | 401,Ira Glass 1333 | 403,Ira Glass 1334 | 404,Ira Glass 1335 | 404.02,Ira Glass 1336 | 405,Ira Glass 1337 | 406,Ira Glass 1338 | 407,Ira Glass 1339 | 409,Ira Glass 1340 | 410,Ira Glass 1341 | 410.01,Ira Glass 1342 | 411,Ira Glass 1343 | 411.01,Ira Glass 1344 | 412,Ira Glass 1345 | 412.01,Ira Glass 1346 | 413,Ira Glass 1347 | 414,Ira Glass 1348 | 414.02,Ira Glass 1349 | 415,Ira Glass 1350 | 416,Ira Glass 1351 | 417,Ira Glass 1352 | 418,Ira Glass 1353 | 419,Ira Glass 1354 | 420,Ira Glass 1355 | 420.03,Ira Glass 1356 | 421.01,Ira Glass 1357 | 422,Ira Glass 1358 | 423,Ira Glass 1359 | 424,Ira Glass 1360 | 424.02,Ira Glass 1361 | 426,Ira Glass 1362 | 426.01,Ira Glass 1363 | 427.01,Ira Glass 1364 | 430.01,Ira Glass 1365 | 430.02,Ira Glass 1366 | 431,Ira Glass 1367 | 432,Ira Glass 1368 | 432.04,Ira Glass 1369 | 433,Ira Glass 1370 | 434,Ira Glass 1371 | 434.04,Ira Glass 1372 | 435,Ira Glass 1373 | 436,Ira Glass 1374 | 436.03,Ira Glass 1375 | 437,Ira Glass 1376 | 437.02,Ira Glass 1377 | 438,Ira Glass 1378 | 439,Ira Glass 1379 | 440,Ira Glass 1380 | 441,Ira Glass 1381 | 442,Ira Glass 1382 | 443,Ira Glass 1383 | 443.01,Ira Glass 1384 | 443.02,Ira Glass 1385 | 445,Ira Glass 1386 | 445.02,Ira Glass 1387 | 445.04,Ira Glass 1388 | 445.06,Ira Glass 1389 | 446,Ira Glass 1390 | 446.02,Ira Glass 1391 | 447,Ira Glass 1392 | 448,Ira Glass 1393 | 449,Ira Glass 1394 | 449.01,Ira Glass 1395 | 449.02,Ira Glass 1396 | 450,Ira Glass 1397 | 451,Ira Glass 1398 | 451.02,Ira Glass 1399 | 452,Ira Glass 1400 | 452.01,Ira Glass 1401 | 453,Ira Glass 1402 | 454,Ira Glass 1403 | 457,Ira Glass 1404 | 457.01,Ira Glass 1405 | 458,Ira Glass 1406 | 459,Ira Glass 1407 | 459.02,Ira Glass 1408 | 460,Ira Glass 1409 | 461,Ira Glass 1410 | 462,Ira Glass 1411 | 462.01,Ira Glass 1412 | 465,Ira Glass 1413 | 466,Ira Glass 1414 | 467,Ira Glass 1415 | 474,Ira Glass 1416 | 474.01,Ira Glass 1417 | 474.02,Ira Glass 1418 | 476.02,Ira Glass 1419 | 481.03,Ira Glass 1420 | 484,Ira Glass 1421 | 485,Ira Glass 1422 | 504,Ira Glass 1423 | 504.01,Ira Glass 1424 | 506,Ira Glass 1425 | 507,Ira Glass 1426 | 508,Ira Glass 1427 | 508.03,Ira Glass 1428 | 509,Ira Glass 1429 | 509.01,Ira Glass 1430 | 512,Ira Glass 1431 | 514,Ira Glass 1432 | 518,Ira Glass 1433 | 521,Ira Glass 1434 | 521.02,Ira Glass 1435 | 524.02,Ira Glass 1436 | 524.04,Ira Glass 1437 | 525,Ira Glass 1438 | 525.01,Ira Glass 1439 | 529,Ira Glass 1440 | 535,Ira Glass 1441 | 540,Ira Glass 1442 | 545,Ira Glass 1443 | 545.02,Ira Glass 1444 | 547,Ira Glass 1445 | 559,Ira Glass 1446 | 559.03,Ira Glass 1447 | 561,Ira Glass 1448 | 565.03,Ira Glass 1449 | 567,Ira Glass 1450 | 569,Ira Glass 1451 | 571,Ira Glass 1452 | 572,Ira Glass 1453 | 572.02,Ira Glass 1454 | 573,Ira Glass 1455 | 573.01,Ira Glass 1456 | 573.04,Ira Glass 1457 | 574,Ira Glass 1458 | 574.03,Ira Glass 1459 | 575,Ira Glass 1460 | 575.03,Ira Glass 1461 | 576,Ira Glass 1462 | 576.03,Ira Glass 1463 | 577,Ira Glass 1464 | 578,Ira Glass 1465 | 579.01,Ira Glass 1466 | 580,Ira Glass 1467 | 581,Ira Glass 1468 | 582,Ira Glass 1469 | 584,Ira Glass 1470 | 584.01,Ira Glass 1471 | 585,Ira Glass 1472 | 587,Ira Glass 1473 | 587.01,Ira Glass 1474 | 588,Ira Glass 1475 | 588.01,Ira Glass 1476 | 588.03,Ira Glass 1477 | 589,Ira Glass 1478 | 589.03,Ira Glass 1479 | 590,Ira Glass 1480 | 590.02,Ira Glass 1481 | 592,Ira Glass 1482 | 592.02,Ira Glass 1483 | 593,Ira Glass 1484 | 594,Ira Glass 1485 | 594.02,Ira Glass 1486 | 595,Ira Glass 1487 | 596,Ira Glass 1488 | 597,Ira Glass 1489 | 598,Ira Glass 1490 | 598.03,Ira Glass 1491 | 600,Ira Glass 1492 | 601,Ira Glass 1493 | 602,Ira Glass 1494 | 602.06,Ira Glass 1495 | 603,Ira Glass 1496 | 604,Ira Glass 1497 | 605,Ira Glass 1498 | 606,Ira Glass 1499 | 607,Ira Glass 1500 | 608,Ira Glass 1501 | 609,Ira Glass 1502 | 609.02,Ira Glass 1503 | 609.04,Ira Glass 1504 | 611,Ira Glass 1505 | 612,Ira Glass 1506 | 612.04,Ira Glass 1507 | 613,Ira Glass 1508 | 614,Ira Glass 1509 | 614.02,Ira Glass 1510 | 614.04,Ira Glass 1511 | 615,Ira Glass 1512 | 615.02,Ira Glass 1513 | 616,Ira Glass 1514 | 617,Ira Glass 1515 | 617.01,Ira Glass 1516 | 617.02,Ira Glass 1517 | 618.02,Ira Glass 1518 | 619,Ira Glass 1519 | 619.01,Ira Glass 1520 | 620.02,Ira Glass 1521 | 622.03,Ira Glass 1522 | 27.02,Ira Sher 1523 | 5.02,Iris Moore 1524 | 407.03,Isaiah Thompson 1525 | 196.02,Issam Shukri 1526 | 235.01,Issam Shukri 1527 | 79.04,Italo Calvino 1528 | 328,J. J. Abrams 1529 | 205.05,J. Robert Lennon 1530 | 75.02,Jack Geiger 1531 | 5.01,Jack Hitt 1532 | 15.01,Jack Hitt 1533 | 15.02,Jack Hitt 1534 | 19.02,Jack Hitt 1535 | 38.02,Jack Hitt 1536 | 56.02,Jack Hitt 1537 | 61.01,Jack Hitt 1538 | 65.03,Jack Hitt 1539 | 68.01,Jack Hitt 1540 | 85.01,Jack Hitt 1541 | 100.02,Jack Hitt 1542 | 115,Jack Hitt 1543 | 120.02,Jack Hitt 1544 | 123.01,Jack Hitt 1545 | 145.04,Jack Hitt 1546 | 171.01,Jack Hitt 1547 | 216.02,Jack Hitt 1548 | 218.01,Jack Hitt 1549 | 218.02,Jack Hitt 1550 | 229.01,Jack Hitt 1551 | 250.01,Jack Hitt 1552 | 252.03,Jack Hitt 1553 | 253.01,Jack Hitt 1554 | 276.02,Jack Hitt 1555 | 278,Jack Hitt 1556 | 280.02,Jack Hitt 1557 | 283,Jack Hitt 1558 | 310.01,Jack Hitt 1559 | 310.03,Jack Hitt 1560 | 323.01,Jack Hitt 1561 | 331.01,Jack Hitt 1562 | 331.03,Jack Hitt 1563 | 332.03,Jack Hitt 1564 | 343.03,Jack Hitt 1565 | 353.02,Jack Hitt 1566 | 417.02,Jack Hitt 1567 | 456.01,Jack Hitt 1568 | 466.01,Jack Hitt 1569 | 510,Jack Hitt 1570 | 510.01,Jack Hitt 1571 | 549.01,Jack Hitt 1572 | 601,Jack Hitt 1573 | 503.01,Jacob Goldstein 1574 | 618.01,Jacob McClelland 1575 | 336.01,Jad Abumrad 1576 | 401.02,Jad Abumrad 1577 | 401.02,Jad Abumrad 1578 | 536.01,Jake Bernstein 1579 | 360.02,Jake Halpern 1580 | 234.01,Jake Warga 1581 | 265.01,Jake Warga 1582 | 393.02,James Braly 1583 | 82,James Ellroy 1584 | 309.01,James Spring 1585 | 402.01,James Spring 1586 | 520.01,James Spring 1587 | 542.03,James Spring 1588 | 582.01,James Spring 1589 | 279.02,Jamie Kitman 1590 | 328,Jane Espenson 1591 | 278.04,Jane Feltes 1592 | 297.01,Jane Feltes 1593 | 341.01,Jane Feltes 1594 | 347,Jane Feltes 1595 | 348.03,Jane Feltes 1596 | 395.05,Jane Feltes 1597 | 396.01,Jane Feltes 1598 | 400.06,Jane Feltes 1599 | 413.05,Jane Feltes 1600 | 415.01,Jane Feltes 1601 | 426.03,Jane Feltes 1602 | 443.02,Jane Feltes 1603 | 342.01,Jason Minter 1604 | 35.04,Jay Allison 1605 | 40.02,Jay Allison 1606 | 51.01,Jay Allison 1607 | 51.04,Jay Allison 1608 | 68.04,Jay Allison 1609 | 108.01,Jay Allison 1610 | 117.01,Jay Allison 1611 | 149.03,Jay Allison 1612 | 161.03,Jay Allison 1613 | 223.05,Jay Allison 1614 | 241.05,Jay Allison 1615 | 378,Jay Allison 1616 | 388.02,Jay Allison 1617 | 409.01,Jay Allison 1618 | 494,Jay Allison 1619 | 494.01,Jay Allison 1620 | 578.02,Jay Larson 1621 | 153.02,Jean Nathan 1622 | 389.01,Jeanne Darst 1623 | 439.03,Jeanne Darst 1624 | 448.02,Jeanne Darst 1625 | 457.04,Jeanne Darst 1626 | 135.03,Jeanne Finley 1627 | 2.01,Jeff Dorchen 1628 | 25.04,Jeff Dorchen 1629 | 61.02,Jeff Dorchen 1630 | 61.03,Jeff Dorchen 1631 | 78.02,Jeff Dorchen 1632 | 79.04,Jeff Dorchen 1633 | 385.03,Jeff Simmermon 1634 | 237.03,Jeffrey Brown 1635 | 281.02,Jen Banbury 1636 | 395.02,Jenifer Hixson 1637 | 346.03,Jennifer Schaller 1638 | 422.04,Jenny Slate 1639 | 622.02,Jenny Ye 1640 | 137.03,Jeremy Goldstein 1641 | 238.03,Jesse Hardman 1642 | 476.03,Jessica Benko 1643 | 518.01,Jessica Lussenhop 1644 | 231.02,Jessica Riddle 1645 | 221.02,Jhumpa Lahiri 1646 | 345.02,Jill Wolfson 1647 | 420.04,Jim O'Grady 1648 | 24.01,Jo Carol Pierce 1649 | 269.01,Jo Giese 1650 | 593.03,Joanna Kakissis 1651 | 215.02,Jod Kaftan 1652 | 363,Joe Kocur 1653 | 338.03,Joe Lockhart 1654 | 130.01,Joe Richman 1655 | 223.02,Joe Richman 1656 | 350.01,Joe Richman 1657 | 527.01,Joe Richman 1658 | 539,Joe Richman 1659 | 539.01,Joe Richman 1660 | 555.02,Joe Richman 1661 | 73.04,Joel Kostman 1662 | 75.01,Joel Kostman 1663 | 52.04,Joel Lovell 1664 | 192.01,Joel Lovell 1665 | 306.02,Joel Lovell 1666 | 361.03,Joel Lovell 1667 | 584.02,Joel Lovell 1668 | 71.01,Joel Meyerowitz 1669 | 132.02,Joel Meyerowitz 1670 | 479,John Biewen 1671 | 344,John Bowe 1672 | 203.03,John Brasfield 1673 | 448.02,John Conlee 1674 | 46.02,John Connors 1675 | 47.04,John Connors 1676 | 74.01,John Connors 1677 | 574.03,John Connors 1678 | 520.03,John Gravois 1679 | 178.01,John Hodgman 1680 | 190.02,John Hodgman 1681 | 205.01,John Hodgman 1682 | 232.03,John Hodgman 1683 | 243.03,John Hodgman 1684 | 298.03,John Hodgman 1685 | 305.02,John Hodgman 1686 | 329.01,John Hodgman 1687 | 508.01,John Hodgman 1688 | 521.05,John Jodzio 1689 | 399.01,Jon Mooallem 1690 | 518.03,Jon Mooallem 1691 | 575.02,Jon Mooallem 1692 | 582.03,Jon Mooallem 1693 | 201.01,Jon Ronson 1694 | 211.01,Jon Ronson 1695 | 214.02,Jon Ronson 1696 | 310.02,Jon Ronson 1697 | 314.01,Jon Ronson 1698 | 331.02,Jon Ronson 1699 | 338.01,Jon Ronson 1700 | 385.01,Jon Ronson 1701 | 411.03,Jon Ronson 1702 | 436.02,Jon Ronson 1703 | 506.01,Jon Ronson 1704 | 522,Jon Ronson 1705 | 620.03,Jon Ronson 1706 | 110.05,Jonathan Gold 1707 | 116.01,Jonathan Gold 1708 | 145.02,Jonathan Gold 1709 | 314,Jonathan Gold 1710 | 343.01,Jonathan Gold 1711 | 188.01,Jonathan Goldstein 1712 | 191.02,Jonathan Goldstein 1713 | 197.04,Jonathan Goldstein 1714 | 198.04,Jonathan Goldstein 1715 | 203.01,Jonathan Goldstein 1716 | 205.04,Jonathan Goldstein 1717 | 212.03,Jonathan Goldstein 1718 | 223.04,Jonathan Goldstein 1719 | 225.01,Jonathan Goldstein 1720 | 233.03,Jonathan Goldstein 1721 | 234.04,Jonathan Goldstein 1722 | 238.01,Jonathan Goldstein 1723 | 239.01,Jonathan Goldstein 1724 | 241.07,Jonathan Goldstein 1725 | 245.01,Jonathan Goldstein 1726 | 251.01,Jonathan Goldstein 1727 | 257.01,Jonathan Goldstein 1728 | 264.01,Jonathan Goldstein 1729 | 278.01,Jonathan Goldstein 1730 | 294.02,Jonathan Goldstein 1731 | 305.06,Jonathan Goldstein 1732 | 315.02,Jonathan Goldstein 1733 | 321.03,Jonathan Goldstein 1734 | 345.01,Jonathan Goldstein 1735 | 354.02,Jonathan Goldstein 1736 | 388.01,Jonathan Goldstein 1737 | 438.03,Jonathan Goldstein 1738 | 463.02,Jonathan Goldstein 1739 | 514.01,Jonathan Goldstein 1740 | 532.01,Jonathan Goldstein 1741 | 539.02,Jonathan Goldstein 1742 | 557.03,Jonathan Goldstein 1743 | 597.02,Jonathan Goldstein 1744 | 287.02,Jonathan Menjivar 1745 | 397.03,Jonathan Menjivar 1746 | 425.03,Jonathan Menjivar 1747 | 438.02,Jonathan Menjivar 1748 | 449.04,Jonathan Menjivar 1749 | 456,Jonathan Menjivar 1750 | 462.03,Jonathan Menjivar 1751 | 463.03,Jonathan Menjivar 1752 | 545.03,Jonathan Menjivar 1753 | 559.02,Jonathan Menjivar 1754 | 566.02,Jonathan Menjivar 1755 | 602.04,Jonathan Menjivar 1756 | 462.02,Jonathan Mitchell 1757 | 286.01,Jorge Just 1758 | 588.02,Jorge Just 1759 | 131.02,Josef Skvorecky 1760 | 310,Joseph Margulies 1761 | 331,Joseph Margulies 1762 | 323.02,Josh Bearman 1763 | 334.01,Josh Bearman 1764 | 334.02,Josh Bearman 1765 | 371.03,Josh Bearman 1766 | 447.01,Josh Bearman 1767 | 447.02,Josh Bearman 1768 | 475,Josh Bearman 1769 | 500.01,Josh Bearman 1770 | 528.03,Josh Bearman 1771 | 324.02,Josh Gleason 1772 | 245.04,Josh Hamilton 1773 | 72.01,Josh Seftel 1774 | 72.02,Josh Seftel 1775 | 379.02,Joss Whedon 1776 | 124.02,Juan Zaldivar 1777 | 515.03,Julia DeWitt 1778 | 551.03,Julia DeWitt 1779 | 166.01,Julia Pimsleur 1780 | 9.01,Julia Sweeney 1781 | 9.02,Julia Sweeney 1782 | 87.02,Julia Sweeney 1783 | 135.01,Julia Sweeney 1784 | 290.02,Julia Sweeney 1785 | 262.02,Julia Whitty 1786 | 422.05,Julian McCullough 1787 | 188.04,Julie Hill 1788 | 294.03,Julie Hill 1789 | 3.02,Julie Showalter 1790 | 39.04,Julie Showalter 1791 | 44.03,Julie Showalter 1792 | 53.03,Julie Showalter 1793 | 98.03,Julie Snyder 1794 | 109.06,Julie Snyder 1795 | 144.03,Julie Snyder 1796 | 156.03,Julie Snyder 1797 | 196.01,Julie Snyder 1798 | 208.03,Julie Snyder 1799 | 237,Julie Snyder 1800 | 253.02,Julie Snyder 1801 | 341.02,Julie Snyder 1802 | 373.03,Julie Snyder 1803 | 400.05,Julie Snyder 1804 | 435.03,Julie Snyder 1805 | 500,Julie Snyder 1806 | 500.01,Julie Snyder 1807 | 57.02,Junot Diaz 1808 | 94.02,Junot Diaz 1809 | 236.03,Justin Kaufman 1810 | 424.03,Jyllian Gunther 1811 | 158.02,Karen Bernstein 1812 | 313,Karen Bernstein 1813 | 595.02,Karen Duffin 1814 | 598.01,Karen Duffin 1815 | 602.03,Karen Duffin 1816 | 311.01,Karen Sosnoski 1817 | 366.01,Karen Sosnoski 1818 | 376.03,Kasper Hauser Troupe 1819 | 369.02,Kathie Russo 1820 | 270.03,Katia Dunn 1821 | 164.03,Katie Davis 1822 | 184.03,Katie Davis 1823 | 237.01,Katie Davis 1824 | 306.01,Katie Else 1825 | 240.02,Katy Vine 1826 | 156.02,Keith Gessen 1827 | 572.03,Keith O'Brien 1828 | 431.02,Kelly Coffield 1829 | 138.01,Kelly Mcevers 1830 | 178.02,Kelly McEvers 1831 | 508.02,Kelly McEvers 1832 | 581.01,Ken Armstrong 1833 | 581.02,Ken Armstrong 1834 | 267.02,Ken Kurson 1835 | 62.01,Kevin Morse 1836 | 203.02,Kevin Murphy 1837 | 270.02,Kevin O'Leary 1838 | 243.02,Kimberly Meyer 1839 | 40.03,Kitty Felde 1840 | 48.01,Kitty Felde 1841 | 412.02,Kumail Nanjiani 1842 | 457.01,Kurt Braunohler 1843 | 486.01,Kurt Braunohler 1844 | 590.03,Kurt Braunohler 1845 | 587.03,Kyle Mizono 1846 | 141.02,Lan Samantha Chang 1847 | 60.03,Larry Brown 1848 | 119.03,Larry DiStasi 1849 | 63.01,Larry Doyle 1850 | 314.02,Larry Doyle 1851 | 416,Larry Kaplow 1852 | 5.02,Larry Steeger 1853 | 442.02,Laura Beil 1854 | 441.01,Laura Sydell 1855 | 496.01,Laura Sydell 1856 | 496.02,Laura Sydell 1857 | 197.03,Laura Tangusso 1858 | 30.02,Lauren Slater 1859 | 119.05,Lawrence Otis Graham 1860 | 173.02,Lawrence Otis Graham 1861 | 1.03,Lawrence Steger 1862 | 50.02,Lawrence Steger 1863 | 132.03,Lawrence Weschler 1864 | 195.03,Lee Sandlin 1865 | 235.05,Lee Sandlin 1866 | 560,Leo Hornak 1867 | 611,Lilly Sullivan 1868 | 528.01,Lin-Manuel Miranda 1869 | 487.01,Linda Lutton 1870 | 488.03,Linda Lutton 1871 | 545.01,Lindy West 1872 | 589,Lindy West 1873 | 589.01,Lindy West 1874 | 589.05,Lindy West 1875 | 7.03,Lisa Buscani 1876 | 16.03,Lisa Buscani 1877 | 264.04,Lisa Carver 1878 | 303,Lisa LaBorde 1879 | 303.01,Lisa LaBorde 1880 | 276.04,Lisa Pollak 1881 | 278.03,Lisa Pollak 1882 | 279.05,Lisa Pollak 1883 | 296.05,Lisa Pollak 1884 | 297.03,Lisa Pollak 1885 | 299.03,Lisa Pollak 1886 | 303.02,Lisa Pollak 1887 | 326.02,Lisa Pollak 1888 | 340.01,Lisa Pollak 1889 | 367.03,Lisa Pollak 1890 | 372.04,Lisa Pollak 1891 | 379,Lisa Pollak 1892 | 388.01,Lisa Pollak 1893 | 391.02,Lisa Pollak 1894 | 396.01,Lisa Pollak 1895 | 400.01,Lisa Pollak 1896 | 413.04,Lisa Pollak 1897 | 431.01,Lisa Pollak 1898 | 435.02,Lisa Pollak 1899 | 449.02,Lisa Pollak 1900 | 478.01,Lisa Pollak 1901 | 481.02,Lisa Pollak 1902 | 507.02,Lisa Pollak 1903 | 109.03,Listeners Like You 1904 | 319.03,Listeners Like You 1905 | 58.02,Liz Weil 1906 | 250.03,Liza Colonzeas 1907 | 588,Lori Gottlieb 1908 | 321.02,Lu Olkowski 1909 | 358.01,Lu Olkowski 1910 | 114.02,Luc Sante 1911 | 13.01,Luis Rodriguez 1912 | 249.02,Luis Urrea 1913 | 198.03,Luke Burbank 1914 | 522.02,Luke Malone 1915 | 404.03,Lulu Miller 1916 | 544,Lulu Miller 1917 | 544.01,Lulu Miller 1918 | 544.02,Lulu Miller 1919 | 585.01,Lulu Wang 1920 | 88.05,Lydia Davis 1921 | 325.01,Maherin Gangat 1922 | 606.01,Maile Meloy 1923 | 68.03,Malcolm Gladwell 1924 | 348.04,Malcolm Gladwell 1925 | 590.01,Malcolm Gladwell 1926 | 524.04,Marc Maron 1927 | 432.03,Marc Sanchez 1928 | 18.01,Margy Rochlin 1929 | 18.02,Margy Rochlin 1930 | 56.01,Margy Rochlin 1931 | 61.04,Margy Rochlin 1932 | 92.01,Margy Rochlin 1933 | 102.03,Margy Rochlin 1934 | 200.02,Margy Rochlin 1935 | 510.04,Margy Rochlin 1936 | 135.02,Marilyn Snell 1937 | 586.01,Mariya Karimjee 1938 | 516.02,Mark Oppenheimer 1939 | 138.03,Mark Schone 1940 | 145.03,Mark Schone 1941 | 67.02,Marvin Tate 1942 | 233.02,Mary Beth Kirchner 1943 | 503.02,Mary Cuddehe 1944 | 383.04,Mary Wiltenburg 1945 | 406.02,Mary Wiltenburg 1946 | 535.04,Mary Wiltenburg 1947 | 122.03,Mary Zimmerman 1948 | 87.03,Matt Malloy 1949 | 88.05,Matt Malloy 1950 | 135,Matt Malloy 1951 | 152.03,Matt Malloy 1952 | 164.04,Matt Malloy 1953 | 195.03,Matt Malloy 1954 | 235.05,Matt Malloy 1955 | 242.03,Matt Malloy 1956 | 256.04,Matt Malloy 1957 | 274.04,Matt Malloy 1958 | 285.03,Matt Malloy 1959 | 381.04,Matt Malloy 1960 | 393.04,Matt Malloy 1961 | 404.04,Matt Malloy 1962 | 446.04,Matt Malloy 1963 | 50.05,Matthew Goulish 1964 | 60.05,Meema Spadola 1965 | 69.01,Meema Spadola 1966 | 98.02,Meema Spadola 1967 | 137.04,Meghan Daum 1968 | 339.04,Merrill Markoe 1969 | 316.03,Michael Beaumier 1970 | 234.02,Michael Bernard Loggins 1971 | 188.03,Michael Chabon 1972 | 605.02,Michael Chabon 1973 | 428.04,Michael Chernus 1974 | 429.01,Michael Chernus 1975 | 442.01,Michael Chernus 1976 | 518.05,Michael Chernus 1977 | 582.02,Michael Chernus 1978 | 438.01,Michael Ian Black 1979 | 579.02,Michael Kinsley 1980 | 60.02,Michael Lesy 1981 | 19.01,Michael Lewis 1982 | 29.01,Michael Lewis 1983 | 32.03,Michael Lewis 1984 | 34.02,Michael Lewis 1985 | 41.02,Michael Lewis 1986 | 41.04,Michael Lewis 1987 | 85.03,Michael Lewis 1988 | 97.03,Michael Lewis 1989 | 139.01,Michael Lewis 1990 | 504.02,Michael Lewis 1991 | 504.03,Michael Lewis 1992 | 381.02,Michael May 1993 | 394.01,Michael May 1994 | 405.02,Michael May 1995 | 438.04,Michael May 1996 | 498.01,Michael May 1997 | 60.03,Michael Stumm 1998 | 54.01,Michael Ventura 1999 | 574.04,Michael Ventura 2000 | 122.02,Michele Ernsting 2001 | 180.04,Michelle Trachtenberg 2002 | 245.03,Mike Albo 2003 | 361.01,Mike Birbiglia 2004 | 370.02,Mike Birbiglia 2005 | 379.01,Mike Birbiglia 2006 | 384.01,Mike Birbiglia 2007 | 411.01,Mike Birbiglia 2008 | 422.03,Mike Birbiglia 2009 | 486.04,Mike Birbiglia 2010 | 515.02,Mike Birbiglia 2011 | 528.02,Mike Birbiglia 2012 | 551.02,Mike Birbiglia 2013 | 576.01,Mike Birbiglia 2014 | 601.03,Mike Birbiglia 2015 | 454.01,Mike Daisey 2016 | 128.03,Mike Paterniti 2017 | 148.01,Mike Paterniti 2018 | 150.01,Mike Paterniti 2019 | 343.02,Mike Paterniti 2020 | 532.03,Mike Pesca 2021 | 558.03,Mike Pesca 2022 | 526.02,Miki Meek 2023 | 541.02,Miki Meek 2024 | 548.01,Miki Meek 2025 | 555.03,Miki Meek 2026 | 556.03,Miki Meek 2027 | 566.01,Miki Meek 2028 | 592.01,Miki Meek 2029 | 592.03,Miki Meek 2030 | 593.02,Miki Meek 2031 | 597.01,Miki Meek 2032 | 602.01,Miki Meek 2033 | 610.01,Miki Meek 2034 | 221.02,Mira Nair 2035 | 183.02,Miriam Toews 2036 | 220.04,Miriam Toews 2037 | 378.03,Molly Antopol 2038 | 233.01,Molly FitzSimons 2039 | 70.02,Mona Simpson 2040 | 284.01,Muhammad Kamran 2041 | 381,My Thuan Tran 2042 | 381.01,My Thuan Tran 2043 | 398.01,Nancy Mullane 2044 | 300.03,Nancy Sherman 2045 | 16.02,Nancy Updike 2046 | 25.03,Nancy Updike 2047 | 46.01,Nancy Updike 2048 | 57.04,Nancy Updike 2049 | 59.03,Nancy Updike 2050 | 73.03,Nancy Updike 2051 | 86.01,Nancy Updike 2052 | 110.03,Nancy Updike 2053 | 123.02,Nancy Updike 2054 | 141.04,Nancy Updike 2055 | 143.04,Nancy Updike 2056 | 149.02,Nancy Updike 2057 | 155.02,Nancy Updike 2058 | 164.02,Nancy Updike 2059 | 172.01,Nancy Updike 2060 | 182.01,Nancy Updike 2061 | 200.01,Nancy Updike 2062 | 217.01,Nancy Updike 2063 | 217.03,Nancy Updike 2064 | 238.02,Nancy Updike 2065 | 251.02,Nancy Updike 2066 | 266.01,Nancy Updike 2067 | 266.02,Nancy Updike 2068 | 266.03,Nancy Updike 2069 | 266.04,Nancy Updike 2070 | 266.05,Nancy Updike 2071 | 266.06,Nancy Updike 2072 | 266.07,Nancy Updike 2073 | 268,Nancy Updike 2074 | 293,Nancy Updike 2075 | 324.01,Nancy Updike 2076 | 327,Nancy Updike 2077 | 333.01,Nancy Updike 2078 | 340.02,Nancy Updike 2079 | 361.02,Nancy Updike 2080 | 362.03,Nancy Updike 2081 | 367.01,Nancy Updike 2082 | 367.05,Nancy Updike 2083 | 370.03,Nancy Updike 2084 | 372.01,Nancy Updike 2085 | 386.01,Nancy Updike 2086 | 388.02,Nancy Updike 2087 | 395.04,Nancy Updike 2088 | 396.02,Nancy Updike 2089 | 400.02,Nancy Updike 2090 | 407.02,Nancy Updike 2091 | 416,Nancy Updike 2092 | 416.01,Nancy Updike 2093 | 416.02,Nancy Updike 2094 | 416.03,Nancy Updike 2095 | 428,Nancy Updike 2096 | 428.02,Nancy Updike 2097 | 428.03,Nancy Updike 2098 | 429,Nancy Updike 2099 | 429.02,Nancy Updike 2100 | 432.02,Nancy Updike 2101 | 433.03,Nancy Updike 2102 | 434.02,Nancy Updike 2103 | 442.01,Nancy Updike 2104 | 475.04,Nancy Updike 2105 | 481.05,Nancy Updike 2106 | 493.01,Nancy Updike 2107 | 499,Nancy Updike 2108 | 499.01,Nancy Updike 2109 | 499.02,Nancy Updike 2110 | 500.01,Nancy Updike 2111 | 512.01,Nancy Updike 2112 | 523.01,Nancy Updike 2113 | 526,Nancy Updike 2114 | 529.03,Nancy Updike 2115 | 530.02,Nancy Updike 2116 | 542.02,Nancy Updike 2117 | 556.01,Nancy Updike 2118 | 564.01,Nancy Updike 2119 | 570,Nancy Updike 2120 | 570.01,Nancy Updike 2121 | 575.04,Nancy Updike 2122 | 577.02,Nancy Updike 2123 | 579.02,Nancy Updike 2124 | 607.01,Nancy Updike 2125 | 607.02,Nancy Updike 2126 | 609.03,Nancy Updike 2127 | 291.01,Nazanin Rafsanjani 2128 | 573.02,Neil Drumming 2129 | 587.02,Neil Drumming 2130 | 594.03,Neil Drumming 2131 | 598.02,Neil Drumming 2132 | 602.02,Neil Drumming 2133 | 623,Neil Drumming 2134 | 623.01,Neil Drumming 2135 | 448.02,Neil Gaiman 2136 | 10.03,Neo-futurists 2137 | 180.04,Nicholson Baker 2138 | 187.03,Nick Flynn 2139 | 161.02,Nick Hornby 2140 | 173,Nick Hornby 2141 | 295.02,Nick Hornby 2142 | 297.04,Nick Spitzer 2143 | 618.01,Nick van der Kolk 2144 | 136.03,Nicole Graev 2145 | 512.02,Nikole Hannah-Jones 2146 | 562,Nikole Hannah-Jones 2147 | 562.01,Nikole Hannah-Jones 2148 | 562.02,Nikole Hannah-Jones 2149 | 563.02,Nikole Hannah-Jones 2150 | 1.04,- 2151 | 2.02,Michael Warr 2152 | 2.03,- 2153 | 3.03,Luis Rodriguez 2154 | 3.04,David Sedaris 2155 | 3.06,- 2156 | 5.03,Darron Bowden 2157 | 5.04,Glen Fitzgerald 2158 | 5.05,Cheryl Trykv 2159 | 6.03,Peter Clowney 2160 | 7.04,Dwight Okita 2161 | 10.04,Susan Bergman 2162 | 11.02,Ira Glass 2163 | 12.03,Scott Carrier 2164 | 13.02,Gregory Whitehead 2165 | 13.02,Nancy Updike 2166 | 13.03,- 2167 | 24.02,Rennie Sparks 2168 | 24.03,Gregory Whitehead 2169 | 26.03,Dan Robb 2170 | 26.03,Jay Allison 2171 | 26.04,Beau O'Reilly 2172 | 27.03,Vivian Paley 2173 | 30.03,- 2174 | 30.04,Claudia Perez 2175 | 31.02,Dan Gediman 2176 | 31.03,Sarah Vowell 2177 | 31.04,- 2178 | 33.03,Shirley Jahad 2179 | 33.04,Cassandra Smith 2180 | 40.04,- 2181 | 41.03,- 2182 | 55.02,Lauren Slater 2183 | 56.03,Dishwasher Pete 2184 | 58.03,- 2185 | 62.02,- 2186 | 62.03,Dirk Jamison 2187 | 62.04,Sandra Loh 2188 | 67.03,Jay Allison 2189 | 67.04,David Sedaris 2190 | 76.03,- 2191 | 81.04,- 2192 | 108.02,Mary Kay Prucha 2193 | 109.04,Ira Glass 2194 | 110.02,Jack Hitt 2195 | 114.04,- 2196 | 121.02,Gillian Aldrich 2197 | 131.03,Paul Bravmann 2198 | 134.04,Steve Bogira 2199 | 138.04,Sandra Loh 2200 | 139.04,- 2201 | 157.02,Meghan Daum 2202 | 157.03,- 2203 | 157.04,Alex Blumberg 2204 | 157.05,Mona Simpson 2205 | 167.03,Mike Paterniti 2206 | 169.03,Julie Snyder 2207 | 169.04,Nancy Updike 2208 | 207.02,Veronica Chater 2209 | 226.02,John Hodgman 2210 | 226.02,Robert Krulwich 2211 | 232.01,Anthony Swofford 2212 | 232.02,- 2213 | 241.03,Susan Drury 2214 | 241.04,Patty Martin 2215 | 241.06,- 2216 | 241.08,- 2217 | 241.09,Elaine Boehm 2218 | 241.1,- 2219 | 241.12,Brent Runyon 2220 | 241.13,- 2221 | 241.14,- 2222 | 241.16,- 2223 | 241.17,NONE 2224 | 241.19,David Lipsky 2225 | 241.2,- 2226 | 246.02,Alex Kotlowitz 2227 | 246.02,Amy Drozdowska 2228 | 255.02,- 2229 | 255.03,Caitlin Shetterly 2230 | 260.01,Chris Neary 2231 | 273.02,Teal Krech 2232 | 273.03,Brett Martin 2233 | 297.05,Alex Kotlowitz 2234 | 300.02,- 2235 | 307.03,- 2236 | 309.02,David Sedaris 2237 | 323.03,- 2238 | 344.01,John Bowe 2239 | 350.02,Jon Jeter 2240 | 350.03,Charles Siebert 2241 | 352.01,Tal McThenia 2242 | 352.02,Tal McThenia 2243 | 357.02,Charles Monroe-Kane 2244 | 357.03,- 2245 | 360.01,Jake Halpern 2246 | 375.02,Lisa Chow 2247 | 402.02,Nancy Updike 2248 | 406.01,- 2249 | 406.03,Mary Wiltenburg 2250 | 407.01,Mike Paterniti 2251 | 408.03,Ben Fountain 2252 | 413.03,Allen Wigington 2253 | 413.07,Chuck Salter 2254 | 415.04,Nancy Updike 2255 | 415.04,Larry Kaplow 2256 | 427.02,Jake Halpern 2257 | 439.02,Jeanne Darst 2258 | 443.03,Jonathan Goldstein 2259 | 449.06,Elizabeth Green 2260 | 450.02,- 2261 | 452.03,- 2262 | 453.02,Chris Gethard 2263 | 454.02,- 2264 | 455.01,Chana Joffe-Walt 2265 | 455.01,Zoe Chace 2266 | 455.02,Chana Joffe-Walt 2267 | 455.02,Adam Davidson 2268 | 455.03,Chana Joffe-Walt 2269 | 455.03,Adam Davidson 2270 | 455.04,Chana Joffe-Walt 2271 | 455.04,Alex Blumberg 2272 | 455.05,Chana Joffe-Walt 2273 | 455.05,Alex Blumberg 2274 | 457.03,Ben Loory 2275 | 458.02,Dave Finch 2276 | 460.02,- 2277 | 460.03,- 2278 | 461.03,- 2279 | 465.01,Habiba Nosheen 2280 | 465.02,Habiba Nosheen 2281 | 467.02,Michael Meyer 2282 | 468.01,Sarah Koenig 2283 | 468.03,- 2284 | 469.01,- 2285 | 469.02,Anton Disclafani 2286 | 469.03,- 2287 | 470.01,Logan Hill 2288 | 470.02,Jonathan Goldstein 2289 | 470.02,David Rakoff 2290 | 472.01,- 2291 | 475.01,Brian Reed 2292 | 475.03,Sonari Gilton 2293 | 477.01,Domingo Martinez 2294 | 477.02,- 2295 | 477.03,Molly Shannon 2296 | 479.01,- 2297 | 479.02,John Biewen 2298 | 480.03,Camas Davis 2299 | 481.01,Hyder Akbar 2300 | 481.04,Nathaniel Rich 2301 | 481.06,- 2302 | 482.01,Maya Gurantz 2303 | 482.02,Connie Rex 2304 | 482.03,Ron Carlson 2305 | 485.02,Amy Bitzel 2306 | 487.02,Alex Kotlowitz 2307 | 487.03,Ben Calhoun 2308 | 488.06,- 2309 | 489.02,Stephen Lee 2310 | 489.03,Ryan Rozar 2311 | 489.04,- 2312 | 489.05,Kerry Weeks 2313 | 491.01,David Ferry 2314 | 491.02,Andrea Seigel 2315 | 491.03,Debbie Lum 2316 | 493.02,Scott Pinkmountain 2317 | 494.02,Sierra Teller-Ornelas 2318 | 494.03,Gloria Harrison 2319 | 495.01,Julia Kumari Drapkin 2320 | 495.02,Ben calhoun 2321 | 495.03,Ira Glass 2322 | 497.01,- 2323 | 497.03,- 2324 | 497.05,- 2325 | 497.07,- 2326 | 498.02,- 2327 | 500.02,- 2328 | 501.01,- 2329 | 501.03,Sayed Kashua 2330 | 502.01,Yowei Shaw 2331 | 502.02,Yowei Shaw 2332 | 506.03,Yuri Herrera 2333 | 510.03,- 2334 | 511.01,Sarah Koenig 2335 | 511.02,Ira Glass 2336 | 511.03,Brian Reed 2337 | 511.04,Julie Snyder 2338 | 511.05,Sarah Koenig 2339 | 511.06,Nancy Updike 2340 | 513.01,- 2341 | 513.02,- 2342 | 513.05,Sean Cole 2343 | 513.06,- 2344 | 513.08,- 2345 | 513.1,- 2346 | 515.04,Sarah Koenig 2347 | 517.03,- 2348 | 518.02,BJ Novak 2349 | 521.01,Ira Glass 2350 | 521.03,Jonathan Menjivar 2351 | 523.02,- 2352 | 526.03,- 2353 | 531.03,- 2354 | 533.01,Alex Blumberg 2355 | 533.02,Mike Birbiglia 2356 | 533.03,- 2357 | 534.01,Ben Calhoun 2358 | 534.02,Ben Calhoun 2359 | 538.02,- 2360 | 539.03,- 2361 | 540.01,John Diedrich 2362 | 540.01,Rachel Rutlidge 2363 | 540.02,Debbie Nathan 2364 | 540.03,Ayelet Waldman 2365 | 543.01,Brian Reed 2366 | 543.01,Bianca Giaever 2367 | 543.02,Brian Reed 2368 | 543.02,Bianca Giaever 2369 | 543.03,- 2370 | 546.01,- 2371 | 546.02,- 2372 | 552.01,- 2373 | 552.02,Zoe Chace 2374 | 553.01,Sara Corbett 2375 | 553.02,Mark Oppenheimer 2376 | 553.03,Brett Martin 2377 | 554.01,Adriana Cardona-Maguigad 2378 | 554.03,Zoe Chace 2379 | 555.01,- 2380 | 556.04,- 2381 | 560.01,Leo Hornak 2382 | 560.02,Leo Hornak 2383 | 571.03,Juila Lillis 2384 | 578.04,Scott Aukerman 2385 | 578.04,Adam Scott 2386 | 599.01,- 2387 | 599.02,David Kestenbaum 2388 | 599.03,- 2389 | 599.04,- 2390 | 600.02,- 2391 | 601.02,- 2392 | 601.04,Mike Birbiglia 2393 | 604.02,Samantha Broun 2394 | 605.01,- 2395 | 608.05,- 2396 | 609.05,- 2397 | 613.01,Francisco Cantu 2398 | 623.03,- 2399 | 623.04,Neil Drumming 2400 | 14.03,Nora Moreno 2401 | 256.01,Nubar Alexanian 2402 | 446.01,Nubar Alexanian 2403 | 464.01,OK Go 2404 | 509.02,Paige Cowett 2405 | 404.03,Patrick Walters 2406 | 12.01,Paul Tough 2407 | 30.01,Paul Tough 2408 | 30.02,Paul Tough 2409 | 49.01,Paul Tough 2410 | 57.01,Paul Tough 2411 | 59.01,Paul Tough 2412 | 63.03,Paul Tough 2413 | 65.04,Paul Tough 2414 | 70.03,Paul Tough 2415 | 73.01,Paul Tough 2416 | 75.03,Paul Tough 2417 | 98.01,Paul Tough 2418 | 160.05,Paul Tough 2419 | 289.02,Paul Tough 2420 | 364.01,Paul Tough 2421 | 37.02,Peter Clowney 2422 | 117.02,Peter Sagal 2423 | 383.03,Peter Sagal 2424 | 535.03,Peter Sagal 2425 | 292.01,Petra Bartosiewicz 2426 | 292.02,Petra Bartosiewicz 2427 | 356.01,Petra Bartosiewicz 2428 | 356.02,Petra Bartosiewicz 2429 | 387.01,Petra Bartosiewicz 2430 | 387.02,Petra Bartosiewicz 2431 | 126.02,Philip Gourevitch 2432 | 384.02,Philip Gourevitch 2433 | 545.04,PJ Vogt 2434 | 559.01,PJ Vogt 2435 | 355.01,Alex Blumberg 2436 | 355.01,Adam Davidson 2437 | 355.02,Adam Davidson 2438 | 355.02,Alex Blumberg 2439 | 363.02,Alex Blumberg 2440 | 363.02,Adam Davidson 2441 | 365.01,Alex Blumberg 2442 | 365.01,Adam Davidson 2443 | 365.02,Alex Blumberg 2444 | 366.04,Adam Davidson 2445 | 366.04,Alex Blumberg 2446 | 373.04,Adam Davidson 2447 | 373.04,Alex Blumberg 2448 | 375.01,Adam Davidson 2449 | 375.01,Alex Blumberg 2450 | 377.02,Chana Joffe-Walt 2451 | 380.01,Chris Arnold 2452 | 382.01,Chana Joffe-Walt 2453 | 382.02,Alex Blumberg 2454 | 382.02,David Kestenbaum 2455 | 384.03,Alex Blumberg 2456 | 384.03,Adam Davidson 2457 | 390.01,Alex Blumberg 2458 | 390.01,Adam Davidson 2459 | 392.01,Chana Joffe-Walt 2460 | 392.02,Alex Blumberg 2461 | 392.02,Adama Davidson 2462 | 392.03,David Kestenbaum 2463 | 395.01,Chana Joffe-Walt 2464 | 395.01,Adam Davidson 2465 | 397.05,Adam Davidson 2466 | 397.05,Alex Blumberg 2467 | 342,Rachel Howard 2468 | 303.02,Rachel Louise Synder 2469 | 376.02,Rany Jazayerli 2470 | 119.01,Ray Hill 2471 | 444.02,Rebecca Makkai 2472 | 103.01,Rebecca Perl 2473 | 6.02,Reginald Gibbons 2474 | 59.05,Rennie Sparks 2475 | 574,Rennie Sparks 2476 | 613.02,Reya El-Salahi 2477 | 389.02,Rich Juzwiak 2478 | 72.01,Rich Robinson 2479 | 72.02,Rich Robinson 2480 | 105.01,Rich Robinson 2481 | 93.01,Richard Bausch 2482 | 349.01,Richard Bausch 2483 | 349,Richard Klein 2484 | 70.01,Richard Lyons 2485 | 362.01,Richard Price 2486 | 119.04,Rick Reynolds 2487 | 148.03,Riz Rollins 2488 | 92.03,RJ Smith 2489 | 62.01,Rob Bindler 2490 | 460.01,Rob Schmitz 2491 | 457.02,Robbie Brown 2492 | 486.02,Robbie Brown 2493 | 293.03,Robert Andrew Powell 2494 | 97.12,Robert Krulwich 2495 | 401.02,Robert Krulwich 2496 | 401.02,Robert Krulwich 2497 | 434.06,Robert Smith 2498 | 459.03,Robert Smith 2499 | 247.01,Robin Epstein 2500 | 326.03,Robin Epstein 2501 | 361.02,Robyn Semien 2502 | 400.04,Robyn Semien 2503 | 500.01,Robyn Semien 2504 | 513.03,Robyn Semien 2505 | 530.01,Robyn Semien 2506 | 548,Robyn Semien 2507 | 548.02,Robyn Semien 2508 | 565.01,Robyn Semien 2509 | 565.06,Robyn Semien 2510 | 581.01,Robyn Semien 2511 | 581.02,Robyn Semien 2512 | 593.04,Robyn Semien 2513 | 614.01,Robyn Semien 2514 | 61.02,Ron Carlson 2515 | 61.03,Ron Carlson 2516 | 64.01,Ron Carlson 2517 | 64.02,Ron Carlson 2518 | 510.02,Ron Carlson 2519 | 326.01,Ronan Kelly 2520 | 315,Rosie Schaap 2521 | 348.02,Rosie Schaap 2522 | 426.02,Rosie Schaap 2523 | 589.03,Roxane Gay 2524 | 393.01,Ruby Wright 2525 | 174.04,Russell Banks 2526 | 228.02,Russell Banks 2527 | 514.03,Russell Banks 2528 | 304,Russell Cobb 2529 | 304.01,Russell Cobb 2530 | 304.02,Russell Cobb 2531 | 420.01,Ruth Padawer 2532 | 420.02,Ryan Knighton 2533 | 464,Ryan Knighton 2534 | 464.01,Ryan Knighton 2535 | 458.01,Ryan Murdock 2536 | 471.01,Sam Black 2537 | 471.02,Sam Black 2538 | 608.04,Sam Black 2539 | 452.02,Sam Bungey 2540 | 517.02,Sam Mullins 2541 | 354.01,Sam Shaw 2542 | 604.01,Samantha Broun 2543 | 267.03,Samantha Hunt 2544 | 527.01,Samara Freemark 2545 | 106.02,Sanantonio Brooks 2546 | 4.02,Sandra Loh 2547 | 7.01,Sandra Loh 2548 | 22.02,Sandra Loh 2549 | 22.03,Sandra Loh 2550 | 26.01,Sandra Loh 2551 | 45.01,Sandra Loh 2552 | 89.02,Sandra Loh 2553 | 115.03,Sandra Loh 2554 | 133.01,Sandra Loh 2555 | 55.01,Sandy Tolan 2556 | 411.02,Sara Blaisdell 2557 | 516.01,Sara Corbett 2558 | 591.02,Sara Corbett 2559 | 434.03,Sarah Bromer 2560 | 516.03,Sarah Carr 2561 | 527.01,Sarah Kate Kramer 2562 | 151.02,Sarah Koenig 2563 | 162.02,Sarah Koenig 2564 | 212,Sarah Koenig 2565 | 213.03,Sarah Koenig 2566 | 237.02,Sarah Koenig 2567 | 260.02,Sarah Koenig 2568 | 263.02,Sarah Koenig 2569 | 276.03,Sarah Koenig 2570 | 279.04,Sarah Koenig 2571 | 299.02,Sarah Koenig 2572 | 314.03,Sarah Koenig 2573 | 330.01,Sarah Koenig 2574 | 332.07,Sarah Koenig 2575 | 337.01,Sarah Koenig 2576 | 346.02,Sarah Koenig 2577 | 347.02,Sarah Koenig 2578 | 367.02,Sarah Koenig 2579 | 367.04,Sarah Koenig 2580 | 369.03,Sarah Koenig 2581 | 372.05,Sarah Koenig 2582 | 383.01,Sarah Koenig 2583 | 391.03,Sarah Koenig 2584 | 392.04,Sarah Koenig 2585 | 396,Sarah Koenig 2586 | 396.01,Sarah Koenig 2587 | 396.04,Sarah Koenig 2588 | 400.05,Sarah Koenig 2589 | 413.06,Sarah Koenig 2590 | 419.01,Sarah Koenig 2591 | 419.02,Sarah Koenig 2592 | 421.02,Sarah Koenig 2593 | 434.01,Sarah Koenig 2594 | 440.01,Sarah Koenig 2595 | 440.02,Sarah Koenig 2596 | 444,Sarah Koenig 2597 | 444.01,Sarah Koenig 2598 | 449.05,Sarah Koenig 2599 | 451.01,Sarah Koenig 2600 | 459.01,Sarah Koenig 2601 | 466.02,Sarah Koenig 2602 | 468.02,Sarah Koenig 2603 | 478.02,Sarah Koenig 2604 | 485.01,Sarah Koenig 2605 | 489,Sarah Koenig 2606 | 492,Sarah Koenig 2607 | 492.01,Sarah Koenig 2608 | 492.02,Sarah Koenig 2609 | 497.04,Sarah Koenig 2610 | 500.01,Sarah Koenig 2611 | 513.07,Sarah Koenig 2612 | 535.01,Sarah Koenig 2613 | 537,Sarah Koenig 2614 | 537.01,Sarah Koenig 2615 | 79.03,Sarah Miller 2616 | 99.02,Sarah Miller 2617 | 431.02,Sarah Mollo-Christensen 2618 | 11.04,Sarah Thyre 2619 | 45.03,Sarah Vowell 2620 | 54.02,Sarah Vowell 2621 | 56.04,Sarah Vowell 2622 | 58.01,Sarah Vowell 2623 | 65.02,Sarah Vowell 2624 | 67.01,Sarah Vowell 2625 | 70.04,Sarah Vowell 2626 | 76.01,Sarah Vowell 2627 | 81.01,Sarah Vowell 2628 | 86.02,Sarah Vowell 2629 | 90.02,Sarah Vowell 2630 | 94.01,Sarah Vowell 2631 | 97.13,Sarah Vowell 2632 | 104.02,Sarah Vowell 2633 | 107.01,Sarah Vowell 2634 | 107.02,Sarah Vowell 2635 | 114.01,Sarah Vowell 2636 | 118.01,Sarah Vowell 2637 | 125.03,Sarah Vowell 2638 | 128.01,Sarah Vowell 2639 | 129.01,Sarah Vowell 2640 | 141.02,Sarah Vowell 2641 | 148.02,Sarah Vowell 2642 | 151.01,Sarah Vowell 2643 | 167.01,Sarah Vowell 2644 | 174.01,Sarah Vowell 2645 | 191.03,Sarah Vowell 2646 | 226.03,Sarah Vowell 2647 | 235.04,Sarah Vowell 2648 | 239.02,Sarah Vowell 2649 | 244,Sarah Vowell 2650 | 247.03,Sarah Vowell 2651 | 256.02,Sarah Vowell 2652 | 277,Sarah Vowell 2653 | 291.03,Sarah Vowell 2654 | 305.05,Sarah Vowell 2655 | 328.02,Sarah Vowell 2656 | 329.03,Sarah Vowell 2657 | 354.02,Sarah Vowell 2658 | 574.02,Sarah Vowell 2659 | 268.02,Sascha Rothchild 2660 | 528.04,Sasheer Zamata 2661 | 576.01,Sasheer Zamata 2662 | 583.02,Sasheer Zamata 2663 | 437.01,Saul Elbein 2664 | 507.01,Saul Elbein 2665 | 603.03,Scott Brown 2666 | 21.01,Scott Carrier 2667 | 35.02,Scott Carrier 2668 | 37.01,Scott Carrier 2669 | 40.02,Scott Carrier 2670 | 42.03,Scott Carrier 2671 | 45.02,Scott Carrier 2672 | 48.02,Scott Carrier 2673 | 49.03,Scott Carrier 2674 | 53.05,Scott Carrier 2675 | 64.02,Scott Carrier 2676 | 77.02,Scott Carrier 2677 | 80.01,Scott Carrier 2678 | 96.01,Scott Carrier 2679 | 96.02,Scott Carrier 2680 | 113.04,Scott Carrier 2681 | 141.02,Scott Carrier 2682 | 146.03,Scott Carrier 2683 | 181,Scott Carrier 2684 | 181.01,Scott Carrier 2685 | 181.02,Scott Carrier 2686 | 181.03,Scott Carrier 2687 | 181.04,Scott Carrier 2688 | 191.01,Scott Carrier 2689 | 195.04,Scott Carrier 2690 | 241.02,Scott Carrier 2691 | 243.01,Scott Carrier 2692 | 286.02,Scott Carrier 2693 | 333.02,Scott Carrier 2694 | 551.04,Scott Carrier 2695 | 345.04,Scott Gurian 2696 | 140.02,Sean Cole 2697 | 247,Sean Cole 2698 | 354.02,Sean Cole 2699 | 388.02,Sean Cole 2700 | 505.01,Sean Cole 2701 | 505.02,Sean Cole 2702 | 513.04,Sean Cole 2703 | 521.04,Sean Cole 2704 | 524,Sean Cole 2705 | 535.02,Sean Cole 2706 | 539.02,Sean Cole 2707 | 548.02,Sean Cole 2708 | 558.04,Sean Cole 2709 | 565.05,Sean Cole 2710 | 572.04,Sean Cole 2711 | 575.01,Sean Cole 2712 | 585.02,Sean Cole 2713 | 586,Sean Cole 2714 | 586.02,Sean Cole 2715 | 593.01,Sean Cole 2716 | 593.05,Sean Cole 2717 | 601.01,Sean Cole 2718 | 611.01,Sean Cole 2719 | 612,Sean Cole 2720 | 612.01,Sean Cole 2721 | 614.03,Sean Cole 2722 | 618.02,Sean Cole 2723 | 622,Sean Cole 2724 | 622.01,Sean Cole 2725 | 112.05,Sean Collins 2726 | 425.02,Sean Lewis 2727 | 520.02,Seth Freed Wessler 2728 | 608.02,Seth Freed Wessler 2729 | 361.04,Seth Lind 2730 | 395.03,Shaina Feinberg 2731 | 258.02,Shalom Auslander 2732 | 281.03,Shalom Auslander 2733 | 283.03,Shalom Auslander 2734 | 318.03,Shalom Auslander 2735 | 322.02,Shalom Auslander 2736 | 332.01,Shalom Auslander 2737 | 354.02,Shalom Auslander 2738 | 362.04,Shalom Auslander 2739 | 369.05,Shalom Auslander 2740 | 384.04,Shalom Auslander 2741 | 397.01,Shalom Auslander 2742 | 210.01,Shane DuBow 2743 | 222.02,Shane DuBow 2744 | 272.03,Shane DuBow 2745 | 571.01,Shankar Vedantam 2746 | 308.01,Shant Kenderian 2747 | 412.04,Shawn Allee 2748 | 248.02,Sheila Peabody 2749 | 26.02,Sherman Alexie 2750 | 287.01,Shirleen Holt 2751 | 591.03,Simon Rich 2752 | 40.01,Spalding Gray 2753 | 369.02,Spalding Gray 2754 | 146.04,Starlee Kine 2755 | 183.03,Starlee Kine 2756 | 192.02,Starlee Kine 2757 | 205.02,Starlee Kine 2758 | 208.01,Starlee Kine 2759 | 223.03,Starlee Kine 2760 | 226,Starlee Kine 2761 | 226.01,Starlee Kine 2762 | 231.01,Starlee Kine 2763 | 238.01,Starlee Kine 2764 | 241.01,Starlee Kine 2765 | 248.01,Starlee Kine 2766 | 259.01,Starlee Kine 2767 | 261.03,Starlee Kine 2768 | 277.03,Starlee Kine 2769 | 283.02,Starlee Kine 2770 | 335,Starlee Kine 2771 | 339.01,Starlee Kine 2772 | 354.02,Starlee Kine 2773 | 424.01,Starlee Kine 2774 | 514.02,Starlee Kine 2775 | 522.01,Stephanie Foo 2776 | 529.01,Stephanie Foo 2777 | 549.03,Stephanie Foo 2778 | 552.03,Stephanie Foo 2779 | 556.02,Stephanie Foo 2780 | 568.01,Stephanie Foo 2781 | 576.02,Stephanie Foo 2782 | 580.02,Stephanie Foo 2783 | 585.03,Stephanie Foo 2784 | 602.05,Stephanie Foo 2785 | 603.02,Stephanie Foo 2786 | 608.03,Stephanie Foo 2787 | 616.02,Stephanie Foo 2788 | 617.03,Stephanie Foo 2789 | 93.02,Stephanie Howard 2790 | 119.03,Stephen Donaldson 2791 | 130.02,Stephen Dubner 2792 | 618.01,Steven Jackson 2793 | 134,Stuart Dybek 2794 | 368.01,Studs Terkel 2795 | 530,Studs Terkel 2796 | 311.02,Sudhir Alladi Venkatesh 2797 | 366.03,Sudhir Alladi Venkatesh 2798 | 83.03,Susan Bergman 2799 | 76.02,Susan Berman 2800 | 153.01,Susan Burton 2801 | 162.01,Susan Burton 2802 | 167.02,Susan Burton 2803 | 172.01,Susan Burton 2804 | 175.02,Susan Burton 2805 | 186.01,Susan Burton 2806 | 219.01,Susan Burton 2807 | 219.02,Susan Burton 2808 | 225.04,Susan Burton 2809 | 230.01,Susan Burton 2810 | 244.04,Susan Burton 2811 | 254.01,Susan Burton 2812 | 254.02,Susan Burton 2813 | 370.01,Susan Burton 2814 | 386.04,Susan Burton 2815 | 433.04,Susan Burton 2816 | 445.01,Susan Burton 2817 | 202.04,Susan Drury 2818 | 211.03,Susan Drury 2819 | 231.04,Susan Drury 2820 | 236.01,Susan Drury 2821 | 258.03,Susan Drury 2822 | 321.01,Susan Drury 2823 | 480.01,Susan Orlean 2824 | 519.01,Susan Zalkind 2825 | 519.02,Susan Zalkind 2826 | 519.03,Susan Zalkind 2827 | 52.01,Susanna Kaysen 2828 | 431.02,Svetlana Alexievich 2829 | 573.02,Ta-Nehisi Coates 2830 | 352,Tal McThenia 2831 | 127.01,Tamar Brott 2832 | 127.02,Tamar Brott 2833 | 198.02,Tami Sagher 2834 | 314.04,Tami Sagher 2835 | 576.01,Tami Sagher 2836 | 464.02,Taylor Dayne 2837 | 380.02,Ted Gesing 2838 | 174.03,Terry Gross 2839 | 149.01,Terry Shine 2840 | 344.02,Thanh Tan 2841 | 381,Thanh Tan 2842 | 98.01,Nikki Silva 2843 | 98.01,Davia Nelson 2844 | 313.03,Thea Chaloner 2845 | 90.02,John Linnell 2846 | 90.02,John Flansburgh 2847 | 386,John Linnell 2848 | 386,John Flansburgh 2849 | 433,John Linnell 2850 | 433,John Flansburgh 2851 | 169.02,Thomas Beller 2852 | 60.01,Thomas Lynch 2853 | 333.03,Thomas Ricks 2854 | 464.02,Tig Notaro 2855 | 476,Tig Notaro 2856 | 476.01,Tig Notaro 2857 | 518.04,Tig Notaro 2858 | 558.02,Tig Notaro 2859 | 577.02,Tig Notaro 2860 | 159,Tillie Olsen 2861 | 476.04,Tim Kreider 2862 | 83.01,Tim Melley 2863 | 114.06,Tobias Wolff 2864 | 152.01,Tobias Wolff 2865 | 223.01,Todd Bachmann 2866 | 94.01,Tom Maggliozi 2867 | 94.01,Ray Maggliozi 2868 | 215,Tom Maggliozi 2869 | 215,Ray Maggliozi 2870 | 71.02,Tom Andrews 2871 | 234.02,Tom Wright 2872 | 235.02,Tom Wright 2873 | 335.02,Tony Hill 2874 | 81.05,Tori Marlan 2875 | 321.02,Trey Kay 2876 | 538.01,Tunette Powell 2877 | 335,Valentina Filimonova 2878 | 207.03,Veronica Chater 2879 | 228.01,Veronica Chater 2880 | 269.02,Veronica Chater 2881 | 349.02,Veronica Chater 2882 | 284.03,Virginia Holman 2883 | 153.03,Vivian Paley 2884 | 557.02,W. Kamau Bell 2885 | 369.04,Wayne Curtis 2886 | 409.02,Wayne Curtis 2887 | 398.02,Wells Tower 2888 | 149.04,Wendy Dorr 2889 | 172.02,Wendy Dorr 2890 | 186.04,Wendy Dorr 2891 | 206.01,Wendy Dorr 2892 | 224.03,Wendy Dorr 2893 | 248.03,Wendy Dorr 2894 | 371.04,Wendy Dorr 2895 | 448.02,Wendy McClure 2896 | 313.02,Will Seymour 2897 | 422.01,Wyatt Cenac 2898 | 524.03,Wyatt Cenac 2899 | 596.01,Zack McDermott 2900 | 564.02,Zoe Chace 2901 | 565.02,Zoe Chace 2902 | 565.04,Zoe Chace 2903 | 569.01,Zoe Chace 2904 | 569.03,Zoe Chace 2905 | 578.01,Zoe Chace 2906 | 580.01,Zoe Chace 2907 | 586,Zoe Chace 2908 | 590.02,Zoe Chace 2909 | 591,Zoe Chace 2910 | 591.01,Zoe Chace 2911 | 596.02,Zoe Chace 2912 | 600,Zoe Chace 2913 | 600.01,Zoe Chace 2914 | 602.08,Zoe Chace 2915 | 602.1,Zoe Chace 2916 | 606.02,Zoe Chace 2917 | 608.01,Zoe Chace 2918 | 609.01,Zoe Chace 2919 | 615.01,Zoe Chace 2920 | 621.02,Zoe Chace -------------------------------------------------------------------------------- /data/contributorWithoutDialogueGender.csv: -------------------------------------------------------------------------------- 1 | name,gender 2 | Barrett Golding,M 3 | Amy Dorn,F 4 | Beth Landau,F 5 | Bernard Cooper,M 6 | christina egloff,F 7 | cecilia vaisman,F 8 | chapin wilson,M 9 | christine coyle,F 10 | czerina patel,F 11 | Daniel Orozco,M 12 | Dick Orkin,M 13 | Dierdre Dolan,F 14 | dmae roberts,F 15 | ed dixon,M 16 | ellen horne,F 17 | ellen spiro,F 18 | elaine boehm,F 19 | elizabeth green,F 20 | fiona maazel,F 21 | gabe hudson,M 22 | greg tate,M 23 | haruki murakami,M 24 | judith budnitz,F 25 | ian frazier,M 26 | joss whedon,M 27 | jhumpa lahiri,F 28 | david finkel,M 29 | heather woodbury,F 30 | helen thorpe,F 31 | italo calvino,M 32 | james ellroy,M 33 | jane espenson,F 34 | jeffrey brown,M 35 | jenny ye,F 36 | jessica yu,F 37 | john jodzio,M 38 | jonathan mitchell,M 39 | josef skvorecky,M 40 | kelly coffield,F 41 | kevin morse,M 42 | kimberly meyer,F 43 | larry brown,M 44 | lee sandlin,M 45 | leslie odom jr.,M 46 | liza colonzeas,F 47 | lydia davis,F 48 | mark maron,M 49 | mary pruka,F 50 | michael bernard loggins,M 51 | michele ernsting,F 52 | nicholson baker,M 53 | paige cowett,F 54 | philip larkin,M 55 | rachel rutlidge,F 56 | rob bindler,M 57 | samantha hunt,F 58 | samara freemark,F 59 | sandra loh,F 60 | sonari glinton,F 61 | sarah kate kramer,F 62 | scott brown,M 63 | scott gurian,M 64 | stephanie howard,F 65 | stephen donaldson,M 66 | stuart dybek,M 67 | svetlana alexievich,F 68 | teal krech,F 69 | tice ridley,M 70 | tim kreider,M 71 | tom andrews,M 72 | tony hill,M 73 | trey kay,M 74 | virginia holman,F 75 | wendy mcclure,F 76 | nick van der kolk, M 77 | Steven Jackson,M 78 | Ana Adlerstein,F 79 | Jacob Mcclelland,M 80 | Gregory Whitehead,M -------------------------------------------------------------------------------- /notebooks/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-pudding/this-american-life/81feb975fabaf742fa81c15d87bdecff5d362075/notebooks/.DS_Store -------------------------------------------------------------------------------- /notebooks/.ipynb_checkpoints/createAct1Csv-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import pandas as pd\n", 12 | "import json\n", 13 | "import collections\n", 14 | "import csv\n", 15 | "import math\n", 16 | "import numpy as np\n", 17 | "import unidecode" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 2, 23 | "metadata": { 24 | "collapsed": true 25 | }, 26 | "outputs": [], 27 | "source": [ 28 | "def replaceActIds(newdataset):\n", 29 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"prologue\", value=0)\n", 30 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act1\", value=0.01)\n", 31 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act2\", value=0.02)\n", 32 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act3\", value=0.03)\n", 33 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act4\", value=0.04)\n", 34 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act5\", value=0.05)\n", 35 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act6\", value=0.06)\n", 36 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act7\", value=0.07)\n", 37 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act8\", value=0.08)\n", 38 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act9\", value=0.09)\n", 39 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act10\", value=0.10)\n", 40 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act11\", value=0.11)\n", 41 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act12\", value=0.12)\n", 42 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act13\", value=0.13)\n", 43 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act14\", value=0.14)\n", 44 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act15\", value=0.15)\n", 45 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act16\", value=0.16)\n", 46 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act17\", value=0.17)\n", 47 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act18\", value=0.18)\n", 48 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act19\", value=0.19)\n", 49 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act20\", value=0.20)\n", 50 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"credits\", value=0.21)\n", 51 | " return newdataset" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 3, 57 | "metadata": { 58 | "collapsed": true 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "def convertData(dataframe):\n", 63 | " dataframe = dataframe.reset_index(col_level=1)\n", 64 | " df_m = dataframe[dataframe['gender']==\"M\"]\n", 65 | " df_f = dataframe[dataframe['gender']==\"F\"]\n", 66 | " df_all=pd.merge(df_m, df_f, on=\"episode\", how=\"outer\")\n", 67 | " df_all = df_all[[\"episode\",\"wordCount_x\", \"wordCount_y\"]]\n", 68 | " df_all[\"wordCount_y\"] = df_all[\"wordCount_y\"].fillna(0)\n", 69 | " df_all[\"wordCount_x\"] = df_all[\"wordCount_x\"].fillna(0)\n", 70 | " df_all[\"total\"] = df_all[\"wordCount_x\"] + df_all[\"wordCount_y\"]\n", 71 | " df_all[\"male%\"] = df_all[\"wordCount_x\"] / df_all[\"total\"]\n", 72 | " df_all[\"female%\"] = df_all[\"wordCount_y\"] / df_all[\"total\"]\n", 73 | " df_all.columns=[\"episode\", \"male\",\"female\",\"total\",\"male%\",\"female%\"]\n", 74 | " return df_all" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": 23, 80 | "metadata": { 81 | "collapsed": true 82 | }, 83 | "outputs": [], 84 | "source": [ 85 | "gender_dataset = pd.read_csv(\"../data/gender.csv\")\n", 86 | "acts_dataset = pd.read_table(\"../data/acts.tsv\")\n", 87 | "episodes_dataset = pd.read_table(\"../data/episodes.tsv\")\n", 88 | "dialogue_dataset = pd.read_table(\"../data/dialogue.tsv\")\n", 89 | "dialogue_dataset = replaceActIds(dialogue_dataset)\n", 90 | "dialogue_dataset[\"episode-act\"]= dialogue_dataset[\"episode\"].apply(float) + dialogue_dataset[\"act\"].apply(float) \n", 91 | "acts_dataset = replaceActIds(acts_dataset)\n", 92 | "acts_dataset[\"episode-act\"]= acts_dataset[\"episode\"].apply(float) + acts_dataset[\"act\"].apply(float) \n", 93 | "acts_dataset.to_csv(\"../data/actInfo.csv\", index=False)" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 24, 99 | "metadata": { 100 | "collapsed": true 101 | }, 102 | "outputs": [], 103 | "source": [ 104 | "dialogue_dataset = dialogue_dataset[~pd.isnull(dialogue_dataset[\"dialogue\"])]\n", 105 | "dialogue_dataset[\"wordCount\"] = dialogue_dataset[\"dialogue\"].map(lambda x: len(x.split()))\n", 106 | "dialogue_dataset.to_csv(\"../data/dialoguebyact.csv\", index=False)" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 25, 112 | "metadata": { 113 | "collapsed": true 114 | }, 115 | "outputs": [], 116 | "source": [ 117 | "export_dataset = dialogue_dataset.groupby([\"name\",\"episode\",\"act\",\"gender\",\"role\"]).sum()[\"wordCount\"].reset_index()\n", 118 | "export_dataset.sort_values([\"episode\",\"act\",\"name\"])\n" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 26, 124 | "metadata": { 125 | "collapsed": true 126 | }, 127 | "outputs": [], 128 | "source": [ 129 | "# get % of male dialogue per episode without Ira\n", 130 | "episodeData = dialogue_dataset[(dialogue_dataset[\"name\"]!=\"Ira Glass\") & (dialogue_dataset[\"name\"]!=\"Announcer\")].groupby([\"episode\",\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 131 | "df_all = convertData(episodeData)" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 27, 137 | "metadata": { 138 | "collapsed": true 139 | }, 140 | "outputs": [], 141 | "source": [ 142 | "#merge to create act 1 csv\n", 143 | "mergedAct1 = df_all.merge(episodes_dataset, on=\"episode\")\n", 144 | "mergedAct1[\"male%\"] = mergedAct1[\"male%\"] * 100\n", 145 | "mergedAct1.columns = [\"episode\",\"male\",\"female\",\"total\",\"malePercent\",\"femalePercent\",\"month\",\"day\",\"year\",\"title\",\"description\",\"imageurl\",\"url\"]\n", 146 | "mergedAct1 = mergedAct1[[\"episode\",\"malePercent\",\"year\",\"title\",\"description\",\"url\"]]\n", 147 | "mergedAct1.to_csv(\"../web/src/assets/data/act1.csv\", index=False)" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": 9, 153 | "metadata": {}, 154 | "outputs": [ 155 | { 156 | "data": { 157 | "text/plain": [ 158 | "0.7041800643086816" 159 | ] 160 | }, 161 | "execution_count": 9, 162 | "metadata": {}, 163 | "output_type": "execute_result" 164 | } 165 | ], 166 | "source": [ 167 | "# percentage of episodes that have more than 50% male dialogue\n", 168 | "len(mergedAct1[mergedAct1[\"malePercent\"] > 50])/float(len(mergedAct1))" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": 10, 174 | "metadata": { 175 | "scrolled": true 176 | }, 177 | "outputs": [ 178 | { 179 | "data": { 180 | "text/plain": [ 181 | "0.6331263910038655" 182 | ] 183 | }, 184 | "execution_count": 10, 185 | "metadata": {}, 186 | "output_type": "execute_result" 187 | } 188 | ], 189 | "source": [ 190 | "menCount = len(gender_dataset[gender_dataset[\"gender\"]==\"M\"])\n", 191 | "womenCount = len(gender_dataset[gender_dataset[\"gender\"]==\"F\"])\n", 192 | "# percent of speakers that are male\n", 193 | "menCount/float(menCount + womenCount)" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": 11, 199 | "metadata": {}, 200 | "outputs": [ 201 | { 202 | "data": { 203 | "text/plain": [ 204 | "0.63622855280434232" 205 | ] 206 | }, 207 | "execution_count": 11, 208 | "metadata": {}, 209 | "output_type": "execute_result" 210 | } 211 | ], 212 | "source": [ 213 | "wordCounts = dialogue_dataset[dialogue_dataset[\"name\"] != \"Ira Glass\"].groupby([\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 214 | "femaleWordCount = wordCounts.iloc[0][\"wordCount\"]\n", 215 | "maleWordCount = wordCounts.iloc[2][\"wordCount\"]\n", 216 | "# percent of words spoken that are male, excluding Ira Glass\n", 217 | "maleWordCount/float(maleWordCount + femaleWordCount)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": 12, 223 | "metadata": {}, 224 | "outputs": [ 225 | { 226 | "data": { 227 | "text/plain": [ 228 | "(10.388059701492537, 9.0, 6.1708126036484243, 5.0)" 229 | ] 230 | }, 231 | "execution_count": 12, 232 | "metadata": {}, 233 | "output_type": "execute_result" 234 | } 235 | ], 236 | "source": [ 237 | "# average number of men and women in an episode withOUT Ira Glass and Announcer\n", 238 | "subset = dialogue_dataset[[\"episode\",\"name\",\"gender\"]].drop_duplicates()\n", 239 | "subset = subset[(subset[\"name\"] != \"Ira Glass\") & (subset[\"name\"] != \"Announcer\")]\n", 240 | "men = subset[subset[\"gender\"]==\"M\"].groupby(\"episode\").count().reset_index()[[\"episode\", \"name\"]]\n", 241 | "women = subset[subset[\"gender\"]==\"F\"].groupby(\"episode\").count().reset_index()[[\"episode\", \"name\"]]\n", 242 | "menwomencount = men.merge(women, on=\"episode\")\n", 243 | "menwomencount.columns = [\"episode\", \"numMen\", \"numWomen\"]\n", 244 | "menwomencount[\"numMen\"].mean(), menwomencount[\"numMen\"].median(), menwomencount[\"numWomen\"].mean(), menwomencount[\"numWomen\"].median()" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": 13, 250 | "metadata": {}, 251 | "outputs": [ 252 | { 253 | "data": { 254 | "text/plain": [ 255 | "(455.02030063536341, 128.0, 451.6072004298764, 117.0)" 256 | ] 257 | }, 258 | "execution_count": 13, 259 | "metadata": {}, 260 | "output_type": "execute_result" 261 | } 262 | ], 263 | "source": [ 264 | "# In an avg episode, how many words does a woman speak vs a man.\n", 265 | "dialogue_dataset2 = dialogue_dataset[(dialogue_dataset[\"name\"]!=\"Ira Glass\") & (dialogue_dataset[\"name\"]!=\"Announcer\")]\n", 266 | "men = dialogue_dataset2[(dialogue_dataset2[\"gender\"]==\"M\")].groupby([\"name\",\"episode\"]).sum()[\"wordCount\"].reset_index()\n", 267 | "women = dialogue_dataset2[(dialogue_dataset2[\"gender\"]==\"F\")].groupby([\"name\",\"episode\"]).sum()[\"wordCount\"].reset_index()\n", 268 | "men[\"wordCount\"].mean(), men[\"wordCount\"].median(), women[\"wordCount\"].mean(), women[\"wordCount\"].median()" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "execution_count": 14, 274 | "metadata": {}, 275 | "outputs": [ 276 | { 277 | "data": { 278 | "text/plain": [ 279 | "(1.5500840739851069, 1.0, 1.6534873389604621, 1.0)" 280 | ] 281 | }, 282 | "execution_count": 14, 283 | "metadata": {}, 284 | "output_type": "execute_result" 285 | } 286 | ], 287 | "source": [ 288 | "# How many appearances in episodes does a man vs woman make?\n", 289 | "men = dialogue_dataset2[(dialogue_dataset2[\"gender\"]==\"M\")].groupby([\"name\", \"episode\"]).count()[\"wordCount\"].reset_index().groupby([\"name\"]).count()[\"episode\"].reset_index()\n", 290 | "women = dialogue_dataset2[(dialogue_dataset2[\"gender\"]==\"F\")].groupby([\"name\", \"episode\"]).count()[\"wordCount\"].reset_index().groupby([\"name\"]).count()[\"episode\"].reset_index()\n", 291 | "men[\"episode\"].mean(), men[\"episode\"].median(), women[\"episode\"].mean(), women[\"episode\"].median()" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": 41, 297 | "metadata": {}, 298 | "outputs": [ 299 | { 300 | "data": { 301 | "text/plain": [ 302 | "0.6450389503895039" 303 | ] 304 | }, 305 | "execution_count": 41, 306 | "metadata": {}, 307 | "output_type": "execute_result" 308 | } 309 | ], 310 | "source": [ 311 | "# percentage of subjects that are male\n", 312 | "subjects = dialogue_dataset[dialogue_dataset[\"role\"]==\"subject\"][[\"name\",\"gender\",\"episode-act\"]].drop_duplicates()\n", 313 | "maleSubjectCount = len(subjects[subjects[\"gender\"]==\"M\"])\n", 314 | "femaleSubjectCount = len(subjects[subjects[\"gender\"]==\"F\"])\n", 315 | "maleSubjectCount/float(maleSubjectCount + femaleSubjectCount)" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": 51, 321 | "metadata": {}, 322 | "outputs": [ 323 | { 324 | "name": "stdout", 325 | "output_type": "stream", 326 | "text": [ 327 | "5405 3132 0.633126391004\n" 328 | ] 329 | } 330 | ], 331 | "source": [ 332 | "# percentage of speakers that are male\n", 333 | "speakers = gender_dataset[[\"name\",\"gender\",\"episode\"]].drop_duplicates()\n", 334 | "maleSpeakerCount = len(speakers[speakers[\"gender\"]==\"M\"])\n", 335 | "femaleSpeakerCount = len(speakers[speakers[\"gender\"]==\"F\"])\n", 336 | "print maleSpeakerCount, femaleSpeakerCount, maleSpeakerCount/float(maleSpeakerCount + femaleSpeakerCount)\n" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": null, 342 | "metadata": { 343 | "collapsed": true 344 | }, 345 | "outputs": [], 346 | "source": [] 347 | } 348 | ], 349 | "metadata": { 350 | "kernelspec": { 351 | "display_name": "Python 2", 352 | "language": "python", 353 | "name": "python2" 354 | }, 355 | "language_info": { 356 | "codemirror_mode": { 357 | "name": "ipython", 358 | "version": 2 359 | }, 360 | "file_extension": ".py", 361 | "mimetype": "text/x-python", 362 | "name": "python", 363 | "nbconvert_exporter": "python", 364 | "pygments_lexer": "ipython2", 365 | "version": "2.7.13" 366 | } 367 | }, 368 | "nbformat": 4, 369 | "nbformat_minor": 2 370 | } 371 | -------------------------------------------------------------------------------- /notebooks/.ipynb_checkpoints/createAct3Csv-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import pandas as pd\n", 12 | "import json\n", 13 | "import collections\n", 14 | "import csv" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 9, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "# get dialogue of each act\n", 24 | "df = pd.read_csv(\"../data/dialoguebyact.csv\")\n", 25 | "df = df[df[\"act\"] != 0.21] #ignore credits\n", 26 | "\n", 27 | "# contributors of each act\n", 28 | "contributors_dataset = pd.read_csv(\"../data/contributorForEachActFinal.csv\")\n", 29 | "\n", 30 | "# create gender file with contributors that never speak\n", 31 | "gender_dataset = pd.read_csv(\"../data/gender.csv\")\n", 32 | "contributorWithoutDialogueGender = pd.read_csv(\"../data/contributorWithoutDialogueGender.csv\")\n", 33 | "gender_dataset2 = pd.concat([gender_dataset, contributorWithoutDialogueGender])\n", 34 | "\n", 35 | "contributorsUppercase = contributors_dataset\n", 36 | "# lowercase all the names so they can match\n", 37 | "gender_dataset2[\"name\"] = gender_dataset2[\"name\"].str.lower()\n", 38 | "contributors_dataset[\"name\"] = contributors_dataset[\"name\"].str.lower()\n", 39 | "\n", 40 | "# merge contributor listing with gender listing\n", 41 | "contributors_gender = contributors_dataset.merge(gender_dataset2, on=\"name\")" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 28, 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "df[\"name\"] = df[\"name\"].str.lower()\n", 51 | "subjectsPerAct = df[(df[\"role\"]==\"subject\")][[\"episode-act\",\"name\",\"gender\",\"wordCount\"]].groupby([\"name\",\"episode-act\",\"gender\"]).sum()[\"wordCount\"].reset_index()" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": null, 57 | "metadata": { 58 | "collapsed": true 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "contributors_gender.to_csv(\"../data/producersOfEachAct.csv\", index=False)\n", 63 | "subjectsPerAct.to_csv(\"../data/subjectsOfEachAct.csv\", index=False)" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": null, 69 | "metadata": { 70 | "collapsed": true 71 | }, 72 | "outputs": [], 73 | "source": [ 74 | "# getting reporter gender breakdown per act\n", 75 | "producerGenders = []\n", 76 | "\n", 77 | "for episode in range(1, 624):\n", 78 | " for act in range(0, 22):\n", 79 | " episodeAct = episode + float(act) * 0.01\n", 80 | " producers = contributors_gender[contributors_gender[\"episode-act\"]== episodeAct]\n", 81 | " maleCount = 0\n", 82 | " femaleCount = 0\n", 83 | " for index, row in producers.iterrows():\n", 84 | "# if (row[\"name\"] != \"ira glass\"):\n", 85 | " if row[\"gender\"] == \"M\":\n", 86 | " maleCount += 1\n", 87 | " if row[\"gender\"] == \"F\":\n", 88 | " femaleCount += 1\n", 89 | " total = float(femaleCount + maleCount)\n", 90 | " malepercent = -1\n", 91 | " femalepercent = -1\n", 92 | " if total != 0:\n", 93 | " malepercent = maleCount/total\n", 94 | " femalepercent = femaleCount/total\n", 95 | " producerGenders.append([episodeAct, malepercent, femalepercent, maleCount, femaleCount, total])\n", 96 | "\n", 97 | "with open('../data/producersGender.csv', 'wb') as f: \n", 98 | " w = csv.writer(f)\n", 99 | " w.writerow([\"episode-act\",\"male%\",\"female%\",\"male\",\"female\",\"total\"])\n", 100 | " for list1 in producerGenders:\n", 101 | " w.writerow(list1)" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": null, 107 | "metadata": { 108 | "collapsed": true 109 | }, 110 | "outputs": [], 111 | "source": [ 112 | "producerGenderData = pd.read_csv(\"../data/producersGender.csv\")\n", 113 | "producerGenderData = producerGenderData.drop_duplicates()" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 8, 119 | "metadata": {}, 120 | "outputs": [ 121 | { 122 | "data": { 123 | "text/plain": [ 124 | "(2467, 6)" 125 | ] 126 | }, 127 | "execution_count": 8, 128 | "metadata": {}, 129 | "output_type": "execute_result" 130 | } 131 | ], 132 | "source": [ 133 | "# exclude prologues, credits, and acts where no reporter is listed\n", 134 | "producerGenderData[(producerGenderData[\"male%\"] != -1) & (producerGenderData[\"episode-act\"] != 0.00) & (producerGenderData[\"episode-act\"] != 0.21)].shape" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 9, 140 | "metadata": { 141 | "collapsed": true 142 | }, 143 | "outputs": [], 144 | "source": [ 145 | "# getting subject/interviewee gender breakdown per act\n", 146 | "subjectsPerActAltered = []\n", 147 | "\n", 148 | "for episode in range(1, 624):\n", 149 | " for act in range(0, 22):\n", 150 | " episodeAct = episode + float(act) * 0.01\n", 151 | " producers = contributors_gender[contributors_gender[\"episode-act\"]== episodeAct]\n", 152 | " subjects = subjectsPerAct[subjectsPerAct[\"episode-act\"] == episodeAct]\n", 153 | " for index, srow in subjects.iterrows():\n", 154 | " for index2, prow in producers.iterrows():\n", 155 | " if srow[\"name\"].lower() != prow[\"name\"].lower():\n", 156 | " subjectsPerActAltered.append([srow[\"name\"], episodeAct, srow[\"gender\"], srow[\"wordCount\"]])\n", 157 | "\n", 158 | "with open('../data/subjectGendersWithoutProducers.csv', 'wb') as f: \n", 159 | " w = csv.writer(f)\n", 160 | " w.writerow([\"name\", \"episode-act\",\"gender\", \"wordCount\"])\n", 161 | " for list1 in subjectsPerActAltered:\n", 162 | " w.writerow(list1)" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 10, 168 | "metadata": { 169 | "collapsed": true 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "subjectsPerAct2 = pd.read_csv(\"../data/subjectGendersWithoutProducers.csv\").groupby([\"gender\", \"episode-act\"])[\"wordCount\"].sum().reset_index()" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 11, 179 | "metadata": { 180 | "collapsed": true 181 | }, 182 | "outputs": [], 183 | "source": [ 184 | "maleSubjects = subjectsPerAct2[subjectsPerAct2[\"gender\"]==\"M\"]\n", 185 | "femaleSubjects = subjectsPerAct2[subjectsPerAct2[\"gender\"]==\"F\"]\n", 186 | "mergedSubjects = maleSubjects.merge(femaleSubjects, on=\"episode-act\", how=\"outer\").fillna(0)\n", 187 | "mergedSubjects[\"total\"] = mergedSubjects[\"wordCount_x\"]+mergedSubjects[\"wordCount_y\"]\n", 188 | "mergedSubjects[\"male%\"] = mergedSubjects[\"wordCount_x\"]/mergedSubjects[\"total\"]\n", 189 | "subjects = mergedSubjects[[\"episode-act\",\"male%\",\"wordCount_x\",\"total\"]]" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 12, 195 | "metadata": { 196 | "collapsed": true 197 | }, 198 | "outputs": [], 199 | "source": [ 200 | "# merge producer gender data and interviewee gender data into one spreadsheet\n", 201 | "producerSubject = producerGenderData.merge(subjects, on=\"episode-act\")[[\"episode-act\", \"male%_x\",\"total_x\",\"male%_y\",\"wordCount_x\",\"total_y\"]]\n", 202 | "producerSubject.columns = [\"episode-act\",\"percentMaleProducers\",\"totalProducerCount\",\"percentMaleSubjectDialogue\",\"maleSubjectWordCount\",\"totalSubjectWordCount\"]\n", 203 | "actInfo = pd.read_csv(\"../data/actInfo.csv\")\n", 204 | "mergedAct3 = producerSubject.merge(actInfo, on=\"episode-act\")\n", 205 | "mergedAct3 = mergedAct3[mergedAct3[\"act\"] != 0]\n", 206 | "mergedAct3[\"percentMaleProducers\"] = mergedAct3[\"percentMaleProducers\"]*100\n", 207 | "mergedAct3[\"percentMaleSubjectDialogue\"] = mergedAct3[\"percentMaleSubjectDialogue\"]*100" 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": 13, 213 | "metadata": { 214 | "collapsed": true 215 | }, 216 | "outputs": [], 217 | "source": [ 218 | "# export spreadsheet for use\n", 219 | "mergedAct3 = mergedAct3.sort_values(\"percentMaleSubjectDialogue\", ascending = False)\n", 220 | "mergedAct3.to_csv(\"../web/src/assets/data/act3.csv\", index=False)" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 14, 226 | "metadata": { 227 | "scrolled": true 228 | }, 229 | "outputs": [ 230 | { 231 | "data": { 232 | "text/plain": [ 233 | "(68.686856100131877, 64.744854353538258)" 234 | ] 235 | }, 236 | "execution_count": 14, 237 | "metadata": {}, 238 | "output_type": "execute_result" 239 | } 240 | ], 241 | "source": [ 242 | "#average amount of male interviewee dialogue for male reported acts and female reported acts\n", 243 | "male = mergedAct3[mergedAct3[\"percentMaleProducers\"] == 100]\n", 244 | "female = mergedAct3[(mergedAct3[\"percentMaleProducers\"] == 0)]\n", 245 | "male[\"percentMaleSubjectDialogue\"].mean(), female[\"percentMaleSubjectDialogue\"].mean()" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": 15, 251 | "metadata": { 252 | "scrolled": true 253 | }, 254 | "outputs": [ 255 | { 256 | "data": { 257 | "text/plain": [ 258 | "0.59472049689441" 259 | ] 260 | }, 261 | "execution_count": 15, 262 | "metadata": {}, 263 | "output_type": "execute_result" 264 | } 265 | ], 266 | "source": [ 267 | "maleContributorCount = len(contributors_gender[contributors_gender[\"gender\"]==\"M\"][\"name\"].drop_duplicates())\n", 268 | "femaleContributorCount = len(contributors_gender[contributors_gender[\"gender\"]==\"F\"][\"name\"].drop_duplicates())\n", 269 | "#percent of contributors that are male\n", 270 | "maleContributorCount/float(maleContributorCount+femaleContributorCount)" 271 | ] 272 | }, 273 | { 274 | "cell_type": "code", 275 | "execution_count": 24, 276 | "metadata": {}, 277 | "outputs": [ 278 | { 279 | "name": "stdout", 280 | "output_type": "stream", 281 | "text": [ 282 | "1995 941 23 0.976141078838\n", 283 | "1996 192 189 0.503937007874\n", 284 | "1997 79 34 0.699115044248\n", 285 | "1998 119 32 0.788079470199\n", 286 | "1999 62 48 0.563636363636\n", 287 | "2000 33 78 0.297297297297\n", 288 | "2001 84 21 0.8\n", 289 | "2002 53 19 0.736111111111\n", 290 | "2003 22 10 0.6875\n", 291 | "2004 39 50 0.438202247191\n", 292 | "2005 25 20 0.555555555556\n", 293 | "2006 19 12 0.612903225806\n", 294 | "2007 25 9 0.735294117647\n", 295 | "2008 38 25 0.603174603175\n", 296 | "2009 26 64 0.288888888889\n", 297 | "2010 60 8 0.882352941176\n", 298 | "2011 25 12 0.675675675676\n", 299 | "2012 42 43 0.494117647059\n", 300 | "2013 6 14 0.3\n", 301 | "2014 17 43 0.283333333333\n", 302 | "2015 24 15 0.615384615385\n", 303 | "2016 16 13 0.551724137931\n", 304 | "2017 3 5 0.375\n" 305 | ] 306 | } 307 | ], 308 | "source": [ 309 | "# calculating % of contributors that are male per year\n", 310 | "episodes = pd.read_table(\"../data/episodes.tsv\")\n", 311 | "contributorsByYear = contributors_gender.merge(episodes, on=\"episode\")\n", 312 | "contributorsByYear = contributorsByYear[[\"gender\",\"name\",\"year\"]]\n", 313 | "\n", 314 | "for year in range(1995,2018):\n", 315 | " subset = contributorsByYear[contributorsByYear[\"year\"]== year]\n", 316 | " male = len(subset[subset[\"gender\"]==\"M\"])\n", 317 | " female = len(subset[subset[\"gender\"]==\"F\"])\n", 318 | " print year, male, female, male/float(female + male)\n" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 31, 324 | "metadata": {}, 325 | "outputs": [ 326 | { 327 | "ename": "NameError", 328 | "evalue": "name 'subjectsPerYear3' is not defined", 329 | "output_type": "error", 330 | "traceback": [ 331 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 332 | "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", 333 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# calculating % of interviewees that are male per year\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0msubjectsPerAct3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"role\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;34m\"subject\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"episode-act\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"episode\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"name\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"gender\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"wordCount\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroupby\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"name\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"episode-act\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"episode\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"gender\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"wordCount\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0msubjectsPerYear3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msubjectsPerYear3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmerge\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mepisodes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mon\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"episode\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0msubjectsPerYear3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msubjectsPerYear3\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"gender\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"name\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"year\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0myear\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1995\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2018\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 334 | "\u001b[0;31mNameError\u001b[0m: name 'subjectsPerYear3' is not defined" 335 | ] 336 | } 337 | ], 338 | "source": [ 339 | "# calculating % of interviewees that are male per year\n", 340 | "subjectsPerAct3 = df[(df[\"role\"]==\"subject\")][[\"episode-act\",\"episode\",\"name\",\"gender\",\"wordCount\"]].groupby([\"name\",\"episode-act\",\"episode\",\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 341 | "subjectsPerYear3 = subjectsPerAct3.merge(episodes, on=\"episode\")\n", 342 | "subjectsPerYear3 = subjectsPerYear3[[\"gender\",\"name\",\"year\"]]\n", 343 | "for year in range(1995,2018):\n", 344 | " subset = subjectsPerYear3[subjectsPerYear3[\"year\"]== year]\n", 345 | " male = len(subset[subset[\"gender\"]==\"M\"])\n", 346 | " female = len(subset[subset[\"gender\"]==\"F\"])\n", 347 | " print year + \"\\t\" + male + \"\\t\" + female + \"\\t\" + male/float(female + male)" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": null, 353 | "metadata": { 354 | "collapsed": true 355 | }, 356 | "outputs": [], 357 | "source": [] 358 | } 359 | ], 360 | "metadata": { 361 | "kernelspec": { 362 | "display_name": "Python 2", 363 | "language": "python", 364 | "name": "python2" 365 | }, 366 | "language_info": { 367 | "codemirror_mode": { 368 | "name": "ipython", 369 | "version": 2 370 | }, 371 | "file_extension": ".py", 372 | "mimetype": "text/x-python", 373 | "name": "python", 374 | "nbconvert_exporter": "python", 375 | "pygments_lexer": "ipython2", 376 | "version": "2.7.13" 377 | } 378 | }, 379 | "nbformat": 4, 380 | "nbformat_minor": 2 381 | } 382 | -------------------------------------------------------------------------------- /notebooks/createAct1Csv.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import pandas as pd\n", 12 | "import json\n", 13 | "import collections\n", 14 | "import csv\n", 15 | "import math\n", 16 | "import numpy as np\n", 17 | "import unidecode" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 2, 23 | "metadata": { 24 | "collapsed": true 25 | }, 26 | "outputs": [], 27 | "source": [ 28 | "def replaceActIds(newdataset):\n", 29 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"prologue\", value=0)\n", 30 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act1\", value=0.01)\n", 31 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act2\", value=0.02)\n", 32 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act3\", value=0.03)\n", 33 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act4\", value=0.04)\n", 34 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act5\", value=0.05)\n", 35 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act6\", value=0.06)\n", 36 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act7\", value=0.07)\n", 37 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act8\", value=0.08)\n", 38 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act9\", value=0.09)\n", 39 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act10\", value=0.10)\n", 40 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act11\", value=0.11)\n", 41 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act12\", value=0.12)\n", 42 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act13\", value=0.13)\n", 43 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act14\", value=0.14)\n", 44 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act15\", value=0.15)\n", 45 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act16\", value=0.16)\n", 46 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act17\", value=0.17)\n", 47 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act18\", value=0.18)\n", 48 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act19\", value=0.19)\n", 49 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"act20\", value=0.20)\n", 50 | " newdataset[\"act\"] = newdataset[\"act\"].replace(to_replace=\"credits\", value=0.21)\n", 51 | " return newdataset" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 3, 57 | "metadata": { 58 | "collapsed": true 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "def convertData(dataframe):\n", 63 | " dataframe = dataframe.reset_index(col_level=1)\n", 64 | " df_m = dataframe[dataframe['gender']==\"M\"]\n", 65 | " df_f = dataframe[dataframe['gender']==\"F\"]\n", 66 | " df_all=pd.merge(df_m, df_f, on=\"episode\", how=\"outer\")\n", 67 | " df_all = df_all[[\"episode\",\"wordCount_x\", \"wordCount_y\"]]\n", 68 | " df_all[\"wordCount_y\"] = df_all[\"wordCount_y\"].fillna(0)\n", 69 | " df_all[\"wordCount_x\"] = df_all[\"wordCount_x\"].fillna(0)\n", 70 | " df_all[\"total\"] = df_all[\"wordCount_x\"] + df_all[\"wordCount_y\"]\n", 71 | " df_all[\"male%\"] = df_all[\"wordCount_x\"] / df_all[\"total\"]\n", 72 | " df_all[\"female%\"] = df_all[\"wordCount_y\"] / df_all[\"total\"]\n", 73 | " df_all.columns=[\"episode\", \"male\",\"female\",\"total\",\"male%\",\"female%\"]\n", 74 | " return df_all" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": 23, 80 | "metadata": { 81 | "collapsed": true 82 | }, 83 | "outputs": [], 84 | "source": [ 85 | "gender_dataset = pd.read_csv(\"../data/gender.csv\")\n", 86 | "acts_dataset = pd.read_table(\"../data/acts.tsv\")\n", 87 | "episodes_dataset = pd.read_table(\"../data/episodes.tsv\")\n", 88 | "dialogue_dataset = pd.read_table(\"../data/dialogue.tsv\")\n", 89 | "dialogue_dataset = replaceActIds(dialogue_dataset)\n", 90 | "dialogue_dataset[\"episode-act\"]= dialogue_dataset[\"episode\"].apply(float) + dialogue_dataset[\"act\"].apply(float) \n", 91 | "acts_dataset = replaceActIds(acts_dataset)\n", 92 | "acts_dataset[\"episode-act\"]= acts_dataset[\"episode\"].apply(float) + acts_dataset[\"act\"].apply(float) \n", 93 | "acts_dataset.to_csv(\"../data/actInfo.csv\", index=False)" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 24, 99 | "metadata": { 100 | "collapsed": true 101 | }, 102 | "outputs": [], 103 | "source": [ 104 | "dialogue_dataset = dialogue_dataset[~pd.isnull(dialogue_dataset[\"dialogue\"])]\n", 105 | "dialogue_dataset[\"wordCount\"] = dialogue_dataset[\"dialogue\"].map(lambda x: len(x.split()))\n", 106 | "dialogue_dataset.to_csv(\"../data/dialoguebyact.csv\", index=False)" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 25, 112 | "metadata": { 113 | "collapsed": true 114 | }, 115 | "outputs": [], 116 | "source": [ 117 | "export_dataset = dialogue_dataset.groupby([\"name\",\"episode\",\"act\",\"gender\",\"role\"]).sum()[\"wordCount\"].reset_index()\n", 118 | "export_dataset.sort_values([\"episode\",\"act\",\"name\"])\n" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 26, 124 | "metadata": { 125 | "collapsed": true 126 | }, 127 | "outputs": [], 128 | "source": [ 129 | "# get % of male dialogue per episode without Ira\n", 130 | "episodeData = dialogue_dataset[(dialogue_dataset[\"name\"]!=\"Ira Glass\") & (dialogue_dataset[\"name\"]!=\"Announcer\")].groupby([\"episode\",\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 131 | "df_all = convertData(episodeData)" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 27, 137 | "metadata": { 138 | "collapsed": true 139 | }, 140 | "outputs": [], 141 | "source": [ 142 | "#merge to create act 1 csv\n", 143 | "mergedAct1 = df_all.merge(episodes_dataset, on=\"episode\")\n", 144 | "mergedAct1[\"male%\"] = mergedAct1[\"male%\"] * 100\n", 145 | "mergedAct1.columns = [\"episode\",\"male\",\"female\",\"total\",\"malePercent\",\"femalePercent\",\"month\",\"day\",\"year\",\"title\",\"description\",\"imageurl\",\"url\"]\n", 146 | "mergedAct1 = mergedAct1[[\"episode\",\"malePercent\",\"year\",\"title\",\"description\",\"url\"]]\n", 147 | "mergedAct1.to_csv(\"../web/src/assets/data/act1.csv\", index=False)" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": 9, 153 | "metadata": {}, 154 | "outputs": [ 155 | { 156 | "data": { 157 | "text/plain": [ 158 | "0.7041800643086816" 159 | ] 160 | }, 161 | "execution_count": 9, 162 | "metadata": {}, 163 | "output_type": "execute_result" 164 | } 165 | ], 166 | "source": [ 167 | "# percentage of episodes that have more than 50% male dialogue\n", 168 | "len(mergedAct1[mergedAct1[\"malePercent\"] > 50])/float(len(mergedAct1))" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": 10, 174 | "metadata": { 175 | "scrolled": true 176 | }, 177 | "outputs": [ 178 | { 179 | "data": { 180 | "text/plain": [ 181 | "0.6331263910038655" 182 | ] 183 | }, 184 | "execution_count": 10, 185 | "metadata": {}, 186 | "output_type": "execute_result" 187 | } 188 | ], 189 | "source": [ 190 | "menCount = len(gender_dataset[gender_dataset[\"gender\"]==\"M\"])\n", 191 | "womenCount = len(gender_dataset[gender_dataset[\"gender\"]==\"F\"])\n", 192 | "# percent of speakers that are male\n", 193 | "menCount/float(menCount + womenCount)" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": 11, 199 | "metadata": {}, 200 | "outputs": [ 201 | { 202 | "data": { 203 | "text/plain": [ 204 | "0.63622855280434232" 205 | ] 206 | }, 207 | "execution_count": 11, 208 | "metadata": {}, 209 | "output_type": "execute_result" 210 | } 211 | ], 212 | "source": [ 213 | "wordCounts = dialogue_dataset[dialogue_dataset[\"name\"] != \"Ira Glass\"].groupby([\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 214 | "femaleWordCount = wordCounts.iloc[0][\"wordCount\"]\n", 215 | "maleWordCount = wordCounts.iloc[2][\"wordCount\"]\n", 216 | "# percent of words spoken that are male, excluding Ira Glass\n", 217 | "maleWordCount/float(maleWordCount + femaleWordCount)" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": 12, 223 | "metadata": {}, 224 | "outputs": [ 225 | { 226 | "data": { 227 | "text/plain": [ 228 | "(10.388059701492537, 9.0, 6.1708126036484243, 5.0)" 229 | ] 230 | }, 231 | "execution_count": 12, 232 | "metadata": {}, 233 | "output_type": "execute_result" 234 | } 235 | ], 236 | "source": [ 237 | "# average number of men and women in an episode withOUT Ira Glass and Announcer\n", 238 | "subset = dialogue_dataset[[\"episode\",\"name\",\"gender\"]].drop_duplicates()\n", 239 | "subset = subset[(subset[\"name\"] != \"Ira Glass\") & (subset[\"name\"] != \"Announcer\")]\n", 240 | "men = subset[subset[\"gender\"]==\"M\"].groupby(\"episode\").count().reset_index()[[\"episode\", \"name\"]]\n", 241 | "women = subset[subset[\"gender\"]==\"F\"].groupby(\"episode\").count().reset_index()[[\"episode\", \"name\"]]\n", 242 | "menwomencount = men.merge(women, on=\"episode\")\n", 243 | "menwomencount.columns = [\"episode\", \"numMen\", \"numWomen\"]\n", 244 | "menwomencount[\"numMen\"].mean(), menwomencount[\"numMen\"].median(), menwomencount[\"numWomen\"].mean(), menwomencount[\"numWomen\"].median()" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": 13, 250 | "metadata": {}, 251 | "outputs": [ 252 | { 253 | "data": { 254 | "text/plain": [ 255 | "(455.02030063536341, 128.0, 451.6072004298764, 117.0)" 256 | ] 257 | }, 258 | "execution_count": 13, 259 | "metadata": {}, 260 | "output_type": "execute_result" 261 | } 262 | ], 263 | "source": [ 264 | "# In an avg episode, how many words does a woman speak vs a man.\n", 265 | "dialogue_dataset2 = dialogue_dataset[(dialogue_dataset[\"name\"]!=\"Ira Glass\") & (dialogue_dataset[\"name\"]!=\"Announcer\")]\n", 266 | "men = dialogue_dataset2[(dialogue_dataset2[\"gender\"]==\"M\")].groupby([\"name\",\"episode\"]).sum()[\"wordCount\"].reset_index()\n", 267 | "women = dialogue_dataset2[(dialogue_dataset2[\"gender\"]==\"F\")].groupby([\"name\",\"episode\"]).sum()[\"wordCount\"].reset_index()\n", 268 | "men[\"wordCount\"].mean(), men[\"wordCount\"].median(), women[\"wordCount\"].mean(), women[\"wordCount\"].median()" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "execution_count": 14, 274 | "metadata": {}, 275 | "outputs": [ 276 | { 277 | "data": { 278 | "text/plain": [ 279 | "(1.5500840739851069, 1.0, 1.6534873389604621, 1.0)" 280 | ] 281 | }, 282 | "execution_count": 14, 283 | "metadata": {}, 284 | "output_type": "execute_result" 285 | } 286 | ], 287 | "source": [ 288 | "# How many appearances in episodes does a man vs woman make?\n", 289 | "men = dialogue_dataset2[(dialogue_dataset2[\"gender\"]==\"M\")].groupby([\"name\", \"episode\"]).count()[\"wordCount\"].reset_index().groupby([\"name\"]).count()[\"episode\"].reset_index()\n", 290 | "women = dialogue_dataset2[(dialogue_dataset2[\"gender\"]==\"F\")].groupby([\"name\", \"episode\"]).count()[\"wordCount\"].reset_index().groupby([\"name\"]).count()[\"episode\"].reset_index()\n", 291 | "men[\"episode\"].mean(), men[\"episode\"].median(), women[\"episode\"].mean(), women[\"episode\"].median()" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": 41, 297 | "metadata": {}, 298 | "outputs": [ 299 | { 300 | "data": { 301 | "text/plain": [ 302 | "0.6450389503895039" 303 | ] 304 | }, 305 | "execution_count": 41, 306 | "metadata": {}, 307 | "output_type": "execute_result" 308 | } 309 | ], 310 | "source": [ 311 | "# percentage of subjects that are male\n", 312 | "subjects = dialogue_dataset[dialogue_dataset[\"role\"]==\"subject\"][[\"name\",\"gender\",\"episode-act\"]].drop_duplicates()\n", 313 | "maleSubjectCount = len(subjects[subjects[\"gender\"]==\"M\"])\n", 314 | "femaleSubjectCount = len(subjects[subjects[\"gender\"]==\"F\"])\n", 315 | "maleSubjectCount/float(maleSubjectCount + femaleSubjectCount)" 316 | ] 317 | }, 318 | { 319 | "cell_type": "code", 320 | "execution_count": 51, 321 | "metadata": {}, 322 | "outputs": [ 323 | { 324 | "name": "stdout", 325 | "output_type": "stream", 326 | "text": [ 327 | "5405 3132 0.633126391004\n" 328 | ] 329 | } 330 | ], 331 | "source": [ 332 | "# percentage of speakers that are male\n", 333 | "speakers = gender_dataset[[\"name\",\"gender\",\"episode\"]].drop_duplicates()\n", 334 | "maleSpeakerCount = len(speakers[speakers[\"gender\"]==\"M\"])\n", 335 | "femaleSpeakerCount = len(speakers[speakers[\"gender\"]==\"F\"])\n", 336 | "print maleSpeakerCount, femaleSpeakerCount, maleSpeakerCount/float(maleSpeakerCount + femaleSpeakerCount)\n" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": null, 342 | "metadata": { 343 | "collapsed": true 344 | }, 345 | "outputs": [], 346 | "source": [] 347 | } 348 | ], 349 | "metadata": { 350 | "kernelspec": { 351 | "display_name": "Python 2", 352 | "language": "python", 353 | "name": "python2" 354 | }, 355 | "language_info": { 356 | "codemirror_mode": { 357 | "name": "ipython", 358 | "version": 2 359 | }, 360 | "file_extension": ".py", 361 | "mimetype": "text/x-python", 362 | "name": "python", 363 | "nbconvert_exporter": "python", 364 | "pygments_lexer": "ipython2", 365 | "version": "2.7.13" 366 | } 367 | }, 368 | "nbformat": 4, 369 | "nbformat_minor": 2 370 | } 371 | -------------------------------------------------------------------------------- /notebooks/createAct3Csv.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import pandas as pd\n", 12 | "import json\n", 13 | "import collections\n", 14 | "import csv" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 9, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "# get dialogue of each act\n", 24 | "df = pd.read_csv(\"../data/dialoguebyact.csv\")\n", 25 | "df = df[df[\"act\"] != 0.21] #ignore credits\n", 26 | "\n", 27 | "# contributors of each act\n", 28 | "contributors_dataset = pd.read_csv(\"../data/contributorForEachActFinal.csv\")\n", 29 | "\n", 30 | "# create gender file with contributors that never speak\n", 31 | "gender_dataset = pd.read_csv(\"../data/gender.csv\")\n", 32 | "contributorWithoutDialogueGender = pd.read_csv(\"../data/contributorWithoutDialogueGender.csv\")\n", 33 | "gender_dataset2 = pd.concat([gender_dataset, contributorWithoutDialogueGender])\n", 34 | "\n", 35 | "contributorsUppercase = contributors_dataset\n", 36 | "# lowercase all the names so they can match\n", 37 | "gender_dataset2[\"name\"] = gender_dataset2[\"name\"].str.lower()\n", 38 | "contributors_dataset[\"name\"] = contributors_dataset[\"name\"].str.lower()\n", 39 | "\n", 40 | "# merge contributor listing with gender listing\n", 41 | "contributors_gender = contributors_dataset.merge(gender_dataset2, on=\"name\")" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 28, 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "df[\"name\"] = df[\"name\"].str.lower()\n", 51 | "subjectsPerAct = df[(df[\"role\"]==\"subject\")][[\"episode-act\",\"name\",\"gender\",\"wordCount\"]].groupby([\"name\",\"episode-act\",\"gender\"]).sum()[\"wordCount\"].reset_index()" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": null, 57 | "metadata": { 58 | "collapsed": true 59 | }, 60 | "outputs": [], 61 | "source": [ 62 | "contributors_gender.to_csv(\"../data/producersOfEachAct.csv\", index=False)\n", 63 | "subjectsPerAct.to_csv(\"../data/subjectsOfEachAct.csv\", index=False)" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": null, 69 | "metadata": { 70 | "collapsed": true 71 | }, 72 | "outputs": [], 73 | "source": [ 74 | "# getting reporter gender breakdown per act\n", 75 | "producerGenders = []\n", 76 | "\n", 77 | "for episode in range(1, 624):\n", 78 | " for act in range(0, 22):\n", 79 | " episodeAct = episode + float(act) * 0.01\n", 80 | " producers = contributors_gender[contributors_gender[\"episode-act\"]== episodeAct]\n", 81 | " maleCount = 0\n", 82 | " femaleCount = 0\n", 83 | " for index, row in producers.iterrows():\n", 84 | "# if (row[\"name\"] != \"ira glass\"):\n", 85 | " if row[\"gender\"] == \"M\":\n", 86 | " maleCount += 1\n", 87 | " if row[\"gender\"] == \"F\":\n", 88 | " femaleCount += 1\n", 89 | " total = float(femaleCount + maleCount)\n", 90 | " malepercent = -1\n", 91 | " femalepercent = -1\n", 92 | " if total != 0:\n", 93 | " malepercent = maleCount/total\n", 94 | " femalepercent = femaleCount/total\n", 95 | " producerGenders.append([episodeAct, malepercent, femalepercent, maleCount, femaleCount, total])\n", 96 | "\n", 97 | "with open('../data/producersGender.csv', 'wb') as f: \n", 98 | " w = csv.writer(f)\n", 99 | " w.writerow([\"episode-act\",\"male%\",\"female%\",\"male\",\"female\",\"total\"])\n", 100 | " for list1 in producerGenders:\n", 101 | " w.writerow(list1)" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": null, 107 | "metadata": { 108 | "collapsed": true 109 | }, 110 | "outputs": [], 111 | "source": [ 112 | "producerGenderData = pd.read_csv(\"../data/producersGender.csv\")\n", 113 | "producerGenderData = producerGenderData.drop_duplicates()" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 8, 119 | "metadata": {}, 120 | "outputs": [ 121 | { 122 | "data": { 123 | "text/plain": [ 124 | "(2467, 6)" 125 | ] 126 | }, 127 | "execution_count": 8, 128 | "metadata": {}, 129 | "output_type": "execute_result" 130 | } 131 | ], 132 | "source": [ 133 | "# exclude prologues, credits, and acts where no reporter is listed\n", 134 | "producerGenderData[(producerGenderData[\"male%\"] != -1) & (producerGenderData[\"episode-act\"] != 0.00) & (producerGenderData[\"episode-act\"] != 0.21)].shape" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 9, 140 | "metadata": { 141 | "collapsed": true 142 | }, 143 | "outputs": [], 144 | "source": [ 145 | "# getting subject/interviewee gender breakdown per act\n", 146 | "subjectsPerActAltered = []\n", 147 | "\n", 148 | "for episode in range(1, 624):\n", 149 | " for act in range(0, 22):\n", 150 | " episodeAct = episode + float(act) * 0.01\n", 151 | " producers = contributors_gender[contributors_gender[\"episode-act\"]== episodeAct]\n", 152 | " subjects = subjectsPerAct[subjectsPerAct[\"episode-act\"] == episodeAct]\n", 153 | " for index, srow in subjects.iterrows():\n", 154 | " for index2, prow in producers.iterrows():\n", 155 | " if srow[\"name\"].lower() != prow[\"name\"].lower():\n", 156 | " subjectsPerActAltered.append([srow[\"name\"], episodeAct, srow[\"gender\"], srow[\"wordCount\"]])\n", 157 | "\n", 158 | "with open('../data/subjectGendersWithoutProducers.csv', 'wb') as f: \n", 159 | " w = csv.writer(f)\n", 160 | " w.writerow([\"name\", \"episode-act\",\"gender\", \"wordCount\"])\n", 161 | " for list1 in subjectsPerActAltered:\n", 162 | " w.writerow(list1)" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": 10, 168 | "metadata": { 169 | "collapsed": true 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "subjectsPerAct2 = pd.read_csv(\"../data/subjectGendersWithoutProducers.csv\").groupby([\"gender\", \"episode-act\"])[\"wordCount\"].sum().reset_index()" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 11, 179 | "metadata": { 180 | "collapsed": true 181 | }, 182 | "outputs": [], 183 | "source": [ 184 | "maleSubjects = subjectsPerAct2[subjectsPerAct2[\"gender\"]==\"M\"]\n", 185 | "femaleSubjects = subjectsPerAct2[subjectsPerAct2[\"gender\"]==\"F\"]\n", 186 | "mergedSubjects = maleSubjects.merge(femaleSubjects, on=\"episode-act\", how=\"outer\").fillna(0)\n", 187 | "mergedSubjects[\"total\"] = mergedSubjects[\"wordCount_x\"]+mergedSubjects[\"wordCount_y\"]\n", 188 | "mergedSubjects[\"male%\"] = mergedSubjects[\"wordCount_x\"]/mergedSubjects[\"total\"]\n", 189 | "subjects = mergedSubjects[[\"episode-act\",\"male%\",\"wordCount_x\",\"total\"]]" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 12, 195 | "metadata": { 196 | "collapsed": true 197 | }, 198 | "outputs": [], 199 | "source": [ 200 | "# merge producer gender data and interviewee gender data into one spreadsheet\n", 201 | "producerSubject = producerGenderData.merge(subjects, on=\"episode-act\")[[\"episode-act\", \"male%_x\",\"total_x\",\"male%_y\",\"wordCount_x\",\"total_y\"]]\n", 202 | "producerSubject.columns = [\"episode-act\",\"percentMaleProducers\",\"totalProducerCount\",\"percentMaleSubjectDialogue\",\"maleSubjectWordCount\",\"totalSubjectWordCount\"]\n", 203 | "actInfo = pd.read_csv(\"../data/actInfo.csv\")\n", 204 | "mergedAct3 = producerSubject.merge(actInfo, on=\"episode-act\")\n", 205 | "mergedAct3 = mergedAct3[mergedAct3[\"act\"] != 0]\n", 206 | "mergedAct3[\"percentMaleProducers\"] = mergedAct3[\"percentMaleProducers\"]*100\n", 207 | "mergedAct3[\"percentMaleSubjectDialogue\"] = mergedAct3[\"percentMaleSubjectDialogue\"]*100" 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": 13, 213 | "metadata": { 214 | "collapsed": true 215 | }, 216 | "outputs": [], 217 | "source": [ 218 | "# export spreadsheet for use\n", 219 | "mergedAct3 = mergedAct3.sort_values(\"percentMaleSubjectDialogue\", ascending = False)\n", 220 | "mergedAct3.to_csv(\"../web/src/assets/data/act3.csv\", index=False)" 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 14, 226 | "metadata": { 227 | "scrolled": true 228 | }, 229 | "outputs": [ 230 | { 231 | "data": { 232 | "text/plain": [ 233 | "(68.686856100131877, 64.744854353538258)" 234 | ] 235 | }, 236 | "execution_count": 14, 237 | "metadata": {}, 238 | "output_type": "execute_result" 239 | } 240 | ], 241 | "source": [ 242 | "#average amount of male interviewee dialogue for male reported acts and female reported acts\n", 243 | "male = mergedAct3[mergedAct3[\"percentMaleProducers\"] == 100]\n", 244 | "female = mergedAct3[(mergedAct3[\"percentMaleProducers\"] == 0)]\n", 245 | "male[\"percentMaleSubjectDialogue\"].mean(), female[\"percentMaleSubjectDialogue\"].mean()" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": 15, 251 | "metadata": { 252 | "scrolled": true 253 | }, 254 | "outputs": [ 255 | { 256 | "data": { 257 | "text/plain": [ 258 | "0.59472049689441" 259 | ] 260 | }, 261 | "execution_count": 15, 262 | "metadata": {}, 263 | "output_type": "execute_result" 264 | } 265 | ], 266 | "source": [ 267 | "maleContributorCount = len(contributors_gender[contributors_gender[\"gender\"]==\"M\"][\"name\"].drop_duplicates())\n", 268 | "femaleContributorCount = len(contributors_gender[contributors_gender[\"gender\"]==\"F\"][\"name\"].drop_duplicates())\n", 269 | "#percent of contributors that are male\n", 270 | "maleContributorCount/float(maleContributorCount+femaleContributorCount)" 271 | ] 272 | }, 273 | { 274 | "cell_type": "code", 275 | "execution_count": 24, 276 | "metadata": {}, 277 | "outputs": [ 278 | { 279 | "name": "stdout", 280 | "output_type": "stream", 281 | "text": [ 282 | "1995 941 23 0.976141078838\n", 283 | "1996 192 189 0.503937007874\n", 284 | "1997 79 34 0.699115044248\n", 285 | "1998 119 32 0.788079470199\n", 286 | "1999 62 48 0.563636363636\n", 287 | "2000 33 78 0.297297297297\n", 288 | "2001 84 21 0.8\n", 289 | "2002 53 19 0.736111111111\n", 290 | "2003 22 10 0.6875\n", 291 | "2004 39 50 0.438202247191\n", 292 | "2005 25 20 0.555555555556\n", 293 | "2006 19 12 0.612903225806\n", 294 | "2007 25 9 0.735294117647\n", 295 | "2008 38 25 0.603174603175\n", 296 | "2009 26 64 0.288888888889\n", 297 | "2010 60 8 0.882352941176\n", 298 | "2011 25 12 0.675675675676\n", 299 | "2012 42 43 0.494117647059\n", 300 | "2013 6 14 0.3\n", 301 | "2014 17 43 0.283333333333\n", 302 | "2015 24 15 0.615384615385\n", 303 | "2016 16 13 0.551724137931\n", 304 | "2017 3 5 0.375\n" 305 | ] 306 | } 307 | ], 308 | "source": [ 309 | "# % of contributors that are male per year\n", 310 | "episodes = pd.read_table(\"../data/episodes.tsv\")\n", 311 | "contributorsByYear = contributors_gender.merge(episodes, on=\"episode\")\n", 312 | "contributorsByYear = contributorsByYear[[\"gender\",\"name\",\"year\"]]\n", 313 | "\n", 314 | "for year in range(1995,2018):\n", 315 | " subset = contributorsByYear[contributorsByYear[\"year\"]== year]\n", 316 | " male = len(subset[subset[\"gender\"]==\"M\"])\n", 317 | " female = len(subset[subset[\"gender\"]==\"F\"])\n", 318 | " print year, male, female, male/float(female + male)\n" 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": 34, 324 | "metadata": {}, 325 | "outputs": [ 326 | { 327 | "name": "stdout", 328 | "output_type": "stream", 329 | "text": [ 330 | "1995\t42\t20\t0.677419354839\n", 331 | "1996\t258\t189\t0.577181208054\n", 332 | "1997\t309\t174\t0.639751552795\n", 333 | "1998\t198\t157\t0.557746478873\n", 334 | "1999\t222\t163\t0.576623376623\n", 335 | "2000\t246\t114\t0.683333333333\n", 336 | "2001\t258\t164\t0.611374407583\n", 337 | "2002\t288\t145\t0.665127020785\n", 338 | "2003\t265\t131\t0.669191919192\n", 339 | "2004\t225\t144\t0.609756097561\n", 340 | "2005\t183\t97\t0.653571428571\n", 341 | "2006\t107\t39\t0.732876712329\n", 342 | "2007\t204\t122\t0.625766871166\n", 343 | "2008\t236\t120\t0.662921348315\n", 344 | "2009\t344\t150\t0.696356275304\n", 345 | "2010\t349\t137\t0.718106995885\n", 346 | "2011\t335\t223\t0.600358422939\n", 347 | "2012\t264\t123\t0.682170542636\n", 348 | "2013\t411\t209\t0.662903225806\n", 349 | "2014\t335\t184\t0.645472061657\n", 350 | "2015\t423\t245\t0.633233532934\n", 351 | "2016\t303\t165\t0.647435897436\n", 352 | "2017\t193\t104\t0.649831649832\n" 353 | ] 354 | } 355 | ], 356 | "source": [ 357 | "# % of interviewees that are male per year\n", 358 | "subjectsPerAct3 = df[(df[\"role\"]==\"subject\")][[\"episode-act\",\"episode\",\"name\",\"gender\",\"wordCount\"]].groupby([\"name\",\"episode-act\",\"episode\",\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 359 | "subjectsPerYear3 = subjectsPerAct3.merge(episodes, on=\"episode\")\n", 360 | "subjectsPerYear3 = subjectsPerYear3[[\"gender\",\"name\",\"year\", \"wordCount\"]]\n", 361 | "for year in range(1995,2018):\n", 362 | " subset = subjectsPerYear3[subjectsPerYear3[\"year\"]== year]\n", 363 | " male = len(subset[subset[\"gender\"]==\"M\"])\n", 364 | " female = len(subset[subset[\"gender\"]==\"F\"])\n", 365 | " print str(year) + \"\\t\" + str(male) + \"\\t\" + str(female) + \"\\t\" + str(male/float(female + male))" 366 | ] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": 49, 371 | "metadata": { 372 | "scrolled": true 373 | }, 374 | "outputs": [ 375 | { 376 | "name": "stdout", 377 | "output_type": "stream", 378 | "text": [ 379 | "1995 13913 3089 0.818315492295\n", 380 | "1996 62254 40030 0.608638692269\n", 381 | "1997 84930 35801 0.703464727369\n", 382 | "1998 74908 37208 0.668129437368\n", 383 | "1999 68950 35678 0.659001414535\n", 384 | "2000 56791 31029 0.64667501708\n", 385 | "2001 56428 31242 0.643640926201\n", 386 | "2002 63005 30129 0.67649837868\n", 387 | "2003 52016 29682 0.636686332591\n", 388 | "2004 66423 27046 0.710642031048\n", 389 | "2005 76318 35809 0.680638918369\n", 390 | "2006 36700 20103 0.646092635952\n", 391 | "2007 69806 22102 0.759520389955\n", 392 | "2008 62484 26791 0.699904788575\n", 393 | "2009 71818 24061 0.749048279602\n", 394 | "2010 68056 16774 0.80226335023\n", 395 | "2011 66649 38175 0.635818133252\n", 396 | "2012 66910 21774 0.75447656849\n", 397 | "2013 74120 34574 0.681914365098\n", 398 | "2014 67304 34009 0.66431751108\n", 399 | "2015 83212 45389 0.647055621651\n", 400 | "2016 73006 41015 0.640285561432\n", 401 | "2017 48036 21227 0.693530456376\n" 402 | ] 403 | } 404 | ], 405 | "source": [ 406 | "# % of subject dialogue that is male by year\n", 407 | "df2 = df.merge(episodes, on=\"episode\")\n", 408 | "for year in range(1995, 2018):\n", 409 | " subjectsPerAct = df2[(df2[\"role\"]==\"subject\") & (df2[\"year\"]==year)][[\"episode-act\",\"name\",\"gender\",\"wordCount\"]].groupby([\"name\",\"episode-act\",\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 410 | " maleCount = subjectsPerAct[subjectsPerAct[\"gender\"]==\"M\"][\"wordCount\"].sum()\n", 411 | " femaleCount = subjectsPerAct[subjectsPerAct[\"gender\"]==\"F\"][\"wordCount\"].sum()\n", 412 | " print year, maleCount, femaleCount, maleCount/float(femaleCount + maleCount)" 413 | ] 414 | }, 415 | { 416 | "cell_type": "code", 417 | "execution_count": 66, 418 | "metadata": {}, 419 | "outputs": [ 420 | { 421 | "name": "stdout", 422 | "output_type": "stream", 423 | "text": [ 424 | "1995 24771.0 8366.0 0.747532969189\n", 425 | "1996 134982.0 40649.0 0.768554526251\n", 426 | "1997 147067.0 48235.0 0.753023522545\n", 427 | "1998 108558.0 51793.0 0.677002326147\n", 428 | "1999 99406.0 40989.0 0.708045158303\n", 429 | "2000 90528.0 42784.0 0.679068650984\n", 430 | "2001 107117.0 40100.0 0.727612979479\n", 431 | "2002 82744.0 50967.0 0.618827172035\n", 432 | "2003 95330.0 40180.0 0.703490517305\n", 433 | "2004 85916.0 39107.0 0.687201554914\n", 434 | "2005 79854.0 39560.0 0.668715560989\n", 435 | "2006 76434.0 19676.0 0.795276245968\n", 436 | "2007 86443.0 32182.0 0.728708113804\n", 437 | "2008 111262.0 31440.0 0.779680733276\n", 438 | "2009 109232.0 41890.0 0.722806738926\n", 439 | "2010 102701.0 37144.0 0.734391647896\n", 440 | "2011 99156.0 58613.0 0.628488486331\n", 441 | "2012 89383.0 33619.0 0.726679240988\n", 442 | "2013 79518.0 58351.0 0.576764900014\n", 443 | "2014 75391.0 52668.0 0.588720823995\n", 444 | "2015 83178.0 67557.0 0.551816101105\n", 445 | "2016 88665.0 74172.0 0.544501556771\n", 446 | "2017 62563.0 31388.0 0.665910953582\n" 447 | ] 448 | } 449 | ], 450 | "source": [ 451 | "# % of contributor dialogue that is male\n", 452 | "contributors1 = contributors_dataset.merge(df, on=[\"name\",\"episode-act\"], how=\"left\").merge(episodes, on=\"episode\")\n", 453 | "contributors1\n", 454 | "for year in range(1995, 2018):\n", 455 | " subjectsPerAct = contributors1[(contributors1[\"year\"]==year)][[\"episode-act\",\"name\",\"gender\",\"wordCount\"]].groupby([\"name\",\"episode-act\",\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 456 | " maleCount = subjectsPerAct[subjectsPerAct[\"gender\"]==\"M\"][\"wordCount\"].sum()\n", 457 | " femaleCount = subjectsPerAct[subjectsPerAct[\"gender\"]==\"F\"][\"wordCount\"].sum()\n", 458 | " print year, maleCount, femaleCount, maleCount/float(femaleCount + maleCount)" 459 | ] 460 | }, 461 | { 462 | "cell_type": "code", 463 | "execution_count": 63, 464 | "metadata": {}, 465 | "outputs": [ 466 | { 467 | "name": "stdout", 468 | "output_type": "stream", 469 | "text": [ 470 | "1995 29267 11455 0.718702421296\n", 471 | "1996 156999 90264 0.634947404181\n", 472 | "1997 190779 86941 0.686947285035\n", 473 | "1998 134210 82430 0.619507016248\n", 474 | "1999 131335 71962 0.646025273369\n", 475 | "2000 113052 72512 0.609234549805\n", 476 | "2001 131365 72431 0.6445906691\n", 477 | "2002 107903 78710 0.578218023396\n", 478 | "2003 141566 68848 0.672797437433\n", 479 | "2004 113796 60318 0.653571797788\n", 480 | "2005 128258 74281 0.633250880077\n", 481 | "2006 88587 36659 0.707304025677\n", 482 | "2007 135044 52392 0.720480590708\n", 483 | "2008 130083 61623 0.678554661826\n", 484 | "2009 124523 61780 0.668389666296\n", 485 | "2010 146693 54004 0.730917751636\n", 486 | "2011 131614 100597 0.566786241823\n", 487 | "2012 144854 63210 0.696199246386\n", 488 | "2013 145169 103971 0.582680420647\n", 489 | "2014 138260 94453 0.594122373911\n", 490 | "2015 149086 114723 0.56512855892\n", 491 | "2016 127790 111172 0.534771218855\n", 492 | "2017 88316 47932 0.648200340555\n" 493 | ] 494 | } 495 | ], 496 | "source": [ 497 | "# % of all dialogue that is male year by year\n", 498 | "for year in range(1995, 2018):\n", 499 | " subjectsPerAct = df2[(df2[\"year\"]==year) & (df2[\"name\"]!=\"ira glass\")][[\"episode-act\",\"name\",\"gender\",\"wordCount\"]].groupby([\"name\",\"episode-act\",\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 500 | " maleCount = subjectsPerAct[subjectsPerAct[\"gender\"]==\"M\"][\"wordCount\"].sum()\n", 501 | " femaleCount = subjectsPerAct[subjectsPerAct[\"gender\"]==\"F\"][\"wordCount\"].sum()\n", 502 | " print year, maleCount, femaleCount, maleCount/float(femaleCount + maleCount)" 503 | ] 504 | }, 505 | { 506 | "cell_type": "code", 507 | "execution_count": 65, 508 | "metadata": {}, 509 | "outputs": [ 510 | { 511 | "name": "stdout", 512 | "output_type": "stream", 513 | "text": [ 514 | "1995\t91\t26\t0.777777777778\n", 515 | "1996\t504\t231\t0.685714285714\n", 516 | "1997\t564\t208\t0.730569948187\n", 517 | "1998\t378\t179\t0.678635547576\n", 518 | "1999\t401\t194\t0.673949579832\n", 519 | "2000\t391\t147\t0.726765799257\n", 520 | "2001\t438\t192\t0.695238095238\n", 521 | "2002\t428\t170\t0.715719063545\n", 522 | "2003\t450\t164\t0.732899022801\n", 523 | "2004\t357\t178\t0.667289719626\n", 524 | "2005\t323\t121\t0.727477477477\n", 525 | "2006\t216\t52\t0.805970149254\n", 526 | "2007\t347\t147\t0.702429149798\n", 527 | "2008\t383\t147\t0.722641509434\n", 528 | "2009\t497\t186\t0.727672035139\n", 529 | "2010\t528\t167\t0.759712230216\n", 530 | "2011\t513\t275\t0.651015228426\n", 531 | "2012\t438\t160\t0.732441471572\n", 532 | "2013\t596\t278\t0.681922196796\n", 533 | "2014\t501\t230\t0.6853625171\n", 534 | "2015\t590\t303\t0.660694288914\n", 535 | "2016\t455\t217\t0.677083333333\n", 536 | "2017\t277\t119\t0.699494949495\n" 537 | ] 538 | } 539 | ], 540 | "source": [ 541 | "# % of all speakers that are male year by year\n", 542 | "allspeakers = df[[\"episode-act\",\"episode\",\"name\",\"gender\",\"wordCount\"]].groupby([\"name\",\"episode-act\",\"episode\",\"gender\"]).sum()[\"wordCount\"].reset_index()\n", 543 | "allspeakers1 = allspeakers.merge(episodes, on=\"episode\")\n", 544 | "allspeakers1 = allspeakers1[[\"gender\",\"name\",\"year\", \"wordCount\"]]\n", 545 | "for year in range(1995,2018):\n", 546 | " subset = allspeakers1[allspeakers1[\"year\"]== year]\n", 547 | " male = len(subset[subset[\"gender\"]==\"M\"])\n", 548 | " female = len(subset[subset[\"gender\"]==\"F\"])\n", 549 | " print str(year) + \"\\t\" + str(male) + \"\\t\" + str(female) + \"\\t\" + str(male/float(female + male))" 550 | ] 551 | }, 552 | { 553 | "cell_type": "code", 554 | "execution_count": null, 555 | "metadata": { 556 | "collapsed": true 557 | }, 558 | "outputs": [], 559 | "source": [] 560 | } 561 | ], 562 | "metadata": { 563 | "kernelspec": { 564 | "display_name": "Python 2", 565 | "language": "python", 566 | "name": "python2" 567 | }, 568 | "language_info": { 569 | "codemirror_mode": { 570 | "name": "ipython", 571 | "version": 2 572 | }, 573 | "file_extension": ".py", 574 | "mimetype": "text/x-python", 575 | "name": "python", 576 | "nbconvert_exporter": "python", 577 | "pygments_lexer": "ipython2", 578 | "version": "2.7.13" 579 | } 580 | }, 581 | "nbformat": 4, 582 | "nbformat_minor": 2 583 | } 584 | -------------------------------------------------------------------------------- /python/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/the-pudding/this-american-life/81feb975fabaf742fa81c15d87bdecff5d362075/python/.DS_Store -------------------------------------------------------------------------------- /python/autoClassifyGender.py: -------------------------------------------------------------------------------- 1 | import json 2 | import sexmachine.detector as gender 3 | import collections 4 | 5 | ## todo: something with "dr. prefix" 6 | 7 | def notSeenInEpisode(s, episodeNum): 8 | for info in s: 9 | # info.split()[] is a string and needs conversion to int for comparison 10 | if episodeNum == int(info.split()[1]): 11 | return False 12 | return True 13 | 14 | def getGender(s): 15 | return s[0].split()[0] 16 | 17 | def isGeneric(name): 18 | for i in name.split(): 19 | if i in genericIndicators: 20 | return True 21 | return False 22 | 23 | startEpisodeNum = 622 24 | endEpisodeNum = 624 #619 #range is exclusive 25 | # no transcript for 374, will break 26 | 27 | femaleIndicators = ['Woman', 'Ms.', 'Mrs.', 'Miss', 'Sister', 'Wife', 'Mother', 'Grandmother', 'Daughter', 'Female', "Mom", 'Aunt', 'Auntie', 'Girl', 'Grandma', 'Women', 'Mary', 'Lady', 'Marie', 'Maria', 'Lindsey', 'Lindsay', 'Lynn', 'Ashley', 'Erin', 'Lauren', 'Kim', 'Courtney','Shannon', 'Connie','Carol'] 28 | # kim is female except kim jong il 29 | 30 | maleIndicators = ['Ira', 'Man', 'Pa', 'Mr.', 'Brother', 'Husband', 'Father', 'Grandfather', 'Male', 'Uncle', "Dad", 'Son', 'Boy', 'President', 'Ryan', 'Chris', 'Sheikh','Kyle','Will','Ray', 'Guy'] 31 | 32 | groupIndicators = ['Audience', 'and', 'And', 'Chorus', 'Students', 'Choir', 'Class', 'Group', 'All', 'Children','Both', 'Crowd'] 33 | 34 | genericIndicators = ['Woman', 'Ms.', 'Mrs.', 'Miss', 'Sister', 'Wife', 'Mother', 'Grandmother', 'Daughter', 'Female', "Mom", 'Aunt', 'Auntie', 'Girl', 'Girls' 'Grandma', 'Women', 'Lady', 'Man', 'Pa', 'Mr.', 'Brother', 'Husband', 'Father', 'Grandfather', 'Male', 'Uncle', "Dad", 'Son', 'Boy', 'Audience', 'and', 'And', 'Chorus', 'Students', 'Choir', 'Class', 'Group', 'All', 'Children','Both', 'Crowd'] 35 | 36 | d = gender.Detector() 37 | peopleDict = collections.OrderedDict() 38 | 39 | for episodeNum in range(startEpisodeNum, endEpisodeNum): 40 | print "Parsing " + str(episodeNum) 41 | if (episodeNum != 374): 42 | data = [] 43 | with open("../transcripts/" + str(episodeNum) + '.json') as f: 44 | data = json.load(f) 45 | for act in data['acts']: 46 | for dialogue_line in act['script']: 47 | dialogue_line['name'] = dialogue_line['name'].strip() 48 | name = dialogue_line['name'] 49 | gender = d.get_gender(name.split(' ', 1)[0]) 50 | 51 | # handle edge cases where people are described rather than named 52 | for i in femaleIndicators: 53 | if i in name.split(): 54 | gender = 'F' 55 | for i in maleIndicators: 56 | if i in name.split(): 57 | gender = 'M' 58 | for i in groupIndicators: 59 | if i in name.split(): 60 | gender = "G" 61 | # add edge case 62 | if gender == "female": 63 | gender = "F" 64 | elif gender == "male": 65 | gender = "M" 66 | elif gender == "mostly_male": 67 | gender = "MM" 68 | elif gender == "mostly_female": 69 | gender = "MF" 70 | elif gender == "andy": 71 | gender = "A" 72 | 73 | # special cases 74 | if name == "Kim Jong-il": 75 | gender = "M" 76 | 77 | if name not in peopleDict: 78 | info = [] 79 | info.append(gender + " " + str(episodeNum) + " " + dialogue_line['start_timestamp']) 80 | peopleDict[name] = info 81 | elif (getGender(peopleDict.get(name)) == 'A' or isGeneric(name)) and notSeenInEpisode(peopleDict.get(name), episodeNum): 82 | peopleDict[name].append(gender + " " + str(episodeNum) + " " + dialogue_line['start_timestamp']) 83 | elif ((getGender(peopleDict.get(name)) == 'M' or getGender(peopleDict.get(name)) == 'F') and len(name.split()) == 1 and notSeenInEpisode(peopleDict.get(name), episodeNum)): 84 | peopleDict[name].append(gender + " " + str(episodeNum) + " " + dialogue_line['start_timestamp']) 85 | 86 | with open ('../peopleTest.json', 'wb') as outfile: 87 | json.dump(peopleDict, outfile, indent=2) -------------------------------------------------------------------------------- /python/createBaseCsvsForAnalsyis.py: -------------------------------------------------------------------------------- 1 | #meema spadola 2 | 3 | import json 4 | import csv 5 | 6 | dialogueDict = [] 7 | episodesDict = [] 8 | actsDict = [] 9 | 10 | startEpisodeNum = 1 11 | endEpisodeNum = 624 12 | 13 | with open('../important/finalGender.json', 'rb') as genderfile: 14 | genderdata = json.load(genderfile) 15 | genderdata = dict((k.lower(), v) for k, v in genderdata.iteritems()) 16 | 17 | for episodeNum in range(startEpisodeNum, endEpisodeNum): 18 | if (episodeNum != 374): 19 | print "Parsing episode " + str(episodeNum) 20 | filename = "../transcripts/" + str(episodeNum) + ".json" 21 | epfilename = "../transcripts/ep" + str(episodeNum) + ".json" 22 | with open(filename) as infile: 23 | data = json.load(infile) 24 | with open(epfilename) as infile2: 25 | data2 = json.load(infile2) 26 | 27 | episodesDict.append([episodeNum, 28 | data['radio_date'].split('.')[0], 29 | data['radio_date'].split('.')[1], 30 | data['radio_date'].split('.')[2], 31 | data2['episode_title'].encode('utf-8'), 32 | data2['episode_description'].encode('utf-8'), 33 | data2['image_url'], 34 | data2['transcript_url'] 35 | ]) 36 | 37 | for act in data['acts']: 38 | contributorList = "" 39 | for contributor in act["contributors"]: 40 | if contributorList == "": 41 | contributorList += contributor["name"] 42 | else: 43 | contributorList += ", " + contributor["name"] 44 | 45 | actsDict.append([episodeNum, 46 | act["id"], 47 | act["title"].encode('utf-8'), 48 | contributorList, 49 | act["description"].encode('utf-8')]) 50 | lineCount = 0 51 | for line in act["script"]: 52 | genderArr = genderdata[line["name"].strip().lower()] 53 | gender = "" 54 | if len(genderArr) == 1: 55 | gender = genderArr[0].split()[0] 56 | else: 57 | for genderVal in genderArr: 58 | if int(genderVal.split()[1]) == episodeNum: 59 | gender = genderVal.split()[0] 60 | 61 | dialogueDict.append([episodeNum, 62 | act["id"], 63 | lineCount, 64 | line["name"].encode('utf-8'), 65 | gender, 66 | line["role"], 67 | line["dialogue"].encode('utf-8'), 68 | line["start_timestamp"]]) 69 | lineCount += 1 70 | 71 | f = csv.writer(open("../important/gender.csv", "wb")) 72 | f.writerow(["name","gender","episode","timestamp"]) 73 | for key, value in genderdata.iteritems(): 74 | for x in value: 75 | f.writerow([key, x.split()[0], x.split()[1], x.split()[2]]) 76 | 77 | with open("../important/dialogue.tsv", 'wb') as outfile: 78 | writer = csv.writer(outfile, delimiter='\t') 79 | header = ["episode","act","dialogueId","name","gender","role","dialogue","timestamp"] 80 | writer.writerow(header) 81 | for item in dialogueDict: 82 | writer.writerow(item) 83 | 84 | with open("../important/episodes.tsv", 'wb') as outfile: 85 | writer = csv.writer(outfile, delimiter='\t') 86 | episodeHeader = ["episode","month", "day", "year","title","description", "imageurl", "url"] 87 | writer.writerow(episodeHeader) 88 | for item in episodesDict: 89 | writer.writerow(item) 90 | 91 | with open("../important/acts.tsv", 'wb') as outfile: 92 | writer = csv.writer(outfile, delimiter='\t') 93 | actsHeader = ["episode","act","title", "contributors", "description"] 94 | writer.writerow(actsHeader) 95 | for item in actsDict: 96 | writer.writerow(item) 97 | -------------------------------------------------------------------------------- /python/manuallyClassifyGender.py: -------------------------------------------------------------------------------- 1 | from bs4 import BeautifulSoup 2 | import requests 3 | import json 4 | import collections 5 | import cmd 6 | import curses 7 | import sys 8 | import time 9 | 10 | from selenium import webdriver 11 | 12 | 13 | def addInfoToPeopleDict(name, gender, episodeNum, start_timestamp, peopleDict): 14 | if name not in peopleDict: 15 | info = [] 16 | info.append(gender + " " + str(episodeNum) + " " + start_timestamp) 17 | peopleDict[name] = info 18 | else: 19 | peopleDict[name].append(gender + " " + str(episodeNum) + " " + start_timestamp) 20 | 21 | 22 | def seek(hours, minutes, seconds, audioBrowser, firstTime): 23 | # firstTime is true when its the first time the episode is being played. if True, it'll play and then seek 24 | # convert hours minutes and seconds from string to useful numeric form 25 | numSeconds = hours * 3600 + minutes * 60 + seconds 26 | string = "jwplayer().seek(" + str(numSeconds) + ");" 27 | audioBrowser.execute_script(string) 28 | if firstTime: 29 | time.sleep(0.4) 30 | audioBrowser.execute_script(string) 31 | 32 | def writeChar(c, w): 33 | w.insertln() 34 | w.erase() 35 | 36 | def curses_main(name, episodeNum, start_timestamp, peopleDict, audioBrowser, outfile, w): 37 | hours = int(start_timestamp.split(':')[0]) 38 | minutes = int(start_timestamp.split(':')[1]) 39 | seconds = float(start_timestamp.split(':')[2]) 40 | while 1: 41 | w.insertln() 42 | w.addstr("> " + name + ": ") 43 | c = w.getch() 44 | if c == ord('q'): 45 | curses.endwin() 46 | print "Quitting" 47 | audioBrowser.quit() 48 | json.dump(peopleDict, outfile, indent=2) 49 | sys.exit() 50 | elif c == ord('m'): 51 | # male 52 | addInfoToPeopleDict(name, "M", episodeNum, start_timestamp, peopleDict) 53 | writeChar(c, w) 54 | break 55 | elif c == ord('f'): 56 | # female 57 | addInfoToPeopleDict(name, "F", episodeNum, start_timestamp, peopleDict) 58 | writeChar(c, w) 59 | break 60 | elif c == ord('g'): 61 | # group 62 | addInfoToPeopleDict(name, "G", episodeNum, start_timestamp, peopleDict) 63 | writeChar(c, w) 64 | break 65 | elif c == ord('r'): 66 | # R = replay at timestamp 67 | seek(hours, minutes, seconds, audioBrowser, False) 68 | writeChar(c, w) 69 | elif c == ord('b'): 70 | # B = go back 5 seconds 71 | if seconds < 5: 72 | if minutes < 0: 73 | hours -= 1 74 | minutes = 59 75 | seconds = 60 + seconds - 5 76 | else: 77 | minutes -= 1 78 | seconds = 60 + seconds - 5 79 | else: 80 | seconds -= 5 81 | seek(hours, minutes, seconds, audioBrowser, False) 82 | writeChar(c, w) 83 | 84 | 85 | 86 | def classify(name, gender, episodeNum, start_timestamp, peopleDict, audioBrowser, outfile, w): 87 | hours = int(start_timestamp.split(':')[0]) 88 | minutes = int(start_timestamp.split(':')[1]) 89 | seconds = float(start_timestamp.split(':')[2]) 90 | 91 | url1 = "https://hw2.thisamericanlife.org/radio-archives/episode/" + str(episodeNum) 92 | 93 | # go to URL for jwplayer 94 | if audioBrowser.current_url != url1: 95 | audioBrowser.get(url1) 96 | seek(hours, minutes, seconds, audioBrowser, True) 97 | else: 98 | seek(hours, minutes, seconds, audioBrowser, False) 99 | 100 | curses_main(name, episodeNum, start_timestamp, peopleDict, audioBrowser, outfile, w) 101 | 102 | ######### main 103 | 104 | peopleDict = collections.OrderedDict() 105 | audioBrowser = webdriver.Chrome() 106 | w = curses.initscr() 107 | curses.echo() 108 | 109 | # people.json comes out of getGender.py 110 | # finalGender.json has all classified genders from getGender.py and the added on manually classified genders 111 | # people2.json is the temp output file to be pasted into finalGender.json 112 | 113 | with open ('finalGender.json') as infile1: 114 | with open ('people2.json', 'wb') as outfile: 115 | with open('people.json') as infile: 116 | gendered_people_data = json.load(infile1) 117 | people_data = json.load(infile, object_pairs_hook=collections.OrderedDict) 118 | for key, value in people_data.items(): 119 | if key not in gendered_people_data: 120 | if len(value) == 1: 121 | # there is only one entity with this name that needs to be classified 122 | gender = value[0].split()[0] 123 | episodeNum = value[0].split()[1] 124 | start_timestamp = value[0].split()[2] 125 | if gender == "A" or gender == "MM" or gender == "MF": 126 | # then we need to classify it 127 | classify(key, gender, episodeNum, start_timestamp, peopleDict, audioBrowser, outfile, w) 128 | else: 129 | # there are multiple entities with this name that need to be classified 130 | for val in value: 131 | gender = val.split()[0] 132 | if gender == "A" or gender == "MM" or gender == "MF": 133 | # then we need to classify it 134 | episodeNum = val.split()[1] 135 | start_timestamp = val.split()[2] 136 | classify(key, gender, episodeNum, start_timestamp, peopleDict, audioBrowser, outfile, w) 137 | 138 | curses.endwin() 139 | print "FINISHED!!!!!!!!!!!!!!!!!!!" 140 | audioBrowser.quit() 141 | json.dump(peopleDict, outfile, indent=2) -------------------------------------------------------------------------------- /python/scrapeContributorData.py: -------------------------------------------------------------------------------- 1 | from bs4 import BeautifulSoup 2 | import requests 3 | import json 4 | import collections 5 | import re 6 | import csv 7 | import urllib2 8 | 9 | startEpisodeNum = 1 10 | endEpisodeNum = 624 #619. add # of most recent episode + 1 since range is exclusive 11 | # no transcript for 374, will break 12 | 13 | def replaceActIds(newid): 14 | if newid == "Prologue": return 0.0 15 | if newid == "Act One": return 0.01 16 | if newid == "Act Two": return 0.02 17 | if newid == "Act Three": return 0.03 18 | if newid == "Act Four": return 0.04 19 | if newid == "Act Five": return 0.05 20 | if newid == "Act Six": return 0.06 21 | if newid == "Act Seven": return 0.07 22 | if newid == "Act Eight": return 0.08 23 | if newid == "Act Nine": return 0.09 24 | if newid == "Act Ten": return 0.10 25 | if newid == "Act Eleven": return 0.11 26 | if newid == "Act Twelve": return 0.12 27 | if newid == "Act Thirteen": return 0.13 28 | if newid == "Act Fourteen": return 0.14 29 | if newid == "Act Fifteen": return 0.15 30 | if newid == "Act Sixteen": return 0.16 31 | if newid == "Act Seventeen": return 0.17 32 | if newid == "Act Eighteen": return 0.18 33 | if newid == "Act Nineteen": return 0.19 34 | if newid == "Act Twenty": return 0.20 35 | if newid == "credits": return 0.21 36 | return 0.99 37 | 38 | 39 | actdata = {} 40 | # main iterator 41 | for episodeNum in range(startEpisodeNum, endEpisodeNum): 42 | if (episodeNum != 374): 43 | print "Parsing episode " + str(episodeNum) 44 | # url1 is for transcript, url2 is main page for episode info 45 | url2 = "https://hw2.thisamericanlife.org/radio-archives/episode/" + str(episodeNum) 46 | r2 = requests.get(url2) 47 | 48 | data2 = r2.text 49 | 50 | soup2 = BeautifulSoup(data2, "html.parser") 51 | 52 | num_acts = 0 53 | for act in soup2.findAll('div', class_='act'): 54 | if (act.find("h3")): 55 | actid = episodeNum + replaceActIds(act.find("h3").get_text()) 56 | neighbor = act.findNext('div', class_="act-body") 57 | contributors = [] 58 | if neighbor.find('ul', class_='act-contributors'): 59 | for c in neighbor.find('ul', class_='act-contributors').findAll('a'): 60 | contributors.append(c.get_text()) 61 | else: 62 | contributors.append("NONE") 63 | actdata[str(actid)] = contributors 64 | num_acts += 1 65 | 66 | with open('../important/contributorForEachAct.csv', "wb") as csv_file: 67 | writer = csv.writer(csv_file, delimiter=',') 68 | writer.writerow(["episode-act","contributor"]) 69 | for key, value in actdata.iteritems(): 70 | for tag in value: 71 | writer.writerow([key, tag]) 72 | -------------------------------------------------------------------------------- /python/scrapeEpisodeData.py: -------------------------------------------------------------------------------- 1 | from bs4 import BeautifulSoup 2 | import requests 3 | import json 4 | import collections 5 | import re 6 | # using selenium because email addresses are loaded in to the DOM through JS and output a mess of JS if not loaded properly 7 | from selenium import webdriver 8 | browser1 = webdriver.Chrome() 9 | browser2 = webdriver.Chrome() 10 | 11 | startEpisodeNum = 1 12 | endEpisodeNum = 624 13 | #623. add # of most recent episode + 1 since range is exclusive 14 | # no transcript for 374, will break if you try to access that episode 15 | 16 | # main iterator 17 | for episodeNum in range(startEpisodeNum, endEpisodeNum): 18 | if (episodeNum != 374): 19 | print "Parsing episode " + str(episodeNum) 20 | filename = '../transcripts/ep' + str(episodeNum) + '.json' 21 | # url1 is for transcript, url2 is main page for episode info 22 | url1 = "https://hw2.thisamericanlife.org/radio-archives/episode/" + str(episodeNum) + "/transcript" 23 | url2 = "https://hw2.thisamericanlife.org/radio-archives/episode/" + str(episodeNum) 24 | 25 | with open (filename, 'wb') as outfile: 26 | 27 | browser1.get(url1) 28 | browser2.get(url2) 29 | 30 | soup1 = BeautifulSoup(browser1.page_source, "html.parser") 31 | soup2 = BeautifulSoup(browser2.page_source, "html.parser") 32 | 33 | json_data = collections.OrderedDict() 34 | 35 | # get basic episode info 36 | episode_num = soup1.find('div', class_='radio-episode-num').get_text() 37 | episode_title = soup1.find('div', class_='radio').find('a').get_text() 38 | episode_description = soup2.find('div', class_="top").find('div', class_='description').get_text() 39 | radio_date= soup1.find('div', class_='radio-date').get_text()[17:] 40 | url = browser2.current_url 41 | image_url = soup2.find('div',class_="top").find('img')["src"] 42 | 43 | json_data['episode_num'] = episode_num 44 | json_data['episode_title'] = episode_title 45 | json_data['episode_description'] = episode_description 46 | json_data['radio_date'] = radio_date 47 | json_data['transcript_url'] = url 48 | json_data['image_url'] = image_url 49 | 50 | json.dump(json_data, outfile, indent=2) 51 | 52 | browser1.Dispose() 53 | browser2.Dispose() -------------------------------------------------------------------------------- /python/scrapeTagsOfActs.py: -------------------------------------------------------------------------------- 1 | from bs4 import BeautifulSoup 2 | import requests 3 | import json 4 | import collections 5 | import re 6 | import csv 7 | import urllib2 8 | 9 | startEpisodeNum = 1 10 | endEpisodeNum = 624 #619. add # of most recent episode + 1 since range is exclusive 11 | # no transcript for 374, will break 12 | 13 | def replaceActIds(newid): 14 | if newid == "Prologue": return 0.0 15 | if newid == "Act One": return 0.01 16 | if newid == "Act Two": return 0.02 17 | if newid == "Act Three": return 0.03 18 | if newid == "Act Four": return 0.04 19 | if newid == "Act Five": return 0.05 20 | if newid == "Act Six": return 0.06 21 | if newid == "Act Seven": return 0.07 22 | if newid == "Act Eight": return 0.08 23 | if newid == "Act Nine": return 0.09 24 | if newid == "Act Ten": return 0.10 25 | if newid == "Act Eleven": return 0.11 26 | if newid == "Act Twelve": return 0.12 27 | if newid == "Act Thirteen": return 0.13 28 | if newid == "Act Fourteen": return 0.14 29 | if newid == "Act Fifteen": return 0.15 30 | if newid == "Act Sixteen": return 0.16 31 | if newid == "Act Seventeen": return 0.17 32 | if newid == "Act Eighteen": return 0.18 33 | if newid == "Act Nineteen": return 0.19 34 | if newid == "Act Twenty": return 0.20 35 | if newid == "credits": return 0.21 36 | return 0.99 37 | 38 | 39 | actdata = {} 40 | # main iterator 41 | for episodeNum in range(startEpisodeNum, endEpisodeNum): 42 | if (episodeNum != 374): 43 | print "Parsing episode " + str(episodeNum) 44 | # url1 is for transcript, url2 is main page for episode info 45 | url2 = "https://hw2.thisamericanlife.org/radio-archives/episode/" + str(episodeNum) 46 | r2 = requests.get(url2) 47 | 48 | data2 = r2.text 49 | 50 | soup2 = BeautifulSoup(data2, "html.parser") 51 | 52 | num_acts = 0 53 | for act in soup2.findAll('div', class_='act'): 54 | if (act.find("h3")): 55 | actid = episodeNum + replaceActIds(act.find("h3").get_text()) 56 | neighbor = act.findNext('div', class_="act-body") 57 | tags = [] 58 | if neighbor.find('span', class_='tags'): 59 | for tag in neighbor.find('span', class_='tags').findAll('a'): 60 | tags.append(tag.get_text()) 61 | else: 62 | tags.append("NONE") 63 | actdata[str(actid)] = tags 64 | num_acts += 1 65 | 66 | with open('../important/test.csv', "wb") as csv_file: 67 | writer = csv.writer(csv_file, delimiter=',') 68 | writer.writerow(["episode-act","tags"]) 69 | for key, value in actdata.iteritems(): 70 | for tag in value: 71 | writer.writerow([key, tag]) -------------------------------------------------------------------------------- /python/scrapeTranscripts.py: -------------------------------------------------------------------------------- 1 | from bs4 import BeautifulSoup 2 | import requests 3 | import json 4 | import collections 5 | import re 6 | # using selenium because email addresses are loaded in to the DOM through JS and output a mess of JS if not loaded properly 7 | from selenium import webdriver 8 | browser1 = webdriver.Chrome() 9 | browser2 = webdriver.Chrome() 10 | 11 | startEpisodeNum = 1 12 | endEpisodeNum = 624 #619. add # of most recent episode + 1 since range is exclusive 13 | # no transcript for 374, will break if you try to access that episode 14 | 15 | # removes brackets around names such as "[? Leisure ?]" 16 | def cleanUpText (s): 17 | text = re.sub("\[\?\ ", "", s) 18 | text = re.sub("\ \?\]", "", text) 19 | return text 20 | 21 | # main iterator 22 | for episodeNum in range(startEpisodeNum, endEpisodeNum): 23 | if (episodeNum != 374): 24 | print "Parsing episode " + str(episodeNum) 25 | filename = '../transcripts/' + str(episodeNum) + '.json' 26 | # url1 is for transcript, url2 is main page for episode info 27 | url1 = "https://hw2.thisamericanlife.org/radio-archives/episode/" + str(episodeNum) + "/transcript" 28 | url2 = "https://hw2.thisamericanlife.org/radio-archives/episode/" + str(episodeNum) 29 | 30 | with open (filename, 'wb') as outfile: 31 | 32 | browser1.get(url1) 33 | browser2.get(url2) 34 | 35 | soup1 = BeautifulSoup(browser1.page_source, "html.parser") 36 | soup2 = BeautifulSoup(browser2.page_source, "html.parser") 37 | 38 | json_data = collections.OrderedDict() 39 | 40 | # get basic episode info 41 | episode_num = soup1.find('div', class_='radio-episode-num').get_text() 42 | episode_title = soup1.find('div', class_='radio').find('a').get_text() 43 | radio_date= soup1.find('div', class_='radio-date').get_text()[17:] 44 | transcript_url = url1 45 | 46 | json_data['episode_num'] = episode_num 47 | json_data['episode_title'] = episode_title 48 | json_data['radio_date'] = radio_date 49 | json_data['transcript_url'] = transcript_url 50 | 51 | # get scripts of each act 52 | num_acts = 0 53 | acts_data = [] 54 | 55 | for act in soup1.findAll('div', class_='act'): 56 | single_act = collections.OrderedDict() 57 | num_dialogue_lines = 1 58 | 59 | # get basic act info 60 | single_act['id'] = act['id'] 61 | single_act['title'] = act.find('h3').get_text() 62 | contributors = [] 63 | if num_acts < len(soup2.findAll('div', class_='act-body')): 64 | if single_act['title'] != "Credits.": 65 | if soup2.findAll('div', class_='act-body')[num_acts].find('p'): 66 | single_act['description'] = soup2.findAll('div', class_='act-body')[num_acts].find('p').get_text() 67 | else: 68 | single_act['description'] = soup2.findAll('div', class_='act-body')[num_acts].get_text() 69 | if soup2.findAll('div', class_='act-body')[num_acts].find('ul', class_='act-contributors'): 70 | for c in soup2.findAll('div', class_='act-body')[num_acts].find('ul', class_='act-contributors').findAll('a'): 71 | contributor = collections.OrderedDict() 72 | contributor['name'] = c.get_text() 73 | contributors.append(contributor) 74 | else: 75 | single_act['description'] = "Credits" 76 | else: 77 | single_act['description'] = "error" 78 | single_act['contributors'] = contributors 79 | num_acts += 1 80 | 81 | 82 | script_data = [] 83 | # get script-level info 84 | for dialogue_lines in act.find('div', class_='act-inner').findAll('div'): 85 | dialogue_data = collections.OrderedDict() 86 | if dialogue_lines.find('h4'): 87 | # new dialogue line with different speaker from previous 88 | lastIdentifiedLineIndex = num_dialogue_lines-1 89 | dialogue_data['name'] = dialogue_lines.find('h4').get_text() 90 | dialogue_data['role'] = dialogue_lines['class'][0] 91 | dialogue_data['id'] = num_dialogue_lines 92 | dialogue_data['dialogue'] = "" 93 | for p in dialogue_lines.findAll('p'): 94 | dialogue_data['start_timestamp'] = p['begin'] 95 | text = cleanUpText(p.get_text()) 96 | # appends paragraphs into one long string 97 | if dialogue_data['dialogue'] == "": 98 | dialogue_data['dialogue'] += text 99 | else: 100 | dialogue_data['dialogue'] += " " + text 101 | script_data.append(dialogue_data) 102 | num_dialogue_lines += 1 103 | else: 104 | # previous dialogue line continues with the same speaker. append to previous line 105 | for p in dialogue_lines.findAll('p'): 106 | script_data[lastIdentifiedLineIndex]['dialogue'] += " " + cleanUpText(p.get_text()) 107 | single_act['script'] = script_data 108 | 109 | acts_data.append(single_act) 110 | 111 | json_data['acts'] = acts_data 112 | json.dump(json_data, outfile, indent=2) 113 | 114 | browser1.Dispose() 115 | browser2.Dispose() 116 | 117 | # { 118 | # "episode_num": "1", 119 | # "episode_title": "New Begininings", 120 | # "radio_data": "11.17.1995", 121 | # "transcript_url": "blahblah", 122 | # "acts": [ 123 | # { 124 | # "id": "prologue" 125 | # "title": "Prologue" 126 | # "producers": [ 127 | # "name": "blah blah" 128 | # ] 129 | # "script": [ 130 | # { 131 | # "id": "1" 132 | # "name": "Ira glass" 133 | # "role": "host" 134 | # "dialogue": "Blah blah blah" 135 | # }, 136 | # { 137 | # "id": "2" 138 | # "name": "Joe bob" 139 | # "role": "subject" 140 | # "dialogue": "Blah blah blah" 141 | # } 142 | # ] 143 | # }, 144 | # { 145 | # "id": "act 1" 146 | # "title": "act 1" 147 | # "producers": [ 148 | # "name": "blah blah" 149 | # ] 150 | # "script": [ 151 | # { 152 | # "id": "1" 153 | # "name": "Ira glass" 154 | # "role": "host" 155 | # "dialogue": "Blah blah blah" 156 | # }, 157 | # { 158 | # "id": "2" 159 | # "name": "Joe bob" 160 | # "role": "subject" 161 | # "dialogue": "Blah blah blah" 162 | # } 163 | # ] 164 | # } 165 | # ] 166 | # } --------------------------------------------------------------------------------