SlideShare a Scribd company logo
1 of 22
Download to read offline
Python and R for
Quantitative Finance

    An Introduction

      Luca Sbardella
     luca.sbardella@gmail.com
             @lsbardel


       LondonR - Nov 09




         
Overview
1) Putting things into context
2) Python and R
3) Examples




             
1 ­ Context


How can quantitative finance pratictioners best
leverage their expertise without reinventing the
wheel and spending lots of their precious time
writing low level code?

          opensource technologies



                   
Current Approach

✔   Extensive use of large propriety C, C++ or Java libraries.
✔   Server­side applications written in
        ✔    .Net/C# ­ Windows servers
        ✔    Java – Windows & Linux/Unix
✔   VBA/Excel on the client side :(
✔   Some web/based clients :)
✔   Limited if inexistent use of powerful opensource 
      technologies/libraries.



                           
Problems

✔   Full development cycle in low­level languages is expensive
             C++ : Python = 7 : 1
✔   Writing code already developed many times before
✔   Difficult to adjust to new technologies as they become 
     available
✔   Often libraries are deployed on the client machine
✔   Some technologies (.Net) force a decision on the platform 
     to be used (Windows)



                            
A different approach

✔   Limit low­level development to critical number­crunching 
      components
✔   Use available high­standard opensource technologies
✔   Flexible, multiplatform server­side configuration
✔   Multi­language support
✔   Abstraction when possible
✔   Remote procedure calls (RPC)




                          
A proposed solution

✔   Use of Python as main server side driver
✔   Legacy C, C++ as Python modules (Boost­Python)
✔   Interaction with other technologies
        ✔    R ­ for statistics
        ✔    Erlang/Haskell – functional programming and 
               concurrency
        ✔    q – kdb+ timeseries database (commercial)
        ✔    Javascript/flex – web GUI front­end



                              
2 ­ Python and R

✔   Combine  two  of  the  most  used  and  powerful  opensource 
    languages to create a truly dynamic application framework.
✔   Benefit from an active community of developers and a vast 
    array of ready available libraries.
✔   Seemingless integration with C/C++ libraries




                          
Python?
✔   General-purpose high-level
      programming language
✔   Named after Monty Python
✔   by Guido Van Rossum
✔   in the late 1980s.
✔   Large community




                          
Python Features

✔   Dynamically typed
✔   Multi­paradigm design
        ✔   Object Oriented
        ✔   Metaprogramming (reflection)
        ✔   Functional programming
✔   Emphasizes semplicity
✔   Extendibility via C or C++ (boost.python, Cpython)




                          
Where?

✔   Fast Prototyping
✔   Scientific programming (numpy, scipy, …)
✔   Database abstraction (pyodbc, django)
✔   RPC servers (JSON, XML, Binary, ...)
✔   Domain Specific Languages (DSP)
✔   Web servers (mod_python, twisted, ...)
✔   Web Frameworks (django, zope, ...)
✔   Glue for anything you can think of


                         
R language

✔   Open source implementation of S/SPLUS
✔   Scripting language that excels in
        ✔    data analysis
        ✔    statistics and econometric
        ✔    graphics
✔   Huge collection of statistical packages available
✔   Can be used as stand­alone server side language but not 
     ideal



                              
Using R on the server­side

✔   Use R only for what has been design for
        ✔   Statistics & Math
✔   Embed R within Python domain




                           
Installing
✔   Install Python
✔   Install R and any R library of your choice
✔   Install numpy and rpy2
✔   Launch Python and run rpy2 test


$ python

>>>   from rpy2 import tests
>>>   import unittest
>>>   tr = unittest.TextTestRunner(verbosity = 1)
>>>   tr.run(tests.suite())



                           
3 ­ Examples

1) Sharing memory and arrays
2) Small server for rolling statistics calculation
3) A timeseries DSL (Domain Specific Language). Not 
    presented.




                         
3.1 Memory and Vectors

✔   When using rpy2 Python and R domains are co­existing
✔   Python manages objects pointing to data stored and 
     administered in the R space
✔   R variables are existing within an embedded R workspace, 
      and can be accessed from Python through their python 
      object representations (Sexp and subclasses).




                         
3.1 – Memory and Vectors
import rpy2.rinterface as ri
import numpy as ny

# Create an integer array in R domain
rx = ri.SexpVector([1,2,3,4], ri.INTSXP)

# Create a local copy in Python domain
nx = ny.array(rx)

# Proxy to R vector without coping
nx_nc = ny.asarray(rx)




                            
3.2 A small server

✔   A minimalist Client­server application
✔   The Python server uses R packages to perform time­series 
     analysis on historical stock prices
✔   The server exposes a RPC­JSON interface to the client
✔   Implement one function which calculate a simple rolling 
      moving avarage




                         
Code structure
Code can be found at http://github.com

http://github.com/lsbardel/statplay/tree/master/examples/londonr1109/

    londonr1109/
       __init__.py
       roll.py
       plot.py
       server1.py
       jsonrpc/
            __init__.py
            jsonlib.py
            proxy.py
            server.py




                            
System Requirements

✔   Python 2.6 or above
✔   R 2.8 or above
✔   rpy2 and numpy (core Python­R packages)
✔   matplotlib (for plotting client)
✔   proformanceAnalytics (R package)
✔   quantmod (R package)




                           
To start the server type

$ python server1.py 8080

The server is now ready to listen to requests on port 8080

To test the server the plot.py client can be used

To plot Google moving averages with rolloing window of 60
days type

$ python plot.py GOOG 60




                            
References

✔   Python: www.python.org
✔   R: www.r­project.org
✔   rpy2: http://rpy.sourceforge.net/
✔   numpy: www.numpy.org
✔   matplotlib: http://matplotlib.sourceforge.net
✔   twisted: http://twistedmatrix.com
✔   boost: http://www.boost.org/




                          

More Related Content

What's hot

Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...Spark Summit
 
Hadoop Architecture and HDFS
Hadoop Architecture and HDFSHadoop Architecture and HDFS
Hadoop Architecture and HDFSEdureka!
 
Sqoop on Spark for Data Ingestion
Sqoop on Spark for Data IngestionSqoop on Spark for Data Ingestion
Sqoop on Spark for Data IngestionDataWorks Summit
 
CA ERwin Data Modeler End User Presentation
CA ERwin Data Modeler End User PresentationCA ERwin Data Modeler End User Presentation
CA ERwin Data Modeler End User PresentationCA RMDM Latam
 
The Patterns of Distributed Logging and Containers
The Patterns of Distributed Logging and ContainersThe Patterns of Distributed Logging and Containers
The Patterns of Distributed Logging and ContainersSATOSHI TAGOMORI
 
Introduction of Knowledge Graphs
Introduction of Knowledge GraphsIntroduction of Knowledge Graphs
Introduction of Knowledge GraphsJeff Z. Pan
 
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and VormetricProtecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and Vormetricconfluent
 
How to Performance-Tune Apache Spark Applications in Large Clusters
How to Performance-Tune Apache Spark Applications in Large ClustersHow to Performance-Tune Apache Spark Applications in Large Clusters
How to Performance-Tune Apache Spark Applications in Large ClustersDatabricks
 
Smartsheet’s Transition to Snowflake and Databricks: The Why and Immediate Im...
Smartsheet’s Transition to Snowflake and Databricks: The Why and Immediate Im...Smartsheet’s Transition to Snowflake and Databricks: The Why and Immediate Im...
Smartsheet’s Transition to Snowflake and Databricks: The Why and Immediate Im...Databricks
 
Databricks Delta Lake and Its Benefits
Databricks Delta Lake and Its BenefitsDatabricks Delta Lake and Its Benefits
Databricks Delta Lake and Its BenefitsDatabricks
 
From Paper to Power using Azure Form Recognizer (Azure Sydney UG 2020)
From Paper to Power using Azure Form Recognizer (Azure Sydney UG 2020)From Paper to Power using Azure Form Recognizer (Azure Sydney UG 2020)
From Paper to Power using Azure Form Recognizer (Azure Sydney UG 2020)Jernej Kavka (JK)
 
FIWARE Global Summit - FIWARE Overview
FIWARE Global Summit - FIWARE OverviewFIWARE Global Summit - FIWARE Overview
FIWARE Global Summit - FIWARE OverviewFIWARE
 
Introducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data ScienceIntroducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data ScienceDatabricks
 
Data Quality Patterns in the Cloud with Azure Data Factory
Data Quality Patterns in the Cloud with Azure Data FactoryData Quality Patterns in the Cloud with Azure Data Factory
Data Quality Patterns in the Cloud with Azure Data FactoryMark Kromer
 
Introduction to natural language processing (NLP)
Introduction to natural language processing (NLP)Introduction to natural language processing (NLP)
Introduction to natural language processing (NLP)Alia Hamwi
 
KSQL - Stream Processing simplified!
KSQL - Stream Processing simplified!KSQL - Stream Processing simplified!
KSQL - Stream Processing simplified!Guido Schmutz
 
Deep Dive on Log Analytics with Elasticsearch Service
Deep Dive on Log Analytics with Elasticsearch ServiceDeep Dive on Log Analytics with Elasticsearch Service
Deep Dive on Log Analytics with Elasticsearch ServiceAmazon Web Services
 
PySpark Best Practices
PySpark Best PracticesPySpark Best Practices
PySpark Best PracticesCloudera, Inc.
 
New Directions for Apache Arrow
New Directions for Apache ArrowNew Directions for Apache Arrow
New Directions for Apache ArrowWes McKinney
 

What's hot (20)

Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
Clickstream Analysis with Spark—Understanding Visitors in Realtime by Josef A...
 
Hadoop Architecture and HDFS
Hadoop Architecture and HDFSHadoop Architecture and HDFS
Hadoop Architecture and HDFS
 
Sqoop on Spark for Data Ingestion
Sqoop on Spark for Data IngestionSqoop on Spark for Data Ingestion
Sqoop on Spark for Data Ingestion
 
CA ERwin Data Modeler End User Presentation
CA ERwin Data Modeler End User PresentationCA ERwin Data Modeler End User Presentation
CA ERwin Data Modeler End User Presentation
 
Treebank annotation
Treebank annotationTreebank annotation
Treebank annotation
 
The Patterns of Distributed Logging and Containers
The Patterns of Distributed Logging and ContainersThe Patterns of Distributed Logging and Containers
The Patterns of Distributed Logging and Containers
 
Introduction of Knowledge Graphs
Introduction of Knowledge GraphsIntroduction of Knowledge Graphs
Introduction of Knowledge Graphs
 
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and VormetricProtecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
 
How to Performance-Tune Apache Spark Applications in Large Clusters
How to Performance-Tune Apache Spark Applications in Large ClustersHow to Performance-Tune Apache Spark Applications in Large Clusters
How to Performance-Tune Apache Spark Applications in Large Clusters
 
Smartsheet’s Transition to Snowflake and Databricks: The Why and Immediate Im...
Smartsheet’s Transition to Snowflake and Databricks: The Why and Immediate Im...Smartsheet’s Transition to Snowflake and Databricks: The Why and Immediate Im...
Smartsheet’s Transition to Snowflake and Databricks: The Why and Immediate Im...
 
Databricks Delta Lake and Its Benefits
Databricks Delta Lake and Its BenefitsDatabricks Delta Lake and Its Benefits
Databricks Delta Lake and Its Benefits
 
From Paper to Power using Azure Form Recognizer (Azure Sydney UG 2020)
From Paper to Power using Azure Form Recognizer (Azure Sydney UG 2020)From Paper to Power using Azure Form Recognizer (Azure Sydney UG 2020)
From Paper to Power using Azure Form Recognizer (Azure Sydney UG 2020)
 
FIWARE Global Summit - FIWARE Overview
FIWARE Global Summit - FIWARE OverviewFIWARE Global Summit - FIWARE Overview
FIWARE Global Summit - FIWARE Overview
 
Introducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data ScienceIntroducing DataFrames in Spark for Large Scale Data Science
Introducing DataFrames in Spark for Large Scale Data Science
 
Data Quality Patterns in the Cloud with Azure Data Factory
Data Quality Patterns in the Cloud with Azure Data FactoryData Quality Patterns in the Cloud with Azure Data Factory
Data Quality Patterns in the Cloud with Azure Data Factory
 
Introduction to natural language processing (NLP)
Introduction to natural language processing (NLP)Introduction to natural language processing (NLP)
Introduction to natural language processing (NLP)
 
KSQL - Stream Processing simplified!
KSQL - Stream Processing simplified!KSQL - Stream Processing simplified!
KSQL - Stream Processing simplified!
 
Deep Dive on Log Analytics with Elasticsearch Service
Deep Dive on Log Analytics with Elasticsearch ServiceDeep Dive on Log Analytics with Elasticsearch Service
Deep Dive on Log Analytics with Elasticsearch Service
 
PySpark Best Practices
PySpark Best PracticesPySpark Best Practices
PySpark Best Practices
 
New Directions for Apache Arrow
New Directions for Apache ArrowNew Directions for Apache Arrow
New Directions for Apache Arrow
 

Similar to Python and R for quantitative finance

Python | What is Python | History of Python | Python Tutorial
Python | What is Python | History of Python | Python TutorialPython | What is Python | History of Python | Python Tutorial
Python | What is Python | History of Python | Python TutorialQA TrainingHub
 
Introduction of python programming
Introduction of python programmingIntroduction of python programming
Introduction of python programmingNitin Kumar Kashyap
 
Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...
Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...
Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...ScyllaDB
 
Approaches to debugging mixed-language HPC apps
Approaches to debugging mixed-language HPC appsApproaches to debugging mixed-language HPC apps
Approaches to debugging mixed-language HPC appsRogue Wave Software
 
Python workshop
Python workshopPython workshop
Python workshopShiraz LUG
 
Streaming Data in R
Streaming Data in RStreaming Data in R
Streaming Data in RRory Winston
 
Python quick guide1
Python quick guide1Python quick guide1
Python quick guide1Kanchilug
 
Open source analytics
Open source analyticsOpen source analytics
Open source analyticsAjay Ohri
 
Cloud native IPC for Microservices Workshop @ Containerdays 2022
Cloud native IPC for Microservices Workshop @ Containerdays 2022Cloud native IPC for Microservices Workshop @ Containerdays 2022
Cloud native IPC for Microservices Workshop @ Containerdays 2022QAware GmbH
 
Ali alshehri c++_comparison between c++&python
Ali alshehri c++_comparison between c++&pythonAli alshehri c++_comparison between c++&python
Ali alshehri c++_comparison between c++&pythonAliAAAlshehri
 
An overview of data and web-application development with Python
An overview of data and web-application development with PythonAn overview of data and web-application development with Python
An overview of data and web-application development with PythonSivaranjan Goswami
 
R as supporting tool for analytics and simulation
R as supporting tool for analytics and simulationR as supporting tool for analytics and simulation
R as supporting tool for analytics and simulationAlvaro Gil
 
Python tutorial for beginners - Tib academy
Python tutorial for beginners - Tib academyPython tutorial for beginners - Tib academy
Python tutorial for beginners - Tib academyTIB Academy
 

Similar to Python and R for quantitative finance (20)

Python | What is Python | History of Python | Python Tutorial
Python | What is Python | History of Python | Python TutorialPython | What is Python | History of Python | Python Tutorial
Python | What is Python | History of Python | Python Tutorial
 
Introduction of python programming
Introduction of python programmingIntroduction of python programming
Introduction of python programming
 
Go at uber
Go at uberGo at uber
Go at uber
 
Pyhton-1a-Basics.pdf
Pyhton-1a-Basics.pdfPyhton-1a-Basics.pdf
Pyhton-1a-Basics.pdf
 
Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...
Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...
Scylla Summit 2022: Learning Rust the Hard Way for a Production Kafka+ScyllaD...
 
Approaches to debugging mixed-language HPC apps
Approaches to debugging mixed-language HPC appsApproaches to debugging mixed-language HPC apps
Approaches to debugging mixed-language HPC apps
 
Python workshop
Python workshopPython workshop
Python workshop
 
Python workshop
Python workshopPython workshop
Python workshop
 
Learn python
Learn pythonLearn python
Learn python
 
PyData Boston 2013
PyData Boston 2013PyData Boston 2013
PyData Boston 2013
 
Python Online From EasyLearning Guru
Python Online From EasyLearning GuruPython Online From EasyLearning Guru
Python Online From EasyLearning Guru
 
Streaming Data in R
Streaming Data in RStreaming Data in R
Streaming Data in R
 
Python quick guide1
Python quick guide1Python quick guide1
Python quick guide1
 
Open source analytics
Open source analyticsOpen source analytics
Open source analytics
 
Cloud native IPC for Microservices Workshop @ Containerdays 2022
Cloud native IPC for Microservices Workshop @ Containerdays 2022Cloud native IPC for Microservices Workshop @ Containerdays 2022
Cloud native IPC for Microservices Workshop @ Containerdays 2022
 
Ali alshehri c++_comparison between c++&python
Ali alshehri c++_comparison between c++&pythonAli alshehri c++_comparison between c++&python
Ali alshehri c++_comparison between c++&python
 
An overview of data and web-application development with Python
An overview of data and web-application development with PythonAn overview of data and web-application development with Python
An overview of data and web-application development with Python
 
R as supporting tool for analytics and simulation
R as supporting tool for analytics and simulationR as supporting tool for analytics and simulation
R as supporting tool for analytics and simulation
 
Introduction To Python
Introduction To PythonIntroduction To Python
Introduction To Python
 
Python tutorial for beginners - Tib academy
Python tutorial for beginners - Tib academyPython tutorial for beginners - Tib academy
Python tutorial for beginners - Tib academy
 

Recently uploaded

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 

Recently uploaded (20)

DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 

Python and R for quantitative finance

  • 1. Python and R for Quantitative Finance An Introduction Luca Sbardella luca.sbardella@gmail.com @lsbardel LondonR - Nov 09    
  • 3. 1 ­ Context How can quantitative finance pratictioners best leverage their expertise without reinventing the wheel and spending lots of their precious time writing low level code? opensource technologies    
  • 4. Current Approach ✔ Extensive use of large propriety C, C++ or Java libraries. ✔ Server­side applications written in ✔ .Net/C# ­ Windows servers ✔ Java – Windows & Linux/Unix ✔ VBA/Excel on the client side :( ✔ Some web/based clients :) ✔ Limited if inexistent use of powerful opensource  technologies/libraries.    
  • 5. Problems ✔ Full development cycle in low­level languages is expensive C++ : Python = 7 : 1 ✔ Writing code already developed many times before ✔ Difficult to adjust to new technologies as they become  available ✔ Often libraries are deployed on the client machine ✔ Some technologies (.Net) force a decision on the platform  to be used (Windows)    
  • 6. A different approach ✔ Limit low­level development to critical number­crunching  components ✔ Use available high­standard opensource technologies ✔ Flexible, multiplatform server­side configuration ✔ Multi­language support ✔ Abstraction when possible ✔ Remote procedure calls (RPC)    
  • 7. A proposed solution ✔ Use of Python as main server side driver ✔ Legacy C, C++ as Python modules (Boost­Python) ✔ Interaction with other technologies ✔ R ­ for statistics ✔ Erlang/Haskell – functional programming and  concurrency ✔ q – kdb+ timeseries database (commercial) ✔ Javascript/flex – web GUI front­end    
  • 8. 2 ­ Python and R ✔ Combine  two  of  the  most  used  and  powerful  opensource  languages to create a truly dynamic application framework. ✔ Benefit from an active community of developers and a vast  array of ready available libraries. ✔ Seemingless integration with C/C++ libraries    
  • 9. Python? ✔ General-purpose high-level programming language ✔ Named after Monty Python ✔ by Guido Van Rossum ✔ in the late 1980s. ✔ Large community    
  • 10. Python Features ✔ Dynamically typed ✔ Multi­paradigm design ✔ Object Oriented ✔ Metaprogramming (reflection) ✔ Functional programming ✔ Emphasizes semplicity ✔ Extendibility via C or C++ (boost.python, Cpython)    
  • 11. Where? ✔ Fast Prototyping ✔ Scientific programming (numpy, scipy, …) ✔ Database abstraction (pyodbc, django) ✔ RPC servers (JSON, XML, Binary, ...) ✔ Domain Specific Languages (DSP) ✔ Web servers (mod_python, twisted, ...) ✔ Web Frameworks (django, zope, ...) ✔ Glue for anything you can think of    
  • 12. R language ✔ Open source implementation of S/SPLUS ✔ Scripting language that excels in ✔ data analysis ✔ statistics and econometric ✔ graphics ✔ Huge collection of statistical packages available ✔ Can be used as stand­alone server side language but not  ideal    
  • 13. Using R on the server­side ✔ Use R only for what has been design for ✔ Statistics & Math ✔ Embed R within Python domain    
  • 14. Installing ✔ Install Python ✔ Install R and any R library of your choice ✔ Install numpy and rpy2 ✔ Launch Python and run rpy2 test $ python >>> from rpy2 import tests >>> import unittest >>> tr = unittest.TextTestRunner(verbosity = 1) >>> tr.run(tests.suite())    
  • 16. 3.1 Memory and Vectors ✔ When using rpy2 Python and R domains are co­existing ✔ Python manages objects pointing to data stored and  administered in the R space ✔ R variables are existing within an embedded R workspace,  and can be accessed from Python through their python  object representations (Sexp and subclasses).    
  • 17. 3.1 – Memory and Vectors import rpy2.rinterface as ri import numpy as ny # Create an integer array in R domain rx = ri.SexpVector([1,2,3,4], ri.INTSXP) # Create a local copy in Python domain nx = ny.array(rx) # Proxy to R vector without coping nx_nc = ny.asarray(rx)    
  • 18. 3.2 A small server ✔ A minimalist Client­server application ✔ The Python server uses R packages to perform time­series  analysis on historical stock prices ✔ The server exposes a RPC­JSON interface to the client ✔ Implement one function which calculate a simple rolling  moving avarage    
  • 19. Code structure Code can be found at http://github.com http://github.com/lsbardel/statplay/tree/master/examples/londonr1109/ londonr1109/ __init__.py roll.py plot.py server1.py jsonrpc/ __init__.py jsonlib.py proxy.py server.py    
  • 20. System Requirements ✔ Python 2.6 or above ✔ R 2.8 or above ✔ rpy2 and numpy (core Python­R packages) ✔ matplotlib (for plotting client) ✔ proformanceAnalytics (R package) ✔ quantmod (R package)    
  • 21. To start the server type $ python server1.py 8080 The server is now ready to listen to requests on port 8080 To test the server the plot.py client can be used To plot Google moving averages with rolloing window of 60 days type $ python plot.py GOOG 60    
  • 22. References ✔ Python: www.python.org ✔ R: www.r­project.org ✔ rpy2: http://rpy.sourceforge.net/ ✔ numpy: www.numpy.org ✔ matplotlib: http://matplotlib.sourceforge.net ✔ twisted: http://twistedmatrix.com ✔ boost: http://www.boost.org/