Quantecon-Python-Programming.Pdf

Total Page:16

File Type:pdf, Size:1020Kb

Quantecon-Python-Programming.Pdf Python Programming for Economics and Finance Thomas J. Sargent & John Stachurski Sep 17, 2021 CONTENTS I Introduction to Python 3 1 About Python 5 1.1 Overview ................................................. 5 1.2 What’s Python? .............................................. 5 1.3 Scientific Programming .......................................... 7 1.4 Learn More ................................................ 15 2 Setting up Your Python Environment 17 2.1 Overview ................................................. 17 2.2 Anaconda ................................................. 17 2.3 Jupyter Notebooks ............................................ 18 2.4 Installing Libraries ............................................ 30 2.5 Working with Python Files ........................................ 31 2.6 Exercises ................................................. 32 3 An Introductory Example 35 3.1 Overview ................................................. 35 3.2 The Task: Plotting a White Noise Process ................................ 35 3.3 Version 1 ................................................. 36 3.4 Alternative Implementations ....................................... 40 3.5 Another Application ........................................... 44 3.6 Exercises ................................................. 45 3.7 Solutions ................................................. 47 4 Functions 53 4.1 Overview ................................................. 53 4.2 Function Basics .............................................. 54 4.3 Defining Functions ............................................ 55 4.4 Applications ............................................... 56 4.5 Exercises ................................................. 61 4.6 Solutions ................................................. 61 5 Python Essentials 65 5.1 Overview ................................................. 65 5.2 Data Types ................................................ 65 5.3 Input and Output ............................................. 69 5.4 Iterating .................................................. 70 5.5 Comparisons and Logical Operators ................................... 73 5.6 More Functions .............................................. 75 5.7 Coding Style and PEP8 .......................................... 78 i 5.8 Exercises ................................................. 78 5.9 Solutions ................................................. 80 6 OOP I: Introduction to Object Oriented Programming 85 6.1 Overview ................................................. 85 6.2 Objects .................................................. 86 6.3 Summary ................................................. 89 7 OOP II: Building Classes 91 7.1 Overview ................................................. 91 7.2 OOP Review ............................................... 92 7.3 Defining Your Own Classes ........................................ 93 7.4 Special Methods ............................................. 104 7.5 Exercises ................................................. 105 7.6 Solutions ................................................. 106 II The Scientific Libraries 109 8 Python for Scientific Computing 111 8.1 Overview ................................................. 111 8.2 Scientific Libraries ............................................ 112 8.3 The Need for Speed ........................................... 113 8.4 Vectorization ............................................... 115 8.5 Beyond Vectorization ........................................... 119 9 NumPy 121 9.1 Overview ................................................. 121 9.2 NumPy Arrays .............................................. 122 9.3 Operations on Arrays ........................................... 128 9.4 Additional Functionality ......................................... 131 9.5 Exercises ................................................. 134 9.6 Solutions ................................................. 135 10 Matplotlib 139 10.1 Overview ................................................. 139 10.2 The APIs ................................................. 140 10.3 More Features .............................................. 144 10.4 Further Reading ............................................. 149 10.5 Exercises ................................................. 149 10.6 Solutions ................................................. 149 11 SciPy 151 11.1 Overview ................................................. 151 11.2 SciPy versus NumPy ........................................... 152 11.3 Statistics ................................................. 152 11.4 Roots and Fixed Points .......................................... 155 11.5 Optimization ............................................... 158 11.6 Integration ................................................ 159 11.7 Linear Algebra .............................................. 159 11.8 Exercises ................................................. 160 11.9 Solutions ................................................. 160 12 Numba 161 12.1 Overview ................................................. 161 ii 12.2 Compiling Functions ........................................... 162 12.3 Decorators and “nopython” Mode .................................... 164 12.4 Compiling Classes ............................................ 166 12.5 Alternatives to Numba .......................................... 168 12.6 Summary and Comments ......................................... 169 12.7 Exercises ................................................. 170 12.8 Solutions ................................................. 171 13 Parallelization 173 13.1 Overview ................................................. 173 13.2 Types of Parallelization .......................................... 174 13.3 Implicit Multithreading in NumPy .................................... 175 13.4 Multithreaded Loops in Numba ..................................... 177 13.5 Exercises ................................................. 180 13.6 Solutions ................................................. 181 14 Pandas 183 14.1 Overview ................................................. 183 14.2 Series ................................................... 184 14.3 DataFrames ................................................ 186 14.4 On-Line Data Sources .......................................... 191 14.5 Exercises ................................................. 196 14.6 Solutions ................................................. 198 III Advanced Python Programming 205 15 Writing Good Code 207 15.1 Overview ................................................. 207 15.2 An Example of Poor Code ........................................ 207 15.3 Good Coding Practice .......................................... 211 15.4 Revisiting the Example .......................................... 213 15.5 Exercises ................................................. 215 15.6 Solutions ................................................. 218 16 More Language Features 221 16.1 Overview ................................................. 221 16.2 Iterables and Iterators ........................................... 222 16.3 Names and Name Resolution ....................................... 226 16.4 Handling Errors .............................................. 236 16.5 Decorators and Descriptors ........................................ 240 16.6 Generators ................................................ 246 16.7 Recursive Function Calls ......................................... 250 16.8 Exercises ................................................. 251 16.9 Solutions ................................................. 252 17 Debugging 255 17.1 Overview ................................................. 255 17.2 Debugging ................................................ 256 17.3 Other Useful Magics ........................................... 260 IV Other 261 18 Troubleshooting 263 iii 18.1 Fixing Your Local Environment ..................................... 263 18.2 Reporting an Issue ............................................ 264 19 Execution Statistics 265 Index 267 iv Python Programming for Economics and Finance This website presents a set of lectures on Python programming for economics and finance, designed and written by Thomas J. Sargent and John Stachurski. This is the first text in the series, which focuses on programming in Python. For an overview of the series, see this page • Introduction to Python – About Python – Setting up Your Python Environment – An Introductory Example – Functions – Python Essentials – OOP I: Introduction to Object Oriented Programming – OOP II: Building Classes • The Scientific Libraries – Python for Scientific Computing – NumPy – Matplotlib – SciPy – Numba – Parallelization – Pandas • Advanced Python Programming – Writing Good Code – More Language Features – Debugging • Other – Troubleshooting – Execution Statistics CONTENTS 1 Python Programming for Economics and Finance 2 CONTENTS Part I Introduction to Python 3 CHAPTER ONE ABOUT PYTHON Contents • About Python – Overview – What’s Python? – Scientific Programming – Learn More “Python has gotten sufficiently weapons grade that we don’t descend into R anymore. Sorry, R people. Iused to be one of you but we no longer descend into R.” – Chris Wiggins 1.1 Overview In this lecture we will • outline what Python is • showcase some of its abilities • compare it to some other languages. At this stage, it’s not our intention that you try to replicate all you see.
Recommended publications
  • Wireshark User's Guide
    Wireshark User’s Guide For Wireshark 2.1 Ulf Lamping <ulf.lamping[AT]web.de> Richard Sharpe, NS Computer Software and Services P/L <rsharpe[AT]ns.aus.com> Ed Warnicke <hagbard[AT]physics.rutgers.edu> Wireshark User’s Guide: For Wireshark 2.1 by Ulf Lamping, Richard Sharpe, and Ed Warnicke Copyright © 2004-2014 Ulf Lamping, Richard Sharpe, Ed Warnicke Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 or any later version published by the Free Software Foundation. All logos and trademarks in this document are property of their respective owner. Preface ...................................................................................................................... viii 1. Foreword ....................................................................................................... viii 2. Who should read this document? ....................................................................... viii 3. Acknowledgements .......................................................................................... viii 4. About this document ......................................................................................... ix 5. Where to get the latest copy of this document? ....................................................... ix 6. Providing feedback about this document ............................................................... ix 1. Introduction .............................................................................................................
    [Show full text]
  • Virtualization of the RIOT Operating System
    Computer Systems and Telematics — Distributed, Embedded Systems Diploma Thesis Virtualization of the RIOT Operating System Ludwig Ortmann Matr. 3914103 Supervisor: Dr. Emmanuel Baccelli Assisting Supervisor: Prof. Dr.-Ing. Jochen Schiller Institute of Computer Science, Freie Universität Berlin, Germany March 2, 2015 iii I hereby declare to have written this thesis on my own. I have used no other literature and resources than the ones referenced. All text passages that are literal or logical copies from other publications have been marked accordingly. All figures and pictures have been created by me or their sources are referenced accordingly. This thesis has not been submitted in the same or a similar version to any other examination board. Berlin, March 2, 2015 (Ludwig Ortmann) Abstract Abstract Software developers in the growing field of the Internet of Things face many hurdles which arise from the limitations of embedded systems and wireless networking. The employment of hardware and network virtualization promises to allow developers to test and debug hard- ware independent code without being affected by these limitations. This thesis presents RIOT native, a hardware and network emulation implementation for the RIOT operating system, which enables developers to compile and run RIOT as a process in their host operat- ing system. Running the operating system as a process allows for the use of debugging tools and techniques only available on desktop computers otherwise, the integration of common network analysis tools, and the emulation of arbitrary network topologies. By enabling the use of these tools and techniques for the development of software for distributed embedded systems, the hurdles they impose on the development process are significantly reduced.
    [Show full text]
  • Alternatives to Python: Julia
    Crossing Language Barriers with , SciPy, and thon Steven G. Johnson MIT Applied Mathemacs Where I’m coming from… [ google “Steven Johnson MIT” ] Computaonal soPware you may know… … mainly C/C++ libraries & soPware … Nanophotonics … oPen with Python interfaces … (& Matlab & Scheme & …) jdj.mit.edu/nlopt www.w.org jdj.mit.edu/meep erf(z) (and erfc, erfi, …) in SciPy 0.12+ & other EM simulators… jdj.mit.edu/book Confession: I’ve used Python’s internal C API more than I’ve coded in Python… A new programming language? Viral Shah Jeff Bezanson Alan Edelman julialang.org Stefan Karpinski [begun 2009, “0.1” in 2013, ~20k commits] [ 17+ developers with 100+ commits ] [ usual fate of all First reacBon: You’re doomed. new languages ] … subsequently: … probably doomed … sll might be doomed but, in the meanBme, I’m having fun with it… … and it solves a real problem with technical compuBng in high-level languages. The “Two-Language” Problem Want a high-level language that you can work with interacBvely = easy development, prototyping, exploraon ⇒ dynamically typed language Plenty to choose from: Python, Matlab / Octave, R, Scilab, … (& some of us even like Scheme / Guile) Historically, can’t write performance-criBcal code (“inner loops”) in these languages… have to switch to C/Fortran/… (stac). [ e.g. SciPy git master is ~70% C/C++/Fortran] Workable, but Python → Python+C = a huge jump in complexity. Just vectorize your code? = rely on mature external libraries, operang on large blocks of data, for performance-criBcal code Good advice! But… • Someone has to write those libraries. • Eventually that person may be you.
    [Show full text]
  • Data Visualization in Python
    Data visualization in python Day 2 A variety of packages and philosophies • (today) matplotlib: http://matplotlib.org/ – Gallery: http://matplotlib.org/gallery.html – Frequently used commands: http://matplotlib.org/api/pyplot_summary.html • Seaborn: http://stanford.edu/~mwaskom/software/seaborn/ • ggplot: – R version: http://docs.ggplot2.org/current/ – Python port: http://ggplot.yhathq.com/ • Bokeh (live plots in your browser) – http://bokeh.pydata.org/en/latest/ Biocomputing Bootcamp 2017 Matplotlib • Gallery: http://matplotlib.org/gallery.html • Top commands: http://matplotlib.org/api/pyplot_summary.html • Provides "pylab" API, a mimic of matlab • Many different graph types and options, some obscure Biocomputing Bootcamp 2017 Matplotlib • Resulting plots represented by python objects, from entire figure down to individual points/lines. • Large API allows any aspect to be tweaked • Lengthy coding sometimes required to make a plot "just so" Biocomputing Bootcamp 2017 Seaborn • https://stanford.edu/~mwaskom/software/seaborn/ • Implements more complex plot types – Joint points, clustergrams, fitted linear models • Uses matplotlib "under the hood" Biocomputing Bootcamp 2017 Others • ggplot: – (Original) R version: http://docs.ggplot2.org/current/ – A recent python port: http://ggplot.yhathq.com/ – Elegant syntax for compactly specifying plots – but, they can be hard to tweak – We'll discuss this on the R side tomorrow, both the basics of both work similarly. • Bokeh – Live, clickable plots in your browser! – http://bokeh.pydata.org/en/latest/
    [Show full text]
  • Ipython: a System for Interactive Scientific
    P YTHON: B ATTERIES I NCLUDED IPython: A System for Interactive Scientific Computing Python offers basic facilities for interactive work and a comprehensive library on top of which more sophisticated systems can be built. The IPython project provides an enhanced interactive environment that includes, among other features, support for data visualization and facilities for distributed and parallel computation. he backbone of scientific computing is All these systems offer an interactive command mostly a collection of high-perfor- line in which code can be run immediately, without mance code written in Fortran, C, and having to go through the traditional edit/com- C++ that typically runs in batch mode pile/execute cycle. This flexible style matches well onT large systems, clusters, and supercomputers. the spirit of computing in a scientific context, in However, over the past decade, high-level environ- which determining what computations must be ments that integrate easy-to-use interpreted lan- performed next often requires significant work. An guages, comprehensive numerical libraries, and interactive environment lets scientists look at data, visualization facilities have become extremely popu- test new ideas, combine algorithmic approaches, lar in this field. As hardware becomes faster, the crit- and evaluate their outcome directly. This process ical bottleneck in scientific computing isn’t always the might lead to a final result, or it might clarify how computer’s processing time; the scientist’s time is also they need to build a more static, large-scale pro- a consideration. For this reason, systems that allow duction code. rapid algorithmic exploration, data analysis, and vi- As this article shows, Python (www.python.org) sualization have become a staple of daily scientific is an excellent tool for such a workflow.1 The work.
    [Show full text]
  • Writing Mathematical Expressions with Latex
    APPENDIX A Writing Mathematical Expressions with LaTeX LaTeX is extensively used in Python. In this appendix there are many examples that can be useful to represent LaTeX expressions inside Python implementations. This same information can be found at the link http://matplotlib.org/users/mathtext.html. With matplotlib You can enter the LaTeX expression directly as an argument of various functions that can accept it. For example, the title() function that draws a chart title. import matplotlib.pyplot as plt %matplotlib inline plt.title(r'$\alpha > \beta$') With IPython Notebook in a Markdown Cell You can enter the LaTeX expression between two '$$'. $$c = \sqrt{a^2 + b^2}$$ c= a+22b 537 © Fabio Nelli 2018 F. Nelli, Python Data Analytics, https://doi.org/10.1007/978-1-4842-3913-1 APPENDIX A WRITING MaTHEmaTICaL EXPRESSIONS wITH LaTEX With IPython Notebook in a Python 2 Cell You can enter the LaTeX expression within the Math() function. from IPython.display import display, Math, Latex display(Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx')) Subscripts and Superscripts To make subscripts and superscripts, use the ‘_’ and ‘^’ symbols: r'$\alpha_i > \beta_i$' abii> This could be very useful when you have to write summations: r'$\sum_{i=0}^\infty x_i$' ¥ åxi i=0 Fractions, Binomials, and Stacked Numbers Fractions, binomials, and stacked numbers can be created with the \frac{}{}, \binom{}{}, and \stackrel{}{} commands, respectively: r'$\frac{3}{4} \binom{3}{4} \stackrel{3}{4}$' 3 3 æ3 ö4 ç ÷ 4 è 4ø Fractions can be arbitrarily nested: 1 5 - x 4 538 APPENDIX A WRITING MaTHEmaTICaL EXPRESSIONS wITH LaTEX Note that special care needs to be taken to place parentheses and brackets around fractions.
    [Show full text]
  • Fortran Resources 1
    Fortran Resources 1 Ian D Chivers Jane Sleightholme May 7, 2021 1The original basis for this document was Mike Metcalf’s Fortran Information File. The next input came from people on comp-fortran-90. Details of how to subscribe or browse this list can be found in this document. If you have any corrections, additions, suggestions etc to make please contact us and we will endeavor to include your comments in later versions. Thanks to all the people who have contributed. Revision history The most recent version can be found at https://www.fortranplus.co.uk/fortran-information/ and the files section of the comp-fortran-90 list. https://www.jiscmail.ac.uk/cgi-bin/webadmin?A0=comp-fortran-90 • May 2021. Major update to the Intel entry. Also changes to the editors and IDE section, the graphics section, and the parallel programming section. • October 2020. Added an entry for Nvidia to the compiler section. Nvidia has integrated the PGI compiler suite into their NVIDIA HPC SDK product. Nvidia are also contributing to the LLVM Flang project. Updated the ’Additional Compiler Information’ entry in the compiler section. The Polyhedron benchmarks discuss automatic parallelisation. The fortranplus entry covers the diagnostic capability of the Cray, gfortran, Intel, Nag, Oracle and Nvidia compilers. Updated one entry and removed three others from the software tools section. Added ’Fortran Discourse’ to the e-lists section. We have also made changes to the Latex style sheet. • September 2020. Added a computer arithmetic and IEEE formats section. • June 2020. Updated the compiler entry with details of standard conformance.
    [Show full text]
  • Ipython Documentation Release 0.10.2
    IPython Documentation Release 0.10.2 The IPython Development Team April 09, 2011 CONTENTS 1 Introduction 1 1.1 Overview............................................1 1.2 Enhanced interactive Python shell...............................1 1.3 Interactive parallel computing.................................3 2 Installation 5 2.1 Overview............................................5 2.2 Quickstart...........................................5 2.3 Installing IPython itself....................................6 2.4 Basic optional dependencies..................................7 2.5 Dependencies for IPython.kernel (parallel computing)....................8 2.6 Dependencies for IPython.frontend (the IPython GUI).................... 10 3 Using IPython for interactive work 11 3.1 Quick IPython tutorial..................................... 11 3.2 IPython reference........................................ 17 3.3 IPython as a system shell.................................... 42 3.4 IPython extension API..................................... 47 4 Using IPython for parallel computing 53 4.1 Overview and getting started.................................. 53 4.2 Starting the IPython controller and engines.......................... 57 4.3 IPython’s multiengine interface................................ 64 4.4 The IPython task interface................................... 78 4.5 Using MPI with IPython.................................... 80 4.6 Security details of IPython................................... 83 4.7 IPython/Vision Beam Pattern Demo.............................
    [Show full text]
  • Python Guide Documentation 0.0.1
    Python Guide Documentation 0.0.1 Kenneth Reitz 2015 09 13 Contents 1 Getting Started 3 1.1 Picking an Interpreter..........................................3 1.2 Installing Python on Mac OS X.....................................5 1.3 Installing Python on Windows......................................6 1.4 Installing Python on Linux........................................7 2 Writing Great Code 9 2.1 Structuring Your Project.........................................9 2.2 Code Style................................................ 15 2.3 Reading Great Code........................................... 24 2.4 Documentation.............................................. 24 2.5 Testing Your Code............................................ 26 2.6 Common Gotchas............................................ 30 2.7 Choosing a License............................................ 33 3 Scenario Guide 35 3.1 Network Applications.......................................... 35 3.2 Web Applications............................................ 36 3.3 HTML Scraping............................................. 41 3.4 Command Line Applications....................................... 42 3.5 GUI Applications............................................. 43 3.6 Databases................................................. 45 3.7 Networking................................................ 45 3.8 Systems Administration......................................... 46 3.9 Continuous Integration.......................................... 49 3.10 Speed..................................................
    [Show full text]
  • NS-3 Advanced Tutorial: Visualization and Data Collection
    NS-3 Advanced Tutorial: Visualization and Data Collection Tom Henderson (University of Washington and Boeing Research & Technology) L. Felipe Perrone (Bucknell University) March 2013 NS-3 Consortium Meeting 1 March 2013 Outline Getting visualization and raw data from ns-3 • Tracing and packet traces • Gnuplot and Matplotlib • Flow Monitor • PyViz • NetAnim • Statistics • Data Collection Framework 2 NS-3 Consortium Meeting March 2013 Tracing requirements • Tracing is a structured form of simulation output • Example (from ns-2): + 1.84375 0 2 cbr 210 ------- 0 0.0 3.1 225 610 - 1.84375 0 2 cbr 210 ------- 0 0.0 3.1 225 610 r 1.84471 2 1 cbr 210 ------- 1 3.0 1.0 195 600 r 1.84566 2 0 ack 40 ------- 2 3.2 0.1 82 602 + 1.84566 0 2 tcp 1000 ------- 2 0.1 3.2 102 611 Problem: Tracing needs vary widely – would like to change tracing output without editing the core – would like to support multiple outputs 3 NS-3 Consortium Meeting March 2013 Tracing in ns-3 • ns-3 configures multiple 'TraceSource' objects (TracedValue, TracedCallback) • Multiple types of 'TraceSink' objects can be hooked to these sources • A special configuration namespace helps to manage access to trace sources TracedValue Config::Connect ("/path/to/traced/value", callback1); TraceSource Config::Connect ("/path/to/trace/source", callback2); TraceSource unattached NS-3 Consortium Meeting March 2013 NetDevice trace hooks • Example: CsmaNetDevice NetDevice:: CsmaNetDevice::Send () ReceiveCallback MacTx MacRx MacDrop queue Sniffer PromiscSniffer MacTxBackoff PhyTxBegin PhyRxEnd
    [Show full text]
  • Evolving Software Repositories
    1 Evolving Software Rep ositories http://www.netli b.org/utk/pro ject s/esr/ Jack Dongarra UniversityofTennessee and Oak Ridge National Lab oratory Ron Boisvert National Institute of Standards and Technology Eric Grosse AT&T Bell Lab oratories 2 Pro ject Fo cus Areas NHSE Overview Resource Cataloging and Distribution System RCDS Safe execution environments for mobile co de Application-l evel and content-oriented to ols Rep ository interop erabili ty Distributed, semantic-based searching 3 NHSE National HPCC Software Exchange NASA plus other agencies funded CRPC pro ject Center for ResearchonParallel Computation CRPC { Argonne National Lab oratory { California Institute of Technology { Rice University { Syracuse University { UniversityofTennessee Uniform interface to distributed HPCC software rep ositories Facilitation of cross-agency and interdisciplinary software reuse Material from ASTA, HPCS, and I ITA comp onents of the HPCC program http://www.netlib.org/nhse/ 4 Goals: Capture, preserve and makeavailable all software and software- related artifacts pro duced by the federal HPCC program. Soft- ware related artifacts include algorithms, sp eci cations, designs, do cumentation, rep ort, ... Promote formation, growth, and interop eration of discipline-oriented rep ositories that organize, evaluate, and add value to individual contributions. Employ and develop where necessary state-of-the-art technologies for assisting users in nding, understanding, and using HPCC software and technologies. 5 Bene ts: 1. Faster development of high-quality software so that scientists can sp end less time writing and debugging programs and more time on research problems. 2. Less duplication of software development e ort by sharing of soft- ware mo dules.
    [Show full text]
  • CS 6311 – Programming Languages I – Fall 2006 Assignment #1 (100 Pts) Due: 7:00Pm, Monday 9/25/6
    Most of the solutions are from Edwin Rudolph (who did an outstanding job on the assignment) with a few modifications. CS 6311 – Programming Languages I – Fall 2006 Assignment #1 (100 pts) Due: 7:00pm, Monday 9/25/6 Directions: The answers to the following questions must be typed in Microsoft Word and submitted as a Word document by the due date. There are a total of 40 questions. 1. A system of instructions and data directly understandable by a computer’s central processing unit is known as what? (1 pt) Machine language. 2. What is the name of the category of programming languages whose structure is dictated by the von Neumann computer architecture? (1 pt) Imperative. 3. Although PL/I and Ada were designed to be multi-purpose languages, in fact PL/I was considered to be the “language to end all languages”, why is there such difficulty in creating a general purpose programming language applicable to a wide range of areas? (3 pts) The difficulty in creating an all purpose language lies in the fact that the variety of problems that we ask computers to solve do not all lend themselves to being easily or conveniently expressed in the same way. Numerical processing involves different types of tasks than string processing; a program which computes trajectories of a spacecraft probably does not require extensive string processing facilities, just as a program to search for patterns in news feeds does not require extensive mathematical facilities. Attempting to create languages which provide facilities for solving all types of problems is that the language suffers from a feature bloat, not only making it difficult for programmers to effectively use it, but also making it more difficult to implement compilers and/or translators for.
    [Show full text]