├── A New Era of Data Analysis in Baseball └── readme.md ├── project_img.JPG ├── Exploring the evolution of Linux ├── datasets │ └── git_log_excerpt.csv └── notebook.ipynb ├── Dr. Semmelweis and the Discovery of Handwashing └── datasets │ ├── yearly_deaths_by_clinic.csv │ ├── monthly_deaths.csv │ └── ignaz_semmelweis_1860.jpeg ├── style.css ├── TV, Halftime Shows, and the Big Game └── datasets │ ├── tv.csv │ ├── halftime_musicians.csv │ └── super_bowls.csv ├── Exploring 67 years of LEGO ├── datasets │ ├── colors.csv │ └── downloads_schema.png └── notebook.ipynb ├── app.py ├── README.md ├── Exploring the Bitcoin Cryptocurrency Market └── datasets │ ├── coinmarketcap_06012018.csv │ └── project_image.png └── Code review.ipynb /A New Era of Data Analysis in Baseball/readme.md: -------------------------------------------------------------------------------- 1 | # A New Era of Data Analysis in Baseball 2 | -------------------------------------------------------------------------------- /project_img.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/master/project_img.JPG -------------------------------------------------------------------------------- /Exploring the evolution of Linux/datasets/git_log_excerpt.csv: -------------------------------------------------------------------------------- 1 | 1502382966#Linus Torvalds 2 | 1501368308#Max Gurtovoy 3 | 1501625560#James Smart 4 | 1501625559#James Smart 5 | 1500568442#Martin Wilck 6 | 1502273719#Xin Long 7 | 1502278684#Nikolay Borisov 8 | 1502238384#Girish Moodalbail 9 | 1502228709#Florian Fainelli 10 | 1502223836#Jon Paul Maloy -------------------------------------------------------------------------------- /Dr. Semmelweis and the Discovery of Handwashing/datasets/yearly_deaths_by_clinic.csv: -------------------------------------------------------------------------------- 1 | year,births,deaths,clinic 2 | 1841,3036,237,clinic 1 3 | 1842,3287,518,clinic 1 4 | 1843,3060,274,clinic 1 5 | 1844,3157,260,clinic 1 6 | 1845,3492,241,clinic 1 7 | 1846,4010,459,clinic 1 8 | 1841,2442,86,clinic 2 9 | 1842,2659,202,clinic 2 10 | 1843,2739,164,clinic 2 11 | 1844,2956,68,clinic 2 12 | 1845,3241,66,clinic 2 13 | 1846,3754,105,clinic 2 14 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding : 10px ; 3 | 4 | } 5 | 6 | #exTab1 .tab-content { 7 | color : white; 8 | background-color: #428bca; 9 | padding : 5px 15px; 10 | } 11 | 12 | #exTab2 h3 { 13 | color : white; 14 | background-color: #428bca; 15 | padding : 5px 15px; 16 | } 17 | 18 | /* remove border radius for the tab */ 19 | 20 | #exTab1 .nav-pills > li > a { 21 | border-radius: 0; 22 | } 23 | 24 | /* change border radius for the tab , apply corners on top*/ 25 | 26 | #exTab3 .nav-pills > li > a { 27 | border-radius: 4px 4px 0 0 ; 28 | } 29 | 30 | #exTab3 .tab-content { 31 | color : white; 32 | background-color: #428bca; 33 | padding : 5px 15px; 34 | } 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Dr. Semmelweis and the Discovery of Handwashing/datasets/monthly_deaths.csv: -------------------------------------------------------------------------------- 1 | date,births,deaths 2 | 1841-01-01,254,37 3 | 1841-02-01,239,18 4 | 1841-03-01,277,12 5 | 1841-04-01,255,4 6 | 1841-05-01,255,2 7 | 1841-06-01,200,10 8 | 1841-07-01,190,16 9 | 1841-08-01,222,3 10 | 1841-09-01,213,4 11 | 1841-10-01,236,26 12 | 1841-11-01,235,53 13 | 1842-01-01,307,64 14 | 1842-02-01,311,38 15 | 1842-03-01,264,27 16 | 1842-04-01,242,26 17 | 1842-05-01,310,10 18 | 1842-06-01,273,18 19 | 1842-07-01,231,48 20 | 1842-08-01,216,55 21 | 1842-09-01,223,41 22 | 1842-10-01,242,71 23 | 1842-11-01,209,48 24 | 1842-12-01,239,75 25 | 1843-01-01,272,52 26 | 1843-02-01,263,42 27 | 1843-03-01,266,33 28 | 1843-04-01,285,34 29 | 1843-05-01,246,15 30 | 1843-06-01,196,8 31 | 1843-07-01,191,1 32 | 1843-08-01,193,3 33 | 1843-09-01,221,5 34 | 1843-10-01,250,44 35 | 1843-11-01,252,18 36 | 1843-12-01,236,19 37 | 1844-01-01,244,37 38 | 1844-02-01,257,29 39 | 1844-03-01,276,47 40 | 1844-04-01,208,36 41 | 1844-05-01,240,14 42 | 1844-06-01,224,6 43 | 1844-07-01,206,9 44 | 1844-08-01,269,17 45 | 1844-09-01,245,3 46 | 1844-10-01,248,8 47 | 1844-11-01,245,27 48 | 1844-12-01,256,27 49 | 1845-01-01,303,23 50 | 1845-02-01,274,13 51 | 1845-03-01,292,13 52 | 1845-04-01,260,11 53 | 1845-05-01,296,13 54 | 1845-06-01,280,20 55 | 1845-07-01,245,15 56 | 1845-08-01,251,9 57 | 1845-09-01,237,25 58 | 1845-10-01,283,42 59 | 1845-11-01,265,29 60 | 1845-12-01,267,28 61 | 1846-01-01,336,45 62 | 1846-02-01,293,53 63 | 1846-03-01,311,48 64 | 1846-04-01,253,48 65 | 1846-05-01,305,41 66 | 1846-06-01,266,27 67 | 1846-07-01,252,33 68 | 1846-08-01,216,39 69 | 1846-09-01,271,39 70 | 1846-10-01,254,38 71 | 1846-11-01,297,32 72 | 1846-12-01,298,16 73 | 1847-01-01,311,10 74 | 1847-02-01,312,6 75 | 1847-03-01,305,11 76 | 1847-04-01,312,57 77 | 1847-05-01,294,36 78 | 1847-06-01,268,6 79 | 1847-07-01,250,3 80 | 1847-08-01,264,5 81 | 1847-09-01,262,12 82 | 1847-10-01,278,11 83 | 1847-11-01,246,11 84 | 1847-12-01,273,8 85 | 1848-01-01,283,10 86 | 1848-02-01,291,2 87 | 1848-03-01,276,0 88 | 1848-04-01,305,2 89 | 1848-05-01,313,3 90 | 1848-06-01,264,3 91 | 1848-07-01,269,1 92 | 1848-08-01,261,0 93 | 1848-09-01,312,3 94 | 1848-10-01,299,7 95 | 1848-11-01,310,9 96 | 1848-12-01,373,5 97 | 1849-01-01,403,9 98 | 1849-02-01,389,12 99 | 1849-03-01,406,20 100 | -------------------------------------------------------------------------------- /TV, Halftime Shows, and the Big Game/datasets/tv.csv: -------------------------------------------------------------------------------- 1 | super_bowl,network,avg_us_viewers,total_us_viewers,rating_household,share_household,rating_18_49,share_18_49,ad_cost 2 | 52,NBC,103390000,,43.1,68,33.4,78,5000000 3 | 51,Fox,111319000,172000000,45.3,73,37.1,79,5000000 4 | 50,CBS,111864000,167000000,46.6,72,37.7,79,5000000 5 | 49,NBC,114442000,168000000,47.5,71,39.1,79,4500000 6 | 48,Fox,112191000,167000000,46.7,69,39.3,77,4000000 7 | 47,CBS,108693000,164100000,46.3,69,39.7,77,4000000 8 | 46,NBC,111346000,163500000,47,71,40.5,,3500000 9 | 45,Fox,111041000,162900000,46,69,39.9,,3100000 10 | 44,CBS,106476000,153400000,45,68,38.6,,2800000 11 | 43,NBC,98732000,151600000,42,64,36.7,,3000000 12 | 42,Fox,97448000,148300000,43.1,65,37.5,,2699963 13 | 41,CBS,93184000,139800000,42.6,64,35.2,,2385365 14 | 40,ABC,90745000,141400000,41.6,62,,,2500000 15 | 39,Fox,86072000,,41.1,62,,,2400000 16 | 38,CBS,89795000,144400000,41.4,63,,,2302200 17 | 37,ABC,88637000,138500000,40.7,61,,,2200000 18 | 36,Fox,86801000,,40.4,61,,,2200000 19 | 35,CBS,84335000,,40.4,61,,,2200000 20 | 34,ABC,88465000,,43.3,63,37.9,,2100000 21 | 33,Fox,83720000,,40.2,61,36.4,,1600000 22 | 32,NBC,90000000,,44.5,67,,,1291100 23 | 31,Fox,87870000,,43.3,65,,,1200000 24 | 30,NBC,94080000,,46,68,41.2,,1085000 25 | 29,ABC,83420000,,41.3,62,,,1150000 26 | 28,NBC,90000000,,45.5,66,,,900000 27 | 27,NBC,90990000,,45.1,66,,,850000 28 | 26,CBS,79590000,,40.3,61,,,850000 29 | 25,ABC,79510000,,41.9,63,,,800000 30 | 24,CBS,73852000,,39,67,,,700400 31 | 23,NBC,81590000,,43.5,68,,,675000 32 | 22,ABC,80140000,,41.9,62,,,645000 33 | 21,CBS,87190000,,45.8,66,,,600000 34 | 20,NBC,92570000,,48.3,70,,,550000 35 | 19,ABC,85530000,,46.4,63,,,525000 36 | 18,CBS,77620000,,46.4,71,,,368200 37 | 17,NBC,81770000,,48.6,69,,,400000 38 | 16,CBS,85240000,,49.1,73,,,324300 39 | 15,NBC,68290000,,44.4,63,,,275000 40 | 14,CBS,76240000,,46.3,67,,,222000 41 | 13,NBC,74740000,,47.1,74,,,185000 42 | 12,CBS,78940000,,47.2,67,,,162300 43 | 11,NBC,62050000,,44.4,73,,,125000 44 | 10,CBS,57710000,,42.3,78,,,110000 45 | 9,NBC,56050000,,42.4,72,,,107000 46 | 8,CBS,51700000,,41.6,73,,,103500 47 | 7,NBC,53320000,,42.7,72,,,88100 48 | 6,CBS,56640000,,44.2,74,,,86100 49 | 5,NBC,46040000,,39.9,75,,,72500 50 | 4,CBS,44270000,,39.4,69,,,78200 51 | 3,NBC,41660000,,36,70,,,55000 52 | 2,CBS,39120000,,36.8,68,,,54500 53 | 1,CBS,26750000,51180000,22.6,43,,,42500 54 | 1,NBC,24430000,,18.5,36,,,37500 -------------------------------------------------------------------------------- /TV, Halftime Shows, and the Big Game/datasets/halftime_musicians.csv: -------------------------------------------------------------------------------- 1 | super_bowl,musician,num_songs 2 | 52,Justin Timberlake,11 3 | 52,University of Minnesota Marching Band,1 4 | 51,Lady Gaga,7 5 | 50,Coldplay,6 6 | 50,Beyoncé,3 7 | 50,Bruno Mars,3 8 | 50,Mark Ronson,1 9 | 50,University of California Marching Band,3 10 | 50,Youth Orchestra Los Angeles,3 11 | 50,Gustavo Dudamel,3 12 | 49,Katy Perry,8 13 | 49,Lenny Kravitz,1 14 | 49,Missy Elliott,3 15 | 49,Arizona State University Sun Devil Marching Band, 16 | 48,Bruno Mars,6 17 | 48,Red Hot Chili Peppers,1 18 | 47,Beyoncé,7 19 | 47,Destiny's Child,2 20 | 47,Kelly Rowland,1 21 | 47,Michelle Williams,1 22 | 46,Madonna,5 23 | 46,LMFAO,1 24 | 46,Nicki Minaj,1 25 | 46,M.I.A.,1 26 | 46,Cee Lo Green,2 27 | 45,The Black Eyed Peas,6 28 | 45,Slash,1 29 | 45,Usher,1 30 | 45,will.i.am,1 31 | 45,Fergie,1 32 | 44,The Who,5 33 | 43,Bruce Springsteen and the E Street Band,4 34 | 42,Tom Petty & the Heartbreakers,4 35 | 41,Prince,7 36 | 41,Florida A&M University Marching 100 Band, 37 | 40,The Rolling Stones,3 38 | 39,Paul McCartney,4 39 | 38,Jessica Simpson,1 40 | 38,Janet Jackson,3 41 | 38,P. Diddy,3 42 | 38,Nelly,1 43 | 38,Kid Rock,2 44 | 38,Justin Timberlake,1 45 | 38,The Ocean of Soul Marching Band, 46 | 38,The Spirit of Houston Cougar Marching Band, 47 | 37,Shania Twain,2 48 | 37,No Doubt,2 49 | 37,Sting,1 50 | 36,U2,3 51 | 35,Aerosmith,3 52 | 35,NSYNC,3 53 | 35,Britney Spears,1 54 | 35,Mary J. Blige,1 55 | 35,Nelly,1 56 | 34,Phil Collins,1 57 | 34,Christina Aguilera,1 58 | 34,Enrique Iglesias,1 59 | 34,Toni Braxton,1 60 | 33,Gloria Estefan,3 61 | 33,Stevie Wonder,4 62 | 33,Big Bad Voodoo Daddy,1 63 | 32,Boyz II Men,3 64 | 32,Smokey Robinson,3 65 | 32,Martha Reeves,2 66 | 32,The Temptations,4 67 | 32,Queen Latifah,2 68 | 32,Grambling State University Tiger Marching Band,1 69 | 31,The Blues Brothers,3 70 | 31,ZZ Top,3 71 | 31,James Brown,3 72 | 30,Diana Ross,10 73 | 29,Patti Labelle,3 74 | 29,Tony Bennett,2 75 | 29,Arturo Sandoval,2 76 | 29,Miami Sound Machine,1 77 | 28,Clint Black,2 78 | 28,Tanya Tucker,2 79 | 28,Travis Tritt,2 80 | 28,The Judds,1 81 | 28,Wynonna Judd,2 82 | 27,Michael Jackson,5 83 | 26,Gloria Estefan,2 84 | 26,University of Minnesota Marching Band, 85 | 25,New Kids on the Block,2 86 | 24,Pete Fountain,1 87 | 24,Doug Kershaw,1 88 | 24,Irma Thomas,1 89 | 24,Pride of Nicholls Marching Band, 90 | 24,The Human Jukebox, 91 | 24,Pride of Acadiana, 92 | 23,Elvis Presto,7 93 | 22,Chubby Checker,2 94 | 22,San Diego State University Marching Aztecs, 95 | 22,Spirit of Troy, 96 | 21,Grambling State University Tiger Marching Band,8 97 | 21,Spirit of Troy,8 98 | 20,Up with People, 99 | 19,Tops In Blue, 100 | 18,The University of Florida Fightin' Gator Marching Band,7 101 | 18,The Florida State University Marching Chiefs,7 102 | 17,Los Angeles Unified School District All City Honor Marching Band, 103 | 16,Up with People, 104 | 15,The Human Jukebox, 105 | 15,Helen O'Connell, 106 | 14,Up with People, 107 | 14,Grambling State University Tiger Marching Band, 108 | 13,Ken Hamilton, 109 | 13,Gramacks, 110 | 12,Tyler Junior College Apache Band, 111 | 12,Pete Fountain, 112 | 12,Al Hirt, 113 | 11,Los Angeles Unified School District All City Honor Marching Band, 114 | 10,Up with People, 115 | 9,Mercer Ellington, 116 | 9,Grambling State University Tiger Marching Band, 117 | 8,University of Texas Longhorn Band, 118 | 8,Judy Mallett, 119 | 7,University of Michigan Marching Band, 120 | 7,Woody Herman, 121 | 7,Andy Williams, 122 | 6,Ella Fitzgerald, 123 | 6,Carol Channing, 124 | 6,Al Hirt, 125 | 6,United States Air Force Academy Cadet Chorale, 126 | 5,Southeast Missouri State Marching Band, 127 | 4,Marguerite Piazza, 128 | 4,Doc Severinsen, 129 | 4,Al Hirt, 130 | 4,The Human Jukebox, 131 | 3,Florida A&M University Marching 100 Band, 132 | 2,Grambling State University Tiger Marching Band, 133 | 1,University of Arizona Symphonic Marching Band, 134 | 1,Grambling State University Tiger Marching Band, 135 | 1,Al Hirt, -------------------------------------------------------------------------------- /Exploring 67 years of LEGO/datasets/colors.csv: -------------------------------------------------------------------------------- 1 | id,name,rgb,is_trans 2 | -1,Unknown,0033B2,f 3 | 0,Black,05131D,f 4 | 1,Blue,0055BF,f 5 | 2,Green,237841,f 6 | 3,Dark Turquoise,008F9B,f 7 | 4,Red,C91A09,f 8 | 5,Dark Pink,C870A0,f 9 | 6,Brown,583927,f 10 | 7,Light Gray,9BA19D,f 11 | 8,Dark Gray,6D6E5C,f 12 | 9,Light Blue,B4D2E3,f 13 | 10,Bright Green,4B9F4A,f 14 | 11,Light Turquoise,55A5AF,f 15 | 12,Salmon,F2705E,f 16 | 13,Pink,FC97AC,f 17 | 14,Yellow,F2CD37,f 18 | 15,White,FFFFFF,f 19 | 17,Light Green,C2DAB8,f 20 | 18,Light Yellow,FBE696,f 21 | 19,Tan,E4CD9E,f 22 | 20,Light Violet,C9CAE2,f 23 | 21,Glow In Dark Opaque,D4D5C9,f 24 | 22,Purple,81007B,f 25 | 23,Dark Blue-Violet,2032B0,f 26 | 25,Orange,FE8A18,f 27 | 26,Magenta,923978,f 28 | 27,Lime,BBE90B,f 29 | 28,Dark Tan,958A73,f 30 | 29,Bright Pink,E4ADC8,f 31 | 30,Medium Lavender,AC78BA,f 32 | 31,Lavender,E1D5ED,f 33 | 32,Trans-Black IR Lens,635F52,t 34 | 33,Trans-Dark Blue,0020A0,t 35 | 34,Trans-Green,84B68D,t 36 | 35,Trans-Bright Green,D9E4A7,t 37 | 36,Trans-Red,C91A09,t 38 | 40,Trans-Black,635F52,t 39 | 41,Trans-Light Blue,AEEFEC,t 40 | 42,Trans-Neon Green,F8F184,t 41 | 43,Trans-Very Lt Blue,C1DFF0,t 42 | 45,Trans-Dark Pink,DF6695,t 43 | 46,Trans-Yellow,F5CD2F,t 44 | 47,Trans-Clear,FCFCFC,t 45 | 52,Trans-Purple,A5A5CB,t 46 | 54,Trans-Neon Yellow,DAB000,t 47 | 57,Trans-Neon Orange,FF800D,t 48 | 60,Chrome Antique Brass,645A4C,f 49 | 61,Chrome Blue,6C96BF,f 50 | 62,Chrome Green,3CB371,f 51 | 63,Chrome Pink,AA4D8E,f 52 | 64,Chrome Black,1B2A34,f 53 | 68,Very Light Orange,F3CF9B,f 54 | 69,Light Purple,CD6298,f 55 | 70,Reddish Brown,582A12,f 56 | 71,Light Bluish Gray,A0A5A9,f 57 | 72,Dark Bluish Gray,6C6E68,f 58 | 73,Medium Blue,5A93DB,f 59 | 74,Medium Green,73DCA1,f 60 | 75,Speckle Black-Copper,000000,f 61 | 76,Speckle DBGray-Silver,635F61,f 62 | 77,Light Pink,FECCCF,f 63 | 78,Light Flesh,F6D7B3,f 64 | 79,Milky White,FFFFFF,f 65 | 80,Metallic Silver,A5A9B4,f 66 | 81,Metallic Green,899B5F,f 67 | 82,Metallic Gold,DBAC34,f 68 | 84,Medium Dark Flesh,CC702A,f 69 | 85,Dark Purple,3F3691,f 70 | 86,Dark Flesh,7C503A,f 71 | 89,Royal Blue,4C61DB,f 72 | 92,Flesh,D09168,f 73 | 100,Light Salmon,FEBABD,f 74 | 110,Violet,4354A3,f 75 | 112,Blue-Violet,6874CA,f 76 | 114,Glitter Trans-Dark Pink,DF6695,t 77 | 115,Medium Lime,C7D23C,f 78 | 117,Glitter Trans-Clear,FFFFFF,t 79 | 118,Aqua,B3D7D1,f 80 | 120,Light Lime,D9E4A7,f 81 | 125,Light Orange,F9BA61,f 82 | 129,Glitter Trans-Purple,A5A5CB,t 83 | 132,Speckle Black-Silver,000000,f 84 | 133,Speckle Black-Gold,000000,f 85 | 134,Copper,AE7A59,f 86 | 135,Pearl Light Gray,9CA3A8,f 87 | 137,Metal Blue,7988A1,f 88 | 142,Pearl Light Gold,DCBC81,f 89 | 143,Trans-Medium Blue,CFE2F7,t 90 | 148,Pearl Dark Gray,575857,f 91 | 150,Pearl Very Light Gray,ABADAC,f 92 | 151,Very Light Bluish Gray,E6E3E0,f 93 | 158,Yellowish Green,DFEEA5,f 94 | 178,Flat Dark Gold,B48455,f 95 | 179,Flat Silver,898788,f 96 | 182,Trans-Orange,F08F1C,t 97 | 183,Pearl White,F2F3F2,f 98 | 191,Bright Light Orange,F8BB3D,f 99 | 212,Bright Light Blue,9FC3E9,f 100 | 216,Rust,B31004,f 101 | 226,Bright Light Yellow,FFF03A,f 102 | 230,Trans-Pink,E4ADC8,t 103 | 232,Sky Blue,7DBFDD,f 104 | 236,Trans-Light Purple,96709F,t 105 | 272,Dark Blue,0A3463,f 106 | 288,Dark Green,184632,f 107 | 294,Glow In Dark Trans,BDC6AD,t 108 | 297,Pearl Gold,AA7F2E,f 109 | 308,Dark Brown,352100,f 110 | 313,Maersk Blue,3592C3,f 111 | 320,Dark Red,720E0F,f 112 | 321,Dark Azure,078BC9,f 113 | 322,Medium Azure,36AEBF,f 114 | 323,Light Aqua,ADC3C0,f 115 | 326,Olive Green,9B9A5A,f 116 | 334,Chrome Gold,BBA53D,f 117 | 335,Sand Red,D67572,f 118 | 351,Medium Dark Pink,F785B1,f 119 | 366,Earth Orange,FA9C1C,f 120 | 373,Sand Purple,845E84,f 121 | 378,Sand Green,A0BCAC,f 122 | 379,Sand Blue,6074A1,f 123 | 383,Chrome Silver,E0E0E0,f 124 | 450,Fabuland Brown,B67B50,f 125 | 462,Medium Orange,FFA70B,f 126 | 484,Dark Orange,A95500,f 127 | 503,Very Light Gray,E6E3DA,f 128 | 1000,Glow in Dark White,D9D9D9,f 129 | 1001,Medium Violet,9391E4,f 130 | 1002,Glitter Trans-Neon Green,C0F500,t 131 | 1003,Glitter Trans-Light Blue,68BCC5,t 132 | 1004,Trans Flame Yellowish Orange,FCB76D,t 133 | 1005,Trans Fire Yellow,FBE890,t 134 | 1006,Trans Light Royal Blue,B4D4F7,t 135 | 1007,Reddish Lilac,8E5597,f 136 | 9999,[No Color],05131D,f 137 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | import flask 2 | from flask import Flask, render_template, redirect, url_for 3 | from pymongo import MongoClient 4 | # pprint library is used to make the output look more pretty 5 | from pprint import pprint 6 | import pandas as pd 7 | import urllib 8 | import simplejson 9 | 10 | app = Flask(__name__) 11 | 12 | #Establishing connection 13 | client = MongoClient("mongodb://localhost:27017/") 14 | db=client.mydb 15 | 16 | #sotring collection varaibles 17 | 18 | col=db.inventory 19 | col1=db.checkout 20 | 21 | col1.aggregate([{ 22 | "$match" : { "fiction": 1 } 23 | }, 24 | {"$group":{"_id":{"BibNumber":"$BibNumber","Title":"$Title","Author":"$Author"},"count":{"$sum":1}}}, 25 | {"$sort":{"count":-1}},{"$limit":10},{ "$out" : "fiction" }],allowDiskUse=True) 26 | 27 | 28 | col1.aggregate([{ 29 | "$match" : { "mystery": 1 } 30 | }, 31 | {"$group":{"_id":{"BibNumber":"$BibNumber","Title":"$Title","Author":"$Author"},"count":{"$sum":1}}}, 32 | {"$sort":{"count":-1}},{"$limit":10},{ "$out" : "mystery" }],allowDiskUse=True) 33 | 34 | col1.aggregate([{ 35 | "$match" : { "drama": 1 } 36 | }, 37 | {"$group":{"_id":{"BibNumber":"$BibNumber","Title":"$Title","Author":"$Author"},"count":{"$sum":1}}}, 38 | {"$sort":{"count":-1}},{"$limit":10},{ "$out" : "drama" }],allowDiskUse=True) 39 | 40 | col1.aggregate([{ 41 | "$match" : { "literature": 1 } 42 | }, 43 | {"$group":{"_id":{"BibNumber":"$BibNumber","Title":"$Title","Author":"$Author"},"count":{"$sum":1}}}, 44 | {"$sort":{"count":-1}},{"$limit":10},{ "$out" : "literature" }],allowDiskUse=True) 45 | 46 | 47 | 48 | 49 | 50 | def statistics(year,genre): 51 | 52 | col1.aggregate([{ 53 | "$match" :{ "Year":year,genre: 1 } 54 | }, 55 | 56 | {"$group":{"_id":{"BibNumber":"$BibNumber","Title":"$Title","Author":"$Author"},"count":{"$sum":1}}}, 57 | {"$sort":{"count":-1}},{"$limit":1},{ "$out" : "fav" }],allowDiskUse=True) 58 | 59 | print("\nThe most checked out book was: \n") 60 | pprint(list(db.fav.find())) 61 | 62 | col1.aggregate([{ 63 | "$match" :{ "Year":year,genre: 1 } 64 | }, 65 | 66 | {"$group":{"_id":{"BibNumber":"$BibNumber","Title":"$Title","Author":"$Author"},"count":{"$sum":1}}}, 67 | {"$sort":{"count":1}},{"$limit":1},{ "$out" : "low" }],allowDiskUse=True) 68 | print("\nThe least checked out book was: \n") 69 | pprint(list(db.low.find())) 70 | 71 | 72 | #Function to find books based on author 73 | def find(author): 74 | results=col.find({"Author":{"$regex":author}},{"Author","Title","Publisher"}) 75 | # pprint(list(results)) 76 | for result in list(results): 77 | print('\n{0},\n{1},\n{2}\n'.format(result['Author'],result['Title'],result['Publisher'])) 78 | if not list(results): 79 | print('No such Author') 80 | 81 | 82 | 83 | 84 | def suggest(genre): 85 | 86 | 87 | if genre=='fiction': 88 | pprint(list(db.fiction.find())) 89 | 90 | elif genre=='mystery': 91 | pprint(list(db.mystery.find())) 92 | 93 | elif genre=='drama': 94 | pprint(list(db.drama.find())) 95 | 96 | elif genre=='literature': 97 | pprint(list(db.literature.find())) 98 | 99 | else: 100 | print('Genre does not exist') 101 | 102 | 103 | 104 | 105 | def insert(b,t,a,p,s,i): 106 | col.insert_one({"BibNum":int(b),"Title":t,"Author":a,"Publisher":p,"Subject":s,"ItemType":i}) 107 | 108 | 109 | def check(o): 110 | if(o not in range(1,6)): 111 | print("Wrong option selected") 112 | 113 | def update(o): 114 | 115 | if o==1: 116 | col.update_one({"BibNum":int(b)},{"$set": { "Title": x}}) 117 | 118 | elif o==2: 119 | col.update_one({"BibNum":int(b)},{"$set": { "Author": x}}) 120 | 121 | elif o==3: 122 | col.update_one({"BibNum":int(b)},{"$set": { "Publisher":x}}) 123 | 124 | elif o==4: 125 | col.update_one({"BibNum":int(b)},{"$set": { "Subject": x}}) 126 | 127 | elif o==5: 128 | col.update_one({"BibNum":int(b)},{"$set": { "ItemType": x}}) 129 | else: 130 | print("Wrong BibNumber inserted") 131 | 132 | 133 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Data-Cleaning-and-Manipulation 2 | 3 | This repo contains my projects on Data Cleaning and Manipulation, I have covered diverse topics under each project, You can see the description for each project below. 4 | 5 | 1)[A New Era of Data Analysis in Baseball](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/A%20New%20Era%20of%20Data%20Analysis%20in%20Baseball) 6 | 7 | In this notebook, we're going to wrangle, analyze, and visualize Statcast data to compare two baseball players named Aaron Judge and Giancarlo Stanton, we will use data visualizations like scatter plot, KDE, 2D histogram and python 'def' method to create functions for our 2D histogram. 8 | 9 | 10 | 2)[A Visual History of Nobel Prize Winners](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/A%20Visual%20History%20of%20Nobel%20Prize%20Winners) 11 | 12 | A very interesting project I worked on, over here I analyzed the past Nobel Prize winners and tried to draw insights like 'How many males and females won the prize', 'How many of the winners were from USA', 'How many won the prize more than once' and 'How dominant were the winners when it came to country / gender', for answering this questions we used various data maniupulation techniques like group by, value counts and also used Data Visualization techniques like Line plot, lmplot. 13 | 14 | 3)[AB Testing with Cookie Cats](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/AB%20Testing%20with%20Cookie%20Cats) 15 | 16 | In this project we performed AB testing on a popular game called as Cookie Cats, during the game players occasionally encounter gates that force them to wait a non-trivial amount of time or make an in-app purchase to progress. In this project we analyzed by AB-testing whether is it better to keep the gate at level 30 or level 40 by analyzing various factor of performance. 17 | 18 | 19 | 4)[Dr. Semmelweis and the Discovery of Handwashing](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/Dr.%20Semmelweis%20and%20the%20Discovery%20of%20Handwashing) 20 | 21 | In this project we analyze the popular Discovery of Handwashing by Dr. Semmelweis and how it helped reduce number of death among infants and preganant women, we used visualizationa and various mathematical functions inorder to conclude how much the discovery helped reducec the death rate. 22 | 23 | 5)[Exploring 67 years of LEGO](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/Exploring%2067%20years%20of%20LEGO) 24 | 25 | One of the first and basic project done by me, used simple data manipulation techniques to analyze colors of lego blocks and also the different lego sets build over the years. 26 | 27 | 6)[Exploring the Bitcoin Cryptocurrency Market](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/Exploring%20the%20Bitcoin%20Cryptocurrency%20Market) 28 | 29 | In this project we explore the data of Bitcoin Market, we see the market capitalization of top companies and analyze how volatile is the bitcoin market. We further analyzed to see at how much cost did the companies begin and how quickly their rates plunged. 30 | 31 | 7)[Exploring the evolution of Linux](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/Exploring%20the%20evolution%20of%20Linux) 32 | 33 | In this notebook, we analyzed the evolution of a very famous open-source project – the Linux kernel. The Linux kernel is the heart of some Linux distributions like Debian, Ubuntu or CentOS. 34 | 35 | We get some first insights into the work of the development efforts by 36 | 37 | 1) Identifying the TOP 10 contributors and 38 | 2) Visualizing the commits over the years. 39 | 40 | 8)[Exporing the Ames Iowa dataset](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/Exporing%20the%20Ames%20Iowa%20dataset) 41 | 42 | In this project we explored the breath alcohol tests from Ames Iowa. We analyzed what time of the day/moth were the tests mostly cocnducted. We also tried to find out if there was any pattern in the time of which the tests were conducted. 43 | 44 | 9)[PROJECT WHICH DEBTS ARE WORTH THE BANK'S EFFORT](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/PROJECT%20WHICH%20DEBTS%20ARE%20WORTH%20THE%20BANK'S%20EFFORT) 45 | 46 | In this project I analysed different recovery procedures take by the bank for various loan categories, I tried to find out if the money invested in making this procedures run is actually giving the return to the banks using Statistical Tests and Exploratory graphical analysis in this project. 47 | 48 | 10)[TV, Halftime Shows, and the Big Game](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/TV%2C%20Halftime%20Shows%2C%20and%20the%20Big%20Game) 49 | 50 | A very interesting project. I analysed all the performers that have performed in Super Bowl and analysed various parameters like band or singers who have performed more than once, number of songs performed during halftime, how has the viewership evolved of super bowl and also how likely are user to stay till the end of the match. 51 | 52 | 11)[The GitHub History of the Scala Language](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/tree/master/The%20GitHub%20History%20of%20the%20Scala%20Language) 53 | 54 | Scala is an open source project. Open source projects have the advantage that their entire development histories -- who made changes, what was changed, code reviews, etc. -- publicly available. 55 | 56 | In this project I read, cleaned, and visualized the real world project repository of Scala that spans data from a version control system (Git) as well as a project hosting site (GitHub). We found out who had the most influence on its development and who were the experts. 57 | 58 | 12) [Suicide Analytics](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/blob/master/Suicide%20Analytics.ipynb) 59 | 60 | In this project I used data from the Government of India website regarding the suicide rates and tried to analyse differenet parameters which I have explained in my blog [here](https://medium.com/@shaikhammar.7/suicide-analytics-c12f979fc078). I have used web scrapping to as well as data manipulation to bring out the insights for this project 61 | 62 | 13) [World Cup History](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/blob/master/World%20Cup%20History.ipynb) 63 | 64 | One of the project which I enjoyed working on throughly. I used web scraping to get raw data from a cricket stats website. Later I formatted that data and tried to analyse it and gathered some really cool insights which you can read [here](https://medium.com/@shaikhammar.7/analyzing-world-cup-history-25c963ef6b18) 65 | 66 | 67 | 68 | ### Few snapshots of visualization I have performed in the mentioned projects. 69 | 70 | ![alt text](https://github.com/ammarshaikh123/Projects-on-Data-Cleaning-and-Manipulation/blob/master/project_img.JPG) 71 | 72 | -------------------------------------------------------------------------------- /TV, Halftime Shows, and the Big Game/datasets/super_bowls.csv: -------------------------------------------------------------------------------- 1 | date,super_bowl,venue,city,state,attendance,team_winner,winning_pts,qb_winner_1,qb_winner_2,coach_winner,team_loser,losing_pts,qb_loser_1,qb_loser_2,coach_loser,combined_pts,difference_pts 2 | 2018-02-04,52,U.S. Bank Stadium,Minneapolis,Minnesota,67612,Philadelphia Eagles,41,Nick Foles,,Doug Pederson,New England Patriots,33,Tom Brady,,Bill Belichick,74,8 3 | 2017-02-05,51,NRG Stadium,Houston,Texas,70807,New England Patriots,34,Tom Brady,,Bill Belichick,Atlanta Falcons,28,Matt Ryan,,Dan Quinn,62,6 4 | 2016-02-07,50,Levi's Stadium,Santa Clara,California,71088,Denver Broncos,24,Peyton Manning,,Gary Kubiak,Carolina Panthers,10,Cam Newton,,Ron Rivera,34,14 5 | 2015-02-01,49,University of Phoenix Stadium,Glendale,Arizona,70288,New England Patriots,28,Tom Brady,,Bill Belichick,Seattle Seahawks,24,Russell Wilson,,Pete Carroll,52,4 6 | 2014-02-02,48,MetLife Stadium,East Rutherford,New Jersey,82529,Seattle Seahawks,43,Russell Wilson,,Pete Carroll,Denver Broncos,8,Peyton Manning,,John Fox,51,35 7 | 2013-02-03,47,Mercedes-Benz Superdome,New Orleans,Louisiana,71024,Baltimore Ravens,34,Joe Flacco,,John Harbaugh,San Francisco 49ers,31,Colin Kaepernick,,Jim Harbaugh,65,3 8 | 2012-02-05,46,Lucas Oil Stadium,Indianapolis,Indiana,68658,New York Giants,21,Eli Manning,,Tom Coughlin,New England Patriots,17,Tom Brady,,Bill Belichick,38,4 9 | 2011-02-06,45,Cowboys Stadium,Arlington,Texas,103219,Green Bay Packers,31,Aaron Rodgers,,Mike McCarthy,Pittsburgh Steelers,25,Ben Roethlisberger,,Mike Tomlin,56,6 10 | 2010-02-07,44,Sun Life Stadium,Miami Gardens,Florida,74059,New Orleans Saints,31,Drew Brees,,Sean Payton,Indianapolis Colts,17,Peyton Manning,,Jim Caldwell,48,14 11 | 2009-02-01,43,Raymond James Stadium,Tampa,Florida,70774,Pittsburgh Steelers,27,Ben Roethlisberger,,Mike Tomlin,Arizona Cardinals,23,Kurt Warner,,Ken Whisenhunt,50,4 12 | 2008-02-03,42,University of Phoenix Stadium,Glendale,Arizona,71101,New York Giants,17,Eli Manning,,Tom Coughlin,New England Patriots,14,Tom Brady,,Bill Belichick,31,3 13 | 2007-02-04,41,Dolphin Stadium,Miami Gardens,Florida,74512,Indianapolis Colts,29,Peyton Manning,,Tony Dungy,Chicago Bears,17,Rex Grossman,,Lovie Smith,46,12 14 | 2006-02-05,40,Ford Field,Detroit,Michigan,68206,Pittsburgh Steelers,21,Ben Roethlisberger,,Bill Cowher,Seattle Seahawks,10,Matt Hasselbeck,,Mike Holmgren,31,11 15 | 2005-02-06,39,Alltel Stadium,Jacksonville,Florida,78125,New England Patriots,24,Tom Brady,,Bill Belichick,Philadelphia Eagles,21,Donovan McNabb,,Andy Reid,45,3 16 | 2004-02-01,38,Reliant Stadium,Houston,Texas,71525,New England Patriots,32,Tom Brady,,Bill Belichick,Carolina Panthers,29,Jake Delhomme,,John Fox,61,3 17 | 2003-01-26,37,Qualcomm Stadium,San Diego,California,67603,Tampa Bay Buccaneers,48,Brad Johnson,,Jon Gruden,Oakland Raiders,21,Rich Gannon,,Bill Callahan,69,27 18 | 2002-02-03,36,Louisiana Superdome,New Orleans,Louisiana,72922,New England Patriots,20,Tom Brady,,Bill Belichick,St. Louis Rams,17,Kurt Warner,,Mike Martz,37,3 19 | 2001-01-28,35,Raymond James Stadium,Tampa,Florida,71921,Baltimore Ravens,34,Trent Dilfer,,Brian Billick,New York Giants,7,Kerry Collins,,Jim Fassel,41,27 20 | 2000-01-30,34,Georgia Dome,Atlanta,Georgia,72625,St. Louis Rams,23,Kurt Warner,,Dick Vermeil,Tennessee Titans,16,Steve McNair,,Jeff Fisher,39,7 21 | 1999-01-31,33,Pro Player Stadium,Miami Gardens,Florida,74803,Denver Broncos,34,John Elway,,Mike Shanahan,Atlanta Falcons,19,Chris Chandler,,Dan Reeves,53,15 22 | 1998-01-25,32,Qualcomm Stadium,San Diego,California,68912,Denver Broncos,31,John Elway,,Mike Shanahan,Green Bay Packers,24,Brett Favre,,Mike Holmgren,55,7 23 | 1997-01-26,31,Louisiana Superdome,New Orleans,Louisiana,72301,Green Bay Packers,35,Brett Favre,,Mike Holmgren,New England Patriots,21,Drew Bledsoe,,Bill Parcells,56,14 24 | 1996-01-28,30,Sun Devil Stadium,Tempe,Arizona,76347,Dallas Cowboys,27,Troy Aikman,,Barry Switzer,Pittsburgh Steelers,17,Neil O'Donnell,,Bill Cowher,44,10 25 | 1995-01-29,29,Joe Robbie Stadium,Miami Gardens,Florida,74107,San Francisco 49ers,49,Steve Young,,George Seifert,San Diego Chargers,26,Stan Humphreys,,Bobby Ross,75,23 26 | 1994-01-30,28,Georgia Dome,Atlanta,Georgia,72817,Dallas Cowboys,30,Troy Aikman,,Jimmy Johnson,Buffalo Bills,13,Jim Kelly,,Marv Levy,43,17 27 | 1993-01-31,27,Rose Bowl,Pasadena,California,98374,Dallas Cowboys,52,Troy Aikman,,Jimmy Johnson,Buffalo Bills,17,Jim Kelly,Frank Reich,Marv Levy,69,35 28 | 1992-01-26,26,Metrodome,Minneapolis,Minnesota,63130,Washington Redskins,37,Mark Rypien,,Joe Gibbs,Buffalo Bills,24,Jim Kelly,,Marv Levy,61,13 29 | 1991-01-27,25,Tampa Stadium,Tampa,Florida,73813,New York Giants,20,Jeff Hostetler,,Bill Parcells,Buffalo Bills,19,Jim Kelly,,Marv Levy,39,1 30 | 1990-01-28,24,Louisiana Superdome,New Orleans,Louisiana,72919,San Francisco 49ers,55,Joe Montana,,George Seifert,Denver Broncos,10,John Elway,,Dan Reeves,65,45 31 | 1989-01-22,23,Joe Robbie Stadium,Miami Gardens,Florida,75129,San Francisco 49ers,20,Joe Montana,,Bill Walsh,Cincinnati Bengals,16,Boomer Esiason,,Sam Wyche,36,4 32 | 1988-01-31,22,Jack Murphy Stadium,San Diego,California,73302,Washington Redskins,42,Doug Williams,,Joe Gibbs,Denver Broncos,10,John Elway,,Dan Reeves,52,32 33 | 1987-01-25,21,Rose Bowl,Pasadena,California,101063,New York Giants,39,Phil Simms,,Bill Parcells,Denver Broncos,20,John Elway,,Dan Reeves,59,19 34 | 1986-01-26,20,Louisiana Superdome,New Orleans,Louisiana,73818,Chicago Bears,46,Jim McMahon,,Mike Ditka,New England Patriots,10,Tony Eason,Steve Grogan,Raymond Berry,56,36 35 | 1985-01-20,19,Stanford Stadium,Palo Alto,California,84059,San Francisco 49ers,38,Joe Montano,,Bill Walsh,Miami Dolphins,16,Dan Marino,,Don Shula,54,22 36 | 1984-01-22,18,Tampa Stadium,Tampa,Florida,72920,Los Angeles Raiders,38,Jim Plunkett,,Tom Flores,Washington Redskins,9,Joe Theismann,,Joe Gibbs,47,29 37 | 1983-01-30,17,Rose Bowl,Pasadena,California,103667,Washington Redskins,27,Joe Theismann,,Joe Gibbs,Miami Dolphins,17,David Woodley,,Don Shula,44,10 38 | 1982-01-24,16,Pontiac Silverdome,Pontiac,Michigan,81270,San Francisco 49ers,26,Joe Montana,,Bill Walsh,Cincinnati Bengals,21,Ken Anderson,,Forrest Gregg,47,5 39 | 1981-01-25,15,Louisiana Superdome,New Orleans,Louisiana,76135,Oakland Raiders,27,Jim Plunkett,,Tom Flores,Philadelphia Eagles,10,Ron Jaworski,,Dick Vermeil,37,17 40 | 1980-01-20,14,Rose Bowl,Pasadena,California,103985,Pittsburgh Steelers,31,Terry Bradshaw,,Chuck Noll,Los Angeles Rams,19,Vince Ferragamo,,Ray Malavasi,50,12 41 | 1979-01-21,13,Orange Bowl,Miami,Florida,79484,Pittsburgh Steelers,35,Terry Bradshaw,,Chuck Noll,Dallas Cowboys,31,Roger Staubach,,Tom Landry,66,4 42 | 1978-01-15,12,Superdome,New Orleans,Louisiana,76400,Dallas Cowboys,27,Roger Staubach,,Tom Landry,Denver Broncos,10,Craig Morton,,Red Miller,37,17 43 | 1977-01-09,11,Rose Bowl,Pasadena,California,103438,Oakland Raiders,32,Kenny Stabler,,John Madden,Minnesota Vikings,14,Fran Tarkenton,,Bud Grant,46,18 44 | 1976-01-18,10,Orange Bowl,Miami,Florida,80187,Pittsburgh Steelers,21,Terry Bradshaw,,Chuck Noll,Dallas Cowboys,17,Roger Staubach,,Tom Landry,38,4 45 | 1975-01-12,9,Tulane Stadium,New Orleans,Louisiana,80997,Pittsburgh Steelers,16,Terry Bradshaw,,Chuck Noll,Minnesota Vikings,6,Fran Tarkenton,,Bud Grant,22,10 46 | 1974-01-13,8,Rice Stadium,Houston,Texas,71882,Miami Dolphins,24,Bob Griese,,Don Shula,Minnesota Vikings,7,Fran Tarkenton,,Bud Grant,31,17 47 | 1973-01-14,7,Memorial Coliseum,Los Angeles,California,90182,Miami Dolphins,14,Bob Griese,,Don Shula,Washington Redskins,7,Bill Kilmer,,George Allen,21,7 48 | 1972-01-16,6,Tulane Stadium,New Orleans,Louisiana,81023,Dallas Cowboys,24,Roger Staubach,,Tom Landry,Miami Dolphins,3,Bob Griese,,Don Shula,27,21 49 | 1971-01-17,5,Orange Bowl,Miami,Florida,79204,Baltimore Colts,16,Earl Morrall,Johnny Unitas,Don McCafferty,Dallas Cowboys,13,Craig Morton,,Tom Landry,29,3 50 | 1970-01-11,4,Tulane Stadium,New Orleans,Louisiana,80562,Kansas City Chiefs,23,Len Dawson,Mike Livingston,Hank Stram,Minnesota Vikings,7,Joe Kapp,,Bud Grant,30,16 51 | 1969-01-12,3,Orange Bowl,Miami,Florida,75389,New York Jets,16,Joe Namath,,Weeb Ewbank,Baltimore Colts,7,Earl Morrall,Johnny Unitas,Don Shula,23,9 52 | 1968-01-14,2,Orange Bowl,Miami,Florida,75546,Green Bay Packers,33,Bart Starr,,Vince Lombardi,Oakland Raiders,14,Daryle Lamonica,,John Rauch,47,19 53 | 1967-01-15,1,Memorial Coliseum,Los Angeles,California,61946,Green Bay Packers,35,Bart Starr,,Vince Lombardi,Kansas City Chiefs,10,Len Dawson,,Hank Stram,45,25 -------------------------------------------------------------------------------- /Exploring the Bitcoin Cryptocurrency Market/datasets/coinmarketcap_06012018.csv: -------------------------------------------------------------------------------- 1 | ,24h_volume_usd,available_supply,id,last_updated,market_cap_usd,max_supply,name,percent_change_1h,percent_change_24h,percent_change_7d,price_btc,price_usd,rank,symbol,total_supply 2 | 0,22081300000,16785225,bitcoin,1515230661,284909052105,21000000.0,Bitcoin,-0.42,5.76,26.04,1.0,16973.8,1,BTC,16785225 3 | 1,5221370000,38739144847,ripple,1515230641,119207709132,100000000000.0,Ripple,-0.26,-9.23,24.15,0.00018601,3.07719,2,XRP,99993093880 4 | 2,5705690000,96803840,ethereum,1515230649,100115499075,,Ethereum,0.29,-1.04,45.01,0.0625169,1034.21,3,ETH,96803840 5 | 3,1569900000,16896225,bitcoin-cash,1515230652,44424061657,21000000.0,Bitcoin Cash,0.03,7.99,2.81,0.158934,2629.23,4,BCH,16896225 6 | 4,428305000,25927070538,cardano,1515230654,25916647856,45000000000.0,Cardano,0.39,-5.87,64.99,6.042e-05,0.999598,5,ADA,31112483745 7 | 5,2105240000,54637708,litecoin,1515230641,16574020942,84000000.0,Litecoin,2.31,22.26,32.85,0.0183368,303.344,6,LTC,54637708 8 | 6,146039000,8999999999,nem,1515230644,14813369998,,NEM,-1.82,-2.53,69.65,9.949e-05,1.64593,7,XEM,8999999999 9 | 7,656389000,17877794558,stellar,1515230643,12634630726,,Stellar,1.58,-4.94,110.28,4.272e-05,0.706722,8,XLM,103570548975 10 | 8,2971610000,65748192475,tron,1515230654,11741640953,,TRON,-1.8,-12.63,434.36,1.08e-05,0.178585,9,TRX,100000000000 11 | 9,194039000,2779530283,iota,1515230652,11143859582,2779530283.0,IOTA,-3.03,0.89,19.45,0.00024236,4.00926,10,MIOTA,2779530283 12 | 10,238654000,7801457,dash,1515230641,9443273049,18900000.0,Dash,0.08,-2.46,15.85,0.0731704,1210.45,11,DASH,7801457 13 | 11,259097000,65000000,neo,1515230647,6409507000,,NEO,0.18,-3.74,46.98,0.00596073,98.6078,12,NEO,100000000 14 | 12,647694000,586635743,eos,1515230651,6378431775,1000000000.0,EOS,0.05,1.41,20.95,0.00065725,10.8729,13,EOS,900000000 15 | 13,176521000,15569135,monero,1515230642,6093712747,,Monero,0.33,-2.29,12.53,0.0236595,391.397,14,XMR,15569135 16 | 14,188352000,16748174,bitcoin-gold,1515230656,4699437020,21000000.0,Bitcoin Gold,-0.41,4.04,6.26,0.0169616,280.594,15,BTG,16848174 17 | 15,1435930000,73787268,qtum,1515230651,4610427730,,Qtum,0.12,11.82,6.26,0.00377701,62.4827,16,QTUM,100287268 18 | 16,57669000,133248289,raiblocks,1515230649,4354913862,133248290.0,RaiBlocks,0.4,-2.83,174.88,0.00197563,32.6827,17,XRB,133248289 19 | 17,420911000,98914249,ethereum-classic,1515230647,3663922263,,Ethereum Classic,0.85,-1.05,30.71,0.00223911,37.0414,18,ETC,98914249 20 | 18,256935000,116710388,lisk,1515230646,3614952545,,Lisk,6.57,27.4,53.7,0.00187233,30.9737,19,LSK,116710388 21 | 19,84748700,183253534612,bytecoin-bcn,1515230643,2961908555,184470000000.0,Bytecoin,-6.45,80.88,199.25,9.8e-07,0.0161629,20,BCN,183253534612 22 | 20,507996000,31396146174,siacoin,1515230646,2876963877,,Siacoin,-2.88,92.48,218.71,5.54e-06,0.0916343,21,SC,31396146174 23 | 21,150401000,378545005,icon,1515230656,2788983321,,ICON,1.61,-1.48,42.01,0.00044537,7.36764,22,ICX,400230000 24 | 22,449145000,14505501607,verge,1515230643,2641437337,16555000000.0,Verge,-0.0,7.17,28.49,1.101e-05,0.182099,23,XVG,14505501607 25 | 23,34779100,6168154,bitconnect,1515230649,2627991338,28000000.0,BitConnect,-0.31,1.24,2.47,0.0257547,426.058,24,BCC,9446497 26 | 24,62918700,2606720000,bitshares,1515230643,2011298231,3600570502.0,BitShares,-0.47,-3.32,23.74,4.664e-05,0.771582,25,BTS,2606720000 27 | 25,126859000,102042552,omisego,1515230653,1969992687,,OmiseGO,0.38,-1.89,34.41,0.001167,19.3056,26,OMG,140245398 28 | 26,160052000,2996331,zcash,1515230648,1814329510,,Zcash,0.15,4.3,16.28,0.0366028,605.517,27,ZEC,2996331 29 | 27,115888000,3470483788,status,1515230651,1707891011,,Status,-1.03,-11.95,201.88,2.975e-05,0.492119,28,SNT,6804870174 30 | 28,7904480,998999495,ardor,1515230647,1583354260,998999495.0,Ardor,-0.22,-20.83,2.76,9.581e-05,1.58494,29,ARDR,998999495 31 | 29,52665900,98689749,stratis,1515230647,1579401140,,Stratis,3.41,3.08,18.82,0.00096741,16.0037,30,STRAT,98689749 32 | 30,283178000,112648430726,dogecoin,1515230642,1547057223,,Dogecoin,-1.55,30.5,66.76,8.3e-07,0.0137335,31,DOGE,112648430726 33 | 31,427548000,99014000,binance-coin,1515230652,1519755985,,Binance Coin,1.81,37.44,92.71,0.00092782,15.3489,32,BNB,199013968 34 | 32,2650720,37004027,populous,1515230652,1516047581,53252246.0,Populous,0.15,-4.15,10.24,0.00247658,40.9698,33,PPT,53252246 35 | 33,3032150000,1468089837,tether,1515230645,1472684958,,Tether,0.15,0.51,-1.13,6.064e-05,1.00313,34,USDT,1499999377 36 | 34,28142300,246039824,steem,1515230646,1441790911,,Steem,-0.84,-7.79,113.53,0.00035423,5.85999,35,STEEM,263013918 37 | 35,197849000,9656878003,digibyte,1515230641,1242309071,21000000000.0,DigiByte,-1.14,15.73,112.57,7.78e-06,0.128645,36,DGB,9656878003 38 | 36,55558000,100000000,waves,1515230646,1206140000,,Waves,0.16,-4.14,-0.49,0.0007291,12.0614,37,WAVES,100000000 39 | 37,193837000,277162633,vechain,1515230653,1131006472,,VeChain,2.17,3.79,82.41,0.00024667,4.08066,38,VEN,867162633 40 | 38,12643600,756097560976,kin,1515230655,1110654390,,Kin,4.1,132.13,482.76,9e-08,0.00146893,39,KIN,10000000000000 41 | 39,235648000,42462792,hshare,1515230653,1011276869,84000000.0,Hshare,-1.0,-0.23,-12.78,0.00143962,23.8156,40,HSR,42462792 42 | 40,20589500,103903777,komodo,1515230648,916455211,,Komodo,-1.56,-0.58,-2.44,0.00053317,8.82023,41,KMD,103903777 43 | 41,16676700,91043076,kucoin-shares,1515230656,912178787,,KuCoin Shares,2.65,56.15,252.57,0.00060565,10.0192,42,KCS,181043076 44 | 42,44626700,834262000,golem-network-tokens,1515230648,850530109,,Golem,1.53,-1.8,40.39,6.163e-05,1.0195,43,GNT,1000000000 45 | 43,40052900,210087515465,experience-points,1515230649,847434213,,Experience Points,-8.85,-6.45,398.45,2.4e-07,0.00403372,44,XP,245119283121 46 | 44,20244600,11000000,augur,1515230646,843630700,,Augur,0.14,-3.97,13.21,0.00463605,76.6937,45,REP,11000000 47 | 45,11092000,238421940,dragonchain,1515230658,825535967,,Dragonchain,-0.95,2.18,305.57,0.0002093,3.4625,46,DRGN,433494437 48 | 46,63324800,54840598,nexus,1515230644,773718575,,Nexus,-7.37,48.13,366.13,0.00085284,14.1085,47,NXS,54840598 49 | 47,389519,2036645,veritaseum,1515230651,773082096,,Veritaseum,0.36,-1.25,11.93,0.0229456,379.586,48,VERI,100000000 50 | 48,64104700,10614760961,dent,1515230653,771905417,,Dent,-3.48,-3.16,282.03,4.4e-06,0.07272,49,DENT,100000000000 51 | 49,18424400,97981284,ark,1515230649,732936257,,Ark,5.9,3.13,10.17,0.00045218,7.48037,50,ARK,129231284 52 | 50,3856810,6501427,decred,1515230646,726527943,21000000.0,Decred,0.47,-0.46,27.61,0.00675512,111.749,51,DCR,6921427 53 | 51,55581100,4249873622,funfair,1515230651,720952811,,FunFair,-2.43,0.27,193.42,1.025e-05,0.169641,52,FUN,10999873621 54 | 52,28490500,75401962,ethos,1515230652,710493087,,Ethos,4.32,-2.41,295.28,0.00056959,9.42274,53,ETHOS,222295208 55 | 53,91830400,640788433,request-network,1515230655,675166733,,Request Network,-7.0,35.78,198.28,6.369e-05,1.05365,54,REQ,999999999 56 | 54,27306700,4997507466,electroneum,1515230657,664063795,21000000000.0,Electroneum,2.9,50.4,71.53,8.03e-06,0.132879,55,ETN,5195262064 57 | 55,42693900,54507718,salt,1515230655,641599443,,SALT,0.99,-2.52,-8.57,0.00071153,11.7708,56,SALT,120000000 58 | 56,74723400,28713325229,reddcoin,1515230643,626151483,,ReddCoin,-1.36,12.23,130.26,1.32e-06,0.021807,57,RDD,28713325229 59 | 57,67469800,350000000,qash,1515230658,612188500,,QASH,2.6,14.94,105.45,0.00010573,1.74911,58,QASH,1000000000 60 | 58,59072600,360482334,power-ledger,1515230656,591533486,,Power Ledger,-2.61,6.53,91.75,9.919e-05,1.64095,59,POWR,1000000000 61 | 59,43476600,1000000000,basic-attention-token,1515230651,591100000,,Basic Attention Token,0.31,-4.58,71.92,3.573e-05,0.5911,60,BAT,1500000000 62 | 60,123091000,6885695758,digitalnote,1515230643,589945067,,DigitalNote,-2.59,168.77,360.58,5.18e-06,0.0856769,61,XDN,6885695758 63 | 61,40637000,2509983876433,paccoin,1515230645,578538734,,PACcoin,-0.8,210.41,2099.78,1e-08,0.000230495,62,PAC,3415497326789 64 | 62,9807630,55284715,pivx,1515230645,573661848,,PIVX,0.51,0.63,5.1,0.00062725,10.3765,63,PIVX,55284715 65 | 63,31026100,478550801,0x,1515230653,561478869,,0x,0.83,-2.85,83.47,7.092e-05,1.17329,64,ZRX,1000000000 66 | 64,44887800,987000000,bytom,1515230653,541213554,,Bytom,1.5,2.79,66.01,3.315e-05,0.548342,65,BTM,1407000000 67 | 65,24712100,61299856,aion,1515230655,536210681,,Aion,4.92,6.33,84.15,0.00052877,8.74734,66,AION,465934587 68 | 66,3042420,645222,byteball,1515230649,534076102,,Byteball Bytes,-2.04,-3.47,20.85,0.0500359,827.74,67,GBYTE,1000000 69 | 67,63778700,998999942,nxt,1515230641,533881553,1000000000.0,Nxt,0.84,-7.82,4.52,3.23e-05,0.534416,68,NXT,998999942 70 | 68,32125900,8745102,factom,1515230645,526901141,,Factom,-0.57,-3.29,45.41,0.0036421,60.251,69,FCT,8745102 71 | 69,3964470,233020472,aeternity,1515230651,508886418,,Aeternity,0.8,3.29,77.06,0.00013201,2.18387,70,AE,273685830 72 | 70,136425000,250000000,aelf,1515230658,501330000,,aelf,2.84,15.88,122.28,0.00012122,2.00532,71,ELF,260000000 73 | 71,169670000,2196601583,poet,1515230653,490103549,,Po.et,1.58,20.35,244.39,1.349e-05,0.223119,72,POE,3141592653 74 | 72,14147600,56525075,monacoin,1515230642,468913933,,MonaCoin,-1.49,-8.92,-16.09,0.00050146,8.29568,73,MONA,56525075 75 | 73,28459200,134132697,kyber-network,1515230654,463896591,,Kyber Network,1.27,-0.44,53.29,0.00020906,3.45849,74,KNC,215625349 76 | 74,3006740,182963195,rchain,1515230654,461663712,1000000000.0,RChain,0.47,-2.67,304.98,0.00015253,2.52326,75,RHOC,870663574 77 | 75,11291500,452552412,maidsafecoin,1515230642,460485656,,MaidSafeCoin,0.46,-2.82,23.03,6.151e-05,1.01753,76,MAID,452552412 78 | 76,24414300,1104590,gnosis-gno,1515230650,443274176,,Gnosis,-4.19,17.7,102.59,0.0242583,401.302,77,GNO,10000000 79 | 77,28087100,60522871,santiment,1515230652,435529842,,Santiment Network Token,-4.12,-6.19,37.91,0.000435,7.19612,78,SAN,83337000 80 | 78,5712070,492954537,wax,1515230658,435060478,,WAX,0.87,5.92,-11.23,5.335e-05,0.882557,79,WAX,1850000000 81 | 79,43817800,74836171,enigma-project,1515230655,430398536,,Enigma,1.56,18.89,155.95,0.00034765,5.75121,80,ENG,150000000 82 | 80,11770000,2429624141,storm,1515230658,427526382,,Storm,-0.61,1.7,294.61,1.064e-05,0.175964,81,STORM,10000000000 83 | 81,38200000,9137582,gas,1515230652,425576477,100000000.0,Gas,-0.93,17.92,83.34,0.00281536,46.5743,82,GAS,13802656 84 | 82,516807,1288862,bitcoindark,1515230643,424874708,,BitcoinDark,0.12,-10.74,15.6,0.019927,329.651,83,BTCD,1288862 85 | 83,3174470,325190215376,dentacoin,1515230653,415105310,8000000000000.0,Dentacoin,2.56,53.6,115.44,8e-08,0.0012765,84,DCN,1841395638392 86 | 84,16416200,3821472,zcoin,1515230647,413238688,,ZCoin,0.02,-0.78,-0.83,0.00653672,108.136,85,XZC,3821472 87 | 85,39622800,104661310,tenx,1515230651,406814326,,TenX,-1.89,-15.81,6.55,0.00023496,3.88696,86,PAY,205218256 88 | 86,12938800,99788314,iconomi,1515230647,405550686,,Iconomi,4.59,-7.13,83.82,0.00024567,4.06411,87,ICN,99788314 89 | 87,26840000,226091449,substratum,1515230655,404025419,,Substratum,-0.04,-1.72,71.43,0.00010802,1.787,88,SUB,352000000 90 | 88,23685400,350000000,chainlink,1515230654,387709000,,ChainLink,-3.56,3.7,135.28,6.696e-05,1.10774,89,LINK,1000000000 91 | 89,13571200,530051126,syscoin,1515230643,384002959,888000000.0,Syscoin,-0.53,-3.06,-0.98,4.379e-05,0.724464,90,SYS,530051126 92 | 90,41468300,342699966,civic,1515230652,381479894,,Civic,-1.86,-6.03,35.07,6.729e-05,1.11316,91,CVC,1000000000 93 | 91,70476200,1607622325,time-new-bank,1515230657,360665246,,Time New Bank,3.42,19.68,179.28,1.356e-05,0.224347,92,TNB,5541877892 94 | 92,10685200,2000000,digixdao,1515230646,353794000,,DigixDAO,0.65,-12.19,15.65,0.0106932,176.897,93,DGD,2000000 95 | 93,18599500,40510000,gxshares,1515230651,336997019,100000000.0,GXShares,-1.23,11.61,65.19,0.00050287,8.31886,94,GXS,100000000 96 | 94,44229200,24898178,walton,1515230653,334295387,100000000.0,Walton,6.94,32.69,26.04,0.00081162,13.4265,95,WTC,70000000 97 | 95,33186200,617314171,quantstamp,1515230657,329103148,,Quantstamp,1.9,8.96,136.7,3.223e-05,0.533121,96,QSP,976442388 98 | 96,51006100,50148936,raiden-network-token,1515230656,317135853,,Raiden Network Token,1.27,2.29,59.57,0.00038227,6.32388,97,RDN,100000000 99 | 97,11258600,64355352,gamecredits,1515230643,314180254,,GameCredits,0.07,2.95,19.36,0.00029511,4.88196,98,GAME,64355352 100 | 98,28523900,756192535,enjin-coin,1515230656,308707284,,Enjin Coin,0.87,-0.61,170.82,2.468e-05,0.408239,99,ENJ,1000000000 101 | 99,14153900,40772871,bancor,1515230651,299515469,,Bancor,0.56,-1.59,48.06,0.00044406,7.34595,100,BNT,79384422 102 | -------------------------------------------------------------------------------- /Exploring 67 years of LEGO/datasets/downloads_schema.png: -------------------------------------------------------------------------------- 1 | �PNG 2 |  3 | IHDRu2 �J pHYs  �� 4 | OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*! J�!��Q�EEȠ�����Q, � 5 | ��!���������{�kּ������>���� �H3Q5� �B�������.@� 6 | $p�d!s�#�~<<+"��x� �M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH���� � 0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4���������x����6��_-��"bb���ϫp@�t~��,/��;�m��%�h^ �u��f�@����W�p�~<�5�j>{�-�]c�K'Xt����o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A��,���� �`6�B$��BB 7 | d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(�� A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=� �C��7�F� �dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8, �c˱"� ���V����cϱw�E� 6wB aAHXLXN�H� $4� 7 �Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[ 8 | �b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w ��Ljg(�gw��L�Ӌ�T071���oUX*�*|�� 9 | �J�&�*/T����ު U�U�T��^S}�FU3S� Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k ��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN �(���~���)�)�4L�1e\k����X�H�Q�G�6������E�Y��A�J'\'Gg����S�Sݧ 10 | �M=:��.�k���Dw�n��^��Lo��y���}/�T�m���G X� $� �<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��= ���Z~s�r:V:ޚΜ�?}����/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z���������ۯ�6�i�ܟ�4�)�Y3s���C�Q��? ��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�������!h�쐭!��Α�i�P~���a�a��~ '���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl������� �{�/�]py�����.,:�@L�N8��A*��%�w%� 11 | y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y- 12 | �B��TZ(�*�geWf�͉�9���+��̳�ې7�����ᒶ��KW-X潬j9�������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n �ڴ �V����E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa��n��{��4���[���>ɾ�UUM�f�e�I���?�������m]�Nmq����#�׹���=TR��+�G�����w- 6 U����#pDy��� �� :�v�{���vg/jB��F�S��[b[�O�>����z�G��499�?r����C�d�&����ˮ/~�����јѡ�򗓿m|������������x31^�V���w�w��O�| (�h���SЧ��������c3-� cHRMz%������u0�`:�o�_�F.\��X@_��/�[[[�X� 15 | i����4�P�,<()^եy�[����X-�� �m���p�/�?��M���Q ��9�}�׻:i��k�oD���)"�?h�l~�b��|k��y�������}�����dήDD�z�^�,�<�8n�]H�x�5���߭�$޼�+�{�D|Hp2/D�{�;�S�x#��vk"��z�]}��~����ˌӰ��""��S�_X{|��v��a�xځM��` ���ȼ<i������9�ǔŧ�g�[� f��M��ǣ�q[6O�IM�~��K;�~`�j�X@_+��馴?��T��n-�g��ZmŬ�XvT_|�)R�����-��z�ޗ�M�b���(����a/�ߔv�=��Y�����e��+���dΜz���w�k=����UD�K�6��f[�6t ���Q,D �0����(���r�e-� 16 | ���b1R����w��VWt�V�Q��Vk�k������x��A��,���U�����q!<k��{����l;<��A$�uN��ʏ�9 �� �+�o��`����r:]�9v}��bͰ�gUSe\�K�����fst�}&����ED���MX�M�� `XĈP/���⦨r�!j�k������}��?����}������o�5cD��N��+D+4D�rZ)4�B���Y/��"�n��%zy_k���YbPޮn�/4�v�((^���:�ĵ� �L��{c���O�@_a��� �/�!F�sYCK��1 �0���۲�O��kS����NV���a�at�.���x-Q��T��5��b�גu�0�n��3��*_Ɋk��j�d���ctK).���������^C�с�Sn0�/�f�ughv}��7��b����T�uVDD� Sò;��5�;��Y��:R�9qd��U�յ�:����^�l�)�ځ%ߓp��`peò0m������m=y��d��Ԫ����Z�ąa���ܾ\L- ��U������p]~�u�sݐ�ugo[�4�k8T�,y����k�nFಆ�ꂌ��:�VדR�)��H�R�z��3e>(�����)�?9,����ǐ_� u{�s]��U]O��wA�m�^�*��lyih�u���u�G��z�u�I��Y &���ς8L��d�7u����a�\;��3d,����0 �+:)��V�~4��tK��2��ţN�$_�)J�w�ǵdݳ'��{֐uZ�[�'���(��m��-��^>�ȴ�^.�u�l��R�;�0�Ȏ^��2,/s?'�����o�94߁� �~+F-� Mo����ZيaT̏���߷i��d�;I^���>=�e�xy�r�W�#o�{�6�V�E�+���덪J����g'U��U�x�WrJ���o�^��H�� �a�=e~�9Ό7 17 | ���3��((�����:���۬�6���̐�pO���|ޏ_�����ȑ�١���9Fb#b.K���?�NJC1D@_��g�9 �Wj� �+z ��F�U�"F/ ^��e𧋤+\3-�+%�+<����������W3w_�ߗ�!�F_�?��G_�rڲ�1�������ZW4���z9�/{IM�����F%�2�2��.d�6)�jK��n�m\kI�N���?xe� +�s�琿{Q!�,y�XI��W{P�t>� pF�vVN_��=�H�8!z9�Fa���Q6�����5�V�7�ZOZ���^��+���{v��#&o}0�C7\{�W���@;Qi�*�;}���u���W�w�@�q�!~ ��� �J���_�c�n�g"��:������VE�_�]U/���%N� �xa7�� ���������s�S����Ȕ�g#f;����N�q#�PF��a�%�P��<ԿR-�$�R��'[7��w�Ev����Y���s��@_!$W �9@�6��M +���? \|�)@_a!,�������@d�ձ���X����/��2�����9����3�*' x�)�z�����Xl��?���[7�R�B�G pn��x�/�ȘmN�e���K'qq��i`�S߻�ݞ�)�m�W�B ���� 18 | ���9���9��d;���=���e��:aU�d�'��uCD�q]͟D\\Y�!��?G�r��T�(8�9î8^�:��I.g���b��Q�3}����{����f�����6�Mv���u5��^5ڛ6�V�F��8���$�DQ�����)��3z�,�J ���?gdd��3e� ���:-w<����� pf���qmɾ.ur�� 4�k�����x�g6�o����DDj��(��O[�X,�m�߻�\����X,��e��5�2SjyoC_��O���v�ݘK�� p��I�2ٙf���켻�b>�Q��R�P@�U�� ��=]q����dήDD�z�^��6f����]���KM�������^�׻:��q���v�M���tS����eϯ����nM�����õ�>{���2������ �"cy�=ls��mi��d����k��Ϗ������kd���QfD"�&№�?h���F��Vկ��BDD6�u��qr�oED���c�<������ݍ�j��@^������G�c�i�oX�rx�}L-���G�ݚ��_�13�:�uQ��΋�R��Bh2�fdr�� �v���<|�N��9�����|k㸽�gf^��i�����V �$>��v�Y;���j"WW�E�z_���8ލ�Q� ߆=jU%?P���/��������1",Ċyܯ>_�A�i��?�D�ꊢD*?�\�yůKq%Ek�S��VN�L��.�4 19 | �b>&��ˑO��5�,�+�\Fd@_a��s�Yo���>M�jz-q]���sG�R鷿���u�=h�� ��Jt��80�����k���c}į��b4������k����}* ?������t��6 X�y���:%mS�U�< ݼ�+�#�v���Ϲ(]�Q�^Nǵ�è�&�����w����Z�Sy�B��It �[Pr�%�gɉaV�גu�&;�(�Ԃ���>�+�*��2~�+g�����|<�����q3�J��c�"�'R·I%�ò���w�h?,S  ��W;k��C��;l�Aq�'�W�x�̤�b�e��;՚w(�Ǽ}��Ɖ0��w����L��;�7���a�e��6�r�m ��]��UV�'N|�sdR���3����t������ ��l���w��rr�\��9��Ǧ���߿X�b}5l�5j��<�8n�]H�x�5q�!�[:�U�� 20 | �;9>�9㾓���mf9y�҃K�-;�in���� ��ܧ��M� �\I���j��{Y��C[���������Uܫ�H���&"/3Nõ��3�l"��9#"�#K^W�*+���?g�wr��f�Kg��Ƨ�X�j����SY����ZPד����bQ5��=�j�+����t;6u�����mKM�����'�gĈ�ټ�VY����+Ǔo�J]^�|�Ԃ�_�jL���?�e�T��c���b�L��z?�[a�,�KO`Q겍�']0���@;�^|�y|�n���5[�ƭ��S��6��}9�u�YVW�f�#`�+�|���ojau`l s z"�u�0oӫ���!�#ğ� �(�4į0��d���Q2�G� 21 | ��s`�R5B|;;B?B�ew���@� 22 | ��5��k��s�_aaq�s:���1cq )A�ܖݞ9� ��<�3�㢲J:e�:s���۽������\n�OUS�##;���#��̹�j��3��r2K���ŽQ�:i'�]��ڵG��{�e��(�"+�2�����CؙDBx]�Nb,�����x�xbZ�H"�JX|J�dw���N���ӎ�K*����F]O��S�nT��H�3��"��� ��0�b���?X}V/��e/�iU{a�>8��R��(���mR�Ֆ����۸ֲ�` ��rZ�aq}�+��_�+�m���_�u�ؿ���v���.��?�����a�|�mY7sP�ԓ��B���0�z��ۗ �d��=1Kv�.�Wv�}�v}U���$����Γ�m����v|�Nl�ܝ^.�u�l��R��h<�����Zp�ǹ��'�v��+DAb�B\�u�Or�B-^�F8��i��8����MQU�'�Y΄���O"V����EDV 23 | R;ޙ��W��];���U�� 24 | $x�[��1#���9����}�/-��(�����S C���t��d+��Q\��u�WXPH����8�Lr;��H$U�R����IҴ�����V��t���� 25 | '���W�ր����L�yL-��&aNj�!���uE��4 ����BT@_����.�W�^��� 26 | ܵf�R8�<��`�+p�~&Y�B/�K���WX��(��;�0WB石�. �+,_�~`��ϱ�qd��鱓���g��;𘆻W4���0Zw[��|��EDE��9O�F��<�g=d|=�����ˆ;7?@`��s:� �?'Whx��;���gΨ�Z�(�R��aL��Z&�B�W��I�zm�_㺚ߙ��a����I�|c��N���� -� ~�9n3�Ν��c;vxz�1�a�\@�WXЍ{z_��X۸�^g}z����jN)4D�;I����{)��Gt`p����s|�t�ᙃ�B��j�u�sݐ�u�O�Q4�&x�E�ـ�9A�t��d˚3�a����l]~�'�}�h޸�����׹.��:�7��]wG;��鲕���<O����f+]۹�^S�%����ć9�J���c � �!}�X���P��8�`u14��%U���?]�V�׍��w�v�����!7����0����. �a����l�ޥ����4�իW�ͲK� 27 | !�����q�����Ω���B�?`�$6`�Ś�.�y/� 28 | F�FX��+����}�ك5� ��b#b#~ @_!�,�;�2� 29 | 0?Ll���w��� ~���3f������jiq��.�>9�`������B!m�ZyfE�W�^���3�3n��g\�'ǴӪ竹}�X)G!�Â��q ���-�Hݨd+��o�ZU��-���Oږ >9V��D*��><��&Ј����^ů�s��pV���W)� 30 | DT&��������U 31 | ��� 32 | �W x}<��sL?EQ����EQ����7�r7X�����杖i(�u;�?���E0S��EW��v9��N�ϸ 33 | �W x}L��請��X,�u~?��l�b��Q3\g/�GE� 35 | ���,?�����!�`��� �3?lmm�b1+�5�[;�s��f�AI�.ͣݚ�Hm�n�j�Uo�l�Ȯo��Ӄkw[N��^�8:;�����}�-�W{����q��v��@Dj�"r�����/��Ϸvk��_z�^��@����&��K���@D������2ͣ����Ձ��7\S��5�ě7ve{�oצ���^���uk��{&�mû���G�v��[����>O����"������޻����>ވ�b�ݚ����{W �?�D��e�i�Tn�v⍩��/�=����Z<���n�� 9��j��w^��Őyy �������a�s�ɚ�6���9��n��>��۲y�=�����ylf�굋am>��mo�{�����r����S�;+X4�p��V��eG����"�Z͜�Ҳ���W'h���?�3{F��}] k/�ߔv�=��Y��馵>h�� +�VeΜz�#O��z����� 9c�5������ķ}���?L3�Gu2#ߧ����<>�Q%���Y^9��:���?Ӓ�X,6�����Γ�]�Ĺ��XͷP�x#v��VG̜� X>}%H 36 | �͎��s�3� �0�:o�r:]֗9&x����\�f�`��T��)��%��x.f�����~j6G�W&����ED���MX��0�+@���f����������������?�������kƈz9�.� V@Vh���RhX��^N[E�eݪ;TK���jiq�Ġ�]�*_h ��QP�U'~uډk-. 37 | ��kq���*"��aH�0�bb�=���v�c�a��շe]-��צ�5�����4 38 | ���0 ���]���Z�/J�T�k7�n!�%�a�R'gj�U������IQ�t� ��[J�B4�� ���7�o�!�7�0��|��:+""�a�K�ם���w��8�u����>�:����^�l�)�ځ%ߓp�Z��Kf�*Y\�J�*F_D���He_�:� i\w��UK���C�ɒg 39 | ����#\�0C������!�ځl0����u��Wu=���5�3C[Wy��e�KC��K�\�3=:Uד��O��D����X}�af�����*���l�[��� 40 | '�:œ|5�(�r�)גu�pW��K���xb�[�'���(��m2�E�� �����f]��s��FAy����0��B~TX�%7��-.����32��_���PH���^W�'�:�\u��T)�� 07��_������l���eT���d���zx.�? ������?��*9�(;�Z�(��2�5��|xnw�3����6�m&�ǎu��,�77CNLC�%�����՚S�] ��O���_�E�L��B�ě�猈H�_��k�S����v��Q���-"������ͯ��G�/3"�yy �Z�c�L>��єf�[;�vx�*f��t�y� ��<�9��x~��Hf�t�]�S�c�[�l� �{瘈fzq�8����W��#~3�.z9ƌ:m�0�"��0�B-�<^���g��p����N|y߽}B��@Dj�������xBD��%�3ݵo7E�{�����H,�Y�̙=]���’3>�mg�*��X�|�y�����7b����꩝n��oʜY�Ec�Xl��V^x�<�T���t���Zv�vX=ݴZD��3���uZ����`y�V� x�����S��a�\���V�)�2��=c���y��;����wy�F�>~y�GB=��sۮe?�Am7V[�(�:�l�Qu�<��6� �d`��5����E0'0���>O�8�'�?g����?g��͠(o��D���爸WxZ�7�����ݞL�6�E�q�G�g�1f����sx�i�w�Vg�Y�+B�4|f��[v}��E�O�R�pVs�w�������Ү�����j��6�(�Ǵ��qp��2��ì�B2�qST�F%��x�x�� 6v�+�9�@5��9L��d˚?�E ��L�8S}��-��N����������.[������Qד��Oz��^��s��8?���J�6�!���X�#Џ8:�8>�p� � 3b�9.�s b��3_7���9��k�t�����Ńy��2K ��1���P'�s��i�c��z�cvU�Db6�K����9��l��I�q�cy���.�tiDb�A��?���o~���z����^,��T���r��B�(^W���:�Qo�I~���S_9�a��N��t���(� 42 | H,�&�C�7�XJ”��Y��/����*���X2͛R� -�J������O1��£�͒u]'��~� K��),�N���-`�����Eɨ 0 �ֳ�qd��鱓�����VK�6a}��E�|�x}7ܔ���TG���?^��r�S�w��ݯ��?����W����������_����\e�yg�R�[J�J]��ԕ*u�2v��J%�Z�>��+�ϧR��{K�^J����9;XDDӴ�����S������~����矿������ǿ��]��[J9]����9�,_7{�� w����ØMM�n}�:�i�2�L�>�=�I׎��w��9��rK4 43 | ʻF�m��((o˯���E��5-lf��t����u���J㺚?1�2f���ce��N^��钕q��`��F�>d܊'��kgj��l�{�2M�G�o��E�_vo�dvl\sU�� uZ�k:ٝ|��!Ҹ��^ 3��Z�93H�Ϯ����nr�u�x�\�m����H{p4�m31�^N� ��Y���:�AQRH?��>�?g6=�X��;��<���#�N㺚�ێ��i�v=��X}Ȅ�&U� ��G�2*͕܍|�sZ��5_}[���Bkf>i�$�N��0��jn_.���B��Ě�߻�Ga�E_�u�x"U�nx��A hz5��\[��K�\��K ��I�ײ�r���o����Z<�Ws���Z�8��^MM�n Xݪ�g��,��~ב���ŵ�����h�I���L�j�$i�Ɯ�S-�䕜RM��"��-�jCu{/u)����'�% ��XH�����,hiOj��W��9C3�� ���;4��g����"[1f��i����?��y�|�ۍ�Ӗ«��6j˩��o�z����2����B�$���E��b��:�e,5��,���ɣ�!l��y��bGM~#Xv��M�%����_�d����*�ʇ95g��W���d�j��f����%�V�K�$[��|�f��\��3�̫Yɒ'�X)�Dd�)ܬ�_���{���� Cx|kn�:�o���cM����d�u=)՜Rh�d+^�@� cu���;��|C)�Ed)țG�ݚl�~��z�/� ����q[�z��Ձ��7���N��C~�&"��A�����5~ZX����?Ǽ��\O��� 44 | �c 9-���?~UQ��-�>�D�����k�g��斗ɼ<����hy�oۉ7�^�w����x��VW_}�_��BY�V�n)eƞS ��� �X�z�5l}��W�0D��4��� T�?���QYV����Ku],+���ޅG 45 | ˑ�ce+݁�+�8<���:V �'�9����+*uG�C�'|�j�̜o��W��1���?ۦak���X�� 3��ޕ�v�7b�""��/�ξ��n��j�/g�格Ƿ�s���[�m;�5K���>*�%�Sa a��:l��;�r��w8�����Û< 46 | ����tR��| 47 | 7���إ�� �\D�E#B���� 48 | 6�9�9�x���+BXx.����bq�����ޗ ��p^r�'�L�j��T@� 49 | ��{%@_f/���R_�ߗ�!�F_�?��K_��`���kVZ�T����a�j�k�$�BܶO�L. @� 50 | +�ʌ�<�WX���*]���+DJe�D��핤��?���������l]~�E<͑�W�q��$[�[�H^�H�������{�י7h�����L�Q�JK���+� 51 | ��� 52 | VX? ���?�����9}��?����}������o����t�\�\c k�m#�.�f�B!m��4K���" �+D ���v�c�a��շe]D-�&����!"��$. �������)�(�oO̒ݽ�}B��0w|�sR�צsN<�r�ځlB��޶*"�T*a}��#ժR��wETN7�B��ׁ��㟣���˽n0/�T�k8T0�������9��iF�~^:�z�e���9��U�xbY��z�d+�R'��� B�b`v ��Ҋ��9��h���ի����LX����&����+� 53 | 2�r�U���� �a���į�'�N�!C�9v���wi�G� 54 | 0F0��JV����g6�s �[ �@_��s��v�s����y𭕋X��K�n��M@_�k���m���+@P} 蟓�ɷ.?M��?]��;8�� 55 | `�?'[���9��z��p������ρ���d�����'�xs3���Qi��uU��E�!���<�?�QPrU�c�n�� 56 | 0 ��`���+� 57 | ���� '�^u�T�� 拏���9įA⟣��s��T����ZZ\Q҅��r��c7d}�ئ<���������X�i�ԓ�I���E)�*u ��u�e�#j��0��ڻ��c�c�|�mY�o`�0? sg�?gL`���h9E�F%[ ���fG/��d�����6�H=�q�WX����?'[1 �ع��C/��{�a��Y5��B����?G/ʺH�btK��ݤg�����A���5A�5���r����&碨z��O�՜����m�w�o���k��f���0��_X�ui����*���i�^���������M0_�c��ѱH��7������(�k����s 58 | �+DMC  �1�_a���/��y� 59 | �+����}@_}@_�W@_�W��W�}�}@_}@_���?mx'�<��IEND�B`� -------------------------------------------------------------------------------- /Code review.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "Introduction\n", 8 | "\n", 9 | "The dataset we will be working along with is Seattle Public Library Inventory dataset. We have downloaded the dataset from the source and perfomed cleaning operation before uploading into the data. Post that we use pymysql to connect to the database and perform operation like recommending books to user based on the genre and find the book in the inventory based on the authors name.\n" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": null, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "#Importing the essential libraries\n", 19 | "\n", 20 | "import pandas as pd (#pandas dataframe)\n", 21 | "import pymysql (#python package to connect to aws instance)\n", 22 | "import re (#regular expression to filter our columns)\n", 23 | "import matplotlib.pyplot as plt,%matplotlib inline (#python visualization libraries)\n" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": null, 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "#Using pandas to read the csv file of library inventory\n", 33 | "df=pd.read_csv('Library_Collection_Inventory.csv')\n", 34 | "\n", 35 | "c1=pd.read_csv('../input/seattle-library-checkout-records/Checkouts_By_Title_Data_Lens_2005.csv')\n", 36 | "c2=pd.read_csv('../input/seattle-library-checkout-records/Checkouts_By_Title_Data_Lens_2006.csv')\n", 37 | "c3=pd.read_csv('../input/seattle-library-checkout-records/Checkouts_By_Title_Data_Lens_2007.csv')\n", 38 | "\n", 39 | "#cleaning the checkout column to parse it as dates\n", 40 | "\n", 41 | "c1.CheckoutDateTime.replace(to_replace=r'PM', value=' ', regex=True,inplace=True)\n", 42 | "ab=c1['CheckoutDateTime'].str.split(\" \",n=1,expand=True)\n", 43 | "c1['Date']=ab[0]\n", 44 | "c1['Date']=pd.to_datetime(c1['Date'])\n", 45 | "\n", 46 | "c2.CheckoutDateTime.replace(to_replace=r'PM', value=' ', regex=True,inplace=True)\n", 47 | "ab=c2['CheckoutDateTime'].str.split(\" \",n=1,expand=True)\n", 48 | "c2['Date']=ab[0]\n", 49 | "c2['Date']=pd.to_datetime(c2['Date'])\n", 50 | "c2.drop('CheckoutDateTime',axis=1,inplace=True)\n", 51 | "\n", 52 | "c3.CheckoutDateTime.replace(to_replace=r'PM', value=' ', regex=True,inplace=True)\n", 53 | "ab=c3['CheckoutDateTime'].str.split(\" \",n=1,expand=True)\n", 54 | "c3['Date']=ab[0]\n", 55 | "c3['Date']=pd.to_datetime(c3['Date'])\n", 56 | "c3.drop('CheckoutDateTime',axis=1,inplace=True)" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "metadata": {}, 63 | "outputs": [], 64 | "source": [ 65 | "#Merging all the files\n", 66 | "f=pd.concat([c1,c2])\n", 67 | "f=pd.concat([f,c3])" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": null, 73 | "metadata": {}, 74 | "outputs": [], 75 | "source": [ 76 | "#Performing join operations on f and library inventory to get if book was in print or media format\n", 77 | "\n", 78 | "new=pd.DataFrame(df[['Title','Author','Subjects','ItemType']])\n", 79 | "temp=pd.DataFrame(f['BibNumber'])\n", 80 | "dd=pd.read_csv('../input/seattle-library-checkout-records/Integrated_Library_System__ILS__Data_Dictionary.csv')\n", 81 | "\n", 82 | "new=pd.merge(left=f,right=pd.DataFrame(dd[['Code','Format Group']]),left_on='ItemType',right_on='Code')" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": null, 88 | "metadata": {}, 89 | "outputs": [], 90 | "source": [ 91 | "#Performing join operations on new and library inventory to get author, tile, subjects and Itemtype details\n", 92 | "\n", 93 | "a = df.drop_duplicates(subset='BibNum', keep='last').reset_index()\n", 94 | "\n", 95 | "new=pd.merge(left=new,right=pd.DataFrame(a[['BibNum','Title','Author','Subjects']]),left_on='BibNumber',right_on='BibNum')\n" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": null, 101 | "metadata": {}, 102 | "outputs": [], 103 | "source": [ 104 | "#Removing Unwanted columns\n", 105 | "\n", 106 | "new.drop(['BibNum','Collection','CallNumber','ItemBarcode'],axis=1,inplace=True)\n", 107 | "new.drop(['Code'],axis=1,inplace=True)" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": null, 113 | "metadata": {}, 114 | "outputs": [], 115 | "source": [ 116 | "#Using date column to find new paramters like year month and dayofweek \n", 117 | "\n", 118 | "new['Year']=new['Date'].dt.year\n", 119 | "new['Month']=new['Date'].dt.month\n", 120 | "new['Week']=new['Date'].dt.weekofyear\n", 121 | "new['DayofWeek']=new['Date'].dt.dayofweek\n", 122 | "\n", 123 | "#Removing date column as we have segreated its information into new columns\n", 124 | "\n", 125 | "new.drop('Date',axis=1,inplace=True)" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": {}, 132 | "outputs": [], 133 | "source": [ 134 | "#Now we have to divide our dataset into different categories, but the subject column does not give us proper value\n", 135 | "#We will separate this by identifying top occuring genres using regular expression and use them\n", 136 | "#below is the code that plot the top occuring genres in subjects columns\n", 137 | "\n", 138 | "\n", 139 | "plt.figure(figsize=(20,8)) #plotting\n", 140 | "\n", 141 | "#plot chart\n", 142 | "ax1 = plt.subplot(121, aspect='equal')\n", 143 | "\n", 144 | "#save top 10 occuring genres in 'a'\n", 145 | "a=pd.DataFrame(pd.Series(' '.join(map(str,df['Subjects'])).lower().split()).value_counts()[:10],columns=['total'])\n", 146 | "\n", 147 | "#plot 'a' as pie chart to show the % distribution\n", 148 | "\n", 149 | "a.plot(kind='pie', y = 'total', ax=ax1, autopct='%1.1f%%', \n", 150 | "startangle=90, shadow=False, labels=a.index, legend = False, fontsize=14)" 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": null, 156 | "metadata": {}, 157 | "outputs": [], 158 | "source": [ 159 | "#We will use the 4 most occuring genres and\n", 160 | "#Add them in the Subject columns\n", 161 | "\n", 162 | "#Adding the columns and intializing them as 0\n", 163 | "cols=['fiction','mystery','drama','literature']\n", 164 | "for col in cols: a[col] = 0" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": null, 170 | "metadata": {}, 171 | "outputs": [], 172 | "source": [ 173 | "#We will use below script to find if the new genres columns created exist in each row and if they do\n", 174 | "#make its value 1\n", 175 | "\n", 176 | "#Since we have 5lakh rows we will perform operation in parts\n", 177 | "#Using iterrows to get each row in pandas dataframe\n", 178 | "\n", 179 | "\n", 180 | "for index,row in pd.DataFrame(a[(a.index>50000) & (a.index<=100000)].Subjects).iterrows():\n", 181 | " \n", 182 | " for col in cols:\n", 183 | " if re.search(col,str(row['Subjects']).lower()):\n", 184 | " \n", 185 | " a.ix[index, col] = 1\n", 186 | "\n", 187 | "\n", 188 | "for index,row in pd.DataFrame(a[(a.index>100000) & (a.index<=200000)].Subjects).iterrows():\n", 189 | " \n", 190 | " for col in cols:\n", 191 | " if re.search(col,str(row['Subjects']).lower()):\n", 192 | " \n", 193 | " a.ix[index, col] = 1\n", 194 | "\n", 195 | "\n", 196 | "for index,row in pd.DataFrame(a[(a.index>200000) & (a.index<=300000)].Subjects).iterrows():\n", 197 | " \n", 198 | " for col in cols:\n", 199 | " if re.search(col,str(row['Subjects']).lower()):\n", 200 | " \n", 201 | " a.ix[index, col] = 1\n", 202 | " \n", 203 | "\n", 204 | "for index,row in pd.DataFrame(a[(a.index>300000) & (a.index<=400000)].Subjects).iterrows():\n", 205 | " \n", 206 | " for col in cols:\n", 207 | " if re.search(col,str(row['Subjects']).lower()):\n", 208 | " \n", 209 | " a.ix[index, col] = 1\n", 210 | " \n", 211 | "\n", 212 | "for index,row in pd.DataFrame(a[(a.index>400000) & (a.index<=500000)].Subjects).iterrows():\n", 213 | " \n", 214 | " for col in cols:\n", 215 | " if re.search(col,str(row['Subjects']).lower()):\n", 216 | " \n", 217 | " a.ix[index, col] = 1\n", 218 | " \n", 219 | "\n", 220 | "for index,row in pd.DataFrame(a[(a.index>500000) & (a.index<=584391)].Subjects).iterrows():\n", 221 | " \n", 222 | " for col in cols:\n", 223 | " if re.search(col,str(row['Subjects']).lower()):\n", 224 | " \n", 225 | " a.ix[index, col] = 1 " 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": null, 231 | "metadata": {}, 232 | "outputs": [], 233 | "source": [ 234 | "#Now we will map the new columns in our checkout dataset\n", 235 | "\n", 236 | "new=pd.merge(left=new,right=pd.DataFrame(a[['BibNum','fiction','mystery','drama','literature']]),\n", 237 | " left_on='BibNumber',right_on='BibNum')\n", 238 | "\n", 239 | "new.to_csv('Checkout.csv')\n", 240 | "a.to_csv('Inventory.csv')" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": null, 246 | "metadata": {}, 247 | "outputs": [], 248 | "source": [ 249 | "#We will no upload our clean data into the databse\n", 250 | "\n", 251 | "#BEFORE that below is the conf file used to setup nodes and establish connections between them\n", 252 | "\n", 253 | "[mysqld]\n", 254 | "datadir=/var/lib/mysql\n", 255 | "socket=/var/lib/mysql/mysql.sock\n", 256 | "bind-address=0.0.0.0\n", 257 | "user=mysql\n", 258 | "\n", 259 | "default_storage_engine=InnoDB\n", 260 | "innodb_autoinc_lock_mode=2\n", 261 | "innodb_flush_log_at_trx_commit=0\n", 262 | "innodb_buffer_pool_size=128M\n", 263 | "\n", 264 | "binlog_format=ROW\n", 265 | "log-error=/var/log/mysqld.log\n", 266 | "\n", 267 | "[galera]\n", 268 | "wsrep_on=ON\n", 269 | "wsrep_provider=/usr/lib/galera/libgalera_smm.so\n", 270 | "\n", 271 | "wsrep_node_name='galera3'\n", 272 | "\n", 273 | "wsrep_node_address=\"172.31.41.172\"\n", 274 | "wsrep_cluster_name='galera-training'\n", 275 | "wsrep_cluster_address=gcomm://172.31.32.84,172.31.42.23,172.31.41.172\n", 276 | "\n", 277 | "wsrep_provider_options=\"gcache.size=300M; gcache.page_size=300M\"\n", 278 | "wsrep_slave_threads=4\n", 279 | "wsrep_sst_method=rsync\n", 280 | "\n", 281 | "\n", 282 | "\n", 283 | "#We have already trasnfered our cleaned csv file to aws instance using WINSCP\n", 284 | "\n", 285 | "#Next we will create a database and a table in SQL to import this data\n", 286 | "\n", 287 | "create database project;\n", 288 | "\n", 289 | "create table checkout(\n", 290 | "BibNumber int(20), \n", 291 | "ItemType varchar(10),\n", 292 | "Format Group varchar(10),\n", 293 | "Title varchar(150),\n", 294 | "Author varchar(150), \n", 295 | "Subjects varchar(150),\n", 296 | "Year int(10), \n", 297 | "Month int(10), \n", 298 | "Week int(10), \n", 299 | "DayofWeek int(5), \n", 300 | "fiction int(5), \n", 301 | "mystery int(5),\n", 302 | "drama, int(5) \n", 303 | "literature int(5)\n", 304 | "\n", 305 | ");\n", 306 | "\n", 307 | "create table inventory(\n", 308 | "BibNum int(20), \n", 309 | "Title varchar(150),\n", 310 | "Author varchar(150),\n", 311 | "Publisher varchar(150),\n", 312 | "Subjects varchar(150),\n", 313 | "ItemType varchar(10),\n", 314 | "\n", 315 | ");\n", 316 | "\n", 317 | "#Now we will load the csv file into this new table created in our database\n", 318 | "\n", 319 | "load data local infile '/home/ubuntu/Checkout.csv' into table checkout fields terminated by ',' Enclosed by '\"' Lines terminated by '\\n' Ignore 1 rows;\n", 320 | "\n", 321 | "load data local infile '/home/ubuntu/Inventory.csv' \n", 322 | "into table inventory fields terminated by ',' Enclosed by '\"' Lines terminated by '\\n' Ignore 1 rows;" 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": null, 328 | "metadata": {}, 329 | "outputs": [], 330 | "source": [ 331 | "#Now we will establish a connection with database and write an api which will perform two functions\n", 332 | "#1 it will recommend book to users based on their genre preference\n", 333 | "#2 it will help them find book by author even if they do not specify full name\n", 334 | "\n", 335 | "#Establishing connection with the database\n", 336 | "host=\"18.223.3.204\" #host ip adress\n", 337 | "port=3306 #port on which we will establish a connection\n", 338 | "dbname=\"project\" #name of database\n", 339 | "user=\"root\" #username for accessing db\n", 340 | "password=\"host\" #password for accessing db\n", 341 | "\n", 342 | "conn = pymysql.connect(host, user=user,port=port,\n", 343 | " passwd=password, db=dbname) #create a connection between python api and aws instance" 344 | ] 345 | }, 346 | { 347 | "cell_type": "code", 348 | "execution_count": null, 349 | "metadata": {}, 350 | "outputs": [], 351 | "source": [ 352 | "#Importing the dataset\n", 353 | "new=pd.DataFrame(pd.read_sql('select * from checkout', con=conn))\n", 354 | "a=pd.DataFrame(pd.read_sql('select * from inventory', con=conn))" 355 | ] 356 | }, 357 | { 358 | "cell_type": "code", 359 | "execution_count": null, 360 | "metadata": {}, 361 | "outputs": [], 362 | "source": [ 363 | "genre=raw_input(\"Enter the year and genre you want to have statistics for: \")\n", 364 | "\n", 365 | "def statistics(year, genre):\n", 366 | "\n", 367 | "#We will find the statistics of which book was most checked out in each genre\n", 368 | "#Performing groupby operation to remove duplicate values\n", 369 | " s=new[(new['Year']==year)&& (new[genre]==genre)].groupby('BibNumber').sum().sort_values('count',ascending=False)\n", 370 | "#removing duplicate value\n", 371 | " s.drop_duplicates(inplace=True)\n", 372 | "#merging to get information of Author and book tile\n", 373 | " s=pd.merge(left=s,right=pd.DataFrame(new[['BibNumber','Author','Title']]),left_on='BibNumber',right_on='BibNumber')\n", 374 | "#display entire row\n", 375 | " pd.set_option('display.max_colwidth', -1)\n", 376 | "#Ourput the result\n", 377 | " Print('The most checked out book in fiction was: ')\n", 378 | " return pd.DataFrame(s[['Title','Author']].head(1))\n", 379 | "\n", 380 | "#We will find the statistics like which book was least checked out in each genre\n", 381 | "#Performing groupby operation to remove duplicate values\n", 382 | " s=new[(new['Year']==year)&& (new[genre]==genre)].groupby('BibNumber').sum().sort_values('count',ascending=True)\n", 383 | "#removing duplicate value\n", 384 | " s.drop_duplicates(inplace=True)\n", 385 | "#merging to get information of Author and book tile\n", 386 | " s=pd.merge(left=s,right=pd.DataFrame(new[['BibNumber','Author','Title']]),left_on='BibNumber',right_on='BibNumber')\n", 387 | "#display entire row\n", 388 | " pd.set_option('display.max_colwidth', -1)\n", 389 | "#Ourput the result\n", 390 | " Print('The least checked out book in fiction was: ')\n", 391 | " return pd.DataFrame(s[['Title','Author']].head(1))\n" 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": null, 397 | "metadata": {}, 398 | "outputs": [], 399 | "source": [ 400 | "#Recommending books to users based on checkout records\n", 401 | "\n", 402 | "#Taking input for genre\n", 403 | "\n", 404 | "genre=raw_input(\"Enter the genre you want to have suggestions for: \")\n", 405 | "\n", 406 | "def suggest(genre):\n", 407 | "\n", 408 | "#We will find the book which were checkedout most in users mentioned genre and recommend top 10 books to user\n", 409 | " s=new[new[genre]==1].groupby('BibNumber').sum().sort_values('count',ascending=False)\n", 410 | " s=pd.merge(left=s,right=pd.DataFrame(new[['BibNumber','Author','Title']]),left_on='BibNumber',right_on='BibNumber')\n", 411 | " s.drop_duplicates(inplace=True)\n", 412 | " pd.set_option('display.max_colwidth', -1)\n", 413 | " return pd.DataFrame(s[['Title','Author']].head(10))" 414 | ] 415 | }, 416 | { 417 | "cell_type": "code", 418 | "execution_count": null, 419 | "metadata": {}, 420 | "outputs": [], 421 | "source": [ 422 | "#Finding books for user based on author name even if partial\n", 423 | "\n", 424 | "#Taking input for author\n", 425 | "\n", 426 | "author=raw_input(\"Enter the author you want to search for: \")\n", 427 | "\n", 428 | "#Function to find books based on author\n", 429 | "def find(author):\n", 430 | " #Using iterrows to traverese each row in datafram\n", 431 | " for index,row in a.iterrows():\n", 432 | " #Condition to check if author name is matching with user keywords\n", 433 | " if re.search(str(author),str(row['Author'])):\n", 434 | " pd.set_option('display.max_colwidth', -1) #display entire cell\n", 435 | " print(pd.DataFrame(row[['Title','Author','Publisher']])) #Print title,author and publish for matching authors" 436 | ] 437 | } 438 | ], 439 | "metadata": { 440 | "kernelspec": { 441 | "display_name": "Python 3", 442 | "language": "python", 443 | "name": "python3" 444 | }, 445 | "language_info": { 446 | "codemirror_mode": { 447 | "name": "ipython", 448 | "version": 3 449 | }, 450 | "file_extension": ".py", 451 | "mimetype": "text/x-python", 452 | "name": "python", 453 | "nbconvert_exporter": "python", 454 | "pygments_lexer": "ipython3", 455 | "version": "3.7.1" 456 | } 457 | }, 458 | "nbformat": 4, 459 | "nbformat_minor": 2 460 | } 461 | -------------------------------------------------------------------------------- /Exploring 67 years of LEGO/notebook.ipynb: -------------------------------------------------------------------------------- 1 | {"nbformat":4,"nbformat_minor":2,"cells":[{"cell_type":"markdown","metadata":{"editable":false,"tags":["context"],"dc":{"key":"1d0b086e6c"},"deletable":false,"run_control":{"frozen":true}},"source":"## 1. Introduction\n

Everyone loves Lego (unless you ever stepped on one). Did you know by the way that \"Lego\" was derived from the Danish phrase leg godt, which means \"play well\"? Unless you speak Danish, probably not.

\n

In this project, we will analyze a fascinating dataset on every single lego block that has ever been built!

\n

\"lego\"

"},{"execution_count":170,"cell_type":"code","metadata":{"collapsed":true,"tags":["sample_code"],"dc":{"key":"1d0b086e6c"},"trusted":true},"source":"# Nothing to do here","outputs":[]},{"cell_type":"markdown","metadata":{"editable":false,"tags":["context"],"dc":{"key":"044b2cef41"},"deletable":false,"run_control":{"frozen":true}},"source":"## 2. Reading Data\n

A comprehensive database of lego blocks is provided by Rebrickable. The data is available as csv files and the schema is shown below.

\n

\"schema\"

\n

Let us start by reading in the colors data to get a sense of the diversity of lego sets!

"},{"execution_count":172,"cell_type":"code","metadata":{"tags":["sample_code"],"dc":{"key":"044b2cef41"},"trusted":true},"source":"# Import modules\nimport pandas as pd\n\n# Read colors data\ncolors = pd.read_csv('datasets/colors.csv')\n\n# Print the first few rows\ncolors.head()","outputs":[{"output_type":"execute_result","execution_count":172,"metadata":{},"data":{"text/plain":" id name rgb is_trans\n0 -1 Unknown 0033B2 f\n1 0 Black 05131D f\n2 1 Blue 0055BF f\n3 2 Green 237841 f\n4 3 Dark Turquoise 008F9B f","text/html":"
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idnamergbis_trans
0-1Unknown0033B2f
10Black05131Df
21Blue0055BFf
32Green237841f
43Dark Turquoise008F9Bf
\n
"}}]},{"cell_type":"markdown","metadata":{"editable":false,"tags":["context"],"dc":{"key":"15c1e2ce38"},"deletable":false,"run_control":{"frozen":true}},"source":"## 3. Exploring Colors\n

Now that we have read the colors data, we can start exploring it! Let us start by understanding the number of colors available.

"},{"execution_count":174,"cell_type":"code","metadata":{"tags":["sample_code"],"dc":{"key":"15c1e2ce38"},"trusted":true},"source":"# How many distinct colors are available?\n# -- YOUR CODE FOR TASK 3 --\n\nnum_colors=colors.name.count()","outputs":[]},{"cell_type":"markdown","metadata":{"editable":false,"tags":["context"],"dc":{"key":"a5723ae5c2"},"deletable":false,"run_control":{"frozen":true}},"source":"## 4. Transparent Colors in Lego Sets\n

The colors data has a column named is_trans that indicates whether a color is transparent or not. It would be interesting to explore the distribution of transparent vs. non-transparent colors.

"},{"execution_count":176,"cell_type":"code","metadata":{"tags":["sample_code"],"dc":{"key":"a5723ae5c2"},"trusted":true},"source":"# colors_summary: Distribution of colors based on transparency\n# -- YOUR CODE FOR TASK 4 --\n\ncolors_summary= colors.groupby('is_trans').count()\n\ncolors_summary","outputs":[{"output_type":"execute_result","execution_count":176,"metadata":{},"data":{"text/plain":" id name rgb\nis_trans \nf 107 107 107\nt 28 28 28","text/html":"
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idnamergb
is_trans
f107107107
t282828
\n
"}}]},{"cell_type":"markdown","metadata":{"editable":false,"tags":["context"],"dc":{"key":"c9d0e58653"},"deletable":false,"run_control":{"frozen":true}},"source":"## 5. Explore Lego Sets\n

Another interesting dataset available in this database is the sets data. It contains a comprehensive list of sets over the years and the number of parts that each of these sets contained.

\n

\"sets_data\"

\n

Let us use this data to explore how the average number of parts in Lego sets has varied over the years.

"},{"execution_count":178,"cell_type":"code","metadata":{"tags":["sample_code"],"dc":{"key":"c9d0e58653"},"trusted":true},"source":"%matplotlib inline\n# Read sets data as `sets`\nsets=pd.read_csv('datasets/sets.csv')\n\n\n# Create a summary of average number of parts by year: `parts_by_year`\nparts_by_year= sets.groupby('year').num_parts.mean()\n\n\n\n# Plot trends in average number of parts by year\n\nparts_by_year.plot(kind='line')","outputs":[{"output_type":"execute_result","execution_count":178,"metadata":{},"data":{"text/plain":""}},{"output_type":"display_data","metadata":{},"data":{"text/plain":"","image/png":"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\n"}}]},{"cell_type":"markdown","metadata":{"editable":false,"tags":["context"],"dc":{"key":"266a3f390c"},"deletable":false,"run_control":{"frozen":true}},"source":"## 6. Lego Themes Over Years\n

Lego blocks ship under multiple themes. Let us try to get a sense of how the number of themes shipped has varied over the years.

"},{"execution_count":180,"cell_type":"code","metadata":{"tags":["sample_code"],"dc":{"key":"266a3f390c"},"trusted":true},"source":"# themes_by_year: Number of themes shipped by year\n# -- YOUR CODE HERE --\n\nthemes_by_year = sets[['year','theme_id']].groupby('year', as_index = False).count()\nthemes_by_year.head()","outputs":[{"output_type":"execute_result","execution_count":180,"metadata":{},"data":{"text/plain":" year theme_id\n0 1950 7\n1 1953 4\n2 1954 14\n3 1955 28\n4 1956 12","text/html":"
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
yeartheme_id
019507
119534
2195414
3195528
4195612
\n
"}}]},{"cell_type":"markdown","metadata":{"editable":false,"tags":["context"],"dc":{"key":"a293e5076e"},"deletable":false,"run_control":{"frozen":true}},"source":"## 7. Wrapping It All Up!\n

Lego blocks offer an unlimited amount of fun across ages. We explored some interesting trends around colors, parts, and themes.

"},{"execution_count":182,"cell_type":"code","metadata":{"collapsed":true,"tags":["sample_code"],"dc":{"key":"a293e5076e"},"trusted":true},"source":"# Nothing to do here","outputs":[]}],"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.5.2","nbconvert_exporter":"python","codemirror_mode":{"name":"ipython","version":3},"mimetype":"text/x-python","pygments_lexer":"ipython3","file_extension":".py"}}} -------------------------------------------------------------------------------- /Exploring the evolution of Linux/notebook.ipynb: -------------------------------------------------------------------------------- 1 | {"nbformat":4,"metadata":{"language_info":{"file_extension":".py","mimetype":"text/x-python","codemirror_mode":{"version":3,"name":"ipython"},"nbconvert_exporter":"python","version":"3.5.2","name":"python","pygments_lexer":"ipython3"},"kernelspec":{"display_name":"Python 3","name":"python3","language":"python"}},"cells":[{"source":"## 1. Introduction\n

Version control repositories like CVS, Subversion or Git can be a real gold mine for software developers. They contain every change to the source code including the date (the \"when\"), the responsible developer (the \"who\"), as well as little message that describes the intention (the \"what\") of a change.

\n

\n\"Tux\n

\n

In this notebook, we will analyze the evolution of a very famous open-source project – the Linux kernel. The Linux kernel is the heart of some Linux distributions like Debian, Ubuntu or CentOS.

\n

We get some first insights into the work of the development efforts by

\n
    \n
  • identifying the TOP 10 contributors and
  • \n
  • visualizing the commits over the years.
  • \n
\n

Linus Torvalds, the (spoiler alert!) main contributor to the Linux kernel (and also the creator of Git), created a mirror of the Linux repository on GitHub. It contains the complete history of kernel development for the last 13 years.

\n

For our analysis, we will use a Git log file with the following content:

","metadata":{"dc":{"key":"4"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[{"text":"<_io.TextIOWrapper name='datasets/git_log_excerpt.csv' mode='r' encoding='UTF-8'>\n","name":"stdout","output_type":"stream"}],"source":"# Printing the content of git_log_excerpt.csv\nprint(open('datasets/git_log_excerpt.csv'))","execution_count":136,"metadata":{"trusted":true,"dc":{"key":"4"},"tags":["sample_code"]},"cell_type":"code"},{"source":"## 2. Reading in the dataset\n

The dataset was created by using the command git log --encoding=latin-1 --pretty=\"%at#%aN\". The latin-1 encoded text output was saved in a header-less csv file. In this file, each row is a commit entry with the following information:

\n
    \n
  • timestamp: the time of the commit as a UNIX timestamp in seconds since 1970-01-01 00:00:00 (Git log placeholder \"%at\")
  • \n
  • author: the name of the author that performed the commit (Git log placeholder \"%aN\")
  • \n
\n

The columns are separated by the number sign #. The complete dataset is in the datasets/ directory. It is a gz-compressed csv file named git_log.gz.

","metadata":{"dc":{"key":"11"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[{"text":" timestamp author\n0 1502826583 Linus Torvalds\n1 1501749089 Adrian Hunter\n2 1501749088 Adrian Hunter\n3 1501882480 Kees Cook\n4 1497271395 Rob Clark\n","name":"stdout","output_type":"stream"}],"source":"# Loading in the pandas module\nimport pandas as pd\n\n# Reading in the log file\ngit_log = pd.read_csv(\n 'datasets/git_log.gz',\n sep='#',\n encoding='latin-1',\n header=None,\n names=['timestamp', 'author']\n)\n\n# Printing out the first 5 rows\nprint(git_log.head(5))\n\n","execution_count":138,"metadata":{"trusted":true,"dc":{"key":"11"},"tags":["sample_code"]},"cell_type":"code"},{"source":"## 3. Getting an overview\n

The dataset contains the information about every single code contribution (a \"commit\") to the Linux kernel over the last 13 years. We'll first take a look at the number of authors and their commits to the repository.

","metadata":{"dc":{"key":"18"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[{"text":"17385 authors committed 699071 code changes.\n","name":"stdout","output_type":"stream"}],"source":"# calculating number of commits\nnumber_of_commits = git_log['timestamp'].count()\n\n# calculating number of authors\nnumber_of_authors = git_log['author'].value_counts(dropna=True).count()\n\n# printing out the results\nprint(\"%s authors committed %s code changes.\" % (number_of_authors, number_of_commits))","execution_count":140,"metadata":{"trusted":true,"dc":{"key":"18"},"tags":["sample_code"]},"cell_type":"code"},{"source":"## 4. Finding the TOP 10 contributors\n

There are some very important people that changed the Linux kernel very often. To see if there are any bottlenecks, we take a look at the TOP 10 authors with the most commits.

","metadata":{"dc":{"key":"25"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[{"data":{"text/plain":"Linus Torvalds 23361\nDavid S. Miller 9106\nMark Brown 6802\nTakashi Iwai 6209\nAl Viro 6006\nH Hartley Sweeten 5938\nIngo Molnar 5344\nMauro Carvalho Chehab 5204\nArnd Bergmann 4890\nGreg Kroah-Hartman 4580\nName: author, dtype: int64"},"execution_count":142,"metadata":{},"output_type":"execute_result"}],"source":"# Identifying the top 10 authors\ntop_10_authors = git_log.author.value_counts(dropna=True).head(10)\n\n# Listing contents of 'top_10_authors'\ntop_10_authors","execution_count":142,"metadata":{"trusted":true,"dc":{"key":"25"},"tags":["sample_code"]},"cell_type":"code"},{"source":"## 5. Wrangling the data\n

For our analysis, we want to visualize the contributions over time. For this, we use the information in the timestamp column to create a time series-based column.

","metadata":{"dc":{"key":"32"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[{"data":{"text/plain":"0 2017-08-15 19:49:43\n1 2017-08-03 08:31:29\n2 2017-08-03 08:31:28\n3 2017-08-04 21:34:40\n4 2017-06-12 12:43:15\n5 2017-08-03 08:31:27\n6 2017-08-03 08:31:26\n7 2017-08-07 12:37:50\n8 2017-08-01 07:11:52\n9 2017-08-15 14:34:55\n10 2017-06-18 20:41:23\n11 2017-07-07 15:17:13\n12 2017-08-10 08:12:45\n13 2017-08-10 07:17:56\n14 2017-08-10 03:24:43\n15 2017-08-09 10:30:46\n16 2017-08-08 04:20:30\n17 2017-08-04 07:31:37\n18 2017-08-08 10:42:51\n19 2017-08-08 11:50:46\n20 2017-08-08 11:58:01\n21 2017-08-08 11:48:52\n22 2017-08-08 11:48:01\n23 2017-08-07 07:32:29\n24 2017-08-04 08:56:38\n25 2017-08-03 11:58:35\n26 2017-08-03 11:58:16\n27 2017-06-14 22:46:14\n28 2017-08-02 11:27:04\n29 2017-08-02 10:37:44\n ... \n699041 2005-04-16 22:24:17\n699042 2005-04-16 22:24:17\n699043 2005-04-16 22:24:16\n699044 2005-04-16 22:24:15\n699045 2005-04-16 22:24:14\n699046 2005-04-16 22:24:13\n699047 2005-04-16 22:24:11\n699048 2005-04-16 22:24:10\n699049 2005-04-16 22:24:09\n699050 2005-04-16 22:24:09\n699051 2005-04-16 22:24:08\n699052 2005-04-16 22:24:07\n699053 2005-04-16 22:24:06\n699054 2005-04-16 22:24:05\n699055 2005-04-16 22:24:05\n699056 2005-04-16 22:24:04\n699057 2005-04-16 22:24:03\n699058 2005-04-16 22:24:02\n699059 2005-04-16 22:24:01\n699060 2005-04-16 22:24:01\n699061 2005-04-16 22:24:00\n699062 2005-04-16 22:23:59\n699063 2005-04-16 22:23:58\n699064 2005-04-16 22:23:57\n699065 2005-04-16 22:23:57\n699066 2005-04-16 22:23:56\n699067 2005-04-16 22:23:55\n699068 2005-04-16 22:23:54\n699069 2005-04-16 22:23:53\n699070 2005-04-16 22:20:36\nName: timestamp, Length: 699071, dtype: datetime64[ns]"},"execution_count":144,"metadata":{},"output_type":"execute_result"}],"source":"# converting the timestamp column\ngit_log['timestamp'] = pd.to_datetime(git_log['timestamp'], unit='s')\n\n# summarizing the converted timestamp column\ngit_log.timestamp","execution_count":144,"metadata":{"trusted":true,"dc":{"key":"32"},"tags":["sample_code"]},"cell_type":"code"},{"source":"## 6. Treating wrong timestamps\n

As we can see from the results above, some contributors had their operating system's time incorrectly set when they committed to the repository. We'll clean up the timestamp column by dropping the rows with the incorrect timestamps.

","metadata":{"dc":{"key":"39"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[{"data":{"text/plain":"count 698569\nunique 667977\ntop 2008-09-04 05:30:19\nfreq 99\nfirst 2005-04-16 22:20:36\nlast 2017-10-03 12:57:00\nName: timestamp, dtype: object"},"execution_count":146,"metadata":{},"output_type":"execute_result"}],"source":"\n# determining the first real commit timestamp\nfirst_commit_timestamp = git_log['timestamp'].iloc[-1]\n\n# determining the last sensible commit timestamp\nlast_commit_timestamp = pd.to_datetime('today')\n\n# filtering out wrong timestamps\ncorrected_log = git_log[(git_log['timestamp']>=first_commit_timestamp)&(git_log['timestamp']<=last_commit_timestamp)]\n\n# summarizing the corrected timestamp column\ncorrected_log['timestamp'].describe()","execution_count":146,"metadata":{"trusted":true,"dc":{"key":"39"},"tags":["sample_code"]},"cell_type":"code"},{"source":"## 7. Grouping commits per year\n

To find out how the development activity has increased over time, we'll group the commits by year and count them up.

","metadata":{"dc":{"key":"46"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[{"data":{"text/plain":" author\ntimestamp \n2005-01-01 16229\n2006-01-01 29255\n2007-01-01 33759\n2008-01-01 48847\n2009-01-01 52572","text/html":"
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
author
timestamp
2005-01-0116229
2006-01-0129255
2007-01-0133759
2008-01-0148847
2009-01-0152572
\n
"},"execution_count":148,"metadata":{},"output_type":"execute_result"}],"source":"# Counting the no. commits per year\ncommits_per_year = corrected_log.groupby(pd.Grouper(key='timestamp',freq='AS')).count()\n\n# Listing the first rows\ncommits_per_year.head()","execution_count":148,"metadata":{"trusted":true,"dc":{"key":"46"},"tags":["sample_code"]},"cell_type":"code"},{"source":"## 8. Visualizing the history of Linux\n

Finally, we'll make a plot out of these counts to better see how the development effort on Linux has increased over the the last few years.

","metadata":{"dc":{"key":"53"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[{"data":{"text/plain":""},"execution_count":158,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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\n","text/plain":""},"metadata":{},"output_type":"display_data"}],"source":"# Setting up plotting in Jupyter notebooks\n%matplotlib inline\n\n# plot the data\n\ncommits_per_year.plot(kind='line', title='Increase in effort on Linux', legend=True)","execution_count":158,"metadata":{"trusted":true,"dc":{"key":"53"},"tags":["sample_code"]},"cell_type":"code"},{"source":"## 9. Conclusion\n

Thanks to the solid foundation and caretaking of Linux Torvalds, many other developers are now able to contribute to the Linux kernel as well. There is no decrease of development activity at sight!

","metadata":{"dc":{"key":"60"},"run_control":{"frozen":true},"tags":["context"],"deletable":false,"editable":false},"cell_type":"markdown"},{"outputs":[],"source":"# calculating or setting the year with the most commits to Linux\nyear_with_most_commits = ... ","execution_count":152,"metadata":{"trusted":true,"collapsed":true,"dc":{"key":"60"},"tags":["sample_code"]},"cell_type":"code"}],"nbformat_minor":2} -------------------------------------------------------------------------------- /Dr. Semmelweis and the Discovery of Handwashing/datasets/ignaz_semmelweis_1860.jpeg: -------------------------------------------------------------------------------- 1 | ����JFIFHH��C 2 |  3 | 4 |    �� R������tl��ϙ$R�% ��Lz15�e��Q�U�x/�@�ph��HzҖ2 �9gȬx�Y�a┙� )%)� by+6Ei�W�Ո��%��%-K���B��d�#gV�Kq��ya�ְl3����V&TT�b��dV�y{Jg94�p�͘<�UX@�J9jl͌i)�5w3�ì�`P�*hj:m�JF�<�Z�,5~����lڰ ��1��]s�dd�]�悃���6��5�(~G�L.8�i�bI��ے���m�f�]5M3��d��b>M�j�`a[��x!OGC���ޛs)Qr��Z���tM�c�t��z�����-��&�� w�m=ow�Q�ki���8�{;O��L�R�|��[���t��M��f��u�z�F��=`��*9~۱t��,��V���{^���I�6�a����dl��V�J�峽�����V�o�E�2v˨��h���}��/⮲A�O�w���e���L 5 | �Zt��k�x6x�z����Lw 6 | ��jj���ې����b@iZ� 7 | z�]���{�g饫벷��W��L�R�{��U��Ց�9�}P� Z]-Ϙt=���@���U%R~�e� �̘�\;6}�L�Y��Ƥ�ιƹ_��tnG��_�0��֭�;q�NKq�4�H95Mɡ�����#ǟj�F�[��O·�X]����{^�^� K�7_�Zq�Ri��=��)q�.�$y��}clj��#sb8ε@)����bp���"�� �0F0am)�:�eRG�]��G]��˦QވR�O�<���r&V$\�� �4�d^�`�a2B����ָ�4���M3P��,t��W��R��[���U�Ϗ 8 | M8�P����wf�S�e����l�ai�+7�;H�n(�G�v��'���6�x.�<&>��U�,iʍQ��g�lc�d�xls�����>?�|2��m��:>pE�ė�ZRO����A�>@^ Fe��f�z4�Q���)�_����S���j��CS,�i`�B�%��N���k�f�+%t 4�cf��(d �N�>�5�H}]��:@`[*`UDu����B����-+����i�]��l2(z 9>խ���-�e�9�Xs��+�2'�<}ؾrѵ��3��;M; H���B6W)��C�5�] xnؒަ���!f���ؙP�� ��$����}9���-!"12#A3B%45�� ^|���П�u�7$"��9ǜ�z{����1�T.�bi��lwi�.I�'���&�C��8�Ps��R�r�3G����C�n�A�uP�FOx�ֱ�h�%6�Pқ��D���lb�<���V�c$ֵ�����EB����wF2�S��h�Z�x�ArZ<� �:1�(G���x�GZ�Y���4Z�EХ��iI���څ�����\?T�JH&⤍�=[^��e~�+jZo�MC�P�i�3���بG�����@�.~�]�8�������٠ݘv�F/�e� ��@-k�)V��c�(vt������OU�m[�W�QE���4�(%�!jS�����IWp=�F��k�޾��L 9 | @����5�3P WT��d$R�؅��S�_t��Ec���P�j�rn�%�'��A5��2�*�6��_�����_ҮN�:SFCIw��U_�"MmlcwAi���?��D�4g5(�>J%� C��}� ��Hr5��_S�Up�t���-�c'�����nT�*��CK���)��u�gQ�@5ap�Ʈa�V�}�u���Ef��J�=��`W���xml$x�=���\�"��c�k}R�W��Z�>�)��V�>��r#(J�hH�v)����=~���)��;;���g�h�r���)*���'AX�_�: S 10 | �h�jr��D�!�<9����Q� x�k��ڑ�\��C�\E��g��n��Ջ�ߏJ��k�'M��X�T�Ʈa�Ig�����.|�z�z5��N�gMC�jiH#�z�d��~�`�oQ�揓��`s��t>:���Ku!�����е�I�H�%�Ѵ����<2ob�.h �mT�@$W�d��J��*�cL��<����=T6���9� ^#<��gy�Crd���%K�#�%X�e����b����l�N=l���2��祦`�嚃�!�Tnr�*`�U��n~!̞>���;���'�C�G�XO��czQ�� Oh��c���,��#./4�9|6��;@Or���� ��R��f�>��9����u��>HP�\�w b�m�����̜y��ï+���Ƨ��U�P �CI�|w�* #����@��ά��1�>@(˚��*48�D������ƽEr���o�~6��K�qX���?��7p\Y�5jY]�mMÚ����0��R��`�L�cܪ�R��C��zhz<���u���6_�U��o/��J|��1�EF��s���������BL����� �7�R\k�退�ï��y�S�[쿯�F�}V�i)>ݰ� 12 | �?u�o7ƾHf6� t����+�|�ߏ_��� �2�kNS�v���7kid�R�&��KŘf����OT�V�Pv��uY��1����F���[Ve���F����e�@n�\���//�3M��� ͊�5�񸳕*� �,QD6x��VPfU��?r!��k�ր]�$�j ҭ3��>�a������}��h���琳H���k� �y�@ѭKt 13 | �u�Ar����Ȕ�!�ƒ�� ��V��C��Mڎ����ؠ�����X� � ��Nw���T�n�T�Y�&��Y�P5�@WU: j 14 | U�֒�}m�$9a�d�a�+���2���[*Ġ�bs^\/ĸ�~6�9��o��`��#���#\Rt٫[���ة!�p��s�@�~�N�6�.);~�z>د���u�}�k��������"��5���� �G�MT6���F��:��/Cp6*(�v���RN+���Ib��7��}���L"^ 15 | �5�����}W�j�mX)�2kV��+ǁ�E$:��H}�T9!T��ާ��Ct�)�IS����%���]@.�y+o�`f��QKY<����W%!�~�@�=���� ��"Ic�ԑҍDzW��j5��\>���o-k�^>V�/ν�P'P+ ���x���D>R�і|�9ZF��� �?�.��)G�e��뿪6D���ǜ�����|�(5�BjD��K�O�YK� 16 | ٯ3V��T���$֕ü�VN��ZzWZ,\g��[�|�8~����k�V�E�O%��Z ��cA�?��g7���It��ɥ-�H�Zl� �� ��[g�l�j��,���V���V8��&���%��>7��~,���/ جa^Fu%lp������f@ =�Me�#eD=���+�9��8�;'$��o�mL;�2��'���~[;�t���|�%O��\RwX�ISd��Y5�&(��b��fr�W�S�\�'oQ��� ǥ[u`-�I��^+��������x�J�=f^�;*�:�b�"��n$�����dD=���vߴ�(�GM�s�Xd�����m@��d��E*����o�juمG��:@< T@T#RG����>!1AQaq"2�������BR� #3Cb��r��S4s���?�T|�b��'ˆ��j����s��|�ԅ}U�xo����>���=V�U��Vg���y��Y[�@��=U�?`j�g�{-����.&��Jo�T�V����*��8m�B �<:(�B.6Sl�hU�T����� 17 | -o�.�����G ����y�Uw�+p*�5�.��NY^E�=�.�4����B����5XN����^sE���/���ʧܷW�^:�+8���s��)��QE!u�!�6�E��W��$"�g���|a['��L&��r�#tuS1�wB�e?5'�P���RWҩ�M�GQ�^ 18 | !��ݔ�J�~�d>+��i�h�jbT+*Yu�dT�4E�V`����/k�5z���:.HV�<�8UW#�vS������9+QX]LP ��+�E ��2�ɸ-��|Qozs�C�N����?�9{ѭ�F����%�$.�D�T�p�"��(�$�,�M�+�¿$Dz�U�� 19 | �G�ޫ��Lڮ���� �h���$ 3���}xˎ�,�yJ��T���I�D�:��#�n��B�sZ��U���YrQU�t�54�i=�|�XL��ᑽh��8i +ffi��|Ƃ�O�P�*��:+����F�uF{�6X.�9��@Mv\�UD> T>��e~/r� Ֆ�b9-�6%s�X����7YK�;DP�:,�iin�h��܍G��Bm����⮾�VV�!Q;^p�_Uݒ�˗-�7U�Q��R�s�ء�xQ�W ��V�Tj����j&�C��n+7����ʇe%���x�o�uh��U>���F}�; ��퓉2w�{39��^P�RG 20 | �lM!Vk�Z���s�_� 21 | -���Q�nj�s�(|�W6��6}���s�y���đ� �Ϫ�n2�>K�D�y�����r�����"К��5��?��I�*MU�P����jT���������]0���f�^� �DF3�~������߮�Q�VL��X_c����13b�Rz/YT��xY�#�9?�xp蛋_e�\����co�(1��E%�b�@!���8���꺬Ɯ�Y\����v.Àa�1q�!�inQ�������� Ŏ��ԁ���֛j�V,4[:�l�XB9��~��p0Nh�[� 22 | 0���� ���  ^��K�*o���� 23 | _�W�h���z�*��Ò^K� F��@h���Ѿ�n/������QV�Ns�%�6���Cr���3���#�]�D�`�bv���x��.1k`�Y�0[��]�}��Ƒ4D9��uX�������C*�n`#A�o�� 24 | ��T��LiU��V]�U� oJi���u���]����.l���N�:��(� T4��EQ� 25 | ��k�M���)�8mˆ)�S���������eDp�u�#���fTeRF��-ex?�S�S Z��HN-|s 26 | �cvo�NvuX]���� ZQ~g{AV��˕�M��������n>+꤈N�{��S����9�)�Nc��C ��qu�r-��=*��Ps��&�Ui��&VVe:�ߕbQ��gHZ�M�m�oh���0bSF)�ї꽞r�!U[)m���ܫ+��jQ�a��S����ʂ^��s�ae�i �)��]��"k���NT�65[���Z�(����nktU(N��7��cABQ q��HF�N� �t�S�9�����>%z۪0i�F�+B��7Da��_��D�9�J��K��������`�ce�E�i���tX=��9�>���j�B��X�ت1+��|ڴ���u\ՔB�k�w��H�N�P9r������ӓ��Ue�~��>�o�s�Z:�v�E�|oXa�����X����e�H��L|�7?������ }@���1��U-�8_,�FG5���zM�U̪UM�gcT�����afa����1��L�k��{9��\a� ���JʦQ��U�Gp���ώ��/bnj� j�{3��A��c:r�'�>H4�E}�9��_�@�ꢛ+��&� 27 | ��VF��j��(�+�U�]I���I�cܝ�N\t���}흙�������jm����@n5*T/*bL��rD��fK&��EO����7R֒��!2�"}W>I����x�f�%Z��/�G�)��J�f��T�ŔY7k�z�{�#����b`�1�9�2#Gh�3�T2O�R;Ò4��G��!�^��}�)�2�Kp�ƚ��J��U�ʗVtZIV�"�x�&5�>��}��Q5@�)�U[l��tM�}�n&�}8���]1�x�i����������0� 28 | feD��U!U��l��ky_e���.�|��Gn��@��6Q��9A[QP����r�=f �j��z��x�u ��fGÉ��`�aЧc`4���5�kD��G���Q�Ƌs�WU�4������Q�sSPt���$G��r�H)�4t� ����FZ�!"�*W������ӆv;)j�/��7j�.���8��0{N��zv;\�Av����QT�%�T�!CY���E>7nQ � 29 | ������[/�'k����O=T���/�Cm�U��Q�{,'w�Y��3‰�a�R(��aP��4>���򱭶)0[�1�6 흔_���h�-U���s͚�I]�����D8���s�؜� ���A$N��@�(�����"��>� 3w�#��� 30 | -,$�4I|���"���G��hb5Ť��c7A�>[ {F6�9�Y;#�b��C�0v��0�4��1�X>� ���$���YXݧ����ww�)?�@V7b���a��D9�s���JvR[�n#dew�P�͕H;E>h��5�O�e�_6�}���B:���΅��y�E٥���l͸;��e.HfAf���8���ǜ,a�S���d��������I�5�]���6Ns�h��/p���U��e���b�C�Vf��F'qޅS%�ԟ$u�օC�}��3X���0��5��Y�F�4+D5R��9.{�� �vX�P�3��4X�Nb�����P-�Xm�1�Y ��z���ϝl�� � ��h�6]�Z6Tw����P �Q�P��y�@濕�3��B<��h�5��պ��oE��y����W� h/qv�8vf��VG`��a{P���"�K[ ��Úi�"���R�dL�����^�U�ּ W4Q� �t:�>�[p�d�t�?k���{f�+�i�|xc0:D�G嘯�:xc�U�l��O�uWA4n�5t@NB��o�-?�~�)Ú���� Q��N1�ft�\B=�4��&�gP�E�KG��Ͽ 31 | �����B��H�"��U���r��^^;��AS3 ��h��P�W޶<0���M=>;H"c)� �X99wF,��s��B�l�W� �� PtkR��Up�J$x�~%��(䢰�b%�xT C�L*]���2+��G����?���;�����`u�Q�R~��N&��AS��_��ߒ��ʴ;����an�E5�E�e(��PO B�*��ë���+ ����<�b�,� 32 | m�-�EsNN0 33 | �{K��3yUKt�]6Lx��6p�Ul��^ uz�Ԡ�2Yd۩޵WR��dr�];�3�;��MG���6� w�3)�EW��h��"vT4�r���PF��9J������" �(|��Ӂ�&�� 34 | x���c�s�dz��χg~�Z�J��7D��Ri�p�k�] �/���ʯDžSkUH�<��M�)!B��4�c�� �k�� ��Ow���uE����De1���#@Tk�F���ҕQ-����G-��l�HD���UB�:��n2,����c�~�3���5�x��86�%���f���.Z� �*�H�(�HU��wN`���ҫuz�V�m�Ϣ�R��P��l&'e�i �Og��X�����sZ�V�#���1�s�c����"�e�)�G �;��D%��MO�ȡ��S)v�$���4i� �AdW�ŠBwem~k���|�'UQ�)�Sz� ��)B�x��%!1AQaq�𑡱������?!h�p2�S������t����!���LsJ 0�@f�S-C ��������@x��}�$��X!���uJ~�!��zB6����&Lf�>!63şIP��M�8�LX 35 | :�`�"�m ��l���������6F6�n��A�U�&Xd��YF��t���h@��n%��b9UN\�<�E4a  SJ>�(����5�� 36 | �-����$�E�O:EY1���س���dF�D@5�� ��Gh<�4р�����4�h `��b2!\r��2�ޘ�JP��$����2[�<��" �, As/�-�c�;q��ϨKa���*�|��7qY���A���ፋ 37 | Z@�&�� +<êY�aل�?�$/�r1�),jT`��iB#1�/R�8j-�F�گ�� �O��E��1m�/^zʤ���'��q�PT�`A�p�b��N��Xx 38 | �Q{‰`�l�|bd!� �G� 39 | J#ةF� &]4$�n�]�ś�30�1%�y����g�a���v�a@;�DK0���H.��M&�����A�� 40 | �;��@��Mo� ��;C��`)jOPɄ�ox���4�{��ue��w ��JKM`Df��Bl^`h(:C��� А*U��$]� h�l�p ���6!�e��@�#KAB���Zd�h�j�U1$V��`ӳ�갇��"���4Q�`� �D9������ ���c�d@h�������)�9"�Ρ�Y��� ^8 ����Afd�tDSA���P�za�X���'0 41 | H�.��X������`��u6 ��h;@��7~��M a�"�*P�j��l����@��;�������+ d�?*54f%�8)�!B$���;i��sIva�*N��P;�HBjj��32)B���b��Nz��:� �����A0J@�0S��@/��Œ]"�j�i�g�Ϙ@@+G�ϳ@K����?�͋�p��q4��B���Lć�X���B�z)��s� z���(΁����$���S�` g�" �" �OH6X5|C1p�'@� 42 | &A�b��5���e�[�p偰���A6�(� �^F����B� ���ġ� ��:����(}�D�`��c"�Z_��!�DN6��F�iq��ʔZs���Y.r�P��P���[b��8-����a�6���@d��x@�pD=�b�6��R��d�4z� S��@��A�,ip�,��G:�6� � lk�N���� B'��! �x n�0PCn���:�c�+���}�C{d��oc�A�֠�D$�v5�ņ�.��l#��\��nt�JZ��ʆ����7=ae�������w�^\*���W�2��i�!�l?3�%<� �]�78��{>`��n�`��èDOgX�2���Wc��8� �6�H"= ��[����� V!@�<�_�V,����l��$�X����[��DY�E��/���[�f��iR,�i6}�o@�_�����A>�E��� �!��bF�t�i��B�� �z9Qfˠ}z�* E���@�Yk��i,r<�L� �!ȰY�5�� hy0� 1ץ��I��6�����9v�������Α]l7��5h���0�U&��{�c�ť@P� 43 | �G�2��؁s$E���7�%'t���p�T" �"�e�c�/�P���W �,����ZjM�Q������r�C��#"�d��$L�X@d�chP� �^��@Вm무��`�|���"�Vq̰��! ���Q�O|ӹ�T���eLO�$X����F�?�Y�m_���ߴD��q/DMI�l��'I#T#=|���s@� �� uq����s�h&�����w��l/u� <F�X)�}���B�eptC�ӬB6Xs$x��Zs Xb��a��� ���� ����BG۸��ً #�K�F�ӯ0�4���@������<��$T;F�h���6����m��3J]�ɰw-����g� �p<Ȑ;�Bs�d�@�_�� �I��><�:XPj�S����q ���Rd��K��LGB]��-�A_%[^I���,�y�^�O�֞��=!�J����6���f �t��:���A5�1{��m�|���"�E�k4*-�`�8�pa��LȀb����-�6(ON`�L�O���6� �x�1�Ĉ��@�� f94�L�HX��g�8fe��l5Ԡ �d0v=�&��"e!pEt7mTF����gX� gW� �Y���~�9�:��B&���6A #�M@RJ.83f�"@�,^��H�j� �¥��(�L�$�8&�� 44 | D� ���8nKKe�1OXay�-`��/�� ������ndѶud��F2M�R;A���A I� �b`t3��5etf bH��A$-�Gw����@���z@�<�B�v􋶞G��4;C��q����J5�[�w�P�b�� Y!�9���Y&>}a�D�:*:�Ʉ)��� t��҆��Џ>���Y����`�4�_�D �/�pkHZ�T�R] 45 | XϞ�I��i_�� ��N� 46 | �N���9�B5�%��f( 5O[� ���E=t�Ϩʙ�D�W�� ��]1�G?Fс �1�a�K�{�w�C�<�'Q[���!Q�DA#v�}���C��x���@'�s[E��U`H A���r钀��H�l���I��H4�˰��JZY��A,KDe��"|b��h��C��!�/Q�n7�a����@�MU�5�d�_�A�t�5��i�33D�D�;� �� //\��Y�[��A�`<1sq�d��X���K�(��? 47 | �(0X��X�^�M�N�:x�U,l�����> y�����\�p8 ��A�6���2�,��A�u��oh��Qc�{�n��r7���kZ3�܆�}���&��~F&���>b�;�Dz�$1K]a�ݢ��`�0 �����K�K��=�X��ֳL��­d3X_�-X��2��� ͱ��Q��n: m�f�]fE�]n�%����`�#z��k����8��,� �Ӭ�I����#:�F�٢4�N���+���I�� ��j�����{�,@��CH(�5I�@�� �n+���S[C���� P�� ��8�½� i,!�c�Y�菛A� BC�y���0�/���5:Ƈ�g�!��yP�$:gϜA�!(%\{t�29j^��bʁ��x��z���Y�t�\C���xW�Tp�~ڈ�,፴= S����� Ӝ =����Vz�_q��q� ��`a�u����@`P���)���"��/�ԠDH��0Ķ}��(�;V#�V�!,��~�� )�0�=A��xR��[���B����y߈��������,z��a �$C1�n��r�E!I���h�1��6ig��"�my����@\%bJ��<�h�BQ�t�t�C�y���\��I � .��yN��Ͻ�egA������J^�7Y�R��O1 ������v>w�e�g,CgLh�`�n,� ��N�ǴPC-�Ta2�G,�� $H��b��u~�$7�>~�5��sG]x���p[�X�f�aB��0��Q����2QF: 50 | X��>�E6ély���������C0����d�_�����m����eϟ�P�<�}˔w�����gH[ayq E���D\_��i�(S~��j+Am��ԝ�_n�ø"���e�ԀJX����@�[��L���� �R<�h=�B�3�TE��K�j�K�.�Oo -��#'��Tl��:�1�P �����L 51 | J*�C� ��[p��H�����������)A��|���/�=Q���XF��dc9� 0�:|@ w4%FS��x�`4�FGO�j�ٳ/��a�T|~�L+_��#�ʓ&�$ސi��?5��T��47ǟM�כf\�O���C�I"�pH�)�B��(P��e�Py�����b�s��]w�h��^���� aH�bѱ�-x��w�apwh�J"�mq符�=�G�@g��fٯ}3 54 | �|�w��{l��(� 55 | eBA�h��65��j �x�⊊'Ax���扁��@�� 56 | �\�fL!��ǧ�ʀ,�|pR@��F(�� �L��Me�T(�X����H��Hǁ�}�>�40���� ������٫�B1�N$QZ�5�\� L/�vW�b��� �0^�o��6DH ���&HP 0ֽ���ș/�2Rp�-<���#(�cC��fD~��JLI:�/����:�5�;ݢ 57 | V������&=�Z ?��]����9�j�Cz�ְ��ig#�dB�m�L�޲��Ox��b8�6CHYd7� 61 | ���.F^����N:�C�h�q��� ������Fj�!A�7P�W����E��b"(����Ā�Fo-��?G����ɧf�aBH� Q8������z)�>:B�ȭ?ɬ�"�� �MD�K}�e����5��q�dA� =c �9��X� 62 | ��tP`#� 63 | �5T)U 64 | �kF����7��Yf.q c����B��Y����.)��Jm�;@@jY|����p>3 �S����Q'QwU���B��l��`+�`P%��b04,�M������N7��8jp��(� �/`�Q^ vhr~e兊㴹��D�r�=��20�� � 65 | �G u��a�� ���$dŹ��m���9/*���'#�@���]!06 �d6�&�x`�0��5�w� �l�����j.�޸1�wA�NȊ��.VKǕA�R�ys���� f�H0�}4�b��0���D�����'*�"_�¸^tNZ}oXYY�c_`�� #Y���i�)Ua+*��X M2n���p!@f��:ު@�������t�54 �{3x6�:�;��Hi�v�D�>�Gi��=�!��c�����C�Ɛ� �f�����d��z��.Y2̈́�*-�*%� >ްm�XČT��E�pC�7{D5��y�x%+���( d¾� �.��@�� Pa�gE0���`�1P����q���l���YaO��|$ʆQl����*S��ث8�� 4H��D z 67 | ;�@p:� w��A���E��@t*�k����&�C�H�ߘ�@B<�P]���4�H�#��} ܢ% �?fi�Դ1P��է���`�u�ŦdB�K�3Q�y},�<�+Mhb ��%��_X��`��#�-���:i� V��g�� L�(�7 !����b�I���*�6��� �"�^��s-w� !�%�|��0(m�tQ�����d� ��h���?��$7�dy�+��V6'�{�HeΕ��΋]s�����͝e�OSZ��jr1p]p(ɬ�!7��G y� �DRae()'Ȇ�`h���> �s� @��1�T"u��el�Z�0����!I�X��� 5�`l 68 | �B5� �A�mv�v�����0MVEÅ�-�|��d�a>�Ǹ@���w��!]gʅ��(4�X��zTX�k�V� 1��&D�Z�u��~8fl�t+�)b �v�����oZ�7�B" ��� 69 | D��S��s0�"��b��y���RON�DI˰<Ĕ���R���� �X�� m�DF�s���>��>��t���� � r�cJQFQ���CZ��^Жd8��*�lk�fa���QÐE�{@@���f��y�.M~���$��~e�$,�{��)�b#�<ߙN � {?T�3�A���bT4[v�4�|� ��hg� @�H>�z���~@�F�� �X���VT&��H;���Xq�EF�������WN�Z�c ����PD 70 | �}�������M 4�:t�KL�m.Ւ�s%�i_��f���L��[�|z/��`�{�f��\�=-����+�"�B�b�9V?�� Qk�\��� z��.� 71 | Y���p�E����i3L�;���� ^MEV�Y^7P� @�55����Fgc˽�>.-�z0�i8< ��=p ���%!1AQaq�����������?�'@7�|ؠ�aPrF9�xD��%Y�_\�F�Mk3�oQ�ٸ�ۧ���R g�-����K����vy��!�:w�q����Q���ۿx8�(m��8��id&&uz�;�͜lL$����Y;��pܩ�D+��� P������ X���z'�rIZEg`�͝�� �w���-������Բ��.}�C v�`�^���v"���P?�g�"f��m��2@aE�s���g��dba�:>�y�:*s�|��_�\``�T��b�`�lT�@;�.-8*T"�d(���ۘ��o�秼�Dd3(�N���֑�D�i̜E#q=�������W��� ������u��$�e%Sl&�����}Rg���US(x��9W�Z�����G=�.TL 72 | ��+�0���;1Ăk��'c�mj� ���.��.{�~Ur��)���ζq@����+�l�sX.|�#<��|�e�$C_������:ڹ ���x�"$%���u0��W&:cNz�(��6��x�3�'+P�5"�I��|p��mIS��"�X����j��&��t�>ȏ��a�Q��w�x�F͒c��=H�����:�NEU 74 | ����o�4�Rdޜ�_���12���� ���B�y��}�(r��rk~��� v�q����Q��=4�"��Y1�k�f���.p ��k�!��"Lz����,? 75 | 0�"ݷ��%���Q]��Y��d��� qE����(��:��cL��z���M���ɥ�a��'�}�V�G���Y1�4�Pd�������)�����~B�"/{���yh�2���?�$������$� �s:�?� C�B.�������@����x 76 | �Rc5p��Z�X5��ܖN)��t���9�k� �& d�!&M�f��=�� ꩲ�������mC�kY��O)�t�S[ɾQ0e BY2|�>Q8D�Q w��x%��A3���O��Q�� �2b�,�a�8˻�Ф�g C�d��H�P��E��Eɂ�zTb���`f?� F�e.��5����(Ǜ0��*�8hv$d�Ɋ���;"Fs� 77 | �Dc[�Lk�Uf5=Xˣl{���O ��8C0&\#��P),ޕ��F3#�����K�]��e��r��r]^� 78 | ��� a��Ĥ�E�������-(& ��jH�=E�5in}��ƀ�����qq�xPyQ@—K�׮QJZ�[���<��-�\ I5��*9Mu���B�_�\�:A[U�@��������0����w�Ԃ0�+�ɮ��̦��zQ��`#@�G3����m1��c��a֒�1"7�ob���sJ�Q��8�A� 79 | b��i��1�qFٓH���5�] sM;�=��`Z�L�ݕ�2�#F͎M͒�� a�����⫋��@a �2�c�� Q�( � dO-�4�Qqx3�E�c 80 | e3I,�n�r�:���K��O�9G�p���Y�@�eo�؂ 3�η��yp��@�Qj7<^e*�c3��#������<�MgB;�e�Ud��7���c�T� 81 | U�_� ��E/U~���<�^#�T(�h��r�<�:N��z���|�%;{߯��+�ѣ��kgL9 ���^f4eb0�,��}p��f[��q��hN��Uf��z�u��#� ������,���c$Q���2�p �2��嬤�L�2 ͑��(,o窤1,�Z�����x�ʐ�{�ř�/�.I��;NUd"����;�rk�*�f,���� Bҗa�.��P26��Fۼ��9K���䘲Ж6H� f�d/��&ʇa��L�R� ��tųW=�P 82 | "����>.�1��3���N�g�S���S�����:=� �sx@ 83 | A��v>��5dWK�a�� �\�ةs�p�ZG�υ �qqq��jrm[!���GZ3�ArZ��b��R|� 84 | ���+��s�,&�5�����GB�������b����|Sb l8gt�a���Y�0�fI�����԰I3 |�|�}� 85 | -:���4 86 | �2�.ڞk�ր.�.ƌL��ŐH&��r��A�@�M��ƹ ,���>��x/�WF��+���#�܆)&N��`v���U�lo&W�Sf�Ni�]m`a;��fI�Z�E�GᓙB��Q�z���7��%�*_������ �[��\O��"�,Aj� 87 | ^��:`妡�5� 88 | �L��a�����!c$���b�j+����'���?���`A@p`�L$����(J��m�x�w z��C3���|� �,EJ��X�P�0[��`����|�:�t��0�XbMK�����MH 89 | �0!" C�#�2�X^F'Z(����/�46��b�VW��* Pf � �d��n|��\��Z�;���� 34U���K�XJ��}�:�iκu��pBtV����6f�T� 1�7Qi��R2Z@�\Spyrӈ��5��f 90 | a ��"a��@₼�� �4�Y��'(UiA�����(H�Pe�Y��@�Ph\�<��� PH����e�I�]>k����)3|ˮ,p��RSrc7��*J-������ ���7'�p�M�3Xo"k��1}�Ƌ�H�C�,�Z�d �m�%�hҸ� _$w�u8t\>%'o|QaK(���Șx�������\���]{e��Y����@�n��`J�sQ����F�.��J��Ñ�ࢠ�Hؔ&6����z �-o��﫮�����/� -�w��Ő�T�`%�>���a��3�i7�ñ M�#���I2RF�Z�G� >� A ���e�R1I`|>D��5Lhe��+�/A����w���P,,6��u�� ��[[���ȡ0 �H�| �3mBxX�s���cX{� v���BG��4�VY\<`USm������"X�v��*Z2P�z/�y>��4*8�̙&�x�gDg�>�}�T� �Suק�!@�� ����D{Q���O�#s�˄K���0$��DC|%�I2dZ�%�(M� c�1�_(���L��BGy0�Z2�#N�1� ��&X�1abw�Ձ���8J)@�����4�fw�{�1��Q������W�n���T&D�@N�f�8{`M�!�(� W� 91 | Q� ���:�Y1˼�,���~<$�X4W9 O.i�G p$�^�L[�P ٢T�#:Ȅ��D#C�όr�t������88b� LL��;�4�̵ºTd�{�X�`Y� ̲����ߜ?��E& ����rsP���7���QB�+��y�Sׄ!�`�T���|Gak�� �%�S=����c3��0��`Trfl.���Ii�p͏��/A�P����(����R�j�RQ�F%�U��AM���}e�L$��WIa" ���r�� ����z� (�e��wa� �̓���:��c��a��g]|k�a��0to�� �B��뷔����}����(�����d� 92 | \�FB}� 1"�]�tm� ��i�=�^A��/v{Y�� &��F �z���i�ƞ�jXŴ�M����J� ��$����#��Eli%a֒��x�[&C9����8����|Ɓ� B�<�u�l�@S �P���u��m�V9�kB ��zuz8��D�x[��Í�Ah�YI���s\X���I��<��%���ò��5���Ug�b���D[���Aj�1� ���@R�Q��͜2 9�� YTH��8�$&���k�! �樆�Ӆ�g�K�/�y���H�:����2V�ƒ������G8����/ �E�)E�:��(Hפ 3a��Am�"9�����d�n {�*�jM��h� \�H��;������Ӷ ��K��C�@0��I��;���*N���zaF��a������#Hc9Kp꓾�Ff��쿣����낂ݤ�����䔙�Pƿ-ߎ:���2��}|h *$e�^�o��P(��|g���&�t���5���d��!�[���媂^"6�F>�i��g;]�F\8Ʋw�S�ڼ.���&�2�C�Dp�!�8Aa�2@�V�9���!�]��m��p�1p�,1q����k 93 | h��4LK�d��jQ�VJ�C��L6j� 94 | �,���4X�;*�w����1�.���|�q���L ���jK�\Ah1#9Ktx��(ɕ���q)(�h���\fW�C{�-;���7�V������[�#�����~�!PN���x(�;�J�( ��� v���2O�<@���]WP�@���B�%a�7�!x�vD� c_p�C$�a���i�Hp^Er�M_�s��$�@Z�s�w�;*>r,�aZVȓ��O�c�r�VU j/�3�:R xXEثteRf��X���+SC`P(Y*P���@�DT��m��K� ��p���� [�۝� h��ڪ�{ׇ. �YCKD��VyDX j�#WX幚2B i5�(( 95 | Z��JH�����̀4H淍��2� �G"8�u�� �Ӻ��PCQp4 K�(b;}l5������X���Xr�$��0�_j�4��g�)C9xIc)&��N���)�e�H�^��o��Y�Z[?�ǚ@� �3m�Ɛ�#JC�~r`���5�5���DX�ȣO����ZQ�I�����j2ۄ���9 96 | (�m���)�ˌ �c ��$�� �� 97 | �8�&{��,�a9 �}%z�eGI�i1 ��м��! ��n���J k�����9���#�&�_�D�f����7w� B�5����1����ΰ��^��r�⻴��@a�P;O�s��:�i����T6�Ē�QE�^�Zj��S,��F���ix  Tr�r@r@�Q& & ����R0f�-��T`T��w��ɜ��*9���)��Wb{*KC)�:�{��w 98 | ���9�L���>I8C� ��_�"�y"Lu $v�'P�� 103 | �ӆv�Ѡ��7���L� (X��� 3�8I���B���uNf 104 | �1�����/Dd��]����8: �����(&(g�[7��N�>��Z�Ä�!:��!�up.��(g��9��`��q�����L���(��\��f�F %ˆ������8,�{&���9ِ��q����p����p���(��4"���=Q`�q�flʯ�U6�["SZK��_]��gƦ� 105 | w+[�0svB�p��$���/Ֆ���k{�l(o�ǣ�T�.0H�4]�:��J�� ������^jа#оmh�p���5θVN+7�(�iF� �Sa�ػߺ6�,�{؍���٢I�2��M�I�u^$ R�j���lzk+�Ͳ�0�� �G {�fZ�~q��j�R06�D|��y��J*����� �� Y@�Y,qp����q����PA�B����!���CX�c�����U� 107 | ��c点@3���yL�����4��sB$��0�92�(�H��Z�������H��ӂ8�*��`Y�G.&u�ܦd�f�z�o��I!9l��,_ �����Lm����9���@&@@w�s�����PE�R%Cz/R@���ݮ�,E�qy���c�����h�y8��b&V3�zz�t29, as��~����`|�`H*$7�Zgm���8('Ya�s'��5X.l�'[�7k4n��nx� H�Q�-m8����2�*8���ށ�b��`���6���M���C��ݲLwƒ!�\ �s�l�.����8o�(a�)��z�k"I#k` �謈~��)�D� ΃�SAJ��� +� �)Vqb=Tq�m�IE6&M�f{1O��ʲ�qqB�� � 108 | Ü�q�����jZ�5��L�F�]GbV���BF� L�����S�:��ᐚ#1��=o�q�fI�0N���:8���� �kI�MjAbr� � j�����$ԥ��2^�.=� �4�'�8�5�{վT�z��o@��p� 116 | �P��L�'���� ��t��#^�ΈA�|����8"rHTuE&̏�6[d��*����X1��Eu9��q��@a\��́UM�Y2J)x����KTs4��&0$DA~P�c�!)��E�]�M�2+������x� L�9� 117 | �a^=�ɗ��Q�.dI��C܀�2�ʘ���a���`G�H�s0l��2^ ��&d��l��J�۠�ɝ�!��v��$�W����H,ox�m�Ā*,3�3p�fPc3ICM��3���u�ҞRL�p1�I٪3fB#\��]Y@8���S-ۧ�!�U8�E��[�h���DL^�;��@q�!ښQ��p��pCY�e"/�6��S�(�}b��*���]�(�#ONO$h9f{t �k�t!��qY㐶� ��QR�R�" �q)� &� ++�郗�k]3�B�ZJk��ڤ.%�H�-Xf����S!�"c��T�`� d��y�"���n�~z�pw|���"�V���Hj��O՟L5�bP���\\�� �n�>1D�!z$K�|G��c0��D���d�cM��g.}FU�8�R��Q��qY��% ƒ�\�0�Pb�䡋��0È���(g 118 | �E����14c~efM�����#h��X�\�Q3����y�AX|\������*���J�#��� �?X� 119 | O��Òԭ/��^�9͌_���6Z\ �� +��-�4�O�˦S�I{��p������­��`��q�p��H���C2��N����3u���~G�{_�l���#�U4� �*�� ���Ya ��B㬗!����:8��9!�(Ι(d� 120 | M� �r�)�j!�[I��X8��9c��H� ,Q�G,ɂ��J�T���Kel9�X�eB�se��!u���P �#N�*��fJ�*� 121 | �n�ͼ3#�O��<:b���������4Q1Y�����Y1�䧏T��HX�1j7 ��P�ܦ���DL0Av�I~�E�n *s����x�s �|�2>ǰg 122 | k�E3\v��E\4 n"�~ �r����v� >�� r\��5��hA0�fs�� ��#ҪpL�J X��kŪ3V��/n���S*0����� �!����ď��&r;P\�� ����8���-9GD%�eM�"����r�ᨤ���m����HH�$�L�����W�k�� �����z���7��N[��믜o�)��'ӳ��E������l~u����P%������D� ������ڇc���=���L�$ [|��e��=X���x@JB���k( ����.�Xba�^8�J��,Nnd�2�*G M�)������� /]U�,��K�������ALk��μ��:�0Ot��uvOl �Tr[0���'�*��K�0�E��`Ŕ�����T�4�*�,��L�.„! (� ��I\� 123 | X��X���u�ӅaTT�C����&�u�f����"�j 124 | #��@ˁFE���n��4���v���\�E�P��2&��B��� 125 | �N.����̆���P�k����-N��O���G}�f���@W�]�&�.j���^g�l���5��ȝ� �&v]euoA`DK�܏��9�\�Z���'>=�5#s}'\��088C��1��(�����s& =v�s>~��v���oa�Mt����[��B��5�o�]�' 126 | J��M ��[i��u[0S�+�Q0�>S�~xn�Y�W%����L��01��'���(���Ș+n.� �%�G=��eEɹ�e��DÀY��g����$?�/,�K1&�f��"&� 127 | ���͜N*1��/۾Wp,�GA��~>9�U�����Ȇݮ;ʶi�� ����o��%H]�+��3��`�c����`���_L�)^�sg���2�6�&ٲ|�z��֠ ��>�2�$�!/���\B� �������1�TI���q�0�,PL� 설��4���w�?(�B%3��G�O�3|R��6H2b�� 128 | ��mV;�#� �:;T��;��# ��E�f� 129 | }�f���y�%bZ���M�8��`@*��?�������z���� �%���o��`@ȹΕ���Q�x2�� x�<*/��pu�_�%�TC$�^,�BD�黌L����T0~ �� 130 | _�>� ��0������!Ar��\��C<` �� e�_��B�C�%y��-��� �\�8[L��a�S�.T�PX���C�d,Ҕ5�0��>�!e�� ���T�EC�#j��wx�1є��,�^�K@5�d���*�$3�_��!�����ڭ\�y�"�#����V,�B���s� 爣,��7i[(��� �e����5�k 4�8�s�H��?�H$�գ � ���!��3��^엄% 2�}c;�ʠ���z���c�� ����"�X�+f��1G\â���Ct�V9Z��7-��`r�qr�2L�v�r9"��6� ��'1���� l��L�h�� ��;2�8�!6_��⾛�qG0�]}~��%6 131 | ��/�1T�S�߶�p�؄(��w1��s�9u� ��M�A��L��I�2C�g+z�Q\zu�� =�����y:�V# R[/��`�03���%[-�9�n_�׉b�C���?�y���� �^ᑦ�H�p HZr�f{�� 0��7'@}��.��e����~�FxOF�*5Ȑ�~;�L*/>N��Y��#�^@ u�2�Qq�OG�{��+=�>�u��U��1SjlDJ7��5�k�0��C��=BY8ԴWtq\�V��A����iAJ��?⊢�آ�b�����Yݒ�~O2����|t�b������v�k�[BI2l =���&�a���>xj�"����6�����^�k��/ �Vk&#����[ 132 | ��2124^�(�Hr���yLNe[sܚ�e���@E�����p��'� ������!a�Y��u��i�8�yJVtx>N}#�?���1V��_� @��~�s�"���V���o9�z��卥&ʠ���s �����`��{{�8�:�O��~~���&�ޱܧ�*�yك�9#�"�BDzٶ����51s��샒�:�eia���%#����s����W׉" 133 | ��L��~1�y2����?Ӟ�{k�&2�����0 ҳ��ܻ�p$8'S�KQ��s0�u�k3���#n�&����>��.7��N)+C �N�K��K 134 | �~*����]�s��~.h�TC ����x�NJq���_��a�:8_������Ir����ux6Xl:c 135 | q�"�H��?�����:�����(�1y�tP�#;����E�Y\���� �Aw�"}�yJ�h�s��q�M+AJuZ��{� s�^�q��)AȀ CHG�?U@�r�M�q�J���Lft��W�|�H��D�$��!c�|��FE��G��'8���I�;( 136 | Dn��=a*����zYd�UIb���;�ec #p�����*Ì��<��θ��s�,N��~AG%F�c4o_�%$��s>�����gG�j]�i��b��������\�+����w����}�}�?�� p腡)Sb�t/=�q����ay0)`��"���[�BB�h���(iJ�܌��~~�t�X*?(��b���T� 4�i��xV �C;Ħi��y�&�䋣$���.��V�D�Jf�+8���������\r��O�Or)�N3-6 C�w��A�, /��\�� ���H���aUcV�mS�@�6]��k��"< 137 | ���ʚH(��x@�k�����q�/& ae^���Y�C�|���/�o3�����I��Q�g#��i�c H�t�1��h�+ڞ��}(Jx�0]9����2-��W>|vm��%pTd�fola ��,g۵8��"�b녤����x�ҰAf��c�c*h̔�t��}�L���s�\��8��O�b���v�ٞ�>E��r�H�Z��t\\��5 ^���r �F���>9LJ(X^����z� �֦+�3�L�tټ�޿.�UH�V��q��2Q�o����A�Ee�!��������|����J�c 138 | ^�8>a����B�� 139 | �?������(́DE��J�߫�' �!I���Ot����b5A1�xa���� ۔���8�!�4�e���O7!�1�LαhE�쇼�#�4�������r�=�P�w��-�r��Up�G��0 ����Mʼ���9ؐ>S���Z}@�Cp��3���:�e9���2�Lo�a0*eޯ|��,�I��s��Q)F�tj��a�c�#rN�0���@p��c'{�y�� N�>����-$2��Jߏ\f2GRk���1H��7S8�i{�|d���n�?8ǽq�U7iz �������|F�Q� �������_ �DX�u�����I���9�7+��D�B�.��¤�8-i$0š�&n)P���h�]Vl(�T"�i*9 s�#��W 140 | �g���D-�"�⯉��Y�}����b�f!����4 141 | �ԫ>F�����"����u��J��,�Y��҅���� ;�9�c��K3 ��i&;��*�2��=+a-v3�7ָg)��L��bl��n�+�� � 142 | 2y�EV jt��k��p4,�l9B)���;K��@�J� �$�2J�kv�f>r��'0_��^ f+���՜ƶ���ҡ��qv=k\@�;�c��|�B;H��o��݊P��w�6��� 143 | r�_'��W��Lh Q7���z��>F��w�(RFn�/ J��Jȟ���F� �=�ss)�b���hKN���A��\@܎~+�֍�G�{�5����m�{�'�P�S��_���VP��� FC�B��!���3�4l.oBe[2����[U��>���5�������������*�����8�*�5*�k~���x�Hm��ی޿�ւ��3O��' ����;��T�}�ٽ�.I�r�����0n�D�}c�Y@��:�w�9�$2�C�M�c��W'3 �G# A�����p]&04傕�Gx�'�r:+�g`2"B�̝�@@�!G"e�M�Ҙ0o�Ts�~�ah�fc7 ��� ��ֵ�W�P����S�(6 �f����B!r�/��θ�a�C#gB����p��y�f*HD.���X.2,LU���p|��>��/v�?V)�DY���Y7�)��p�tdX���B���%B�I�A����ڳ O' I�>_�?�-��ÑT���FF��F j��<[Yh��?�p" ��^|ܺ�_ڿ���Գ�?�$a�U�2v@C��La4q�1��Ck#����T�3—(�d�6��lc��@��b���q�; ������B� pHYs  ��tIME�  '7�.� IDATx��}w�Wu��ܙyu�m�v��d�j�+�p����M0&$�C �ѱ $L�e:?�@�l�!�f��+�7ٲ$�������f���1�Ny�v�,�����+3��s�9�s�����1{����1{��f�`��=fv����nA>_��,y��e���ۿ��x��>;����}��s����&���~��ypvD���şxc/%��N�_Ž�hU�`V`O��^ֺ�n�_��Ͽ�3��'�I~�'��獳#��:^����$˕w�j��Q��m�2�0Pg��!- ��U�����?��ӯ��fdn��{��4{<3NJ��L ����˿���TF�٬�>c�G7~� ~�Hd��u�]��H �% Y��ج�.��S��MK��~�o�Ύ�IwХ���5�i��V���;��?�n���z��W��v�>��u�յY�=��Ϋ������=��D�Z���� X0�V��Z�~�%�y��������-�\��?�㲛��Z���Z�>l[W���J@�@2�٫��?/J�-�ʯ*��W|jV`�� �p:�N��Y��پg˾�=[vMZ��9���2k�ko�U̿|�_���� ���?��>;�zǥ7��|Y�������y+v�-�۾󩭣w*ڳ�^Ȑ&�V���.X��k�d��w\���ώ�y\��7̯���� �Y�l�ɞIg#v< O 4 | �6�Hhi��b��Z2�2�N�K�t��{A��m����V[0 0҆���Sz�Uw<�mtl�X���.�� �x�Y*�yk_�AO'?{��u��ȞNj�xmw�d��0Z�R���x��cEM�/��Y[Г+;EK�p�$����ڬ�'�Iqh�(X�r��;ӖI�z����dy���F�&�,��)��֊�U����5��������0;����µok�t����5 Nق�DR�ь�j�""��I��C]ԖJd ���st�H9+��ɇ >�;����5��5�c�G�;7l-M��l)�Ӫ=7_���yk_��DK泿y�7v̎��9V�}e�/�}�Y�x�U��|tB=�����ք�j^��Υ�;z�a~V�7˾%����"�e0��:��}��C��w<�}�V.[ҙ6a����%��� ����?�[p���ޡ�?f]��׿ZVko��+=Q���7��\�������-��lQ�S&�=k�[?�V�{|Xw�؞v�������R�9P��9��������'vm�>^�֥�RL�ņ��W�Uz�������k�Z���w<��s9U��1˕�y�2��;$2 M[=�A�[�@����mԶ�� �E����Z`&@XJ?���9;���܉��$ڂL����{�zr{��߷i�Dݴ��l��W�כ4|��־�[c0�u��[k�p��E7]{�U��_꧱o� 5 | :� 6 | ��% ��lKzs !�7u��b��Y��y� 7 | ��I|�1'�hX飆qc��At!�u���kۻi�ؾm{'�b߰b�۬r���j����^��{����������oZQ��?P�(?�\y 8 | l���Ը���8e �-�뀡��C�J|'f�]���L�>{���=�l��?���dku�sҼ�Y�p�ר,�UC-� b�3����l�A\�ȱ����&�gQ;Z�I�M�D�M^���b]����X� h�5���˳-�S�_98~`��������|�s�,'RX�g��[ν��;d.����ϭ϶)9��g��N{C!_��8.��mcG��;q���t�$�5�:ѝ˄Q^B�=����1����T��Y2�'9qV`#V��.e�ĥ)T3���ƐV@�ۻ۲��Ύ���ڰ}�R,��oa"�f^�#� ι�?mmM������`:����Z���z��[��F�X֮�c�\Z�O��I�-��?�C���Tm��+C��<�/i��2+�GW�zC�N M����T�D%:紶�w�ؾor��c�JE���N� ݪU_>>Z���\��Ҷ�>��� 'e(��x��껪��{e�F`��}�򧀤�gR&�i��w�y]�DG"?�8l�����1�S.�����c�5 ��#I��E@BK��L��:��s�`�]���5�����=�{7����9jEʔd󯵶����L�����<�V{_�X^�(,3�\��!Ċ�m���6$8�!�1��@npȔ"�S��^����#��;�ܱS�2���B"�," 10 | ���rK��W)-���[��~� �8���Y�t!D���Ξ�����w��߲wҴLY��N�q���מV��?`����m]��e�8K�`���| 'Nhg]�8��S�1� K�N�Y��\ڗwv��w�d@�� 11 | �q���jP7^ו��y}�nc��˿~�rw~/��v"ْ�ʌ՝��� !^����B� ��^C�99o�w?'B��b����;�rpd����CwrPJ?�ӯ��J��B�b �V[\�f#�4-��$iЗ ��+;�4t7 G~F/U9�bO ~F�k�ڡ% ��� !����MP��A�ʎ�� �^��Zg���'�Ck���/��3��=�p��n��H �*�NCZ% iW�{��Խ<���;s���2� �{�7wh��2�M�t5�]�Z�=�x��L0|�g���'�וM���T�O���Ϸ�h 12 | ;(&�U�+淗��!ˉ�\���bV�'�II7 T�D aq�r�UEt���˩P.���� +:�wtZ�N�*O`��go6��xb����J� Gv�U�J��u1���� 14 | ����w��z��������21�e.ݵq�45 �C�L�<Ћ��$��s���Đ�{ի̊�6�j�b 15 | �' �,AD�r)][��S��h�]Hno����\q@�۟e����L ��nV`��� ǛiuiX��S~G5��?�����/ �����z�Fv��';�W�+g��%^�A\�U: � 16 | ���� =�~��.���ﮕj �T>V��`��;DвIM[1�C,�q�ReU@}�6�� 17 | �2�q�m6�5��m��g����&;�T�tb)���On�U⌖�x-K��ށ�5 -�������In��R)��\�I��� #qBB����5犺|�T^E"T��m~d��7" �Oh����nC��RL1:�"P������̪�D�9�bE�{>��f��?tL[x� 18 | lC����s0Pg ?(_8�����-�mΚV�n2f3���ﳃ:�N0 ������z��A�T}��š�J�nE��s�-nM�q�`�8un�4H�R�F^�.�-�j���ɕu���kQ� `˂��`fhiBhަ���kw���fs�����[��� 19 | ^�GB������Rl��v{�3���)������k�EIG��|�D^Ͼ�!�"�_-/ef�b/���l�큠/�k�V��@��%�~*8��1P��iˀ��?ᄂf��c�\�Y��>V�U�xH�X=/G#�OX:ꊂ01���>��U �g˙yK�xK2,2񟛿o�~��hݩ9�iK7��/�k�2ҝ����m�����´��tV6� ��3w\��+�ʕĻ�|�/L�� �T ���kC�}�NjM&�8B�s 9����tL�Gl�k���*�V���u���9�H�*c��充[��M飺a%)g5�q9�v`Lؐ�����Z_{�����=�Vv�mF��=����+s���v�s�g�r RL�8�Tk5�3���������y d5� �|�j_{�X���T$,�13bx��F0�$ 20 | �5����Q;8 ����ԯ��{4�m�Y�wu��C����j��yC�1n��l��q�X{& "K���&X����Ru�p��;�׻�[�2�� zG���V�(��w�^��lw��BA��~�9?����>r͛�ҁ7HP{@}I8��Jڤ���ݹ��j^'��e\K&���� R��Na�������%[X��(���K �K'r���@���� ����F2+���$�J��,�(L+Ö����}��x��y])k��tQ{׊�-{!%s�'5k�C���]j�B�<F�s����{;����B�� �d�\F�W��C�-� �i��L���՛�j��v[ߡ$�+K �S�Uc�`\�A��ح"P��S�ˬ�3� �v�&J$D�M��%'�#c��� �o�k�Qf��d �[������/�#ך��H�L2⋅°��W� �&�@ʴ2�.�GH��H��zA�>�'����Aj�H��0�+�Q��qg�vh���'&�N�A!BD��)�8Nݰf6<��$�38�ȉY3����$M��%'X��I�� ��K�s�V�}-���T��� 21 | �;�/����J �\6`wE�x_�>I_@� -I�wl�v�,����֫tI꤯�ۮ/�o ����Pz~mh��9EY�5���d�v�NI:�J�#q4����~^¦o:Nݰğ�`�����_v�����o��-�����v�u���y�-�lI7=�=�K3� �kDd��؁�5��$|��� 22 | ��^=m�J����K�� 23 | 4�i�������Ö�=���j�+T� �D�is�R��5O_6��j��M�XsX�0�p��)W?�e����nMāX���F�ᤆB����s�!g68���]�V�n���{>��_]���^q �rT��q�{F����?� yK��c�4Q� cLӵ@^+�Nŏrv;M �2hԬ���� ,Cy�@�|������Y#���j+ף�&a,�ɦ^z֐�j^����Q*g9��ԛ��������ԙ�5��^ �5��xY�I�p��ehPP�A}�Y� �7�V��wh˞O��M?���?��eq>���z�G6�����k��Iw�X2�ri2EY7�!�2+���%�璱��'"j�����k�{$ֱk���eT9�^���z~�H�zSХ����9 24 | 85�D�� �{{ B�5�|���K�n����Y �\>�ӹX���Cw~�Ͽ�GW��#��_����[�����/�������4FQ�%C:�-��̸c�]R���z���Rz C��\Ji��n%������{kR�޻m�;�j%�Y�G*����~�2V�$���X��A�Œ�3�{��� -�����S?�?7/o�S�KJ�lI�z�|��۾��/��������Ѹ��D�|�?���%��M��tmR$�q����eg?�S؏��Z�y 25 | �مa1�]��"њV,�(�d~��֥��p��* Y8�”8��.g Q(�nm��U����Q-����i-)�;�.��v&nF��h�K\��#βՠ�gg�p�g�e~g��_���ԗ?�k7�4�i����;@id���H��˿����]�����û��¾}��x�k��Կ֪�Z�'Q�H$��ef������p��1�2���%����|�㝚H$�a�� M�t�!�n&QlJTN�/~fy��p�ٴ�c!1�'��|�Ľ���?����L�r��q؀��|�D�µ�}�'���轇��]���!9b*}y���K^�����y�_���?t�������_���� �[C��%���e˴Z`YI��+x��䴚P�l�_X �n� �]�ѿ#�/'�>���w}�uMD�l�Yro�Y us0̢~�� d���΃��#�g��FW-z�����9�2j� >?�_����~5��&Ȍ�$:��‰:E|"����_~��%�;IC 4鍣�b��O�y����������������q�߻�~ҽ���� �G�i�f�y-�� ��t����7.v�Jqk؛K��rWi� H�I������/U�=��}2��� �_�?-W-�!�&��j(E�.Y7Q�}\�`��)�}����W�J��Rlb�H�Ia�L��@��@p)7�6�F��_��q؏m��W>��w|t˿�8�G�vN�C���պ挕���k�&�|[�Y��r��,\�Vjr��[��ӿy�7���w߻.}����~��j�#q��-���p���`QB���O��Jv����&c�R�u�/XW��~)q+������L�uŻ��5���D�����nj�e��+� ,���JCϹ�����8�j�@�5�^������p�wV��������>�b����'��b���2��M��� [�s��_��;�I:ꘇ$��N��g��7��4Aq^�� ���i�['wx�ÿ���/������}�8b3������i:] �o�;pYw��+��'�Q�kR��B���Ϭ����e��W\�p]��%�3�S(E���V*�-7�~�{X���,n� ��@�8�1|?|��̔��u��o�=�ebI�qLZ��H{ ��A�@C:�@,��`�̘���ܙN�)�fY�|t�7�K$�6�ܿM2-��ߤ�@$��ܾ�5g���m!7#F6��`�5s���}���/����y�ky����/Y���}�5`�W��+&��Ѩ,���D���&F�q\[ܝ#H˴f{V����e�+g0έ��$J�� 26 | w���gv�����[ #(΢T,��� ���V���ֲǬ6��t�o~n��Y-"�Xղ�RYq��a�0�Sc�O%�'��e�ib�|>��ZV ?�@9���Ρi�6w�`ך�V�����]�#��ꂬ��m���;?�������]t4��/^{�xѪK�`���V��(U�d�z��)ْ�l��Xh���h�̃��ͥ�������g�b�6J�dT�3�/� �B6�wo#��F��u����� ^ ��\P��n 27 | ��І�(����&�T�'�I������'$�.Z9g,Բ�>B�T��0 }��ysV�q�@GWG�6�� ���L���+K>��k}�u���{�;�H��V�����~�o~�s!�K̨B����P.u]��t} SEM��4�hIf�sH@�Qw^cZ�}]�}�z�ʦ�L�� 28 | d25������PO�!�\s⨄����+�K*g7�-W���]� �lv�CE�����O{�h���z���N�Q[be�hR1�$�!X�H%�ŧ,�Y�zy_[{k҃[UF��P�W� ?����x�7�����<���ꊷ~���}*C-0���K��<����I} ��;��5i��J^+� �_d��uŻ����C��W q �v��8��17N����̥��I��X��oE���auN{��B`�T� ��^:��Y'��%]�& IDATi�d;�h��{�ӭ��K�N]��'ۚMxV���쨀�c9������<�󇗮{�����-:�{���?���/��[u�^ƒިғ�t&����$�O��xT�3�I�����]��m~$��:yeH�i�4lQ�{q�W�5�"&'32z���U�fM�r����0�T�,Ԑ7�A�5;c�� ��֞�o1�֔PCj^���Y-����5��/;m�L:�{�B�\2f�9�)��_��O���/��������T��㿿�e�x�J�w�$MhF�f$��d�D�L�]v��:Gyx��y���ĖuŻ�p �W�h 29 | �j�ᙠ��ٰ�7"H!�EJ�"����d�� 30 | h�@ L���{��������Â��/E�~#�ȥ�L�Hd�6Q]�&��,�u�eO��僋�.�J&�KT��YL����?�( O�r�ݛ��/���W޲��H������������ҡ�zFZ��YA� ����w^��E�����c����x�#� 31 | w�(8�Q�"���3뇴|�$�3�WN�Xi�����%�!w�I�{�)�G��6��u9���G>#E\��I�a�>�j"��Y�;;������i5DJ�x� �S���hYu���K�: Ce � �4��w��Ʈ��ؓ������ݲ�e��{ oH�T��]\,<� z�����g=}}����߃���\���B���x�� 32 | ���]���t���z�a�Č�9BM�#�A^:��~%�� �R�U�y®l�� ��e�.v��0��M��<>�^��'_X�ayS�8�b& �dgFO�f =m�t}(D=�=�5�Z8�M�I�Vv*TXB���YhY2[�{��y|���߷^���_LN�~��_��4�R��`OKF������<�n�^��:e1���񜡋�٪/�[[zI:�~�Gy��b.��;�ZA�f�:<���}�l;��a�w�2�^�`Oe���G���ŀ^MMk5 �8�p�8!��e#�B60k�)����Q�3ch5)͉�eVM���D�`o��ޮ��=����K��=��,@��N�Y��1���u��1v����_j}Å?������+����]����%��b���166��Oo:n� ��d�z[6�k�U�c�bq D2h�zϐ��&&��]���I��e?%`��/_^%���ׂ]�|t�i���&i@���}"ROע�Y$�v9�?�D�@��73 !s�B���6Y�d��F�ᵦ��?��=Н۷s���}#�-%�ϊ���2��ޱ��o(~�Go|�7�����ۯ������}˥Y�4[�b&���х3�|��9�݂�1�/�d*�e$��J�2R+U&"�Q�v����XAu�`Io�N�^�W,�L�;����6ua����Mߴ6�~o��Aʩ��b������E���q�F�frRkX0/(d���� w6-��t�E�����&������V�� #��[<��o�/�{Ǟ�CFJ>[�tZ"���=ת��[�?�g^��6�G�����8,)""���iΣ��_���ϧ����� !�ђ��\��I�{��d�ڵ���.X����V��ʞQ�LM��v�U�K�O^�y��ВtE����G�q84�tLv�|��F���,��z8�S�)������;%+�%��%���j���6��2V�f��UKZ���ئ6���J�NY��?�_۵m����hEmF,��{e���$�`P"��Р-��O~-za�s�@k{�Q�R!��}'���#�,1w� ��ڎC���?w:�{��dպ�$!(����^3�(���ܒ�����u|��j�:�h��\�����1͸���<%Lx���6���'��� OZ�m`��ωT�n�v��צ��hلFC��U��W-�2�q�n��F����J'KO[�[��Tvm�3>9������T���d.�N�!@w��?��[wbp�R,=�tdZ[�x����~���P��|�˹�z��][7�������mG�Y� ��x�'C�A�N=`�=�c}���� 33 | ��9׊ECM�1�g��/(qFp4�ǁT�x KM Q->(�ԤMvғ]Æ�#�����Geb���GѸ٤�g���/�z�n�š�ǧ�d[[R��9�orl��k۞�b�XwQ)=ad����Q����g�f�yr �Y��g�B*���!%6�����(� �<н��J���7>�ֶv �[�T&{� 34 | ��#�1��]��l��-푁u����.<��<]�h�y�͘- 35 | �J�-�����N�(  �v�t�S �NV���i��y��Ey}��e =n&.���hz�%���U/T�t���#�Yіˌ�����_�Bt꺖i�����;��v>��� W�@"���5�ش����Q,�e� )�ɱQ�����Ӈ��0� 36 | ��\�X�A��6����^�*���@(�U�/3�ڣ��®T�W�C���$�}_5��{J4��PT*���$�_�Q��Ufd�o�4h�������e\/�,�h �T(�����������112F���^���� ��u��m�2����`���s����N�năK������-���Hb'ş�E�6����؏�C�30���!hZs,�b�M쑡��LI ҈��vwY��e��YFC�~����Pþ� ��n'> \o�m�DV��|]!��v,)�O�rX �SZ'��ш��(YY�L���'�%�R��1���ZV�.�9���`0�HcMh,%ں��ڑ���q����2-ς�ы �6EVMl��wx���q�����eK!�ī���c=�<񤣙(�KnQ ����y@]�Ғطk;�ߍ�y�����p�h���&�@&�Y4��K�Mnq��L�jDb7��R��m������ � }��J�n�c?��/�Q�Ӊֱ��9>�ɇDgO/��_�D2D�c~�U72n@(N-�fZr��.�J��)�Q k?�R:�{M�!ܥ��;�1����jinv=S�����o��<�a��s�XTiâ&b��;.� r}F-�AKf +u� 5��N*�� 39 | �(�?��c`n�twbx�A�Eg;�׬i�Q)�ӗ#�D���j@&�D=���+�������~MP��.����;x�C��R��� 40 | u��#�GA*��6�R�y��R�j=�( 41 | �Hא�iC��$�e��:IH{I��������R\y 1����HkPٞ��3���ê��S&fm�>�N�������8��� �2��"��HH� ԋ5����bU9K$Z0�r��!?�G�\�Y��lV�j�:�2���PT��(����M���4�8���r2��B�F��ԭ��`�W@(�=�џ/���9T��JVzGz.����yY�L�B�� ~@K� (խ�T�0&"b1��_�N�"(T�4�{�$��1��U�u�e hif��PW���X٩�)������dk;w�Y7�� "���o�?*, 42 | � 43 | C�|�H�Y ,�~�c1�Gj�*F�G�R�aМ���~��s��VP� 44 | Gb���]j0E5�Vuiq^V�k��t�0���� 45 | �eN(�����IA �,�<��%D����h��9�Q���pI��'�$~o����p�1��`�*�%�M��Wa��A�ZE�� Z2�ږÊ59�Þ{Q)W�f'�Be 1����)�ީ{�D�7�I���� -������D�9��<�A���w8�ȿT��/���n.��Dm'�8u�ؽ���G2�8 S��1�t��8��Q�)gL��N�� %�eZ�(# w�� ]��Z�P1��5��@=_���q��-�}^�E��Ձ��v>��;����sp��! 46 | �j�6ҰMA�� ����o �� �0&z�o��a{��ȕr��@j"����e�zB�é�a��!�t�j�O�L�F�H�5�x)�?�wߋ)X�9�H��g�FQ�t��vCO豠 +o�'v���%�e ���R]aY����ݽݘ�݅{`���~OXWSy�� %y)��1α��H�����Y��Ϝ/0�u��:�, 7 �58��{��ܘ,?�{k�M��S*��KNT�B��R��$l�Q��B��*�P3&��"X��|�cY�P��1�g�ib�a��iQ��&��%���B$�0��~�z��;�閌׶"���Im��Nw��cScAn^B�� Q2�&ꆝ7�}�\ ]�@�|�!���� K��Q=����/ݍ��A �j�X�볹��:l$�OʇU9vCI�2��ڋ�u�ޯAP#$� K�@*�}b ��"Z�TP)��̦a�/ '^D��T����tB�#Y�P�,�k��(��l�0J� 47 | ��� ���7��� �a7�� 9ģ�^K �^�G��� f��LքE�z]kV���~��;���fc�+6�4�M�p�E�ذ�&>c�G�)����ʣ� $�|RASB:f��D6=����(^:�_B1�EBCjN �Jf� 48 | Y�b������bM�UJC�4$���a1V�!��,��;���˝����DbN5Kb���T���H��G�o ����z�U��/�*�ZD2�@'w=�T��b���$���l� &��K�$탁{���;o���MN& ���;?�aYɅ�N"�#��a��0��u��r��x���ZW��R�L��� 49 | r��xAꆄ`�Ej�=��'"|}����|�d;��_~����]��,o�; 50 | ��I�#~�|�&��D& �@B��J):N�� !���~��p!d��^���ʍ�� ���>3d�z�J����k�nab�(,KF8�5�GV�DV:<4�D��"��[)���P�,�4,~iYX�zO����ϱ�P��i��x��T� bD�^�!V�.�$�sϡ �_ �E�C�z��j4�D�V��Ä� IP�R�Za� ���,,�'��r,�.c:iGv|�MDfI,%y �ɩ��S3�-�A��9Y3Q��ehn�2�Lϭ�T�~C��5,m ��`1��8�P5��(�׮~����^�n6Q��#�y���?7��5�t<��a�#<�xS�,�?v��6���K`"�]�LJ�=�k=,�%� �������qZ���p��??�Q�X�#�f 1�]�u ��}6��}.v���Ự��C�����p�����]-޶�f+M�vJ] O�t8���!�(���|�B�p0���u�r=�Q�`��FT3�'o(�+� ����D�P�4�8��n���?l��}�2/��X6,G�ܼ�%��9$�Z�t�<�S��~D��.��C'=���i����d �d���� ��Y��������X�2;�݉�����0���q'P)����BM�P6 53 | Ņe�L�0[_tc���J�%f��Ҹ�/Ԭ�7FZة|r�˽[j�E�P' ğ�l�k`����8gpUõ1i���?���c��h�e;kD!;&H��h�/24� 54 | ;L�S��E������/����1��q��76k@ R"���nN���\6xq����_�Bv�^�3[ g��Jh�"A�L�&�PS�| f�cD��.�o�)$OY�a@�屈ɩ��~�+}rF�bA�^G�=��Aא��@m�� ��pU���� �����h�� ���� #�Z��D��Ա �M�4I���@)`a4G�`��֞��߱���?<{�:2��B�ul !�9����{r��q弗���ޗ"=��9 0��}���j��r5f�2Tp��c�4pZQ�РQ3 sGh��A�>T���j�a=l����35�7f��N�#bqz�-��y�#I�NJ%��K����~�{����>�[v݁m��ў�`�, 55 | 1�Lլ�w!4��� �I�Tͬ��G���~i$���?����[VN���� 56 | ����`��J�h���}-ӕh�Ջ��.W����d��Ѿ�; ]:pi��OM� �U� 57 | .�I@2R ���z;�&@ B����,��H��9�����p8�����3������P�4r��%V۵*�oC�9$��[����[���`G��j����!�= 58 | ���b������#�@�� �4� )�J�4� �"��Ig��/���gJVN<ЉBPVhZ�U��W�I��?�5��f�+�֚3�W��@u�~$ ��dȈ�'� &�L�����{�U�h�;B�bR��E��{��Z3�-��U�Y%�`�jZ��i� �y\�#ݧ�q�P����6����Z��|�k��n��%�)�v}g]��L85�j'w�҉4锑HIi��*8og����� �gRNN�� �6i�i�i�3���%��k����i����+���g�n'+�;�j�pi�e'PH(,�6l�(��4VG~�(چ�4�F�g�YQ�e4!��~>�z�p"C�)�тgV��b�� �%�&f4��עۋzShe�#����T"�~����V -)MK��d#�~����ۃ'���+ ���Դ�"�����U ^��Lߌ~�Jv��s1��~���W �E��i!Ҥ�~��l��Z��Z�H�>�2�= L8���3��'<��0 59 | ����$#���6lt܈F�Pa�eҧ��*�����`�&�^�4��e�hܰ)�~�nљ��A�c ���V�]��ҙK�p�%�{�{o��>�������I�ٵu�y�B1&D!c(=}3r�e.��oz.Ej�!��C>��rG��u���$6W��4M�D"J"���v�8�p�|h�g��d�o8R�h5A���mg�N3[a��K��6B#�ej��!؎��D�$��U�N� Z�I��;�]��,[?����^A��ޝ9��g���+�;�>n�x����5���A|mBD�Q܅�G��]�C����}%ڷ|�O��J "��wL���: ����.4�J�$!���������a�P��e�>%����#�� $�RFi���b 66 | ��?f���B��V�r��r��'7=���wa����=�5�s�Q�-��}���bY�2<�#�&��l�h��{dhɆ[��N�t��N�n���Ӭ� ���o�����7����ª!F�U&�ը>�fw�S�0��d@oK��C>�_ȧ�~*�c>aԘ�M"VqLb�!��i���lP:M|h�����JS�+�Z�0���XF�R X�����a�UHg��Tv 4ɠOSV|�=t^�Ѱ�,n.��z��M���� 67 | �j�8� �吥i�^�9,��ȼ��a<�{ۓ�P��1W�Zw߁a�}�}xr㓨֎ �K'�X1�,��Ҍ)WTp)��|�o W9�D�s�=Ba=d�X�A��k~�_o�p\�YT (U� S��9@�A�$��[�g�@�ʽ�l��΃H+`����۹����x��GP�Տ���9@~�K�S7���#���Ҫ�{�����2�[��ҙԪe�j�Q��,��:I���a��d�I=�a��L=��J]�419�]�w�%��-!o�҅����=�i!՞q@OU�ad�6�����j�/=W(E�t���3����47^O�ġ��&S+VQ<8�i�@���hC�/��h"@�4M8eu�6�a�VC�d�ruڦ���#صu �А��hH>p�6����yŋ?��Ϳ��7�S����]k|�K����'G1�g7*�2XJX� *Ԏ0���GX"��)+�y�At�;�AQ^�x ���(�*Y�u?� ��2�=�Hwd�4���f K^�S?��D!P�M����R� ����gb�e�O�i��3�ÎL���c��̥g�RI�P`�-�sO M�1άKF6_D�Z�9 68 | V�,NY�}CC�:� "�T��w&���Q5��Rz`h]q��@�ñVh�ub`�bS�z�U�6�(ܸ����+j��@IT�1���<�q����~�I�R�c6`�=�`���]�! �>t����&p�����e�e�5j�wB�t�6�)6�� 69 | �R[�x�U�?J�GC�� �fh M4E�8��ܒ/���(������p�T(�����}�� 70 | c�c\ 71 | /1M<��x�׿Rx��5�����b�|3� �Ա�xӬWvoے9�?P�A����j�p�xA�h؀�^oż�\d�t`�v5Cg{��z 72 | :�;�u훆7a�/o�/�f�S�q��f��} �dAlr2�bA�\�ְPk`���xɪ��P��4P�N�~b�g�y���2ng:5u�6�KDSZ q�ϩr�B ԬK���ܹX�j ����Z�|.����:�4#��:?d�ʥ���`α�edy߮��}� Ӊ����m*���N��t\���U0�څ����Y�@oN=��d�e�0���0VG�����)î�멍�u3r���K��� �Z��t�*��+�R�rJT8R�\oqd�O��;�)�>s����)�.� yy�S�����ku��K������? ��%K�d�J$��cm'�%�?�;s���l 73 | :�\Z���z���x ��1�����ᑧ7>ޞ��$�l�D~���f&)�R-+�I8P��U@��%�E�������B��@(��1Y(`�Ν�֪hoo��� ��Dy[< �$�m�xΧ�8$d�iJo�p?3��j՚�|HJ�A�t�F��r�����N�Bd��89Ղ���(��e'�֤��@���4/I_��r�ވ���dd' 74 | �� ����� 75 | S��30>2�]Oo B[gӱC�Z����Ϋ^��7m��'��t������|f����s���R1�Ԏ-O-�U˚ �x�j8h/��J C�z�� 76 | ��D�k�hR�@�=�n�����U]װl�b,Y�Z���ۅ~� @n^7���t���Gm�Y�&�oqR#f���48�9>�\WN��E+�P� 77 | �� TTq$��'w��W�2'������Vm��C*�$#U,#],�!�fՁ3l�r*�t��9s.�c�; Я���-<�N?|��a�ۏ��� ��m�6�R��5V���`����^���Y�¬�^�v y>�U�����1����=x�m#�؛I�f��O��� ���l`n�����̨:1٦�C���1��P�塶��5�d��m:�9"�Wh� 78 | �;9����3�x����X*0u�@�\A��d 79 | �d:����~��(�Jغq&�ƎC�_ 80 | �C?��//�\�������T������v:]�ɑnɥ��>�����=�L3DޥtS�A" �i��iA74�PwP�EX����(�NW�jx�u;���, "Wo �n�rx�1lz�i�:�4 ��{�t��s���P͗��j���M���g(n)|FF���b=�`h�񈐮!�%�?X��o8$���� ��E�z�|F�B�����ѻ;g �e�Wc�Eǥ�d1?1�{���ݻ����ڻ����@��w��dﱺ�i�;sz��w����t�����L�H���j�Z�4]�bx����Z.'�&��_���ܾ�Z+ 81 | ȚiŜb��E�����ى5+W���g/<?��m�L f�=����&/� /���tZs$�/&9�A�f ��0;��Bd��mT���*�'x�%�)���TzW����� ����ܿ�L`�i+���SBdn�樔K��on+�'� ;��G\�z ��z�d���݇����t#�y ���.��؊ёA I�oP3oT�2"HKBZU�����;!�Ի{�%e�0/xL$��؈�j' 82 | �HX�B��882���\�䀁Lk�n�C��d�t>a7�԰Z)���2V,4�jvHu�[���j��Z���wP���� �s!�ˀP9��d����{�(I��:�Ho���l{7��{\��H����˕D�D�,�pE�h@�+�+�gI���v��RZC�$:� f��WWuy���G���&��xY�=�U����̌�"�{�3���r�x�H�D%� ����,�{��0 �-��yڍ&�F �h�p��e!3��Yf1e����W���jj [�mL����f`���(��rj����9,�(E�~~İ�zK.oi�TZ2�*[��-���N�  rB��\�P�7(E�\E�R�˔��0�<��@�E�c��M��?:>�KW� ;55tGA;���^[^��[�'�Cb�F*��,n�[�]���R0>�����OBvb�+�XY�G����;7�ڳ�]�R�(�Y�&�:A(�6@(��%�i�w 87 | ?�~��<-��ő%lŷ1Q�@���B��W/�2�y������ 88 | �H��n���ń���x����|�$bHN�!99�h:�爽�*R�+ϊH��h� ��7-��*�G�����޳Տ��d{�O���B�����\�٨u��a�,P�4���L5K���L�DzX db�9z�3��rw�� h���g�6�¬��e�^�  89 | " wG��%J�%0-� �r����j���̢��@���Ź�K���Ò8�;w,�>,�t�=�N�GN3 90 | {z�M/��h��C�&��2�V[�"R!B�+�俋�Y-7�#�(�]~'ϝ�S�!~U˥���l�^+�9ʇ�D �g���+9t��znm�F�(��Ȱ� C8v�,���ҝYl�.�w���]��bZ�l��nv��p<��oh� ���ۥݝ�P��9�5�NU������n1��c�Cz":`�!��>�� ��M�gS��J����i"V,#\�s;��A8�t�WR�W����ŋ8s�R� 91 | u�_�z��|w6Q*�&�) U�E'��H�Д�l�Q�Z F㈤'����2>����K�9vwo�������v�r?an���M��-c��۠↡�n(L 0z��zu�h�7�\���ڊtBH����t�p��ò�o�����S����{ �[A�XA�\�A�sD5��!�׶� ��}}�Xl��j5�k s���f���t��rщ�;l�]��]_H�i+��ֈYN<���G�������(���҇$��)�E�t��[�:ڵ:B�(B�,gȐ^�Bf��:S��g�T�z�r�(#��2!�=k��"/�W}X�|�\�{'\�U ��\���vHpB�tw`���q}����Z����±�Ὄ@'8���Ob��u�.܅iZvӽ[�e�U�x��j�h��c'c��U�����i����Ƞ�:�݋2h��q 96 | .�!�r��>�[��4� ���Q�'�=�u�<0�� 97 | �r�FmO(�����.� �_-���r���2�)�0D�;��u�u�i��t�I��j�������LT�Pdh� 98 | �q���8z� �\����e;��x�]~��C�F��F��h*�`4�cqsA�%$�k(���i(��L����-�9�RPK�QuӇ��6�3ˡSĹ&�?JyK�� � �)i{���N_����>:|��z��|�N$��Q� �^v��K G"'M�x'��X�� ��]��]_��IDF&j����'p�ʓ8~�,n��v67����>����vP�Bu�#D,�@��_� 99 | �-0�\�vȬ �h�twI1�c@��9�!��O�Y���QP/��pE!�ޫ&��^�ԗv�7�\�W��fw`�c?a�Ϝ��O<�D29tGm�[�Յ����Z���6���W��;pf)#\�d�A�:(�j�e��*%���X01�Hz�A ch�djd���=�����믡���r�E�]I%�Tw��Fy��`$�h:#�}��C��Ďm��g��Hݔ�:NJF���,T��)�;��<���#m ��CHk�5��n��Q�u� 100 | �ZD��F�a�飇��SOa4���Z��Z_�Z_Y 101 | wr{��Y4O��or�6�����jqk̫�� ��C hUK�H*Cé�60��rvr��k� �}�jg*��Q,'�({wk��h��'b��� 5;#kn�ou��@�DQ�؅G���6�8��aeN#�Ϫ�!�W��K[����� ��n��b�]0��ˌ�㡷� S�݋����b�-͇Xp�4-���9�x䶕�u�r;K� NE')$&r��ƻMR��i�wCё 3O Qtz��qL9���ۘ�~ �zCz�{ 1�>E 102 | �,��U4*5DRqD�qjH��J)�I) BD1Se�y��# }�E�8˲S�Y���n�h�8��ERI�Q6I��ʩB25��O>�c�~����\�� w�F]ްtϳ��ď��[�j�����ء$ ۤ���;�T�S&k���Zn=`w�L����v[�0p��9>y 103 | s7�c��u���'��v���, 104 | �Z��Kh����$���4�)n�&( 105 | �;����bja��"Ih�zJ88�>l?���Dh�%��H9�X&���-�� E0�+a�>����ÙK��>��U.욋s��J��b�����C�u�R�]\ƒn�fe��W�#Nej��O�M�a{��1N��Buk9d����N4���8:���^~�x�^ Kw�; 106 | ��K�A�z0Gt��J�y�����C�E��D�i���o# 107 | !��  108 | �+���"�̸<K]�<�_,�np�:J�'�� ��]���UM��`g/?���=��=�e�U���;����n@ �r��:�=�N9�S���v��J��s^bܤ���r���ݨ���F����7�!��D�1\~�)��w~�CX[^���^Fqw��� 6�%�w-_F�PA,�F,���}.nj� p��bM9c�u�c|`(�j/6�u�QE�F]�|���>13�G��L�L�Q-j��K ����A��"@Q�ZA1+AO�{�7ZU�������%�US��I��2�K��}�[�4+�P4�E$5jR��a�f����#X��ŵ�_A�Z�gg���rAŲ��gW��̦Lĺ�Dvd�/N�om���زCk�yX.����y�)�!a���HJ�=��*���<}��z�V́�̂'��a2T>`���[��G�t:���Bm{ͨw��2���v�@ ���/��ٳ��꫘�v f۴o�jHX o��h,�!�Yop`y���g7���6��u֩-��� ���[�;�I(���Ņ�E0����yk��m�R��$��y�xr�꣯��:ib墓�n%���m912T�i���K�K��&*��@4�hf� �"Cs�P$��O>����_������A�}2p�A�h4����:�&��-��dO��8��e���籶�ԏ= ��s�L~jY7yB>'Xb�/����u�� �(�S�E(;{��Y<���#92|Z�v�i.����W8�P�!�Ƈ4��}����Cvh�#���R�4�箧�'(p��^�>eR-���.�/���b#Y� qXrdl ��o���kx�����dr�n��i�����q��kwyfw�yX���vm4�C�C$��A0u����]�N���2��������B�3� �\�y`YL�+���H.���z�Iv=_!|�ۢ�4�#ŏ�]ŌO�.�v��?_���V)�f%�T��,�����|��|7����k�=�b!o�3�}�I��K `��C8R3�yX�J�U%5�rҪ�������8����8t���+����Ғ��809�|~ T�3;�L� ��! Ք�4@ �@s�Hi!)$�S��nH 9%"�W'5ԯ7)�Dcw ��G49J)��#r��i>u�o\�/��Z��] �63-�^��2�����] ��ú0�p��_?�����['RI<�η���çe!��kkdi��Ѩ׽9�+���a�2������ga���J�:`��] 旮q?�d��CxI��;�]!�P��Bmg �b��G'�M� �]N�?��/��k/��V�eOذ�*B[��h�%J�K2N�h�z��U� ��#�H8����G�'�,��6go�j���jvH��F�������7ڽ�TA>��6�E���^�@{��z�вT�%z�� R����’>��m��皋_N4�8��y��-d�&��9��=�/���f��2Aaիȯ͓p<�Df�2B����x O��8��#x��o���[6Q a���9J®�󰞓A��Ed��U����g��G���{B�Ҩ��❛d{s�������8{��RM��\я��㴒�����0���(��*��H(]Ϊi�;TA��� 113 | �h?x_ !0ke�V�F45�Xf�2���752��|�w��+��[_�:V���*� 6K�g�� 114 | }J�ȉ���w"31>tGm�Z���mc}y�P�!a�%�>��rF�R R�~�D��A�`���ϗwX&�gX��_��( ktel}�k����ʟ�ms�f)�F�h��c���[bE9;5�~��`��]��cws��JA3��<,�X@��U;�513�'��nL=rZ4&]]�'��w STdw��" 116 | ������������������(���nɟ��Q�`҄�:) ��L0�<����8M�%��q����9��6��=T�ݐ.>�X��� �Hd�i Z��D���ލ��?��� n��:`���a)�6g�?|�������Z.a��M��l Wx��I��?N���{�ES�RT�)�G]O�������<�*�.��CI��S���I��NS��f�V���N����$��ƓI��>��O>��� 117 | �޺�y�M�����x������iY��:]��E�VW��[�qW��Bz��z��jjNr,VyE/wZY���;����R���E!-(�-�8>H՝n�¿vP���*���H4�A|t�#04�͌g���/��/>�'��OT�R��t��O}��0yhf�j��tin��--�2��bN}�S/�嫦�-r��)E†���`�����*�m�i?@ ��&�mu�n� ��||�o��P ��6j�]�@|$K�I�0}�0��?�!�߼���%䶶]�a�s�L���o{/��9}�]]�K�����r�I�(j<�O����W:F�y�?{��E���w�a���q+� v����Ns �ĭ���{���b��]��Zn�B�$�&K�� 118 | ����乳8q� ������(� G�mQ"����{�^�4|Z���Lfo�F��m�覵TEA�Q7E����i*T��������-��o���: tY�J�}{�RG�VG,F2�HSpI�&'����%���R��7�M��Dqk��I�M#2��B \|���� ^}�y���gЬ�AA�F��;ކKO\A�в�noa�� R-�ׇ8��sj��h��5$�V���0J���V�<�/ﰎg,3���L�H�����:�V�r�j ��$��(�s ��e;�-�h6�±�L�D���f��E��1$Ʀ�� 119 |  �p���ăW��_�B�{�;�E���Bs�n��۱��2HW��M)��� ��o�@���gK<�L<��f�S�X:aQ���'Š��L��N��R���t 120 | �Pȁ#�y~XZ��>+_������Z�+s�$�H�M!ބK4�{��ç#P�Vp�� lo�3�!|���r�V��U[������xe(ES�)�8��ò_pXW}X>)��|q�Yu�� h�Lln�"�`$�D0�0G�i}�7Կ}o��e�V��\��h:�dvj��a~� ,�����(�V~]�p�=�C�`(���̡$It�Z�xMJ;4���k�F���L#�Jj� A*�*�R�8FR�nܮ_Q%�V!�0L@݊C��] �N�b��.I��#����^��×e�ty�Y���e��&��D�\���7��R>�h���[�FRg�7����~�h �#�eVE{��X*�\�!3�D"�|*��&d�Ѩ(���~U���]*�MT�9��L"1�*]�^�4k� d��M��r(��.��Q����PWZ]A�F ��7��!��<�7�*��%��F��4Ml��Q,U�M"��YUPl,�ԇSp<��2��~I�=�v��5T��$96�x:3���hB7�V����Q�0��]z� ��T��b��r�֐�B�R"���e��+톊����Ug�&�h��o4�X��A2Cf$����I�nE0w��a�����Dac ��6Ie��'�Tg-�lc��uR,��9�fQ Z�-���Ha�h��`'&�m?�v�:/�o��R[ǥ,����� �°��R 121 | �O�\�u�@�$R����8?����<����F��y��I��3E���Q+��n^����cH�H:�x"�4�`k�[�a�� �k�V�߫�F��y��_/=Д�㴋v�bc�E�[(�X� �I#��u� 8S�췃��. �j����]-#W��Hj��4��P�Q�a�� l,/s��ԇN�7��4��*$J���㥌뽬�?ޛc�kH�y�}-����[B�X u �)�N�MMln�P���E$r֬x�B���_�«�D�^�P�E��GrdɱI�}�m�ZX�������4��ԑŔ��f���e-ԫ!�B�T��R��4����[�~"�ģ��"Iv ܜ��xt������&VV7�J&�ɤ�=�p�֣��l�&>S%�� 122 | �=�ja��.�� $3�Y���Zti~�,��B�Ն�q7ߜ]�i�C����z�������[�~���.�:�s�A��Ug��Sh�[�����'F3���V7d.�ʝ0y4���4 .,V0��j���G������:;��Fqk��6Ie�:SA~+�t}i��ݸA��o,���E����2H�|3��*q~ PU-��[�~���q&}���c��?�ҙ1���2�n^�u�<������n�bٱ$S OWLK����{������B~} ��-��A4�Mn{ssׯ�J��bJ�(�n����=�K��i��t�I7ZZ/7����[�~9$�Sa#�q�P;�kQd�'�� 123 | S�� ���ݝmi[:76��m�ol#Z(!�� �H;���Re�e��}��r��� �F;+�ē�q.(���΍���lK*�"o�G�v:�l韃���#�wYآ(��1�/�;�а�*���#��U�G�2����w��дw>�iF�F�O�R�7����T*�l6�P0�P����}��(��ć>�[Lݓ�h�*�\��Xj�� ���j��;ׯa{}�9��y}t�@�����*���[�E���c�}j�k����w����Š�b&�en�P=�Eg"L�T��\� �E&��� 7��!گ�Dž+k��|{�-�,�Y*"�ɚkہ���Z"g%b�v�~�h�kQE!�B}�*vH7V5��Ĕ�~���e�5�ի��i�H��,�*h8�@0�@ �-z\�� �$��v�������2�=�G��~/�;ݡ?�Ŵ��]q�Rn�ZY���4�Hgs�z)��@����V�X\X���Z�6w �A�a?�+�~��_�!r\ +>�y���E��{��Բ:�(�����r�����7ճ�3b��|?�#���~=��>Ku�ј�gH>��r��dz������R��O�ٟt�]���K�w+��B �b �l�lK�:$���T3��a �����i�W����5Ecn��D�p$��b����:� �(�Z��D%�p�|�T�%@a7���;�ZC)l3@�?�TY(����ų,���m��.�T,+r���_���-�����|[�����q��W{����H�r��N9b-�o2j��Q���o|�p�F���*���$�0��-����� �V �K��c���"��~��ݱ�~w����O��}��C�������b��Ű���/u/OR�m^($��5��ԫ�[bߪ'�H��s+���G�VH*��W*U���0�Iar2�`(�������hi�*�EDW�O{�G�tEw�������sXI���#C���K_��t��u�T/��PE�*U���%� 124 | � 125 | �uv#�� �Z�� 126 | (�K�� 3�A�gn��ז�@�>��1����:���н���Y:� �Y�ɟޯ�)~8z���:(����C�� ���Z�D���0#�J'[:*@�:��.Q�\X�3�, ���� 127 | �����Hr��sg�ر�JS�@�ԟuP"x�Hr����O9Fh��C�B3���������֭O�\�s:����ʕjg�w>� ��bp���i�*��[� 128 | Ly��d���hbia;�8ff&�E�_Z�E�K�>�D��W�D"F=�\2g�� 129 | )r�߹k��s�����_�2��8T��d�}X��)N�����P(�`�M�y=��E>&� ��(�Jݪ��^Q�p�� T�U��Z@&�������o�,l��K[�����z�ĺ�1�/}T �'9R);�t��g˒�i�a}`���^�N����9ƢD#�J���.�'� ��,6X�J;"�*Xh�Az��� ��M�fw'�B����,�'��g?w�h��Q�������$ԩ5uJ� ��n�"���\���*���B�E�� ����a�؏^�H����D"�r.P��7��X�C�U���^8��͗Ͷ���Mܺ6�b���~Ǿ����aM�P'�ޗ����X^�`:d�tuXi�E��M�8=��~!��p�[UM��2�Q$�q��h6�̅���0��%lu�1���Z|H-�Ą ��-$��lE���w��L&p��4"��/����b��'C�e=2Cw?�E\�P4�rB&��Jp#S��B(�wX )¢K��L̚�m����|g��"�0���1�����u�yU#u\e�b"��)��Bj#��PI��I�r��[7f����v��mEe�S�wA��ސO��]+m��e��g���i�G�~�Vn�k�lHZ8^�X��� 130 | �2 131 | ����Pu�� A�]�)��E���J�D("����|����qLL���^O7A�%u'�r��(�h���5���׫�}����CINr@�W��޴c����$6��fRH����)�R��N��$]P�8��קQ��ů������E,�>^%�����m��-B$TL�����:v�vp�� FFӾ��ը>�I�O���k��gY�|˲��{��|���UbU㟸��}TB�4v�E�;P ��T�Z��<��\wZM)�ᅊ���<�8+�H�b�M�J 7l/�� AeJ~��z��"�N��DcQ_�+WX�tx�'��@g�����^�;�ޕ(�j�_���/䰽�� ��)�;�I�㱿��F0sh��1�-��C!Ċ�8���u��/�����HU��W����T(����|w�v۷�|� �̉��rd`�n�t�t9��*��{����Q���b���ʅ�A���U}���U���t�d���s�~H,�*F����bI)f$��C@m�=aK�"��<������6r;��>4�����N����?� �^ N����O�"(�߲�L�V����)�uS?tnKD��yX��䩯%2.��xN�%��p�@v| G�������9u 7�����0b�4��X�3�N�*��m+����� �w ���q��>�A5}DqǓ��,T���l�uV��HI�G�c�^��/����"8��K 88H�����D�Z��V�fK���b�.��I�PH>n]��ML����� ��"���ϣQ�JǷD�V�!Z��q��<ң)>~�p�W���EHw<� ��TawD���, �/��?�W7�stH���~y��q��� 132 | 9,�;O��O�p��a�O�� ���^k� 133 | t_i�{ղ �M�yz�)���-�N㑷=�]���UUA�� 134 | �E\�&�W7��s������`�����c_UܙKq IDAT�(�E��D8��+Bbu�^��i.��y�g59� H�GS8v�0FFS\)�l��1(��բ���Z�/H<�Dz4ýf��QD�1i��Ȃ���a�ꖅՅ����S��}�M����>���ƽ�Bȧ �:�.%�0���B�ž�t�R�Oh��h!�_n�;yC���@ ���q�F����A�ZS7��ܒ�{B��e���Px��M��O���28y�fg���D[Ce�U_��Z���o���e����%9FYD�"�,��4߫�y�n����~�p�/{0엫�\�ޥ."i�(�ƌCno��h40 �d҈�c��xW䦔" ���i��lo��l6��_Y�6��I)>]������.�e��5�J�3�$2Dp�S4�/�A�&�\5��>j�G�e��-?"��K�(�ԥ 135 | Liw������������#B?�+R�ev�@����]��d2#GCJ �t�Z^Ўe��D2�D2���.r;yP�x���* 136 | Z�f�嫥��c١n��.<�N_��ݝ|�_C�Z���f���i7�#ϔ��\`���,�A<���}}ow�Q�f�c[G�T��|�iӯ�+��(�h�X_���ff۔r��Y=^��=6����G�I*��}/a�b_�CB^A� ;m�X`��b��1\|�1Db1L9�w|��eԡ�8�}�_�v��'�~��3�� �sp��ϧ0k!y�%��|ÙL��0�j��\�aei�|����='q+�v�& `��$��:�h4*���d����o����l�����) �:�{MfbSG��(��Ó��}����)Z��V�;����^/T-��������B�D�vۃ�G���,�\ +Kk��k�=���Av�H,�c��b��B]���<eB_����|�p��-ܽu��W��&��Sl��f�+y��Iyڧ_��<M���=˶�X���?�T����~rI�P d��rXxj����Y�4�J��w�makc�B�� ��~� ::/Qv��M#�N"�����3w˼�t��p�)�x��gq��7`�&��6u_��3�9��X`U�X2������������"���¸�*! �P?�KUb��@���B�2�Z��Q[ZC2����(�]Qf?�n�f���"=������"�R�zU,HT�E��L�4j5����W ��X�llH�it��v�`is�į�~CL~qӗwz?�+�U�N>p�w�Y��o�w�a�>+�=�<�j�ۻ(�K�NdO&�1��� J��-��q�<{��"6�6;Uk�r6|W����7o�ؙ3��k����-,�r�]����o�=(�+�w_a������iK�����=��oU���a VL��yX��+ �d���la}e��kh���C_u���F�#8s�4�&�}{��y�`se �o��^��0{��r 138 | ���T�gXucs��Ų��������9�(��-�/ ��d�Ł�?(H�-�) 139 | ȍ�]���UU|b�$x�)��3�b�Xtr�D�� �*�ٻ�3G���b���<�����Y{��UjX�����-�ۦ���~~ :~�/�A2�`��杉ػa!Vح�=�<�p?��Ji�Sl#qͬ~(o�� �{�D������G����Zh��!]N�ps��׌��IG�>zԱOE�E���j�rܽ9���<�n������h<���N������]P@#)�{� 148 | ���� 149 | ��ų�]�������ۚ���b��`u��u��/W��f������_d�sC 150 | _ztT.NA?�*NgX�bk} ��<&�Ǒ�N�8�9*��4��G�H�������� P�r&p�ńm<_0�dPd���E/�Ȼ��t�G�(�4 151 | �R�Qs|�=��cI�8�;:��L酨YZ�;`n����vےy��gm5[XYXE<��I��ae�]���� d&2X[X���.WE� �ET�Mi�[,T��>���cQFȱt@��[n�Z�QAJ�i1�\�:>�!�~9���ج��?�����(�r�Nl�h��JR+)/�5�Z����/o�l[݋C�e�6���8v�� 5�}N�(r$y �R���;T���{�zk����}~P�Ňw}yQ����;p�g��<+��;yܹ~;;R!�}�ɛ��d\z�NG(�lQ��1G�:�*������CQs|��x��� �G��/��|�4`�b��s�I���U�ر5�%�y�k�*�n��>w�� � 152 | ���h���;˲����;W/ K��?6���G.b��4 �P2�S��~�'�w -����T Tc����F4bN�Yh ��G�N�_`�cvb�I��8*���o�Q�!;5���El��B�Q��J���)�x�ge�2�f+�ˈ%�>2�H4���A���`|*����n�x� 153 | ���� 154 | �r*Z�m?Q}p�E��`�A���{+�*3< �A�YN8M�H� a$W� PF��pua�6fo�y[��� 155 | A�V7�J���+�2殗1:����x������!�� ���H��آ���_��-�L7?�9�ZʹS�{����5dw�B�mbO�R�n�0{���v�8��~B�L'q��8v�X7�‘��Ll���C�I��%L� 156 | 1ujyR�W�3`��F�Dʖ��J�O���ݯ�Kmg�/�ƇRK�(vH�>+'�O�W��5��<��jc}y����L#5���قXvz�� �]$S����==؜�.R���*�:�L49��|���I]"�� ���\�$Fw��b�c�q�|�����7=M6��@Plt�G�:�C H<�Οe��b �&n/ �Nb��4"����~��N�;_o�9^Z@�1��1����e�0�!?b ǡ�U ^�F��%�s��ro���7|wDEba[,��M�!��f����ؓ�dgD��6��XM��!f)p��/dqe��q��2f�����*̶9��pX@��*>F���� r�G�^���� �T�����PV�����������w*:I�S\H+�0`��1st�|�|ɞ�!� �X9*Ä!/#p1f �YY�γ�'u����l� ����C���Go��BDZ���!B��\���B:m�˭*��(u&-�L�y$�sc=�ϗ*y��%�u��� ��!�P7�>���$�I�sT�e;\ �NjI;�+�K�^�Y��J�z�<��2�zw;;�9v�Lʗ����z�NH%�M�-�ca���Ӹ����#:����'.����.@��.H>��K!�w9I����b�H���c�:2�H$´O�*�ao�S ��*����YA�� �k �ߘ�ܵ9Ԫ5���'�;��/��:) 157 | P��sz�vJO&Q5��Z����_tX�����?=�&�`���&�jc(��F�֏>�^�YK�"n�v +s�& 158 | ���#o4��"͠т�s0e?��a��P~�З�-�,0��rP�<��?���ظ����:�*�� 159 | f� ɑ�8 160 | ;y�nT��P�9+�t��J!.u�Y{a�ea{}����� ;��E�����(�(u.CS�>�DV�x�5�T p8?B�v�I�R2��}IF�O�GȾ�$��� 161 | ��J����=�]PSfNH �$G����F�\��YuJ���^�Fq��y4 �ݸj���Y{_�V+���^�¡��Τ}ٯ�1�t�������� ����)�( �r2Ǘ�'P�h�;����_�޴\�Pr�%��`(��#S�U��Y�F��B�,E}V{w�k��>+��B��w7�H�����_~�i��<+� �W�su#�:u�X̗��z�����=�/��;�X.̏J@�J+>��SR����!_uU�J�p��<(�K9�� ��>ʓ�;U@{��ƣ8t�0Ʀ�0 "]\i֖�;1�����/\�;+�OO��凤��v�� ����+�Ƌױ4��v���~]������㉜W�m�����МH���}j�#p����_��V�[XJ��q��HgF��0a��TU)q� 162 | }��Ç��?u�<߇q�g�.hMcakuo<��V7���y,��␓95��beu��Ϋ�Q�U�v�ii�A�߹��!� ʢP?��9o<�Ո�@�006�E*���������L���9���q8��KgF ��l6��՞�a\B�����:��nciv[��8|�ҙ_��Cjo@���ꆘu��i�Ux ��h_��� R�Z{�*m�������a)��� 9��(�U���1}�*� 163 | r��h֛�>k�zݛ=$6@�I��^�)�! 164 | ���NQ��Fp!�g�-|��t��V�H�^�Z����ncd,�ç�!����o���O����O��jx�U�BV{�:�K;��ިjE��"�:5��ଏʜO"�@"G~�����.Ɨ�;4�>���?.����:����x�t���;�/,_-6���ñ?v�(켁��8|�Hc��~�����I�DG"�Z� 165 | XdQ�yvU�P��� ��}�ϻO�sX�H1�e�h�$�yP�o ��8~�F�b~+�������7o�;)����Nk����A�}������������,ڟ �\����nf�0ڙr��� ��[�� ȝ^;۫���҉�R�P(��ҒK� <�����Ub��V�<�D�uq�AdN�!� �z��?<�cg�!���S��Riհϥ^��_|�ّi5�x�g� t*l �������� 4�����&e��핶Z���~��sZ��7�j�Ž��UV�?�Y���I[�3��@w�+�r����c��R�B1�w��j�.�J�W$ő�GP�-c{m�f�'<���ʏ=u���y|��?���$�V�Q��� �v�����jK���J��^�R���گρT��w�O؝�%D]�p ��!g���8���I�K~�< �߿�������>��p)����i��D��9~r4��H��]��T/�Q��ݝ��"�Ţ�sPJQqP�H�2Z��B�f��������p>��Z�AD�}�_P�jn*`�n�M�r��A��<��kH�Du:-��~�_*:�W ����H&�fI�� ��3106�E:3���M�rG}VՈ���5L�)EPX�J�Ž'������L�e��9�ݸ���LA�e��O���Ʌ����JX@m��%K��~]�׻=~_��/��$�����K��r�>�+�%;��`8���p�� DQN��e��.�������g�-�B^����]z� 166 | ҙL�����@$��Il�Lm����w��_"RG*b���;Â��:�0�(��N���8[�Q�@�� ��9l;hȫ����[&��������[@Z^:��ٿ�%b8v���B � �u���g��:���5�T� �#��ӧ�\#Ʃ��� 167 | �f}��X����x9)O�!��\,���z!�c� ��Uu�Wy~��w=��G̾���~�2O�����^�uW:���iO�����vʑ�Q��t��q���,�'8c�\����/��J _/6�EI)E2="��GO��WK��u������X:si��:i>����(uѡ��.�!���~��O(� �?#I<�'�X��a���>�A)����o�_�v�%�:�}�f�ӱ*���~��i����-���7`0yd 168 | #��Z�@1W���Њ��׫-����4�Ӌ7,�]O���܉�p|?�wC�I1C����'�� 169 | �.z�x�y%]JB���%�PUae�N�F]�>�� F���7��9T�ҩ=�D)}�}�W��R���8�yC99U�a��� 170 | "��.��a��� E�8|�(F&ư���Z��T����!���w��]LLO �)��ED�����Odk��l�XU���-���0|_7>'�� 171 | bY�~��N�g���O��j�0Խ,b�����'?� �(��L�Gt �C|��z}���9�N���3�9q�O�*r�R�Cl��~Z��+]��Ύ�Ta��^����bK4�R��W!ſ�1��1x�i��0�O�A��©��/:9�.z�B~���x�\/�(�A�i׶�<�+��b�XA��mְ�v4˴����������Q���k�'�}�Ï"����g����V�>'<�SC��i]{񍐗�eq�\?u»��p��� p����b��D>������>�x]7L^����z������7�rV? 172 | �d��1)�x 173 | �Z#h`��!�Mf����R�(|�<� J�T+<��Ʒ����p$�٫�p��-E�|�?d��p�^���5�}_y��WH��)�������o��O��3����A�������O)��@����Ծ<��a�a"��(��6��F���RI����)��T(p��li�����u����ߡ<*�x]�u7`����}s�_ �#����!�ׅ�-�L1�����o'.�ЄKWP���s�('�>�A�ʤq��s�>1�@0�9�]Q$`1޽�4M�Y���j�e?eߜD��w�� �{�յ]tm�7�~R7���`�� ����uV�a!��?��_?[3������8��؞�� �ݿ��&�ױ��c(ix�(�Q��H��f��\��'�c?H�Ƌo���^�H>�=}�~��[�~P�Y����/��ݽ�\p/o�7)����W?@M�7z�����F� I��S 174 | �C�*��O�� w�@ٙ ��YD�P韐����d�a��渇�̣�ܖ낕�����{f��x�en^?��f�O@^3@~���G_�����Z��W�>����(��ƭb ;��牡�g\�:V,Ù��!���չe�M��M�j2��P^)sX�;�uy���Ke=Z��V���Ч窺����HΏ����7�~�6!�7��|����K���}m�2 �s��g~{�P��_(ȏ4�!~�mb���R �K�\^���0V�.RHl�+�j8�S�o�x5�nS�>�]�L�9嗳˿����m?@�1~;���/���-�d�o��=���˿�p�]�Mj��9�#���8|������laun��۲t �r��������m����� ���}�� 175 | ��������#d|������doJHLܒo�RJ?��>���KA~�'tѩ�u�gԇ�ߡ�Y�rs�`(�c�Ov���ETK��� QrC�u����_��9��w�7sTM��c���`����+������2��5��`B�O|��>u'/�ҏbT�` 176 | �^�y����Ѫ���X��K�4�h[ozƉ�K&�b(q��M�$q�� 8v�� ҉Jr�l�C��i�K�'sB��g�4�V��*Юzx��%������s*��6 �~�!�#ө򥮳�+0�V|ͳ�����?�֦��"�%�(%�#��2Š%����@�T� P=�ծ�̜:�!�om�n���~�����_u\I�|��a�A>��IDATPB�ǃU�_��O}a�s���̡���� |��?��g�nDB� ��yl���莽�y�����ku��^D~k�CE=�B�+x�ۼ�S�o��zpE$����ᄆ�{-r������l�����_~ �|Ẑ��7���c�����P���ޗ"�_�h����k~!��[���T�U��������Ҿ�����/�������`>��~�|ؿLM�_�؟���Ⰱ{����_�2�}⫯�}�����1�Ppg ��7�\���:�`�vT��� Ao4��i��G�?<�P8�J�ԕ���>M�:�=؟�eM�`?����9P}B$��;��֗�k?�%�Q���'7�_V<�d�6��;,��'hr� /6��\����O}ʈ��8˯�N�8���� �iEg�S�^R6���\���O�Z@�\���2cw��[;����/���^��(��ڬ}�����οr���C�n�[�a���~��F�G���h��za�U$��V���1d���6��(�7���>��o>����������[�����ٯ2W�b��M,�3����:����+<����P<� 4���������}�v�н:l��}���"R�7$��������?y�����,�9�:��þY!��io/Z�_��R2���ȑL���(`���X\1'�,3{��BfQ�H�e�d�琘S:P�7��_ y<}��1i��������~��_�F-W�>��{�`�� 177 | �'�E�E�T����R��_ ���r����Wl[��l�� �����Ğ�\�с�u��^�<�Se�;<ѦO7i�<{��5��?���J�U�xX��n�k�8'>q�D��/���J̌~9����vՇ�:������Wa?%�Ͽ8�f�1���z?-̵�����_�㤢s��`^�'��9�[&$�a���q"� �|��~��������G��h�1Ji�^Aeq)I�����0���0p'v1��v,W��!�< ��m4I*Cs�:I}^j�j������ʗ����<��ozj�VpX�{� 3�Y�h/���#��&����p�|�q[�n�z�q�9}�В6���7 ��^�0�R��|5|q4� ۫mc�m�yL���F���_��#��ͯ��u�C��*��7�i�̐�0;*k(����b��|����N~��M��:���]��� ����7�� ����;߽����v;M���퍏.|�o������Đ���{�+�ẁK+�l88,�������_���M�92IvH��;�\ST��@���7������2��W�rlO����P���(������O+���=gd�R�,�����a�8����K���u�\.c�3/\����T���E.�*�}}=�D�29�?B���T] ���j+�Cb�D�� ۣi�s��N����w��'Ū����^���>���W]I�+�+�y�|���n��S� 178 | ���r~i����W��F�M�2S�<�Q|��I$`lΩ��(�vV7 v4���9�{0�=~2'��B�����3s?����}�Y��}-��'���~tX�E��l��� 179 | W�[�n����[�ܗn}.v"�b|<} �z��j�0���o SBj���Ɓ�N{�v�՞��e�g��;[���/��Յ��"�%����5�|K�~vK���Ϫ*�Ma����_������ᱟqas�_D��_���(m�x��K�HWc�!���Hk���[��Z����l4NpBU��{�*����Y�޷D�䴆���7�f�'.�`���B�\��k�77K�=w(���#=�ptP��r��� �{���� 180 | 9��>������= !�I��6�������������_2MS6��D*�r �1@�L��7=$O�pqF7�U��T�}�S�ib��j}�^�J,����t� ݳX�(H{��}���hO���< ~|�������� ��PA" �s���&�����]��m|�j��Vxa�'>����.5� �w�A��̪��-H�K8��⾇�^�hV8��N�á���_6� <����c��<�QW����P{���N�s^SӾQ�ź"���2NE1 ��K��%>Ն�����j5k� �Ε_Y���CG�d�!a���/�#��!�������^^7�L��D.�IG�@K�3 pOS�Z;�����g>�{�Μ���\vKU�V|rrV?�T��$�YH�樺|S���R���i�[�\�޵�?���r���&3�h�T�ΐ�k=�����t�6��Z8�N�jm/���$bcw��k��W��Ƿ�J�O��p�'W?��f�i��P�N ��.h�Pi���Տ�z ���z�.���t��by�3/}1>9��ġ��F�����R��m2��%�bv֎c[�_��g�Y��6�g����/����=���z���y0w c�ϟ��t)����%dӅ��K�8��p��[E�巗��?���ӓ���ɽ<�Z�����(�7�{5�T4��p����K�ga����� ����j 181 | A�Gǵ�2�eg�3�����Ҷ��{���ԥ�g��mTQ��^_���ݿy�F��柍>x� 182 | �#٢^����u8�!�r��E ��1�g�\�����[�������j�k������qZ��Ca��x��f�n�M���;�����YL��s�P\�i,������g��'f�p�C�[D��h��wd�O��n*?O]���n5�ApG:��_"����6�+��ӭR���A-�� x�g�o��;EMt�5Oݏ�����{Mɤ��4Ml�:W�}��_G�����}�F��nq�x��m O��jd����0+Ԁ$�v��~%-l[�m]+�n|x�����V�s%����e����E��tp�q����^vUh����M=?��!CvX���]xY��V:�kLӤ������^�Zd$�����q#<� 1���sV�<=J�D������Nk���7�5e���6m���q�Z������[�{tH���A8����."��ʝ�XO��nN�f�'L6<��D�.R����f��w~���#�{���U��sg��:nl7��GJ!j�RyD=wa�w���ϽbIB<.o�r\}�G���vl�*uo�����/`1*2��RJ�P��y�� wl��ف��:[?k�~��hr��.'�.� 6����*7��][�3�����S���R�5��@��:X�����`�X6H%�X߰�)]���m7�'4�����p_|�ȏ�t�\�3j�8��Q�*���:�0��|f���r ?��!:�����jU1V�F�p�z��,���D��X\�~�N��)���, 186 | ��=?8\�����^�y*�-�T61����j+���MN!@�eaU��ӗیe�.8��[�" �}Y��)����w���eG����y��<�]�֡��H�Z+gg���>z��!�T��>�_���Š��n�w ��G]�E �J���-�:���9�0����t�]i��z�q��X�Ϯm˛�t1s�<���*�N��c�/+��!Z� 187 | �ax>m¬�qj��lu 188 | `�R)�TG���EA����ӕy�#?���3����}c����a�C�2��U��v�J���Kz��k��X T��:�K!4�l�±XT[ֆ����(��(�{����;� ��w[vg��/��*[��:��}�+d~��j]��J�B8%o�xl����f>X�N�J�`���Q`����ⲨI���� �:pupQ�(��|E*��`���B��৻v�\��k��d�z�TYU�/�AN�N���x�J�� ��z'�\?[�[}��Ku.06�A�nE�Je�&Љ)�6��tEP��a�:������۔�E���7�~�{���%\g�vm���×���wy÷(�������or�����t &f�<0��5us�!���M 189 | �(�Ʊ!�56I���W�����yp_��G~��n{E�hQ�4�k�\y��F���+X�̯��ѩ���� 190 | R 191 | +�EP 192 | S}�� ���*(JHP}v!�a�Ƶ�Ϥ��ɜ^P�'�Ŵ2�T��p��\��x�@g��mzj��T?ޜ�$��.1j�F)WJ'�. �Nt��+�<��ԭ���h��$��Z���v`M����O-uV!��7��=σ�����.����Isw�A�u�����褫����]Y�;���ɫ�O/�|� V��q��TxU�A�*�8l?0SAq.�Ǹ�a� ���'�u�6��Co�a���7�yv� 193 | �i���<�ٺKԻG�xir�w�w��Ө��J:�)�F]��eM��M�� ����L�뫫}�6?5肕�ֺ���ܟ;��pw�i׎o@�滋�3c����(T��=s��������no��\�l�7�[LQ��uK-j����^�[m�DˢR�� O\� ���o��lʼ����gݝ�o��d�K\U��q彅+~>����r��ySL�3l�}]��5 194 | �Ji��d% ��@����~��n��ת9�,.��?�s_[vO�a�8�l$�o�N�"oG�><��8>�裸bA�d!��6<�i�au�6$,���pQc\ʒ>L� {<�9��~�ko�/8�����������O^?],�bCl3��R u�a���X�ԂZO�b���r���oM� �a�d�Y��ݗ�z~���{���ًC^�rr)�`֚�݋F�T� 195 | j=�7Ih�� a��f�DX7�iZ-[�̤�Rܰ��� l���[�6SV 196 | Q2�tۥ�:;*�~�M 197 | Ұ�{�j�E'� �Y N^S�% /2�J� �@����_ �i/۠ZO�g`i# �mL"����Z����K����qj���Fq��~OeJ̋q��^ {L��X7W"���q�����XL|k��R˳b`�43��1bVT�����0�vu�K7�q���b,�|X1c�o۪�M�/� ����$ƥ�T� VShu��RVѨ�~!��8���^Sa��]�?�107�E��J/U��la� 앫���b�U�e��B�?NPS]���M�o��ys�L3��j��"*�[Y�aAmD�8�E��z�夺���qC `/��d;�QAe �,���I�()C�Mbi���pm��qfP�=O�o*����\��&=���CJ���Ǡ2�Q\Yg ΁H�R���a`�'a\��[%������M����/e�|HV�F/ܨ����6�h��6n|kr~�����,(1���$�W�0� ,[�:�Ae`S n#k�"r1 ��{3)��yV~غ�6�;���2� *��ePXp� �,(%