Restructure content and add notes from HolaMundo

Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
2023-05-20 09:36:26 +02:00
parent 64ed03f811
commit f4e9797c4b
430 changed files with 889 additions and 24 deletions

View File

@@ -0,0 +1,715 @@
Sobreviviente,Clase,Genero,Edad,HermEsp,PadHij
0,3,0,22.0,1,0
1,1,1,38.0,1,0
1,3,1,26.0,0,0
1,1,1,35.0,1,0
0,3,0,35.0,0,0
0,1,0,54.0,0,0
0,3,0,2.0,3,1
1,3,1,27.0,0,2
1,2,1,14.0,1,0
1,3,1,4.0,1,1
1,1,1,58.0,0,0
0,3,0,20.0,0,0
0,3,0,39.0,1,5
0,3,1,14.0,0,0
1,2,1,55.0,0,0
0,3,0,2.0,4,1
0,3,1,31.0,1,0
0,2,0,35.0,0,0
1,2,0,34.0,0,0
1,3,1,15.0,0,0
1,1,0,28.0,0,0
0,3,1,8.0,3,1
1,3,1,38.0,1,5
0,1,0,19.0,3,2
0,1,0,40.0,0,0
0,2,0,66.0,0,0
0,1,0,28.0,1,0
0,1,0,42.0,1,0
0,3,0,21.0,0,0
0,3,1,18.0,2,0
1,3,1,14.0,1,0
0,3,1,40.0,1,0
0,2,1,27.0,1,0
1,2,1,3.0,1,2
1,3,1,19.0,0,0
0,3,1,18.0,1,0
0,3,0,7.0,4,1
0,3,0,21.0,0,0
1,1,1,49.0,1,0
1,2,1,29.0,1,0
0,1,0,65.0,0,1
1,2,1,21.0,0,0
0,3,0,28.5,0,0
1,2,1,5.0,1,2
0,3,0,11.0,5,2
0,3,0,22.0,0,0
1,1,1,38.0,0,0
0,1,0,45.0,1,0
0,3,0,4.0,3,2
1,2,1,29.0,0,0
0,3,0,19.0,0,0
1,3,1,17.0,4,2
0,3,0,26.0,2,0
0,2,0,32.0,0,0
0,3,1,16.0,5,2
0,2,0,21.0,0,0
0,3,0,26.0,1,0
1,3,0,32.0,0,0
0,3,0,25.0,0,0
1,2,0,0.83,0,2
1,3,1,30.0,0,0
0,3,0,22.0,0,0
1,3,0,29.0,0,0
0,1,0,28.0,0,0
1,2,1,17.0,0,0
1,3,1,33.0,3,0
0,3,0,16.0,1,3
1,1,1,23.0,3,2
0,3,0,24.0,0,0
0,3,0,29.0,0,0
0,3,0,20.0,0,0
0,1,0,46.0,1,0
0,3,0,26.0,1,2
0,3,0,59.0,0,0
0,1,0,71.0,0,0
1,1,0,23.0,0,1
1,2,1,34.0,0,1
0,2,0,34.0,1,0
0,3,1,28.0,0,0
0,1,0,21.0,0,1
0,3,0,33.0,0,0
0,3,0,37.0,2,0
0,3,0,28.0,0,0
1,3,1,21.0,0,0
0,3,0,38.0,0,0
0,1,0,47.0,0,0
0,3,1,14.5,1,0
0,3,0,22.0,0,0
0,3,1,20.0,1,0
0,3,1,17.0,0,0
0,3,0,21.0,0,0
0,3,0,70.5,0,0
0,2,0,29.0,1,0
0,1,0,24.0,0,1
0,3,1,2.0,4,2
0,2,0,21.0,2,0
0,2,0,32.5,1,0
1,2,1,32.5,0,0
0,1,0,54.0,0,1
1,3,0,12.0,1,0
1,3,0,24.0,0,0
0,3,0,45.0,0,0
0,3,0,33.0,0,0
0,3,0,20.0,0,0
0,3,1,47.0,1,0
1,2,1,29.0,1,0
0,2,0,25.0,0,0
0,2,0,23.0,0,0
1,1,1,19.0,0,2
0,1,0,37.0,1,0
0,3,0,16.0,0,0
0,1,0,24.0,0,0
1,3,1,22.0,0,0
1,3,1,24.0,1,0
0,3,0,19.0,0,0
0,2,0,18.0,0,0
0,2,0,19.0,1,1
1,3,0,27.0,0,0
0,3,1,9.0,2,2
0,2,0,36.5,0,2
0,2,0,42.0,0,0
0,2,0,51.0,0,0
1,1,1,22.0,1,0
0,3,0,55.5,0,0
0,3,0,40.5,0,2
0,1,0,51.0,0,1
1,3,1,16.0,0,0
0,3,0,30.0,0,0
0,3,0,44.0,0,1
1,2,1,40.0,0,0
0,3,0,26.0,0,0
0,3,0,17.0,0,0
0,3,0,1.0,4,1
1,3,0,9.0,0,2
0,3,1,45.0,1,4
0,3,0,28.0,0,0
0,1,0,61.0,0,0
0,3,0,4.0,4,1
1,3,1,1.0,1,1
0,3,0,21.0,0,0
0,1,0,56.0,0,0
0,3,0,18.0,1,1
0,1,1,50.0,0,0
0,2,0,30.0,0,0
0,3,0,36.0,0,0
0,3,0,9.0,4,2
1,2,0,1.0,2,1
1,3,1,4.0,0,2
1,1,0,45.0,0,0
0,3,0,40.0,1,1
0,3,0,36.0,0,0
1,2,1,32.0,0,0
0,2,0,19.0,0,0
1,3,1,19.0,1,0
1,2,0,3.0,1,1
1,1,1,44.0,0,0
1,1,1,58.0,0,0
0,3,0,42.0,0,1
0,2,1,24.0,0,0
0,3,0,28.0,0,0
0,3,0,34.0,0,0
0,3,0,45.5,0,0
1,3,0,18.0,0,0
0,3,1,2.0,0,1
0,3,0,32.0,1,0
1,3,0,26.0,0,0
1,3,1,16.0,0,0
1,1,0,40.0,0,0
0,3,0,24.0,0,0
1,2,1,35.0,0,0
0,3,0,22.0,0,0
0,2,0,30.0,0,0
1,1,1,31.0,1,0
1,3,1,27.0,0,0
0,2,0,42.0,1,0
1,1,1,32.0,0,0
0,2,0,30.0,0,0
1,3,0,16.0,0,0
0,2,0,27.0,0,0
0,3,0,51.0,0,0
1,1,0,38.0,1,0
0,3,0,22.0,0,0
1,2,0,19.0,0,0
0,3,0,20.5,0,0
0,2,0,18.0,0,0
1,1,1,35.0,1,0
0,3,0,29.0,0,0
0,2,0,59.0,0,0
1,3,1,5.0,4,2
0,2,0,24.0,0,0
0,2,0,44.0,1,0
1,2,1,8.0,0,2
0,2,0,19.0,0,0
0,2,0,33.0,0,0
0,2,0,29.0,0,0
0,3,0,22.0,0,0
0,3,0,30.0,0,0
0,1,0,44.0,2,0
0,3,1,25.0,0,0
1,2,1,24.0,0,2
1,1,0,37.0,1,1
0,2,0,54.0,1,0
0,3,1,29.0,1,1
0,1,0,62.0,0,0
0,3,0,30.0,1,0
0,3,1,41.0,0,2
1,3,1,29.0,0,2
1,1,1,30.0,0,0
1,1,1,35.0,0,0
1,2,1,50.0,0,1
1,3,0,3.0,4,2
0,1,0,52.0,1,1
0,1,0,40.0,0,0
0,2,0,36.0,0,0
0,3,0,16.0,4,1
1,3,0,25.0,1,0
1,1,1,58.0,0,1
1,1,1,35.0,0,0
1,3,0,25.0,0,0
1,2,1,41.0,0,1
0,1,0,37.0,0,1
1,1,1,63.0,1,0
0,3,1,45.0,0,0
0,3,0,7.0,4,1
1,3,1,35.0,1,1
0,3,0,65.0,0,0
0,3,0,28.0,0,0
0,3,0,16.0,0,0
1,3,0,19.0,0,0
0,3,0,33.0,0,0
1,3,0,30.0,0,0
0,3,0,22.0,0,0
1,2,0,42.0,0,0
1,3,1,22.0,0,0
1,1,1,26.0,0,0
1,1,1,19.0,1,0
0,2,0,36.0,0,0
0,3,1,24.0,0,0
0,3,0,24.0,0,0
0,3,0,23.5,0,0
0,1,1,2.0,1,2
1,1,1,50.0,0,1
0,3,0,19.0,0,0
1,1,0,0.92,1,2
1,1,1,17.0,1,0
0,2,0,30.0,1,0
1,1,1,30.0,0,0
1,1,1,24.0,0,0
1,1,1,18.0,2,2
0,2,1,26.0,1,1
0,3,0,28.0,0,0
0,2,0,43.0,1,1
1,3,1,26.0,0,0
1,2,1,24.0,1,0
0,2,0,54.0,0,0
1,1,1,31.0,0,2
1,1,1,40.0,1,1
0,3,0,22.0,0,0
0,3,0,27.0,0,0
1,2,1,30.0,0,0
1,2,1,22.0,1,1
1,1,1,36.0,0,0
0,3,0,61.0,0,0
1,2,1,36.0,0,0
1,3,1,31.0,1,1
1,1,1,16.0,0,1
0,1,0,45.5,0,0
0,1,0,38.0,0,1
0,3,0,16.0,2,0
0,1,0,29.0,1,0
1,1,1,41.0,0,0
1,3,0,45.0,0,0
0,1,0,45.0,0,0
1,2,0,2.0,1,1
1,1,1,24.0,3,2
0,2,0,28.0,0,0
0,2,0,25.0,0,0
0,2,0,36.0,0,0
1,2,1,24.0,0,0
1,2,1,40.0,0,0
1,3,0,3.0,1,1
0,3,0,42.0,0,0
0,3,0,23.0,0,0
0,3,0,15.0,1,1
0,3,0,25.0,1,0
0,3,0,28.0,0,0
1,1,1,22.0,0,1
0,2,1,38.0,0,0
0,3,0,40.0,1,4
0,2,0,29.0,1,0
0,3,1,45.0,0,1
0,3,0,35.0,0,0
0,3,0,30.0,0,0
1,1,1,60.0,1,0
1,1,1,24.0,0,0
1,1,0,25.0,1,0
0,3,0,18.0,1,0
0,3,0,19.0,0,0
0,1,0,22.0,0,0
0,3,1,3.0,3,1
1,3,1,22.0,0,0
0,1,0,27.0,0,2
0,3,0,20.0,0,0
0,3,0,19.0,0,0
1,1,1,42.0,0,0
1,3,1,1.0,0,2
0,3,0,32.0,0,0
1,1,1,35.0,1,0
0,2,0,18.0,0,0
0,3,0,1.0,5,2
1,2,1,36.0,0,0
1,2,1,17.0,0,0
1,1,0,36.0,1,2
1,3,0,21.0,0,0
0,3,0,28.0,2,0
1,1,1,23.0,1,0
1,3,1,24.0,0,2
0,3,0,22.0,0,0
0,3,1,31.0,0,0
0,2,0,46.0,0,0
0,2,0,23.0,0,0
1,2,1,28.0,0,0
1,3,0,39.0,0,0
0,3,0,26.0,0,0
0,3,1,21.0,1,0
0,3,0,28.0,1,0
0,3,1,20.0,0,0
0,2,0,34.0,1,0
0,3,0,51.0,0,0
1,2,0,3.0,1,1
0,3,0,21.0,0,0
1,1,1,33.0,1,0
1,3,0,44.0,0,0
1,2,1,34.0,1,1
1,2,1,18.0,0,2
0,2,0,30.0,0,0
0,3,1,10.0,0,2
0,3,0,21.0,0,0
0,3,0,29.0,0,0
0,3,1,28.0,1,1
0,3,0,18.0,1,1
1,2,1,28.0,1,0
1,2,1,19.0,0,0
1,3,0,32.0,0,0
1,1,0,28.0,0,0
1,2,1,42.0,1,0
0,3,0,17.0,0,0
0,1,0,50.0,1,0
1,1,1,14.0,1,2
0,3,1,21.0,2,2
1,2,1,24.0,2,3
0,1,0,64.0,1,4
0,2,0,31.0,0,0
1,2,1,45.0,1,1
0,3,0,20.0,0,0
0,3,0,25.0,1,0
1,2,1,28.0,0,0
1,1,0,4.0,0,2
1,2,1,13.0,0,1
1,1,0,34.0,0,0
1,3,1,5.0,2,1
1,1,0,52.0,0,0
0,2,0,36.0,1,2
0,1,0,30.0,0,0
1,1,0,49.0,1,0
1,3,0,29.0,0,0
0,1,0,65.0,0,0
1,2,1,50.0,0,0
1,1,0,48.0,0,0
0,3,0,34.0,0,0
0,1,0,47.0,0,0
0,2,0,48.0,0,0
0,3,0,38.0,0,0
0,1,0,56.0,0,0
1,3,1,0.75,2,1
0,3,0,38.0,0,0
1,2,1,33.0,1,2
1,2,1,23.0,0,0
0,3,1,22.0,0,0
0,2,0,34.0,1,0
0,3,0,29.0,1,0
0,3,0,22.0,0,0
1,3,1,2.0,0,1
0,3,0,9.0,5,2
0,3,0,50.0,0,0
1,3,1,63.0,0,0
1,1,0,25.0,1,0
1,1,1,35.0,1,0
0,1,0,58.0,0,0
0,3,0,30.0,0,0
1,3,0,9.0,1,1
0,3,0,21.0,0,0
0,1,0,55.0,0,0
0,1,0,71.0,0,0
0,3,0,21.0,0,0
1,1,1,54.0,1,0
0,1,1,25.0,1,2
0,3,0,24.0,0,0
0,3,0,17.0,0,0
0,3,1,21.0,0,0
0,3,1,37.0,0,0
1,1,1,16.0,0,0
0,1,0,18.0,1,0
1,2,1,33.0,0,2
0,3,0,28.0,0,0
1,3,0,26.0,0,0
1,3,0,29.0,0,0
1,1,0,36.0,0,0
1,1,1,54.0,1,0
0,3,0,24.0,0,0
0,1,0,47.0,0,0
1,2,1,34.0,0,0
1,2,1,36.0,1,0
0,3,0,32.0,0,0
1,1,1,30.0,0,0
0,3,0,22.0,0,0
1,1,1,44.0,0,1
0,3,0,40.5,0,0
1,2,1,50.0,0,0
0,3,0,39.0,0,0
0,2,0,23.0,2,1
1,2,1,2.0,1,1
0,3,0,17.0,1,1
0,3,1,30.0,0,0
1,2,1,7.0,0,2
0,1,0,45.0,0,0
1,1,1,30.0,0,0
1,1,1,22.0,0,2
1,1,1,36.0,0,2
0,3,1,9.0,4,2
0,3,1,11.0,4,2
1,2,0,32.0,1,0
0,1,0,50.0,1,0
0,1,0,64.0,0,0
1,2,1,19.0,1,0
0,3,0,33.0,1,1
1,2,0,8.0,1,1
1,1,0,17.0,0,2
0,2,0,27.0,0,0
1,3,0,22.0,0,0
1,3,1,22.0,0,0
0,1,0,62.0,0,0
1,1,1,48.0,1,0
1,1,1,39.0,1,1
1,3,1,36.0,1,0
0,3,0,40.0,0,0
0,2,0,28.0,0,0
0,3,0,24.0,2,0
0,3,0,19.0,0,0
0,3,1,29.0,0,4
1,3,0,32.0,0,0
1,2,0,62.0,0,0
1,1,1,53.0,2,0
1,1,0,36.0,0,0
0,3,0,16.0,0,0
0,3,0,19.0,0,0
1,2,1,34.0,0,0
1,1,1,39.0,1,0
1,3,0,32.0,0,0
1,2,1,25.0,1,1
1,1,1,39.0,1,1
0,2,0,54.0,0,0
0,1,0,36.0,0,0
1,1,1,18.0,0,2
0,2,0,47.0,0,0
1,1,0,60.0,1,1
0,3,0,22.0,0,0
0,3,0,35.0,0,0
1,1,1,52.0,1,0
0,3,0,47.0,0,0
0,2,0,37.0,1,0
0,3,0,36.0,1,1
0,3,0,49.0,0,0
1,1,0,49.0,1,0
1,2,1,24.0,2,1
0,3,0,44.0,0,0
1,1,0,35.0,0,0
0,3,0,36.0,1,0
0,3,0,30.0,0,0
1,1,0,27.0,0,0
1,2,1,22.0,1,2
1,1,1,40.0,0,0
0,3,1,39.0,1,5
0,3,0,35.0,0,0
1,2,1,24.0,1,2
0,3,0,34.0,1,1
0,3,1,26.0,1,0
1,2,1,4.0,2,1
0,2,0,26.0,0,0
0,3,0,27.0,1,0
1,1,0,42.0,1,0
1,3,0,20.0,1,1
0,3,0,21.0,0,0
0,3,0,21.0,0,0
0,1,0,61.0,0,0
0,2,0,57.0,0,0
1,1,1,21.0,0,0
0,3,0,26.0,0,0
1,1,0,80.0,0,0
0,3,0,51.0,0,0
1,1,0,32.0,0,0
0,3,1,9.0,3,2
1,2,1,28.0,0,0
0,3,0,32.0,0,0
0,2,0,31.0,1,1
0,3,1,41.0,0,5
0,3,0,20.0,0,0
1,1,1,24.0,0,0
0,3,1,2.0,3,2
1,3,1,0.75,2,1
1,1,0,48.0,1,0
0,3,0,19.0,0,0
1,1,0,56.0,0,0
1,3,1,23.0,0,0
1,2,1,18.0,0,1
0,3,0,21.0,0,0
0,3,1,18.0,0,0
0,2,0,24.0,2,0
0,3,1,32.0,1,1
0,2,0,23.0,0,0
0,1,0,58.0,0,2
1,1,0,50.0,2,0
0,3,0,40.0,0,0
0,1,0,47.0,0,0
0,3,0,36.0,0,0
1,3,0,20.0,1,0
0,2,0,32.0,2,0
0,2,0,25.0,0,0
0,3,0,43.0,0,0
1,2,1,40.0,1,1
0,1,0,31.0,1,0
0,2,0,70.0,0,0
1,2,0,31.0,0,0
0,3,0,18.0,0,0
0,3,0,24.5,0,0
1,3,1,18.0,0,0
0,3,1,43.0,1,6
1,1,0,36.0,0,1
1,1,0,27.0,0,0
0,3,0,20.0,0,0
0,3,0,14.0,5,2
0,2,0,60.0,1,1
0,2,0,25.0,1,2
0,3,0,14.0,4,1
0,3,0,19.0,0,0
0,3,0,18.0,0,0
1,1,1,15.0,0,1
1,1,0,31.0,1,0
1,3,1,4.0,0,1
0,3,0,25.0,0,0
0,1,0,60.0,0,0
0,2,0,52.0,0,0
0,3,0,44.0,0,0
0,1,0,49.0,1,1
0,3,0,42.0,0,0
1,1,1,18.0,1,0
1,1,0,35.0,0,0
0,3,1,18.0,0,1
0,3,0,25.0,0,0
0,3,0,26.0,1,0
0,2,0,39.0,0,0
1,2,1,45.0,0,0
1,1,0,42.0,0,0
1,1,1,22.0,0,0
1,1,1,24.0,0,0
1,1,0,48.0,1,0
0,3,0,29.0,0,0
0,2,0,52.0,0,0
0,3,0,19.0,0,0
1,1,1,38.0,0,0
1,2,1,27.0,0,0
0,3,0,33.0,0,0
1,2,1,6.0,0,1
0,3,0,17.0,1,0
0,2,0,34.0,0,0
0,2,0,50.0,0,0
1,1,0,27.0,1,0
0,3,0,20.0,0,0
1,2,1,30.0,3,0
0,2,0,25.0,1,0
0,3,1,25.0,1,0
1,1,1,29.0,0,0
0,3,0,11.0,0,0
0,2,0,23.0,0,0
0,2,0,23.0,0,0
0,3,0,28.5,0,0
0,3,1,48.0,1,3
1,1,0,35.0,0,0
0,1,0,36.0,1,0
1,1,1,21.0,2,2
0,3,0,24.0,1,0
1,3,0,31.0,0,0
0,1,0,70.0,1,1
0,3,0,16.0,1,1
1,2,1,30.0,0,0
0,1,0,19.0,1,0
0,3,0,31.0,0,0
1,2,1,4.0,1,1
1,3,0,6.0,0,1
0,3,0,33.0,0,0
0,3,0,23.0,0,0
1,2,1,48.0,1,2
1,2,0,0.67,1,1
0,3,0,28.0,0,0
0,2,0,18.0,0,0
0,3,0,34.0,0,0
1,1,1,33.0,0,0
0,3,0,41.0,0,0
1,3,0,20.0,0,0
1,1,1,36.0,1,2
0,3,0,16.0,0,0
1,1,1,51.0,1,0
0,3,1,30.5,0,0
0,3,0,32.0,0,0
0,3,0,24.0,0,0
0,3,0,48.0,0,0
0,2,1,57.0,0,0
1,2,1,54.0,1,3
0,3,0,18.0,0,0
1,3,1,5.0,0,0
1,1,1,43.0,0,1
1,3,1,13.0,0,0
1,1,1,17.0,1,0
0,1,0,29.0,0,0
0,3,0,25.0,0,0
0,3,0,25.0,0,0
1,3,1,18.0,0,0
0,3,0,8.0,4,1
1,3,0,1.0,1,2
0,1,0,46.0,0,0
0,2,0,16.0,0,0
0,3,0,25.0,0,0
0,2,0,39.0,0,0
1,1,1,49.0,0,0
1,3,1,31.0,0,0
0,3,0,30.0,0,0
0,3,1,30.0,1,1
0,2,0,34.0,0,0
1,2,1,31.0,1,1
1,1,0,11.0,1,2
1,3,0,0.42,0,1
1,3,0,27.0,0,0
0,3,0,31.0,0,0
0,1,0,39.0,0,0
0,3,1,18.0,0,0
0,2,0,39.0,0,0
1,1,1,33.0,1,0
0,3,0,26.0,0,0
0,3,0,39.0,0,0
0,2,0,35.0,0,0
0,3,1,6.0,4,2
0,3,0,30.5,0,0
0,3,1,23.0,0,0
0,2,0,31.0,1,1
0,3,0,43.0,0,0
0,3,0,10.0,3,2
1,1,1,52.0,1,1
1,3,0,27.0,0,0
0,1,0,38.0,0,0
1,3,1,27.0,0,1
0,3,0,2.0,4,1
1,2,0,1.0,0,2
1,1,1,62.0,0,0
1,3,1,15.0,1,0
1,2,0,0.83,1,1
0,3,0,23.0,0,0
0,3,0,18.0,0,0
1,1,1,39.0,1,1
0,3,0,21.0,0,0
1,3,0,32.0,0,0
0,3,0,20.0,0,0
0,2,0,16.0,0,0
1,1,1,30.0,0,0
0,3,0,34.5,0,0
0,3,0,17.0,0,0
0,3,0,42.0,0,0
0,3,0,35.0,0,0
0,2,0,28.0,0,1
0,3,0,4.0,4,2
0,3,0,74.0,0,0
0,3,1,9.0,1,1
1,1,1,16.0,0,1
0,2,1,44.0,1,0
1,3,1,18.0,0,1
1,1,1,45.0,1,1
1,1,0,51.0,0,0
1,3,1,24.0,0,3
0,3,0,41.0,2,0
0,2,0,21.0,1,0
1,1,1,48.0,0,0
0,2,0,24.0,0,0
1,2,1,42.0,0,0
1,2,1,27.0,1,0
0,1,0,31.0,0,0
1,3,0,4.0,1,1
0,3,0,26.0,0,0
1,1,1,47.0,1,1
0,1,0,33.0,0,0
0,3,0,47.0,0,0
1,2,1,28.0,1,0
1,3,1,15.0,0,0
0,3,0,20.0,0,0
0,3,0,19.0,0,0
1,1,1,56.0,0,1
1,2,1,25.0,0,1
0,3,0,33.0,0,0
0,3,1,22.0,0,0
0,2,0,28.0,0,0
0,3,0,25.0,0,0
0,3,1,39.0,0,5
0,2,0,27.0,0,0
1,1,1,19.0,0,0
1,1,0,26.0,0,0
0,3,0,32.0,0,0
1 Sobreviviente Clase Genero Edad HermEsp PadHij
2 0 3 0 22.0 1 0
3 1 1 1 38.0 1 0
4 1 3 1 26.0 0 0
5 1 1 1 35.0 1 0
6 0 3 0 35.0 0 0
7 0 1 0 54.0 0 0
8 0 3 0 2.0 3 1
9 1 3 1 27.0 0 2
10 1 2 1 14.0 1 0
11 1 3 1 4.0 1 1
12 1 1 1 58.0 0 0
13 0 3 0 20.0 0 0
14 0 3 0 39.0 1 5
15 0 3 1 14.0 0 0
16 1 2 1 55.0 0 0
17 0 3 0 2.0 4 1
18 0 3 1 31.0 1 0
19 0 2 0 35.0 0 0
20 1 2 0 34.0 0 0
21 1 3 1 15.0 0 0
22 1 1 0 28.0 0 0
23 0 3 1 8.0 3 1
24 1 3 1 38.0 1 5
25 0 1 0 19.0 3 2
26 0 1 0 40.0 0 0
27 0 2 0 66.0 0 0
28 0 1 0 28.0 1 0
29 0 1 0 42.0 1 0
30 0 3 0 21.0 0 0
31 0 3 1 18.0 2 0
32 1 3 1 14.0 1 0
33 0 3 1 40.0 1 0
34 0 2 1 27.0 1 0
35 1 2 1 3.0 1 2
36 1 3 1 19.0 0 0
37 0 3 1 18.0 1 0
38 0 3 0 7.0 4 1
39 0 3 0 21.0 0 0
40 1 1 1 49.0 1 0
41 1 2 1 29.0 1 0
42 0 1 0 65.0 0 1
43 1 2 1 21.0 0 0
44 0 3 0 28.5 0 0
45 1 2 1 5.0 1 2
46 0 3 0 11.0 5 2
47 0 3 0 22.0 0 0
48 1 1 1 38.0 0 0
49 0 1 0 45.0 1 0
50 0 3 0 4.0 3 2
51 1 2 1 29.0 0 0
52 0 3 0 19.0 0 0
53 1 3 1 17.0 4 2
54 0 3 0 26.0 2 0
55 0 2 0 32.0 0 0
56 0 3 1 16.0 5 2
57 0 2 0 21.0 0 0
58 0 3 0 26.0 1 0
59 1 3 0 32.0 0 0
60 0 3 0 25.0 0 0
61 1 2 0 0.83 0 2
62 1 3 1 30.0 0 0
63 0 3 0 22.0 0 0
64 1 3 0 29.0 0 0
65 0 1 0 28.0 0 0
66 1 2 1 17.0 0 0
67 1 3 1 33.0 3 0
68 0 3 0 16.0 1 3
69 1 1 1 23.0 3 2
70 0 3 0 24.0 0 0
71 0 3 0 29.0 0 0
72 0 3 0 20.0 0 0
73 0 1 0 46.0 1 0
74 0 3 0 26.0 1 2
75 0 3 0 59.0 0 0
76 0 1 0 71.0 0 0
77 1 1 0 23.0 0 1
78 1 2 1 34.0 0 1
79 0 2 0 34.0 1 0
80 0 3 1 28.0 0 0
81 0 1 0 21.0 0 1
82 0 3 0 33.0 0 0
83 0 3 0 37.0 2 0
84 0 3 0 28.0 0 0
85 1 3 1 21.0 0 0
86 0 3 0 38.0 0 0
87 0 1 0 47.0 0 0
88 0 3 1 14.5 1 0
89 0 3 0 22.0 0 0
90 0 3 1 20.0 1 0
91 0 3 1 17.0 0 0
92 0 3 0 21.0 0 0
93 0 3 0 70.5 0 0
94 0 2 0 29.0 1 0
95 0 1 0 24.0 0 1
96 0 3 1 2.0 4 2
97 0 2 0 21.0 2 0
98 0 2 0 32.5 1 0
99 1 2 1 32.5 0 0
100 0 1 0 54.0 0 1
101 1 3 0 12.0 1 0
102 1 3 0 24.0 0 0
103 0 3 0 45.0 0 0
104 0 3 0 33.0 0 0
105 0 3 0 20.0 0 0
106 0 3 1 47.0 1 0
107 1 2 1 29.0 1 0
108 0 2 0 25.0 0 0
109 0 2 0 23.0 0 0
110 1 1 1 19.0 0 2
111 0 1 0 37.0 1 0
112 0 3 0 16.0 0 0
113 0 1 0 24.0 0 0
114 1 3 1 22.0 0 0
115 1 3 1 24.0 1 0
116 0 3 0 19.0 0 0
117 0 2 0 18.0 0 0
118 0 2 0 19.0 1 1
119 1 3 0 27.0 0 0
120 0 3 1 9.0 2 2
121 0 2 0 36.5 0 2
122 0 2 0 42.0 0 0
123 0 2 0 51.0 0 0
124 1 1 1 22.0 1 0
125 0 3 0 55.5 0 0
126 0 3 0 40.5 0 2
127 0 1 0 51.0 0 1
128 1 3 1 16.0 0 0
129 0 3 0 30.0 0 0
130 0 3 0 44.0 0 1
131 1 2 1 40.0 0 0
132 0 3 0 26.0 0 0
133 0 3 0 17.0 0 0
134 0 3 0 1.0 4 1
135 1 3 0 9.0 0 2
136 0 3 1 45.0 1 4
137 0 3 0 28.0 0 0
138 0 1 0 61.0 0 0
139 0 3 0 4.0 4 1
140 1 3 1 1.0 1 1
141 0 3 0 21.0 0 0
142 0 1 0 56.0 0 0
143 0 3 0 18.0 1 1
144 0 1 1 50.0 0 0
145 0 2 0 30.0 0 0
146 0 3 0 36.0 0 0
147 0 3 0 9.0 4 2
148 1 2 0 1.0 2 1
149 1 3 1 4.0 0 2
150 1 1 0 45.0 0 0
151 0 3 0 40.0 1 1
152 0 3 0 36.0 0 0
153 1 2 1 32.0 0 0
154 0 2 0 19.0 0 0
155 1 3 1 19.0 1 0
156 1 2 0 3.0 1 1
157 1 1 1 44.0 0 0
158 1 1 1 58.0 0 0
159 0 3 0 42.0 0 1
160 0 2 1 24.0 0 0
161 0 3 0 28.0 0 0
162 0 3 0 34.0 0 0
163 0 3 0 45.5 0 0
164 1 3 0 18.0 0 0
165 0 3 1 2.0 0 1
166 0 3 0 32.0 1 0
167 1 3 0 26.0 0 0
168 1 3 1 16.0 0 0
169 1 1 0 40.0 0 0
170 0 3 0 24.0 0 0
171 1 2 1 35.0 0 0
172 0 3 0 22.0 0 0
173 0 2 0 30.0 0 0
174 1 1 1 31.0 1 0
175 1 3 1 27.0 0 0
176 0 2 0 42.0 1 0
177 1 1 1 32.0 0 0
178 0 2 0 30.0 0 0
179 1 3 0 16.0 0 0
180 0 2 0 27.0 0 0
181 0 3 0 51.0 0 0
182 1 1 0 38.0 1 0
183 0 3 0 22.0 0 0
184 1 2 0 19.0 0 0
185 0 3 0 20.5 0 0
186 0 2 0 18.0 0 0
187 1 1 1 35.0 1 0
188 0 3 0 29.0 0 0
189 0 2 0 59.0 0 0
190 1 3 1 5.0 4 2
191 0 2 0 24.0 0 0
192 0 2 0 44.0 1 0
193 1 2 1 8.0 0 2
194 0 2 0 19.0 0 0
195 0 2 0 33.0 0 0
196 0 2 0 29.0 0 0
197 0 3 0 22.0 0 0
198 0 3 0 30.0 0 0
199 0 1 0 44.0 2 0
200 0 3 1 25.0 0 0
201 1 2 1 24.0 0 2
202 1 1 0 37.0 1 1
203 0 2 0 54.0 1 0
204 0 3 1 29.0 1 1
205 0 1 0 62.0 0 0
206 0 3 0 30.0 1 0
207 0 3 1 41.0 0 2
208 1 3 1 29.0 0 2
209 1 1 1 30.0 0 0
210 1 1 1 35.0 0 0
211 1 2 1 50.0 0 1
212 1 3 0 3.0 4 2
213 0 1 0 52.0 1 1
214 0 1 0 40.0 0 0
215 0 2 0 36.0 0 0
216 0 3 0 16.0 4 1
217 1 3 0 25.0 1 0
218 1 1 1 58.0 0 1
219 1 1 1 35.0 0 0
220 1 3 0 25.0 0 0
221 1 2 1 41.0 0 1
222 0 1 0 37.0 0 1
223 1 1 1 63.0 1 0
224 0 3 1 45.0 0 0
225 0 3 0 7.0 4 1
226 1 3 1 35.0 1 1
227 0 3 0 65.0 0 0
228 0 3 0 28.0 0 0
229 0 3 0 16.0 0 0
230 1 3 0 19.0 0 0
231 0 3 0 33.0 0 0
232 1 3 0 30.0 0 0
233 0 3 0 22.0 0 0
234 1 2 0 42.0 0 0
235 1 3 1 22.0 0 0
236 1 1 1 26.0 0 0
237 1 1 1 19.0 1 0
238 0 2 0 36.0 0 0
239 0 3 1 24.0 0 0
240 0 3 0 24.0 0 0
241 0 3 0 23.5 0 0
242 0 1 1 2.0 1 2
243 1 1 1 50.0 0 1
244 0 3 0 19.0 0 0
245 1 1 0 0.92 1 2
246 1 1 1 17.0 1 0
247 0 2 0 30.0 1 0
248 1 1 1 30.0 0 0
249 1 1 1 24.0 0 0
250 1 1 1 18.0 2 2
251 0 2 1 26.0 1 1
252 0 3 0 28.0 0 0
253 0 2 0 43.0 1 1
254 1 3 1 26.0 0 0
255 1 2 1 24.0 1 0
256 0 2 0 54.0 0 0
257 1 1 1 31.0 0 2
258 1 1 1 40.0 1 1
259 0 3 0 22.0 0 0
260 0 3 0 27.0 0 0
261 1 2 1 30.0 0 0
262 1 2 1 22.0 1 1
263 1 1 1 36.0 0 0
264 0 3 0 61.0 0 0
265 1 2 1 36.0 0 0
266 1 3 1 31.0 1 1
267 1 1 1 16.0 0 1
268 0 1 0 45.5 0 0
269 0 1 0 38.0 0 1
270 0 3 0 16.0 2 0
271 0 1 0 29.0 1 0
272 1 1 1 41.0 0 0
273 1 3 0 45.0 0 0
274 0 1 0 45.0 0 0
275 1 2 0 2.0 1 1
276 1 1 1 24.0 3 2
277 0 2 0 28.0 0 0
278 0 2 0 25.0 0 0
279 0 2 0 36.0 0 0
280 1 2 1 24.0 0 0
281 1 2 1 40.0 0 0
282 1 3 0 3.0 1 1
283 0 3 0 42.0 0 0
284 0 3 0 23.0 0 0
285 0 3 0 15.0 1 1
286 0 3 0 25.0 1 0
287 0 3 0 28.0 0 0
288 1 1 1 22.0 0 1
289 0 2 1 38.0 0 0
290 0 3 0 40.0 1 4
291 0 2 0 29.0 1 0
292 0 3 1 45.0 0 1
293 0 3 0 35.0 0 0
294 0 3 0 30.0 0 0
295 1 1 1 60.0 1 0
296 1 1 1 24.0 0 0
297 1 1 0 25.0 1 0
298 0 3 0 18.0 1 0
299 0 3 0 19.0 0 0
300 0 1 0 22.0 0 0
301 0 3 1 3.0 3 1
302 1 3 1 22.0 0 0
303 0 1 0 27.0 0 2
304 0 3 0 20.0 0 0
305 0 3 0 19.0 0 0
306 1 1 1 42.0 0 0
307 1 3 1 1.0 0 2
308 0 3 0 32.0 0 0
309 1 1 1 35.0 1 0
310 0 2 0 18.0 0 0
311 0 3 0 1.0 5 2
312 1 2 1 36.0 0 0
313 1 2 1 17.0 0 0
314 1 1 0 36.0 1 2
315 1 3 0 21.0 0 0
316 0 3 0 28.0 2 0
317 1 1 1 23.0 1 0
318 1 3 1 24.0 0 2
319 0 3 0 22.0 0 0
320 0 3 1 31.0 0 0
321 0 2 0 46.0 0 0
322 0 2 0 23.0 0 0
323 1 2 1 28.0 0 0
324 1 3 0 39.0 0 0
325 0 3 0 26.0 0 0
326 0 3 1 21.0 1 0
327 0 3 0 28.0 1 0
328 0 3 1 20.0 0 0
329 0 2 0 34.0 1 0
330 0 3 0 51.0 0 0
331 1 2 0 3.0 1 1
332 0 3 0 21.0 0 0
333 1 1 1 33.0 1 0
334 1 3 0 44.0 0 0
335 1 2 1 34.0 1 1
336 1 2 1 18.0 0 2
337 0 2 0 30.0 0 0
338 0 3 1 10.0 0 2
339 0 3 0 21.0 0 0
340 0 3 0 29.0 0 0
341 0 3 1 28.0 1 1
342 0 3 0 18.0 1 1
343 1 2 1 28.0 1 0
344 1 2 1 19.0 0 0
345 1 3 0 32.0 0 0
346 1 1 0 28.0 0 0
347 1 2 1 42.0 1 0
348 0 3 0 17.0 0 0
349 0 1 0 50.0 1 0
350 1 1 1 14.0 1 2
351 0 3 1 21.0 2 2
352 1 2 1 24.0 2 3
353 0 1 0 64.0 1 4
354 0 2 0 31.0 0 0
355 1 2 1 45.0 1 1
356 0 3 0 20.0 0 0
357 0 3 0 25.0 1 0
358 1 2 1 28.0 0 0
359 1 1 0 4.0 0 2
360 1 2 1 13.0 0 1
361 1 1 0 34.0 0 0
362 1 3 1 5.0 2 1
363 1 1 0 52.0 0 0
364 0 2 0 36.0 1 2
365 0 1 0 30.0 0 0
366 1 1 0 49.0 1 0
367 1 3 0 29.0 0 0
368 0 1 0 65.0 0 0
369 1 2 1 50.0 0 0
370 1 1 0 48.0 0 0
371 0 3 0 34.0 0 0
372 0 1 0 47.0 0 0
373 0 2 0 48.0 0 0
374 0 3 0 38.0 0 0
375 0 1 0 56.0 0 0
376 1 3 1 0.75 2 1
377 0 3 0 38.0 0 0
378 1 2 1 33.0 1 2
379 1 2 1 23.0 0 0
380 0 3 1 22.0 0 0
381 0 2 0 34.0 1 0
382 0 3 0 29.0 1 0
383 0 3 0 22.0 0 0
384 1 3 1 2.0 0 1
385 0 3 0 9.0 5 2
386 0 3 0 50.0 0 0
387 1 3 1 63.0 0 0
388 1 1 0 25.0 1 0
389 1 1 1 35.0 1 0
390 0 1 0 58.0 0 0
391 0 3 0 30.0 0 0
392 1 3 0 9.0 1 1
393 0 3 0 21.0 0 0
394 0 1 0 55.0 0 0
395 0 1 0 71.0 0 0
396 0 3 0 21.0 0 0
397 1 1 1 54.0 1 0
398 0 1 1 25.0 1 2
399 0 3 0 24.0 0 0
400 0 3 0 17.0 0 0
401 0 3 1 21.0 0 0
402 0 3 1 37.0 0 0
403 1 1 1 16.0 0 0
404 0 1 0 18.0 1 0
405 1 2 1 33.0 0 2
406 0 3 0 28.0 0 0
407 1 3 0 26.0 0 0
408 1 3 0 29.0 0 0
409 1 1 0 36.0 0 0
410 1 1 1 54.0 1 0
411 0 3 0 24.0 0 0
412 0 1 0 47.0 0 0
413 1 2 1 34.0 0 0
414 1 2 1 36.0 1 0
415 0 3 0 32.0 0 0
416 1 1 1 30.0 0 0
417 0 3 0 22.0 0 0
418 1 1 1 44.0 0 1
419 0 3 0 40.5 0 0
420 1 2 1 50.0 0 0
421 0 3 0 39.0 0 0
422 0 2 0 23.0 2 1
423 1 2 1 2.0 1 1
424 0 3 0 17.0 1 1
425 0 3 1 30.0 0 0
426 1 2 1 7.0 0 2
427 0 1 0 45.0 0 0
428 1 1 1 30.0 0 0
429 1 1 1 22.0 0 2
430 1 1 1 36.0 0 2
431 0 3 1 9.0 4 2
432 0 3 1 11.0 4 2
433 1 2 0 32.0 1 0
434 0 1 0 50.0 1 0
435 0 1 0 64.0 0 0
436 1 2 1 19.0 1 0
437 0 3 0 33.0 1 1
438 1 2 0 8.0 1 1
439 1 1 0 17.0 0 2
440 0 2 0 27.0 0 0
441 1 3 0 22.0 0 0
442 1 3 1 22.0 0 0
443 0 1 0 62.0 0 0
444 1 1 1 48.0 1 0
445 1 1 1 39.0 1 1
446 1 3 1 36.0 1 0
447 0 3 0 40.0 0 0
448 0 2 0 28.0 0 0
449 0 3 0 24.0 2 0
450 0 3 0 19.0 0 0
451 0 3 1 29.0 0 4
452 1 3 0 32.0 0 0
453 1 2 0 62.0 0 0
454 1 1 1 53.0 2 0
455 1 1 0 36.0 0 0
456 0 3 0 16.0 0 0
457 0 3 0 19.0 0 0
458 1 2 1 34.0 0 0
459 1 1 1 39.0 1 0
460 1 3 0 32.0 0 0
461 1 2 1 25.0 1 1
462 1 1 1 39.0 1 1
463 0 2 0 54.0 0 0
464 0 1 0 36.0 0 0
465 1 1 1 18.0 0 2
466 0 2 0 47.0 0 0
467 1 1 0 60.0 1 1
468 0 3 0 22.0 0 0
469 0 3 0 35.0 0 0
470 1 1 1 52.0 1 0
471 0 3 0 47.0 0 0
472 0 2 0 37.0 1 0
473 0 3 0 36.0 1 1
474 0 3 0 49.0 0 0
475 1 1 0 49.0 1 0
476 1 2 1 24.0 2 1
477 0 3 0 44.0 0 0
478 1 1 0 35.0 0 0
479 0 3 0 36.0 1 0
480 0 3 0 30.0 0 0
481 1 1 0 27.0 0 0
482 1 2 1 22.0 1 2
483 1 1 1 40.0 0 0
484 0 3 1 39.0 1 5
485 0 3 0 35.0 0 0
486 1 2 1 24.0 1 2
487 0 3 0 34.0 1 1
488 0 3 1 26.0 1 0
489 1 2 1 4.0 2 1
490 0 2 0 26.0 0 0
491 0 3 0 27.0 1 0
492 1 1 0 42.0 1 0
493 1 3 0 20.0 1 1
494 0 3 0 21.0 0 0
495 0 3 0 21.0 0 0
496 0 1 0 61.0 0 0
497 0 2 0 57.0 0 0
498 1 1 1 21.0 0 0
499 0 3 0 26.0 0 0
500 1 1 0 80.0 0 0
501 0 3 0 51.0 0 0
502 1 1 0 32.0 0 0
503 0 3 1 9.0 3 2
504 1 2 1 28.0 0 0
505 0 3 0 32.0 0 0
506 0 2 0 31.0 1 1
507 0 3 1 41.0 0 5
508 0 3 0 20.0 0 0
509 1 1 1 24.0 0 0
510 0 3 1 2.0 3 2
511 1 3 1 0.75 2 1
512 1 1 0 48.0 1 0
513 0 3 0 19.0 0 0
514 1 1 0 56.0 0 0
515 1 3 1 23.0 0 0
516 1 2 1 18.0 0 1
517 0 3 0 21.0 0 0
518 0 3 1 18.0 0 0
519 0 2 0 24.0 2 0
520 0 3 1 32.0 1 1
521 0 2 0 23.0 0 0
522 0 1 0 58.0 0 2
523 1 1 0 50.0 2 0
524 0 3 0 40.0 0 0
525 0 1 0 47.0 0 0
526 0 3 0 36.0 0 0
527 1 3 0 20.0 1 0
528 0 2 0 32.0 2 0
529 0 2 0 25.0 0 0
530 0 3 0 43.0 0 0
531 1 2 1 40.0 1 1
532 0 1 0 31.0 1 0
533 0 2 0 70.0 0 0
534 1 2 0 31.0 0 0
535 0 3 0 18.0 0 0
536 0 3 0 24.5 0 0
537 1 3 1 18.0 0 0
538 0 3 1 43.0 1 6
539 1 1 0 36.0 0 1
540 1 1 0 27.0 0 0
541 0 3 0 20.0 0 0
542 0 3 0 14.0 5 2
543 0 2 0 60.0 1 1
544 0 2 0 25.0 1 2
545 0 3 0 14.0 4 1
546 0 3 0 19.0 0 0
547 0 3 0 18.0 0 0
548 1 1 1 15.0 0 1
549 1 1 0 31.0 1 0
550 1 3 1 4.0 0 1
551 0 3 0 25.0 0 0
552 0 1 0 60.0 0 0
553 0 2 0 52.0 0 0
554 0 3 0 44.0 0 0
555 0 1 0 49.0 1 1
556 0 3 0 42.0 0 0
557 1 1 1 18.0 1 0
558 1 1 0 35.0 0 0
559 0 3 1 18.0 0 1
560 0 3 0 25.0 0 0
561 0 3 0 26.0 1 0
562 0 2 0 39.0 0 0
563 1 2 1 45.0 0 0
564 1 1 0 42.0 0 0
565 1 1 1 22.0 0 0
566 1 1 1 24.0 0 0
567 1 1 0 48.0 1 0
568 0 3 0 29.0 0 0
569 0 2 0 52.0 0 0
570 0 3 0 19.0 0 0
571 1 1 1 38.0 0 0
572 1 2 1 27.0 0 0
573 0 3 0 33.0 0 0
574 1 2 1 6.0 0 1
575 0 3 0 17.0 1 0
576 0 2 0 34.0 0 0
577 0 2 0 50.0 0 0
578 1 1 0 27.0 1 0
579 0 3 0 20.0 0 0
580 1 2 1 30.0 3 0
581 0 2 0 25.0 1 0
582 0 3 1 25.0 1 0
583 1 1 1 29.0 0 0
584 0 3 0 11.0 0 0
585 0 2 0 23.0 0 0
586 0 2 0 23.0 0 0
587 0 3 0 28.5 0 0
588 0 3 1 48.0 1 3
589 1 1 0 35.0 0 0
590 0 1 0 36.0 1 0
591 1 1 1 21.0 2 2
592 0 3 0 24.0 1 0
593 1 3 0 31.0 0 0
594 0 1 0 70.0 1 1
595 0 3 0 16.0 1 1
596 1 2 1 30.0 0 0
597 0 1 0 19.0 1 0
598 0 3 0 31.0 0 0
599 1 2 1 4.0 1 1
600 1 3 0 6.0 0 1
601 0 3 0 33.0 0 0
602 0 3 0 23.0 0 0
603 1 2 1 48.0 1 2
604 1 2 0 0.67 1 1
605 0 3 0 28.0 0 0
606 0 2 0 18.0 0 0
607 0 3 0 34.0 0 0
608 1 1 1 33.0 0 0
609 0 3 0 41.0 0 0
610 1 3 0 20.0 0 0
611 1 1 1 36.0 1 2
612 0 3 0 16.0 0 0
613 1 1 1 51.0 1 0
614 0 3 1 30.5 0 0
615 0 3 0 32.0 0 0
616 0 3 0 24.0 0 0
617 0 3 0 48.0 0 0
618 0 2 1 57.0 0 0
619 1 2 1 54.0 1 3
620 0 3 0 18.0 0 0
621 1 3 1 5.0 0 0
622 1 1 1 43.0 0 1
623 1 3 1 13.0 0 0
624 1 1 1 17.0 1 0
625 0 1 0 29.0 0 0
626 0 3 0 25.0 0 0
627 0 3 0 25.0 0 0
628 1 3 1 18.0 0 0
629 0 3 0 8.0 4 1
630 1 3 0 1.0 1 2
631 0 1 0 46.0 0 0
632 0 2 0 16.0 0 0
633 0 3 0 25.0 0 0
634 0 2 0 39.0 0 0
635 1 1 1 49.0 0 0
636 1 3 1 31.0 0 0
637 0 3 0 30.0 0 0
638 0 3 1 30.0 1 1
639 0 2 0 34.0 0 0
640 1 2 1 31.0 1 1
641 1 1 0 11.0 1 2
642 1 3 0 0.42 0 1
643 1 3 0 27.0 0 0
644 0 3 0 31.0 0 0
645 0 1 0 39.0 0 0
646 0 3 1 18.0 0 0
647 0 2 0 39.0 0 0
648 1 1 1 33.0 1 0
649 0 3 0 26.0 0 0
650 0 3 0 39.0 0 0
651 0 2 0 35.0 0 0
652 0 3 1 6.0 4 2
653 0 3 0 30.5 0 0
654 0 3 1 23.0 0 0
655 0 2 0 31.0 1 1
656 0 3 0 43.0 0 0
657 0 3 0 10.0 3 2
658 1 1 1 52.0 1 1
659 1 3 0 27.0 0 0
660 0 1 0 38.0 0 0
661 1 3 1 27.0 0 1
662 0 3 0 2.0 4 1
663 1 2 0 1.0 0 2
664 1 1 1 62.0 0 0
665 1 3 1 15.0 1 0
666 1 2 0 0.83 1 1
667 0 3 0 23.0 0 0
668 0 3 0 18.0 0 0
669 1 1 1 39.0 1 1
670 0 3 0 21.0 0 0
671 1 3 0 32.0 0 0
672 0 3 0 20.0 0 0
673 0 2 0 16.0 0 0
674 1 1 1 30.0 0 0
675 0 3 0 34.5 0 0
676 0 3 0 17.0 0 0
677 0 3 0 42.0 0 0
678 0 3 0 35.0 0 0
679 0 2 0 28.0 0 1
680 0 3 0 4.0 4 2
681 0 3 0 74.0 0 0
682 0 3 1 9.0 1 1
683 1 1 1 16.0 0 1
684 0 2 1 44.0 1 0
685 1 3 1 18.0 0 1
686 1 1 1 45.0 1 1
687 1 1 0 51.0 0 0
688 1 3 1 24.0 0 3
689 0 3 0 41.0 2 0
690 0 2 0 21.0 1 0
691 1 1 1 48.0 0 0
692 0 2 0 24.0 0 0
693 1 2 1 42.0 0 0
694 1 2 1 27.0 1 0
695 0 1 0 31.0 0 0
696 1 3 0 4.0 1 1
697 0 3 0 26.0 0 0
698 1 1 1 47.0 1 1
699 0 1 0 33.0 0 0
700 0 3 0 47.0 0 0
701 1 2 1 28.0 1 0
702 1 3 1 15.0 0 0
703 0 3 0 20.0 0 0
704 0 3 0 19.0 0 0
705 1 1 1 56.0 0 1
706 1 2 1 25.0 0 1
707 0 3 0 33.0 0 0
708 0 3 1 22.0 0 0
709 0 2 0 28.0 0 0
710 0 3 0 25.0 0 0
711 0 3 1 39.0 0 5
712 0 2 0 27.0 0 0
713 1 1 1 19.0 0 0
714 1 1 0 26.0 0 0
715 0 3 0 32.0 0 0

View File

@@ -0,0 +1,31 @@
# Dia 15 - Programa un modelo de machine learning
## Índice
- [Dia 15 - Programa un modelo de machine learning](#dia-15---programa-un-modelo-de-machine-learning)
- [Índice](#índice)
- [5.1. - Bibliotecas](#51---bibliotecas)
- [5.2. - Definiciones](#52---definiciones)
- [5.3. - Cuadernos de trabajo en Colab de google drive](#53---cuadernos-de-trabajo-en-colab-de-google-drive)
- [Ficheros y documentación](#ficheros-y-documentación)
## 5.1. - Bibliotecas
## 5.2. - Definiciones
## 5.3. - Cuadernos de trabajo en Colab de google drive
## Ficheros y documentación
- [cuaderno_machine_learning.py](cuaderno_machine_learning.py)
- [cuaderno_matplotlib.py](cuaderno_matplotlib.py)
- [cuaderno_numpy.py](cuaderno_numpy.py)
- [cuaderno_panda.py](cuaderno_panda.py)
- [DataSet_Titanic.csv](DataSet_Titanic.csv)
- [ventas-autos.csv](ventas-autos.csv)
[Documentación del día](../doc_curso/15_machine_learning/)
---
Enlaces a todos los días: [dia 1 - creador de nombres](../dia_01/README.md) / [dia 2 - calculador de comisiones](../dia_02/README.md) / [dia 3 - analizador de texto](../dia_03/README.md) / [dia 4 - juego "adivina el número"](../dia_04/README.md) / [dia 5 - juego "El ahorcado"](../dia_05/README.md) / [dia 6 - recetario](../dia_06/README.md) / [dia 7 - cuenta bancaria](../dia_07/README.md) / [dia 8 - consola de turnos](../dia_08/README.md) / [dia 9 - buscador de números de serie](../dia_09/README.md) / [dia 10 - juego "Invasión espacial"](../dia_10/README.md) / [dia 11 - web scraping](../dia_11/README.md) / [dia 12 - gestor de restaurantes](../dia_12/README.md) / [dia 13 - asistente de voz](../dia_13/README.md) / [dia 14 - controlador de asistencia](../dia_14/README.md) / [dia 15 - machine learning](../dia_15/README.md) / [dia 16 - aplicación web de tareas pendientes](../dia_16/README.md)

View File

@@ -0,0 +1,165 @@
# -*- coding: utf-8 -*-
"""Python TOTAL - Machine Learning.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1ivjUYHN6Bl-Ey9qV94dTfUo9pblYHVsp
# Primer Modelo de ML: Árboles de decisión
En este notebook comenzamos a trabajar en los problemas de Clasificación, una de las tareas más importantes dentro de Machine Learning (dentro, a su vez, de lo que llamamos Aprendizaje Supervisado). Clasificación en Machine Learning consiste en aprender etiquetas discretas "y" a partir de un conjunto de features "X" (que pueden ser uno, dos, o muchos más) tomando como muestra un conjunto de instancias.
En este notebook trabajaremos con uno de los modelos fundamentales de Machine Learning: Árboles de Decisión. Para ello, usaremos el dataset de Titanic y la librería Scikit-Learn. Debido a la implementación orientada a objetos de Scikit-Learn, **todos los modelos se entrenan y se usan de la misma forma**.
Recuerda que todas las librerías fueron desarrolladas por personas, que en búsqueda de resolver una necesidad de cómputo, escribieron el código que hoy podemos reutilizar para poder poner directamente manos a la obra en lugar de tener que desarrollarlo y optimizarlo una y otra vez. Sin embargo, la idea que quiero transmitirte es que puedes hacer el intento de escribir tú mismo las funciones y clases que importaremos de las librerías. Si bien no es lo habitual y desde luego consumirá mucho más tiempo, este trabajo te permitirá comprender nuevos detalles acerca de lo que estás haciendo.
El dataset de Titanic es famoso entre los estudiantes de Data Science. El mismo ha surgido de una competencia en el sitio Kaggle: [Machine Learning from Disaster](https://www.kaggle.com/c/titanic). Veremos una implementación muy sencilla acerca de un posible abordaje para resolverlo, partiendo también de una versión simplificada y filtrada del dataset original de dicha competencia.
Nuestro Dataset está compuesto por una serie de columnas, que tienen los siguientes significados:
1. **Sobreviviente**: `0` = No; `1` = Si
2. **Clase**: `1` = Primera Clase; `2` = Segunda Clase; `3` = Tercera Clase
3. **Género**: `0` = Hombre; `1` = Mujer
4. **Edad**: edad en años
5. **HermEsp**: cantidad de hermanos o esposos a bordo del Titanic, para el pasajero en cuestión
6. **PadHij**: cantidad de padres o hijos a bordo del Titanic, para el pasajero en cuestión
**Ejercicio:** Carga el dataset de Titanic y tomate un rato para estudiar sus características.
"""
# importar bibliotecas
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Especificas de machine learning
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay
from sklearn import tree
# Vincular disco
from google.colab import drive
drive.mount('/content/drive')
# leer archivo csv "/content/drive/MyDrive/Colab Notebooks/DataSet_Titanic.csv"
df = pd.read_csv("/content/drive/MyDrive/Colab Notebooks/DataSet_Titanic.csv")
# visualizar las primeras 5 filas
df.head()
"""Árbol de decisión: como primera aproximación, diremos que es un objeto que, dadas varias instancias con un determinado grupo de features `X` y unas determinadas etiquetas objetivo `y`, el árbol de desición aprende automáticamente reglas (de mayor a menor importancia) sobre cada feature de manera de poder decidir qué etiqueta le corresponde a cada instancia.
Vamos a separar el dataset de Titanic en una variable `X` los atributos que usarás para predecir, y en una variable `y` la etiqueta que quieres predecir. En este caso, si sobrevivió o no.
"""
# guardar en variable X los atributos predictores (todas las etiquetas excepto "Sobreviviente")
# Si axis es un 1 es una columna y si es un 0 es una fila
X = df.drop('Sobreviviente', axis=1)
# guardar en y la etiqueta a predecir ("Sobreviviente")
y = df.Sobreviviente
# visualizar x
X.head()
# visualizar y
y.head()
"""Si queremos entrenar un árbol de decisión para clasificar nuestras instancias, primero debemos crear un objeto correspondiente al modelo. Este objeto será de de la clase DecisionTreeClassifier, la cual importamos desde la librería Scikit-Learn. """
# Creamos un objeto arbol con el clasificador del árbol de decisiones.
# Definimos el máximo de profundidad y el estado de aletoriedad
arbol = DecisionTreeClassifier(max_depth=4, random_state=42)
"""Hasta ahora, lo único que hicimos fue crear el objeto, nada más.
Una vez que nuestro modelo fue creado, precisamos entrenarlo sobre nuestros datos. Esto lo logramos con el método **fit(...)** que poseen ***todas*** las clases correspondientes a modelos de Scikit-Learn.
"""
# entrenamos a la máquina con fit()
arbol.fit(X, y)
"""¿Qué ocurrió?
El modelo ya está entrenado. Esto significa que contamos con una herramienta que, dadas ciertas características de una instancia, nos devuelve qué etiqueta `y` que el modelo cree que le corresponde. Esto lo podemos hacer utilizando el método **predict(...)**, que también poseen ***todas*** las clases correspondientes a modelos de **Scikit-Learn**.
Nos podríamos preguntar luego: ¿cuál es el porcentaje de instancias bien clasificadas por el modelo? Para responder esto usaremos nuevamente el método **predict** sobre todo el dataset `X`. Luego con la función `accuracy_score` podemos calcular el porcentaje de aciertos que obtenemos al comparar nuestra predicción `y_pred` contra la clase original `y`. Recomendamos mirar la documentación de esta función, por ahora simplemente diremos que es una de las tantas métricas que utilizamos para evaluar nuestros modelos, y lo que hace es devolvernos un porcentaje de aciertos.
"""
# Predecimos sobre nuestro set
pred_y = arbol.predict(X)
# Comparamos con las etiquetas reales viendo la precisión
print('Precisión: ', accuracy_score(pred_y, y))
# Da un porcentaje del 80% ^_^
"""Esto quiere decir que el clasificador asigna la etiqueta correcta en el 80,25% de los casos.
Otra forma de ver los resultados de nuestro clasificador es la matriz de confusión. La matriz de confusión es una tabla de doble entrada, donde un eje corresponde a la etiqueta real (y) y otro a la etiqueta predicha(pred_y). En la diagonal encontramos los aciertos, mientras que por fuera de la diagonal aquellas instancias mal clasificadas. Nuevamente, recomendamos ver la documentación.
"""
# creamos una matriz de confusión y la metenemos en una variable
confusion_matrix(y,pred_y)
"""Una forma más interesante de ver esta información es con la función plot_confusion_matrix:"""
from matplotlib.cm import cmaps_listed
# creamos un gráfico para la matriz de confusión
# En el curso se explica con la función plot_confusion_matrix que está DEPRECATED, se ha sustituido por otra
ConfusionMatrixDisplay.from_estimator(arbol, X, y, cmap=plt.cm.Blues, values_format='.0f')
plt.show()
# disp = ConfusionMatrixDisplay(confusion_matrix=cm)
# disp.plot()
"""O podemos obtener una versión normalizada (con valores entre 0 y 1, o dicho de otra manera, el porcentaje):"""
# creamos un gráfico para la matriz de confusión normalizada
ConfusionMatrixDisplay.from_estimator(arbol, X, y, cmap=plt.cm.Blues, values_format='.2f', normalize='true')
plt.show()
"""Podemos mostrar gráficamente el árbol de decisión que fue generado automáticamente al entrenar el modelo, para obtener un mayor conocimiento de nuestros datos y del funcionamiento del modelo. Las variables más importantes (aquellas que fueron de mayor utilidad para clasificar las diferentes instancias del dataset), aparecen en la parte superior, y en función de los valores asumidos, cada instancia será clasificada en diferentes ramas, tras lo cual el árbol se hace nuevamente una pregunta basada en los valores que asume esta instancia de una característica determinada."""
# mostramos un árbol gráficamente
plt.figure(figsize=(10,8))
tree.plot_tree(arbol, filled=True, feature_names=X.columns)
plt.show
"""La rama de la izquierda representa el resultado verdadero (True), mientras que la rama derecha, representa el resultado falso (False). Te doy otra pista para interpretar el modelo: el color de cada rectángulo representa la etiqueta predicha por el modelo (en nuestro caso, la etiqueta azul representa el "sobrevive", o un valor de y=1, y la naranja, "no sobrevive", o un valor de y=0).
A su vez, la tonalidad representa la seguridad que tiene el modelo en su predicción. A partir del entrenamiento, el modelo aprendió algunas reglas para clasificar las instancias de acuerdo a los valores asumidos por ciertas características. Dicha clasificación, sin embargo, contiene errores, dado que esta división puede generar que una proporción (cuanto menor, mejor), de instancias sean incorrectamente clasificadas, ya que en la realidad pertenecen a la otra categoría. La cantidad de instancias incorrectamente clasficadas se procesa matemáticamente en un indicador conocido como "impureza de Gini", el cual mide la cantidad de instacias incorrectamente clasificadas dentro de cada "hoja" del árbol. Alcanza el valor mínimo de cero cuando no hay instancias incorrectamente clasificadas. Esta información existe en nuestro gráfico de árbol, y a su vez determina el color de la hoja, siendo más intenso cuando menor es el valor de la "impureza de Gini", significando que la clasificación de esa hoja es más robusta para predecir correctamente un resultado.
Podemos ver que nuestro modelo ha aprendido cosas muy interesantes:
* La primera pregunta que se hace nuestro modelo, es acerca del sexo de la persona: si es hombre (0) a continuación se pregunta su edad. Si es un hombre de edad 7 años o más, le asigna una etiqueta de "no sobrevive". Por el contrario, si es un niño de 6 años o menos, predecirá "sobrevive"
* El caso es diferente si como resultado de la primera pregunta, el valor de sexo fuera 1 (mujer). La pregunta que se hará a continuación el árbol es referido a qué clase pertenecía la pasajera: si fuera de 1° o 2° clase, le asignará la predicción "sobrevive", y si fuera de 3° clase, "no sobrevive".
Lamentablemente no es un acontecimiento feliz, y tenemos los datos que demuestran que han existido pérdidas humanas. El modelo no tiene prejuicios al respecto, pero ha aprendido automáticamente de los datos para explicar cómo se dieron los sucesos. Piensa en cómo esto se relaciona con los acontecimientos históricos ocurridos en ocasión del hundimiento del Titanic. ¿Te suena la frase **"Mujeres y niños primero"**, al momento de lanzarse a los botes salvavidas? El modelo ha detectado que las mujeres tuvieron mayores oportunidades de supervivencia (y cuanto más pudientes, mejores serían sus chances), y que en el caso de los hombres, los niños pequeños tuvieron más suerte que los adolescentes o adultos.
Otra visualización útil y más sintética que la anterior, es la posibilidad de graficar las importancias que han tenido cada una de las variables en la predicción obtenida. Esta importancia es dada por Scikit-Learn a cada feature (x) en función de qué tan útil ha sido para clasificar las instancias.
"""
# graficamos las importancias en un gráfico de barras
# creamos las variables x (importancias) e y (columnas)
importancias = arbol.feature_importances_
columnas = X.columns
# creamos el gráfico
sns.barplot(x=columnas, y=importancias)
plt.title('Importancias de cada atributo')
plt.show()
"""Según el gráfico anterior, el factor más determinante fue el género, seguido de la clase del pasajero, y luego la edad. Complementado con el diagrama anterior, pudimos ver cómo las variables se influyeron mutuamente para determinar la posibilidad de supervivencia de acuerdo al género de la persona.
El siguiente paso en el proceso de un científico de datos, sería el de optimizar su modelo de machine learning, para tratar de alcanzar una mayor precisión. Ten en cuenta que llegar a un 100% de precisión (accuracy) no es por lo general realista en ningún proyecto real, pero un umbral aceptable suele encontrarse entre los 85% y 95%, dependiendo de la complejidad del dataset y de los modelos ya disponibles (un modelo más complejo valdrá la pena únicamente si obtiene mejores resultados que un modelo simple).
1. Experimenta con distintas profundidades y visualizar el árbol obtenidos con la función `plot_tree` del módulo `tree` de Scikit-Learn.
1. Evalúa su desempeño calculando la exactitud y viendo su matriz de confusión.
1. Observa la importancia asignada a cada atributo (`feature_importances_`). En la documentación encontrarás información que puede resultarte útil para mejorar los resultados obtenidos.
¿Te parece que lo obtenido concuerda con lo que esperabas?¿Qué más puedes aprender de la tragedia del Titanic viendo el árbol de decisíon y la importancia de cada atributo (feature)?
"""

View File

@@ -0,0 +1,180 @@
# -*- coding: utf-8 -*-
"""Python TOTAL - Matplotlib.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1CqTZeTV1_gEcvQEVFOVdUh1Ibcf1HcS0
# Práctica de la librería Matplotlib
En este notebook, se desarrollarán una serie de tareas utilizando la librería Matplotlib, empleada para la visualización de datos mediante gráficos.
Se proponen y documentan posibles formas de resolver los ejercicios, pero pueden existir varias formas de lograr los mismos resultados.
Siempre es una buena idea verificar la [Documentación Oficial de Matplotlib](https://matplotlib.org/stable/index.html), donde es posible encontrar todo tipo de información referida a esta librería. Y si te quedas trabado, busca en Google "como hacer [algo] con Matplotlib". Hay enormes probabilidades de que esa pregunta ya haya sido respondida!
Por ejemplo, si quieres crear un gráfico con `plt.subplots()`, puedes buscar directamente en Google [`plt.subplots()`](https://www.google.com/search?q=plt.subplots())
"""
# Commented out IPython magic to ensure Python compatibility.
# Importamos el módulo de Matplotlib como plt
import matplotlib.pyplot as plt
# La siguiente linea nos permite ver los gráficos directamente al ejecutarlos en el notebook
# %matplotlib inline
# Creamos un gráfico utilizando plt.plot()
plt.plot()
# Graficamos una lista de números
a = [1,5,3,8,7,15]
plt.plot(a)
# Creamos dos listas, x e y. Llenamos a la lista x de valores del 1 al 100.
x = list(range(101))
# Los valores de y van a equivaler al cuadrado del respectivo valor en x con el mísmo índice
y = []
for numero in x:
y.append(numero**2)
# Graficamos ambas listas creadas
plt.plot(x,y)
"""Hay otra manera de crear gráficos en Matplotlib, utilizando el método orientado a objetos (OO)."""
# Creamos el gráfico utilizando plt.subplots()
# fig se refiere a la figurar general
# ax se refiere al eje
fig, ax = plt.subplots()
ax.plot(x, y)
"""Veamos cómo sería un flujo de trabajo en Matplotlib"""
# Commented out IPython magic to ensure Python compatibility.
# Importar y preparar la librería
import matplotlib.pyplot as plt
# %matplotlib inline
# Preparar los datos
x = list(range(101))
y = []
for numero in x:
y.append(numero**2)
# Preparamos el área del gráfico (fig) y el gráfico en sí (ax) utilizando plt.subplots()
fig, ax = plt.subplots()
# Añadimos los datos al gráfico
ax.plot(x, y)
# Personalizamos el gráfico añadiendo título al gráfico y a los ejes x e y
ax.set(title="Gráfico de casos de COVID-10 en Latam", xlabel="Días", ylabel="Casos confirmados")
# Guardamos nuestro gráfico empleando fig.savefig()
fig.savefig("/ejemplo-grafico-covif.png")
"""Veamos ahora un gráfico de dispersión:"""
#creamos un nuveo set de datos utilizando la librería Numpy
import numpy as np
x_1 = np.linspace(0, 100, 20)
y_1 = x_1**2
# Creamos el gráfico de dispersión de x vs y
fig, ax = plt.subplots()
ax.scatter(x_1, y_1)
ax.set(title="Otro gráfico más", xlabel="Días", ylabel="Aumento exponencial")
# Visualizamos ahora la función seno, utilizando np.sin(X)
fig, ax = plt.subplots()
x_2 = np.linspace(-10, 10, 100)
y_2 = np.sin(x_2)
ax.scatter(x_2, y_2)
"""Veamos ahora otro tipo de gráfico. Por ejemplo, un gráfico de barras, que por lo general asocia resultados numéricos a variables categóricas (categorías)"""
# Creemos un diccionario con tres platos y su respectivo precio
# Las claves del diccionario serán los nombres de las comidas, y los valores asociados, su precio
comidas = {"lasagna":350, "sopa":150, "roast beef":650}
# Crearemos un gráfico de barras donde el eje x está formado por las claves del diccionario,
# y el eje y contiene los valores.
fig, ax = plt.subplots()
ax.bar(comidas.keys(), comidas.values())
# Añadimos los títulos correspondientes
ax.set(title="Precios de comidas", xlabel="Comidas", ylabel="Precios")
# Probemos a continuación con un gráfico de barras horizontales
fig, ax = plt.subplots()
ax.barh(list(comidas.keys()), list(comidas.values()))
ax.set(title="Precios de comidas", xlabel="Precios", ylabel="Comidas")
"""Un gráfico semejante es un histograma. Podemos generar números aleatorios que siguen una distribución normal (que se acumulan en torno a un valor central), con la función randn:"""
# Creamos una distribución de 1000 valores aleatorios distribuidos normalmente
x = np.random.random(1000)
# Creamos el histograma
fig, ax = plt.subplots()
ax.hist(x)
"""Veamos ahora un caso más complejo, trabajando con subplots, o figuras que cotienen varios gráficos:"""
# Creamos una figura con 4 subgráficos (2 por fila)
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(12,8))
"""Añadimos datos a cada uno de los gráficos (axes)"""
# Creamos la misma disposición de gráficos, con un tamaño de figura de 10x5
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(10,5))
# Para nuestro primer gráfico, tomamos el conjunto x_1, y_1, y generamos un gráfico de líneas
ax1.plot(x_1, y_1)
# Para nuestro segundo gráfico, tomamos el conjunto x_2, y_2, y generamos un gráfico de dispersión
ax2.scatter(x_2,y_2)
# Creamos un gráfico con los precios de tres comidas en la esquina inferior izquierda
ax3.bar(comidas.keys(), comidas.values())
# El gráfico de la esquina inferior derecha será un histograma de valores aleatorios con distribución normal
ax4.hist(np.random.randn(1000))
"""Matplotlib tiene un conjunto de varios estilos disponibles, podemos verificarlos de la siguiente manera:"""
# Verificamos estilos disponibles
plt.style.available
# Cambiamos el estilo predeterminado por "seaborn-whitegrid"
plt.style.use('seaborn-v0_8-whitegrid')
"""Habiendo cambiado el estilo (el cambio más evidente que veremos será una grilla en el fondo de cada gráfico), cambiaremos también los colores de las líneas, puntos y barras en cada uno de los gráficos por códigos hex a nuestra preferencia:
"""
# Copiamos los valores de los gráficos anteriores
# Creamos la misma disposición de gráficos, con un tamaño de figura de 10x5
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(10,5))
# Para nuestro primer gráfico, tomamos el conjunto x_1, y_1, y generamos un gráfico de líneas
ax1.plot(x_1, y_1, color="#fcba03")
# Para nuestro segundo gráfico, tomamos el conjunto x_2, y_2, y generamos un gráfico de dispersión
ax2.scatter(x_2,y_2, color="#fcba02")
# Creamos un gráfico con los precios de tres comidas en la esquina inferior izquierda
ax3.bar(comidas.keys(), comidas.values(), color="#03c6fc")
# El gráfico de la esquina inferior derecha será un histograma de valores aleatorios con distribución normal
ax4.hist(np.random.randn(1000), color="#fc036b")

View File

@@ -0,0 +1,189 @@
# -*- coding: utf-8 -*-
"""Copia de Python TOTAL - Numpy.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1RJ5lMM11UepgJvp8b2yp3MP6jAIQrud-
# Práctica de la librería Numpy
En este notebook, se desarrollarán una serie de tareas utilizando la librería Numpy (Numerical Python).
Se proponen y documentan posibles formas de resolver los ejercicios, pero las mismas no son únicas.
Siempre es una buena idea verificar la [Documentación Oficial de Numpy](https://numpy.org/devdocs/user/index.html), donde es posible encontrar todo tipo de información referida a esta librería. Y si te quedas trabado, busca en Google "como hacer [algo] con Numpy". Hay enormes probabilidades de que esa pregunta ya haya sido respondida!
"""
# Importamos Numpy con su abreviación "np"
import numpy as np
# Podemos crear arrays de una dimensión con la función np.array()
array_unidim = np.array([1,2,3,4,5])
# O un array de dos dimensiones (bidimensional)
array_bidim = np.array([
[1,2,3],
[4,5,6]
]
)
# O un array de tres dimensiones (tridimensional)
array_tridim = np.array([
[
[1,2,3],
[4,5,6]
],
[
[7,8,9],
[10,11,12]
]
])
"""Para cada uno de estos arrays, podemos obtener sus propiedades, tales como su "forma", número de dimensiones, tipos de datos y tamaño."""
from numpy.core.multiarray import array
# Atributos del array unidimensional (forma, número de dimensiones, tipos de datos, tamaño, y tipo)
array_unidim.shape, array_unidim.ndim, array_unidim.dtype, array_unidim.size, type(array_unidim)
# Atributos del array bidimensional
array_bidim.shape, array_bidim.ndim, array_bidim.dtype, array_bidim.size, type(array_bidim)
# Atributos del array tridimensional
array_tridim.shape, array_tridim.ndim, array_tridim.dtype, array_tridim.size, type(array_tridim)
# Importamos pandas como pd, y creamos un DataFrame a partir del array bidimensional
import pandas as pd
datos = pd.DataFrame(array_bidim)
datos
# Creamos un array de tamaño 4x3, formado únicamente por unos (1)
unos = np.ones((4,3))
unos
# Creamos un array de tamaño 2x4x3, formado únicamente por ceros (0)
cero = np.zeros((2,4,3))
cero
# Creamos un array de números en el rango de 0 a 100, con un paso de 5
array_1 = np.arange(0,101,5)
array_1
# Creamos un array de números aleatorios enteros comprendidos en entre 0 y 10, de tamaño (2, 5)
array_2 = np.random.randint(0,10,(2,5))
array_2
# Creamos un array de números aleatorios decimales comprendidos en entre 0 y 1, de tamaño (3, 5)
array_3 = np.random.random((3,5))
array_3
# Establecemos la "semilla" de números aleatorios en 27
np.random.seed(27)
# Creamos un array de números aleatorios enteros comprendidos en entre 0 y 10, de tamaño (3, 5)
array_4 = np.random.randint(0,10,(3,5))
array_4
"""¿Qué ocurre al correr la última celda nuevamente, a diferencia de las anteriores?"""
# Encontramos los valores únicos del array_4
np.unique(array_4)
# Extraemos el elemento de índice 1 del array_4
array_4[1]
# Extraemos las primeras dos filas del array_4
array_4[:2]
# Extraemos los dos primeros datos de las primeras dos filas del array_4
array_4[:2,:2]
# Creamos dos arrays de tamaño 3x4: uno relleno de números aleatorios entre 0 y 10, y otro relleno de unos
array_5 = np.random.randint(0,10,(3,4))
array_6 = np.ones((3,4))
# invocamos el array_5
array_5
# invocamos el array_6
array_6
# Sumamos los dos arrays
array_5 + array_6
# Creamos ahora un array de tamaño (4,3) lleno de unos
array_7 = np.ones((4,3))
array_7
# Intentaremos sumar los arrays 6 y 7
array_6 + array_7
"""¿A qué se debe el error anterior? ¿Qué deberíamos tener en cuenta para que no suceda?"""
# Entonces crearemos otro array de tamaño (4,3) lleno de unos
array_8 = np.ones((4,3))
array_8
# Restamos el array_8 al array_7
array_8 - array_7
# Creamos otros dos arrays de tamaño 3x3 con números aleatorios del 1 al 5
array_9 = np.random.randint(1,5,(3,3))
array_10 = np.random.randint(1,5,(3,3))
# invocamos el array_9
array_9
# invocamos el array_10
array_10
# Multiplicamos los últimos dos arrays entre sí
array_9 * array_10
# Elevamos el array_9 al cuadrado
array_9 ** 2
# Buscamos la raíz cuadrada del array_10
np.sqrt(array_10)
# Hallamos el promedio de los valores del array_9
array_9.mean()
# Hallamos el valor máximo de los valores del array_9
array_9.max()
# Hallamos el valor mínimo de los valores del array_9
array_9.min()
# Cambiamos la forma del array_9 por una de 9x1, y lo almacenamos como array_11
array_11 = array_9.reshape((9,1))
# invocamos el array_11
array_11
# Transponemos el array_11
array_11.T
# Comparamos el array_9 y el array_10, para saber cuáles elementos del array_9 son mayores a los del array_10
array_12 = array_9 > array_10
array_12
"""¿Qué tipos de datos forman parte del array de resultados?"""
# Veamos sus nuevos tipos de datos
array_12.dtype
# Alguno de los elementos del array_9 es igual su equivalente del array_10?
array_9 == array_10
# Comparamos nuevamente ambos arrays, en esta ocasión con >=
array_9 >= array_10
# Buscamos los elementos del array_9 que son mayores a 2
array_9 > 2
# Ordenamos de menor a mayor los elementos dentro del array_9
np.sort(array_9)

View File

@@ -0,0 +1,129 @@
# -*- coding: utf-8 -*-
"""Python TOTAL - Pandas.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1uXPQgRFyhRzarWbO9ytZ1Y2amriZgeex
# Práctica de la librería Pandas
En este notebook, se desarrollarán una serie de tareas utilizando la librería Pandas (el "Excel" de Python).
Se proponen y documentan posibles formas de resolver los ejercicios, pero pueden existir varias formas de lograr los mismos resultados.
Siempre es una buena idea verificar la [Documentación Oficial de Pandas](https://pandas.pydata.org/pandas-docs/stable/), donde es posible encontrar todo tipo de información referida a esta librería. Y si te quedas trabado, busca en Google "como hacer [algo] con Pandas". Hay enormes probabilidades de que esa pregunta ya haya sido respondida!
"""
# Importamos Pandas
import pandas as pd
# Creamos una serie de números y hallamos su media
numeros = pd.Series([1,2,3,5,67,35,235,62])
numeros.mean()
# Hallamos la suma de dichos números
numeros.sum()
# Creamos una SERIE de tres colores diferentes
colores = pd.Series(['rojo','amarillo','verde'])
# Visualizamos la serie creada
colores
# Creamos una serie con tipos de autos, y la visualizamos
tipos_autos = pd.Series(['sedan', 'SUV', 'Pick up'])
tipos_autos
# Combinamos las series de tipos de autos y colores en un DATAFRAME
tabla_autos = pd.DataFrame({'Tipo de Auto':tipos_autos, 'Color':colores})
tabla_autos
# Conectamos el cuaderno actual con nuestro Drive
from google.colab import drive
drive.mount('/content/drive')
# Importar "ventas-autos.csv" y convertirlo en un nuevo DATAFRAME
ventas_autos = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/ventas-autos.csv')
ventas_autos
"""Este será nuestro "Dataframe de Flujo Vehicular"
"""
# Exportar el Dataframe como un archivo CSV a mi carpeta "/content/drive/MyDrive/Colab Notebooks/pruebas/"
ventas_autos.to_csv('/content/drive/MyDrive/Colab Notebooks/este_archivo.csv')
# Analicemos los tipos de datos disponibles en el dataset de ventas autos
ventas_autos.dtypes
# Apliquemos estadística descriptiva (cantidad de valores, media, desviación estándar, valores mínimos y máximos, cuartiles) al dataset
ventas_autos.describe()
# Obtenemos información del dataset utilizando info()
ventas_autos.info()
# Listamos los nombres de las columnas de nuestro dataset
ventas_autos.columns
# Averiguamos el "largo" de nuestro dataset
len(ventas_autos)
# Mostramos las primeras 5 filas del dataset
ventas_autos.head()
# Mostramos las primeras 7 filas del dataset
ventas_autos.head(7)
# Mostramos las últimas 3 filas del dataset
ventas_autos.tail(3)
# Utilizamos .loc para seleccionar la fila de índice 3 del DataFrame
ventas_autos.loc[3]
# Utilizamos .iloc para seleccionar las filas 3, 7 y 9
ventas_autos.iloc[[3,7,9]]
"""En la documentación podrás observar la diferencia entre el funcionamiento de [.loc](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html) e [.iloc](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html)."""
# Seleccionar la columna "Kilometraje"
ventas_autos['Kilometraje']
# Encontrar el valor medio de la columnas "Kilometraje"
ventas_autos['Kilometraje'].mean()
# Seleccionar aquellas columnas que tengan valores superiores a 100,000 kilómetros en la columna Kilometraje
ventas_autos[ventas_autos['Kilometraje'] > 100000]
# Creamos una tabla cruzada de doble entrada entre Fabricante y cantidad de puertas
pd.crosstab(ventas_autos['Fabricante'], ventas_autos['Puertas'])
# Agrupamos las columnas por fabricante y buscandos el valor medio de las columnas numéricas
ventas_autos.groupby(['Fabricante']).mean()
# Commented out IPython magic to ensure Python compatibility.
# Importamos Matplotlib y creamos un gráfico con los valores de la columna Kilometraje
import matplotlib as plt
# %matplotlib inline
ventas_autos['Kilometraje'].plot()
# Puede que un gráfico más apropiado en este caso sea un histograma?
ventas_autos['Kilometraje'].hist()
# Intentamos graficar la columna de precios
ventas_autos['Precio (USD)'].plot()
"""No funcionó, verdad? Alguna idea de por qué esto puede ocurrir?
Una pista es buscar: "cómo convertir strings de Pandas a números"
[Aqui hay un enlace a StackOverflow referido a este tema](https://stackoverflow.com/questions/44469313/price-column-object-to-int-in-pandas).
"""
# Elimina la puntuación de la columna de precios
ventas_autos['Precio (USD)'] = ventas_autos['Precio (USD)'].str.replace('[\$\.\,]', '')
ventas_autos['Precio (USD)'] = ventas_autos['Precio (USD)'].astype(int)/100
ventas_autos
ventas_autos['Precio (USD)'].plot()

View File

@@ -0,0 +1,11 @@
Fabricante,Color,Kilometraje,Puertas,Precio (USD)
Toyota,Blanco,150043,4,"$4,000.00"
Honda,Rojo,87899,4,"$5,000.00"
Toyota,Azul,32549,3,"$7,000.00"
BMW,Negro,11179,5,"$22,000.00"
Nissan,Blanco,213095,4,"$3,500.00"
Toyota,Rojo,99213,4,"$4,500.00"
Honda,Blanco,45698,4,"$7,500.00"
Honda,Blanco,54738,4,"$7,000.00"
Toyota,Blanco,60000,4,"$6,250.00"
Nissan,Rojo,31600,4,"$9,700.00"
1 Fabricante Color Kilometraje Puertas Precio (USD)
2 Toyota Blanco 150043 4 $4,000.00
3 Honda Rojo 87899 4 $5,000.00
4 Toyota Azul 32549 3 $7,000.00
5 BMW Negro 11179 5 $22,000.00
6 Nissan Blanco 213095 4 $3,500.00
7 Toyota Rojo 99213 4 $4,500.00
8 Honda Blanco 45698 4 $7,500.00
9 Honda Blanco 54738 4 $7,000.00
10 Toyota Blanco 60000 4 $6,250.00
11 Nissan Rojo 31600 4 $9,700.00