Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "title-slide",
"slideshow": {
"id": "title-slide",
"slide_type": "slide"
}
},
"source": [
"# *Introduction to* Data Analysis and Plotting with Pandas\n",
"## JSC Tutorial\n",
"\n",
"Andreas Herten, Forschungszentrum Jülich, 26 February 2019"
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## My Motivation\n",
"\n",
"* I like Python\n",
"* I like plotting data\n",
"* I like sharing\n",
"* I think Pandas is awesome and you should use it too"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Tutorial Setup\n",
"\n",
"* 60 minutes (we might do this again for some advanced stuff if you want to)\n",
"* Alternating between lecture and hands-on\n",
"* Direct feedback via https://www.polleverywhere.com/"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Please open Jupyter Notebook of this session\n",
" - … either on your **local machine** (which has Pandas) \n",
" Download here\n",
" - … or on the **JSC Jupyter service** at https://jupyter-jsc.fz-juelich.de/\n",
" - Either `pip install --user pandas seaborn` once in a shell and `cp $PROJECT_cjsc/herten1/pandas/notebook.ipynb ~/`\n",
" - Or \n",
" 1. `ln -s $PROJECT_cjsc/herten1/pandas ~/.local/share/jupyter/kernels/` and \n",
" 2. `cp $PROJECT_cjsc/herten1/pandas/notebook-with-kernel.ipynb ~/`"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## About Pandas\n",
"\n",
"<img style=\"float: right; max-width: 200px;\" width=\"200px\" src=\"img/adorable-animal-animal-photography-1661535.jpg\" />\n",
"\n",
"* For data analysis\n",
"* With data structures (multi-dimensional table; time series), operations\n",
"* Name from »**Pan**el **Da**ta« (multi-dimensional time series in economics)\n",
"* Since 2008\n",
"* https://pandas.pydata.org/\n",
"* Install [via PyPI](https://pypi.org/project/pandas/): `pip install pandas`"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"\n",
"* Pandas works great together with other established Python tools\n",
" * [Jupyter Notebooks](https://jupyter.org/)\n",
" * Plotting with [`matplotlib`](https://matplotlib.org/)\n",
" * Modelling with [`statsmodels`](https://www.statsmodels.org/stable/index.html), [`scikit-learn`](https://scikit-learn.org/)\n",
" * Nicer plots with [`seaborn`](https://seaborn.pydata.org/), [`altair`](https://altair-viz.github.io/), [`plotly`](https://plot.ly/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## First Steps"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"import pandas"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"import pandas as pd"
]
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'0.24.1'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.__version__"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mClass docstring:\u001b[0m\n",
" pandas - a powerful data analysis and manipulation library for Python\n",
" =====================================================================\n",
" \n",
" **pandas** is a Python package providing fast, flexible, and expressive data\n",
" structures designed to make working with \"relational\" or \"labeled\" data both\n",
" easy and intuitive. It aims to be the fundamental high-level building block for\n",
" doing practical, **real world** data analysis in Python. Additionally, it has\n",
" the broader goal of becoming **the most powerful and flexible open source data\n",
" analysis / manipulation tool available in any language**. It is already well on\n",
" its way toward this goal.\n",
" \n",
" Main Features\n",
" -------------\n",
" Here are just a few of the things that pandas does well:\n",
" \n",
" - Easy handling of missing data in floating point as well as non-floating\n",
" point data.\n",
" - Size mutability: columns can be inserted and deleted from DataFrame and\n",
" higher dimensional objects\n",
" - Automatic and explicit data alignment: objects can be explicitly aligned\n",
" to a set of labels, or the user can simply ignore the labels and let\n",
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
" `Series`, `DataFrame`, etc. automatically align the data for you in\n",
" computations.\n",
" - Powerful, flexible group by functionality to perform split-apply-combine\n",
" operations on data sets, for both aggregating and transforming data.\n",
" - Make it easy to convert ragged, differently-indexed data in other Python\n",
" and NumPy data structures into DataFrame objects.\n",
" - Intelligent label-based slicing, fancy indexing, and subsetting of large\n",
" data sets.\n",
" - Intuitive merging and joining data sets.\n",
" - Flexible reshaping and pivoting of data sets.\n",
" - Hierarchical labeling of axes (possible to have multiple labels per tick).\n",
" - Robust IO tools for loading data from flat files (CSV and delimited),\n",
" Excel files, databases, and saving/loading data from the ultrafast HDF5\n",
" format.\n",
" - Time series-specific functionality: date range generation and frequency\n",
" conversion, moving window statistics, moving window linear regressions,\n",
" date shifting and lagging, etc."
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%pdoc pd"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## DataFrames\n",
"### It's all about DataFrames\n",
"\n",
"* Main data containers of Pandas\n",
" - Linear: `Series`\n",
" - Multi Dimension: `DataFrame`\n",
"* `Series` is *only* special case of `DataFrame`\n",
"* → Talk about `DataFrame`s, mention some special `Series` cases"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## DataFrames\n",
"### Construction\n",
"\n",
"* To show features of `DataFrame`, let's construct one!\n",
"* Many construction possibilities\n",
" - From lists, dictionaries, `numpy` objects\n",
" - From CSV, HDF5, JSON, Excel, HTML, fixed-width files\n",
" - From pickled Pandas data\n",
" - From clipboard\n",
" - *From Feather, Parquest, SAS, SQL, Google BigQuery, STATA*"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## DataFrames\n",
"\n",
"### Examples, finally"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
"source": [
"ages = [41, 56, 56, 57, 39, 59, 43, 56, 38, 60]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>59</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>38</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>60</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0\n",
"0 41\n",
"1 56\n",
"2 56\n",
"3 57\n",
"4 39\n",
"5 59\n",
"6 43\n",
"7 56\n",
"8 38\n",
"9 60"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(ages)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>56</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0\n",
"0 41\n",
"1 56\n",
"2 56"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ages = pd.DataFrame(ages)\n",
"df_ages.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Let's add names to ages; put everything into a `dict()`"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'Names': ['Liu', 'Rowland', 'Rivers', 'Waters', 'Rice', 'Fields', 'Kerr', 'Romero', 'Davis', 'Hall'], 'Ages': [41, 56, 56, 57, 39, 59, 43, 56, 38, 60]}\n"
]
}
],
"source": [
"data = {\n",
" \"Names\": [\"Liu\", \"Rowland\", \"Rivers\", \"Waters\", \"Rice\", \"Fields\", \"Kerr\", \"Romero\", \"Davis\", \"Hall\"],\n",
" \"Ages\": ages\n",
"}\n",
"print(data)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Names</th>\n",
" <th>Ages</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Liu</td>\n",
" <td>41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Rowland</td>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Rivers</td>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Waters</td>\n",
" <td>57</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Names Ages\n",
"0 Liu 41\n",
"1 Rowland 56\n",
"2 Rivers 56\n",
"3 Waters 57"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample = pd.DataFrame(data)\n",
"df_sample.head(4)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Two columns now; one for names, one for ages"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Names', 'Ages'], dtype='object')"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample.columns"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* `DataFrame` always have indexes; auto-generated or custom"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"RangeIndex(start=0, stop=10, step=1)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample.index"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Make `Names` be index with `.set_index()`\n",
"* `inplace=True` will modifiy the parent frame (*I don't like it*)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ages</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Names</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Liu</th>\n",
" <td>41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rowland</th>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rivers</th>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Waters</th>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rice</th>\n",
" <td>39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fields</th>\n",
" <td>59</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Kerr</th>\n",
" <td>43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Romero</th>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Davis</th>\n",
" <td>38</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Hall</th>\n",
" <td>60</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ages\n",
"Names \n",
"Liu 41\n",
"Rowland 56\n",
"Rivers 56\n",
"Waters 57\n",
"Rice 39\n",
"Fields 59\n",
"Kerr 43\n",
"Romero 56\n",
"Davis 38\n",
"Hall 60"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample.set_index(\"Names\", inplace=True)\n",
"df_sample"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Some more operations"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ages</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>10.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>50.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>9.009255</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>38.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>41.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>56.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>56.750000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>60.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ages\n",
"count 10.000000\n",
"mean 50.500000\n",
"std 9.009255\n",
"min 38.000000\n",
"25% 41.500000\n",
"50% 56.000000\n",
"75% 56.750000\n",
"max 60.000000"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample.describe()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Names</th>\n",
" <th>Liu</th>\n",
" <th>Rowland</th>\n",
" <th>Rivers</th>\n",
" <th>Waters</th>\n",
" <th>Rice</th>\n",
" <th>Fields</th>\n",
" <th>Kerr</th>\n",
" <th>Romero</th>\n",
" <th>Davis</th>\n",
" <th>Hall</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Ages</th>\n",
" <td>41</td>\n",
" <td>56</td>\n",
" <td>56</td>\n",
" <td>57</td>\n",
" <td>39</td>\n",
" <td>59</td>\n",
" <td>43</td>\n",
" <td>56</td>\n",
" <td>38</td>\n",
" <td>60</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Names Liu Rowland Rivers Waters Rice Fields Kerr Romero Davis Hall\n",
"Ages 41 56 56 57 39 59 43 56 38 60"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample.T"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Liu', 'Rowland', 'Rivers', 'Waters', 'Rice', 'Fields', 'Kerr',\n",
" 'Romero', 'Davis', 'Hall'],\n",
" dtype='object', name='Names')"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample.T.columns"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Also: Arithmetic operations"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ages</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Names</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Liu</th>\n",
" <td>82</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rowland</th>\n",
" <td>112</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rivers</th>\n",
" <td>112</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ages\n",
"Names \n",
"Liu 82\n",
"Rowland 112\n",
"Rivers 112"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample.multiply(2).head(3)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Names</th>\n",
" <th>Ages</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>LiuLiu</td>\n",
" <td>82</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>RowlandRowland</td>\n",
" <td>112</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>RiversRivers</td>\n",
" <td>112</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Names Ages\n",
"0 LiuLiu 82\n",
"1 RowlandRowland 112\n",
"2 RiversRivers 112"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample.reset_index().multiply(2).head(3)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ages</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Names</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Liu</th>\n",
" <td>20.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rowland</th>\n",
" <td>28.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rivers</th>\n",
" <td>28.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ages\n",
"Names \n",
"Liu 20.5\n",
"Rowland 28.0\n",
"Rivers 28.0"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(df_sample / 2).head(3)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ages</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Names</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Liu</th>\n",
" <td>1681</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rowland</th>\n",
" <td>3136</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rivers</th>\n",
" <td>3136</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ages\n",
"Names \n",
"Liu 1681\n",
"Rowland 3136\n",
"Rivers 3136"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(df_sample * df_sample).head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Logical operations allowed as well"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Ages</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Names</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Liu</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rowland</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rivers</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Waters</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rice</th>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Fields</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Kerr</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Romero</th>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Davis</th>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Hall</th>\n",
" <td>True</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Ages\n",
"Names \n",
"Liu True\n",
"Rowland True\n",
"Rivers True\n",
"Waters True\n",
"Rice False\n",
"Fields True\n",
"Kerr True\n",
"Romero True\n",
"Davis False\n",
"Hall True"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sample > 40"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "explanation",
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Task\n",
"\n",
"* Create data frame with\n",
" - 10 names of dinosaurs, \n",
" - their favourite prime number, \n",
" - and their favourite color\n",
"* Play around with the frame\n",
"* Tell me on poll when you're done"
]
},
{
"cell_type": "markdown",
"metadata": {
"exercise": "task",
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"Jupyter Notebook 101:\n",
"\n",
"* Execute cell: `shift+enter`\n",
"* New cell in front of current cell: `a`\n",
"* New cell after current cell: `b`"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"exercise": "task",
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"happy_dinos = {\n",
" \"Dinosaur Name\": [],\n",
" \"Favourite Prime\": [],\n",
" \"Favourite Color\": []\n",
"}\n",
"#df_dinos = "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>Dinosaur Name</th>\n",
" <th>Aegyptosaurus</th>\n",
" <th>Tyrannosaurus</th>\n",
" <th>Panoplosaurus</th>\n",
" <th>Isisaurus</th>\n",
" <th>Triceratops</th>\n",
" <th>Velociraptor</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Favourite Prime</th>\n",
" <td>4</td>\n",
" <td>8</td>\n",
" <td>15</td>\n",
" <td>16</td>\n",
" <td>23</td>\n",
" <td>42</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Favourite Color</th>\n",
" <td>blue</td>\n",
" <td>white</td>\n",
" <td>blue</td>\n",
" <td>purple</td>\n",
" <td>violet</td>\n",
" <td>gray</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Dinosaur Name Aegyptosaurus Tyrannosaurus Panoplosaurus Isisaurus \\\n",
"Favourite Prime 4 8 15 16 \n",
"Favourite Color blue white blue purple \n",
"\n",
"Dinosaur Name Triceratops Velociraptor \n",
"Favourite Prime 23 42 \n",
"Favourite Color violet gray "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"happy_dinos = {\n",
" \"Dinosaur Name\": [\"Aegyptosaurus\", \"Tyrannosaurus\", \"Panoplosaurus\", \"Isisaurus\", \"Triceratops\", \"Velociraptor\"],\n",
" \"Favourite Prime\": [\"4\", \"8\", \"15\", \"16\", \"23\", \"42\"],\n",
" \"Favourite Color\": [\"blue\", \"white\", \"blue\", \"purple\", \"violet\", \"gray\"]\n",
"}\n",
"df_dinos = pd.DataFrame(happy_dinos).set_index(\"Dinosaur Name\")\n",
"df_dinos.T"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Some more `DataFrame` examples"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-2.718282</td>\n",
" <td>This</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>0.986231</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-0.718282</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"0 1.2 2018-02-26 -2.718282 This Same\n",
"1 1.2 2018-02-26 1.718282 column Same\n",
"2 1.2 2018-02-26 -1.304068 has Same\n",
"3 1.2 2018-02-26 0.986231 entries Same\n",
"4 1.2 2018-02-26 -0.718282 entries Same"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo = pd.DataFrame({\n",
" \"A\": 1.2,\n",
" \"B\": pd.Timestamp('20180226'),\n",
" \"C\": [(-1)**i * np.sqrt(i) + np.e * (-1)**(i-1) for i in range(5)],\n",
" \"D\": pd.Categorical([\"This\", \"column\", \"has\", \"entries\", \"entries\"]),\n",
" \"E\": \"Same\"\n",
"})\n",
"df_demo"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-2.718282</td>\n",
" <td>This</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-0.718282</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>0.986231</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"0 1.2 2017-05-03 -2.718282 This Same\n",
"2 1.2 2017-05-03 -1.304068 has Same\n",
"4 1.2 2017-05-03 -0.718282 entries Same\n",
"3 1.2 2017-05-03 0.986231 entries Same\n",
"1 1.2 2017-05-03 1.718282 column Same"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.sort_values(\"C\")"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>0.99</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-0.72</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"3 1.2 2017-05-03 0.99 entries Same\n",
"4 1.2 2017-05-03 -0.72 entries Same"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.round(2).tail(2)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"A 6\n",
"C -2.03\n",
"D Thiscolumnhasentriesentries\n",
"E SameSameSameSameSame\n",
"dtype: object"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.round(2).sum()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\\begin{tabular}{lrlrll}\n",
"\\toprule\n",
"{} & A & B & C & D & E \\\\\n",
"\\midrule\n",
"0 & 1.2 & 2017-05-03 & -2.72 & This & Same \\\\\n",
"1 & 1.2 & 2017-05-03 & 1.72 & column & Same \\\\\n",
"2 & 1.2 & 2017-05-03 & -1.30 & has & Same \\\\\n",
"3 & 1.2 & 2017-05-03 & 0.99 & entries & Same \\\\\n",
"4 & 1.2 & 2017-05-03 & -0.72 & entries & Same \\\\\n",
"\\bottomrule\n",
"\\end{tabular}\n",
"\n"
]
}
],
"source": [
"print(df_demo.round(2).to_latex())"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Reading External Data\n",
"\n",
"(Links to documentation)\n",
"* [`.read_json()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html#pandas.read_json)\n",
"* [`.read_csv()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html#pandas.read_csv)\n",
"* [`.read_hdf5()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_hdf.html#pandas.read_hdf)\n",
"* [`.read_excel()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas.read_excel)\n",
"\n",
"Example:\n",
"\n",
"```json\n",
"{\n",
" \"Character\": [\"Sawyer\", \"…\", \"Walt\"],\n",
" \"Actor\": [\"Josh Holloway\", \"…\", \"Malcolm David Kelley\"],\n",
" \"Main Cast\": [true, \"…\", false]\n",
"}\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actor</th>\n",
" <th>Main Cast</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Character</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Hurley</th>\n",
" <td>Jorge Garcia</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Jack</th>\n",
" <td>Matthew Fox</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Kate</th>\n",
" <td>Evangeline Lilly</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Locke</th>\n",
" <td>Terry O'Quinn</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Sawyer</th>\n",
" <td>Josh Holloway</td>\n",
" <td>True</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Walt</th>\n",
" <td>Malcolm David Kelley</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Actor Main Cast\n",
"Character \n",
"Hurley Jorge Garcia True\n",
"Jack Matthew Fox True\n",
"Kate Evangeline Lilly True\n",
"Locke Terry O'Quinn True\n",
"Sawyer Josh Holloway True\n",
"Walt Malcolm David Kelley False"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.read_json(\"lost.json\").set_index(\"Character\").sort_index()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Task\n",
"\n",
"* Read in `nest-data.csv` to `DataFrame`; call it `df`\n",
"* Get to know it"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"id,Nodes,Tasks/Node,Thread/Task,Runtime Program / s,Scale,Plastic,Avg. Neuron Build Time / s,Min. Edge Build Time / s,Max. Edge Build Time / s,Min. Init. Time / s,Max. Init. Time / s,Presim. Time / s,Sim. Time / s,Virt. Memory (Sum) / kB,Local Spike Counter (Sum),Average Rate (Sum),Number of Neurons,Number of Connections,Min. Delay,Max. Delay\n",
"5,1,2,4,420.42,10,true,0.29,88.12,88.18,1.14,1.20,17.26,311.52,46560664.00,825499,7.48,112500,1265738500,1.5,1.5\n",
"5,1,4,4,200.84,10,true,0.15,46.03,46.34,0.70,1.01,7.87,142.97,46903088.00,802865,7.03,112500,1265738500,1.5,1.5\n"
]
}
],
"source": [
"!cat nest-data.csv | head -3"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>Nodes</th>\n",
" <th>Tasks/Node</th>\n",
" <th>Threads/Task</th>\n",
" <th>Runtime Program / s</th>\n",
" <th>Scale</th>\n",
" <th>Plastic</th>\n",
" <th>Avg. Neuron Build Time / s</th>\n",
" <th>Min. Edge Build Time / s</th>\n",
" <th>Max. Edge Build Time / s</th>\n",
" <th>...</th>\n",
" <th>Max. Init. Time / s</th>\n",
" <th>Presim. Time / s</th>\n",
" <th>Sim. Time / s</th>\n",
" <th>Virt. Memory (Sum) / kB</th>\n",
" <th>Local Spike Counter (Sum)</th>\n",
" <th>Average Rate (Sum)</th>\n",
" <th>Number of Neurons</th>\n",
" <th>Number of Connections</th>\n",
" <th>Min. Delay</th>\n",
" <th>Max. Delay</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>420.42</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.29</td>\n",
" <td>88.12</td>\n",
" <td>88.18</td>\n",
" <td>...</td>\n",
" <td>1.20</td>\n",
" <td>17.26</td>\n",
" <td>311.52</td>\n",
" <td>46560664.0</td>\n",
" <td>825499</td>\n",
" <td>7.48</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>200.84</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.15</td>\n",
" <td>46.03</td>\n",
" <td>46.34</td>\n",
" <td>...</td>\n",
" <td>1.01</td>\n",
" <td>7.87</td>\n",
" <td>142.97</td>\n",
" <td>46903088.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" <td>202.15</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.28</td>\n",
" <td>47.98</td>\n",
" <td>48.48</td>\n",
" <td>...</td>\n",
" <td>1.20</td>\n",
" <td>7.95</td>\n",
" <td>142.81</td>\n",
" <td>47699384.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" <td>8</td>\n",
" <td>89.57</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.15</td>\n",
" <td>20.41</td>\n",
" <td>23.21</td>\n",
" <td>...</td>\n",
" <td>3.04</td>\n",
" <td>3.19</td>\n",
" <td>60.31</td>\n",
" <td>46813040.0</td>\n",
" <td>821491</td>\n",
" <td>7.23</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>164.16</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.20</td>\n",
" <td>40.03</td>\n",
" <td>41.09</td>\n",
" <td>...</td>\n",
" <td>1.58</td>\n",
" <td>6.08</td>\n",
" <td>114.88</td>\n",
" <td>46937216.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 21 columns</p>\n",
"</div>"
],
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
"text/plain": [
" id Nodes Tasks/Node Threads/Task Runtime Program / s Scale Plastic \\\n",
"0 5 1 2 4 420.42 10 True \n",
"1 5 1 4 4 200.84 10 True \n",
"2 5 1 2 8 202.15 10 True \n",
"3 5 1 4 8 89.57 10 True \n",
"4 5 2 2 4 164.16 10 True \n",
"\n",
" Avg. Neuron Build Time / s Min. Edge Build Time / s \\\n",
"0 0.29 88.12 \n",
"1 0.15 46.03 \n",
"2 0.28 47.98 \n",
"3 0.15 20.41 \n",
"4 0.20 40.03 \n",
"\n",
" Max. Edge Build Time / s ... Max. Init. Time / s Presim. Time / s \\\n",
"0 88.18 ... 1.20 17.26 \n",
"1 46.34 ... 1.01 7.87 \n",
"2 48.48 ... 1.20 7.95 \n",
"3 23.21 ... 3.04 3.19 \n",
"4 41.09 ... 1.58 6.08 \n",
"\n",
" Sim. Time / s Virt. Memory (Sum) / kB Local Spike Counter (Sum) \\\n",
"0 311.52 46560664.0 825499 \n",
"1 142.97 46903088.0 802865 \n",
"2 142.81 47699384.0 802865 \n",
"3 60.31 46813040.0 821491 \n",
"4 114.88 46937216.0 802865 \n",
"\n",
" Average Rate (Sum) Number of Neurons Number of Connections Min. Delay \\\n",
"0 7.48 112500 1265738500 1.5 \n",
"1 7.03 112500 1265738500 1.5 \n",
"2 7.03 112500 1265738500 1.5 \n",
"3 7.23 112500 1265738500 1.5 \n",
"4 7.03 112500 1265738500 1.5 \n",
"\n",
" Max. Delay \n",
"0 1.5 \n",
"1 1.5 \n",
"2 1.5 \n",
"3 1.5 \n",
"4 1.5 \n",
"\n",
"[5 rows x 21 columns]"
]
},
"execution_count": 170,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv(\"nest-data.csv\")\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Read CSV Options\n",
"\n",
"* See also full [API documentation](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)\n",
"* Important parameters\n",
" - `sep`: Set separator (for example `:` instead of `,`)\n",
" - `header`: Specify info about headers for columns; able to use multi-index for columns!\n",
" - `names`: Alternative to `header` – provide your own column titles\n",
" - `usecols`: Don't read whole set of columns, but only these; works with any list (`range(0:20:2)`)…\n",
" - `skiprows`: Don't read in these rows\n",
" - `na_values`: What string(s) to recognize as `N/A` values (which will be ignored during operations on data frame)\n",
" - `parse_dates`: Try to parse dates in CSV; different behaviours as to provided data structure; optionally used together with `date_parser`\n",
" - `compression`: Treat input file as compressed file (\"infer\", \"gzip\", \"zip\", …)\n",
" - `decimal`: Decimal point divider – for German data…\n",
" \n",
"```python\n",
"pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='\"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Slicing of Data Frames\n",
"\n",
"### Slicing Columns\n",
"\n",
"* Use square-bracket operators to slice data frame: `[]`\n",
" * Use column name to select column\n",
" * Also: Slice horizontally\n",
"* Example: Select only columnn `C` from `df_demo`"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-2.718282</td>\n",
" <td>This</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"0 1.2 2017-05-03 -2.718282 This Same\n",
"1 1.2 2017-05-03 1.718282 column Same\n",
"2 1.2 2017-05-03 -1.304068 has Same"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 -2.718282\n",
"1 1.718282\n",
"2 -1.304068\n",
"3 0.986231\n",
"4 -0.718282\n",
"Name: C, dtype: float64"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo[\"C\"]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Select more than one column by providing list `[]` to slice operator `[]`\n",
"* *You usually end up forgett one of the brackets…*\n",
"* Example: Select list of columns `A` and `C`, `[\"A\", \"C\"]` from `df_demo`"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>C</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.2</td>\n",
" <td>-2.718282</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>1.718282</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>-1.304068</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.2</td>\n",
" <td>0.986231</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.2</td>\n",
" <td>-0.718282</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A C\n",
"0 1.2 -2.718282\n",
"1 1.2 1.718282\n",
"2 1.2 -1.304068\n",
"3 1.2 0.986231\n",
"4 1.2 -0.718282"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo[[\"A\", \"C\"]]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Slicing of Data Frames\n",
"\n",
"### Slicing rows\n",
"\n",
"* Use numberical values to slice into rows\n",
"* Use ranges just like with Python lists"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"1 1.2 2017-05-03 1.718282 column Same\n",
"2 1.2 2017-05-03 -1.304068 has Same"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo[1:3]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Get a certain range as **per the current sort structure**"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"1 1.2 2018-02-26 1.718282 column Same\n",
"2 1.2 2018-02-26 -1.304068 has Same"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.iloc[1:3]"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>0.986231</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"1 1.2 2018-02-26 1.718282 column Same\n",
"3 1.2 2018-02-26 0.986231 entries Same"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.iloc[1:6:2]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Attention: `.iloc[]` location might change after re-sorting!"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-0.718282</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"2 1.2 2017-05-03 -1.304068 has Same\n",
"4 1.2 2017-05-03 -0.718282 entries Same"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.sort_values(\"C\").iloc[1:3]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* One more row-slicing option: `.loc[]`\n",
"* See the difference with a *proper* index (and not the auto-generated default index from before)"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>E</th>\n",
" </tr>\n",
" <tr>\n",
" <th>D</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>This</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-2.718282</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>column</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>1.718282</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>has</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-1.304068</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>entries</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>0.986231</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>entries</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-0.718282</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C E\n",
"D \n",
"This 1.2 2017-05-03 -2.718282 Same\n",
"column 1.2 2017-05-03 1.718282 Same\n",
"has 1.2 2017-05-03 -1.304068 Same\n",
"entries 1.2 2017-05-03 0.986231 Same\n",
"entries 1.2 2017-05-03 -0.718282 Same"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo_indexed = df_demo.set_index(\"D\")\n",
"df_demo_indexed"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>E</th>\n",
" </tr>\n",
" <tr>\n",
" <th>D</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>entries</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>0.986231</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>entries</th>\n",
" <td>1.2</td>\n",
" <td>2017-05-03</td>\n",
" <td>-0.718282</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C E\n",
"D \n",
"entries 1.2 2017-05-03 0.986231 Same\n",
"entries 1.2 2017-05-03 -0.718282 Same"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo_indexed.loc[\"entries\"]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Advanced Slicing: Logical Slicing\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 490,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" <th>F</th>\n",
" <th>G</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" <td>0.518282</td>\n",
" <td>2.952492</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>0.986231</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" <td>-0.213769</td>\n",
" <td>0.972652</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E F G\n",
"1 1.2 2018-02-26 1.718282 column Same 0.518282 2.952492\n",
"3 1.2 2018-02-26 0.986231 entries Same -0.213769 0.972652"
]
},
"execution_count": 490,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo[df_demo[\"C\"] > 0]"
]
},
{
"cell_type": "code",
"execution_count": 495,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" <th>F</th>\n",
" <th>G</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-0.718282</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" <td>-1.918282</td>\n",
" <td>0.515929</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E F G\n",
"4 1.2 2018-02-26 -0.718282 entries Same -1.918282 0.515929"
]
},
"execution_count": 495,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo[(df_demo[\"C\"] < 0) & (df_demo[\"D\"] == \"entries\")]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Adding to Existing Data Frame\n",
"\n",
"* Add new columns with `frame[\"new col\"] = something` or `.insert()`\n",
"* Add new rows with `frame.append()`\n",
"* Combine data frames\n",
" - Concat: Combine several data frames along an axis\n",
" - Merge: Combine data frames on basis of common columns; database-style\n",
" - (Join)\n",
" - See user guide [on merging](https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html)"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-2.718282</td>\n",
" <td>This</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E\n",
"0 1.2 2018-02-26 -2.718282 This Same\n",
"1 1.2 2018-02-26 1.718282 column Same\n",
"2 1.2 2018-02-26 -1.304068 has Same"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" <th>F</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-2.718282</td>\n",
" <td>This</td>\n",
" <td>Same</td>\n",
" <td>-3.918282</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" <td>0.518282</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" <td>-2.504068</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E F\n",
"0 1.2 2018-02-26 -2.718282 This Same -3.918282\n",
"1 1.2 2018-02-26 1.718282 column Same 0.518282\n",
"2 1.2 2018-02-26 -1.304068 has Same -2.504068"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo[\"F\"] = df_demo[\"C\"] - df_demo[\"A\"]\n",
"df_demo.head(3)"
]
},
{
"cell_type": "code",
"execution_count": 440,
"metadata": {},
"outputs": [],
"source": [
"df_demo.insert(len(df_demo) + 1, \"G\", df_demo[\"C\"] ** 2)"
]
},
{
"cell_type": "code",
"execution_count": 441,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" <th>F</th>\n",
" <th>G</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" <td>-2.504068</td>\n",
" <td>1.700594</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>0.986231</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" <td>-0.213769</td>\n",
" <td>0.972652</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-0.718282</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" <td>-1.918282</td>\n",
" <td>0.515929</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E F G\n",
"2 1.2 2018-02-26 -1.304068 has Same -2.504068 1.700594\n",
"3 1.2 2018-02-26 0.986231 entries Same -0.213769 0.972652\n",
"4 1.2 2018-02-26 -0.718282 entries Same -1.918282 0.515929"
]
},
"execution_count": 441,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.tail(3)"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>A</th>\n",
" <th>B</th>\n",
" <th>C</th>\n",
" <th>D</th>\n",
" <th>E</th>\n",
" <th>F</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-2.718282</td>\n",
" <td>This</td>\n",
" <td>Same</td>\n",
" <td>-3.918282</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>1.718282</td>\n",
" <td>column</td>\n",
" <td>Same</td>\n",
" <td>0.518282</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-1.304068</td>\n",
" <td>has</td>\n",
" <td>Same</td>\n",
" <td>-2.504068</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>0.986231</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" <td>-0.213769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.2</td>\n",
" <td>2018-02-26</td>\n",
" <td>-0.718282</td>\n",
" <td>entries</td>\n",
" <td>Same</td>\n",
" <td>-1.918282</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1.3</td>\n",
" <td>2018-02-27</td>\n",
" <td>-0.777000</td>\n",
" <td>has it?</td>\n",
" <td>Same</td>\n",
" <td>23.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" A B C D E F\n",
"0 1.2 2018-02-26 -2.718282 This Same -3.918282\n",
"1 1.2 2018-02-26 1.718282 column Same 0.518282\n",
"2 1.2 2018-02-26 -1.304068 has Same -2.504068\n",
"3 1.2 2018-02-26 0.986231 entries Same -0.213769\n",
"4 1.2 2018-02-26 -0.718282 entries Same -1.918282\n",
"5 1.3 2018-02-27 -0.777000 has it? Same 23.000000"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_demo.append(\n",
" {\"A\": 1.3, \"B\": pd.Timestamp(\"2018-02-27\"), \"C\": -0.777, \"D\": \"has it?\", \"E\": \"Same\", \"F\": 23},\n",
" ignore_index=True\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Combining Frames\n",
"\n",
"* First, create some simpler data frame to show `.concat()` and `.merge()`"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Key</th>\n",
" <th>Value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>First</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Second</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Key Value\n",
"0 First 1\n",
"1 Second 1"
]
},
"execution_count": 138,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_1 = pd.DataFrame({\"Key\": [\"First\", \"Second\"], \"Value\": [1, 1]})\n",
"df_1"
]
},
{
"cell_type": "code",
"execution_count": 154,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Key</th>\n",
" <th>Value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>First</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Second</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Key Value\n",
"0 First 2\n",
"1 Second 2"
]
},
"execution_count": 154,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_2 = pd.DataFrame({\"Key\": [\"First\", \"Second\"], \"Value\": [2, 2]})\n",
"df_2"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Concatenate list of data frame vertically (`axis=0`)"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Key</th>\n",
" <th>Value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>First</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Second</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>First</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Second</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Key Value\n",
"0 First 1\n",
"1 Second 1\n",
"0 First 2\n",
"1 Second 2"
]
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat([df_1, df_2])"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Same, but re-index"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Key</th>\n",
" <th>Value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>First</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Second</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>First</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Second</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Key Value\n",
"0 First 1\n",
"1 Second 1\n",
"2 First 2\n",
"3 Second 2"
]
},
"execution_count": 141,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat([df_1, df_2], ignore_index=True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Concat, but horizontally"
]
},
{
"cell_type": "code",
"execution_count": 152,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Key</th>\n",
" <th>Value</th>\n",
" <th>Key</th>\n",
" <th>Value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>First</td>\n",
" <td>1</td>\n",
" <td>First</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Second</td>\n",
" <td>1</td>\n",
" <td>Second</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Key Value Key Value\n",
"0 First 1 First 2\n",
"1 Second 1 Second 2"
]
},
"execution_count": 152,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat([df_1, df_2], axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Merge on common column"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Key</th>\n",
" <th>Value_x</th>\n",
" <th>Value_y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>First</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Second</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Key Value_x Value_y\n",
"0 First 1 2\n",
"1 Second 1 2"
]
},
"execution_count": 162,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.merge(df_1, df_2, on=\"Key\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Task\n",
"\n",
"* Add a column to the Nest data frame called `Virtual Processes` which is the total number of threads across all nodes (i.e. the product of threads per task and tasks per node and nodes)"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>Nodes</th>\n",
" <th>Tasks/Node</th>\n",
" <th>Threads/Task</th>\n",
" <th>Runtime Program / s</th>\n",
" <th>Scale</th>\n",
" <th>Plastic</th>\n",
" <th>Avg. Neuron Build Time / s</th>\n",
" <th>Min. Edge Build Time / s</th>\n",
" <th>Max. Edge Build Time / s</th>\n",
" <th>...</th>\n",
" <th>Presim. Time / s</th>\n",
" <th>Sim. Time / s</th>\n",
" <th>Virt. Memory (Sum) / kB</th>\n",
" <th>Local Spike Counter (Sum)</th>\n",
" <th>Average Rate (Sum)</th>\n",
" <th>Number of Neurons</th>\n",
" <th>Number of Connections</th>\n",
" <th>Min. Delay</th>\n",
" <th>Max. Delay</th>\n",
" <th>Virtual Processes</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>420.42</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.29</td>\n",
" <td>88.12</td>\n",
" <td>88.18</td>\n",
" <td>...</td>\n",
" <td>17.26</td>\n",
" <td>311.52</td>\n",
" <td>46560664.0</td>\n",
" <td>825499</td>\n",
" <td>7.48</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>200.84</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.15</td>\n",
" <td>46.03</td>\n",
" <td>46.34</td>\n",
" <td>...</td>\n",
" <td>7.87</td>\n",
" <td>142.97</td>\n",
" <td>46903088.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" <td>202.15</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.28</td>\n",
" <td>47.98</td>\n",
" <td>48.48</td>\n",
" <td>...</td>\n",
" <td>7.95</td>\n",
" <td>142.81</td>\n",
" <td>47699384.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" <td>8</td>\n",
" <td>89.57</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.15</td>\n",
" <td>20.41</td>\n",
" <td>23.21</td>\n",
" <td>...</td>\n",
" <td>3.19</td>\n",
" <td>60.31</td>\n",
" <td>46813040.0</td>\n",
" <td>821491</td>\n",
" <td>7.23</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>164.16</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.20</td>\n",
" <td>40.03</td>\n",
" <td>41.09</td>\n",
" <td>...</td>\n",
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
" <td>6.08</td>\n",
" <td>114.88</td>\n",
" <td>46937216.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>16</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 22 columns</p>\n",
"</div>"
],
"text/plain": [
" id Nodes Tasks/Node Threads/Task Runtime Program / s Scale Plastic \\\n",
"0 5 1 2 4 420.42 10 True \n",
"1 5 1 4 4 200.84 10 True \n",
"2 5 1 2 8 202.15 10 True \n",
"3 5 1 4 8 89.57 10 True \n",
"4 5 2 2 4 164.16 10 True \n",
"\n",
" Avg. Neuron Build Time / s Min. Edge Build Time / s \\\n",
"0 0.29 88.12 \n",
"1 0.15 46.03 \n",
"2 0.28 47.98 \n",
"3 0.15 20.41 \n",
"4 0.20 40.03 \n",
"\n",
" Max. Edge Build Time / s ... Presim. Time / s Sim. Time / s \\\n",
"0 88.18 ... 17.26 311.52 \n",
"1 46.34 ... 7.87 142.97 \n",
"2 48.48 ... 7.95 142.81 \n",
"3 23.21 ... 3.19 60.31 \n",
"4 41.09 ... 6.08 114.88 \n",
"\n",
" Virt. Memory (Sum) / kB Local Spike Counter (Sum) Average Rate (Sum) \\\n",
"0 46560664.0 825499 7.48 \n",
"1 46903088.0 802865 7.03 \n",
"2 47699384.0 802865 7.03 \n",
"3 46813040.0 821491 7.23 \n",
"4 46937216.0 802865 7.03 \n",
"\n",
" Number of Neurons Number of Connections Min. Delay Max. Delay \\\n",
"0 112500 1265738500 1.5 1.5 \n",
"1 112500 1265738500 1.5 1.5 \n",
"2 112500 1265738500 1.5 1.5 \n",
"3 112500 1265738500 1.5 1.5 \n",
"4 112500 1265738500 1.5 1.5 \n",
"\n",
" Virtual Processes \n",
"0 8 \n",
"1 16 \n",
"2 16 \n",
"3 32 \n",
"4 16 \n",
"\n",
"[5 rows x 22 columns]"
]
},
"execution_count": 174,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Virtual Processes\"] = df[\"Nodes\"] * df[\"Tasks/Node\"] * df[\"Threads/Task\"]\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {
"exercise": "solution"
},
"outputs": [
{
"data": {
"text/plain": [
"Index(['id', 'Nodes', 'Tasks/Node', 'Threads/Task', 'Runtime Program / s',\n",
" 'Scale', 'Plastic', 'Avg. Neuron Build Time / s',\n",
" 'Min. Edge Build Time / s', 'Max. Edge Build Time / s',\n",
" 'Min. Init. Time / s', 'Max. Init. Time / s', 'Presim. Time / s',\n",
" 'Sim. Time / s', 'Virt. Memory (Sum) / kB', 'Local Spike Counter (Sum)',\n",
" 'Average Rate (Sum)', 'Number of Neurons', 'Number of Connections',\n",
" 'Min. Delay', 'Max. Delay', 'Virtual Processes'],\n",
" dtype='object')"
]
},
"execution_count": 176,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Aside: Plotting without Pandas\n",
"\n",
"### Matplotlib 101\n",
"\n",
"* Matplotlib: de-facto standard for plotting in Python\n",
"* Main interface: `pyplot`; provides MATLAB-like interface\n",
"* Better: Use object-oriented API with `Figure` and `Axis`\n",
"* Great integration into Jupyter Notebooks\n",
"* Since v. 3: Only support for Python 3\n",
"* → https://matplotlib.org/"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"x = np.linspace(0, 2*np.pi, 400)\n",
"y = np.sin(x**2)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax.plot(x, y)\n",
"ax.set_title('Use like this')\n",
"ax.set_xlabel(\"Numbers again\");\n",
"ax.set_ylabel(\"$\\sqrt{x}$\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Plot multiple lines into one canvas\n",
"* Call `ax.plot()` multiple times"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [],
"source": [
"y2 = y/np.exp(y*1.5)"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax.plot(x, y, label=\"y\")\n",
"ax.plot(x, y2, label=\"y2\")\n",
"ax.legend()\n",
"ax.set_title(\"This plot makes no sense\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Task\n",
"\n",
"* Sort the data frame by the virtual proccesses\n",
"* Plot `\"Presim. Time / s\"` and `\"Sim. Time / s\"` of our data frame `df` as a function of the virtual processes\n",
"* Use a dashed, red line for `\"Presim. Time / s\"`, a blue line for `\"Sim. Time / s\"` (see [API description](https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot))\n",
"* Don't forget to label your axes and to add a legend"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"df.sort_values([\"Virtual Processes\", \"Nodes\", \"Tasks/Node\", \"Threads/Task\"], inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {
"exercise": "solution"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEKCAYAAAAB0GKPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xl8VdW5//HPQwgJCIqSaJHBgOIAgoFGxOKQioiiFfWK0ksVbr1X2+rtVaut3taK/sSrVdFarcNVXmC1WpwqdWSoQ/WqGChaBJSoKFCUQUAZJfD8/lj7kJPknOSQ5OScJN/367Vfe5+19vDs7OQ8WXtY29wdERGRurTJdAAiItI8KGGIiEhKlDBERCQlShgiIpISJQwREUmJEoaIiKRECUNERFKihCEiIilRwhARkZS0zXQADVFQUOBFRUWZDkNEpFmZO3fuGncv3N3lmnXCKCoqoqysLNNhiIg0K2b2aX2W0ykpERFJiRKGiIikRAlDRERS0qyvYYhI49u+fTvLly9n69atmQ5FGig/P5/u3buTm5vbKOtTwhCRKpYvX06nTp0oKirCzDIdjtSTu7N27VqWL19Or169GmWdOiUlIlVs3bqVLl26KFk0c2ZGly5dGrWlqIQhIjUoWbQMjX0cW2XCWLAAfvlLWLs205GIiDQfrTJhLFkCN94In32W6UhEJJGcnByKi4s5/PDDGT16NJs3b27wOu+9914eeuihBq/n4osvpri4mL59+9K+fXuKi4spLi7miSee4Ne//jWzZs1q8DYSuemmm3jkkUfSsu5UtcqL3gUFYbx6dWbjEJHE2rdvz/z58wEYO3Ys9957L5dffvmuenfH3WnTJvX/eX/0ox81Smx33303AEuXLuW0007bFSfA2Wef3SjbSOSll15i2rRpaVt/KlplC6Mw6kFFCUMk+x177LGUl5ezdOlSDjnkEM4//3wOP/xwli1bxowZMzj66KMZNGgQo0ePZuPGjQBcddVV9O3blwEDBnDFFVcAMGHCBG699VYASktLueyyyygpKeGwww7jnXfe4ayzzqJPnz786le/qnes48eP54knngBC10VXX301xcXFlJSUMG/ePEaMGMGBBx7Ivffeu2uZW265hSOPPJIBAwZw7bXXJlzvV199xTfffENhYdXun1599dVdLZyBAwfy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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax.plot(df[\"Virtual Processes\"], df[\"Presim. Time / s\"], linestyle=\"dashed\", color=\"red\")\n",
"ax.plot(df[\"Virtual Processes\"], df[\"Sim. Time / s\"], \"-b\")\n",
"ax.set_xlabel(\"Virtual Process\")\n",
"ax.set_ylabel(\"Time / s\")\n",
"ax.legend();"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Plotting with Pandas\n",
"\n",
"* Each data frame hast a `.plot()` function (see [API](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.html))\n",
"* Plots with Matplotlib\n",
"* Important API options:\n",
" - `kind`: `line` (default), `bar[h]`, `hist`, `box`, `kde`, `scatter`, `hexbin`\n",
" - `subplots`: Make a sub-plot for each column (good together with `sharex`, `sharey`)\n",
" - `figsize`\n",
" - `grid`: Add a grid to plot (use Matplotlib options)\n",
" - `style`: Line style per column (accepts list or dict)\n",
" - `logx`, `logy`, `loglog`: Logarithmic plots\n",
" - `xticks`, `yticks`: Use values for ticks\n",
" - `xlim`, `ylim`: Limits of axes\n",
" - `yerr`, `xerr`: Add uncertainty to data points\n",
" - `stacked`: Stack a bar plot\n",
" - `secondary_y`: Use a secondary `y` axis for this plot\n",
" - Labeling\n",
" * `title`: Add title to plot (Use a list of strings if `subplots=True`)\n",
" * `legend`: Add a legend\n",
" * `table`: If `true`, add table of data under plot\n",
" - `**kwds`: Every non-parsed keyword is passed through to Matplotlib's plotting methods"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Either slice and plot…"
]
},
{
"cell_type": "code",
"execution_count": 247,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x144 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[\"C\"].plot(figsize=(10, 2));"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* … or plot and select"
]
},
{
"cell_type": "code",
"execution_count": 248,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x144 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo.plot(y=\"C\", figsize=(10, 2));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* I prefer slicing first, as it allows for further operations on the sliced data frame"
]
},
{
"cell_type": "code",
"execution_count": 228,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[\"C\"].plot(kind=\"bar\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* There are pseudo-sub-functions for each of the plot `kind`s\n",
"* I prefer to just call `.plot(kind=\"smthng\")`"
]
},
{
"cell_type": "code",
"execution_count": 206,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[\"C\"].plot.bar();"
]
},
{
"cell_type": "code",
"execution_count": 240,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[\"C\"].plot(kind=\"bar\", legend=True, figsize=(12, 4), ylim=(-1, 3), title=\"This is a C plot\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Task\n",
"\n",
"Use the NEST data frame `df` to:\n",
"\n",
"1. Make the virtual processes the index of the data frame (`.set_index()`)\n",
"2. Plot `\"Presim. Program / s\"` and `\"Sim. Time / s`\" individually\n",
"3. Plot them onto one common canvas!\n",
"4. Make them have the same line colors and styles as before\n",
"5. Add a legend, add missing labels"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"df.set_index(\"Virtual Processes\", inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 243,
"metadata": {
"exercise": "solution"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAl0AAADTCAYAAAC7p6aqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3X+cXHV97/HXe2Z2Nz93k8CSZJdoKqT8CiWlC7VXpVArAlqxrdVwey229lJ9YFtsvb22fdxWbXsv9ofeVixIKwV7KdWrptKKCkUU5UJliUASfoNBsgnJQshufu/uzOf+cc4kk81MdrMzmV95Px+Pfcw53/M953znHMe8+Z7vOUcRgZmZmZkdW5lGN8DMzMzseODQZWZmZlYHDl1mZmZmdeDQZWZmZlYHDl1mZmZmdeDQZWZmZlYHDl1mZmZmdeDQZWZmZlYHDl1mZmZmdZBrdAPKOfHEE2P58uWNboaZmZnZlB566KGXIqJ3qnpNGbqWL1/O4OBgo5thZmZmNiVJz0+n3pShS9JNwFuBbRGxMi37PHBaWmUBsCMiVpVZdyOwE8gDExExMK3Wm5mZmbWZ6fR03QxcB3yuWBAR7ypOS/orYOQI618UES/NtIFmZmZm7WDK0BUR90paXm6ZJAHvBH6mts0yMzMzay/V3r34BmBrRDxdYXkAd0p6SNJVR9qQpKskDUoaHB4errJZZmZmZs2l2tB1BXDbEZa/PiLOBS4FrpZ0QaWKEXFjRAxExMD8BYuqbJaZmZlZc5lx6JKUA34B+HylOhExlH5uA9YA509n27vH8jNtlpmZmVlTqqan62eBJyJiU7mFkuZKml+cBi4G1k9nw/scuszMzKzNTBm6JN0G3A+cJmmTpPemi1Yz6dKipD5Jd6Szi4HvSnoE+B7w1Yj4+nQatWfcocvMzMzaiyKi0W04zKylK2LkhSfoymUb3RQzMzOzI5L00HSeRdqU714M4OmtuxrdDDMzM7OaacrQBbB+6EjPWzUzMzNrLU0ZujIS6xy6zMzMrI00Zeia3ZFl/ebRRjfDzMzMrGaaM3R1Znl8yyjj+UKjm2JmZmZWE80ZujqyjE0UeHbYg+nNzMysPTRn6OpMHhWxbpPHdZmZmVl7aMrQ1ZXLMKczywaP6zIzM7M20ZShC+DMpd1+bISZmZm1jaYNXSv7e3hsyyj5QvM9Md/MzMzsaDV16NozlucHL3kwvZmZmbW+Jg5d3QCsH/K4LjMzM2t9TRu6Tu2dR1cu43FdZmZm1hamDF2SbpK0TdL6krKPSBqS9HD6d1mFdS+R9KSkZyR9+GgalstmOGNpN+s3O3SZmZlZ65tOT9fNwCVlyj8ZEavSvzsmL5SUBT4NXAqcCVwh6cyjadzK/m42DI1S8GB6MzMza3FThq6IuBfYPoNtnw88ExHPRcQY8M/A5UezgZV9PezcP8EPt++Zwe7NzMzMmkc1Y7o+IOnR9PLjwjLL+4EXSuY3pWVlSbpK0qCkweHhYSC5gxHwJUYzMzNreTMNXdcDpwCrgC3AX1XbkIi4MSIGImKgt7cXgB9dPJ+OrHwHo5mZmbW8GYWuiNgaEfmIKAB/R3IpcbIhYFnJ/Mlp2bR15jKctmQ+G9zTZWZmZi1uRqFL0tKS2Z8H1pep9iCwQtKPSOoEVgO3H+2+Vvb1sG5ohAgPpjczM7PWNZ1HRtwG3A+cJmmTpPcCfy5pnaRHgYuAD6Z1+yTdARARE8AHgG8AjwNfiIgNR9vAs/p72LFnnKEde492VTMzM7OmkZuqQkRcUab4sxXqbgYuK5m/AzjscRJH4+ziYPqhUU5eOKeaTZmZmZk1TNM+kb7o9CXzyWbkcV1mZmbW0po+dM3qyLLipHms8+uAzMzMrIU1fegCOKuvh/UeTG9mZmYtrCVC18r+bl7aNca2nfsb3RQzMzOzGWmJ0HVwML0vMZqZmVlraonQdcbSbiQ8rsvMzMxaVkuErrldOV5z4ly/DsjMzMxaVkuELkhefu3HRpiZmVmrapnQdXZ/D1tG9vHSLg+mNzMzs9bTMqHrrL5kMP2Gzb7EaGZmZq2nZULXmX3dgO9gNDMzs9bUMqGrZ3YHrz5hjkOXmZmZtaSWCV2QDKZf78H0ZmZm1oKmDF2SbpK0TdL6krK/kPSEpEclrZG0oMK6GyWtk/SwpMFqG7uyr4cXtu9lZM94tZsyMzMzq6vp9HTdDFwyqewuYGVE/BjwFPD7R1j/oohYFREDM2viQSv703Fd7u0yMzOzFjNl6IqIe4Htk8rujIiJdPYB4ORj0LbDrOzz64DMzMysNdViTNevAV+rsCyAOyU9JOmqI21E0lWSBiUNDg8Pl62zcG4n/Qtms96PjTAzM7MWU1XokvSHwARwa4Uqr4+Ic4FLgaslXVBpWxFxY0QMRMRAb29vxX2u7O9mg3u6zMzMrMXMOHRJeg/wVuCXIyLK1YmIofRzG7AGOH+m+yta2dfDcy/tZuc+D6Y3MzOz1jGj0CXpEuD3gLdFxJ4KdeZKml+cBi4G1perezRW9ifjuh7zJUYzMzNrIdN5ZMRtwP3AaZI2SXovcB0wH7grfRzEDWndPkl3pKsuBr4r6RHge8BXI+Lr1Ta4GLo8rsvMzMxaSW6qChFxRZniz1aouxm4LJ1+DjinqtaV0Tu/i8XdXR7XZWZmZi2lpZ5IX7Syr4d1Dl1mZmbWQloydJ3V38Ozw7vYMzYxdWUzMzOzJtCSoevs/h4KAY9v2dnoppiZmZlNS0uGruLrgDb4dUBmZmbWIloydC3pnsUJcztZt8mhy8zMzFpDS4YuSZzV3+PHRpiZmVnLaMnQBXB2fzdPb93JvvF8o5tiZmZmNqWWDV0r+3qYKARPbfVgejMzM2t+rRu6ik+mH/IlRjMzM2t+LRu6Tl44m57ZHX5IqpmZmbWElg1dkljZ3+3HRpiZmVlLaNnQBcm4rie27GQ8X2h0U8zMzMyOaFqhS9JNkrZJWl9StkjSXZKeTj8XVlj3yrTO05KurFXDIXkd0Fi+wNNbd9Vys2ZmZmY1N92erpuBSyaVfRi4OyJWAHen84eQtAj4Y+AngfOBP64UzmZiZV/yZPr1HtdlZmZmTW5aoSsi7gW2Tyq+HLglnb4FeHuZVd8M3BUR2yPiFeAuDg9vM7b8hLnM68qx3uO6zMzMrMlVM6ZrcURsSadfBBaXqdMPvFAyvyktO4ykqyQNShocHh6eVgMyGXFmX7d7uszMzKzp1WQgfUQEEFVu48aIGIiIgd7e3mmvt7Kvh8e2jJIvVLV7MzMzs2OqmtC1VdJSgPRzW5k6Q8CykvmT07KaWdnfzb7xAs8OezC9mZmZNa9qQtftQPFuxCuBr5Sp8w3gYkkL0wH0F6dlNXPwyfS+xGhmZmbNa7qPjLgNuB84TdImSe8FrgXeJOlp4GfTeSQNSPp7gIjYDvwJ8GD697G0rGZO6Z3HrI6MXwdkZmZmTS03nUoRcUWFRW8sU3cQ+PWS+ZuAm2bUumnIZsSZS7t9B6OZmZk1tZZ+In3Ryv4eHts8SsGD6c3MzKxJtUfo6uth1/4JNr68u9FNMTMzMyurPUJXcTD9Zo/rMjMzs+bUFqFrxeJ5dGYzbPAdjGZmZtak2iJ0dWQznL50vgfTm5mZWdNqi9AFcFZfD+uHRkkejm9mZmbWXNomdJ3d38PI3nE2vbK30U0xMzMzO0zbhK6V/d2An0xvZmZmzaltQtePLp5PLiOP6zIzM7Om1Daha1ZHlhWL57POrwMyMzOzJtQ2oQvg7P5uNgyNeDC9mZmZNZ22Cl0r+3t4efcYL47ua3RTzMzMzA7RVqHr1JPmAfDcsF8HZGZmZs1lxqFL0mmSHi75G5V0zaQ6F0oaKanzR9U3ubLObPJ1Cr68aGZmZk0mN9MVI+JJYBWApCwwBKwpU/U7EfHWme7HzMzMrB3U6vLiG4FnI+L5Gm3PzMzMrK3UKnStBm6rsOynJD0i6WuSzqq0AUlXSRqUNDg8PFyjZpmZmZk1h6pDl6RO4G3A/y2zeC3w6og4B/gU8C+VthMRN0bEQEQM9Pb2VtssMzMzs6ZSi56uS4G1EbF18oKIGI2IXen0HUCHpBNrsE8zMzOzllKL0HUFFS4tSloiSen0+en+Xq7BPs3MzMxayozvXgSQNBd4E/AbJWXvA4iIG4B3AO+XNAHsBVaHHxdvZmZmx6GqQldE7AZOmFR2Q8n0dcB11ezDzMzMrB201RPpzczMzJqVQ5eZmZlZHTh0mZmZmdWBQ5eZmZlZHTh0mZmZmdWBQ5eZmZlZHbRV6MpkBMBf3vkUn3/wh4zuG29wi8zMzMwSbRW6zu7v4fcuOY3RveP89y+t47w//Xd+87bvc8+T25jIFxrdPDMzMzuOqRkfED8wMBCDg4MzXj8iePiFHXx57RD/+uhmduwZ58R5Xbx9VR+/cO7JnNnXXcPWmpmZ2fFM0kMRMTBlvXYMXaX2T+S554lhvrx2E/c8uY3xfHD6kvn84rknc/mqPk7qnlWT/ZiZmdnxyaGrjFd2j/Fvj27mS2uHePiFHWQEr1/Ryy+e28/FZy5hdme25vs0MzOz9ubQNYVnh3exZu0Qa74/xNCOvczrynHpyiW887xlnLd80THdt5mZmbUPh65pKhSC723czpfXbuKOdS+ya/8Ed33wAlYsnl+X/ZuZmVlrm27oqvruRUkbJa2T9LCkw5KSEn8j6RlJj0o6t9p91lImI177mhP483ecw1+vXgXA7rF8g1tlZmZm7SZXo+1cFBEvVVh2KbAi/ftJ4Pr0s+lkpEY3wczMzNpUPZ7TdTnwuUg8ACyQtLQO+zUzMzNrGrUIXQHcKekhSVeVWd4PvFAyvyktO4SkqyQNShocHh6uQbPMzMzMmkctQtfrI+JcksuIV0u6YCYbiYgbI2IgIgZ6e3tr0CwzMzOz5lF16IqIofRzG7AGOH9SlSFgWcn8yWmZmZmZ2XGjqtAlaa6k+cVp4GJg/aRqtwO/kt7F+FpgJCK2VLNfMzMzs1ZT7d2Li4E1Su76ywH/FBFfl/Q+gIi4AbgDuAx4BtgD/GqV+zQzMzNrOVWFroh4DjinTPkNJdMBXF3NfszMzMxaXT0eGWFmZmZ23HPoMjMzM6sDhy4zMzOzOnDoMjMzM6sDhy4zMzOzOnDoMjMzM6sDhy4zMzOzOnDoKiN5tJiZmZlZ7VT7RPq2ks0IgHfccD8L53SwYE4ni+Z0smBOB4vmdrJwbicL53SwcE5n8je3Mymf00H3rA4y6fpmZmZmkzl0lfjJ1yziT96+kq0j+9i+Z4wde8bYvnuM51/ew8Mv7OCVPWOM58v3gmUEPbM72LF3nPUfeTNzu3xozczM7CAngxJduSzvfu2rKy6PCHaP5XlldxLGXtmT/G3fPc6OPWN86pvPAPDNJ7bxc+f01avZZmZm1gIcuo6CJOZ15ZjXlWPZojmHLS+Grlf2jNW7aWZmZtbkPJC+hj52+VkAvO7UExvcEjMzM2s2Mw5dkpZJukfSY5I2SPrtMnUulDQi6eH074+qa25z65nd0egmmJmZWZOq5vLiBPC7EbFW0nzgIUl3RcRjk+p9JyLeWsV+zMzMzFrejHu6ImJLRKxNp3cCjwP9tWqYmZmZWTupyZguScuBHwf+o8zin5L0iKSvSTrrCNu4StKgpMHh4eFaNKthRveON7oJZmZm1mSqDl2S5gFfAq6JiNFJi9cCr46Ic4BPAf9SaTsRcWNEDETEQG9vb7XNaoiTF84hmxHv+swDfPhLj/Lc8K5GN8nMzMyaRFWhS1IHSeC6NSK+PHl5RIxGxK50+g6gQ1Lb3tr3E69eyLc+dCGrz1/Gmu8P8cZPfJurb13L+qGRRjfNzMzMGkwzfc+gJAG3ANsj4poKdZYAWyMiJJ0PfJGk5+uIOx0YGIjBwcEZtatZDO/czz/c9wP+8f7n2bl/gjesOJH3X3gKP/WaE0gOnZmZmbUDSQ9FxMCU9aoIXa8HvgOsAwpp8R8ArwKIiBskfQB4P8mdjnuB34mI/zfVttshdBWN7hvn1gd+yGe/+wNe2rWfVcsW8P4LT+FNZyz2uxrNzMzawDEPXcdSO4Wuon3jeb740CY+c++zvLB9L6eeNI/3/fQpXL6qj46sn1FrZmbWqhy6mtREvsBX123h+m89yxMv7qSvZxb/9YLXsPq8VzG7MzutbUQEO/aMs3XnPl4c2cfW0X1sHd3PZ779LLvH8jz7Py8j6140MzOzuphu6PK7F+ssl81w+ap+3nZOH996cpi//dYzfPRfH+NT33yG9/yn5aw+bxl7x/NJmNq5n60j+3hxtBisitP7GZsoVNzHvvE8c7t8as3MzJqJ/2VuEElcdPpJXHT6STy4cTvXf+tZPnHXU3zirqcOqzurI8OS7lks7p7Fjy9byJKeZHpxd9eB8pO6u/iH+zZy7deeIOOB+mZmZk3HoasJnLd8Eee9ZxGPbxnl3qeGWTS3k8Xdsw6Eq+5ZuaO64/GprTuZ25UjmxFZiUwGMhLZjA58ZiWUgeyk8ozw3ZVmZmbHgENXEzljaTdnLO2e8fqzcsmA/Ms/fV9V7ZBIw1oSworTB8KaRDZzaHlG4gcv7QZg47VvqWr/zW7/RHL5d/OOfbw4upfNO/axZWQvL47s522r+njbOX2NbqKZmTUhh6428s7zlrF0wWzG8wXyhaAQQb4AhQgKhSBf/CwEhSBdfrC8EJSsl5RHWlYsP7DNQ9YL8sGB0PXrtzxI9+wOumd10DP74F/37EPne2Z3MKsj01Q9a2MTBbaO7mPLSBKktozsY8uOvWweKQarfby0a+yw9RbM6WDP/jwQDl1mZlaWQ1cbmdOZ481nLWnY/left4zrvvkMm3fs4/EtOxndO87O/RNHXKczm6F7du5AIFswu4NFc7s4YV4ni+Ymfycc+Oxi0bxO5nZmZxTUJvIFtu7cz5Ydew+Eqs07kjtAt4wkweqlXfuZfENv96wcS3tms3TBLM7uX0BfT3Lpt2/BbJam03M6c7zlb75z1G0yM7Pjh0OX1czrTj2R15166Fue8oVg575xRvYe+je6d2LS/Dij+8YZ3rWfJ1/cycu7x9hf4Q7NzlzmQBA7GMqSoNY9K8eiuV0He6lKgtW2nfsoTApU87pyLO2ZxdIFszl9STdLF8yir2d2GqpmsaRnNvN8J6iZmdWA/zWxYyqbEQvmdLJgTudRrRcR7BnLs333GC/vHmP77v28vGuM7bvHSsqSz40v7+blXWPsGcsfso3ZHdkDIeoNK05kadoztTTtpVrSM4vuWR21/LpmZmYVOXRZU5LE3K4cc7tyLFs0Z1rr/PDlPTw7vCvppeqZTffso7vrs1obNo+yYfMo//jA82SU3DFavBu0OJ2R0IGy8nVUYZ3MUdRJpqeuc9h2qe54ZbMilxGd2Yxfc2VmNolDl7WNV50wh1edML2Adiz9j39Z3+gmNIWMoCOboTObIZcVHdlM+idy6XTngenDl3dmM+QyoiOXoSOTLi+ZLq7XmcuQyyT7iAjG88mNHxOFIF8oMFEIJvKHzufT+YlCctPJRLrOeLFOyTYmJs3nC3HgZpXSsnwhyGZELg2eHen3zmWS71E8Bsl0+j3TdndkDh6j4jZKy8qukxXZTHI8ctnJ2ymtl2yzuKzctrMZNdUNLWbtyqHLrEae+bNL2bF3nIjk8mjxDtFCehdooaRsqjox6bNSncO3e+g+yu+7fDvykwe8HaUguat1LJ+ElPF8gfFCgfGJZHqiUGBsIgkx4/lDp8fzwa79EwfWO2Qb6edEOj2Wr/w2hqkUA0bx80DIySjtpTsYQnJpqMmly7s6MswpWd5Rsrz4OJXSkJZ85zS4pd9n18TEocvS71Rc50BZ+lnlKTkqHZMCYi5bPtAdLD8Y7HKZJBAe2puafmZKe1or9/AWg1/FXuKMDj7OZvJ+yqx7oAc3c+R9ZzNT9yxnMlP1PB/8DkdaPrlN5Y5XsRfb2pNDl1mN5LIZTpzX1ehmtL2IYm9TpKHuYDArBqhcaZgq+Wy1f8wKheQ7TuST3rjxkkCXLxRD66HLSkNbMdAVj1fpskrrHOwZLFRY5+D0nokJJkq2HRwa9POF0tBf5j8k0uX5Csub8NXAdVEMYtkKoaw0BKqknkjmVRrgSKYplpVsH0qDXulyTZpPy8rUP2QbHBocS/d1aFlxOMPBtomDQyeK9ZlcVtK2yfXLbiM9mJlJy8ptQxw69KO0naXbUHHoxqT601VV6JJ0CfDXQBb4+4i4dtLyLuBzwE8ALwPvioiN1ezTzI5vUrEnBmYzvZfEt6pMRnRlshyvN9CW9ubmy/XaFg4PdPni8ikC35SBsOQ5hVP1GBf3d6TlceB5icX9TOqVLhy6bn6K5aXtLH6XgAO916UBuDhNaQ83xXaVr1967EvrHzgelPTIl9QPgkKhTFmUzpeum9RnclnaNjj03FTcRgCT9lXPnuLpmvFPWVIW+DTwJmAT8KCk2yPisZJq7wVeiYhTJa0GPg68q5oGm5nZ8eFAjwvyZRmbscnDNYLi0IpJgRCIwuFlBwPrwXUPDs9IypZ/fHptqeZ/x+cDz0TEcwCS/hm4HCgNXZcDH0mnvwhcJ0kRx2unsZmZmdVTcgkWqPLu7FrIVLFuP/BCyfymtKxsnYiYAEaAE8ptTNJVkgYlDQ4PD1fRLDMzM7PmU03oqqmIuDEiBiJioLe3t9HNMTMzM6upakLXELCsZP7ktKxsHUk5oIdkQL2ZmZnZcaWa0PUgsELSj0jqBFYDt0+qcztwZTr9DuCbHs9lZmZmx6MZD6SPiAlJHwC+QfLIiJsiYoOkjwGDEXE78FngHyU9A2wnCWZmZmZmxx01Y8eTpGHg+Ua3o02cCLzU6EbYAT4fzcXno3n4XDQXn4+j8+qImHJAelOGLqsdSYMRMdDodljC56O5+Hw0D5+L5uLzcWw0zd2LZmZmZu3MocvMzMysDhy62t+NjW6AHcLno7n4fDQPn4vm4vNxDHhMl5mZmVkduKfLzMzMrA4cuszMzMzqwKGrzUjaKGmdpIclDaZliyTdJenp9HNho9vZriTdJGmbpPUlZWWPvxJ/I+kZSY9KOrdxLW8/Fc7FRyQNpb+PhyVdVrLs99Nz8aSkNzem1e1L0jJJ90h6TNIGSb+dlvv3UWdHOBf+fRxjDl3t6aKIWFXyjJUPA3dHxArg7nTejo2bgUsmlVU6/pcCK9K/q4Dr69TG48XNHH4uAD6Z/j5WRcQdAJLOJHljxlnpOn8rKVu3lh4fJoDfjYgzgdcCV6fH3b+P+qt0LsC/j2PKoev4cDlwSzp9C/D2BralrUXEvSSvvCpV6fhfDnwuEg8ACyQtrU9L21+Fc1HJ5cA/R8T+iPgB8Axw/jFr3HEoIrZExNp0eifwONCPfx91d4RzUYl/HzXi0NV+ArhT0kOSrkrLFkfElnT6RWBxY5p23Kp0/PuBF0rqbeLI/8dntfGB9HLVTSWX2n0u6kjScuDHgf/Av4+GmnQuwL+PY8qhq/28PiLOJemav1rSBaULI3lGiJ8T0iA+/g13PXAKsArYAvxVY5tz/JE0D/gScE1EjJYu8++jvsqcC/8+jjGHrjYTEUPp5zZgDUkX8NZit3z6ua1xLTwuVTr+Q8Cyknonp2V2jETE1ojIR0QB+DsOXiLxuagDSR0k/8jfGhFfTov9+2iAcufCv49jz6GrjUiaK2l+cRq4GFgP3A5cmVa7EvhKY1p43Kp0/G8HfiW9S+u1wEjJZRY7BiaNCfp5kt8HJOditaQuST9CMnj7e/VuXzuTJOCzwOMR8YmSRf591Fmlc+Hfx7GXa3QDrKYWA2uS3xM54J8i4uuSHgS+IOm9wPPAOxvYxrYm6TbgQuBESZuAPwaupfzxvwO4jGRQ6h7gV+ve4DZW4VxcKGkVySWsjcBvAETEBklfAB4jubPr6ojIN6Ldbex1wLuBdZIeTsv+AP8+GqHSubjCv49jy68BMjMzM6sDX140MzMzqwOHLjMzM7M6cOgyMzMzqwOHLjMzM7M6cOgyMzMzqwOHLjOriqR7JL15Utk1kq6X1CfpixXWWy7pP1e5729JGqhQ/qSkRyTdJ+m0avZjZlYLDl1mVq3bgNWTylYDt0XE5oh4x+QVJOWA5UBVoWsKvxwR55C8RPkvyrQhewz3bWZ2GIcuM6vWF4G3SOqEAy/Q7QO+k/ZmrU/L3yPpdknfBO4meSjmGyQ9LOmD6fLrihuV9G+SLkynr5c0KGmDpI8eZfvuBU5Nt7NR0sclrQV+SdIqSQ+kL/hdU3zBr6RTJf172lO2VtIpafl/k/RgWv+jadlcSV9N666X9K60/FpJj6V1/zIt65X0pXQbD0p6XVr+0+lxeFjS94tvljCz9uIn0ptZVSJiu6Tvkbxk/SskvVxfiIhI345Q6lzgx9J1LgQ+FBFvhSSUHWE3f5iukwXulvRjEfHoNJv4c8C6kvmX05fCI+lR4Dcj4tuSPkby1PprgFuBayNijaRZQEbSxSSvPzkfEHC7khfK9wKbI+It6TZ7JJ1A8hqV09PjsCDd918Dn4yI70p6FfAN4AzgQyRP+b5PyUuI903zu5lZC3FPl5nVQuklxtXpfDl3RcT2GWz/nWnv1PeBs4Azp7HOrekrTl5HEmqKPg9JOAIWRMS30/JbgAvSXqb+iFgDEBH7ImIPybtML07bsBY4nSSErQPelPagvSEiRoARkuD0WUm/QPIaG4CfBa5L23U70J2GrPuAT0j6rbRNE0d7gMys+bmny8xq4SvAJyWdC8yJiIcq1Nt9hG1McOh/CM4CSF+w+yHgvIh4RdLNxWVT+OWIGDzKNhyJgP8VEZ85bEHyvS8D/lTS3RHxMUnnA28E3gF8APgZku/32oiY3JN1raSvptu4T9KbI+KJGbbTzJqUe7rMrGoRsQu4B7iJyr1ck+0ESscubQRWScpIWkZyGQ+gmyQojUhaTHIZsxZtHgFekfSGtOjdwLcjYiewSdLbASR1SZpDcinw19KeKST1SzpJUh+wJyL+D8mA/XPTOj0RcQfwQeCcdB93Ar9ZbEP6cmEknRIR6yLi48CDJL1oZtZm3NNlZrVyG7CGw+9krORRIC/pEeBm4H9AKxUnAAAAsElEQVQDPwAeAx4nuYRHRDwi6fvAE8ALJJfiauVK4IY0VD0H/Gpa/m7gM+k4r3HglyLiTklnAPenY9V2Af+FZJD+X0gqpHXfTxImv5KOBxPwO+l2fwv4dDqWLEcyyP99wDWSLgIKwAbgazX8jmbWJBQRjW6DmZmZWdvz5UUzMzOzOnDoMjMzM6sDhy4zMzOzOnDoMjMzM6sDhy4zMzOzOnDoMjMzM6sDhy4zMzOzOvj/r1L+SfYYynAAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 720x216 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[\"Presim. Time / s\"].plot(figsize=(10, 3));"
]
},
{
"cell_type": "code",
"execution_count": 244,
"metadata": {
"exercise": "solution"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x216 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[\"Sim. Time / s\"].plot(figsize=(10, 3));"
]
},
{
"cell_type": "code",
"execution_count": 221,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[\"Presim. Time / s\"].plot();\n",
"df[\"Sim. Time / s\"].plot();"
]
},
{
"cell_type": "code",
"execution_count": 234,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEKCAYAAAAIO8L1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XmcFNW5//HPMzvMjKIwcEFEUEEFwYGMiMEFN1CSiOYXI14TMZprcn9m05h7NZvGaC5ejSbGXL1GeYlxSRQ14I7gwpWfigNBZVOI4mUQZVGQbWCW5/dHVQ89Mz0zPdPd09M93/frVa+uPnWq6qlp6KfPqapT5u6IiIg0lZPuAEREpGtSghARkZiUIEREJCYlCBERiUkJQkREYlKCEBGRmJQgREQkJiUIERGJSQlCRERiykt3AIno06ePDx48ON1hiIhklMWLF29297K26mV0ghg8eDCVlZXpDkNEJKOY2Yfx1FMXk4iIxKQEISIiMSlBiIhITBl9DkJEkq+mpoaqqiqqq6vTHYokqKioiIEDB5Kfn9+h9ZUgRKSRqqoqSktLGTx4MGaW7nCkg9ydLVu2UFVVxZAhQzq0DXUxiUgj1dXV9O7dW8khw5kZvXv3TqglqAQhIs0oOWSHRD/HzE4Q2z9OdwQiIlkrsxPEjk9Az9QWyTq5ubmUl5dz9NFHc95557Fr166Et3nXXXdx//33J7ydyy+/nPLycoYPH06PHj0oLy+nvLycWbNm8ctf/pJ58+YlvI9Ypk+fzoMPPpiSbbfEPIO/YCsG5HrlP7ZAj17pDkUka6xcuZKjjjoqrTGUlJSwY8cOAC688EK+8IUvcOWVVzYsd3fcnZyc9P3GXbt2LV/+8pdZtmxZp+zvlFNO4ZFHHqGsrM0RMhqJ9Xma2WJ3r2hr3cxuQQDs3JTuCEQkhU488UTWrFnD2rVrOeKII7jooos4+uijWbduHXPnzuX4449nzJgxnHfeeQ1J5eqrr2b48OGMGjWKq666CoDrrruOW265BYAJEyZwxRVXUFFRwVFHHcWbb77JV7/6VYYOHcrPf/7zDsd68cUXM2vWLCAYCuiaa66hvLyciooKlixZwqRJkzjssMO46667Gta5+eabOfbYYxk1ahTXXnttzO1+/vnn7N27t1lyeOWVVxpaMKNHj2b79u0djj2WzL/MdcdG6DM03VGIZKVfPbmcFR99ntRtDh+wH9d+ZURcdWtra3n22Wc588wzAVi9ejUzZ85k3LhxbN68mRtuuIF58+ZRXFzMTTfdxK233srll1/OE088wapVqzAztm7dGnPbBQUFVFZW8vvf/54pU6awePFiDjzwQA477DCuuOIKevfunfCxDho0iKVLl3LFFVdw8cUXs3DhQqqrqzn66KP57ne/y9y5c1m9ejWLFi3C3Tn77LNZsGABJ510UqPtzJs3j9NOO63Z9m+55Rb++Mc/Mn78eHbs2EFRUVHCMUdLWQvCzIrMbJGZvWVmy83sV2H5EDN7w8zWmNlfzawgLC8M368Jlw+Oa0c7N6bqEEQkTXbv3t3wy3vQoEFceumlABxyyCGMGzcOgNdff50VK1Ywfvx4ysvLmTlzJh9++CH7778/RUVFXHrppTz++OP07Nkz5j7OPvtsAEaOHMmIESPo378/hYWFHHrooaxbty4pxxG9j+OOO47S0lLKysooLCxk69atzJ07l7lz5zJ69GjGjBnDqlWrWL16dbPtPPfcc5x11lnNysePH8+VV17J7bffztatW8nLS+5v/lS2IPYAp7r7DjPLB141s2eBK4Hb3P0vZnYXcClwZ/j6mbsfbmZTgZuA89vcyw51MYmkSry/9JOtR48eLF26tFl5cXFxw7y7c8YZZ/Dwww83q7do0SLmz5/PrFmzuOOOO3jxxReb1SksLAQgJyenYT7yvra2NhmH0eY+3J1rrrmG73znO61uZ9GiRdx5553Nyq+++mq+9KUv8cwzzzB+/Hief/55jjzyyKTEDilsQXhgR/g2P5wcOBWYFZbPBM4J56eE7wmXn2ZtXsRrakGIdFPjxo1j4cKFrFmzBoCdO3fy3nvvsWPHDrZt28bkyZO57bbbeOutt9IcacsmTZrEjBkzGs6drF+/no0bG3+nLV++nCOPPJLc3Nxm6//jH/9g5MiR/Pu//zvHHnssq1atSmp8KT0HYWa5wGLgcOCPwD+Are4eSc9VwEHh/EHAOgB3rzWzbUBvYHOLO8jJ00lqkW6qrKyM++67jwsuuIA9e/YAcMMNN1BaWsqUKVOorq7G3bn11ls7vI/Jkydzzz33MGDAgGSF3cjEiRNZuXIlxx9/PBBcvfXAAw/Qt2/fhjrR52Ca+t3vfsdLL71ETk4OI0aMiNkNlYhOuczVzHoBTwC/AO5z98PD8oOBZ939aDNbBpzp7lXhsn8Ax7n75ibbugy4DOCYAYVfWHrLV+GCh1J+DCLdRVe4zFX2OeOMM7j//vvp379/h9bv8pe5uvtW4CXgeKCXmUVaLgOB9eH8euBggHD5/sCWGNu6290r3L0ir6BIXUwiktVeeOGFDieHRKXyKqaysOWAmfUAzgBWEiSKr4XVpgGzw/k54XvC5S96W82bnPzgMlcREUm6VJ6D6A/MDM9D5ACPuPtTZrYC+IuZ3QD8Hbg3rH8v8GczWwN8Ckxtcw+5OgchIpIqKUsQ7v42MDpG+fvA2Bjl1cB57dpJTh7UfA57dkBhSUdDFRGRGDJ7qI2c8ClJOg8hIpJ0mZ0gcsMG0M6Wr4QVEZGOyewEkRMmCJ2oFskqN954IyNGjGDUqFGUl5fzxhtvAPDtb3+bFStWJLz94447jvLycgYNGkRZWVnDgHdr165l8uTJLY7flKizzjqLqqqqlGw7FTJ7sD51MYlknddee42nnnqKJUuWUFhYyObNm9m7dy8A99xzT1L2EUk49913H5WVldxxxx0Ny5555pmk7KOp3bt3s2XLFgYOHJiS7adCZrcgIl1MGo9JJGts2LCBPn36NIxd1KdPn4Y7mSdMmEBlZSUQ3HX8k5/8hBEjRnD66aezaNEiJkyYwKGHHsqcOXM6vP/BgwezefNm1q5dy5FHHsnFF1/MsGHDuPDCC5k3bx7jx49n6NChLFq0CAiG+LjkkksYO3Yso0ePZvbs2TG3+/LLLzNhwoRm5bfffnvD0ORTp7Z98WZnyuwWBAY9DlALQiRVnr0aPn4nudv8p5Fw1vQWF0+cOJHrr7+eYcOGcfrpp3P++edz8sknN6u3c+dOTj31VG6++WbOPfdcfv7zn/PCCy+wYsUKpk2b1jCSaiLWrFnDo48+yowZMzj22GN56KGHePXVV5kzZw6/+c1v+Nvf/saNN97IqaeeyowZM9i6dStjx47l9NNPbzSwIARDZpxzzjnN9jF9+nQ++OCDhhFeu5LMbkEAFPfVOQiRLFJSUsLixYu5++67KSsr4/zzz+e+++5rVq+goKBhjKKRI0dy8sknk5+fz8iRI1m7dm1SYhkyZAgjR45sGOvotNNOw8wa7WPu3LlMnz6d8vJyJkyYQHV1Nf/7v//bbFsLFy7khBNOaFY+atQoLrzwQh544IGkD9edqK4VTUcUl+lmOZFUaeWXfirl5uYyYcIEJkyYwMiRI5k5cyYXX3xxozr5+flEBnyOHk47FcN1t7YPd+exxx7jiCOOaHE777//PgcffDAFBQXNlj399NMsWLCAJ598khtvvJF33nmnyySKzG9BlChBiGSTd999t9FDc5YuXcohhxySxohaN2nSJP7whz8QGRno73//e7M6LY3IWl9fz7p16zjllFO46aab2LZtW8PQ311B5ieI4r46SS2SRXbs2MG0adMaTtyuWLGC6667rkPb+uijj5g8eXJyA2ziF7/4BTU1NYwaNYoRI0bwi1/8olmd5557LmaCqKur4xvf+AYjR45k9OjR/OAHP6BXr14pjbc9OmW471SpqKjwylvPhxdvgJ99AvnJfR6rSHek4b6Ta8+ePYwfP77h6qvO1uWH+06p4vDBGupmEpEuqLCwMG3JIVGZnyBKIglCVzKJiCRT5ieISAtC5yFEkiaTu55ln0Q/xyxIEH2CV3UxiSRFUVERW7ZsUZLIcO7Oli1bKCrq+LnZrnGxbSLUxSSSVAMHDqSqqopNm/SjK9MVFRUlNPZT5ieI/B5QUKouJpEkyc/PZ8iQIekOQ7qAzO9igvBmObUgRESSKTsShMZjEhFJuuxIEBpuQ0Qk6bIjQagFISKSdFmSIMpg96dQl5wRHEVEJFsSRElZ8Lprc3rjEBHJIilLEGZ2sJm9ZGYrzGy5mf0wLL/OzNab2dJwmhy1zjVmtsbM3jWzSXHvrOFuanUziYgkSyrvg6gFfuzuS8ysFFhsZi+Ey25z91uiK5vZcGAqMAIYAMwzs2HuXtfmnnSznIhI0qWsBeHuG9x9STi/HVgJHNTKKlOAv7j7Hnf/AFgDjI1rZ8VhF5NulhMRSZpOOQdhZoOB0cAbYdH3zOxtM5thZgeEZQcB66JWqyJGQjGzy8ys0swqG4YCUAtCRCTpUp4gzKwEeAz4kbt/DtwJHAaUAxuA37Zne+5+t7tXuHtFWVnYcigogbweOgchIpJEKU0QZpZPkBwedPfHAdz9E3evc/d64E/s60ZaDxwctfrAsCyeHQXdTDt1FZOISLKk8iomA+4FVrr7rVHl/aOqnQssC+fnAFPNrNDMhgBDgUVx71DjMYmIJFUqr2IaD3wTeMfMloZlPwUuMLNywIG1wHcA3H25mT0CrCC4AuryuK5giijuC9uqkhe9iEg3l7IE4e6vAhZj0TOtrHMjcGOHdlhSBh8t6dCqIiLSXHbcSQ1BC2LnZqivT3ckIiJZIXsSRElf8LpgTCYREUlY9iSIhpvldKJaRCQZsi9B6LkQIiJJkT0JouFuaiUIEZFkyJ4EoS4mEZGkyp4E0eMAyMnXzXIiIkmSPQkiMtyGRnQVEUmK7EkQoOE2RESSKLsSRHFfnYMQEUmSLEsQGtFVRCRZsitBRLqY3NMdiYhIxsuuBFHcF+r2QvW2dEciIpLxsitB6GY5EZGkya4EoZvlRESSJrsSREMLQglCRCRR2ZUgisMEoZvlREQSll0JoueBYDk6ByEikgTZlSBycqFnb3UxiYgkQXYlCAjvplYLQkQkUdmXIDQek4hIUmRfgtB4TCIiSZGyBGFmB5vZS2a2wsyWm9kPw/IDzewFM1sdvh4QlpuZ3W5ma8zsbTMb06Edl/TVSWoRkSRIZQuiFvixuw8HxgGXm9lw4GpgvrsPBeaH7wHOAoaG02XAnR3aa3EZ1OyCPTsSDF9EpHtLWYJw9w3uviSc3w6sBA4CpgAzw2ozgXPC+SnA/R54HehlZv3bvePI3dRqRYiIJKRTzkGY2WBgNPAG0M/dN4SLPgb6hfMHAeuiVqsKy9pH4zGJiCRFyhOEmZUAjwE/cvfPo5e5uwPtGpvbzC4zs0ozq9y0KUYS0HhMIiJJkdIEYWb5BMnhQXd/PCz+JNJ1FL5GvsnXAwdHrT4wLGvE3e929wp3rygrK2u+U43HJCKSFKm8ismAe4GV7n5r1KI5wLRwfhowO6r8ovBqpnHAtqiuqPg1tCDUxSQikoi8FG57PPBN4B0zWxqW/RSYDjxiZpcCHwJfD5c9A0wG1gC7gG91aK+5+dDjALUgREQSlLIE4e6vAtbC4tNi1Hfg8qTsXDfLiYgkLPvupIagm2nn5nRHISKS0bIzQWg8JhGRhGVngtCIriIiCcvOBFFSBnu2QU11uiMREclY2ZkginU3tYhIotpMEGb2n2a2n5nlm9l8M9tkZt/ojOA6TDfLiYgkLJ4WxMRwiIwvA2uBw4GfpDKohEVaEDoPISLSYfEkiMi9El8CHnX3bSmMJzmK+wSv6mISEemweG6Ue8rMVgG7gX81szKga5/9VReTiEjC2mxBuPvVwBeBCnevIRgGY0qqA0tIfg8oKFUXk4hIAuIaasPdP42a3wnsTFlEyaKb5UREEpKdl7mCxmMSEUlQiwkifJZD5iop00lqEZEEtNaCeM3M/mZm3w0fGZpZ1IIQEUlIi+cg3L0iTAxnAr8zs4OAV4FngVfcfU+nRNhRxWWw+1Ooq4XcVD72QkQkO7V6DsLd17r7Xe5+DsGVTE8CpwP/Y2ZPd0aAHVYSPllul4b9FhHpiLh/WoeXuL4YToQtiq6r4W7qjVD6T+mNRUQkA3X4KiZ3X5/MQJJON8uJiCQkiy9zDbuYdLOciEiHxJ0gzKxnKgNJOrUgREQSEs9w3180sxXAqvD9MWb2XymPLFEFJZDXQ5e6ioh0UDwtiNuAScAWAHd/CzgplUElhVnQzbRTVzGJiHREXF1M7r6uSVFdCmJJPo3HJCLSYfEkiHVm9kXAw6fKXQWsbGslM5thZhvNbFlU2XVmtt7MlobT5Khl15jZGjN718wmdehomiruq5PUIiIdFE+C+C5wOXAQsB4oD9+35T6Cu7Cbus3dy8PpGQAzGw5MBUaE6/yXmeXGsY/WqQUhItJhbd4o5+6bgQvbu2F3X9COMZymAH8Jh+/4wMzWAGOB19q730aK+wbnIOrrISd7r+gVEUmFNhOEmQ0Bvg8Mjq7v7md3cJ/fM7OLgErgx+7+GUHr5PWoOlVhWWJK+oLXBWMyRR5DKiIicYlnqI2/AfcSjMNUn+D+7gR+DXj4+lvgkvZswMwuAy4DGDRoUOuVG26W26gEISLSTvEkiGp3vz0ZO3P3TyLzZvYn4Knw7Xrg4KiqA8OyWNu4G7gboKKiwlvdYSRB6LkQIiLtFk/H/O/N7FozO97MxkSmjuzMzPpHvT0XiFzhNAeYamaFYZfWUGBRR/bRSMPd1EoQIiLtFU8LYiTwTeBU9nUxefi+RWb2MDAB6GNmVcC1wAQzKw/XXwt8B8Ddl5vZI8AKoBa43N0Tv9ci0oJ4/yUY+bWENyci0p2Ye+u9NOEVRcPdfW/nhBS/iooKr6ysbLmCO/yqVzB/3bbOCUpEpIszs8XuXtFWvXi6mJYBvRIPKQ3MgtcTrkxvHCIiGSieLqZewCozexNoeMxoApe5di7LBdM9ECIi7RVPgrg25VGIiEiXE8+d1K90RiAiItK1tJggzOxVdz/BzLYTXHXUsAhwd98v5dGJiEjatNaCKAZw99JOikVERLqQ1s7etn79q4iIZLXWWhB9zazF60Pd/dYUxCMiIl1EawkiFyghOOcgIiLdTGsJYoO7X99pkYiISJfS2jkItRxERLqx1hLEaZ0WhYiIdDktJgh3/7QzAxERka5FgxSJiEhMShAiIhKTEoSIiMTUPRJEfU26IxARyTjZnyD6j4I37ob3X053JCIiGSX7E8Q/PwoHHgoPnQ9r5qU7GhGRjJH9CaKkDKY9CX2GwsMXwLvPpTsiEZGMkP0JAqC4N1w0B/qNgL9+A1Y+le6IRES6vO6RIAB6HggXzYYB5fDoNFj+RLojEhHp0rpPggAo2h++8TgMPBZmXQJvP5ruiEREuqyUJQgzm2FmG81sWVTZgWb2gpmtDl8PCMvNzG43szVm9raZjUlVXBTtBxfOgkPGwxOXwdKHUrYrEZFMlsoWxH3AmU3Krgbmu/tQYH74HuAsYGg4XQbcmcK4oLAE/vkRGHIS/O3/wuKZKd2diEgmSlmCcPcFQNMB/6YAkW/jmcA5UeX3e+B1oJeZ9U9VbAAU9IQL/gqHnw5P/gDevCeluxMRyTSdfQ6in7tvCOc/BvqF8wcB66LqVYVlqZVfBFMfDJLEM/8G1Z+nfJciIpkibSep3d0Bb+96ZnaZmVWaWeWmTZsSDySvEIadCV4HdXsT356ISJbo7ATxSaTrKHzdGJavBw6OqjcwLGvG3e929wp3rygrK0tpsCIi3VlnJ4g5wLRwfhowO6r8ovBqpnHAtqiuKBERSYO8VG3YzB4GJgB9zKwKuBaYDjxiZpcCHwJfD6s/A0wG1gC7gG+lKi4REYlPyhKEu1/QwqJmz7oOz0dcnqpYRESk/brXndQiIhI3JQgREYlJCUJERGJSghARkZiUIEREJCYlCBERiUkJQkREYlKCEBGRmJQgREQkJiUIERGJSQlCRERiUoIQEZGYlCBERCQmJQgREYlJCUJERGJSghARkZiUIKJ9shzq69IdhYhIl5CyJ8pllF6HAAb3nw1F+8PgE+HQCcHU+3AwS2t4IiLpoAQBMGwiXPUefLAA3n8Z3n8FVj0VLCsdECaLk2HIybBf/zQGKiLSeZQgIkr6wsivBZM7fPbBvmTx3nPw1kNBvVN/Dif9JK2hioh0BiWIWMzgwEODqeISqK+HT96BB8+DjavSHZ2ISKfQSep45ORA/2OgoCTdkYiIdBolCBERiSktXUxmthbYDtQBte5eYWYHAn8FBgNrga+7+2fpiE9ERNLbgjjF3cvdvSJ8fzUw392HAvPD9yIikiZdqYtpCjAznJ8JnJPGWEREur10JQgH5prZYjO7LCzr5+4bwvmPgX6xVjSzy8ys0swqN23a1Bmxioh0S+m6zPUEd19vZn2BF8ys0bWj7u5m5rFWdPe7gbsBKioqYtYREZHEpaUF4e7rw9eNwBPAWOATM+sPEL5uTEdsIiIS6PQEYWbFZlYamQcmAsuAOcC0sNo0YHZnxyYiIvuko4upH/CEBQPg5QEPuftzZvYm8IiZXQp8CHw9DbG1rrAkGK/pg/+BISemOxoRkZTq9ATh7u8Dx8Qo3wKc1tnxtMvZf4BZl8DMr8AJP4IJP4W8gnRHJSKSEl3pMteur/8x8J0FMOab8OptMGMibF6T7qhERFJCCaK9CoqDlsTX/wyffgD/fSIsuT8YAVZEJIsoQXTU8LPhX/8fDKyAOd+HRy6CXZ/Gv/6md+HjZamLT0QkQRruOxH7HwTfnA2v/QHm/xqqKuHcu4KHCzVV/Tls/RA+WwuffQhzfxaUX7etU0MWEYmXEkSicnJg/A9hyEnw2Lfh/ilw7KXB0ODRCWF3O1oXIiJdgBJEsgwYHZzAfu4aePMeyMmHXoPggEOCZb0OgQMGB+8PGBxcDbVne7qjFhFpkRJEMhUUw9m3wxnXQ2Ep5OSmOyIRkQ5TgkiFHr3SHYGISMJ0FVM61dcFz7sWEemC1IJIl9wC+GgJ/LoPFPeB4rKo175R82VQUrZvPr9HuiMXkW5CCSJdJt4Ih54COzfCzk2wc3Pw+tla2LEJanbGXq+gJEwefRsnlUO+CId37ZFKRCSzKEGkS5/Dg6kle3eGSSNMHDs3hckk6v3WD2F9ZTC/9EH48aqWtyci0k5KEF1VQXEwHXBI23WfugIqZ8CCW6CuBur2Qn3Nvvm6veF8DfzT0TDsTOg7HIIRdUVEYlKCyAa9BgWvL/46eM3JC85x5OaHr+G8Oyx/HOZfD/sNhGETg2Qx+EQo6Jm++EWkSzLP4EHmBhw+wlctW8p+RfnpDiX99uwIkkBOfnB3d0s+3wCr58J7z8P7LwfnOvKKgjvBh06EYZP2JRwRyUpmttjdK9qsl8kJorD/UD/me3fyy68M50sj+2PqMmmf2j2w9tUwYTwXnCAHyC2E034ZtCryekBeYXD1VF5RMOUXBeX5RVFlPYKWij4DkS6vWySIEaNG+5B/uZ1l6z/n5GFlXD9lBIf0Lk53WJnJHTavhhevh5VPdnAjFpVAioLEUtofLnw0uLNcRLqEbpEgKioq/I1Fb3L/a2v57dz3qKmr5/unHs6/nHQohXka5qLDavdAza7wdTfUVgdTTTXU7o6/fPls2LMNvvCt4GFLDedEwq6whvMk4XzDuZMCyA3nc/Kbr9daF5qItKnbJIjKykoAPt5Wza+fWsHT72zgsLJibjx3JOMO7Z3mCLu5dYvg3jOSv13LbZ5IGiWdvCDZ5OSHr7nh8khZ+L6gBIr2D6YevaCo17730ZNuTpQs0+0SRMRL727kl7OXse7T3fyfMQP56eQj6V1SmKYIhb07g1ZFwyW3NeEluHuhrnbfZbiNLsutaVIvall91DqR9WOuW9t8qqsJhzcJ6+zdAdXbgtZOa3ILYyeOyLTwd9CzNxTuF1yanN8D8nsGU0HPxu/jKYt0z+UWBs88zy0MEprO70iSdNsEAbB7bx13vLSauxe8T8+CPP586VhGDdQAetKCmuogUTSatoZT0/JtsHtr43r1tUHLZfiUIBlGkmLNrnCKKqvb08EgLdhHXtG+pNHstbCVOpFlseo0XVa4rzxStm1dcOVbXmHzbr+GLsLWyuPoTswt0AjInaRbJ4iI1Z9s54zbFnDckAM57ai+9CzIo2dBbsNrcWEuPfKD+T6lhZQU6rYQaSf34NxLflF89etqg/M1e3c1TiA1u8KyncH2avcELaLaPUFSaVYWvWxvC3Wil4Wv9bWJHW9OXuLbaJW1kDhaSih5zZNPS+e4Wixvsh3LCRKV5UbN5wTvc3L2zTda1qReXMtyg1ZhGlqG8SaILveNaGZnAr8HcoF73H16R7c1tF8pIwbsxxsffMobH7T+RLeSwjze/Nnp9CjQLxhpB7P4kwOEX26l6buqq76u5eQRnVyiE1Ok7MAhcOiEYATi6K6+WN1+nVW+d0d89etr0vP3jofFSjph8og36eREkk2spBZjWZy6VIIws1zgj8AZQBXwppnNcfcVHd3m0z84kbp6Z9feWnbvrWPn3jp27a1l1946du2tY/feWuau+ITHl6xn6p9epzA3J/hczMjNMcwgN8fIMePFVRsZeEAPnv7+iZQU5ZGboz5hyTA5ueFd8wncOZ+TAzkFQRdVpnCP8/zVXvD6IJF6PXj4Wh89H+ey+rpgvzGX1TfZRlvLovcVa5nHiCvyvh7qmsQVpy6VIICxwBp3fx/AzP4CTAE6nCAg+IIvLcqntIU7rg8rK2Hrrhr21NYFP47cqa2vZ28d1NU77k592BNX9dlujrl+LgA9C3IpLcqjpDAv3H4epUV59CzICz4vd2rrnfp6p67eqfPwtd555b1NAPxk0hHN4olucRoWo6xx3RUffc7W3TV8ZdSA4P+uWdQEFr7mmDVa3pAAzcjJ2Ve/rt4pyMtpiLUuKv7I8TQcV9QxNVrmTm2dU5ifw1eOGUDTVNr0psZYqTZWy9t7RxCtAAAJPElEQVRi1Ey0hW7W+O9sDeVBaWT7id6IGenOjfTqetPypnE1iSMSXzJi6XbM9nUroXul+G58/366WoI4CFgX9b4KOC7VOx3ar5QZFx/bZr33PtnO0nVb2V5dy47qWrZX1wTze2r5vLqGHXtq2bCtml17arHwCzhofRDO55CbE3whR9z8/LtJO46X392UtG0l08+eWJbuEJKuaSKB5l/0nXV6ryFpRMUSnVAa0kujepH52ImxoXrjVZsn9hZ+uMSs20LcsWo0XdbWuk1/OLS2flvJtaXFLZa340dLS3tuKaaYpUnadjy6WoJok5ldBlwGMGhQ544ZNKxfKcP6Jafv2N2pqYt8oXhUeay6UfMx6ta789nOmob5Ot/X6ql3b2gV1TcqC+YjLaS6cNmuPbXUuVOUl0turpFrRl5O0MJo9GpGXrg8kggbTWbs2FPLGbct4N+atJKaHqM3++3cwt8h5t8xVr34v5kb/W3dG/26d9+3rWB+30rRScDxZi29hv+SMb6wg/ex60feN40j+riaxhJPvUbLYrRgmrdqGm8nlugLXJpWaeszbr685WVNt95s3Xbsq71xtrhiK8UtXfjT0r/KFv++Sdh2rAWOM7+l+k10qauYzOx44Dp3nxS+vwbA3f8jVv22rmISEZHm4r2KqauNWfAmMNTMhphZATAVmJPmmEREuqUu1cXk7rVm9j3geYLLXGe4+/I0hyUi0i11qQQB4O7PAM+kOw4Rke6uq3UxiYhIF6EEISIiMSlBiIhITEoQIiISkxKEiIjE1KVulGsvM9sEfJjuOJKgD7A53UF0Ih1vdtPxdn2HuHtZW5UyOkFkCzOrjOeuxmyh481uOt7soS4mERGJSQlCRERiUoLoGu5OdwCdTMeb3XS8WULnIEREJCa1IEREJCYliDQws7Vm9o6ZLTWzyrDsQDN7wcxWh68HpDvOjjKzGWa20cyWRZXFPD4L3G5ma8zsbTMbk77IO6aF473OzNaHn/FSM5scteya8HjfNbNJ6Ym6Y8zsYDN7ycxWmNlyM/thWJ6Vn28rx5uVn28zHj59TFPnTcBaoE+Tsv8Erg7nrwZuSnecCRzfScAYYFlbxwdMBp4leKjaOOCNdMefpOO9DrgqRt3hwFtAITAE+AeQm+5jaMex9gfGhPOlwHvhMWXl59vK8Wbl59t0Ugui65gCzAznZwLnpDGWhLj7AuDTJsUtHd8U4H4PvA70MrP+nRNpcrRwvC2ZAvzF3fe4+wfAGmBsyoJLMnff4O5LwvntwEqCZ8ln5efbyvG2JKM/36aUINLDgblmtjh8xjZAP3ffEM5/DPRLT2gp09LxHQSsi6pXRev/ATPJ98JulRlRXYZZc7xmNhgYDbxBN/h8mxwvZPnnC0oQ6XKCu48BzgIuN7OTohd60FbN2svLsv34QncChwHlwAbgt+kNJ7nMrAR4DPiRu38evSwbP98Yx5vVn2+EEkQauPv68HUj8ARBE/STSNM7fN2YvghToqXjWw8cHFVvYFiW0dz9E3evc/d64E/s62bI+OM1s3yCL8sH3f3xsDhrP99Yx5vNn280JYhOZmbFZlYamQcmAsuAOcC0sNo0YHZ6IkyZlo5vDnBReLXLOGBbVFdFxmrSz34uwWcMwfFONbNCMxsCDAUWdXZ8HWVmBtwLrHT3W6MWZeXn29LxZuvn20y6z5J3twk4lOAqh7eA5cDPwvLewHxgNTAPODDdsSZwjA8TNLtrCPpgL23p+AiubvkjwdUe7wAV6Y4/Scf75/B43ib40ugfVf9n4fG+C5yV7vjbeawnEHQfvQ0sDafJ2fr5tnK8Wfn5Np10J7WIiMSkLiYREYlJCUJERGJSghARkZiUIEREJCYlCBERiUkJQjJKOLLmpCZlPzKzO81sgJnNamG9wWb2zwnu+2Uza/bs4bD8XTN7y8wWmtkRiexHpKtQgpBM8zAwtUnZVOBhd//I3b/WdAUzywMGAwkliDZc6O7HEAxUd3OMGHJTuG+RlFCCkEwzC/iSmRVAwwBqA4D/CVsJy8Lyi81sjpm9SHAD13TgxHDs/ivC5XdENmpmT5nZhHD+TjOrDMf//1U741sAHB5uZ62Z3WRmS4DzzKzczF4PB3h7IuqZCYeb2bywBbLEzA4Ly39iZm+G9X8VlhWb2dNh3WVmdn5YPj18ZsHbZnZLWFZmZo+F23jTzMaH5SdHPcfg75E7+0Waykt3ACLt4e6fmtkigoEOZxO0Hh5xdw9GRWhkDDAqXGcCwfj9X4YggbSym5+F6+QC881slLu/HWeIXyG4wzZiiwcDM2JmbwPfd/dXzOx64FrgR8CDwHR3f8LMioAcM5tIMEzDWIK7keeEgzqWAR+5+5fCbe5vZr0Jhns4Mvw79Ar3/XvgNnd/1cwGAc8DRwFXAZe7+8JwELrqOI9Nuhm1ICQTRXczTQ3fx/KCu8f7nIZoXw9/9f8dGEHwEJi2PGhmS4HxBF/AEX+F4Isc6OXur4TlM4GTwl/vB7n7EwDuXu3uuwjG6JoYxrAEOJIgYbwDnBG2TE50923ANoIv+XvN7KvArnAfpwN3hHHNAfYLE8JC4FYz+0EYU217/0DSPagFIZloNnCbBY+v7Onui1uot7OVbdTS+AdSEUA4wNpVwLHu/pmZ3RdZ1oYL3b2ynTG0xoD/cPf/brYgOO7JwA1mNt/drzezscBpwNeA7wGnEhzfOHdv2kKYbmZPh9tYaGaT3H1VB+OULKYWhGQcd98BvATMoOXWQ1PbCR4ZGbEWKDezHDM7mH3DNe9H8KW+zcz6EXRlJSPmbcBnZnZiWPRN4BUPnlJWZWbnAISjgPYk6A66JPzFj5kdZGZ9zWwAsMvdHyA4GT4mrLO/uz8DXAEcE+5jLvD9SAxmVh6+Hubu77j7TcCbBK0TkWbUgpBM9TDBszSaXtHUkreBOjN7C7gP+B3wAbCC4DGSkcdKvmVmfwdWETwZbGESY54G3BUmgPeBb4Xl3wT+OzwvUQOc5+5zzewo4LXw3MoO4BsEJ8BvNrP6sO6/EiS+2eH5CwOuDLf7A+CP4bmPPIIT6N8FfmRmpwD1BCMKP5vEY5QsotFcRUQkJnUxiYhITEoQIiISkxKEiIjEpAQhIiIxKUGIiEhMShAiIhKTEoSIiMSkBCEiIjH9fy/Jv8wSJryMAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax = df[[\"Presim. Time / s\", \"Sim. Time / s\"]].plot();\n",
"ax.set_ylabel(\"Time / s\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## More Plotting with Pandas\n",
"### Our first proper Pandas plot\n"
]
},
{
"cell_type": "code",
"execution_count": 249,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[[\"Presim. Time / s\", \"Sim. Time / s\"]].plot();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* **That's why I think Pandas is great!**\n",
"* It has great defaults to quickly plot data\n",
"* Plotting functionality is very versatile\n",
"* Before plotting, data can be *massaged* within data frames, if needed"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## More Plotting with Pandas\n",
"### Some versatility"
]
},
{
"cell_type": "code",
"execution_count": 256,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[[\"A\", \"C\", \"F\"]].plot(kind=\"bar\", stacked=True);"
]
},
{
"cell_type": "code",
"execution_count": 255,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[df_demo[\"F\"] < 0][[\"A\", \"C\", \"F\"]].plot(kind=\"bar\", stacked=True);"
]
},
{
"cell_type": "code",
"execution_count": 270,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x288 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[df_demo[\"F\"] < 0][[\"A\", \"C\", \"F\"]]\\\n",
" .plot(kind=\"barh\", subplots=True, sharex=True, title=\"Subplots\", figsize=(12, 4));"
]
},
{
"cell_type": "code",
"execution_count": 334,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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dWLGjBklugfdnbFjx+72e1PU+20p3JuJNaokqps9XNq9Vq1aXpicY8qbzZs3e3Z2tru7L1y40Nu0afOLY9auXetNmzb1NWvWuLv7hRde6G+//ba7uy9btswXLlzoI0aM8Oeffz73NR988IH37dvXMzMzPTMz03v37u0zZszwrVu3+vTp093dfefOnX7MMcf41KlT3d191KhRPm7cOHd3//zzz7158+bu7r5lyxafNWuWjx8/3q+44orca2RkZPihhx7qP/30k7u7X3fddX7LLbe4u/ubb77pGRkZ7u5+/fXX+/XXX+/u7pMmTfJzzz3X3d23bt3qzZs392XLluWe89577/Xhw4f7GWeckdt20UUX7fa95bj22mv9r3/9q7u7L1myxE844QR3d8/MzPQjjzzSv/32W9+5c6d36tTJP//889zXffLJJ37BBRfsdj898cQTu31vpc7dVlMAABPiSURBVKm83puF+eCDD3z9+vXu7j516lTv2bNngccV9u/22muv+cCBAz07O9vnzJnzi9dfddVVPnz48N3+PXr06OFz5szx7OxsHzhwYO49O336dD/xxBN9x44d7u7+448/unvh99n333/v8+bNc3f3TZs2eatWrXLvjcLOlZGR4SkpKb5gwQJ3D7+PmZmZRcZ18skn5z5/7bXX/Pjjj3d39xkzZux2b+dYtGiRd+jQwbdu/f/tnXtQU0f/xp/IRYtXrGJDIkYEJFwSjFXxUtSiWLFQL6hYra2itlbtSMXKtNq+tloVW/HOdKq1Ba3MtIpQdbyiFFsookZsRUFMlICiqHghGIl8f3/kzQ4xnIP2dX5Su58ZZ5xz9uye2X2+z+7Z3SzVVFtbS6GhoVRcXExERJ999hmtXLmywTr+X2kq2mxME0Qk6l1CPmgymVh73r17l7p06UJlZWV2eWs0GsrKyiIioqKiIgoKCmIat+pAyFPF/Lk+a9eupSlTphAR0e7du2nIkCFUW1tL9+7do5dffplu375NREQnT54knU5HXbp0Yd4qVkdieXl7e9PZs2eJiGjDhg309ttvExGx+0RE6enpNGzYMFa2tX7OnDlD7u7uLN2TxuDToKno80mpqKigvLw8+vjjjwVj9+HDhySXy+n8+fNERLRo0SLatGmT6PMGg4EUCgUZjUYiIho7dixt2bKFiCz6qKuro7q6OoqOjmZ9+dKl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\n",
"text/plain": [
"<Figure size 864x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[df_demo[\"F\"] < 0][[\"A\", \"F\"]]\\\n",
" .plot(\n",
" style=[\"-*r\", \"--ob\"], \n",
" secondary_y=\"A\", \n",
" figsize=(12, 6),\n",
" table=True\n",
" );"
]
},
{
"cell_type": "code",
"execution_count": 498,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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8Vh/zvKb3r1789lnn5GTk8M111zDmjVrmDNnDj/99BOnnHIKW7ZsOeTPw+v15st/KMOGDeO+++7D4/HQp08fUlNTD/vznzFjRr7n+efnLSJSkjQHW0RKhV9//ZW1a9dy/PHHU61aNTZv3szOnTuxbZs5c+bk7XfGGWcwefLkvJHX36ZSHM7HH3/MFVdcQfv27RkxYgSDBg3Km1vtdrvziqhhGFxyySXce++99O/fP28U+Tft2rVj3bp1fPXVVwD88MMP9O3bl23bth3y3I8//jj//Oc/6dWrF/feey/NmjVj7dq1h9z/jDPO4N133yUWi5FIJJg6dephnxtAp06dWLBgARs2bABg4cKFZGVlcdJJJx2wb9euXXnnnXfYt28fAM888wx33nknVapU4YQTTsgrrytXruSnn3466Pl69OjBwoUL+eGHH2jbti1dunThmWeeoXv37geUcrfbne8fSEerQ4cOuFwuJkyYkPebhML8/EVEnKARbBFxxB/nYENyZPWBBx6gcePGAFx88cWcf/75pKen06NHj7z9rr/+eh544AEGDBhA5cqVqV69et6o7htvvMF3333HP/7xj3zn6t69O5999hn9+/cnJSWF4447jgcffBCAXr16cdttt/HQQw/RtWtXMjMzGTdu3EFXFqlWrRrPPvssjz76KNFoFNu2efTRR6lbt+4hn+fll1/OyJEj6d+/Pz6fj5YtW+b7AOefDR48mF9//ZVBgwaRkpJCvXr1CAaDh/1ZNmvWjDFjxjB8+HBM0yQQCPCvf/3roFNRLrjggry5y4ZhULt2bcaOHQvAk08+yd13382bb75JgwYNaNKkyUHPl5aWRtOmTQkGg7jdbrp27cq9995Lnz59Dti3efPmuN1uhgwZwlNPPXXY53Gwn8WsWbPy5lgX5ucvIuIEwz7Y7xZFREqp9957j0qVKnHGGWdgWRYjRoygS5cueVMeiuL4U6dO5d///neRHK+g5s+fz86dO/P+8fHQQw/h9/u54447HMnjlEQiwfDhwznvvPM499xznY4jIlIgKtgiUqb89NNPjB49mnA4TDwe57TTTuOee+7JN7e3sC699FJ27NjBc889R7NmzYogbcFt3bqVkSNHsnPnTkzTpFWrVtx3332H/WBkebN69WqGDh1K9+7deeyxx45qnr2ISGmigi0iIiIiUoQ0LCAiIiIi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\n",
"text/plain": [
"<Figure size 864x432 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[df_demo[\"F\"] < 0][[\"A\", \"F\"]]\\\n",
" .plot(\n",
" style=[\"-*r\", \"--ob\"], \n",
" secondary_y=\"A\", \n",
" figsize=(12, 6),\n",
" yerr={\n",
" \"A\": df_demo[df_demo[\"F\"] < 0][\"C\"], \n",
" \"F\": 0.2\n",
" }, \n",
" capsize=4,\n",
" title=\"Bug: style is ignored with yerr\",\n",
" marker=\"P\"\n",
" ); "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Combine Pandas with Matplotlib\n",
"\n",
"* Pandas shortcuts very handy\n",
"* But sometimes, one needs to access underlying Matplotlib functionality\n",
"* No problemo!\n",
"* **Option 1**: Pandas always returns axis\n",
" - Use this to manipulate the canvas\n",
" - Get underlying `figure` with `ax.get_figure()` (for `fig.savefig()`)\n",
"* **Option 2**: Create figure and axes with Matplotlib, use when drawing\n",
" - `.plot()`: Use `ax` option"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Option 1: Pandas Returns Axis"
]
},
{
"cell_type": "code",
"execution_count": 465,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax = df_demo[\"C\"].plot(figsize=(10, 4))\n",
"ax.set_title(\"Hello there!\");\n",
"fig = ax.get_figure()\n",
"fig.suptitle(\"This title is super!\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Option 2: Draw on Matplotlib Axes"
]
},
{
"cell_type": "code",
"execution_count": 464,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(10, 4))\n",
"df_demo[\"C\"].plot(ax=ax)\n",
"ax.set_title(\"Hello there!\");\n",
"fig.suptitle(\"This title is super!\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* We can also get fancy!"
]
},
{
"cell_type": "code",
"execution_count": 467,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 864x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True, figsize=(12, 4))\n",
"for ax, column, color in zip([ax1, ax2], [\"C\", \"F\"], [\"blue\", \"#b2e123\"]):\n",
" df_demo[column].plot(ax=ax, legend=True, color=color)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Aside: Seaborn\n",
"\n",
"* Python package on top of Matplotlib\n",
"* Powerful API shortcuts for plotting of statistical data\n",
"* Manipulate color palettes\n",
"* Works well together with Pandas\n",
"* Also: New clever defaults for Matplotlib\n",
"* → https://seaborn.pydata.org/"
]
},
{
"cell_type": "code",
"execution_count": 473,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"import seaborn as sns\n",
"sns.set()"
]
},
{
"cell_type": "code",
"execution_count": 349,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_demo[[\"A\", \"C\"]].plot();"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Seaborn Color Palette Example"
]
},
{
"cell_type": "code",
"execution_count": 477,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAABQCAYAAADiBIpwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAAr1JREFUeJzt2cGLjGEAx/GHBkOZtbZ1VE5ObhQXF+XfkAMpykVWOEopF3HYTA7+Bc5Srty4K0fTYEaxu229LlJ+N9M+PWP6fC7P6alfvb31rWdX13VdAQDgj92tBwAAzBuBBAAQBBIAQBBIAABBIAEABIEEABAEEgBAEEgAAEEgAQAEgQQAEAQSAEAQSAAAoTfrxZuP35TxZGMnt8yNZ3fPl09PrrSeUc3Ra+vl6ss7rWdUcfHFuJwcrpd3lxbz+50crpdH9161nlHN9bvnyvMHN1rPqObC2sPy8enb1jOqOXb5VBkOh61nVHH6+KicOHu7vH9zv/WUKk6cvV1uvf7QekYVy/09Ze3M8X++N3MgjScb5fPXn7Nen3vbk1HrCVWNfnxpPaGKzc+jv85FNFng/66UUr5/G7eeUNX2dLP1hKqm02nrCVVsbXz961xE459brSfMFU9sAABBIAEABIEEABAEEgBAEEgAAEEgAQAEgQQAEAQSAEAQSAAAQSABAASBBAAQBBIAQBBIAABBIAEABIEEABAEEgBAEEgAAEEgAQAEgQQAEAQSAEAQSAAAQSABAASBBAAQBBIAQBBIAABBIAEABIEEABAEEgBAEEgAAEEgAQAEgQQAEAQSAEAQSAAAQSABAASBBAAQBBIAQBBIAABBIAEABIEEABAEEgBAEEgAAEEgAQAEgQQAEAQSAEAQSAAAQSABAASBBAAQBBIAQBBIAABBIAEABIEEABB6s15cWerv5I6501tabT2hqtUDh1tPqGLfke73ubjfb2l5f+sJVR08tNJ6QlW9wb7WE6oaDAatJ1Sxt7/5+1xuvKSelf17W0+oYrm/Z6Z7u7qu63Z4CwDAf80TGwBAEEgAAEEgAQAEgQQAEAQSAEAQSAAAQSABAASBBAAQBBIAQBBIAABBIAEABIEEABB+AfAGVV2++a/SAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 720x72 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.palplot(sns.color_palette())"
]
},
{
"cell_type": "code",
"execution_count": 478,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAABQCAYAAADiBIpwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAAplJREFUeJzt2TGKE3EYxuFvZRQJihpIZzGd9R5CLDyEF4g3EAvZSrByLmDtCcTKE1jbTWEX2VUUER0Yq1i8nWGHyQ7P06T6s+8HS/hBTsZxHAsAgH+uzT0AAODYCCQAgCCQAACCQAIACAIJACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAjNoQ8/nz2v4eL8MrccjfZVV/277dwzJtM+6upDv8z73lfVWdvVs4Xed9Z2te3fzD1jMl37pLaf+rlnTKZ70Nb2dT/3jMl0T9t6ue3nnjGJh1V12rX1caH3nXZt9du3c8+YRLNe1f0Xj///3aF/cLg4r+HL7tDnR2/4udzbqqp+Dcu8b5/s5wu9r6pqN3yfe8Kkdn+GuSdMavdt2fd93S3zvt/7z4XeV1U17H7MPeGo+IkNACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAIJAAAEJz8MN768vccXSa1WbuCZO62Szzvv1/5Xqh91VVbZrbc0+Y1Ob6wV9LV8LmzrLvu7tZ5n039p8Lva+qqtncmnvCJJr16qB3J+M4jpe8BQDgSvMTGwBAEEgAAEEgAQAEgQQAEAQSAEAQSAAAQSABAASBBAAQBBIAQBBIAABBIAEABIEEABD+AsYQTZBcSEeRAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 720x72 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.palplot(sns.color_palette(\"hls\", 10))"
]
},
{
"cell_type": "code",
"execution_count": 480,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABHYAAABQCAYAAAB8i/K4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAABBlJREFUeJzt27+OVVUYxuEXQRqIhAQNkgl7V1qpN2C8BazUC9BKbbT1LoyVVlbGSm+BeANipdXahIB/JjEYaDB4LA6hJZ7Mcs238jzNamYn71dN5hc4s9vtdgEAAACgnOdGDwAAAADgMMIOAAAAQFHCDgAAAEBRwg4AAABAUcIOAAAAQFHCDgAAAEBRwg4AAABAUcIOAAAAQFHCDgAAAEBRwg4AAABAUcIOAAAAQFHCDgAAAEBR5w7+8pM3k+M7JzjlFPm6JV+to1f0835LfllHr+ji7ivJtbTczTp6ShfX0vLNpLclyXtp+WDi+75My6sT3/dzWta8O3pGJ2+l5cOs+WL0kC72t/00ekY3La9l/XX0in7a1WT9dvSKfto7yfrR6BWd3EzarWR9ffSQPtqt5O119Ip+vmvJ5+voFf183JIf19Er+nmjJVn/HD2jk5tJu5Gs348e0ke7kayfjl7Rx9Hl5IfP/vNnh4ed4zvJb9vBn596f018W5L8Ped9j5++c96XJA8mvi1Jfp/8vm36+2b96/l+kmR78s5oy6PRE7raHj/7ZyrbHoxe0Nf2x+gFndzeP9vtsTN6ujf3r73cn/y+R5Pfl+2f0Qs6ebh/todjZ/S0HY9ecKr4r1gAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFCTsAAAAARQk7AAAAAEUJOwAAAABFnTv4yytHJzjjFHphGb2gr+fnvO/s03fO+5Lk4sS3JclLk9+3TH/f1dETOrmUJFmevDNacn70hK6Ws8/+mcqWi6MX9LW8OHpBJ9f3z3J97IyeXp77114uTX7f+cnvyzLrv3O4sH+WC2Nn9LRcGb2gj6PLB312Zrfb7U54CgAAAAD/g1kTJQAAAMD0hB0AAACAooQdAAAAgKKEHQAAAICihB0AAACAooQdAAAAgKKEHQAAAICihB0AAACAooQdAAAAgKKEHQAAAICihB0AAACAooQdAAAAgKL+BVCMY5TLW1IBAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 1440x72 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.palplot(sns.color_palette(\"hsv\", 20))"
]
},
{
"cell_type": "code",
"execution_count": 481,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAABQCAYAAADiBIpwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAArVJREFUeJzt2T1LFVAAxvHjWyRKiCBkCDW4FThW0BRCU04S1NdoaKqhra2Ghr5ALtHiJElTkI2u0RJcMhpEQrnhS7ctuM/WxcOxy++3nOnAMx3+cEZ6vV6vAADw12jrAQAAZ41AAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAMD7oxXeff5Tu0clpbjkzVq7Ol1vP3reeUc2HR7fLZudV6xlVvNh6W9ZXN8rdN3daT6lifXWjHK+9bj2jmvH7D8rO9ZutZ1Qz/+lj+b31tPWMakZvPCnl+ZXWM6rYvrZZlpYXy/bml9ZTqlhaXiyP7621nlHFzNxUefhy5Z/vDRxI3aOTcnA4nIFUSimdvW7rCVV1j3+2nlDFzsG3vnMo7e+3XlDVSafTekJdv3ZbL6hr72vrBVUcdo/6zmG0+32435Z/5YsNACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAIJAAAIJAAgAIAgkAIAgkAIAgkAAAgkACAAgCCQAgCCQAgCCQAACCQAIACAIJACAIJACAIJAAAML4oBcnJ8ZOc8eZszAz2XpCVZPjF1pPqGJ+6lLfOZSmp1svqGpsYaH1hLrOz7ZeUNfM5dYLqjg3OdF3DqPZi8P5tszMTQ10b6TX6/VOeQsAwH/NFxsAQBBIAABBIAEABIEEABAEEgBAEEgAAEEgAQAEgQQAEAQSAEAQSAAAQSABAASBBAAQ/gBg1VC50SDDXAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x72 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.palplot(sns.color_palette(\"Paired\", 10))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Seaborn Plot Examples\n",
"\n",
"* Most of the time, I use a regression plot from Seaborn"
]
},
{
"cell_type": "code",
"execution_count": 475,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"import warnings\n",
"warnings.simplefilter(action='ignore', category=FutureWarning)"
]
},
{
"cell_type": "code",
"execution_count": 476,
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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O7j//vtpaWkB4POf/zwbN25Mec3IyAi33nornZ2dNDc389BDD+H1egvRXCHEIohPj3ksk3GtCURsmR4rQUUTLPv372fTpk2sXr161tc89NBDrFixgh/84Afs2LGDrVu38tBDD+WxlUKIfDA01KOotkzGtJbiliWmaNZY9u/fz44dO1i7di233norw8Mzq/e+/vrrrFmzBoDVq1fz85//nHCmEilCiJJmoWhUBg0uC1PuBSoZRRMsXq+Xm2++mZdeeom2tja2bNky4zW9vb2JqS/Lsqirq2NwcDDfTRVC5JlHQ7NlUmuZyPp+8cv7VNiuXbvYtm1bymPLly9n+/btiY+//vWvc955583r/Ywsr8dtaamb92u93sq8u6RS+w2V2/dS6nfQcRiN2IRytLjf1FyZV0zMp9/mAt8778HS0dFBR0dHymOjo6Ns376dr371q0D0fhIrTS0tn89Hf38/ra2tRCIRxsbGaGxszOrrDwyM4czjNFal3qRYqf2Gyu17afZbo5ViLGITOYqAaWquZWhwPIftKg3z7bfLNPD7si+MWxRTYTU1NfzLv/wLv/3tbwF45plnOP/882e8buXKlezYsQOAnTt3smLFClwuV17bKoQoBtHilk2WSZ1MjxWdotgVZpomDz30EHfddReBQIATTjiBe++9F4CHH34Yn8/HlVdeyYYNG9i0aROrVq2ivr6e+++/v8AtF0IUkooVt/RYFuNS3LJoKK0r6xSSTIVlVqn9hsrte7n0WykIQlZ3v8hUWGYu0+Bjvoas378opsKEEOJoaU307hdDpscKTYJFCFF2alA0WRZVpoHkS/5JsAghypIZu/ulwWViyfAlryRYhBBlKzo9pmgyTOpdFoac3s8LCRYhRNmLF7dstkyqLVOmxxZZUWw3FkKIfEgpbulIYcvFIiMWIUTFsVA0GiZLTFOKWy4CCRYhRMWqs8xEcUvJl9yRYBFCVDSloTa2Pdljyo/EXJD/ikIIAVgaGpSiwWVhyfDlqMjivRBCJCg8GtyWyYTWTNo286wOI5LIiEUIIaZJnh6T0/vZk2ARQohZTJ3et+T0fhYkWIQQIgMpbpk9CRYhhJinGhTNMj02JwkWIYTIgiHFLeckwSKEEFmS4paZFcV244GBAb72ta8lPh4dHWVoaIi333475XVdXV2sWrWK4447DoClS5fy1FNP5bWt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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"with sns.color_palette(\"hls\", 2):\n",
" sns.regplot(x=\"C\", y=\"F\", data=df_demo);\n",
" sns.regplot(x=\"C\", y=\"G\", data=df_demo);"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* A joint plot combines two plots into one\n",
"* Very handy for showing a fuller picture of two-dimensionally scattered variables"
]
},
{
"cell_type": "code",
"execution_count": 482,
"metadata": {},
"outputs": [],
"source": [
"x, y = np.random.multivariate_normal([0, 0], [[1, -.5], [-.5, 1]], size=300).T"
]
},
{
"cell_type": "code",
"execution_count": 484,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x432 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.jointplot(x=x, y=y, kind=\"reg\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Task\n",
"\n",
"* To your `df` NEST data frame, add a column with the unaccounted time (`Unaccounted Time / s`), which is the difference of program runtime, average neuron build time, minimal edge build time, minimal initialization time, presimulation time, and simulation time. \n",
"(*I know this is technically not super correct, but it will do for our example.*)\n",
"* Plot a stacked bar plot of all these columns (except for program runtime) over the virtual processes"
]
},
{
"cell_type": "code",
"execution_count": 429,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"cols = [\n",
" 'Avg. Neuron Build Time / s', \n",
" 'Min. Edge Build Time / s', \n",
" 'Min. Init. Time / s', \n",
" 'Presim. Time / s', \n",
" 'Sim. Time / s'\n",
"]\n",
"df[\"Unaccounted Time / s\"] = df['Runtime Program / s']\n",
"for entry in cols:\n",
" df[\"Unaccounted Time / s\"] = df[\"Unaccounted Time / s\"] - df[entry]"
]
},
{
"cell_type": "code",
"execution_count": 445,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Runtime Program / s</th>\n",
" <th>Unaccounted Time / s</th>\n",
" <th>Avg. Neuron Build Time / s</th>\n",
" <th>Min. Edge Build Time / s</th>\n",
" <th>Min. Init. Time / s</th>\n",
" <th>Presim. Time / s</th>\n",
" <th>Sim. Time / s</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Virtual Processes</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>420.42</td>\n",
" <td>2.09</td>\n",
" <td>0.29</td>\n",
" <td>88.12</td>\n",
" <td>1.14</td>\n",
" <td>17.26</td>\n",
" <td>311.52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>202.15</td>\n",
" <td>2.43</td>\n",
" <td>0.28</td>\n",
" <td>47.98</td>\n",
" <td>0.70</td>\n",
" <td>7.95</td>\n",
" <td>142.81</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Runtime Program / s Unaccounted Time / s \\\n",
"Virtual Processes \n",
"8 420.42 2.09 \n",
"16 202.15 2.43 \n",
"\n",
" Avg. Neuron Build Time / s Min. Edge Build Time / s \\\n",
"Virtual Processes \n",
"8 0.29 88.12 \n",
"16 0.28 47.98 \n",
"\n",
" Min. Init. Time / s Presim. Time / s Sim. Time / s \n",
"Virtual Processes \n",
"8 1.14 17.26 311.52 \n",
"16 0.70 7.95 142.81 "
]
},
"execution_count": 445,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[[\"Runtime Program / s\", \"Unaccounted Time / s\", *cols]].head(2)"
]
},
{
"cell_type": "code",
"execution_count": 431,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "-"
}
},
"outputs": [
{
"data": {
"image/png": "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WURERETEBWqcRURERERcoMZZRERERMQFapxFRERERFygxllERERExAVqnEVEREREXGC50wXc7fyL+uDj6+u0LSCgiNPPaampnE9Kc2dZIiIiInIdNc53mI+vLzOH9bzlmPCIeYAaZxEREZE7SVM1RERERERcoMZZRERERMQFLjfOKSkptG3blpMnTwIwbNgwWrRoQfv27Wnfvj3fffcdAFFRUYSGhtKiRQumTZuWO1WLiIiIiLiZS3Ocd+3axciRIzl+/Lhj2969e1m0aBGBgYGObZcvX2b48OEsXLiQ0qVLExYWxqZNmwgJCTG8cBERERERd3LpivOyZcsYM2aMo0m+ePEip0+fZtSoUYSGhjJjxgxsNhu7d++mQoUKlC9fHovFQmhoKOvXr8/VExARERERcQeXrjhPmDDB6eeEhATq16/PuHHj8PPzIywsjBUrVuDn50dAQIBjXGBgIDExMdkqqESJwtkaf9X1j3C7HUZleUJNnlBDbuUYmaWa3J+lmtyfpZrcn6Wa3J+lmtyfld9rulaOHkdXvnx53n//fcfP3bp1Y/Xq1bRq1SrTWJPJlK3shIQUbDa742dXTzwuLvmWr2fnDTQqK6sco7NulJ2T/XIzSzW5N8dTs1ST+7NUk/uzVJP7s1ST+7Pyak1msylHF2tz9FSNgwcPsmHDBsfPdrsdi8VCqVKliI+Pd2yPjY11mgMtIiIiIpJX5ahxttvtTJw4kfPnz5Oens7SpUtp3rw5NWvW5NixY5w4cYKMjAzWrl1L48aNja5ZRERERMTtcjRVo2rVqvTt25fnnnsOq9VKixYtaNu2LQCTJk2if//+pKamEhIScsPpG2K8Gy3dDVq+W0RERMQo2Wqcv//+e8e/u3btSteuXTONadCgAWvWrLn9yiRbXFm6G7R8t4iIiEhOaeVAEREREREXqHEWEREREXGBGmcREREREReocRYRERERcYEaZxERERERF6hxFhERERFxgRpnEREREREXqHEWEREREXGBGmcREREREReocRYRERERcYEaZxERERERF6hxFhERERFxgRpnEREREREXqHEWEREREXGB5U4XkBVrehrhEfOyHCMiIiIikptcbpxTUlLo0qULH330EeXKlSMqKoqIiAhSU1N58sknGThwIAD79+9n5MiRpKSkUKdOHd566y0slpz35xZvH8YNWnvL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\n",
"text/plain": [
"<Figure size 864x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df[[\"Unaccounted Time / s\", *cols]].plot(kind=\"bar\", stacked=True, figsize=(12, 4));"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"* Make it relative to the total program run time\n",
"* **Slight complication**: Our virtual processes as indexes are not unique; we need to find new unique indexes\n",
"* Let's use a multi index!"
]
},
{
"cell_type": "code",
"execution_count": 438,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>Runtime Program / s</th>\n",
" <th>Scale</th>\n",
" <th>Plastic</th>\n",
" <th>Avg. Neuron Build Time / s</th>\n",
" <th>Min. Edge Build Time / s</th>\n",
" <th>Max. Edge Build Time / s</th>\n",
" <th>Min. Init. Time / s</th>\n",
" <th>Max. Init. Time / s</th>\n",
" <th>Presim. Time / s</th>\n",
" <th>Sim. Time / s</th>\n",
" <th>Virt. Memory (Sum) / kB</th>\n",
" <th>Local Spike Counter (Sum)</th>\n",
" <th>Average Rate (Sum)</th>\n",
" <th>Number of Neurons</th>\n",
" <th>Number of Connections</th>\n",
" <th>Min. Delay</th>\n",
" <th>Max. Delay</th>\n",
" <th>Unaccounted Time / s</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Nodes</th>\n",
" <th>Tasks/Node</th>\n",
" <th>Threads/Task</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"3\" valign=\"top\">1</th>\n",
" <th rowspan=\"2\" valign=\"top\">2</th>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>420.42</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.29</td>\n",
" <td>88.12</td>\n",
" <td>88.18</td>\n",
" <td>1.14</td>\n",
" <td>1.20</td>\n",
" <td>17.26</td>\n",
" <td>311.52</td>\n",
" <td>46560664.0</td>\n",
" <td>825499</td>\n",
" <td>7.48</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>2.09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>5</td>\n",
" <td>202.15</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.28</td>\n",
" <td>47.98</td>\n",
" <td>48.48</td>\n",
" <td>0.70</td>\n",
" <td>1.20</td>\n",
" <td>7.95</td>\n",
" <td>142.81</td>\n",
" <td>47699384.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>2.43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>200.84</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.15</td>\n",
" <td>46.03</td>\n",
" <td>46.34</td>\n",
" <td>0.70</td>\n",
" <td>1.01</td>\n",
" <td>7.87</td>\n",
" <td>142.97</td>\n",
" <td>46903088.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>3.12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <th>2</th>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>164.16</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.20</td>\n",
" <td>40.03</td>\n",
" <td>41.09</td>\n",
" <td>0.52</td>\n",
" <td>1.58</td>\n",
" <td>6.08</td>\n",
" <td>114.88</td>\n",
" <td>46937216.0</td>\n",
" <td>802865</td>\n",
" <td>7.03</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>2.45</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>12</th>\n",
" <td>6</td>\n",
" <td>141.70</td>\n",
" <td>10</td>\n",
" <td>True</td>\n",
" <td>0.30</td>\n",
" <td>32.93</td>\n",
" <td>33.26</td>\n",
" <td>0.62</td>\n",
" <td>0.95</td>\n",
" <td>5.41</td>\n",
" <td>100.16</td>\n",
" <td>50148824.0</td>\n",
" <td>813743</td>\n",
" <td>7.27</td>\n",
" <td>112500</td>\n",
" <td>1265738500</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>2.28</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id Runtime Program / s Scale Plastic \\\n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 5 420.42 10 True \n",
" 8 5 202.15 10 True \n",
" 4 4 5 200.84 10 True \n",
"2 2 4 5 164.16 10 True \n",
"1 2 12 6 141.70 10 True \n",
"\n",
" Avg. Neuron Build Time / s \\\n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 0.29 \n",
" 8 0.28 \n",
" 4 4 0.15 \n",
"2 2 4 0.20 \n",
"1 2 12 0.30 \n",
"\n",
" Min. Edge Build Time / s \\\n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 88.12 \n",
" 8 47.98 \n",
" 4 4 46.03 \n",
"2 2 4 40.03 \n",
"1 2 12 32.93 \n",
"\n",
" Max. Edge Build Time / s Min. Init. Time / s \\\n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 88.18 1.14 \n",
" 8 48.48 0.70 \n",
" 4 4 46.34 0.70 \n",
"2 2 4 41.09 0.52 \n",
"1 2 12 33.26 0.62 \n",
"\n",
" Max. Init. Time / s Presim. Time / s \\\n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 1.20 17.26 \n",
" 8 1.20 7.95 \n",
" 4 4 1.01 7.87 \n",
"2 2 4 1.58 6.08 \n",
"1 2 12 0.95 5.41 \n",
"\n",
" Sim. Time / s Virt. Memory (Sum) / kB \\\n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 311.52 46560664.0 \n",
" 8 142.81 47699384.0 \n",
" 4 4 142.97 46903088.0 \n",
"2 2 4 114.88 46937216.0 \n",
"1 2 12 100.16 50148824.0 \n",
"\n",
" Local Spike Counter (Sum) Average Rate (Sum) \\\n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 825499 7.48 \n",
" 8 802865 7.03 \n",
" 4 4 802865 7.03 \n",
"2 2 4 802865 7.03 \n",
"1 2 12 813743 7.27 \n",
"\n",
" Number of Neurons Number of Connections \\\n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 112500 1265738500 \n",
" 8 112500 1265738500 \n",
" 4 4 112500 1265738500 \n",
"2 2 4 112500 1265738500 \n",
"1 2 12 112500 1265738500 \n",
"\n",
" Min. Delay Max. Delay Unaccounted Time / s \n",
"Nodes Tasks/Node Threads/Task \n",
"1 2 4 1.5 1.5 2.09 \n",
" 8 1.5 1.5 2.43 \n",
" 4 4 1.5 1.5 3.12 \n",
"2 2 4 1.5 1.5 2.45 \n",
"1 2 12 1.5 1.5 2.28 "
]
},
"execution_count": 438,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_multind = df.set_index([\"Nodes\", \"Tasks/Node\", \"Threads/Task\"])\n",
"df_multind.head()"
]
},
{
"cell_type": "code",
"execution_count": 447,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/png": "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ozVDhgzg2LHfeKlhI9q1eY3Tf555KjmLRnREREREsqzYu3f/94a09I/7KMGBQbRp1YqRY0eTkJAAQEj5CnTp8uZj9Td89Cjatm5DyRIlHuv41Lz2amtmz5tLWO/3MJlMdGzfgcKFnyE+3gTce610VFQUefLkTXJs+/admDBhFHfvxODq6kqXN9L/LXeSPBU6IiIiIlnUvbVu7r0G2mh0ITL8rE3H+RUuarnJf1z1/1WX+v9KOk0tPt7EunWbAShYsBCNG4da9u/cudfy9ZAhwy35Dh046JF9JcZLVLFiZSpWrAxgteZNkyZNeb5CsOXzpnXrAciePTsfvNcrxfju7u4prp1TsmQpFi1aZvO1lfSjqWsiIiIiIuJ0VOiIiIiIiIjTUaEjIiIikkWYzeaMTkHkkdLzZ1SFjoiIiEgW4OpqJC4uNqPTEHkkM2A0Jn3F9+NQoSMiIiKSBeTMmZsbNy4TG3tXIzuSKZnNZmLu3MbHxydd4umtayIiIiJZgKdnDgBu3rxCQkJ8kv0uLi5E3bpqU6z4iwZMJtveupbRcR0p18wQNyNzNZvN3Lp8kQqVq3D16m2b4j6KCh0RERGRLMLTM4el4HmYr68XMwfYtsZL2NhFXL4cZVPbjI7rSLlmhriZIddG/3nNpnap0dQ1ERERERFxOip0RERERETE6ajQERERERERp6NCR0REREREnI4KHRERERERcToqdERERERExOmo0BEREREREaejQkdERERERJyOCh0REREREXE6KnRERERERMTpqNARERERERGno0JHREREREScjgodERERERFxOip0RERERETE6ajQERERERERp6NCR0REREREnI4KHRERERERcToqdERERERExOmo0BEREREREaejQkdERERERJyOCh0REREREXE6KnRERERERMTpqNARERERERGno0JHREREREScjgodERERERFxOip0RERERETE6ajQERERERERp6NCR0REREREnI4KHRERERERcToqdERERERExOmo0BEREREREaejQkdERERERJyOTYXO5s2bady4MS+++CLLly9Psv/MmTO0b9+epk2b0qVLF27evJnuiYqIiIiIiNgq1UInIiKCKVOmsGLFCjZu3Mjq1as5deqUZb/ZbKZ79+5069aNTZs2UaZMGebOnWvXpEVERERERB4l1UJn165dVKtWjdy5c5M9e3YaNWrEli1bLPuPHj1K9uzZeeGFFwB4++23adeunf0yFhERERERSUWqhU5kZCS+vr6Wz35+fkRERFg+nzt3jnz58tGvXz9CQ0MZOnQo2bNnt0+2IiIiIiIiNjCm1sBsNifZZjAYLF/Hx8ezZ88eli1bRlBQEFOnTmXcuHGMGzfO5iTy5s1pc9vk+Pp6PdHxivt0YzpaXEfK1V5xHSlXR4vrSLnaK64j5WqvuI6Uq6PFdaRc7RXXkXK1V1xHytXR4mbmXFMtdPLnz8/evXstnyMjI/Hz83sgCV+KFClCUFAQAE2aNKFnz55pSuLq1WhMJuuCKi0nd/lylE3t0nrBnDGuI+WaWeI6Uq72iutIuWZ0XEfKNbPEdaRc7RXXkXLN6LiOlGtmietIudorriPlmtFxM2OuLi6GxxoYSXXqWo0aNfj555+5du0aMTExbNu2zfI8DkBISAjXrl3j+PHjAHz33XeUK1cuzYmIiIiIiIikF5tGdHr37k2HDh2Ii4ujZcuWBAcH061bN3r27ElQUBCffPIJgwYNIiYmhgIFCjBhwoSnkbuIiIiIiEiyUi10AEJDQwkNDbXaNm/ePMvX5cuXZ926dembmYiIiIiIyGOyacFQERERERERR6JCR0REREREnI4KHRERERERcToqdERERERExOmo0BEREREREaejQkdERERERJyOCh0REREREXE6KnRERERERMTpqNARERERERGno0JHREREREScjgodERERERFxOip0RERERETE6ajQERERERERp6NCR0REREREnI4KHRERERERcToqdERERERExOmo0BEREREREaejQkdERERERJyOCh0REREREXE6KnRERERERMTpqNARERERERGno0JHREREREScjgodERERERFxOip0RERERETE6ajQERERERERp6NCR0REREREnI4KHRERERERcToqdERERERExOmo0BEREREREaejQkdERERERJyOCh0REREREXE6KnRERERERMTpqNARERERERGno0JHREREREScjgodERERERFxOip0RERERETE6ajQERERERERp6NCR0REREREnI4KHRERERERcToqdERERERExOkYMzoBEREREXFe8XGxhI1dZHNbkfSiQkdERERE7Mbo5s6ID76wqe2QyU2Au/ZNSLIMTV0TERER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\n",
"text/plain": [
"<Figure size 1008x432 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_multind[[\"Unaccounted Time / s\", *cols]]\\\n",
" .divide(df_multind[\"Runtime Program / s\"], axis=\"index\")\\\n",
" .plot(kind=\"bar\", stacked=True, figsize=(14, 6), title=\"Relative Time Distribution\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Next Level: Hierarchical Data\n",
"\n",
"* `MultiIndex` only a first level\n",
"* More powerful:\n",
" - Grouping: `.groupby()` ([API](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html))\n",
" - Pivoting: `.pivot_table()` ([API](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot_table.html)); also `.pivot()` ([API](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html))"
]
},
{
"cell_type": "code",
"execution_count": 505,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>Tasks/Node</th>\n",
" <th>Threads/Task</th>\n",
" <th>Runtime Program / s</th>\n",
" <th>Scale</th>\n",
" <th>Plastic</th>\n",
" <th>Avg. Neuron Build Time / s</th>\n",
" <th>Min. Edge Build Time / s</th>\n",
" <th>Max. Edge Build Time / s</th>\n",
" <th>Min. Init. Time / s</th>\n",
" <th>...</th>\n",
" <th>Presim. Time / s</th>\n",
" <th>Sim. Time / s</th>\n",
" <th>Virt. Memory (Sum) / kB</th>\n",
" <th>Local Spike Counter (Sum)</th>\n",
" <th>Average Rate (Sum)</th>\n",
" <th>Number of Neurons</th>\n",
" <th>Number of Connections</th>\n",
" <th>Min. Delay</th>\n",
" <th>Max. Delay</th>\n",
" <th>Unaccounted Time / s</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Nodes</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>5.333333</td>\n",
" <td>3.0</td>\n",
" <td>8.0</td>\n",
" <td>185.023333</td>\n",
" <td>10.0</td>\n",
" <td>True</td>\n",
" <td>0.220000</td>\n",
" <td>42.040000</td>\n",
" <td>42.838333</td>\n",
" <td>0.583333</td>\n",
" <td>...</td>\n",
" <td>7.226667</td>\n",
" <td>132.061667</td>\n",
" <td>4.806585e+07</td>\n",
" <td>816298.000000</td>\n",
" <td>7.215000</td>\n",
" <td>112500.0</td>\n",
" <td>1.265738e+09</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>2.891667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5.333333</td>\n",
" <td>3.0</td>\n",
" <td>8.0</td>\n",
" <td>73.601667</td>\n",
" <td>10.0</td>\n",
" <td>True</td>\n",
" <td>0.168333</td>\n",
" <td>19.628333</td>\n",
" <td>20.313333</td>\n",
" <td>0.191667</td>\n",
" <td>...</td>\n",
" <td>2.725000</td>\n",
" <td>48.901667</td>\n",
" <td>4.975288e+07</td>\n",
" <td>818151.000000</td>\n",
" <td>7.210000</td>\n",
" <td>112500.0</td>\n",
" <td>1.265738e+09</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>1.986667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>5.333333</td>\n",
" <td>3.0</td>\n",
" <td>8.0</td>\n",
" <td>43.990000</td>\n",
" <td>10.0</td>\n",
" <td>True</td>\n",
" <td>0.138333</td>\n",
" <td>12.810000</td>\n",
" <td>13.305000</td>\n",
" <td>0.135000</td>\n",
" <td>...</td>\n",
" <td>1.426667</td>\n",
" <td>27.735000</td>\n",
" <td>5.511165e+07</td>\n",
" <td>820465.666667</td>\n",
" <td>7.253333</td>\n",
" <td>112500.0</td>\n",
" <td>1.265738e+09</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>1.745000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5.333333</td>\n",
" <td>3.0</td>\n",
" <td>8.0</td>\n",
" <td>31.225000</td>\n",
" <td>10.0</td>\n",
" <td>True</td>\n",
" <td>0.116667</td>\n",
" <td>9.325000</td>\n",
" <td>9.740000</td>\n",
" <td>0.088333</td>\n",
" <td>...</td>\n",
" <td>1.066667</td>\n",
" <td>19.353333</td>\n",
" <td>5.325783e+07</td>\n",
" <td>819558.166667</td>\n",
" <td>7.288333</td>\n",
" <td>112500.0</td>\n",
" <td>1.265738e+09</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>1.275000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5.333333</td>\n",
" <td>3.0</td>\n",
" <td>8.0</td>\n",
" <td>24.896667</td>\n",
" <td>10.0</td>\n",
" <td>True</td>\n",
" <td>0.140000</td>\n",
" <td>7.468333</td>\n",
" <td>7.790000</td>\n",
" <td>0.070000</td>\n",
" <td>...</td>\n",
" <td>0.771667</td>\n",
" <td>14.950000</td>\n",
" <td>6.075634e+07</td>\n",
" <td>815307.666667</td>\n",
" <td>7.225000</td>\n",
" <td>112500.0</td>\n",
" <td>1.265738e+09</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>1.496667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>5.333333</td>\n",
" <td>3.0</td>\n",
" <td>8.0</td>\n",
" <td>20.215000</td>\n",
" <td>10.0</td>\n",
" <td>True</td>\n",
" <td>0.106667</td>\n",
" <td>6.165000</td>\n",
" <td>6.406667</td>\n",
" <td>0.051667</td>\n",
" <td>...</td>\n",
" <td>0.630000</td>\n",
" <td>12.271667</td>\n",
" <td>6.060652e+07</td>\n",
" <td>815456.333333</td>\n",
" <td>7.201667</td>\n",
" <td>112500.0</td>\n",
" <td>1.265738e+09</td>\n",
" <td>1.5</td>\n",
" <td>1.5</td>\n",
" <td>0.990000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>6 rows × 21 columns</p>\n",
"</div>"
],
"text/plain": [
" id Tasks/Node Threads/Task Runtime Program / s Scale \\\n",
"Nodes \n",
"1 5.333333 3.0 8.0 185.023333 10.0 \n",
"2 5.333333 3.0 8.0 73.601667 10.0 \n",
"3 5.333333 3.0 8.0 43.990000 10.0 \n",
"4 5.333333 3.0 8.0 31.225000 10.0 \n",
"5 5.333333 3.0 8.0 24.896667 10.0 \n",
"6 5.333333 3.0 8.0 20.215000 10.0 \n",
"\n",
" Plastic Avg. Neuron Build Time / s Min. Edge Build Time / s \\\n",
"Nodes \n",
"1 True 0.220000 42.040000 \n",
"2 True 0.168333 19.628333 \n",
"3 True 0.138333 12.810000 \n",
"4 True 0.116667 9.325000 \n",
"5 True 0.140000 7.468333 \n",
"6 True 0.106667 6.165000 \n",
"\n",
" Max. Edge Build Time / s Min. Init. Time / s ... Presim. Time / s \\\n",
"Nodes ... \n",
"1 42.838333 0.583333 ... 7.226667 \n",
"2 20.313333 0.191667 ... 2.725000 \n",
"3 13.305000 0.135000 ... 1.426667 \n",
"4 9.740000 0.088333 ... 1.066667 \n",
"5 7.790000 0.070000 ... 0.771667 \n",
"6 6.406667 0.051667 ... 0.630000 \n",
"\n",
" Sim. Time / s Virt. Memory (Sum) / kB Local Spike Counter (Sum) \\\n",
"Nodes \n",
"1 132.061667 4.806585e+07 816298.000000 \n",
"2 48.901667 4.975288e+07 818151.000000 \n",
"3 27.735000 5.511165e+07 820465.666667 \n",
"4 19.353333 5.325783e+07 819558.166667 \n",
"5 14.950000 6.075634e+07 815307.666667 \n",
"6 12.271667 6.060652e+07 815456.333333 \n",
"\n",
" Average Rate (Sum) Number of Neurons Number of Connections \\\n",
"Nodes \n",
"1 7.215000 112500.0 1.265738e+09 \n",
"2 7.210000 112500.0 1.265738e+09 \n",
"3 7.253333 112500.0 1.265738e+09 \n",
"4 7.288333 112500.0 1.265738e+09 \n",
"5 7.225000 112500.0 1.265738e+09 \n",
"6 7.201667 112500.0 1.265738e+09 \n",
"\n",
" Min. Delay Max. Delay Unaccounted Time / s \n",
"Nodes \n",
"1 1.5 1.5 2.891667 \n",
"2 1.5 1.5 1.986667 \n",
"3 1.5 1.5 1.745000 \n",
"4 1.5 1.5 1.275000 \n",
"5 1.5 1.5 1.496667 \n",
"6 1.5 1.5 0.990000 \n",
"\n",
"[6 rows x 21 columns]"
]
},
"execution_count": 505,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby(\"Nodes\").mean()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Pivoting\n",
"\n",
"* Combine categorically-similar columns\n",
"* Creates hierarchical index\n",
"* Respected during plotting!\n",
"* A pivot table has three *layers*; if confused, think about these questions\n",
" - `index`: »What's on the `x` axis?«\n",
" - `values`: »What value do I want to plot?«\n",
" - `columns`: »What categories do I want [to be in the legend]?«\n",
"* All can be populated from base data frame\n",
"* Might be aggregated, if needed"
]
},
{
"cell_type": "code",
"execution_count": 540,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"df_demo[\"H\"] = [(-1)**n for n in range(5)]"
]
},
{
"cell_type": "code",
"execution_count": 544,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>H</th>\n",
" <th>-1</th>\n",
" <th>1</th>\n",
" </tr>\n",
" <tr>\n",
" <th>F</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>-3.918282</th>\n",
" <td>NaN</td>\n",
" <td>7.389056</td>\n",
" </tr>\n",
" <tr>\n",
" <th>-2.504068</th>\n",
" <td>NaN</td>\n",
" <td>1.700594</td>\n",
" </tr>\n",
" <tr>\n",
" <th>-1.918282</th>\n",
" <td>NaN</td>\n",
" <td>0.515929</td>\n",
" </tr>\n",
" <tr>\n",
" <th>-0.213769</th>\n",
" <td>0.972652</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0.518282</th>\n",
" <td>2.952492</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"H -1 1\n",
"F \n",
"-3.918282 NaN 7.389056\n",
"-2.504068 NaN 1.700594\n",
"-1.918282 NaN 0.515929\n",
"-0.213769 0.972652 NaN\n",
" 0.518282 2.952492 NaN"
]
},
"execution_count": 544,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_pivot = df_demo.pivot_table(\n",
" index=\"F\",\n",
" values=\"G\",\n",
" columns=\"H\"\n",
")\n",
"df_pivot"
]
},
{
"cell_type": "code",
"execution_count": 546,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df_pivot.plot();"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Task\n",
"\n",
"* Create a pivot table based on the NEST `df` data frame\n",
"* Let the `x` axis show the number of nodes; display the values of the simulation time `\"Sim. Time / s\"` for the tasks per node and threas per task configurations\n",
"* Please plot a bar plot"
]
},
{
"cell_type": "code",
"execution_count": 555,
"metadata": {
"exercise": "solution",
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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nH0YEREREZEy4/QLAUVEREREKhunT88QEREREalsFJpFREREROxQaBYRERERsUOhWURERETEDoVmERERERE7FJpFruGbb75h6dKlnDlzpsD2lStXllNFUhyxsbHEx8cDsGrVKqZNm8aWLVvKuSopiYiIiPIuQRx05MgR2+MffviBiIgIIiMjOXz4cDlWJY7avXs3KSkpAERHRzNlyhTWrFlTzlVVLFpyTuT/iYyM5OjRo9SvX5+tW7cyevRowsLCAOjatSvr1q0r5wqlKEuWLGHp0qVYLBZatWrF+fPneeyxx9i5cycPPPAAQ4cOLe8S5TrGjh1baNvOnTt59NFHAZg5c2ZZlyTF8L9/H5ctW8aXX35J9+7dAVi3bh09e/bkmWeeKecK5XqmT5/OsWPHmD17NsuWLeOf//wnf/3rX/n++++pXbs24eHh5V1iheD0m5tIvnPnzhW5/4477iijSqS4du3axbp16zCZTPTr14+BAwfi7u5Ox44d0XfMim/NmjVs2bKFxMREOnfuzL59+/Dw8KBnz5706NFDobkCq169OtHR0bz44otUq1YNgH379tGiRYtyrkyKIyoqis8//5xbb70VgB49etCjRw+F5gps7969bNy4ETc3N7777juioqJwd3enV69edO7cubzLqzAUmkvJkCFDiI2Nxc/Pr1DQMhgM7Nixo5wqE3usVisGgwGAO++8kw8//JDnnnuO2267zbZdKi6LxYK7uzsBAQEMHDgQDw8P2768vLxyrEzsGT16NO3ateP999/n1VdfpWXLlnz22Wd07dq1vEsTB+Tm5mKxWKhRowbe3t627e7u7hiNmg1akXl6epKUlISfnx81atQgPT0dd3d3MjIyMJkUFf9H0zNKSVpaGn369GHixIk0a9asvMuRYpg3bx4xMTGMGTPGdgv4Q4cOMWzYMLKzszl06FA5VyhFmTNnDvv37+fzzz/Hzc0NgJ9//pnw8HAefvhhhg0bVs4Vij1Xrlxh4sSJ3HHHHezZs4eNGzeWd0nigP79+3Pq1CkMBgOtW7cmIiKCH374gXfeeYeHH36YESNGlHeJch07d+5k0qRJdOrUidzcXPbt20dQUBB79uzhhRdeoFu3buVdYoWg0FyKjhw5wqpVq5g6dWp5lyLF9MMPP+Dn50f9+vVt286fP8/ixYt56623yrEyccSBAwd48MEHbc9PnjxJXFwcwcHB5ViVFNeqVavYunUrixcvLu9SpBhOnjxJSkoKTZs25dChQ6SmpvLwww+Xd1liR1xcHN988w2nT58mLy+PmjVr8sgjj9hOHolCs4iIiIiIXZpkJCIiIiJih0KziIiIiIgdCs0iIuXo7Nmz3H333axatarA9kWLFjFmzBiH+7l06RJ33323s8sTEZH/UmgWESlnRqORt99+m1OnTpV3KSIich1afE9EpJx5enry3HPP8dprr/Hll1/i7u5u25eamsrkyZP5+eefMRgMPPTQQ7z66quYTCa++uorZs+ejZeXF3/+858L9Llq1SpWrFiBxWKhevXqjB8/nvr163Pw4EEiIiKwWCxA/pryHTp0KNP3KyLiinSmWUSkAnjppZfw8vJi9uzZBbZPmzaN6tWrs3HjRtasWcPx48dZvHgxiYmJjBs3jg8++IC1a9cSEBBge83+/fuJjo5m2bJlREdH88ILLzB8+HAAPvjgA5577jnWrl3LjBkz2LdvX5m+TxERV6UzzSIiFYDRaOSdd96ha9eutG3b1rb9+++/Z8WKFRgMBtzd3enduzefffYZdevWpVGjRjRo0ACAXr168d577wHw3Xffcfr0aXr37m3rJzk5mStXrtCxY0emTJnCzp07ad26Na+++mrZvlERERel0CwiUkHccccdTJo0idGjR9OlSxcA2zSK/7FYLOTm5mIwGPjjMvt/vNWtxWIhLCyMN954w/Y8ISGBW265hd69e/PII4+wd+9edu/ezbx589iwYQO+vr5l8A5FRFyXpmeIiFQgHTt2pF27dnz22WcAtG3blmXLlmG1WsnOziYqKorWrVvTvHlzTpw4wc8//wzA2rVrbX20adOGzZs3k5CQAMCKFSt49tlnAejduzfHjh2jW7duTJ06lZSUFJKTk8v4XYqIuB6daRYRqWDCw8M5dOiQ7fG0adMIDQ0lJyeHhx56iBdffBF3d3ciIyN5/fXXqVKlSoHbhj/00EMMGjSIgQMHYjAY8PHxYd68eRgMBl5//XVmzJjB+++/j9FoZNiwYdSuXbu83qqIiMvQbbRFREREROzQ9AwRERERETsUmkVERERE7FBoFhERERGxQ6FZRERERMQOhWYRERERETsUmkVERERE7FBoFhERERGxQ6FZRERERMSO/wPgkCk9ZX0M6wAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 864x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.pivot_table(\n",
" index=[\"Nodes\"],\n",
" columns=[\"Tasks/Node\", \"Threads/Task\"],\n",
" values=\"Sim. Time / s\",\n",
").plot(kind=\"bar\", figsize=(12, 4));"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* Bonus task\n",
" - Use `Sim. Time / s` and `Presim. Time / s` as values to show\n",
" - Show a stack of those two values inside the pivot table"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## The End"
]
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
}
],
"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.7.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}