diff --git a/EVI - 2018/EVI 04/Automobile_data.csv b/EVI - 2018/EVI 04/Automobile_data.csv
new file mode 100755
index 0000000..37649b0
--- /dev/null
+++ b/EVI - 2018/EVI 04/Automobile_data.csv
@@ -0,0 +1 @@
+symboling,normalized-losses,make,fuel-type,aspiration,num-of-doors,body-style,drive-wheels,engine-location,wheel-base,length,width,height,curb-weight,engine-type,num-of-cylinders,engine-size,fuel-system,bore,stroke,compression-ratio,horsepower,peak-rpm,city-mpg,highway-mpg,price
3,122,alfa-romero,gas,std,two,convertible,rwd,front,88.6,168.8,64.1,48.8,2548,dohc,four,130,mpfi,3.47,2.68,9,111,5000,21,27,13495
3,122,alfa-romero,gas,std,two,convertible,rwd,front,88.6,168.8,64.1,48.8,2548,dohc,four,130,mpfi,3.47,2.68,9,111,5000,21,27,16500
1,122,alfa-romero,gas,std,two,hatchback,rwd,front,94.5,171.2,65.5,52.4,2823,ohcv,six,152,mpfi,2.68,3.47,9,154,5000,19,26,16500
2,164,audi,gas,std,four,sedan,fwd,front,99.8,176.6,66.2,54.3,2337,ohc,four,109,mpfi,3.19,3.4,10,102,5500,24,30,13950
2,164,audi,gas,std,four,sedan,4wd,front,99.4,176.6,66.4,54.3,2824,ohc,five,136,mpfi,3.19,3.4,8,115,5500,18,22,17450
2,122,audi,gas,std,two,sedan,fwd,front,99.8,177.3,66.3,53.1,2507,ohc,five,136,mpfi,3.19,3.4,8.5,110,5500,19,25,15250
1,158,audi,gas,std,four,sedan,fwd,front,105.8,192.7,71.4,55.7,2844,ohc,five,136,mpfi,3.19,3.4,8.5,110,5500,19,25,17710
1,122,audi,gas,std,four,wagon,fwd,front,105.8,192.7,71.4,55.7,2954,ohc,five,136,mpfi,3.19,3.4,8.5,110,5500,19,25,18920
1,158,audi,gas,turbo,four,sedan,fwd,front,105.8,192.7,71.4,55.9,3086,ohc,five,131,mpfi,3.13,3.4,8.3,140,5500,17,20,23875
0,122,audi,gas,turbo,two,hatchback,4wd,front,99.5,178.2,67.9,52,3053,ohc,five,131,mpfi,3.13,3.4,7,160,5500,16,22,13207.12935
2,192,bmw,gas,std,two,sedan,rwd,front,101.2,176.8,64.8,54.3,2395,ohc,four,108,mpfi,3.5,2.8,8.8,101,5800,23,29,16430
0,192,bmw,gas,std,four,sedan,rwd,front,101.2,176.8,64.8,54.3,2395,ohc,four,108,mpfi,3.5,2.8,8.8,101,5800,23,29,16925
0,188,bmw,gas,std,two,sedan,rwd,front,101.2,176.8,64.8,54.3,2710,ohc,six,164,mpfi,3.31,3.19,9,121,4250,21,28,20970
0,188,bmw,gas,std,four,sedan,rwd,front,101.2,176.8,64.8,54.3,2765,ohc,six,164,mpfi,3.31,3.19,9,121,4250,21,28,21105
1,122,bmw,gas,std,four,sedan,rwd,front,103.5,189,66.9,55.7,3055,ohc,six,164,mpfi,3.31,3.19,9,121,4250,20,25,24565
0,122,bmw,gas,std,four,sedan,rwd,front,103.5,189,66.9,55.7,3230,ohc,six,209,mpfi,3.62,3.39,8,182,5400,16,22,30760
0,122,bmw,gas,std,two,sedan,rwd,front,103.5,193.8,67.9,53.7,3380,ohc,six,209,mpfi,3.62,3.39,8,182,5400,16,22,41315
0,122,bmw,gas,std,four,sedan,rwd,front,110,197,70.9,56.3,3505,ohc,six,209,mpfi,3.62,3.39,8,182,5400,15,20,36880
2,121,chevrolet,gas,std,two,hatchback,fwd,front,88.4,141.1,60.3,53.2,1488,l,three,61,2bbl,2.91,3.03,9.5,48,5100,47,53,5151
1,98,chevrolet,gas,std,two,hatchback,fwd,front,94.5,155.9,63.6,52,1874,ohc,four,90,2bbl,3.03,3.11,9.6,70,5400,38,43,6295
0,81,chevrolet,gas,std,four,sedan,fwd,front,94.5,158.8,63.6,52,1909,ohc,four,90,2bbl,3.03,3.11,9.6,70,5400,38,43,6575
1,118,dodge,gas,std,two,hatchback,fwd,front,93.7,157.3,63.8,50.8,1876,ohc,four,90,2bbl,2.97,3.23,9.41,68,5500,37,41,5572
1,118,dodge,gas,std,two,hatchback,fwd,front,93.7,157.3,63.8,50.8,1876,ohc,four,90,2bbl,2.97,3.23,9.4,68,5500,31,38,6377
1,118,dodge,gas,turbo,two,hatchback,fwd,front,93.7,157.3,63.8,50.8,2128,ohc,four,98,mpfi,3.03,3.39,7.6,102,5500,24,30,7957
1,148,dodge,gas,std,four,hatchback,fwd,front,93.7,157.3,63.8,50.6,1967,ohc,four,90,2bbl,2.97,3.23,9.4,68,5500,31,38,6229
1,148,dodge,gas,std,four,sedan,fwd,front,93.7,157.3,63.8,50.6,1989,ohc,four,90,2bbl,2.97,3.23,9.4,68,5500,31,38,6692
1,148,dodge,gas,std,four,sedan,fwd,front,93.7,157.3,63.8,50.6,1989,ohc,four,90,2bbl,2.97,3.23,9.4,68,5500,31,38,7609
1,148,dodge,gas,turbo,?,sedan,fwd,front,93.7,157.3,63.8,50.6,2191,ohc,four,98,mpfi,3.03,3.39,7.6,102,5500,24,30,8558
-1,110,dodge,gas,std,four,wagon,fwd,front,103.3,174.6,64.6,59.8,2535,ohc,four,122,2bbl,3.34,3.46,8.5,88,5000,24,30,8921
3,145,dodge,gas,turbo,two,hatchback,fwd,front,95.9,173.2,66.3,50.2,2811,ohc,four,156,mfi,3.6,3.9,7,145,5000,19,24,12964
2,137,honda,gas,std,two,hatchback,fwd,front,86.6,144.6,63.9,50.8,1713,ohc,four,92,1bbl,2.91,3.41,9.6,58,4800,49,54,6479
2,137,honda,gas,std,two,hatchback,fwd,front,86.6,144.6,63.9,50.8,1819,ohc,four,92,1bbl,2.91,3.41,9.2,76,6000,31,38,6855
1,101,honda,gas,std,two,hatchback,fwd,front,93.7,150,64,52.6,1837,ohc,four,79,1bbl,2.91,3.07,10.1,60,5500,38,42,5399
1,101,honda,gas,std,two,hatchback,fwd,front,93.7,150,64,52.6,1940,ohc,four,92,1bbl,2.91,3.41,9.2,76,6000,30,34,6529
1,101,honda,gas,std,two,hatchback,fwd,front,93.7,150,64,52.6,1956,ohc,four,92,1bbl,2.91,3.41,9.2,76,6000,30,34,7129
0,110,honda,gas,std,four,sedan,fwd,front,96.5,163.4,64,54.5,2010,ohc,four,92,1bbl,2.91,3.41,9.2,76,6000,30,34,7295
0,78,honda,gas,std,four,wagon,fwd,front,96.5,157.1,63.9,58.3,2024,ohc,four,92,1bbl,2.92,3.41,9.2,76,6000,30,34,7295
0,106,honda,gas,std,two,hatchback,fwd,front,96.5,167.5,65.2,53.3,2236,ohc,four,110,1bbl,3.15,3.58,9,86,5800,27,33,7895
0,106,honda,gas,std,two,hatchback,fwd,front,96.5,167.5,65.2,53.3,2289,ohc,four,110,1bbl,3.15,3.58,9,86,5800,27,33,9095
0,85,honda,gas,std,four,sedan,fwd,front,96.5,175.4,65.2,54.1,2304,ohc,four,110,1bbl,3.15,3.58,9,86,5800,27,33,8845
0,85,honda,gas,std,four,sedan,fwd,front,96.5,175.4,62.5,54.1,2372,ohc,four,110,1bbl,3.15,3.58,9,86,5800,27,33,10295
0,85,honda,gas,std,four,sedan,fwd,front,96.5,175.4,65.2,54.1,2465,ohc,four,110,mpfi,3.15,3.58,9,101,5800,24,28,12945
1,107,honda,gas,std,two,sedan,fwd,front,96.5,169.1,66,51,2293,ohc,four,110,2bbl,3.15,3.58,9.1,100,5500,25,31,10345
0,122,isuzu,gas,std,four,sedan,rwd,front,94.3,170.7,61.8,53.5,2337,ohc,four,111,2bbl,3.31,3.23,8.5,78,4800,24,29,6785
1,122,isuzu,gas,std,two,sedan,fwd,front,94.5,155.9,63.6,52,1874,ohc,four,90,2bbl,3.03,3.11,9.6,70,5400,38,43,13207.12935
0,122,isuzu,gas,std,four,sedan,fwd,front,94.5,155.9,63.6,52,1909,ohc,four,90,2bbl,3.03,3.11,9.6,70,5400,38,43,13207.12935
2,122,isuzu,gas,std,two,hatchback,rwd,front,96,172.6,65.2,51.4,2734,ohc,four,119,spfi,3.43,3.23,9.2,90,5000,24,29,11048
0,145,jaguar,gas,std,four,sedan,rwd,front,113,199.6,69.6,52.8,4066,dohc,six,258,mpfi,3.63,4.17,8.1,176,4750,15,19,32250
0,122,jaguar,gas,std,four,sedan,rwd,front,113,199.6,69.6,52.8,4066,dohc,six,258,mpfi,3.63,4.17,8.1,176,4750,15,19,35550
0,122,jaguar,gas,std,two,sedan,rwd,front,102,191.7,70.6,47.8,3950,ohcv,twelve,326,mpfi,3.54,2.76,11.5,262,5000,13,17,36000
1,104,mazda,gas,std,two,hatchback,fwd,front,93.1,159.1,64.2,54.1,1890,ohc,four,91,2bbl,3.03,3.15,9,68,5000,30,31,5195
1,104,mazda,gas,std,two,hatchback,fwd,front,93.1,159.1,64.2,54.1,1900,ohc,four,91,2bbl,3.03,3.15,9,68,5000,31,38,6095
1,104,mazda,gas,std,two,hatchback,fwd,front,93.1,159.1,64.2,54.1,1905,ohc,four,91,2bbl,3.03,3.15,9,68,5000,31,38,6795
1,113,mazda,gas,std,four,sedan,fwd,front,93.1,166.8,64.2,54.1,1945,ohc,four,91,2bbl,3.03,3.15,9,68,5000,31,38,6695
1,113,mazda,gas,std,four,sedan,fwd,front,93.1,166.8,64.2,54.1,1950,ohc,four,91,2bbl,3.08,3.15,9,68,5000,31,38,7395
3,150,mazda,gas,std,two,hatchback,rwd,front,95.3,169,65.7,49.6,2380,rotor,two,70,4bbl,3.329751244,3.255422886,9.4,101,6000,17,23,10945
3,150,mazda,gas,std,two,hatchback,rwd,front,95.3,169,65.7,49.6,2380,rotor,two,70,4bbl,3.329751244,3.255422886,9.4,101,6000,17,23,11845
3,150,mazda,gas,std,two,hatchback,rwd,front,95.3,169,65.7,49.6,2385,rotor,two,70,4bbl,3.329751244,3.255422886,9.4,101,6000,17,23,13645
3,150,mazda,gas,std,two,hatchback,rwd,front,95.3,169,65.7,49.6,2500,rotor,two,80,mpfi,3.329751244,3.255422886,9.4,135,6000,16,23,15645
1,129,mazda,gas,std,two,hatchback,fwd,front,98.8,177.8,66.5,53.7,2385,ohc,four,122,2bbl,3.39,3.39,8.6,84,4800,26,32,8845
0,115,mazda,gas,std,four,sedan,fwd,front,98.8,177.8,66.5,55.5,2410,ohc,four,122,2bbl,3.39,3.39,8.6,84,4800,26,32,8495
1,129,mazda,gas,std,two,hatchback,fwd,front,98.8,177.8,66.5,53.7,2385,ohc,four,122,2bbl,3.39,3.39,8.6,84,4800,26,32,10595
0,115,mazda,gas,std,four,sedan,fwd,front,98.8,177.8,66.5,55.5,2410,ohc,four,122,2bbl,3.39,3.39,8.6,84,4800,26,32,10245
0,122,mazda,diesel,std,?,sedan,fwd,front,98.8,177.8,66.5,55.5,2443,ohc,four,122,idi,3.39,3.39,22.7,64,4650,36,42,10795
0,115,mazda,gas,std,four,hatchback,fwd,front,98.8,177.8,66.5,55.5,2425,ohc,four,122,2bbl,3.39,3.39,8.6,84,4800,26,32,11245
0,118,mazda,gas,std,four,sedan,rwd,front,104.9,175,66.1,54.4,2670,ohc,four,140,mpfi,3.76,3.16,8,120,5000,19,27,18280
0,122,mazda,diesel,std,four,sedan,rwd,front,104.9,175,66.1,54.4,2700,ohc,four,134,idi,3.43,3.64,22,72,4200,31,39,18344
-1,93,mercedes-benz,diesel,turbo,four,sedan,rwd,front,110,190.9,70.3,56.5,3515,ohc,five,183,idi,3.58,3.64,21.5,123,4350,22,25,25552
-1,93,mercedes-benz,diesel,turbo,four,wagon,rwd,front,110,190.9,70.3,58.7,3750,ohc,five,183,idi,3.58,3.64,21.5,123,4350,22,25,28248
0,93,mercedes-benz,diesel,turbo,two,hardtop,rwd,front,106.7,187.5,70.3,54.9,3495,ohc,five,183,idi,3.58,3.64,21.5,123,4350,22,25,28176
-1,93,mercedes-benz,diesel,turbo,four,sedan,rwd,front,115.6,202.6,71.7,56.3,3770,ohc,five,183,idi,3.58,3.64,21.5,123,4350,22,25,31600
-1,122,mercedes-benz,gas,std,four,sedan,rwd,front,115.6,202.6,71.7,56.5,3740,ohcv,eight,234,mpfi,3.46,3.1,8.3,155,4750,16,18,34184
3,142,mercedes-benz,gas,std,two,convertible,rwd,front,96.6,180.3,70.5,50.8,3685,ohcv,eight,234,mpfi,3.46,3.1,8.3,155,4750,16,18,35056
0,122,mercedes-benz,gas,std,four,sedan,rwd,front,120.9,208.1,71.7,56.7,3900,ohcv,eight,308,mpfi,3.8,3.35,8,184,4500,14,16,40960
1,122,mercedes-benz,gas,std,two,hardtop,rwd,front,112,199.2,72,55.4,3715,ohcv,eight,304,mpfi,3.8,3.35,8,184,4500,14,16,45400
1,122,mercury,gas,turbo,two,hatchback,rwd,front,102.7,178.4,68,54.8,2910,ohc,four,140,mpfi,3.78,3.12,8,175,5000,19,24,16503
2,161,mitsubishi,gas,std,two,hatchback,fwd,front,93.7,157.3,64.4,50.8,1918,ohc,four,92,2bbl,2.97,3.23,9.4,68,5500,37,41,5389
2,161,mitsubishi,gas,std,two,hatchback,fwd,front,93.7,157.3,64.4,50.8,1944,ohc,four,92,2bbl,2.97,3.23,9.4,68,5500,31,38,6189
2,161,mitsubishi,gas,std,two,hatchback,fwd,front,93.7,157.3,64.4,50.8,2004,ohc,four,92,2bbl,2.97,3.23,9.4,68,5500,31,38,6669
1,161,mitsubishi,gas,turbo,two,hatchback,fwd,front,93,157.3,63.8,50.8,2145,ohc,four,98,spdi,3.03,3.39,7.6,102,5500,24,30,7689
3,153,mitsubishi,gas,turbo,two,hatchback,fwd,front,96.3,173,65.4,49.4,2370,ohc,four,110,spdi,3.17,3.46,7.5,116,5500,23,30,9959
3,153,mitsubishi,gas,std,two,hatchback,fwd,front,96.3,173,65.4,49.4,2328,ohc,four,122,2bbl,3.35,3.46,8.5,88,5000,25,32,8499
3,122,mitsubishi,gas,turbo,two,hatchback,fwd,front,95.9,173.2,66.3,50.2,2833,ohc,four,156,spdi,3.58,3.86,7,145,5000,19,24,12629
3,122,mitsubishi,gas,turbo,two,hatchback,fwd,front,95.9,173.2,66.3,50.2,2921,ohc,four,156,spdi,3.59,3.86,7,145,5000,19,24,14869
3,122,mitsubishi,gas,turbo,two,hatchback,fwd,front,95.9,173.2,66.3,50.2,2926,ohc,four,156,spdi,3.59,3.86,7,145,5000,19,24,14489
1,125,mitsubishi,gas,std,four,sedan,fwd,front,96.3,172.4,65.4,51.6,2365,ohc,four,122,2bbl,3.35,3.46,8.5,88,5000,25,32,6989
1,125,mitsubishi,gas,std,four,sedan,fwd,front,96.3,172.4,65.4,51.6,2405,ohc,four,122,2bbl,3.35,3.46,8.5,88,5000,25,32,8189
1,125,mitsubishi,gas,turbo,four,sedan,fwd,front,96.3,172.4,65.4,51.6,2403,ohc,four,110,spdi,3.17,3.46,7.5,116,5500,23,30,9279
-1,137,mitsubishi,gas,std,four,sedan,fwd,front,96.3,172.4,65.4,51.6,2403,ohc,four,110,spdi,3.17,3.46,7.5,116,5500,23,30,9279
1,128,nissan,gas,std,two,sedan,fwd,front,94.5,165.3,63.8,54.5,1889,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,5499
1,128,nissan,diesel,std,two,sedan,fwd,front,94.5,165.3,63.8,54.5,2017,ohc,four,103,idi,2.99,3.47,21.9,55,4800,45,50,7099
1,128,nissan,gas,std,two,sedan,fwd,front,94.5,165.3,63.8,54.5,1918,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,6649
1,122,nissan,gas,std,four,sedan,fwd,front,94.5,165.3,63.8,54.5,1938,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,6849
1,103,nissan,gas,std,four,wagon,fwd,front,94.5,170.2,63.8,53.5,2024,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,7349
1,128,nissan,gas,std,two,sedan,fwd,front,94.5,165.3,63.8,54.5,1951,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,7299
1,128,nissan,gas,std,two,hatchback,fwd,front,94.5,165.6,63.8,53.3,2028,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,7799
1,122,nissan,gas,std,four,sedan,fwd,front,94.5,165.3,63.8,54.5,1971,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,7499
1,103,nissan,gas,std,four,wagon,fwd,front,94.5,170.2,63.8,53.5,2037,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,7999
2,168,nissan,gas,std,two,hardtop,fwd,front,95.1,162.4,63.8,53.3,2008,ohc,four,97,2bbl,3.15,3.29,9.4,69,5200,31,37,8249
0,106,nissan,gas,std,four,hatchback,fwd,front,97.2,173.4,65.2,54.7,2324,ohc,four,120,2bbl,3.33,3.47,8.5,97,5200,27,34,8949
0,106,nissan,gas,std,four,sedan,fwd,front,97.2,173.4,65.2,54.7,2302,ohc,four,120,2bbl,3.33,3.47,8.5,97,5200,27,34,9549
0,128,nissan,gas,std,four,sedan,fwd,front,100.4,181.7,66.5,55.1,3095,ohcv,six,181,mpfi,3.43,3.27,9,152,5200,17,22,13499
0,108,nissan,gas,std,four,wagon,fwd,front,100.4,184.6,66.5,56.1,3296,ohcv,six,181,mpfi,3.43,3.27,9,152,5200,17,22,14399
0,108,nissan,gas,std,four,sedan,fwd,front,100.4,184.6,66.5,55.1,3060,ohcv,six,181,mpfi,3.43,3.27,9,152,5200,19,25,13499
3,194,nissan,gas,std,two,hatchback,rwd,front,91.3,170.7,67.9,49.7,3071,ohcv,six,181,mpfi,3.43,3.27,9,160,5200,19,25,17199
3,194,nissan,gas,turbo,two,hatchback,rwd,front,91.3,170.7,67.9,49.7,3139,ohcv,six,181,mpfi,3.43,3.27,7.8,200,5200,17,23,19699
1,231,nissan,gas,std,two,hatchback,rwd,front,99.2,178.5,67.9,49.7,3139,ohcv,six,181,mpfi,3.43,3.27,9,160,5200,19,25,18399
0,161,peugot,gas,std,four,sedan,rwd,front,107.9,186.7,68.4,56.7,3020,l,four,120,mpfi,3.46,3.19,8.4,97,5000,19,24,11900
0,161,peugot,diesel,turbo,four,sedan,rwd,front,107.9,186.7,68.4,56.7,3197,l,four,152,idi,3.7,3.52,21,95,4150,28,33,13200
0,122,peugot,gas,std,four,wagon,rwd,front,114.2,198.9,68.4,58.7,3230,l,four,120,mpfi,3.46,3.19,8.4,97,5000,19,24,12440
0,122,peugot,diesel,turbo,four,wagon,rwd,front,114.2,198.9,68.4,58.7,3430,l,four,152,idi,3.7,3.52,21,95,4150,25,25,13860
0,161,peugot,gas,std,four,sedan,rwd,front,107.9,186.7,68.4,56.7,3075,l,four,120,mpfi,3.46,2.19,8.4,95,5000,19,24,15580
0,161,peugot,diesel,turbo,four,sedan,rwd,front,107.9,186.7,68.4,56.7,3252,l,four,152,idi,3.7,3.52,21,95,4150,28,33,16900
0,122,peugot,gas,std,four,wagon,rwd,front,114.2,198.9,68.4,56.7,3285,l,four,120,mpfi,3.46,2.19,8.4,95,5000,19,24,16695
0,122,peugot,diesel,turbo,four,wagon,rwd,front,114.2,198.9,68.4,58.7,3485,l,four,152,idi,3.7,3.52,21,95,4150,25,25,17075
0,161,peugot,gas,std,four,sedan,rwd,front,107.9,186.7,68.4,56.7,3075,l,four,120,mpfi,3.46,3.19,8.4,97,5000,19,24,16630
0,161,peugot,diesel,turbo,four,sedan,rwd,front,107.9,186.7,68.4,56.7,3252,l,four,152,idi,3.7,3.52,21,95,4150,28,33,17950
0,161,peugot,gas,turbo,four,sedan,rwd,front,108,186.7,68.3,56,3130,l,four,134,mpfi,3.61,3.21,7,142,5600,18,24,18150
1,119,plymouth,gas,std,two,hatchback,fwd,front,93.7,157.3,63.8,50.8,1918,ohc,four,90,2bbl,2.97,3.23,9.4,68,5500,37,41,5572
1,119,plymouth,gas,turbo,two,hatchback,fwd,front,93.7,157.3,63.8,50.8,2128,ohc,four,98,spdi,3.03,3.39,7.6,102,5500,24,30,7957
1,154,plymouth,gas,std,four,hatchback,fwd,front,93.7,157.3,63.8,50.6,1967,ohc,four,90,2bbl,2.97,3.23,9.4,68,5500,31,38,6229
1,154,plymouth,gas,std,four,sedan,fwd,front,93.7,167.3,63.8,50.8,1989,ohc,four,90,2bbl,2.97,3.23,9.4,68,5500,31,38,6692
1,154,plymouth,gas,std,four,sedan,fwd,front,93.7,167.3,63.8,50.8,2191,ohc,four,98,2bbl,2.97,3.23,9.4,68,5500,31,38,7609
-1,74,plymouth,gas,std,four,wagon,fwd,front,103.3,174.6,64.6,59.8,2535,ohc,four,122,2bbl,3.35,3.46,8.5,88,5000,24,30,8921
3,122,plymouth,gas,turbo,two,hatchback,rwd,front,95.9,173.2,66.3,50.2,2818,ohc,four,156,spdi,3.59,3.86,7,145,5000,19,24,12764
3,186,porsche,gas,std,two,hatchback,rwd,front,94.5,168.9,68.3,50.2,2778,ohc,four,151,mpfi,3.94,3.11,9.5,143,5500,19,27,22018
3,122,porsche,gas,std,two,hardtop,rwd,rear,89.5,168.9,65,51.6,2756,ohcf,six,194,mpfi,3.74,2.9,9.5,207,5900,17,25,32528
3,122,porsche,gas,std,two,hardtop,rwd,rear,89.5,168.9,65,51.6,2756,ohcf,six,194,mpfi,3.74,2.9,9.5,207,5900,17,25,34028
3,122,porsche,gas,std,two,convertible,rwd,rear,89.5,168.9,65,51.6,2800,ohcf,six,194,mpfi,3.74,2.9,9.5,207,5900,17,25,37028
1,122,porsche,gas,std,two,hatchback,rwd,front,98.4,175.7,72.3,50.5,3366,dohcv,eight,203,mpfi,3.94,3.11,10,288,5750,17,28,13207.12935
0,122,renault,gas,std,four,wagon,fwd,front,96.1,181.5,66.5,55.2,2579,ohc,four,132,mpfi,3.46,3.9,8.7,104.2561576,5125.369458,23,31,9295
2,122,renault,gas,std,two,hatchback,fwd,front,96.1,176.8,66.6,50.5,2460,ohc,four,132,mpfi,3.46,3.9,8.7,104.2561576,5125.369458,23,31,9895
3,150,saab,gas,std,two,hatchback,fwd,front,99.1,186.6,66.5,56.1,2658,ohc,four,121,mpfi,3.54,3.07,9.31,110,5250,21,28,11850
2,104,saab,gas,std,four,sedan,fwd,front,99.1,186.6,66.5,56.1,2695,ohc,four,121,mpfi,3.54,3.07,9.3,110,5250,21,28,12170
3,150,saab,gas,std,two,hatchback,fwd,front,99.1,186.6,66.5,56.1,2707,ohc,four,121,mpfi,2.54,2.07,9.3,110,5250,21,28,15040
2,104,saab,gas,std,four,sedan,fwd,front,99.1,186.6,66.5,56.1,2758,ohc,four,121,mpfi,3.54,3.07,9.3,110,5250,21,28,15510
3,150,saab,gas,turbo,two,hatchback,fwd,front,99.1,186.6,66.5,56.1,2808,dohc,four,121,mpfi,3.54,3.07,9,160,5500,19,26,18150
2,104,saab,gas,turbo,four,sedan,fwd,front,99.1,186.6,66.5,56.1,2847,dohc,four,121,mpfi,3.54,3.07,9,160,5500,19,26,18620
2,83,subaru,gas,std,two,hatchback,fwd,front,93.7,156.9,63.4,53.7,2050,ohcf,four,97,2bbl,3.62,2.36,9,69,4900,31,36,5118
2,83,subaru,gas,std,two,hatchback,fwd,front,93.7,157.9,63.6,53.7,2120,ohcf,four,108,2bbl,3.62,2.64,8.7,73,4400,26,31,7053
2,83,subaru,gas,std,two,hatchback,4wd,front,93.3,157.3,63.8,55.7,2240,ohcf,four,108,2bbl,3.62,2.64,8.7,73,4400,26,31,7603
0,102,subaru,gas,std,four,sedan,fwd,front,97.2,172,65.4,52.5,2145,ohcf,four,108,2bbl,3.62,2.64,9.5,82,4800,32,37,7126
0,102,subaru,gas,std,four,sedan,fwd,front,97.2,172,65.4,52.5,2190,ohcf,four,108,2bbl,3.62,2.64,9.5,82,4400,28,33,7775
0,102,subaru,gas,std,four,sedan,fwd,front,97.2,172,65.4,52.5,2340,ohcf,four,108,mpfi,3.62,2.64,9,94,5200,26,32,9960
0,102,subaru,gas,std,four,sedan,4wd,front,97,172,65.4,54.3,2385,ohcf,four,108,2bbl,3.62,2.64,9,82,4800,24,25,9233
0,102,subaru,gas,turbo,four,sedan,4wd,front,97,172,65.4,54.3,2510,ohcf,four,108,mpfi,3.62,2.64,7.7,111,4800,24,29,11259
0,89,subaru,gas,std,four,wagon,fwd,front,97,173.5,65.4,53,2290,ohcf,four,108,2bbl,3.62,2.64,9,82,4800,28,32,7463
0,89,subaru,gas,std,four,wagon,fwd,front,97,173.5,65.4,53,2455,ohcf,four,108,mpfi,3.62,2.64,9,94,5200,25,31,10198
0,85,subaru,gas,std,four,wagon,4wd,front,96.9,173.6,65.4,54.9,2420,ohcf,four,108,2bbl,3.62,2.64,9,82,4800,23,29,8013
0,85,subaru,gas,turbo,four,wagon,4wd,front,96.9,173.6,65.4,54.9,2650,ohcf,four,108,mpfi,3.62,2.64,7.7,111,4800,23,23,11694
1,87,toyota,gas,std,two,hatchback,fwd,front,95.7,158.7,63.6,54.5,1985,ohc,four,92,2bbl,3.05,3.03,9,62,4800,35,39,5348
1,87,toyota,gas,std,two,hatchback,fwd,front,95.7,158.7,63.6,54.5,2040,ohc,four,92,2bbl,3.05,3.03,9,62,4800,31,38,6338
1,74,toyota,gas,std,four,hatchback,fwd,front,95.7,158.7,63.6,54.5,2015,ohc,four,92,2bbl,3.05,3.03,9,62,4800,31,38,6488
0,77,toyota,gas,std,four,wagon,fwd,front,95.7,169.7,63.6,59.1,2280,ohc,four,92,2bbl,3.05,3.03,9,62,4800,31,37,6918
0,81,toyota,gas,std,four,wagon,4wd,front,95.7,169.7,63.6,59.1,2290,ohc,four,92,2bbl,3.05,3.03,9,62,4800,27,32,7898
0,91,toyota,gas,std,four,wagon,4wd,front,95.7,169.7,63.6,59.1,3110,ohc,four,92,2bbl,3.05,3.03,9,62,4800,27,32,8778
0,91,toyota,gas,std,four,sedan,fwd,front,95.7,166.3,64.4,53,2081,ohc,four,98,2bbl,3.19,3.03,9,70,4800,30,37,6938
0,91,toyota,gas,std,four,hatchback,fwd,front,95.7,166.3,64.4,52.8,2109,ohc,four,98,2bbl,3.19,3.03,9,70,4800,30,37,7198
0,91,toyota,diesel,std,four,sedan,fwd,front,95.7,166.3,64.4,53,2275,ohc,four,110,idi,3.27,3.35,22.5,56,4500,34,36,7898
0,91,toyota,diesel,std,four,hatchback,fwd,front,95.7,166.3,64.4,52.8,2275,ohc,four,110,idi,3.27,3.35,22.5,56,4500,38,47,7788
0,91,toyota,gas,std,four,sedan,fwd,front,95.7,166.3,64.4,53,2094,ohc,four,98,2bbl,3.19,3.03,9,70,4800,38,47,7738
0,91,toyota,gas,std,four,hatchback,fwd,front,95.7,166.3,64.4,52.8,2122,ohc,four,98,2bbl,3.19,3.03,9,70,4800,28,34,8358
0,91,toyota,gas,std,four,sedan,fwd,front,95.7,166.3,64.4,52.8,2140,ohc,four,98,2bbl,3.19,3.03,9,70,4800,28,34,9258
1,168,toyota,gas,std,two,sedan,rwd,front,94.5,168.7,64,52.6,2169,ohc,four,98,2bbl,3.19,3.03,9,70,4800,29,34,8058
1,168,toyota,gas,std,two,hatchback,rwd,front,94.5,168.7,64,52.6,2204,ohc,four,98,2bbl,3.19,3.03,9,70,4800,29,34,8238
1,168,toyota,gas,std,two,sedan,rwd,front,94.5,168.7,64,52.6,2265,dohc,four,98,mpfi,3.24,3.08,9.4,112,6600,26,29,9298
1,168,toyota,gas,std,two,hatchback,rwd,front,94.5,168.7,64,52.6,2300,dohc,four,98,mpfi,3.24,3.08,9.4,112,6600,26,29,9538
2,134,toyota,gas,std,two,hardtop,rwd,front,98.4,176.2,65.6,52,2540,ohc,four,146,mpfi,3.62,3.5,9.3,116,4800,24,30,8449
2,134,toyota,gas,std,two,hardtop,rwd,front,98.4,176.2,65.6,52,2536,ohc,four,146,mpfi,3.62,3.5,9.3,116,4800,24,30,9639
2,134,toyota,gas,std,two,hatchback,rwd,front,98.4,176.2,65.6,52,2551,ohc,four,146,mpfi,3.62,3.5,9.3,116,4800,24,30,9989
2,134,toyota,gas,std,two,hardtop,rwd,front,98.4,176.2,65.6,52,2679,ohc,four,146,mpfi,3.62,3.5,9.3,116,4800,24,30,11199
2,134,toyota,gas,std,two,hatchback,rwd,front,98.4,176.2,65.6,52,2714,ohc,four,146,mpfi,3.62,3.5,9.3,116,4800,24,30,11549
2,134,toyota,gas,std,two,convertible,rwd,front,98.4,176.2,65.6,53,2975,ohc,four,146,mpfi,3.62,3.5,9.3,116,4800,24,30,17669
-1,65,toyota,gas,std,four,sedan,fwd,front,102.4,175.6,66.5,54.9,2326,ohc,four,122,mpfi,3.31,3.54,8.7,92,4200,29,34,8948
-1,65,toyota,diesel,turbo,four,sedan,fwd,front,102.4,175.6,66.5,54.9,2480,ohc,four,110,idi,3.27,3.35,22.5,73,4500,30,33,10698
-1,65,toyota,gas,std,four,hatchback,fwd,front,102.4,175.6,66.5,53.9,2414,ohc,four,122,mpfi,3.31,3.54,8.7,92,4200,27,32,9988
-1,65,toyota,gas,std,four,sedan,fwd,front,102.4,175.6,66.5,54.9,2414,ohc,four,122,mpfi,3.31,3.54,8.7,92,4200,27,32,10898
-1,65,toyota,gas,std,four,hatchback,fwd,front,102.4,175.6,66.5,53.9,2458,ohc,four,122,mpfi,3.31,3.54,8.7,92,4200,27,32,11248
3,197,toyota,gas,std,two,hatchback,rwd,front,102.9,183.5,67.7,52,2976,dohc,six,171,mpfi,3.27,3.35,9.3,161,5200,20,24,16558
3,197,toyota,gas,std,two,hatchback,rwd,front,102.9,183.5,67.7,52,3016,dohc,six,171,mpfi,3.27,3.35,9.3,161,5200,19,24,15998
-1,90,toyota,gas,std,four,sedan,rwd,front,104.5,187.8,66.5,54.1,3131,dohc,six,171,mpfi,3.27,3.35,9.2,156,5200,20,24,15690
-1,122,toyota,gas,std,four,wagon,rwd,front,104.5,187.8,66.5,54.1,3151,dohc,six,161,mpfi,3.27,3.35,9.2,156,5200,19,24,15750
2,122,volkswagen,diesel,std,two,sedan,fwd,front,97.3,171.7,65.5,55.7,2261,ohc,four,97,idi,3.01,3.4,23,52,4800,37,46,7775
2,122,volkswagen,gas,std,two,sedan,fwd,front,97.3,171.7,65.5,55.7,2209,ohc,four,109,mpfi,3.19,3.4,9,85,5250,27,34,7975
2,94,volkswagen,diesel,std,four,sedan,fwd,front,97.3,171.7,65.5,55.7,2264,ohc,four,97,idi,3.01,3.4,23,52,4800,37,46,7995
2,94,volkswagen,gas,std,four,sedan,fwd,front,97.3,171.7,65.5,55.7,2212,ohc,four,109,mpfi,3.19,3.4,9,85,5250,27,34,8195
2,94,volkswagen,gas,std,four,sedan,fwd,front,97.3,171.7,65.5,55.7,2275,ohc,four,109,mpfi,3.19,3.4,9,85,5250,27,34,8495
2,94,volkswagen,diesel,turbo,four,sedan,fwd,front,97.3,171.7,65.5,55.7,2319,ohc,four,97,idi,3.01,3.4,23,68,4500,37,42,9495
2,94,volkswagen,gas,std,four,sedan,fwd,front,97.3,171.7,65.5,55.7,2300,ohc,four,109,mpfi,3.19,3.4,10,100,5500,26,32,9995
3,122,volkswagen,gas,std,two,convertible,fwd,front,94.5,159.3,64.2,55.6,2254,ohc,four,109,mpfi,3.19,3.4,8.5,90,5500,24,29,11595
3,256,volkswagen,gas,std,two,hatchback,fwd,front,94.5,165.7,64,51.4,2221,ohc,four,109,mpfi,3.19,3.4,8.5,90,5500,24,29,9980
0,122,volkswagen,gas,std,four,sedan,fwd,front,100.4,180.2,66.9,55.1,2661,ohc,five,136,mpfi,3.19,3.4,8.5,110,5500,19,24,13295
0,122,volkswagen,diesel,turbo,four,sedan,fwd,front,100.4,180.2,66.9,55.1,2579,ohc,four,97,idi,3.01,3.4,23,68,4500,33,38,13845
0,122,volkswagen,gas,std,four,wagon,fwd,front,100.4,183.1,66.9,55.1,2563,ohc,four,109,mpfi,3.19,3.4,9,88,5500,25,31,12290
-2,103,volvo,gas,std,four,sedan,rwd,front,104.3,188.8,67.2,56.2,2912,ohc,four,141,mpfi,3.78,3.15,9.5,114,5400,23,28,12940
-1,74,volvo,gas,std,four,wagon,rwd,front,104.3,188.8,67.2,57.5,3034,ohc,four,141,mpfi,3.78,3.15,9.5,114,5400,23,28,13415
-2,103,volvo,gas,std,four,sedan,rwd,front,104.3,188.8,67.2,56.2,2935,ohc,four,141,mpfi,3.78,3.15,9.5,114,5400,24,28,15985
-1,74,volvo,gas,std,four,wagon,rwd,front,104.3,188.8,67.2,57.5,3042,ohc,four,141,mpfi,3.78,3.15,9.5,114,5400,24,28,16515
-2,103,volvo,gas,turbo,four,sedan,rwd,front,104.3,188.8,67.2,56.2,3045,ohc,four,130,mpfi,3.62,3.15,7.5,162,5100,17,22,18420
-1,74,volvo,gas,turbo,four,wagon,rwd,front,104.3,188.8,67.2,57.5,3157,ohc,four,130,mpfi,3.62,3.15,7.5,162,5100,17,22,18950
-1,95,volvo,gas,std,four,sedan,rwd,front,109.1,188.8,68.9,55.5,2952,ohc,four,141,mpfi,3.78,3.15,9.5,114,5400,23,28,16845
-1,95,volvo,gas,turbo,four,sedan,rwd,front,109.1,188.8,68.8,55.5,3049,ohc,four,141,mpfi,3.78,3.15,8.7,160,5300,19,25,19045
-1,95,volvo,gas,std,four,sedan,rwd,front,109.1,188.8,68.9,55.5,3012,ohcv,six,173,mpfi,3.58,2.87,8.8,134,5500,18,23,21485
-1,95,volvo,diesel,turbo,four,sedan,rwd,front,109.1,188.8,68.9,55.5,3217,ohc,six,145,idi,3.01,3.4,23,106,4800,26,27,22470
-1,95,volvo,gas,turbo,four,sedan,rwd,front,109.1,188.8,68.9,55.5,3062,ohc,four,141,mpfi,3.78,3.15,9.5,114,5400,19,25,22625
\ No newline at end of file
diff --git a/EVI - 2018/EVI 04/Ejemplos/basics.py b/EVI - 2018/EVI 04/Ejemplos/basics.py
new file mode 100644
index 0000000..1f82b31
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/basics.py
@@ -0,0 +1,132 @@
+#####################
+# Atomic data types #
+#####################
+
+a = 89 # Integer
+b = 0.5 # Float
+c = 9 + 0.4j # Complex
+d = True # Boolean
+e = None # Nonetype
+
+########################
+# Composite data types #
+########################
+
+f = [1, '2', 3] # List
+g = (1, '2', 3) # Tuple
+h = {1: 'one', # Dict
+ 'two': 2,
+ 3: 'Three'}
+i = set([1, 2, 3]) # Set
+j = frozenset(f) # Frozen set
+
+######################
+# Control structures #
+######################
+
+# If
+if 1 < 2:
+ print("It's true!")
+elif 2 < 1:
+ print("It's false!")
+else:
+ print("It's neither!")
+
+# For
+for i in f:
+ print(i)
+
+# While
+while a > 80:
+ print(a)
+ a -= 1
+
+########################
+# Function definitions #
+########################
+
+# No arguments
+
+def fun():
+ return 89
+
+fun()
+
+# Functions without a return statement return None
+
+def non():
+ pass
+
+print(non())
+
+# Positional arguments
+
+def sum(a, b):
+ return a + b
+
+print(sum(1, 2))
+
+# Keyword arguments
+
+def divide(dividend = 1, divisor = 1):
+ return dividend / divisor # Unsafe!!
+
+print(divide())
+print(divide(divisor = 2))
+print(divide(dividend = 4, divisor = 2))
+print(divide(divisor = 4, dividend = 2))
+
+# Both argument types
+
+def xnp(x, n, p = 1):
+ # Keyword args MUST appear AFTER positional args!
+ return (x * n) + p
+
+# Variable length arguments
+
+def varargs(*args):
+ for a in args:
+ print("Argument " + str(args.index(a)) + " is " + str(a))
+
+varargs(1)
+varargs(2, 3)
+varargs(4, 5, 6)
+
+# Variable keyword arguments
+
+def varkwargs(**kwargs):
+ for k in kwargs.keys():
+ print('Argument "' + str(k) + '" is "' + str(kwargs[k]))
+
+varkwargs(a = 1, b = 2, c = 3)
+
+# Everything!
+
+def allargs(a, b, c = None, *args, **kwargs):
+ print("a is " + str(a))
+
+ print("b is " + str(b))
+
+ if c is None:
+ print("c is None")
+ else:
+ print("c is Some")
+
+ for a in args:
+ print("Argument " + str(args.index(a)) + " is " + str(a))
+
+ for k in kwargs.keys():
+ print('Argument "' + str(k) + '" is "' + str(kwargs[k]))
+
+allargs('a', 1, None, 2, 3, 4, q = "Hail", w = "Caesar!")
+allargs(1, 2, c = 89)
+
+# Nested functions
+
+def outer(x):
+ def inner(y):
+ return x + y
+
+ return inner(9)
+
+print(outer(1))
diff --git a/EVI - 2018/EVI 04/Ejemplos/classes.py b/EVI - 2018/EVI 04/Ejemplos/classes.py
new file mode 100644
index 0000000..2699eaa
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/classes.py
@@ -0,0 +1,33 @@
+################
+# Simple class #
+################
+
+class Class(object):
+ def __init__(self, a):
+ self.a = a
+
+ def method(self):
+ return self.a
+
+o = Class(1)
+print(o.method())
+print(o.a) # !
+
+####################
+# With inheritance #
+####################
+
+class Subclass(Class):
+ def __init__(self, a, b):
+ super(Subclass, self).__init__(a)
+ self.b = b
+
+ def method(self):
+ return self.b
+
+ def sub_method(self):
+ return self.a
+
+s = Subclass(1, 2)
+print(s.method())
+print(s.sub_method())
diff --git a/EVI - 2018/EVI 04/Ejemplos/data.json b/EVI - 2018/EVI 04/Ejemplos/data.json
new file mode 100644
index 0000000..eed0a1b
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/data.json
@@ -0,0 +1 @@
+{"info": {"Weight": 80, "Height": 1.72}, "Age": 27, "Name": "Miguel", "ID": 18810993}
\ No newline at end of file
diff --git a/EVI - 2018/EVI 04/Ejemplos/db.py b/EVI - 2018/EVI 04/Ejemplos/db.py
new file mode 100644
index 0000000..26e24c9
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/db.py
@@ -0,0 +1,36 @@
+import sqlite3
+
+# "Connect" to a database
+conn = sqlite3.connect('example.db')
+
+# Get a cursor to operate on the database
+c = conn.cursor()
+
+# Create table
+c.execute('''CREATE TABLE stocks
+ (date text, trans text, symbol text, qty real, price real)''')
+
+# Insert a row of data
+c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")
+
+# Save (commit) the changes
+conn.commit()
+
+# Select
+t = ('RHAT',)
+c.execute('SELECT * FROM stocks WHERE symbol=?', t)
+print(c.fetchone())
+
+# Larger example that inserts many records at a time
+purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
+ ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
+ ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
+ ]
+c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
+
+for row in c.execute('SELECT * FROM stocks ORDER BY price'):
+ print(row)
+
+# We can also close the connection if we are done with it.
+# Just be sure any changes have been committed or they will be lost.
+conn.close()
diff --git a/EVI - 2018/EVI 04/Ejemplos/example.db b/EVI - 2018/EVI 04/Ejemplos/example.db
new file mode 100644
index 0000000..151009e
Binary files /dev/null and b/EVI - 2018/EVI 04/Ejemplos/example.db differ
diff --git a/EVI - 2018/EVI 04/Ejemplos/example.json b/EVI - 2018/EVI 04/Ejemplos/example.json
new file mode 100644
index 0000000..04288b3
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/example.json
@@ -0,0 +1,28 @@
+{
+ "firstName": "John",
+ "lastName": "Smith",
+ "isAlive": true,
+ "age": 25,
+ "address": {
+ "streetAddress": "21 2nd Street",
+ "city": "New York",
+ "state": "NY",
+ "postalCode": "10021-3100"
+ },
+ "phoneNumbers": [
+ {
+ "type": "home",
+ "number": "212 555-1234"
+ },
+ {
+ "type": "office",
+ "number": "646 555-4567"
+ },
+ {
+ "type": "mobile",
+ "number": "123 456-7890"
+ }
+ ],
+ "children": [],
+ "spouse": null
+}
diff --git a/EVI - 2018/EVI 04/Ejemplos/functional.py b/EVI - 2018/EVI 04/Ejemplos/functional.py
new file mode 100644
index 0000000..f1d3ec5
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/functional.py
@@ -0,0 +1,31 @@
+################################
+# Lambda (anonymous) functions #
+################################
+
+f = lambda x, y: x + y
+print(f(1, 2))
+print()
+
+##########################
+# Higher order functions #
+##########################
+
+# Map: Applies a function to many lists. Returns a generator.
+
+for i in map(lambda x: x*x, [1, 2, 3, 4, 5, 6]):
+ print(i)
+print()
+
+for i in map(f, [1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7]):
+ print(i)
+print()
+
+# Custom higher order function
+
+def hof(function = lambda x: x, *args):
+ for a in args:
+ print(function(a))
+
+hof(lambda s: s.upper(), "a", "b", "c")
+print()
+hof(lambda x: x is None, 1, ["a", "b"], None, {})
diff --git a/EVI - 2018/EVI 04/Ejemplos/generators.py b/EVI - 2018/EVI 04/Ejemplos/generators.py
new file mode 100644
index 0000000..2c435d8
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/generators.py
@@ -0,0 +1,46 @@
+####################
+# Generator object #
+####################
+
+def simple_generator():
+ i = 0
+ while(i < 10):
+ yield i
+ i += 1
+ raise StopIteration
+
+g = simple_generator()
+
+for i in g:
+ print(i)
+
+try:
+ print(next(g))
+except StopIteration:
+ print("Generator exhausted!")
+else:
+ print("Generator success!")
+finally:
+ print("At the end!")
+
+####################
+# Collection class #
+####################
+
+class Collection(object):
+ def __init__(self):
+ self.c = []
+
+ def add(self, x):
+ self.c.append(x)
+
+ def __iter__(self):
+ for i in self.c:
+ yield i
+
+c = Collection()
+c.add(1)
+c.add(2)
+c.add(3)
+for i in c:
+ print(i)
diff --git a/EVI - 2018/EVI 04/Ejemplos/http_client.py b/EVI - 2018/EVI 04/Ejemplos/http_client.py
new file mode 100644
index 0000000..ca94165
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/http_client.py
@@ -0,0 +1,9 @@
+import urllib2
+
+# Create an HTTP request.
+request = urllib2.Request("http://www.concisa.net.ve/2016/evi-2016-tutoriales/")
+# Perform the request.
+response = urllib2.urlopen(request)
+# Get the response data.
+document = response.read()
+print(document)
diff --git a/EVI - 2018/EVI 04/Ejemplos/http_server.py b/EVI - 2018/EVI 04/Ejemplos/http_server.py
new file mode 100644
index 0000000..2ba8df8
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/http_server.py
@@ -0,0 +1,8 @@
+from http.server import HTTPServer, SimpleHTTPRequestHandler
+
+def run(server_class = HTTPServer, handler_class = SimpleHTTPRequestHandler):
+ server_address = ('127.0.0.1', 8000)
+ httpd = server_class(server_address, handler_class)
+ httpd.serve_forever()
+
+run()
diff --git a/EVI - 2018/EVI 04/Ejemplos/jsoning.py b/EVI - 2018/EVI 04/Ejemplos/jsoning.py
new file mode 100644
index 0000000..f4cb7d9
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/jsoning.py
@@ -0,0 +1,16 @@
+import json
+
+data = {"Name": "Miguel",
+ "Age": 27,
+ "ID": 18810993,
+ "info" : {"Height": 1.72,
+ "Weight": 80
+ }
+ }
+
+with open("data.json", "w") as f:
+ f.write(json.dumps(data))
+
+with open("example.json") as f:
+ j = json.loads(f.read())
+ print(j["isAlive"])
diff --git a/EVI - 2018/EVI 04/Ejemplos/lists.py b/EVI - 2018/EVI 04/Ejemplos/lists.py
new file mode 100644
index 0000000..b607be4
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/lists.py
@@ -0,0 +1,60 @@
+a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+#################
+# List indexing #
+#################
+
+# Classical position indexing
+
+i = 0
+while i < len(a):
+ print(a[i])
+ i += 1
+
+# Negative indices
+
+print(a[-1])
+print(a[-2])
+print(a[-3])
+
+################
+# List slicing #
+################
+
+# Elements between indices 3 and 7
+
+print(a[3:7])
+
+# Elements from index 5 onwards
+
+print(a[5:])
+
+# Elements from the start up to index 8
+
+print(a[:8])
+
+#######################
+# List comprehensions #
+#######################
+
+# The first 10 square natural numbers
+
+l = [x * x for x in range(1, 10)]
+print(l)
+
+# The first even square natural numbers
+
+l = [x * x for x in range(1, 10) if (x * x) % 2 == 0]
+print(l)
+
+# Some numbers from the first list
+
+l = [x for x in a if x > 2 and x < 7]
+print(l)
+
+#######
+# zip #
+#######
+
+l = zip([1, 2, 3, 4], ["a", "b", "c"], ["Hello", ",", "World", "!"])
+print(l)
diff --git a/EVI - 2018/EVI 04/Ejemplos/qsort.py b/EVI - 2018/EVI 04/Ejemplos/qsort.py
new file mode 100644
index 0000000..00afd4a
--- /dev/null
+++ b/EVI - 2018/EVI 04/Ejemplos/qsort.py
@@ -0,0 +1,16 @@
+import random as r
+
+def qsort(l):
+ if len(l) == 0:
+ return []
+ elif len(l) == 1:
+ return l
+ else:
+ less = qsort([x for x in l[1:] if x <= l[0]])
+ more = qsort([x for x in l[1:] if x > l[0]])
+ return less + [l[0]] + more
+
+a = [r.randint(0, 100) for x in xrange(100)]
+b = qsort(a)
+print a
+print b
diff --git a/EVI - 2018/EVI 04/Modulo1.ipynb b/EVI - 2018/EVI 04/Modulo1.ipynb
new file mode 100755
index 0000000..8ca3242
--- /dev/null
+++ b/EVI - 2018/EVI 04/Modulo1.ipynb
@@ -0,0 +1,1533 @@
+{
+ "cells": [
+ {
+ "attachments": {
+ "logpyjn.png": {
+ "image/png": "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"
+ }
+ },
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# *Fundamentos de Python 3 en Jupyter*\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### El lenguaje de programación Python: Funciones"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "25\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = 20 \n",
+ "y = 5\n",
+ "print(x+y) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`add_numbers` es una función que toma dos números y los suma."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def add_numbers(x, y):\n",
+ " return x + y\n",
+ "\n",
+ "add_numbers(1, 2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`add_numbers` puede actualizarse agregando un tercer parámetro. Usando `print` se pueden imprimir múltiples opciones en una sola celda de `Jupyter`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "3\n",
+ "6\n"
+ ]
+ }
+ ],
+ "source": [
+ "def add_numbers(x,y,z=None):\n",
+ " if (z==None):\n",
+ " return x+y\n",
+ " else:\n",
+ " return x+y+z\n",
+ "\n",
+ "print(add_numbers(1, 2))\n",
+ "print(add_numbers(1, 2, 3))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "A `add_numbers` también pordemos agregarle un parámetro opcional llamado `flag`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "¡Flag es verdad, y es muy útil!\n",
+ "23\n"
+ ]
+ }
+ ],
+ "source": [
+ "def add_numbers(x, y, z=None, flag=False):\n",
+ " if (flag):\n",
+ " print('¡Flag es verdad, y es muy útil!')\n",
+ " if (z==None):\n",
+ " return x + y\n",
+ " else:\n",
+ " return x + y + z\n",
+ " \n",
+ "print(add_numbers(1, 2, 20, flag=True))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Se puede también asignar la función `add_numbers` a una variable `a`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "-2"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def add_numbers(x,y,z):\n",
+ " return x+y+z\n",
+ "\n",
+ "a = add_numbers\n",
+ "a(1, 2, -5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "La función `min` devuelve el elemento más pequeño en un iterable o el más pequeño de dos o más argumentos."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-6\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = (1,3,5, -6)\n",
+ "minimum = min(x)\n",
+ "print(minimum)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "La función `pow(x,y)` devuelve `x` a la potencia de `y`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "4\n"
+ ]
+ }
+ ],
+ "source": [
+ "p = pow(2,2)\n",
+ "print(p)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "La función `x//y` devuelve la parte entera del cociente entre `x` y `y`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2.5\n",
+ "2\n"
+ ]
+ }
+ ],
+ "source": [
+ "div = 5/2\n",
+ "print(div)\n",
+ "divint = 5//2\n",
+ "print(divint)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "La función `x%y` devuelve el resto de la división entre `x` y `y`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0\n",
+ "1\n"
+ ]
+ }
+ ],
+ "source": [
+ "mod1 = 4%2\n",
+ "print(mod1)\n",
+ "mod2 = 5%2\n",
+ "print(mod2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### El lenguaje de programación Python: Tipos y Secuencias"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use `type` para devolver el tipo del objeto."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "str"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type('Esto es una cadena de caracteres')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "NoneType"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(None)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "int"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(10000)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "float"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(100000.0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "function"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(add_numbers)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Una `tupla` es una estructura de dato inalterable. Las `tuplas` son secuencias, al igual que las `listas`. La diferencia entre las `tuplas` y las `listas` es que las `tuplas` no se pueden modificar a diferencia de las `listas`. Las `tuplas` usan paréntesis, mientras que las `listas` usan corchetes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = (1, 'b', 25, 'c')\n",
+ "print(type(x))\n",
+ "y = [1, 'b', 25, 'c']\n",
+ "print(type(y))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Veamos algunas modificaciones en la estructura de datos `lista`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Usemos `append` para gregar un elemento a la `lista`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1, 'b', 25, 'c', 2.5]\n"
+ ]
+ }
+ ],
+ "source": [
+ "y.append(2.5)\n",
+ "print(y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Este es un ejemplo de cómo se puede hacer un ciclo para recorrer los elementos de la `lista`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1\n",
+ "b\n",
+ "25\n",
+ "c\n",
+ "2.5\n"
+ ]
+ }
+ ],
+ "source": [
+ "for elemento in y:\n",
+ " print(elemento)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "O podemos utilizar el operador de índices:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1\n",
+ "b\n",
+ "25\n",
+ "c\n",
+ "2.5\n"
+ ]
+ }
+ ],
+ "source": [
+ "i=0\n",
+ "while( i != len(y) ):\n",
+ " print(y[i])\n",
+ " i = i + 1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use `+` para concatenar `listas`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[1, 25, 3, 'z']"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "[1,25] + [3,'z']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use `*` para repetir `listas`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[3, 'z', 3, 'z', 3, 'z', 3, 'z']"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "[3, 'z']*4"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use el operador `in` para chequear si algo está dentro de la `lista`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "'z' in [3,'z', 25]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use la notación `bracket []` para picar o rebanar `listas` o `cadenas de caracteres`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "c\n",
+ "[2]\n",
+ "[2, 'c']\n",
+ "E\n",
+ "E\n",
+ "Es\n"
+ ]
+ }
+ ],
+ "source": [
+ "y =[2, 'c', 34, -2, 'f']\n",
+ "print(y[1]) #primer elemento de la lista\n",
+ "print(y[0:1]) #primer elemento devuelto como lista\n",
+ "print(y[0:2]) #dos primeros elementos devueltos como lista\n",
+ "\n",
+ "x = 'Esto es una cadena de caracteres'\n",
+ "print(x[0]) #primer caracter\n",
+ "print(x[0:1]) #primer caracter, especificando último caracter\n",
+ "print(x[0:2]) #dos primeros caracteres"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Esta instrucción devuelve el último elemento de la lista o de la cadena."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "f\n",
+ "s\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(y[-1])\n",
+ "print(x[-1])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Esta instrucción devuelve un pedazo de la `lista` o `cadena` empezando desde el cuarto elemento desde el final y deteniéndose antes del segundo elemento del final."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[2, 'c', 34, -2, 'f']\n",
+ "['c', 34]\n",
+ "Esto es una cadena de caracteres\n",
+ "er\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(y)\n",
+ "print(y[-4:-2])\n",
+ "print(x)\n",
+ "print(x[-4:-2])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Este es un pedazo de la `lista` o `cadena` desde el inicio y se detiene antes del tercer elemento."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[2, 'c', 34, -2, 'f']\n",
+ "[2, 'c', 34]\n",
+ "Esto es una cadena de caracteres\n",
+ "Est\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(y)\n",
+ "print(y[:3])\n",
+ "print(x)\n",
+ "print(x[:3])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Y este es un pedazo de la `lista` o `cadena` empezando desde el tercer elemento y siguiendo hasta el final."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[2, 'c', 34, -2, 'f']\n",
+ "[-2, 'f']\n",
+ "Esto es una cadena de caracteres\n",
+ "o es una cadena de caracteres\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(y)\n",
+ "print(y[3:])\n",
+ "print(x)\n",
+ "print(x[3:])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Leer y escribir archivos CSV"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Vamos a importar un archivo `txt` como \n",
+ "uno `CSV` que contiene como columnas las etiquetas:\n",
+ "\n",
+ "* Nombre,Departamento,Mes de Cumpleaños\n",
+ "\n",
+ "Y como filas:\n",
+ "\n",
+ "* Adelis Nieves, Matemáticas, Junio\n",
+ "* Miguel Astor, Redes, Septiembre\n",
+ "* Francisco Sans, Computación Gráfica, Diciembre\n",
+ "* Antonio Escalante, Letras, Diciembre"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Los nombres de las columnas son: Nombre, Departamento, Mes de Cumpleaños\n",
+ "\tAdelis Nieves trabaja en el departamento de Matemáticas, y nació en el mes de Junio.\n",
+ "\tMiguel Astor trabaja en el departamento de Redes, y nació en el mes de Septiembre.\n",
+ "\tFrancisco Sans trabaja en el departamento de Computación Gráfica, y nació en el mes de Diciembre.\n",
+ "\tAntonio Escalante trabaja en el departamento de Letras, y nació en el mes de Diciembre.\n",
+ "Líneas procesadas: 5.\n"
+ ]
+ }
+ ],
+ "source": [
+ "import csv\n",
+ "\n",
+ "with open('empleados_cumple.txt') as csv_file:\n",
+ " csv_reader = csv.reader(csv_file, delimiter=',')\n",
+ " line_count = 0\n",
+ " for row in csv_reader:\n",
+ " if line_count == 0:\n",
+ " print(f'Los nombres de las columnas son: {\", \".join(row)}')\n",
+ " line_count += 1\n",
+ " else:\n",
+ " print(f'\\t{row[0]} trabaja en el departamento de {row[1]}, y nació en el mes de {row[2]}.')\n",
+ " line_count += 1\n",
+ " print(f'Líneas procesadas: {line_count}.')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "
\n",
+ "### Lenguaje de programación Python: Python Numérico (NumPy)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Creando arreglos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos generar una `lista` y convertirla en un `arreglo NumPy`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 1, 25, 31, 5])"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "milista = [1, 25, 31, 5]\n",
+ "x = np.array(milista)\n",
+ "x"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "O simplemente podemos pasarle una lista directamente."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 1, 25, 31, 5])"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y = np.array([1, 25, 31, 5])\n",
+ "y"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos pasarle una `lista` de `listas` para crear un `arreglo multidimensional`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[ 1, 25, 31, 5],\n",
+ " [10, 2, 11, 12],\n",
+ " [ 5, 7, 0, 1]])"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "m = np.array([[1, 25, 31, 5], [10, 2, 11, 12], [5, 7, 0, 1]])\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Usa el método `shape` para encontrar las dimensiones del arreglo. (filas, columnas)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(3, 4)"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "m.shape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`arange` devuelve valores espaciados uniformemente dentro de un intervalo dado."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28])"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "n = np.arange(0, 30, 2) # empieza en 0 cuenta de 2 en 2, se detiene antes de 30\n",
+ "n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`reshape` devuelve una matriz con los mismos datos con una nueva forma."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[ 0, 2, 4, 6, 8],\n",
+ " [10, 12, 14, 16, 18],\n",
+ " [20, 22, 24, 26, 28]])"
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "n = n.reshape(3, 5) #cambia la forma de manera que se obtenga una matriz 3x5\n",
+ "n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Combinando arreglos"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[1, 1, 1],\n",
+ " [1, 1, 1]])"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "p = np.ones([2, 3], int)\n",
+ "p"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use `vstack` para apilar matrices en secuencia verticalmente (por fila)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[1, 1, 1],\n",
+ " [1, 1, 1],\n",
+ " [2, 2, 2],\n",
+ " [2, 2, 2]])"
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.vstack([p, 2*p])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use `hstack` para apilar arreglos en secuencia horizontalmente (por columna)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[1, 1, 1, 2, 2, 2],\n",
+ " [1, 1, 1, 2, 2, 2]])"
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.hstack([p, 2*p])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Operaciones"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Use `+`, `-`, `*`, `/` and `**` para realizar operaciones de suma , resta, multiplicación, división y potencia elemento a elemento."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[ 1 25 31 5]\n",
+ "[ 1 25 31 5]\n",
+ "[ 2 50 62 10]\n",
+ "[0 0 0 0]\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(x)\n",
+ "print(y)\n",
+ "print(x + y) # suma elemento a elemento [1 2 3] + [4 5 6] = [5 7 9]\n",
+ "print(x - y) # resta elemento a elemento [1 2 3] - [4 5 6] = [-3 -3 -3]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[ 1 25 31 5]\n",
+ "[ 1 25 31 5]\n",
+ "[ 1 625 961 25]\n",
+ "[1. 1. 1. 1.]\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(x)\n",
+ "print(y)\n",
+ "print(x * y) # multiplicación elemento a elemento [1 2 3] * [4 5 6] = [4 10 18]\n",
+ "print(x / y) # división elemento a elemento [1 2 3] / [4 5 6] = [0.25 0.4 0.5]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[ 1 25 31 5]\n",
+ "[ 1 625 961 25]\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(x)\n",
+ "print(x**2) # potencia elemento a elemento [1 2 3] ^2 = [1 4 9]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Producto punto o escalar:** \n",
+ "\n",
+ "$ \\begin{bmatrix}x_1 \\ x_2 \\ x_3\\end{bmatrix}\n",
+ "\\cdot\n",
+ "\\begin{bmatrix}y_1 \\\\ y_2 \\\\ y_3\\end{bmatrix}\n",
+ "= x_1 y_1 + x_2 y_2 + x_3 y_3$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 57,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[ 1 25 31 5]\n",
+ "[ 1 25 31 5]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "1612"
+ ]
+ },
+ "execution_count": 57,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "print(x)\n",
+ "print(y)\n",
+ "x.dot(y) #producto escalar "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[ 1 25 31 5]\n",
+ "[[ 1 25 31 5]\n",
+ " [ 1 625 961 25]]\n",
+ "2\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(y)\n",
+ "z = np.array([y, y**2])\n",
+ "print(z)\n",
+ "print(len(z)) #número de filas del arreglo"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Vamos a mirar la transposición de matrices. La transposición permuta las dimensiones de la matriz."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[ 1, 1],\n",
+ " [ 25, 625],\n",
+ " [ 31, 961],\n",
+ " [ 5, 25]])"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "zt = np.transpose(z, axes=None)\n",
+ "zt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Las dimensiones del arreglo `zt` son `(4,2)` después de la transposición."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(4, 2)"
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "zt.shape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Se puede usar también `.T` para obtener la transpuesta de un arreglo."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[ 1 1]\n",
+ " [ 25 625]\n",
+ " [ 31 961]\n",
+ " [ 5 25]]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "array([[ 1, 25, 31, 5],\n",
+ " [ 1, 625, 961, 25]])"
+ ]
+ },
+ "execution_count": 65,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "print(zt)\n",
+ "zt.T"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Indexando/Rebanando"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144])"
+ ]
+ },
+ "execution_count": 66,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s = np.arange(13)**2\n",
+ "s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use la notación de `bracket []` para obtener valores en el índice indicado. Recuerde que la indexación comienza en 0."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(0, 16, 144)"
+ ]
+ },
+ "execution_count": 67,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s[0], s[4], s[-1]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use `:` para indicar un rango. `array[empieza:termina]`\n",
+ "\n",
+ "\n",
+ "Dejando `empieza` or `termina` vacío quedará predeterminado al principio / final de la matriz."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 1, 4, 9, 16])"
+ ]
+ },
+ "execution_count": 69,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s[1:5]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Use contadores negativos desde el final."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 70,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 81, 100, 121, 144])"
+ ]
+ },
+ "execution_count": 70,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s[-4:]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Se puede usar un segundo `:` para indicar el tamaño del paso. `array [empieza: termina: paso]`\n",
+ "\n",
+ "Aquí estamos comenzando el quinto elemento desde el final, y contando hacia atrás cada 2 hasta que se alcanza el comienzo de la matriz."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([64, 36, 16, 4, 0])"
+ ]
+ },
+ "execution_count": 71,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s[-5::-2]"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/EVI - 2018/EVI 04/Modulo2.ipynb b/EVI - 2018/EVI 04/Modulo2.ipynb
new file mode 100755
index 0000000..3374a6e
--- /dev/null
+++ b/EVI - 2018/EVI 04/Modulo2.ipynb
@@ -0,0 +1,3170 @@
+{
+ "cells": [
+ {
+ "attachments": {
+ "logpypan.png": {
+ "image/png": "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"
+ }
+ },
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# *Introducción a Pandas en los cuadernos de Jupyter*\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### La estructura de Datos `Serie`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`Arreglo` unidimensional con etiquetas en los ejes (incluidas series de tiempo). Los parámetros de una `Serie` son: `data` (matriz, diccionario o escalar), `index` (arreglo de índices), `dtype` (`numpy.dtype` o `None`) y `copy` (booleano o por defecto `False`)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Importamos la biblioteca `Pandas`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "pd.Series?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos convertir una `lista` en una `serie` y pandas asigna de manera inmediata una lista de índices que empieza en 0."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 Tigre\n",
+ "1 Oso\n",
+ "2 Camello\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "animales = ['Tigre', 'Oso', 'Camello']\n",
+ "pd.Series(animales)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 1\n",
+ "1 2\n",
+ "2 3\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "numeros = [1, 2, 3]\n",
+ "pd.Series(numeros)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 Tigre\n",
+ "1 Oso\n",
+ "2 None\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "animales = ['Tigre', 'Oso', None]\n",
+ "pd.Series(animales)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Es importante saber como `NumPy` y `Pandas` manejan los datos faltantes. En Python tenemos el tipo `None` para indicar un dato faltante. Si tenemos una lista de números, `Pandas` automáticamente convierte este valor `None` en un valor designado como `NaN`, que significa `Not a Number`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 1.0\n",
+ "1 2.0\n",
+ "2 NaN\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "numeros = [1, 2, None]\n",
+ "pd.Series(numeros)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Importamos la biblioteca `NumPy`. También es importante saber que `NaN` no es `None`. Cuando hacemos un test para saber si `NaN` es `NaN` tambien obtendremos `False`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "False"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "np.nan == None"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "False"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.nan == np.nan"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Se necesita la función especial `isnan` de `NumPy` para chequear la presencia de un `no número` en nuestros datos."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "True\n",
+ "True\n",
+ "True\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(np.isnan(np.nan))\n",
+ "print(None is None)\n",
+ "print(np.nan is np.nan)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "¿Cómo creamos una `serie` en `Pandas`? Podemos utilizar una estructura de datos `diccionario` con sus `claves` y convertirlo en una `serie`, donde los índices de la `serie` son las claves del diccionario."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Béisbol Cuba\n",
+ "Capoeira Brasil\n",
+ "Corrida de Toros España\n",
+ "Golf Escocia\n",
+ "Pelota Vasca País Vasco\n",
+ "Rayuela Chile\n",
+ "Rugby Gales\n",
+ "Sumo Japón\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "deportes = {'Capoeira': 'Brasil',\n",
+ " 'Rayuela': 'Chile',\n",
+ " 'Pelota Vasca': 'País Vasco',\n",
+ " 'Béisbol': 'Cuba',\n",
+ " 'Rugby': 'Gales',\n",
+ " 'Golf': 'Escocia',\n",
+ " 'Corrida de Toros': 'España',\n",
+ " 'Sumo': 'Japón'}\n",
+ "s = pd.Series(deportes)\n",
+ "s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Luego, podemos chequear la lista de índices con el atributo `.index`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['Béisbol', 'Capoeira', 'Corrida de Toros', 'Golf', 'Pelota Vasca',\n",
+ " 'Rayuela', 'Rugby', 'Sumo'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s.index"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "En este otro ejemplo, pasamos directamente una lista con su conjunto de índices para crear la `Serie`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "India Tigre\n",
+ "America Oso\n",
+ "Africa Camello\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s = pd.Series(['Tigre', 'Oso', 'Camello'], index=['India', 'America', 'Africa'])\n",
+ "s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Aquí tenemos un ejemplo de un elemento nuevo en la lista de índices que no tiene un valor asignado, no existe un país asociado al índice `Natación` y `Pandas` representa este valor faltante con `NaN`. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Capoeira Brasil\n",
+ "Sumo Japón\n",
+ "Pelota Vasca País Vasco\n",
+ "Natación NaN\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "deportes = {'Capoeira': 'Brasil',\n",
+ " 'Rayuela': 'Chile',\n",
+ " 'Pelota Vasca': 'País Vasco',\n",
+ " 'Béisbol': 'Cuba',\n",
+ " 'Rugby': 'Gales',\n",
+ " 'Golf': 'Escocia',\n",
+ " 'Corrida de Toros': 'España',\n",
+ " 'Sumo': 'Japón'}\n",
+ "s = pd.Series(deportes, index=['Capoeira', 'Sumo', 'Pelota Vasca', 'Natación'])\n",
+ "s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Búsqueda en una `Serie`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Béisbol Cuba\n",
+ "Capoeira Brasil\n",
+ "Corrida de Toros España\n",
+ "Golf Escocia\n",
+ "Pelota Vasca País Vasco\n",
+ "Rayuela Chile\n",
+ "Rugby Gales\n",
+ "Sumo Japón\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "deportes = {'Capoeira': 'Brasil',\n",
+ " 'Rayuela': 'Chile',\n",
+ " 'Pelota Vasca': 'País Vasco',\n",
+ " 'Béisbol': 'Cuba',\n",
+ " 'Rugby': 'Gales',\n",
+ " 'Golf': 'Escocia',\n",
+ " 'Corrida de Toros': 'España',\n",
+ " 'Sumo': 'Japón'}\n",
+ "s = pd.Series(deportes)\n",
+ "s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos hacer búsquedas en las `series` por posición de índices o por etiqueta de índices. Si queremos hacer búsqueda por ubicación numérica (empezando desde 0) utilizamos el atributo `iloc`. Si por otra parte, hacemos búqueda por etiqueta de índice entonces usamos el atributo `loc`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'País Vasco'"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s.iloc[4]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'País Vasco'"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s.loc['Pelota Vasca']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`Pandas` trata de que el código sea más legible. Si le pasamos por parámetro un valor numérico a la `Serie` esta se comportará como si la búsqueda se hace con el atributo `iloc`, si en cambio le pasamos un objeto, hará la búsqueda por etiqueta como con el atributo `loc`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'País Vasco'"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s[4]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'País Vasco'"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s['Pelota Vasca']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "¿Qué pasa cuando tenemos una lista de índices que son enteros?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "99 Brasil\n",
+ "100 Chile\n",
+ "101 País Vasco\n",
+ "102 Cuba\n",
+ "103 Gales\n",
+ "104 Escocia\n",
+ "105 España\n",
+ "106 Japón\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "deportes = {99: 'Brasil',\n",
+ " 100: 'Chile',\n",
+ " 101: 'País Vasco',\n",
+ " 102: 'Cuba',\n",
+ " 103: 'Gales',\n",
+ " 104: 'Escocia',\n",
+ " 105: 'España',\n",
+ " 106: 'Japón'}\n",
+ "s = pd.Series(deportes)\n",
+ "s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Cuando tenemos un caso como este es más seguro utilizar los atributos `iloc` o `loc` según sea el caso. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "ename": "KeyError",
+ "evalue": "0",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ms\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m#Esta instrucción no llamará s.iloc[0] como esperaríamos y va a generar un error\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[0;32m/anaconda3/lib/python3.6/site-packages/pandas/core/series.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 621\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_if_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 622\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 623\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_value\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 624\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 625\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mis_scalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_value\u001b[0;34m(self, series, key)\u001b[0m\n\u001b[1;32m 2558\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2559\u001b[0m return self._engine.get_value(s, k,\n\u001b[0;32m-> 2560\u001b[0;31m tz=getattr(series.dtype, 'tz', None))\n\u001b[0m\u001b[1;32m 2561\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2562\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minferred_type\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'integer'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'boolean'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_value\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_value\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.Int64HashTable.get_item\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.Int64HashTable.get_item\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;31mKeyError\u001b[0m: 0"
+ ]
+ }
+ ],
+ "source": [
+ "s[0] #Esta instrucción no llamará s.iloc[0] como esperaríamos y va a generar un error"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "s.iloc[0]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "s.loc[99]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Ya que sabemos hacer búsquedas en las `Series`, ahora vamos a trabajar con los datos (encontrar valores, resumir los datos o transformarlos)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 105.0\n",
+ "1 223.0\n",
+ "2 5.0\n",
+ "3 102.0\n",
+ "4 27.0\n",
+ "5 -126.0\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s = pd.Series([105.00, 223.00, 5, 102.00, 27, -126])\n",
+ "s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Una forma de trabajar es iterar sobre un conjunto de datos e invocar una operación de interés"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "336.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "total = 0\n",
+ "for elemento in s:\n",
+ " total+=elemento\n",
+ "print(total)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Con `NumPy` podemos tener acceso a las funciones universales binarias o unarias (vectorizadas, cálculos más rápidos). En este ejemplo, `np.sum` hará la suma de todos los elementos en la `serie`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "336.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "total = np.sum(s)\n",
+ "print(total)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "También podemos generar una `serie` grande de números aleatorios y con el método `.head()` podemos desplegar un encabezado con los 5 primeros elementos de la `serie` y con `len` chequear el tamaño de la misma."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0 42\n",
+ "1 872\n",
+ "2 956\n",
+ "3 330\n",
+ "4 9\n",
+ "dtype: int64\n",
+ "10000\n"
+ ]
+ }
+ ],
+ "source": [
+ "s = pd.Series(np.random.randint(0,1000,10000))\n",
+ "print(s.head())\n",
+ "print(len(s))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Los cuadernos de `Jupyter` tienen **funciones mágicas** que pueden ser útiles. Una de ellas es `%%timeit` que nos servirá para ver cuál de los dos métodos para sumar elementos de una `serie` es más rápido.\n",
+ "Basta con tipear el símbolo `%` y la tecla `Tab` para obtener una lista de las **funciones mágicas** de `Jupyter`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "803 µs ± 52.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%timeit -n 100\n",
+ "sumar = 0\n",
+ "for elemento in s:\n",
+ " sumar+=elemento"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "128 µs ± 21.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%timeit -n 100\n",
+ "sumar = np.sum(s)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`NumPy` y `Pandas` tienen el `broadcasting`, se puede aplicar una operación a cada valor de la `serie` y modificarla."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 44\n",
+ "1 874\n",
+ "2 958\n",
+ "3 332\n",
+ "4 11\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "s+=2 #Suma 2 a cada elemento de la serie usando broadcasting\n",
+ "s.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Una manera poco eficiente de hacer esto es iterar sobre cada elemento de la `serie` para hacer la suma. El método `.iteritems()` devuelve un iterador sobre los pares `(key, value)` (clave, valor) de un diccionario, en este caso de nuestra `serie` s."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: set_value is deprecated and will be removed in a future release. Please use .at[] or .iat[] accessors instead\n",
+ " \n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "0 46\n",
+ "1 876\n",
+ "2 960\n",
+ "3 334\n",
+ "4 13\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "for etiqueta, valor in s.iteritems():\n",
+ " s.set_value(etiqueta, valor+2)\n",
+ "s.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%timeit -n 10\n",
+ "s = pd.Series(np.random.randint(0,1000,10000))\n",
+ "for etiqueta, valor in s.iteritems():\n",
+ " s.loc[etiqueta]= valor+2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%timeit -n 10\n",
+ "s = pd.Series(np.random.randint(0,1000,10000))\n",
+ "s+=2\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos agregar elementos a una `serie` de la siguiente forma:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 1\n",
+ "1 2\n",
+ "2 3\n",
+ "Animal Oso\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "s = pd.Series([1, 2, 3])\n",
+ "s.loc['Animal'] = 'Oso'\n",
+ "s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Este es un ejemplo de una `serie` donde los valores del conjunto de índices no son únicos. Esto hace que las tablas de datos funcionen diferente y es por ello que agregar nuevos elementos debe hacerse con el método `append`, que en primera instancia, no modificará la `serie` sino que devuelve una nueva `serie` con los elementos que se agregaron."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "deportes_originales = pd.Series({'Capoeira': 'Brasil',\n",
+ " 'Rayuela': 'Chile',\n",
+ " 'Pelota Vasca': 'País Vasco',\n",
+ " 'Béisbol': 'Cuba',\n",
+ " 'Rugby': 'Gales',\n",
+ " 'Golf': 'Escocia',\n",
+ " 'Corrida de Toros': 'España',\n",
+ " 'Sumo': 'Japón'})\n",
+ "paises_que_aman_el_beisbol = pd.Series(['Venezuela',\n",
+ " 'USA',\n",
+ " 'Cuba',\n",
+ " 'Puerto Rico',\n",
+ " 'Dominicana'], \n",
+ " index=['Béisbol',\n",
+ " 'Béisbol',\n",
+ " 'Béisbol',\n",
+ " 'Béisbol',\n",
+ " 'Béisbol'])\n",
+ "todos_los_paises = deportes_originales.append(paises_que_aman_el_beisbol)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Béisbol Cuba\n",
+ "Capoeira Brasil\n",
+ "Corrida de Toros España\n",
+ "Golf Escocia\n",
+ "Pelota Vasca País Vasco\n",
+ "Rayuela Chile\n",
+ "Rugby Gales\n",
+ "Sumo Japón\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "deportes_originales"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Béisbol Venezuela\n",
+ "Béisbol USA\n",
+ "Béisbol Cuba\n",
+ "Béisbol Puerto Rico\n",
+ "Béisbol Dominicana\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "paises_que_aman_el_beisbol"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Béisbol Cuba\n",
+ "Capoeira Brasil\n",
+ "Corrida de Toros España\n",
+ "Golf Escocia\n",
+ "Pelota Vasca País Vasco\n",
+ "Rayuela Chile\n",
+ "Rugby Gales\n",
+ "Sumo Japón\n",
+ "Béisbol Venezuela\n",
+ "Béisbol USA\n",
+ "Béisbol Cuba\n",
+ "Béisbol Puerto Rico\n",
+ "Béisbol Dominicana\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "todos_los_paises"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Béisbol Cuba\n",
+ "Béisbol Venezuela\n",
+ "Béisbol USA\n",
+ "Béisbol Cuba\n",
+ "Béisbol Puerto Rico\n",
+ "Béisbol Dominicana\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "todos_los_paises.loc['Béisbol']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "### La estructura de datos `DataFrame`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "El `DataFrame` o Tabla de Datos es el corazón de la biblioteca `Pandas`. Es el objeto primario para el análisis de datos. Es una especie de **arreglo bidimensional** con etiquetas en los ejes. En este ejemplo, crearemos tres diccionarios que serán luego las filas de nuestro `DataFrame`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ "
\n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre\n",
+ "Tienda 1 Libro 1200 Adelis\n",
+ "Tienda 1 Raspberry pi 3 15000 Miguel\n",
+ "Tienda 2 Balón 5000 Jaime"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "compra_1 = pd.Series({'Nombre': 'Adelis',\n",
+ " 'Artículo comprado': 'Libro',\n",
+ " 'Costo': 1200})\n",
+ "compra_2 = pd.Series({'Nombre': 'Miguel',\n",
+ " 'Artículo comprado': 'Raspberry pi 3',\n",
+ " 'Costo': 15000})\n",
+ "compra_3 = pd.Series({'Nombre': 'Jaime',\n",
+ " 'Artículo comprado': 'Balón',\n",
+ " 'Costo': 5000})\n",
+ "df = pd.DataFrame([compra_1, compra_2, compra_3], index=['Tienda 1', 'Tienda 1', 'Tienda 2'])\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "En un `DataFrame` también se puede extraer información usando los atributos `loc` y `iloc`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Artículo comprado Balón\n",
+ "Costo 5000\n",
+ "Nombre Jaime\n",
+ "Name: Tienda 2, dtype: object"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.loc['Tienda 2']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "También podemos chequear el tipo de dato usando la función `type` de Python."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "pandas.core.series.Series"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(df.loc['Tienda 2'])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "En los `DataFrame` también se pueden tener listas de índices no únicos. En el ejemplo, hay dos índices con el mismo nombre `Tienda 1`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre\n",
+ "Tienda 1 Libro 1200 Adelis\n",
+ "Tienda 1 Raspberry pi 3 15000 Miguel"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.loc['Tienda 1']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "También podemos seleccionar columnas agregando un parámetro extra al atributo `loc`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Tienda 1 1200\n",
+ "Tienda 1 15000\n",
+ "Name: Costo, dtype: int64"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.loc['Tienda 1', 'Costo']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Usar el atributo `.T` para obtener la transpuesta del `DataFrame` o Tabla de Datos."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Tienda 1 | \n",
+ " Tienda 1 | \n",
+ " Tienda 2 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Artículo comprado | \n",
+ " Libro | \n",
+ " Raspberry pi 3 | \n",
+ " Balón | \n",
+ "
\n",
+ " \n",
+ " | Costo | \n",
+ " 1200 | \n",
+ " 15000 | \n",
+ " 5000 | \n",
+ "
\n",
+ " \n",
+ " | Nombre | \n",
+ " Adelis | \n",
+ " Miguel | \n",
+ " Jaime | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Tienda 1 Tienda 1 Tienda 2\n",
+ "Artículo comprado Libro Raspberry pi 3 Balón\n",
+ "Costo 1200 15000 5000\n",
+ "Nombre Adelis Miguel Jaime"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.T"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Usando `.T.loc[]` se puede seleccionar una columna usando como parámetro la etiqueta de su nombre. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Tienda 1 1200\n",
+ "Tienda 1 15000\n",
+ "Tienda 2 5000\n",
+ "Name: Costo, dtype: object"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.T.loc['Costo']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Tienda 1 1200\n",
+ "Tienda 1 15000\n",
+ "Tienda 2 5000\n",
+ "Name: Costo, dtype: int64"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['Costo']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Tienda 1 1200\n",
+ "Tienda 1 15000\n",
+ "Name: Costo, dtype: int64"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.loc['Tienda 1']['Costo']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`loc` también tiene soporte para rebanar o seleccionar del `DataFrame` con la notación `[]`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Nombre | \n",
+ " Costo | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Adelis | \n",
+ " 1200 | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Miguel | \n",
+ " 15000 | \n",
+ "
\n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Jaime | \n",
+ " 5000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Nombre Costo\n",
+ "Tienda 1 Adelis 1200\n",
+ "Tienda 1 Miguel 15000\n",
+ "Tienda 2 Jaime 5000"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.loc[:,['Nombre', 'Costo']]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "También podemos eliminar datos del `DataFrame` con la función `drop()`. Esta función toma un solo parámetro que es el índice del conjunto de datos que deseamos eliminar. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre\n",
+ "Tienda 2 Balón 5000 Jaime"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.drop('Tienda 1')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos ver que nuestro `DataFrame` original sigue intacto. Solo hicimos una **extracción** de información."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ "
\n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre\n",
+ "Tienda 1 Libro 1200 Adelis\n",
+ "Tienda 1 Raspberry pi 3 15000 Miguel\n",
+ "Tienda 2 Balón 5000 Jaime"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "También podemos hacer una copia del `DataFrame` con la función `copy()` para guardar la extracción de información. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre\n",
+ "Tienda 2 Balón 5000 Jaime"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "copiar_df = df.copy()\n",
+ "copiar_df = copiar_df.drop('Tienda 1')\n",
+ "copiar_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "copiar_df.drop?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos eliminar una columna de manera sencilla, usando simplemente la palabra clave `del` y el índice o nombre de la comuna. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Nombre | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " Jaime | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Nombre\n",
+ "Tienda 2 Balón Jaime"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "del copiar_df['Costo']\n",
+ "copiar_df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Finalmente, es muy sencillo agregar una columna al `DataFrame`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ " Ubicación | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ " Venezuela | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ " Chile | \n",
+ "
\n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ " Argentina | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre Ubicación\n",
+ "Tienda 1 Libro 1200 Adelis Venezuela\n",
+ "Tienda 1 Raspberry pi 3 15000 Miguel Chile\n",
+ "Tienda 2 Balón 5000 Jaime Argentina"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['Ubicación'] = ['Venezuela', 'Chile', 'Argentina']\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "### Lectura de un `DataFrame`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Usemos `!cat` para leer un archivo de formato `CSV`. Nota: `!cat` funciona para **Linux** y **Mac** pero puede no funcionar para **Windows** :("
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15\r\n",
+ ",№ Summer,01 !,02 !,03 !,Total,№ Winter,01 !,02 !,03 !,Total,№ Games,01 !,02 !,03 !,Combined total\r\n",
+ "Afghanistan (AFG),13,0,0,2,2,0,0,0,0,0,13,0,0,2,2\r\n",
+ "Algeria (ALG),12,5,2,8,15,3,0,0,0,0,15,5,2,8,15\r\n",
+ "Argentina (ARG),23,18,24,28,70,18,0,0,0,0,41,18,24,28,70\r\n",
+ "Armenia (ARM),5,1,2,9,12,6,0,0,0,0,11,1,2,9,12\r\n",
+ "Australasia (ANZ) [ANZ],2,3,4,5,12,0,0,0,0,0,2,3,4,5,12\r\n",
+ "Australia (AUS) [AUS] [Z],25,139,152,177,468,18,5,3,4,12,43,144,155,181,480\r\n",
+ "Austria (AUT),26,18,33,35,86,22,59,78,81,218,48,77,111,116,304\r\n",
+ "Azerbaijan (AZE),5,6,5,15,26,5,0,0,0,0,10,6,5,15,26\r\n",
+ "Bahamas (BAH),15,5,2,5,12,0,0,0,0,0,15,5,2,5,12\r\n",
+ "Bahrain (BRN),8,0,0,1,1,0,0,0,0,0,8,0,0,1,1\r\n",
+ "Barbados (BAR) [BAR],11,0,0,1,1,0,0,0,0,0,11,0,0,1,1\r\n",
+ "Belarus (BLR),5,12,24,39,75,6,6,4,5,15,11,18,28,44,90\r\n",
+ "Belgium (BEL),25,37,52,53,142,20,1,1,3,5,45,38,53,56,147\r\n",
+ "Bermuda (BER),17,0,0,1,1,7,0,0,0,0,24,0,0,1,1\r\n",
+ "Bohemia (BOH) [BOH] [Z],3,0,1,3,4,0,0,0,0,0,3,0,1,3,4\r\n",
+ "Botswana (BOT),9,0,1,0,1,0,0,0,0,0,9,0,1,0,1\r\n",
+ "Brazil (BRA),21,23,30,55,108,7,0,0,0,0,28,23,30,55,108\r\n",
+ "British West Indies (BWI) [BWI],1,0,0,2,2,0,0,0,0,0,1,0,0,2,2\r\n",
+ "Bulgaria (BUL) [H],19,51,85,78,214,19,1,2,3,6,38,52,87,81,220\r\n",
+ "Burundi (BDI),5,1,0,0,1,0,0,0,0,0,5,1,0,0,1\r\n",
+ "Cameroon (CMR),13,3,1,1,5,1,0,0,0,0,14,3,1,1,5\r\n",
+ "Canada (CAN),25,59,99,121,279,22,62,56,52,170,47,121,155,173,449\r\n",
+ "Chile (CHI) [I],22,2,7,4,13,16,0,0,0,0,38,2,7,4,13\r\n",
+ "China (CHN) [CHN],9,201,146,126,473,10,12,22,19,53,19,213,168,145,526\r\n",
+ "Colombia (COL),18,2,6,11,19,1,0,0,0,0,19,2,6,11,19\r\n",
+ "Costa Rica (CRC),14,1,1,2,4,6,0,0,0,0,20,1,1,2,4\r\n",
+ "Ivory Coast (CIV) [CIV],12,0,1,0,1,0,0,0,0,0,12,0,1,0,1\r\n",
+ "Croatia (CRO),6,6,7,10,23,7,4,6,1,11,13,10,13,11,34\r\n",
+ "Cuba (CUB) [Z],19,72,67,70,209,0,0,0,0,0,19,72,67,70,209\r\n",
+ "Cyprus (CYP),9,0,1,0,1,10,0,0,0,0,19,0,1,0,1\r\n",
+ "Czech Republic (CZE) [CZE],5,14,15,15,44,6,7,9,8,24,11,21,24,23,68\r\n",
+ "Czechoslovakia (TCH) [TCH],16,49,49,45,143,16,2,8,15,25,32,51,57,60,168\r\n",
+ "Denmark (DEN) [Z],26,43,68,68,179,13,0,1,0,1,39,43,69,68,180\r\n",
+ "Djibouti (DJI) [B],7,0,0,1,1,0,0,0,0,0,7,0,0,1,1\r\n",
+ "Dominican Republic (DOM),13,3,2,1,6,0,0,0,0,0,13,3,2,1,6\r\n",
+ "Ecuador (ECU),13,1,1,0,2,0,0,0,0,0,13,1,1,0,2\r\n",
+ "Egypt (EGY) [EGY] [Z],21,7,9,10,26,1,0,0,0,0,22,7,9,10,26\r\n",
+ "Eritrea (ERI),4,0,0,1,1,0,0,0,0,0,4,0,0,1,1\r\n",
+ "Estonia (EST),11,9,9,15,33,9,4,2,1,7,20,13,11,16,40\r\n",
+ "Ethiopia (ETH),12,21,7,17,45,2,0,0,0,0,14,21,7,17,45\r\n",
+ "Finland (FIN),24,101,84,117,302,22,42,62,57,161,46,143,146,174,463\r\n",
+ "France (FRA) [O] [P] [Z],27,202,223,246,671,22,31,31,47,109,49,233,254,293,780\r\n",
+ "Gabon (GAB),9,0,1,0,1,0,0,0,0,0,9,0,1,0,1\r\n",
+ "Georgia (GEO),5,6,5,14,25,6,0,0,0,0,11,6,5,14,25\r\n",
+ "Germany (GER) [GER] [Z],15,174,182,217,573,11,78,78,53,209,26,252,260,270,782\r\n",
+ "United Team of Germany (EUA) [EUA],3,28,54,36,118,3,8,6,5,19,6,36,60,41,137\r\n",
+ "East Germany (GDR) [GDR],5,153,129,127,409,6,39,36,35,110,11,192,165,162,519\r\n",
+ "West Germany (FRG) [FRG],5,56,67,81,204,6,11,15,13,39,11,67,82,94,243\r\n",
+ "Ghana (GHA) [GHA],13,0,1,3,4,1,0,0,0,0,14,0,1,3,4\r\n",
+ "Great Britain (GBR) [GBR] [Z],27,236,272,272,780,22,10,4,12,26,49,246,276,284,806\r\n",
+ "Greece (GRE) [Z],27,30,42,39,111,18,0,0,0,0,45,30,42,39,111\r\n",
+ "Grenada (GRN),8,1,0,0,1,0,0,0,0,0,8,1,0,0,1\r\n",
+ "Guatemala (GUA),13,0,1,0,1,1,0,0,0,0,14,0,1,0,1\r\n",
+ "Guyana (GUY) [GUY],16,0,0,1,1,0,0,0,0,0,16,0,0,1,1\r\n",
+ "Haiti (HAI) [J],14,0,1,1,2,0,0,0,0,0,14,0,1,1,2\r\n",
+ "Hong Kong (HKG) [HKG],15,1,1,1,3,4,0,0,0,0,19,1,1,1,3\r\n",
+ "Hungary (HUN),25,167,144,165,476,22,0,2,4,6,47,167,146,169,482\r\n",
+ "Iceland (ISL),19,0,2,2,4,17,0,0,0,0,36,0,2,2,4\r\n",
+ "India (IND) [F],23,9,6,11,26,9,0,0,0,0,32,9,6,11,26\r\n",
+ "Indonesia (INA),14,6,10,11,27,0,0,0,0,0,14,6,10,11,27\r\n",
+ "Iran (IRI) [K],15,15,20,25,60,10,0,0,0,0,25,15,20,25,60\r\n",
+ "Iraq (IRQ),13,0,0,1,1,0,0,0,0,0,13,0,0,1,1\r\n",
+ "Ireland (IRL),20,9,8,12,29,6,0,0,0,0,26,9,8,12,29\r\n",
+ "Israel (ISR),15,1,1,5,7,6,0,0,0,0,21,1,1,5,7\r\n",
+ "Italy (ITA) [M] [S],26,198,166,185,549,22,37,34,43,114,48,235,200,228,663\r\n",
+ "Jamaica (JAM) [JAM],16,17,30,20,67,7,0,0,0,0,23,17,30,20,67\r\n",
+ "Japan (JPN),21,130,126,142,398,20,10,17,18,45,41,140,143,160,443\r\n",
+ "Kazakhstan (KAZ),5,16,17,19,52,6,1,3,3,7,11,17,20,22,59\r\n",
+ "Kenya (KEN),13,25,32,29,86,3,0,0,0,0,16,25,32,29,86\r\n",
+ "North Korea (PRK),9,14,12,21,47,8,0,1,1,2,17,14,13,22,49\r\n",
+ "South Korea (KOR),16,81,82,80,243,17,26,17,10,53,33,107,99,90,296\r\n",
+ "Kuwait (KUW),12,0,0,2,2,0,0,0,0,0,12,0,0,2,2\r\n",
+ "Kyrgyzstan (KGZ),5,0,1,2,3,6,0,0,0,0,11,0,1,2,3\r\n",
+ "Latvia (LAT),10,3,11,5,19,10,0,4,3,7,20,3,15,8,26\r\n",
+ "Lebanon (LIB),16,0,2,2,4,16,0,0,0,0,32,0,2,2,4\r\n",
+ "Liechtenstein (LIE),16,0,0,0,0,18,2,2,5,9,34,2,2,5,9\r\n",
+ "Lithuania (LTU),8,6,5,10,21,8,0,0,0,0,16,6,5,10,21\r\n",
+ "Luxembourg (LUX) [O],22,1,1,0,2,8,0,2,0,2,30,1,3,0,4\r\n",
+ "Macedonia (MKD),5,0,0,1,1,5,0,0,0,0,10,0,0,1,1\r\n",
+ "Malaysia (MAS) [MAS],12,0,3,3,6,0,0,0,0,0,12,0,3,3,6\r\n",
+ "Mauritius (MRI),8,0,0,1,1,0,0,0,0,0,8,0,0,1,1\r\n",
+ "Mexico (MEX),22,13,21,28,62,8,0,0,0,0,30,13,21,28,62\r\n",
+ "Moldova (MDA),5,0,2,5,7,6,0,0,0,0,11,0,2,5,7\r\n",
+ "Mongolia (MGL),12,2,9,13,24,13,0,0,0,0,25,2,9,13,24\r\n",
+ "Montenegro (MNE),2,0,1,0,1,2,0,0,0,0,4,0,1,0,1\r\n",
+ "Morocco (MAR),13,6,5,11,22,6,0,0,0,0,19,6,5,11,22\r\n",
+ "Mozambique (MOZ),9,1,0,1,2,0,0,0,0,0,9,1,0,1,2\r\n",
+ "Namibia (NAM),6,0,4,0,4,0,0,0,0,0,6,0,4,0,4\r\n",
+ "Netherlands (NED) [Z],25,77,85,104,266,20,37,38,35,110,45,114,123,139,376\r\n",
+ "Netherlands Antilles (AHO) [AHO] [I],13,0,1,0,1,2,0,0,0,0,15,0,1,0,1\r\n",
+ "New Zealand (NZL) [NZL],22,42,18,39,99,15,0,1,0,1,37,42,19,39,100\r\n",
+ "Niger (NIG),11,0,0,1,1,0,0,0,0,0,11,0,0,1,1\r\n",
+ "Nigeria (NGR),15,3,8,12,23,0,0,0,0,0,15,3,8,12,23\r\n",
+ "Norway (NOR) [Q],24,56,49,43,148,22,118,111,100,329,46,174,160,143,477\r\n",
+ "Pakistan (PAK),16,3,3,4,10,2,0,0,0,0,18,3,3,4,10\r\n",
+ "Panama (PAN),16,1,0,2,3,0,0,0,0,0,16,1,0,2,3\r\n",
+ "Paraguay (PAR),11,0,1,0,1,1,0,0,0,0,12,0,1,0,1\r\n",
+ "Peru (PER) [L],17,1,3,0,4,2,0,0,0,0,19,1,3,0,4\r\n",
+ "Philippines (PHI),20,0,2,7,9,4,0,0,0,0,24,0,2,7,9\r\n",
+ "Poland (POL),20,64,82,125,271,22,6,7,7,20,42,70,89,132,291\r\n",
+ "Portugal (POR),23,4,8,11,23,7,0,0,0,0,30,4,8,11,23\r\n",
+ "Puerto Rico (PUR),17,0,2,6,8,6,0,0,0,0,23,0,2,6,8\r\n",
+ "Qatar (QAT),8,0,0,4,4,0,0,0,0,0,8,0,0,4,4\r\n",
+ "Romania (ROU),20,88,94,119,301,20,0,0,1,1,40,88,94,120,302\r\n",
+ "Russia (RUS) [RUS],5,132,121,142,395,6,49,40,35,124,11,181,161,177,519\r\n",
+ "Russian Empire (RU1) [RU1],3,1,4,3,8,0,0,0,0,0,3,1,4,3,8\r\n",
+ "Soviet Union (URS) [URS],9,395,319,296,1010,9,78,57,59,194,18,473,376,355,1204\r\n",
+ "Unified Team (EUN) [EUN],1,45,38,29,112,1,9,6,8,23,2,54,44,37,135\r\n",
+ "Saudi Arabia (KSA),10,0,1,2,3,0,0,0,0,0,10,0,1,2,3\r\n",
+ "Senegal (SEN),13,0,1,0,1,5,0,0,0,0,18,0,1,0,1\r\n",
+ "Serbia (SRB) [SRB],3,1,2,4,7,2,0,0,0,0,5,1,2,4,7\r\n",
+ "Serbia and Montenegro (SCG) [SCG],3,2,4,3,9,3,0,0,0,0,6,2,4,3,9\r\n",
+ "Singapore (SIN),15,0,2,2,4,0,0,0,0,0,15,0,2,2,4\r\n",
+ "Slovakia (SVK) [SVK],5,7,9,8,24,6,2,2,1,5,11,9,11,9,29\r\n",
+ "Slovenia (SLO),6,4,6,9,19,7,2,4,9,15,13,6,10,18,34\r\n",
+ "South Africa (RSA),18,23,26,27,76,6,0,0,0,0,24,23,26,27,76\r\n",
+ "Spain (ESP) [Z],22,37,59,35,131,19,1,0,1,2,41,38,59,36,133\r\n",
+ "Sri Lanka (SRI) [SRI],16,0,2,0,2,0,0,0,0,0,16,0,2,0,2\r\n",
+ "Sudan (SUD),11,0,1,0,1,0,0,0,0,0,11,0,1,0,1\r\n",
+ "Suriname (SUR) [E],11,1,0,1,2,0,0,0,0,0,11,1,0,1,2\r\n",
+ "Sweden (SWE) [Z],26,143,164,176,483,22,50,40,54,144,48,193,204,230,627\r\n",
+ "Switzerland (SUI),27,47,73,65,185,22,50,40,48,138,49,97,113,113,323\r\n",
+ "Syria (SYR),12,1,1,1,3,0,0,0,0,0,12,1,1,1,3\r\n",
+ "Chinese Taipei (TPE) [TPE] [TPE2],13,2,7,12,21,11,0,0,0,0,24,2,7,12,21\r\n",
+ "Tajikistan (TJK),5,0,1,2,3,4,0,0,0,0,9,0,1,2,3\r\n",
+ "Tanzania (TAN) [TAN],12,0,2,0,2,0,0,0,0,0,12,0,2,0,2\r\n",
+ "Thailand (THA),15,7,6,11,24,3,0,0,0,0,18,7,6,11,24\r\n",
+ "Togo (TOG),9,0,0,1,1,1,0,0,0,0,10,0,0,1,1\r\n",
+ "Tonga (TGA),8,0,1,0,1,1,0,0,0,0,9,0,1,0,1\r\n",
+ "Trinidad and Tobago (TRI) [TRI],16,2,5,11,18,3,0,0,0,0,19,2,5,11,18\r\n",
+ "Tunisia (TUN),13,3,3,4,10,0,0,0,0,0,13,3,3,4,10\r\n",
+ "Turkey (TUR),21,39,25,24,88,16,0,0,0,0,37,39,25,24,88\r\n",
+ "Uganda (UGA),14,2,3,2,7,0,0,0,0,0,14,2,3,2,7\r\n",
+ "Ukraine (UKR),5,33,27,55,115,6,2,1,4,7,11,35,28,59,122\r\n",
+ "United Arab Emirates (UAE),8,1,0,0,1,0,0,0,0,0,8,1,0,0,1\r\n",
+ "United States (USA) [P] [Q] [R] [Z],26,976,757,666,2399,22,96,102,84,282,48,1072,859,750,2681\r\n",
+ "Uruguay (URU),20,2,2,6,10,1,0,0,0,0,21,2,2,6,10\r\n",
+ "Uzbekistan (UZB),5,5,5,10,20,6,1,0,0,1,11,6,5,10,21\r\n",
+ "Venezuela (VEN),17,2,2,8,12,4,0,0,0,0,21,2,2,8,12\r\n",
+ "Vietnam (VIE),14,0,2,0,2,0,0,0,0,0,14,0,2,0,2\r\n",
+ "Virgin Islands (ISV),11,0,1,0,1,7,0,0,0,0,18,0,1,0,1\r\n",
+ "Yugoslavia (YUG) [YUG],16,26,29,28,83,14,0,3,1,4,30,26,32,29,87\r\n",
+ "Independent Olympic Participants (IOP) [IOP],1,0,1,2,3,0,0,0,0,0,1,0,1,2,3\r\n",
+ "Zambia (ZAM) [ZAM],12,0,1,1,2,0,0,0,0,0,12,0,1,1,2\r\n",
+ "Zimbabwe (ZIM) [ZIM],12,3,4,1,8,1,0,0,0,0,13,3,4,1,8\r\n",
+ "Mixed team (ZZX) [ZZX],3,8,5,4,17,0,0,0,0,0,3,8,5,4,17\r\n",
+ "Totals,27,4809,4775,5130,14714,22,959,958,948,2865,49,5768,5733,6078,17579\r\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "hola\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "!cat olympics.csv"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Pero ... no hay que preocuparse mucho por eso! Podemos leer este archivo en formato `CSV` en un `DataFrame` usando la función `read_csv`. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ " 9 | \n",
+ " 10 | \n",
+ " 11 | \n",
+ " 12 | \n",
+ " 13 | \n",
+ " 14 | \n",
+ " 15 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " NaN | \n",
+ " № Summer | \n",
+ " 01 ! | \n",
+ " 02 ! | \n",
+ " 03 ! | \n",
+ " Total | \n",
+ " № Winter | \n",
+ " 01 ! | \n",
+ " 02 ! | \n",
+ " 03 ! | \n",
+ " Total | \n",
+ " № Games | \n",
+ " 01 ! | \n",
+ " 02 ! | \n",
+ " 03 ! | \n",
+ " Combined total | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Afghanistan (AFG) | \n",
+ " 13 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 13 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Algeria (ALG) | \n",
+ " 12 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 15 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 15 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 15 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " Argentina (ARG) | \n",
+ " 23 | \n",
+ " 18 | \n",
+ " 24 | \n",
+ " 28 | \n",
+ " 70 | \n",
+ " 18 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 41 | \n",
+ " 18 | \n",
+ " 24 | \n",
+ " 28 | \n",
+ " 70 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " Armenia (ARM) | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 9 | \n",
+ " 12 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 11 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 9 | \n",
+ " 12 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 6 7 8 \\\n",
+ "0 NaN № Summer 01 ! 02 ! 03 ! Total № Winter 01 ! 02 ! \n",
+ "1 Afghanistan (AFG) 13 0 0 2 2 0 0 0 \n",
+ "2 Algeria (ALG) 12 5 2 8 15 3 0 0 \n",
+ "3 Argentina (ARG) 23 18 24 28 70 18 0 0 \n",
+ "4 Armenia (ARM) 5 1 2 9 12 6 0 0 \n",
+ "\n",
+ " 9 10 11 12 13 14 15 \n",
+ "0 03 ! Total № Games 01 ! 02 ! 03 ! Combined total \n",
+ "1 0 0 13 0 0 2 2 \n",
+ "2 0 0 15 5 2 8 15 \n",
+ "3 0 0 41 18 24 28 70 \n",
+ "4 0 0 11 1 2 9 12 "
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "df = pd.read_csv('olympics.csv')\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Aquí podemos ignorar la primera fila del `DataFrame` para dejar más limpia la tabla de información no relevante."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " № Summer | \n",
+ " 01 ! | \n",
+ " 02 ! | \n",
+ " 03 ! | \n",
+ " Total | \n",
+ " № Winter | \n",
+ " 01 !.1 | \n",
+ " 02 !.1 | \n",
+ " 03 !.1 | \n",
+ " Total.1 | \n",
+ " № Games | \n",
+ " 01 !.2 | \n",
+ " 02 !.2 | \n",
+ " 03 !.2 | \n",
+ " Combined total | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Afghanistan (AFG) | \n",
+ " 13 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 13 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | Algeria (ALG) | \n",
+ " 12 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 15 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 15 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 15 | \n",
+ "
\n",
+ " \n",
+ " | Argentina (ARG) | \n",
+ " 23 | \n",
+ " 18 | \n",
+ " 24 | \n",
+ " 28 | \n",
+ " 70 | \n",
+ " 18 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 41 | \n",
+ " 18 | \n",
+ " 24 | \n",
+ " 28 | \n",
+ " 70 | \n",
+ "
\n",
+ " \n",
+ " | Armenia (ARM) | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 9 | \n",
+ " 12 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 11 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 9 | \n",
+ " 12 | \n",
+ "
\n",
+ " \n",
+ " | Australasia (ANZ) [ANZ] | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 12 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 12 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " № Summer 01 ! 02 ! 03 ! Total № Winter 01 !.1 \\\n",
+ "Afghanistan (AFG) 13 0 0 2 2 0 0 \n",
+ "Algeria (ALG) 12 5 2 8 15 3 0 \n",
+ "Argentina (ARG) 23 18 24 28 70 18 0 \n",
+ "Armenia (ARM) 5 1 2 9 12 6 0 \n",
+ "Australasia (ANZ) [ANZ] 2 3 4 5 12 0 0 \n",
+ "\n",
+ " 02 !.1 03 !.1 Total.1 № Games 01 !.2 02 !.2 \\\n",
+ "Afghanistan (AFG) 0 0 0 13 0 0 \n",
+ "Algeria (ALG) 0 0 0 15 5 2 \n",
+ "Argentina (ARG) 0 0 0 41 18 24 \n",
+ "Armenia (ARM) 0 0 0 11 1 2 \n",
+ "Australasia (ANZ) [ANZ] 0 0 0 2 3 4 \n",
+ "\n",
+ " 03 !.2 Combined total \n",
+ "Afghanistan (AFG) 2 2 \n",
+ "Algeria (ALG) 8 15 \n",
+ "Argentina (ARG) 28 70 \n",
+ "Armenia (ARM) 9 12 \n",
+ "Australasia (ANZ) [ANZ] 5 12 "
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df = pd.read_csv('olympics.csv', index_col = 0, skiprows=1)\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "El atributo `.columns` nos permite ver el nombre de las comlumnas del `DataFrame` y el atributo `.rename` modificar el nombre."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['№ Summer', '01 !', '02 !', '03 !', 'Total', '№ Winter', '01 !.1',\n",
+ " '02 !.1', '03 !.1', 'Total.1', '№ Games', '01 !.2', '02 !.2', '03 !.2',\n",
+ " 'Combined total'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " # Summer | \n",
+ " Gold | \n",
+ " Silver | \n",
+ " Bronze | \n",
+ " Total | \n",
+ " # Winter | \n",
+ " Gold.1 | \n",
+ " Silver.1 | \n",
+ " Bronze.1 | \n",
+ " Total.1 | \n",
+ " # Games | \n",
+ " Gold.2 | \n",
+ " Silver.2 | \n",
+ " Bronze.2 | \n",
+ " Combined total | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Afghanistan (AFG) | \n",
+ " 13 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 13 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | Algeria (ALG) | \n",
+ " 12 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 15 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 15 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 8 | \n",
+ " 15 | \n",
+ "
\n",
+ " \n",
+ " | Argentina (ARG) | \n",
+ " 23 | \n",
+ " 18 | \n",
+ " 24 | \n",
+ " 28 | \n",
+ " 70 | \n",
+ " 18 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 41 | \n",
+ " 18 | \n",
+ " 24 | \n",
+ " 28 | \n",
+ " 70 | \n",
+ "
\n",
+ " \n",
+ " | Armenia (ARM) | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 9 | \n",
+ " 12 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 11 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 9 | \n",
+ " 12 | \n",
+ "
\n",
+ " \n",
+ " | Australasia (ANZ) [ANZ] | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 12 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 12 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " # Summer Gold Silver Bronze Total # Winter \\\n",
+ "Afghanistan (AFG) 13 0 0 2 2 0 \n",
+ "Algeria (ALG) 12 5 2 8 15 3 \n",
+ "Argentina (ARG) 23 18 24 28 70 18 \n",
+ "Armenia (ARM) 5 1 2 9 12 6 \n",
+ "Australasia (ANZ) [ANZ] 2 3 4 5 12 0 \n",
+ "\n",
+ " Gold.1 Silver.1 Bronze.1 Total.1 # Games Gold.2 \\\n",
+ "Afghanistan (AFG) 0 0 0 0 13 0 \n",
+ "Algeria (ALG) 0 0 0 0 15 5 \n",
+ "Argentina (ARG) 0 0 0 0 41 18 \n",
+ "Armenia (ARM) 0 0 0 0 11 1 \n",
+ "Australasia (ANZ) [ANZ] 0 0 0 0 2 3 \n",
+ "\n",
+ " Silver.2 Bronze.2 Combined total \n",
+ "Afghanistan (AFG) 0 2 2 \n",
+ "Algeria (ALG) 2 8 15 \n",
+ "Argentina (ARG) 24 28 70 \n",
+ "Armenia (ARM) 2 9 12 \n",
+ "Australasia (ANZ) [ANZ] 4 5 12 "
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "for col in df.columns:\n",
+ " if col[:2]=='01':\n",
+ " df.rename(columns={col:'Gold' + col[4:]}, inplace=True)\n",
+ " if col[:2]=='02':\n",
+ " df.rename(columns={col:'Silver' + col[4:]}, inplace=True)\n",
+ " if col[:2]=='03':\n",
+ " df.rename(columns={col:'Bronze' + col[4:]}, inplace=True)\n",
+ " if col[:1]=='№':\n",
+ " df.rename(columns={col:'#' + col[1:]}, inplace=True) \n",
+ "\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Haciendo búsquedas en un `DataFrame`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos buscar en el `DataFrame` con una **máscara Booleana** qué países tienen (`True`) o no (`False`) una medalla de oro."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Afghanistan (AFG) False\n",
+ "Algeria (ALG) True\n",
+ "Argentina (ARG) True\n",
+ "Armenia (ARM) True\n",
+ "Australasia (ANZ) [ANZ] True\n",
+ "Australia (AUS) [AUS] [Z] True\n",
+ "Austria (AUT) True\n",
+ "Azerbaijan (AZE) True\n",
+ "Bahamas (BAH) True\n",
+ "Bahrain (BRN) False\n",
+ "Barbados (BAR) [BAR] False\n",
+ "Belarus (BLR) True\n",
+ "Belgium (BEL) True\n",
+ "Bermuda (BER) False\n",
+ "Bohemia (BOH) [BOH] [Z] False\n",
+ "Botswana (BOT) False\n",
+ "Brazil (BRA) True\n",
+ "British West Indies (BWI) [BWI] False\n",
+ "Bulgaria (BUL) [H] True\n",
+ "Burundi (BDI) True\n",
+ "Cameroon (CMR) True\n",
+ "Canada (CAN) True\n",
+ "Chile (CHI) [I] True\n",
+ "China (CHN) [CHN] True\n",
+ "Colombia (COL) True\n",
+ "Costa Rica (CRC) True\n",
+ "Ivory Coast (CIV) [CIV] False\n",
+ "Croatia (CRO) True\n",
+ "Cuba (CUB) [Z] True\n",
+ "Cyprus (CYP) False\n",
+ " ... \n",
+ "Sri Lanka (SRI) [SRI] False\n",
+ "Sudan (SUD) False\n",
+ "Suriname (SUR) [E] True\n",
+ "Sweden (SWE) [Z] True\n",
+ "Switzerland (SUI) True\n",
+ "Syria (SYR) True\n",
+ "Chinese Taipei (TPE) [TPE] [TPE2] True\n",
+ "Tajikistan (TJK) False\n",
+ "Tanzania (TAN) [TAN] False\n",
+ "Thailand (THA) True\n",
+ "Togo (TOG) False\n",
+ "Tonga (TGA) False\n",
+ "Trinidad and Tobago (TRI) [TRI] True\n",
+ "Tunisia (TUN) True\n",
+ "Turkey (TUR) True\n",
+ "Uganda (UGA) True\n",
+ "Ukraine (UKR) True\n",
+ "United Arab Emirates (UAE) True\n",
+ "United States (USA) [P] [Q] [R] [Z] True\n",
+ "Uruguay (URU) True\n",
+ "Uzbekistan (UZB) True\n",
+ "Venezuela (VEN) True\n",
+ "Vietnam (VIE) False\n",
+ "Virgin Islands (ISV) False\n",
+ "Yugoslavia (YUG) [YUG] True\n",
+ "Independent Olympic Participants (IOP) [IOP] False\n",
+ "Zambia (ZAM) [ZAM] False\n",
+ "Zimbabwe (ZIM) [ZIM] True\n",
+ "Mixed team (ZZX) [ZZX] True\n",
+ "Totals True\n",
+ "Name: Gold, Length: 147, dtype: bool"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['Gold'] > 0"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "La función `.where()` toma una máscara booleana como condición en el argumento, la aplica al `DataFrame`, y devuelve un `DataFrame` de la misma forma. En nuestro ejemplo, reemplaza con `NaN` los casos `False` y con su valor original, los casos `True`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " # Summer | \n",
+ " Gold | \n",
+ " Silver | \n",
+ " Bronze | \n",
+ " Total | \n",
+ " # Winter | \n",
+ " Gold.1 | \n",
+ " Silver.1 | \n",
+ " Bronze.1 | \n",
+ " Total.1 | \n",
+ " # Games | \n",
+ " Gold.2 | \n",
+ " Silver.2 | \n",
+ " Bronze.2 | \n",
+ " Combined total | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Afghanistan (AFG) | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Algeria (ALG) | \n",
+ " 12.0 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ " 8.0 | \n",
+ " 15.0 | \n",
+ " 3.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 15.0 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ " 8.0 | \n",
+ " 15.0 | \n",
+ "
\n",
+ " \n",
+ " | Argentina (ARG) | \n",
+ " 23.0 | \n",
+ " 18.0 | \n",
+ " 24.0 | \n",
+ " 28.0 | \n",
+ " 70.0 | \n",
+ " 18.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 41.0 | \n",
+ " 18.0 | \n",
+ " 24.0 | \n",
+ " 28.0 | \n",
+ " 70.0 | \n",
+ "
\n",
+ " \n",
+ " | Armenia (ARM) | \n",
+ " 5.0 | \n",
+ " 1.0 | \n",
+ " 2.0 | \n",
+ " 9.0 | \n",
+ " 12.0 | \n",
+ " 6.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 11.0 | \n",
+ " 1.0 | \n",
+ " 2.0 | \n",
+ " 9.0 | \n",
+ " 12.0 | \n",
+ "
\n",
+ " \n",
+ " | Australasia (ANZ) [ANZ] | \n",
+ " 2.0 | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 12.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 2.0 | \n",
+ " 3.0 | \n",
+ " 4.0 | \n",
+ " 5.0 | \n",
+ " 12.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " # Summer Gold Silver Bronze Total # Winter \\\n",
+ "Afghanistan (AFG) NaN NaN NaN NaN NaN NaN \n",
+ "Algeria (ALG) 12.0 5.0 2.0 8.0 15.0 3.0 \n",
+ "Argentina (ARG) 23.0 18.0 24.0 28.0 70.0 18.0 \n",
+ "Armenia (ARM) 5.0 1.0 2.0 9.0 12.0 6.0 \n",
+ "Australasia (ANZ) [ANZ] 2.0 3.0 4.0 5.0 12.0 0.0 \n",
+ "\n",
+ " Gold.1 Silver.1 Bronze.1 Total.1 # Games Gold.2 \\\n",
+ "Afghanistan (AFG) NaN NaN NaN NaN NaN NaN \n",
+ "Algeria (ALG) 0.0 0.0 0.0 0.0 15.0 5.0 \n",
+ "Argentina (ARG) 0.0 0.0 0.0 0.0 41.0 18.0 \n",
+ "Armenia (ARM) 0.0 0.0 0.0 0.0 11.0 1.0 \n",
+ "Australasia (ANZ) [ANZ] 0.0 0.0 0.0 0.0 2.0 3.0 \n",
+ "\n",
+ " Silver.2 Bronze.2 Combined total \n",
+ "Afghanistan (AFG) NaN NaN NaN \n",
+ "Algeria (ALG) 2.0 8.0 15.0 \n",
+ "Argentina (ARG) 24.0 28.0 70.0 \n",
+ "Armenia (ARM) 2.0 9.0 12.0 \n",
+ "Australasia (ANZ) [ANZ] 4.0 5.0 12.0 "
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "only_gold = df.where(df['Gold'] > 0)\n",
+ "only_gold.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos contar cuántas países hay medallas de oro hay en total con `count()`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "100"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "only_gold['Gold'].count()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Si contamos sobre los datos originales, veremos que hay 147 países. Cuenta los países para los cuales la máscara Booleana dio `False` >.<"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "147"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['Gold'].count()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos establecer otro tipo de condiciones para hacer búsquedas más complejas. Por ejemplo, buscar la cantidad de países que han ganado medalla de oro alguna vez."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "101"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(df[(df['Gold'] > 0) | (df['Gold.1'] > 0)])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Buscar qué países han ganado sólo medallas de oro en Invierno y nunca en Verano."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " # Summer | \n",
+ " Gold | \n",
+ " Silver | \n",
+ " Bronze | \n",
+ " Total | \n",
+ " # Winter | \n",
+ " Gold.1 | \n",
+ " Silver.1 | \n",
+ " Bronze.1 | \n",
+ " Total.1 | \n",
+ " # Games | \n",
+ " Gold.2 | \n",
+ " Silver.2 | \n",
+ " Bronze.2 | \n",
+ " Combined total | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Liechtenstein (LIE) | \n",
+ " 16 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 18 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 5 | \n",
+ " 9 | \n",
+ " 34 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 5 | \n",
+ " 9 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " # Summer Gold Silver Bronze Total # Winter Gold.1 \\\n",
+ "Liechtenstein (LIE) 16 0 0 0 0 18 2 \n",
+ "\n",
+ " Silver.1 Bronze.1 Total.1 # Games Gold.2 Silver.2 \\\n",
+ "Liechtenstein (LIE) 2 5 9 34 2 2 \n",
+ "\n",
+ " Bronze.2 Combined total \n",
+ "Liechtenstein (LIE) 5 9 "
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df[(df['Gold.1'] > 0) & (df['Gold'] == 0)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/EVI - 2018/EVI 04/Modulo3.ipynb b/EVI - 2018/EVI 04/Modulo3.ipynb
new file mode 100755
index 0000000..b52c183
--- /dev/null
+++ b/EVI - 2018/EVI 04/Modulo3.ipynb
@@ -0,0 +1,2885 @@
+{
+ "cells": [
+ {
+ "attachments": {
+ "nummatplot.png": {
+ "image/png": "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"
+ }
+ },
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# *Manipulación y Análisis de Datos con Python* \n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "## Pre-procesamiento de datos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Manejo de datos faltantes"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 24.0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 23.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 12.0 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 17.0 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " A\n",
+ "0 24.0\n",
+ "1 NaN\n",
+ "2 NaN\n",
+ "3 23.0\n",
+ "4 NaN\n",
+ "5 12.0\n",
+ "6 NaN\n",
+ "7 17.0\n",
+ "8 NaN\n",
+ "9 2.0\n",
+ "10 5.0"
+ ]
+ },
+ "execution_count": 68,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "datos1 = pd.DataFrame([24, np.nan, np.nan, 23,np.nan, 12, np.nan, 17, np.nan, 2 ,5], columns = list('A'))\n",
+ "datos1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "En `dropna()` el argumento `subset` considera la etiqueta para seleccionar el conjunto a descartar, `axis=0` descarta filas (`axis=1` columnas) y `inplace= True` hace que los cambios se ejecuten directamente en `DataFrame`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 24.0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 23.0 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 12.0 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 17.0 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 5.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " A\n",
+ "0 24.0\n",
+ "3 23.0\n",
+ "5 12.0\n",
+ "7 17.0\n",
+ "9 2.0\n",
+ "10 5.0"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "datos1.dropna(subset=['A'], axis= 0, inplace= True)\n",
+ "datos1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "La función `replace()` permite reemplazar valores faltantes en el `DataFrame` por valores nuevos. En nuestro ejemplo, reemplazaremos con el promedio, que se calcula con la función `mean()`. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "13.833333333333334"
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "datos1 = pd.DataFrame([24, np.nan, np.nan, 23,np.nan, 12, np.nan, 17, np.nan, 2 ,5], columns = list('A'))\n",
+ "media = datos1['A'].mean()\n",
+ "media"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Ahora usamos la función `replace()`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " A | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 24.000000 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 13.833333 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 13.833333 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 23.000000 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 13.833333 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 12.000000 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 13.833333 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 17.000000 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 13.833333 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 2.000000 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 5.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " A\n",
+ "0 24.000000\n",
+ "1 13.833333\n",
+ "2 13.833333\n",
+ "3 23.000000\n",
+ "4 13.833333\n",
+ "5 12.000000\n",
+ "6 13.833333\n",
+ "7 17.000000\n",
+ "8 13.833333\n",
+ "9 2.000000\n",
+ "10 5.000000"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "datos1['A'].replace(np.nan, media, inplace = True)\n",
+ "datos1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "## Transformando los datos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Mezclando y combinando `DataFrames`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 70,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ "
\n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre\n",
+ "Tienda 1 Libro 1200 Adelis\n",
+ "Tienda 1 Raspberry pi 3 15000 Miguel\n",
+ "Tienda 2 Balón 5000 Jaime"
+ ]
+ },
+ "execution_count": 70,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "compra_1 = pd.Series({'Nombre': 'Adelis',\n",
+ " 'Artículo comprado': 'Libro',\n",
+ " 'Costo': 1200})\n",
+ "compra_2 = pd.Series({'Nombre': 'Miguel',\n",
+ " 'Artículo comprado': 'Raspberry pi 3',\n",
+ " 'Costo': 15000})\n",
+ "compra_3 = pd.Series({'Nombre': 'Jaime',\n",
+ " 'Artículo comprado': 'Balón',\n",
+ " 'Costo': 5000})\n",
+ "df = pd.DataFrame([compra_1, compra_2, compra_3], index=['Tienda 1', 'Tienda 1', 'Tienda 2'])\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos agregar elementos al `DataFrame` de la siguiente manera:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ " Fecha | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ " Diciembre 1 | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ " Febrero 4 | \n",
+ "
\n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ " Mediados de Julio | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre Fecha\n",
+ "Tienda 1 Libro 1200 Adelis Diciembre 1\n",
+ "Tienda 1 Raspberry pi 3 15000 Miguel Febrero 4\n",
+ "Tienda 2 Balón 5000 Jaime Mediados de Julio"
+ ]
+ },
+ "execution_count": 71,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['Fecha'] = ['Diciembre 1', 'Febrero 4', 'Mediados de Julio']\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 72,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ " Fecha | \n",
+ " Entregado | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ " Diciembre 1 | \n",
+ " Sí | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ " Febrero 4 | \n",
+ " Sí | \n",
+ "
\n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ " Mediados de Julio | \n",
+ " Sí | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre Fecha Entregado\n",
+ "Tienda 1 Libro 1200 Adelis Diciembre 1 Sí\n",
+ "Tienda 1 Raspberry pi 3 15000 Miguel Febrero 4 Sí\n",
+ "Tienda 2 Balón 5000 Jaime Mediados de Julio Sí"
+ ]
+ },
+ "execution_count": 72,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['Entregado'] = 'Sí'\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 73,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ " Fecha | \n",
+ " Entregado | \n",
+ " Retroalimentación | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ " Diciembre 1 | \n",
+ " Sí | \n",
+ " Positiva | \n",
+ "
\n",
+ " \n",
+ " | Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ " Febrero 4 | \n",
+ " Sí | \n",
+ " None | \n",
+ "
\n",
+ " \n",
+ " | Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ " Mediados de Julio | \n",
+ " Sí | \n",
+ " Negativa | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Artículo comprado Costo Nombre Fecha Entregado \\\n",
+ "Tienda 1 Libro 1200 Adelis Diciembre 1 Sí \n",
+ "Tienda 1 Raspberry pi 3 15000 Miguel Febrero 4 Sí \n",
+ "Tienda 2 Balón 5000 Jaime Mediados de Julio Sí \n",
+ "\n",
+ " Retroalimentación \n",
+ "Tienda 1 Positiva \n",
+ "Tienda 1 None \n",
+ "Tienda 2 Negativa "
+ ]
+ },
+ "execution_count": 73,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['Retroalimentación'] = ['Positiva', None, 'Negativa']\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Pandas `reset_index ()` es un método para restablecer el índice de un `DataFrame`. El establece como índices una lista de enteros que van desde 0 hasta la longitud de los datos."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " index | \n",
+ " Artículo comprado | \n",
+ " Costo | \n",
+ " Nombre | \n",
+ " Fecha | \n",
+ " Entregado | \n",
+ " Retroalimentación | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " Tienda 1 | \n",
+ " Libro | \n",
+ " 1200 | \n",
+ " Adelis | \n",
+ " Diciembre 1 | \n",
+ " Sí | \n",
+ " Positiva | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " Tienda 1 | \n",
+ " Raspberry pi 3 | \n",
+ " 15000 | \n",
+ " Miguel | \n",
+ " Febrero 4 | \n",
+ " Sí | \n",
+ " None | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " Tienda 2 | \n",
+ " Balón | \n",
+ " 5000 | \n",
+ " Jaime | \n",
+ " Mediados de Julio | \n",
+ " Sí | \n",
+ " Negativa | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " index Artículo comprado Costo Nombre Fecha Entregado \\\n",
+ "0 Tienda 1 Libro 1200 Adelis Diciembre 1 Sí \n",
+ "1 Tienda 1 Raspberry pi 3 15000 Miguel Febrero 4 Sí \n",
+ "2 Tienda 2 Balón 5000 Jaime Mediados de Julio Sí \n",
+ "\n",
+ " Retroalimentación \n",
+ "0 Positiva \n",
+ "1 None \n",
+ "2 Negativa "
+ ]
+ },
+ "execution_count": 74,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "adf = df.reset_index()\n",
+ "adf"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Podemos tener un par de tablas de datos que nos interese unir o combinar en un mismo `DataFrame`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 75,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Función\n",
+ "Nombre \n",
+ "Adriana Gerente de ventas\n",
+ "Andrés Vendedor 1\n",
+ "Cristóbal Gerente de departamento\n",
+ "\n",
+ " Grado\n",
+ "Nombre \n",
+ "Andrés Nivel 3\n",
+ "Cristóbal Nivel 1\n",
+ "Adriana Nivel 2\n"
+ ]
+ }
+ ],
+ "source": [
+ "empleados_df = pd.DataFrame([{'Nombre': 'Adriana', 'Función': 'Gerente de ventas'},\n",
+ " {'Nombre': 'Andrés', 'Función': 'Vendedor 1'},\n",
+ " {'Nombre': 'Cristóbal', 'Función': 'Gerente de departamento'}])\n",
+ "empleados_df = empleados_df.set_index('Nombre')\n",
+ "grado_df = pd.DataFrame([{'Nombre': 'Andrés', 'Grado': 'Nivel 3'},\n",
+ " {'Nombre': 'Cristóbal', 'Grado': 'Nivel 1'},\n",
+ " {'Nombre': 'Adriana', 'Grado': 'Nivel 2'}])\n",
+ "grado_df = grado_df.set_index('Nombre')\n",
+ "print(empleados_df.head())\n",
+ "print()\n",
+ "print(grado_df.head())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`pd.merge()` conecta filas en el `DataFrames` basado en una o más teclas. Para los conocedores de SQL esta función hace unión de bases de datos por columnas o índices."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 76,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Función | \n",
+ " Grado | \n",
+ "
\n",
+ " \n",
+ " | Nombre | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Adriana | \n",
+ " Gerente de ventas | \n",
+ " Nivel 2 | \n",
+ "
\n",
+ " \n",
+ " | Andrés | \n",
+ " Vendedor 1 | \n",
+ " Nivel 3 | \n",
+ "
\n",
+ " \n",
+ " | Cristóbal | \n",
+ " Gerente de departamento | \n",
+ " Nivel 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Función Grado\n",
+ "Nombre \n",
+ "Adriana Gerente de ventas Nivel 2\n",
+ "Andrés Vendedor 1 Nivel 3\n",
+ "Cristóbal Gerente de departamento Nivel 1"
+ ]
+ },
+ "execution_count": 76,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_info_empleados=pd.merge(empleados_df, grado_df, how='outer', left_index=True, right_index=True)\n",
+ "df_info_empleados"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Otros ejemplos de cómo variar el parámetro `how` se pueden encontrar en el libro *Python for Data Analysis* - McKinney."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Supongamos que tenemos ahora un nuevo `DataFrame` que coincide en número de filas con el anterior. Por ejemplo:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 77,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Fecha de Ingreso\n",
+ "Nombre \n",
+ "Adriana 20/06/2013\n",
+ "Andrés 10/01/2018\n",
+ "Cristóbal 20/03/2011\n",
+ " Art.Vendidos/Total Art.\n",
+ "Nombre \n",
+ "Adriana 0.0123\n",
+ "Andrés 0.1450\n",
+ "Cristóbal 0.5000\n"
+ ]
+ }
+ ],
+ "source": [
+ "fecha_ingreso_df = pd.DataFrame([{'Nombre': 'Adriana', 'Fecha de Ingreso': '20/06/2013'},\n",
+ " {'Nombre': 'Andrés', 'Fecha de Ingreso': '10/01/2018'},\n",
+ " {'Nombre': 'Cristóbal', 'Fecha de Ingreso': '20/03/2011'}])\n",
+ "fecha_ingreso_df = fecha_ingreso_df.set_index('Nombre')\n",
+ "art_vendidos_df = pd.DataFrame([{'Nombre': 'Adriana', 'Art.Vendidos/Total Art.': 123/10000},\n",
+ " {'Nombre': 'Andrés', 'Art.Vendidos/Total Art.': 1450/10000},\n",
+ " {'Nombre': 'Cristóbal', 'Art.Vendidos/Total Art.': 5000/10000}])\n",
+ "art_vendidos_df = art_vendidos_df.set_index('Nombre')\n",
+ "\n",
+ "print(fecha_ingreso_df.head())\n",
+ "print(art_vendidos_df.head())\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "`pd.concat()` pega o apila objetos a lo largo de un eje."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 87,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Función | \n",
+ " Grado | \n",
+ " Fecha de Ingreso | \n",
+ " Art.Vendidos/Total Art. | \n",
+ "
\n",
+ " \n",
+ " | Nombre | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Adriana | \n",
+ " Gerente de ventas | \n",
+ " Nivel 2 | \n",
+ " 20/06/2013 | \n",
+ " 0.0123 | \n",
+ "
\n",
+ " \n",
+ " | Andrés | \n",
+ " Vendedor 1 | \n",
+ " Nivel 3 | \n",
+ " 10/01/2018 | \n",
+ " 0.1450 | \n",
+ "
\n",
+ " \n",
+ " | Cristóbal | \n",
+ " Gerente de departamento | \n",
+ " Nivel 1 | \n",
+ " 20/03/2011 | \n",
+ " 0.5000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Función Grado Fecha de Ingreso \\\n",
+ "Nombre \n",
+ "Adriana Gerente de ventas Nivel 2 20/06/2013 \n",
+ "Andrés Vendedor 1 Nivel 3 10/01/2018 \n",
+ "Cristóbal Gerente de departamento Nivel 1 20/03/2011 \n",
+ "\n",
+ " Art.Vendidos/Total Art. \n",
+ "Nombre \n",
+ "Adriana 0.0123 \n",
+ "Andrés 0.1450 \n",
+ "Cristóbal 0.5000 "
+ ]
+ },
+ "execution_count": 87,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "new_data = pd.concat([df_info_empleados, fecha_ingreso_df, art_vendidos_df], axis=1)\n",
+ "new_data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Hay mucho más que aprender! Por ejemplo: ¿Qué sucede si `axis=0`? **R**: pues posiblemente el resultado sea que Pandas pegue todos los valores y sus índices. Como se muestra a continuación:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 80,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Art.Vendidos/Total Art. | \n",
+ " Fecha de Ingreso | \n",
+ " Función | \n",
+ " Grado | \n",
+ "
\n",
+ " \n",
+ " | Nombre | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Adriana | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Gerente de ventas | \n",
+ " Nivel 2 | \n",
+ "
\n",
+ " \n",
+ " | Andrés | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Vendedor 1 | \n",
+ " Nivel 3 | \n",
+ "
\n",
+ " \n",
+ " | Cristóbal | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Gerente de departamento | \n",
+ " Nivel 1 | \n",
+ "
\n",
+ " \n",
+ " | Adriana | \n",
+ " NaN | \n",
+ " 20/06/2013 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Andrés | \n",
+ " NaN | \n",
+ " 10/01/2018 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Cristóbal | \n",
+ " NaN | \n",
+ " 20/03/2011 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Adriana | \n",
+ " 0.0123 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Andrés | \n",
+ " 0.1450 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | Cristóbal | \n",
+ " 0.5000 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Art.Vendidos/Total Art. Fecha de Ingreso Función \\\n",
+ "Nombre \n",
+ "Adriana NaN NaN Gerente de ventas \n",
+ "Andrés NaN NaN Vendedor 1 \n",
+ "Cristóbal NaN NaN Gerente de departamento \n",
+ "Adriana NaN 20/06/2013 NaN \n",
+ "Andrés NaN 10/01/2018 NaN \n",
+ "Cristóbal NaN 20/03/2011 NaN \n",
+ "Adriana 0.0123 NaN NaN \n",
+ "Andrés 0.1450 NaN NaN \n",
+ "Cristóbal 0.5000 NaN NaN \n",
+ "\n",
+ " Grado \n",
+ "Nombre \n",
+ "Adriana Nivel 2 \n",
+ "Andrés Nivel 3 \n",
+ "Cristóbal Nivel 1 \n",
+ "Adriana NaN \n",
+ "Andrés NaN \n",
+ "Cristóbal NaN \n",
+ "Adriana NaN \n",
+ "Andrés NaN \n",
+ "Cristóbal NaN "
+ ]
+ },
+ "execution_count": 80,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.concat([df_info_empleados, fecha_ingreso_df, art_vendidos_df], axis=0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Otra transformación de interés podría ser hacer algún cálculo sobre una columna entera. En nuestro ejemplo, supongamos que deseamos colocar **% de artículos vendidos** y cambiar la etiqueta de esa columna.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 89,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Función | \n",
+ " Grado | \n",
+ " Fecha de Ingreso | \n",
+ " % Art. Vendidos | \n",
+ "
\n",
+ " \n",
+ " | Nombre | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | Adriana | \n",
+ " Gerente de ventas | \n",
+ " Nivel 2 | \n",
+ " 20/06/2013 | \n",
+ " 1.23 | \n",
+ "
\n",
+ " \n",
+ " | Andrés | \n",
+ " Vendedor 1 | \n",
+ " Nivel 3 | \n",
+ " 10/01/2018 | \n",
+ " 14.50 | \n",
+ "
\n",
+ " \n",
+ " | Cristóbal | \n",
+ " Gerente de departamento | \n",
+ " Nivel 1 | \n",
+ " 20/03/2011 | \n",
+ " 50.00 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Función Grado Fecha de Ingreso % Art. Vendidos\n",
+ "Nombre \n",
+ "Adriana Gerente de ventas Nivel 2 20/06/2013 1.23\n",
+ "Andrés Vendedor 1 Nivel 3 10/01/2018 14.50\n",
+ "Cristóbal Gerente de departamento Nivel 1 20/03/2011 50.00"
+ ]
+ },
+ "execution_count": 89,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "new_data\n",
+ "new_data['Art.Vendidos/Total Art.']= new_data['Art.Vendidos/Total Art.']*100\n",
+ "new_data.rename(columns = {'Art.Vendidos/Total Art.': '% Art. Vendidos'}, inplace = True)\n",
+ "new_data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Normalizando datos"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Tomemos un `DataFrame` que representa dimensiones de cajas a ser vendidas en un almacén. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 90,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Largo | \n",
+ " Ancho | \n",
+ " Alto | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 168.7 | \n",
+ " 68.3 | \n",
+ " 46.8 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 170.0 | \n",
+ " 60.2 | \n",
+ " 47.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 150.3 | \n",
+ " 65.0 | \n",
+ " 45.0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 168.7 | \n",
+ " 68.3 | \n",
+ " 46.8 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 145.2 | \n",
+ " 45.9 | \n",
+ " 45.3 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 200.0 | \n",
+ " 70.0 | \n",
+ " 40.9 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 175.4 | \n",
+ " 75.1 | \n",
+ " 45.6 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 163.0 | \n",
+ " 63.5 | \n",
+ " 43.8 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 230.0 | \n",
+ " 65.2 | \n",
+ " 46.8 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 129.6 | \n",
+ " 68.7 | \n",
+ " 49.0 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 178.2 | \n",
+ " 78.0 | \n",
+ " 47.2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Largo Ancho Alto\n",
+ "0 168.7 68.3 46.8\n",
+ "1 170.0 60.2 47.0\n",
+ "2 150.3 65.0 45.0\n",
+ "3 168.7 68.3 46.8\n",
+ "4 145.2 45.9 45.3\n",
+ "5 200.0 70.0 40.9\n",
+ "6 175.4 75.1 45.6\n",
+ "7 163.0 63.5 43.8\n",
+ "8 230.0 65.2 46.8\n",
+ "9 129.6 68.7 49.0\n",
+ "10 178.2 78.0 47.2"
+ ]
+ },
+ "execution_count": 90,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dimension1 = pd.DataFrame([168.7, 170.0, 150.3, 168.7, 145.2, 200.0, 175.4, 163.0, 230.0, 129.6, 178.2], columns = list('L'))\n",
+ "dimension1.rename(columns = {'L': 'Largo'}, inplace = True)\n",
+ "\n",
+ "\n",
+ "dimension2 = pd.DataFrame([68.3, 60.2, 65.0, 68.3, 45.9, 70.0, 75.1, 63.5, 65.2, 68.7, 78], columns = list('A'))\n",
+ "dimension2.rename(columns = {'A': 'Ancho'}, inplace = True)\n",
+ "\n",
+ "\n",
+ "dimension3 = pd.DataFrame([46.8, 47.0, 45.0, 46.8, 45.3, 40.9, 45.6, 43.8, 46.8, 49.0, 47.2], columns = list('A'))\n",
+ "dimension3.rename(columns = {'A': 'Alto'}, inplace = True)\n",
+ "\n",
+ "\n",
+ "dimensiones = pd.concat([dimension1, dimension2, dimension3], axis=1)\n",
+ "dimensiones"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Método de **\"Escala de característica simple\"**: se divide cada valor por el\n",
+ "valor máximo para esa característica, $x_{nuevo} = \\frac{x_{viejo}}{x_{máximo}}$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 91,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Largo | \n",
+ " Ancho | \n",
+ " Alto | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 0.733478 | \n",
+ " 0.875641 | \n",
+ " 0.955102 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 0.739130 | \n",
+ " 0.771795 | \n",
+ " 0.959184 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.653478 | \n",
+ " 0.833333 | \n",
+ " 0.918367 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.733478 | \n",
+ " 0.875641 | \n",
+ " 0.955102 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.631304 | \n",
+ " 0.588462 | \n",
+ " 0.924490 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.869565 | \n",
+ " 0.897436 | \n",
+ " 0.834694 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 0.762609 | \n",
+ " 0.962821 | \n",
+ " 0.930612 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 0.708696 | \n",
+ " 0.814103 | \n",
+ " 0.893878 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 1.000000 | \n",
+ " 0.835897 | \n",
+ " 0.955102 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 0.563478 | \n",
+ " 0.880769 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 0.774783 | \n",
+ " 1.000000 | \n",
+ " 0.963265 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Largo Ancho Alto\n",
+ "0 0.733478 0.875641 0.955102\n",
+ "1 0.739130 0.771795 0.959184\n",
+ "2 0.653478 0.833333 0.918367\n",
+ "3 0.733478 0.875641 0.955102\n",
+ "4 0.631304 0.588462 0.924490\n",
+ "5 0.869565 0.897436 0.834694\n",
+ "6 0.762609 0.962821 0.930612\n",
+ "7 0.708696 0.814103 0.893878\n",
+ "8 1.000000 0.835897 0.955102\n",
+ "9 0.563478 0.880769 1.000000\n",
+ "10 0.774783 1.000000 0.963265"
+ ]
+ },
+ "execution_count": 91,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dimensiones['Largo'] = dimensiones['Largo']/dimensiones['Largo'].max()\n",
+ "dimensiones['Ancho'] = dimensiones['Ancho']/dimensiones['Ancho'].max()\n",
+ "dimensiones['Alto'] = dimensiones['Alto']/dimensiones['Alto'].max()\n",
+ "dimensiones\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Método **Mínimo - Máximo**: toma cada valor, $x_{viejo}$ le resta el mínimo\n",
+ "valor de esa característica y luego se divide por el rango de esa característica, es decir, $x_{nuevo} = \\frac{x_{viejo} - x_{mínimo}}{x_{máximo} - x_{mínimo}}$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Largo | \n",
+ " Ancho | \n",
+ " Alto | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 0.389442 | \n",
+ " 0.697819 | \n",
+ " 0.728395 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 0.402390 | \n",
+ " 0.445483 | \n",
+ " 0.753086 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.206175 | \n",
+ " 0.595016 | \n",
+ " 0.506173 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.389442 | \n",
+ " 0.697819 | \n",
+ " 0.728395 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.155378 | \n",
+ " 0.000000 | \n",
+ " 0.543210 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 0.701195 | \n",
+ " 0.750779 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 0.456175 | \n",
+ " 0.909657 | \n",
+ " 0.580247 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 0.332669 | \n",
+ " 0.548287 | \n",
+ " 0.358025 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 1.000000 | \n",
+ " 0.601246 | \n",
+ " 0.728395 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 0.000000 | \n",
+ " 0.710280 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 0.484064 | \n",
+ " 1.000000 | \n",
+ " 0.777778 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Largo Ancho Alto\n",
+ "0 0.389442 0.697819 0.728395\n",
+ "1 0.402390 0.445483 0.753086\n",
+ "2 0.206175 0.595016 0.506173\n",
+ "3 0.389442 0.697819 0.728395\n",
+ "4 0.155378 0.000000 0.543210\n",
+ "5 0.701195 0.750779 0.000000\n",
+ "6 0.456175 0.909657 0.580247\n",
+ "7 0.332669 0.548287 0.358025\n",
+ "8 1.000000 0.601246 0.728395\n",
+ "9 0.000000 0.710280 1.000000\n",
+ "10 0.484064 1.000000 0.777778"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dimensiones['Largo'] = (dimensiones['Largo']-dimensiones['Largo'].min())/(dimensiones['Largo'].max() - dimensiones['Largo'].min())\n",
+ "dimensiones['Ancho'] = (dimensiones['Ancho']-dimensiones['Ancho'].min())/(dimensiones['Ancho'].max() - dimensiones['Ancho'].min())\n",
+ "dimensiones['Alto'] = (dimensiones['Alto']-dimensiones['Alto'].min())/(dimensiones['Alto'].max() - dimensiones['Alto'].min())\n",
+ "dimensiones\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Método **Puntaje estándar**: \n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Largo | \n",
+ " Ancho | \n",
+ " Alto | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " -0.078861 | \n",
+ " 0.249968 | \n",
+ " 0.451435 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " -0.030668 | \n",
+ " -0.714195 | \n",
+ " 0.545129 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " -0.760972 | \n",
+ " -0.142839 | \n",
+ " -0.391812 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " -0.078861 | \n",
+ " 0.249968 | \n",
+ " 0.451435 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " -0.950036 | \n",
+ " -2.416358 | \n",
+ " -0.251270 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 1.081470 | \n",
+ " 0.452323 | \n",
+ " -2.312540 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 0.169517 | \n",
+ " 1.059389 | \n",
+ " -0.110729 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " -0.290167 | \n",
+ " -0.321388 | \n",
+ " -0.953976 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 2.193608 | \n",
+ " -0.119032 | \n",
+ " 0.451435 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " -1.528347 | \n",
+ " 0.297581 | \n",
+ " 1.482070 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 0.273316 | \n",
+ " 1.404583 | \n",
+ " 0.638823 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Largo Ancho Alto\n",
+ "0 -0.078861 0.249968 0.451435\n",
+ "1 -0.030668 -0.714195 0.545129\n",
+ "2 -0.760972 -0.142839 -0.391812\n",
+ "3 -0.078861 0.249968 0.451435\n",
+ "4 -0.950036 -2.416358 -0.251270\n",
+ "5 1.081470 0.452323 -2.312540\n",
+ "6 0.169517 1.059389 -0.110729\n",
+ "7 -0.290167 -0.321388 -0.953976\n",
+ "8 2.193608 -0.119032 0.451435\n",
+ "9 -1.528347 0.297581 1.482070\n",
+ "10 0.273316 1.404583 0.638823"
+ ]
+ },
+ "execution_count": 92,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dimensiones['Largo'] = (dimensiones['Largo']-dimensiones['Largo'].mean())/(dimensiones['Largo'].std())\n",
+ "dimensiones['Ancho'] = (dimensiones['Ancho']-dimensiones['Ancho'].mean())/(dimensiones['Ancho'].std())\n",
+ "dimensiones['Alto'] = (dimensiones['Alto']-dimensiones['Alto'].mean())/(dimensiones['Alto'].std())\n",
+ "dimensiones"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "## Estadística descriptiva"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Tabla de resumen estadístico"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 93,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " symboling | \n",
+ " normalized-losses | \n",
+ " make | \n",
+ " fuel-type | \n",
+ " aspiration | \n",
+ " num-of-doors | \n",
+ " body-style | \n",
+ " drive-wheels | \n",
+ " engine-location | \n",
+ " wheel-base | \n",
+ " ... | \n",
+ " engine-size | \n",
+ " fuel-system | \n",
+ " bore | \n",
+ " stroke | \n",
+ " compression-ratio | \n",
+ " horsepower | \n",
+ " peak-rpm | \n",
+ " city-mpg | \n",
+ " highway-mpg | \n",
+ " price | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 3 | \n",
+ " 122 | \n",
+ " alfa-romero | \n",
+ " gas | \n",
+ " std | \n",
+ " two | \n",
+ " convertible | \n",
+ " rwd | \n",
+ " front | \n",
+ " 88.6 | \n",
+ " ... | \n",
+ " 130 | \n",
+ " mpfi | \n",
+ " 3.47 | \n",
+ " 2.68 | \n",
+ " 9.0 | \n",
+ " 111.0 | \n",
+ " 5000.0 | \n",
+ " 21 | \n",
+ " 27 | \n",
+ " 13495.0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 3 | \n",
+ " 122 | \n",
+ " alfa-romero | \n",
+ " gas | \n",
+ " std | \n",
+ " two | \n",
+ " convertible | \n",
+ " rwd | \n",
+ " front | \n",
+ " 88.6 | \n",
+ " ... | \n",
+ " 130 | \n",
+ " mpfi | \n",
+ " 3.47 | \n",
+ " 2.68 | \n",
+ " 9.0 | \n",
+ " 111.0 | \n",
+ " 5000.0 | \n",
+ " 21 | \n",
+ " 27 | \n",
+ " 16500.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 1 | \n",
+ " 122 | \n",
+ " alfa-romero | \n",
+ " gas | \n",
+ " std | \n",
+ " two | \n",
+ " hatchback | \n",
+ " rwd | \n",
+ " front | \n",
+ " 94.5 | \n",
+ " ... | \n",
+ " 152 | \n",
+ " mpfi | \n",
+ " 2.68 | \n",
+ " 3.47 | \n",
+ " 9.0 | \n",
+ " 154.0 | \n",
+ " 5000.0 | \n",
+ " 19 | \n",
+ " 26 | \n",
+ " 16500.0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 2 | \n",
+ " 164 | \n",
+ " audi | \n",
+ " gas | \n",
+ " std | \n",
+ " four | \n",
+ " sedan | \n",
+ " fwd | \n",
+ " front | \n",
+ " 99.8 | \n",
+ " ... | \n",
+ " 109 | \n",
+ " mpfi | \n",
+ " 3.19 | \n",
+ " 3.40 | \n",
+ " 10.0 | \n",
+ " 102.0 | \n",
+ " 5500.0 | \n",
+ " 24 | \n",
+ " 30 | \n",
+ " 13950.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 2 | \n",
+ " 164 | \n",
+ " audi | \n",
+ " gas | \n",
+ " std | \n",
+ " four | \n",
+ " sedan | \n",
+ " 4wd | \n",
+ " front | \n",
+ " 99.4 | \n",
+ " ... | \n",
+ " 136 | \n",
+ " mpfi | \n",
+ " 3.19 | \n",
+ " 3.40 | \n",
+ " 8.0 | \n",
+ " 115.0 | \n",
+ " 5500.0 | \n",
+ " 18 | \n",
+ " 22 | \n",
+ " 17450.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " symboling normalized-losses make fuel-type aspiration \\\n",
+ "0 3 122 alfa-romero gas std \n",
+ "1 3 122 alfa-romero gas std \n",
+ "2 1 122 alfa-romero gas std \n",
+ "3 2 164 audi gas std \n",
+ "4 2 164 audi gas std \n",
+ "\n",
+ " num-of-doors body-style drive-wheels engine-location wheel-base ... \\\n",
+ "0 two convertible rwd front 88.6 ... \n",
+ "1 two convertible rwd front 88.6 ... \n",
+ "2 two hatchback rwd front 94.5 ... \n",
+ "3 four sedan fwd front 99.8 ... \n",
+ "4 four sedan 4wd front 99.4 ... \n",
+ "\n",
+ " engine-size fuel-system bore stroke compression-ratio horsepower \\\n",
+ "0 130 mpfi 3.47 2.68 9.0 111.0 \n",
+ "1 130 mpfi 3.47 2.68 9.0 111.0 \n",
+ "2 152 mpfi 2.68 3.47 9.0 154.0 \n",
+ "3 109 mpfi 3.19 3.40 10.0 102.0 \n",
+ "4 136 mpfi 3.19 3.40 8.0 115.0 \n",
+ "\n",
+ " peak-rpm city-mpg highway-mpg price \n",
+ "0 5000.0 21 27 13495.0 \n",
+ "1 5000.0 21 27 16500.0 \n",
+ "2 5000.0 19 26 16500.0 \n",
+ "3 5500.0 24 30 13950.0 \n",
+ "4 5500.0 18 22 17450.0 \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 93,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "df = pd.read_csv('Automobile_data.csv')\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 94,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " symboling | \n",
+ " normalized-losses | \n",
+ " wheel-base | \n",
+ " length | \n",
+ " width | \n",
+ " height | \n",
+ " curb-weight | \n",
+ " engine-size | \n",
+ " bore | \n",
+ " stroke | \n",
+ " compression-ratio | \n",
+ " horsepower | \n",
+ " peak-rpm | \n",
+ " city-mpg | \n",
+ " highway-mpg | \n",
+ " price | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | count | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ " 205.000000 | \n",
+ "
\n",
+ " \n",
+ " | mean | \n",
+ " 0.834146 | \n",
+ " 122.000000 | \n",
+ " 98.756585 | \n",
+ " 174.049268 | \n",
+ " 65.907805 | \n",
+ " 53.724878 | \n",
+ " 2555.565854 | \n",
+ " 126.907317 | \n",
+ " 3.329751 | \n",
+ " 3.255423 | \n",
+ " 10.142537 | \n",
+ " 104.256158 | \n",
+ " 5125.369458 | \n",
+ " 25.219512 | \n",
+ " 30.751220 | \n",
+ " 13207.129353 | \n",
+ "
\n",
+ " \n",
+ " | std | \n",
+ " 1.245307 | \n",
+ " 31.681008 | \n",
+ " 6.021776 | \n",
+ " 12.337289 | \n",
+ " 2.145204 | \n",
+ " 2.443522 | \n",
+ " 520.680204 | \n",
+ " 41.642693 | \n",
+ " 0.270844 | \n",
+ " 0.313597 | \n",
+ " 3.972040 | \n",
+ " 39.519211 | \n",
+ " 476.979093 | \n",
+ " 6.542142 | \n",
+ " 6.886443 | \n",
+ " 7868.768212 | \n",
+ "
\n",
+ " \n",
+ " | min | \n",
+ " -2.000000 | \n",
+ " 65.000000 | \n",
+ " 86.600000 | \n",
+ " 141.100000 | \n",
+ " 60.300000 | \n",
+ " 47.800000 | \n",
+ " 1488.000000 | \n",
+ " 61.000000 | \n",
+ " 2.540000 | \n",
+ " 2.070000 | \n",
+ " 7.000000 | \n",
+ " 48.000000 | \n",
+ " 4150.000000 | \n",
+ " 13.000000 | \n",
+ " 16.000000 | \n",
+ " 5118.000000 | \n",
+ "
\n",
+ " \n",
+ " | 25% | \n",
+ " 0.000000 | \n",
+ " 101.000000 | \n",
+ " 94.500000 | \n",
+ " 166.300000 | \n",
+ " 64.100000 | \n",
+ " 52.000000 | \n",
+ " 2145.000000 | \n",
+ " 97.000000 | \n",
+ " 3.150000 | \n",
+ " 3.110000 | \n",
+ " 8.600000 | \n",
+ " 70.000000 | \n",
+ " 4800.000000 | \n",
+ " 19.000000 | \n",
+ " 25.000000 | \n",
+ " 7788.000000 | \n",
+ "
\n",
+ " \n",
+ " | 50% | \n",
+ " 1.000000 | \n",
+ " 122.000000 | \n",
+ " 97.000000 | \n",
+ " 173.200000 | \n",
+ " 65.500000 | \n",
+ " 54.100000 | \n",
+ " 2414.000000 | \n",
+ " 120.000000 | \n",
+ " 3.310000 | \n",
+ " 3.290000 | \n",
+ " 9.000000 | \n",
+ " 95.000000 | \n",
+ " 5200.000000 | \n",
+ " 24.000000 | \n",
+ " 30.000000 | \n",
+ " 10595.000000 | \n",
+ "
\n",
+ " \n",
+ " | 75% | \n",
+ " 2.000000 | \n",
+ " 137.000000 | \n",
+ " 102.400000 | \n",
+ " 183.100000 | \n",
+ " 66.900000 | \n",
+ " 55.500000 | \n",
+ " 2935.000000 | \n",
+ " 141.000000 | \n",
+ " 3.580000 | \n",
+ " 3.410000 | \n",
+ " 9.400000 | \n",
+ " 116.000000 | \n",
+ " 5500.000000 | \n",
+ " 30.000000 | \n",
+ " 34.000000 | \n",
+ " 16500.000000 | \n",
+ "
\n",
+ " \n",
+ " | max | \n",
+ " 3.000000 | \n",
+ " 256.000000 | \n",
+ " 120.900000 | \n",
+ " 208.100000 | \n",
+ " 72.300000 | \n",
+ " 59.800000 | \n",
+ " 4066.000000 | \n",
+ " 326.000000 | \n",
+ " 3.940000 | \n",
+ " 4.170000 | \n",
+ " 23.000000 | \n",
+ " 288.000000 | \n",
+ " 6600.000000 | \n",
+ " 49.000000 | \n",
+ " 54.000000 | \n",
+ " 45400.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " symboling normalized-losses wheel-base length width \\\n",
+ "count 205.000000 205.000000 205.000000 205.000000 205.000000 \n",
+ "mean 0.834146 122.000000 98.756585 174.049268 65.907805 \n",
+ "std 1.245307 31.681008 6.021776 12.337289 2.145204 \n",
+ "min -2.000000 65.000000 86.600000 141.100000 60.300000 \n",
+ "25% 0.000000 101.000000 94.500000 166.300000 64.100000 \n",
+ "50% 1.000000 122.000000 97.000000 173.200000 65.500000 \n",
+ "75% 2.000000 137.000000 102.400000 183.100000 66.900000 \n",
+ "max 3.000000 256.000000 120.900000 208.100000 72.300000 \n",
+ "\n",
+ " height curb-weight engine-size bore stroke \\\n",
+ "count 205.000000 205.000000 205.000000 205.000000 205.000000 \n",
+ "mean 53.724878 2555.565854 126.907317 3.329751 3.255423 \n",
+ "std 2.443522 520.680204 41.642693 0.270844 0.313597 \n",
+ "min 47.800000 1488.000000 61.000000 2.540000 2.070000 \n",
+ "25% 52.000000 2145.000000 97.000000 3.150000 3.110000 \n",
+ "50% 54.100000 2414.000000 120.000000 3.310000 3.290000 \n",
+ "75% 55.500000 2935.000000 141.000000 3.580000 3.410000 \n",
+ "max 59.800000 4066.000000 326.000000 3.940000 4.170000 \n",
+ "\n",
+ " compression-ratio horsepower peak-rpm city-mpg highway-mpg \\\n",
+ "count 205.000000 205.000000 205.000000 205.000000 205.000000 \n",
+ "mean 10.142537 104.256158 5125.369458 25.219512 30.751220 \n",
+ "std 3.972040 39.519211 476.979093 6.542142 6.886443 \n",
+ "min 7.000000 48.000000 4150.000000 13.000000 16.000000 \n",
+ "25% 8.600000 70.000000 4800.000000 19.000000 25.000000 \n",
+ "50% 9.000000 95.000000 5200.000000 24.000000 30.000000 \n",
+ "75% 9.400000 116.000000 5500.000000 30.000000 34.000000 \n",
+ "max 23.000000 288.000000 6600.000000 49.000000 54.000000 \n",
+ "\n",
+ " price \n",
+ "count 205.000000 \n",
+ "mean 13207.129353 \n",
+ "std 7868.768212 \n",
+ "min 5118.000000 \n",
+ "25% 7788.000000 \n",
+ "50% 10595.000000 \n",
+ "75% 16500.000000 \n",
+ "max 45400.000000 "
+ ]
+ },
+ "execution_count": 94,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Gráficos de cajas (o Boxplots)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Vamos a generar datos aleatoriamente y hacer un **gráfico de caja**."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 95,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " -0.736260 | \n",
+ " 0.440260 | \n",
+ " 0.731900 | \n",
+ " 0.254316 | \n",
+ " -1.807715 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 1.053235 | \n",
+ " -2.661686 | \n",
+ " -1.076339 | \n",
+ " 0.484691 | \n",
+ " 0.170791 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.129711 | \n",
+ " -0.386408 | \n",
+ " 1.199626 | \n",
+ " -1.070269 | \n",
+ " -1.157811 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " -0.271514 | \n",
+ " -0.071525 | \n",
+ " -0.862646 | \n",
+ " -0.789977 | \n",
+ " 0.300384 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " -0.166081 | \n",
+ " 0.298657 | \n",
+ " 1.737711 | \n",
+ " 0.311688 | \n",
+ " 1.138495 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4\n",
+ "0 -0.736260 0.440260 0.731900 0.254316 -1.807715\n",
+ "1 1.053235 -2.661686 -1.076339 0.484691 0.170791\n",
+ "2 0.129711 -0.386408 1.199626 -1.070269 -1.157811\n",
+ "3 -0.271514 -0.071525 -0.862646 -0.789977 0.300384\n",
+ "4 -0.166081 0.298657 1.737711 0.311688 1.138495"
+ ]
+ },
+ "execution_count": 95,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "np.random.seed(1500) #generación aleatoria números\n",
+ "dfb = pd.DataFrame(np.random.randn(10,5)) #DataFrame de dimensiones 10x5\n",
+ "dfb.boxplot(return_type='axes') #Grafico de caja de cada categoría.\n",
+ "dfb.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Tomemos los datos del archivo `Automobile_data.csv` para crear un gráfico de caja de 3 variables que definen las dimensiones de los automóviles. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 97,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 97,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "x = df['length'] #Variable Largo\n",
+ "y = df['width'] #Variable Ancho\n",
+ "z =df['height'] #Variable Alto\n",
+ "dfbp = pd.DataFrame([x,y,z]).T #Creando un DataFrame con las dimensiones de los autosmóviles\n",
+ "dfbp.boxplot(fontsize=13, return_type='axes') #Gráfico de caja de las 3 variables \n",
+ "#Tarea!!!!! Normalice estos datos y haga el nuevo gráfico de caja"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Gráficos de barras (o histogramas)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Vamos a generar datos aleatoriamente y hacer un **gráfico de barras**."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 98,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 98,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "np.random.seed(14000) #Generación de números aleatorios\n",
+ "pdhist = pd.Series(np.random.randn(1000)) #Serie de números aleatorios\n",
+ "pdhist.hist(normed=True) # Muestra las barras\n",
+ "pdhist.plot(fontsize=13, kind='kde') #Gráfico de barras (kde = Kernel Density Estimation plot. Haga la prueba con 'hist')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Utilicemos los datos de `Automobile_data.csv` para hacer un **gráfico de barras o histograma** de la variable `price` (precio)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 99,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0,0.5,'Frecuencia')"
+ ]
+ },
+ "execution_count": 99,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "p = df['price'] #Seleccionamos la variable price\n",
+ "pdf = pd.Series(p) #Convertimos la selección en una serie de Pandas\n",
+ "pdf.hist(normed=True) # Muestra las barras\n",
+ "pdf.plot(fontsize=11, kind = 'hist') #Gráfico de barras\n",
+ "plt.xlabel('Precio',fontsize=13)\n",
+ "plt.ylabel('Frecuencia', fontsize=13)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Este **gráfico de barras** nos indica que hay un número alto de automóviles con precio menor a 10000, entre otras cosas .... ¿Qué cosas? ;)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Gráfico de dispersión\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "Este **gráfico de dispersión** muestra la relación entre las variables `tamaño del motor` y `precio`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 102,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0,0.5,'Precio')"
+ ]
+ },
+ "execution_count": 102,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "x= df['engine-size'] #Variable predictora\n",
+ "y= df['price'] #Variable objetivo o que deseamos predecir\n",
+ "plt.scatter(x, y) #Gráfico de dispersión en Matplotlib \n",
+ "plt.title('Gráfico de dispersión de Tamaño del motor Vs. Precio', fontsize=13)#Nombre del gráfico\n",
+ "plt.xlabel('Tamaño del motor', fontsize=13)#Etiquetal del eje-x\n",
+ "plt.ylabel('Precio', fontsize=13)#Etiqueta del eje-y"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "### Correlación entre variables"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Tomememos las dos variables del ejemplo anterior..."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 119,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5,1,'Gráfico de dispersión de Tamaño del motor Vs. Precio')"
+ ]
+ },
+ "execution_count": 119,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "from scipy import stats\n",
+ "x=df['engine-size'] #Variable predictora\n",
+ "y= df['price'] #Variable objetivo o que deseamos predecir\n",
+ "slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)\n",
+ "line = slope*x+intercept\n",
+ "plt.plot(x,y,'o', x, line)\n",
+ "ax = plt.gca()\n",
+ "fig = plt.gcf()\n",
+ "plt.xlabel('Tamaño del motor', fontsize=9)#Etiquetal del eje-x\n",
+ "plt.ylabel('Precio', fontsize=9)#Etiqueta del eje-y\n",
+ "plt.title('Gráfico de dispersión de Tamaño del motor Vs. Precio', fontsize=13)#Nombre del gráfico\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "El gráfico de dispersión anterior revela que hay una relación lineal positiva entre el tamaño del motor y el precio del auto. Es decir, a medida que aumenta el tamaño del motor aumenta el precio."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Este gráfico de dispersión revela que hay una relación lineal negativa entre las millas que recorre el auto por combustible que usa y el precio del mismo. Es decir, mientras más millas por galón el auto es más económico. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 121,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5,1,'Gráfico de dispersión de Millas por galón en autopista Vs. Precio')"
+ ]
+ },
+ "execution_count": 121,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "from scipy import stats\n",
+ "x=df['highway-mpg'] #Variable predictora\n",
+ "y= df['price'] #Variable objetivo o que deseamos predecir\n",
+ "slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)\n",
+ "line = slope*x+intercept\n",
+ "plt.plot(x,y,'o', x, line)\n",
+ "ax = plt.gca()\n",
+ "fig = plt.gcf()\n",
+ "plt.xlabel('Millas por galón en autopista', fontsize=9)#Etiquetal del eje-x\n",
+ "plt.ylabel('Precio', fontsize=9)#Etiqueta del eje-y\n",
+ "plt.title('Gráfico de dispersión de Millas por galón en autopista Vs. Precio', fontsize=13)#Nombre del gráfico\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ahora calculemos el coeficiente de correlación y el p-valor entre las variables 'Caballos de Fuerza' y 'Precio' usando 'stats.pearson()'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 118,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(0.757916953745141, 1.6076704005409566e-39)"
+ ]
+ },
+ "execution_count": 118,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from scipy import stats\n",
+ "stats.pearsonr(df['horsepower'], df['price'])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Existe una fuerte correlación positiva entre las variables ya que el coeficiente de correlación es cercano a 1 y el p-valor es mucho menor que 0.001"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/EVI - 2018/EVI 04/anieves.pdf b/EVI - 2018/EVI 04/anieves.pdf
new file mode 100644
index 0000000..22b26e9
Binary files /dev/null and b/EVI - 2018/EVI 04/anieves.pdf differ
diff --git a/EVI - 2018/EVI 04/empleados_cumple.txt b/EVI - 2018/EVI 04/empleados_cumple.txt
new file mode 100755
index 0000000..b72ec6b
--- /dev/null
+++ b/EVI - 2018/EVI 04/empleados_cumple.txt
@@ -0,0 +1,5 @@
+Nombre,Departamento,Mes de Cumpleaños
+Adelis Nieves, Matemáticas, Junio
+Miguel Astor, Redes, Septiembre
+Francisco Sans, Computación Gráfica, Diciembre
+Antonio Escalante, Letras, Diciembre
\ No newline at end of file
diff --git a/EVI - 2018/EVI 04/mastor.pdf b/EVI - 2018/EVI 04/mastor.pdf
new file mode 100644
index 0000000..8e5a86c
Binary files /dev/null and b/EVI - 2018/EVI 04/mastor.pdf differ
diff --git a/EVI - 2018/EVI 04/olympics.csv b/EVI - 2018/EVI 04/olympics.csv
new file mode 100755
index 0000000..75bf8bf
--- /dev/null
+++ b/EVI - 2018/EVI 04/olympics.csv
@@ -0,0 +1,149 @@
+0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
+,№ Summer,01 !,02 !,03 !,Total,№ Winter,01 !,02 !,03 !,Total,№ Games,01 !,02 !,03 !,Combined total
+Afghanistan (AFG),13,0,0,2,2,0,0,0,0,0,13,0,0,2,2
+Algeria (ALG),12,5,2,8,15,3,0,0,0,0,15,5,2,8,15
+Argentina (ARG),23,18,24,28,70,18,0,0,0,0,41,18,24,28,70
+Armenia (ARM),5,1,2,9,12,6,0,0,0,0,11,1,2,9,12
+Australasia (ANZ) [ANZ],2,3,4,5,12,0,0,0,0,0,2,3,4,5,12
+Australia (AUS) [AUS] [Z],25,139,152,177,468,18,5,3,4,12,43,144,155,181,480
+Austria (AUT),26,18,33,35,86,22,59,78,81,218,48,77,111,116,304
+Azerbaijan (AZE),5,6,5,15,26,5,0,0,0,0,10,6,5,15,26
+Bahamas (BAH),15,5,2,5,12,0,0,0,0,0,15,5,2,5,12
+Bahrain (BRN),8,0,0,1,1,0,0,0,0,0,8,0,0,1,1
+Barbados (BAR) [BAR],11,0,0,1,1,0,0,0,0,0,11,0,0,1,1
+Belarus (BLR),5,12,24,39,75,6,6,4,5,15,11,18,28,44,90
+Belgium (BEL),25,37,52,53,142,20,1,1,3,5,45,38,53,56,147
+Bermuda (BER),17,0,0,1,1,7,0,0,0,0,24,0,0,1,1
+Bohemia (BOH) [BOH] [Z],3,0,1,3,4,0,0,0,0,0,3,0,1,3,4
+Botswana (BOT),9,0,1,0,1,0,0,0,0,0,9,0,1,0,1
+Brazil (BRA),21,23,30,55,108,7,0,0,0,0,28,23,30,55,108
+British West Indies (BWI) [BWI],1,0,0,2,2,0,0,0,0,0,1,0,0,2,2
+Bulgaria (BUL) [H],19,51,85,78,214,19,1,2,3,6,38,52,87,81,220
+Burundi (BDI),5,1,0,0,1,0,0,0,0,0,5,1,0,0,1
+Cameroon (CMR),13,3,1,1,5,1,0,0,0,0,14,3,1,1,5
+Canada (CAN),25,59,99,121,279,22,62,56,52,170,47,121,155,173,449
+Chile (CHI) [I],22,2,7,4,13,16,0,0,0,0,38,2,7,4,13
+China (CHN) [CHN],9,201,146,126,473,10,12,22,19,53,19,213,168,145,526
+Colombia (COL),18,2,6,11,19,1,0,0,0,0,19,2,6,11,19
+Costa Rica (CRC),14,1,1,2,4,6,0,0,0,0,20,1,1,2,4
+Ivory Coast (CIV) [CIV],12,0,1,0,1,0,0,0,0,0,12,0,1,0,1
+Croatia (CRO),6,6,7,10,23,7,4,6,1,11,13,10,13,11,34
+Cuba (CUB) [Z],19,72,67,70,209,0,0,0,0,0,19,72,67,70,209
+Cyprus (CYP),9,0,1,0,1,10,0,0,0,0,19,0,1,0,1
+Czech Republic (CZE) [CZE],5,14,15,15,44,6,7,9,8,24,11,21,24,23,68
+Czechoslovakia (TCH) [TCH],16,49,49,45,143,16,2,8,15,25,32,51,57,60,168
+Denmark (DEN) [Z],26,43,68,68,179,13,0,1,0,1,39,43,69,68,180
+Djibouti (DJI) [B],7,0,0,1,1,0,0,0,0,0,7,0,0,1,1
+Dominican Republic (DOM),13,3,2,1,6,0,0,0,0,0,13,3,2,1,6
+Ecuador (ECU),13,1,1,0,2,0,0,0,0,0,13,1,1,0,2
+Egypt (EGY) [EGY] [Z],21,7,9,10,26,1,0,0,0,0,22,7,9,10,26
+Eritrea (ERI),4,0,0,1,1,0,0,0,0,0,4,0,0,1,1
+Estonia (EST),11,9,9,15,33,9,4,2,1,7,20,13,11,16,40
+Ethiopia (ETH),12,21,7,17,45,2,0,0,0,0,14,21,7,17,45
+Finland (FIN),24,101,84,117,302,22,42,62,57,161,46,143,146,174,463
+France (FRA) [O] [P] [Z],27,202,223,246,671,22,31,31,47,109,49,233,254,293,780
+Gabon (GAB),9,0,1,0,1,0,0,0,0,0,9,0,1,0,1
+Georgia (GEO),5,6,5,14,25,6,0,0,0,0,11,6,5,14,25
+Germany (GER) [GER] [Z],15,174,182,217,573,11,78,78,53,209,26,252,260,270,782
+United Team of Germany (EUA) [EUA],3,28,54,36,118,3,8,6,5,19,6,36,60,41,137
+East Germany (GDR) [GDR],5,153,129,127,409,6,39,36,35,110,11,192,165,162,519
+West Germany (FRG) [FRG],5,56,67,81,204,6,11,15,13,39,11,67,82,94,243
+Ghana (GHA) [GHA],13,0,1,3,4,1,0,0,0,0,14,0,1,3,4
+Great Britain (GBR) [GBR] [Z],27,236,272,272,780,22,10,4,12,26,49,246,276,284,806
+Greece (GRE) [Z],27,30,42,39,111,18,0,0,0,0,45,30,42,39,111
+Grenada (GRN),8,1,0,0,1,0,0,0,0,0,8,1,0,0,1
+Guatemala (GUA),13,0,1,0,1,1,0,0,0,0,14,0,1,0,1
+Guyana (GUY) [GUY],16,0,0,1,1,0,0,0,0,0,16,0,0,1,1
+Haiti (HAI) [J],14,0,1,1,2,0,0,0,0,0,14,0,1,1,2
+Hong Kong (HKG) [HKG],15,1,1,1,3,4,0,0,0,0,19,1,1,1,3
+Hungary (HUN),25,167,144,165,476,22,0,2,4,6,47,167,146,169,482
+Iceland (ISL),19,0,2,2,4,17,0,0,0,0,36,0,2,2,4
+India (IND) [F],23,9,6,11,26,9,0,0,0,0,32,9,6,11,26
+Indonesia (INA),14,6,10,11,27,0,0,0,0,0,14,6,10,11,27
+Iran (IRI) [K],15,15,20,25,60,10,0,0,0,0,25,15,20,25,60
+Iraq (IRQ),13,0,0,1,1,0,0,0,0,0,13,0,0,1,1
+Ireland (IRL),20,9,8,12,29,6,0,0,0,0,26,9,8,12,29
+Israel (ISR),15,1,1,5,7,6,0,0,0,0,21,1,1,5,7
+Italy (ITA) [M] [S],26,198,166,185,549,22,37,34,43,114,48,235,200,228,663
+Jamaica (JAM) [JAM],16,17,30,20,67,7,0,0,0,0,23,17,30,20,67
+Japan (JPN),21,130,126,142,398,20,10,17,18,45,41,140,143,160,443
+Kazakhstan (KAZ),5,16,17,19,52,6,1,3,3,7,11,17,20,22,59
+Kenya (KEN),13,25,32,29,86,3,0,0,0,0,16,25,32,29,86
+North Korea (PRK),9,14,12,21,47,8,0,1,1,2,17,14,13,22,49
+South Korea (KOR),16,81,82,80,243,17,26,17,10,53,33,107,99,90,296
+Kuwait (KUW),12,0,0,2,2,0,0,0,0,0,12,0,0,2,2
+Kyrgyzstan (KGZ),5,0,1,2,3,6,0,0,0,0,11,0,1,2,3
+Latvia (LAT),10,3,11,5,19,10,0,4,3,7,20,3,15,8,26
+Lebanon (LIB),16,0,2,2,4,16,0,0,0,0,32,0,2,2,4
+Liechtenstein (LIE),16,0,0,0,0,18,2,2,5,9,34,2,2,5,9
+Lithuania (LTU),8,6,5,10,21,8,0,0,0,0,16,6,5,10,21
+Luxembourg (LUX) [O],22,1,1,0,2,8,0,2,0,2,30,1,3,0,4
+Macedonia (MKD),5,0,0,1,1,5,0,0,0,0,10,0,0,1,1
+Malaysia (MAS) [MAS],12,0,3,3,6,0,0,0,0,0,12,0,3,3,6
+Mauritius (MRI),8,0,0,1,1,0,0,0,0,0,8,0,0,1,1
+Mexico (MEX),22,13,21,28,62,8,0,0,0,0,30,13,21,28,62
+Moldova (MDA),5,0,2,5,7,6,0,0,0,0,11,0,2,5,7
+Mongolia (MGL),12,2,9,13,24,13,0,0,0,0,25,2,9,13,24
+Montenegro (MNE),2,0,1,0,1,2,0,0,0,0,4,0,1,0,1
+Morocco (MAR),13,6,5,11,22,6,0,0,0,0,19,6,5,11,22
+Mozambique (MOZ),9,1,0,1,2,0,0,0,0,0,9,1,0,1,2
+Namibia (NAM),6,0,4,0,4,0,0,0,0,0,6,0,4,0,4
+Netherlands (NED) [Z],25,77,85,104,266,20,37,38,35,110,45,114,123,139,376
+Netherlands Antilles (AHO) [AHO] [I],13,0,1,0,1,2,0,0,0,0,15,0,1,0,1
+New Zealand (NZL) [NZL],22,42,18,39,99,15,0,1,0,1,37,42,19,39,100
+Niger (NIG),11,0,0,1,1,0,0,0,0,0,11,0,0,1,1
+Nigeria (NGR),15,3,8,12,23,0,0,0,0,0,15,3,8,12,23
+Norway (NOR) [Q],24,56,49,43,148,22,118,111,100,329,46,174,160,143,477
+Pakistan (PAK),16,3,3,4,10,2,0,0,0,0,18,3,3,4,10
+Panama (PAN),16,1,0,2,3,0,0,0,0,0,16,1,0,2,3
+Paraguay (PAR),11,0,1,0,1,1,0,0,0,0,12,0,1,0,1
+Peru (PER) [L],17,1,3,0,4,2,0,0,0,0,19,1,3,0,4
+Philippines (PHI),20,0,2,7,9,4,0,0,0,0,24,0,2,7,9
+Poland (POL),20,64,82,125,271,22,6,7,7,20,42,70,89,132,291
+Portugal (POR),23,4,8,11,23,7,0,0,0,0,30,4,8,11,23
+Puerto Rico (PUR),17,0,2,6,8,6,0,0,0,0,23,0,2,6,8
+Qatar (QAT),8,0,0,4,4,0,0,0,0,0,8,0,0,4,4
+Romania (ROU),20,88,94,119,301,20,0,0,1,1,40,88,94,120,302
+Russia (RUS) [RUS],5,132,121,142,395,6,49,40,35,124,11,181,161,177,519
+Russian Empire (RU1) [RU1],3,1,4,3,8,0,0,0,0,0,3,1,4,3,8
+Soviet Union (URS) [URS],9,395,319,296,1010,9,78,57,59,194,18,473,376,355,1204
+Unified Team (EUN) [EUN],1,45,38,29,112,1,9,6,8,23,2,54,44,37,135
+Saudi Arabia (KSA),10,0,1,2,3,0,0,0,0,0,10,0,1,2,3
+Senegal (SEN),13,0,1,0,1,5,0,0,0,0,18,0,1,0,1
+Serbia (SRB) [SRB],3,1,2,4,7,2,0,0,0,0,5,1,2,4,7
+Serbia and Montenegro (SCG) [SCG],3,2,4,3,9,3,0,0,0,0,6,2,4,3,9
+Singapore (SIN),15,0,2,2,4,0,0,0,0,0,15,0,2,2,4
+Slovakia (SVK) [SVK],5,7,9,8,24,6,2,2,1,5,11,9,11,9,29
+Slovenia (SLO),6,4,6,9,19,7,2,4,9,15,13,6,10,18,34
+South Africa (RSA),18,23,26,27,76,6,0,0,0,0,24,23,26,27,76
+Spain (ESP) [Z],22,37,59,35,131,19,1,0,1,2,41,38,59,36,133
+Sri Lanka (SRI) [SRI],16,0,2,0,2,0,0,0,0,0,16,0,2,0,2
+Sudan (SUD),11,0,1,0,1,0,0,0,0,0,11,0,1,0,1
+Suriname (SUR) [E],11,1,0,1,2,0,0,0,0,0,11,1,0,1,2
+Sweden (SWE) [Z],26,143,164,176,483,22,50,40,54,144,48,193,204,230,627
+Switzerland (SUI),27,47,73,65,185,22,50,40,48,138,49,97,113,113,323
+Syria (SYR),12,1,1,1,3,0,0,0,0,0,12,1,1,1,3
+Chinese Taipei (TPE) [TPE] [TPE2],13,2,7,12,21,11,0,0,0,0,24,2,7,12,21
+Tajikistan (TJK),5,0,1,2,3,4,0,0,0,0,9,0,1,2,3
+Tanzania (TAN) [TAN],12,0,2,0,2,0,0,0,0,0,12,0,2,0,2
+Thailand (THA),15,7,6,11,24,3,0,0,0,0,18,7,6,11,24
+Togo (TOG),9,0,0,1,1,1,0,0,0,0,10,0,0,1,1
+Tonga (TGA),8,0,1,0,1,1,0,0,0,0,9,0,1,0,1
+Trinidad and Tobago (TRI) [TRI],16,2,5,11,18,3,0,0,0,0,19,2,5,11,18
+Tunisia (TUN),13,3,3,4,10,0,0,0,0,0,13,3,3,4,10
+Turkey (TUR),21,39,25,24,88,16,0,0,0,0,37,39,25,24,88
+Uganda (UGA),14,2,3,2,7,0,0,0,0,0,14,2,3,2,7
+Ukraine (UKR),5,33,27,55,115,6,2,1,4,7,11,35,28,59,122
+United Arab Emirates (UAE),8,1,0,0,1,0,0,0,0,0,8,1,0,0,1
+United States (USA) [P] [Q] [R] [Z],26,976,757,666,2399,22,96,102,84,282,48,1072,859,750,2681
+Uruguay (URU),20,2,2,6,10,1,0,0,0,0,21,2,2,6,10
+Uzbekistan (UZB),5,5,5,10,20,6,1,0,0,1,11,6,5,10,21
+Venezuela (VEN),17,2,2,8,12,4,0,0,0,0,21,2,2,8,12
+Vietnam (VIE),14,0,2,0,2,0,0,0,0,0,14,0,2,0,2
+Virgin Islands (ISV),11,0,1,0,1,7,0,0,0,0,18,0,1,0,1
+Yugoslavia (YUG) [YUG],16,26,29,28,83,14,0,3,1,4,30,26,32,29,87
+Independent Olympic Participants (IOP) [IOP],1,0,1,2,3,0,0,0,0,0,1,0,1,2,3
+Zambia (ZAM) [ZAM],12,0,1,1,2,0,0,0,0,0,12,0,1,1,2
+Zimbabwe (ZIM) [ZIM],12,3,4,1,8,1,0,0,0,0,13,3,4,1,8
+Mixed team (ZZX) [ZZX],3,8,5,4,17,0,0,0,0,0,3,8,5,4,17
+Totals,27,4809,4775,5130,14714,22,959,958,948,2865,49,5768,5733,6078,17579