Tips: How to get the most out of this Course (don´t skip!)
FAQ / Your Questions answered
How to download and install Anaconda for Python coding
Jupyter Notebooks - let´s get started
How to work with Jupyter Notebooks
Intro to the Time Value of Money (TVM) Concept (Theory)
Calculate Future Values (FV) with Python / Compounding
***NEW*** Udemy Online Coding Exercises - Intro
Calculate Present Values (PV) with Python / Discounting
Interest Rates and Returns (Theory)
Calculate Interest Rates and Returns with Python
Introduction to Variables
Excursus: How to add inline comments
Variables and Memory (Theory)
More on Variables and Memory
Variables - Dos Don´ts and Conventions
TVM Problems with many Cashflows
Zero-based Indexing and negative Indexing in Python (Theory)
For Loops - Iterating over Lists
The range Object - another Iterable
Iterating over range objects
Calculate FV and PV for many Cashflows
The Net Present Value - NPV (Theory)
Calculate an Investment Project´s NPV
The Data Type Hierarchy (Theory)
Excursus: Dynamic Typing in Python
How to round Floats (and Integers) with round()
Lists and Element-wise Operations
Changing Elements in Lists
Sorting and Reversing Lists
Adding and removing Elements from/to Lists
Adding and Removing Elements
Mutable vs. immutable Objects (Part 1)
Mutable vs. immutable Objects (Part 2)
Comparison Logical and Membership Operators in Action
Keywords pass continue and break
Calculate a Project´s Payback Period
The Internal Rate of Return - IRR (Theory)
Solving for a Project´s IRR
Bonds and the Yield to Maturity - YTM (Theory)
Solving for a Bond´s Yield to Maturity (YTM)
Modules Packages and Libraries - No need to reinvent the Wheel
Indexing and Slicing Numpy Arrays
Vectorized Operations with Numpy Arrays
PV with vectorized Numpy Code
Changing Elements in Numpy Arrays & Mutability
View vs. copy - potential Pitfalls when slicing Numpy Arrays
Changing elements in Arrays (and Copies)
Numpy Array Methods and Attributes
Numpy Universal Functions
Boolean Arrays and Conditional Filtering
Advanced Filtering & Bitwise Operators
Determining a Project´s Payback Period with np.where()
Creating Numpy Arrays from Scratch
Numpy Arrays from Scratch
Evaluating Investments with npf.npv() and npf.irr()
Evaluating Annuities with npf.fv() - Funding Phase
Evaluating Annuities with npf.fv() - Payout Phase
How to solve for annuity payments with npf.pmt()
How to solve for the number of periodic payments with npf.nper()
How to calculate the required Contract Value with npf.pv()
Frequency of compounding and the effective annual interest rate
How to evaluate a Retirement Plan A-Z
Retirement Plan: Sensitivity Analysis
Mortgage Loan Analysis - Debt Sizing
Mortgage Loan Analysis - Interest Payments and Amortization Schedule
Calculate PV of equal installments with npf.pv() - Valuation of Bonds
Capital Budgeting - Mutually exclusive Projects (Part 1)
Capital Budgeting - Mutually exclusive Projects (Part 2)
Capital Budgeting - Mutually exclusive Projects (Part 3)
Visualizing Frequency Distributions with plt.hist()
Relative and Cumulative Frequencies with plt.hist()
Measures of Central Tendency (Theory)
Coding Measures of Central Tendency - Mean and Median
Coding Measures of Central Tendency - Geometric Mean
Excursus: Why Log Returns are useful
Variability around the Central Tendency / Dispersion (Theory)
Minimum Maximum and Range with Python/Numpy
Variance and Standard Deviation with Python/Numpy
Percentiles with Python/Numpy
Skew and Kurtosis (Theory)
How to calculate Skew and Kurtosis with scipy.stats
How to generate Random Numbers with Numpy
Reproducibility with np.random.seed()
Probability Distributions - Overview
Discrete Uniform Distributions
Continuous Uniform Distributions
The Normal Distribution (Theory)
Creating a normally distributed Random Variable
Normal Distribution - Probability Density Function (pdf) with scipy.stats
Normal Distribution - Cumulative Distribution Function (cdf) with scipy.stats
The Standard Normal Distribution and Z-Values
Properties of the Standard Normal Distribution (Theory)
Probabilities and Z-Values with scipy.stats
Confidence Intervals with scipy.stats
Sample Statistic Sampling Error and Sampling Distribution (Theory)
Sampling with np.random.choice()
Central Limit Theorem (Coding Part 1)
Central Limit Theorem (Coding Part 2)
Central Limit Theorem (Theory)
Point Estimates vs. Confidence Interval Estimates (known Population Variance)
The Student´s t-distribution: What is it and why/when do we use it?
Unknown Population Variance - the Standard Case (Example 1)
Unknown Population Variance - the Standard Case (Example 2)
Student´s t-Distribution vs. Normal Distribution with scipy.stats
Bootstrapping with Python: an alternative method without Statistics
Hypothesis Testing (Theory)
Two-tailed Z-Test with known Population Variance
What is the p-value? (Theory)
Calculating and interpreting z-statistic and p-value with scipy.stats
One-tailed Z-Test with known Population Variance
Two-tailed t-Test (unknown Population Variance)
One-tailed t-Test (unknown Population Variance)
Hypothesis Testing with Bootstrapping
Testing for Normality of Financial Returns with scipy.stats
How to work with nested Lists
2-dimensional Numpy Arrays
How to slice 2-dim Numpy Arrays (Part 1)
How to slice 2-dim Numpy Arrays (Part 2)
Recap: Changing Elements in a Numpy Array / slice
How to perform row-wise and column-wise Operations
Reshaping and Transposing 2-dim Numpy Arrays
Creating 2-dim Numpy Arrays from Scratch
Arithmetic & Vectorized Operations with 2-dim Numpy Arrays
Adding & Removing Elements
Merging and Concatenating Numpy Arrays
Defining your first user-defined Function
What´s the difference between Positional Arguments vs. Keyword Arguments?
How to work with Default Arguments
The Default Argument None
Sequences as arguments and *args
How to return many results
How to create Nested Functions
Putting it all together - Case Study
What is the Value-at-Risk (VaR)? (Theory)
Analyzing the Data / past Performance
How to use the Parametric Method to calculate Value-at-Risk (VaR)
How to use the Historical Method to calculate Value-at-Risk (VaR)
Monte Carlo Simulations for Value-at-Risk - Parametric (Part 1)
Monte Carlo Simulations for Value-at-Risk - Parametric (Part 2)
Monte Carlo Simulations for Value-at-Risk - Parametric (Part 3)
Monte Carlo Simulations for Value-at-Risk - Bootstrapping (Part 1)
Monte Carlo Simulations for Value-at-Risk - Bootstrapping (Part 2)
Conditional Value-at-Risk (CVaR)
Dynamic & path-dependent Simulations (Part 1)
Dynamic & path-dependent Simulations (Part 2)
Dynamic & path-dependent Simulations (Part 3)
Dynamic & path-dependent Simulations (Part 4)
First Steps (Inspection of Data Part 1)
First Steps (Inspection of Data Part 2)
Built-in Functions Attributes and Methods
Explore your own Dataset: Coding Exercise 1 (Intro)
Explore your own Dataset: Coding Exercise 1 (Solution)
Selecting Rows with Square Brackets (not advisable)
Selecting Rows with iloc (position-based indexing)
Slicing Rows and Columns with iloc (position-based indexing)
Position-based Indexing Cheat Sheets
Selecting Rows with loc (label-based indexing)
Slicing Rows and Columns with loc (label-based indexing)
Label-based Indexing Cheat Sheets
Coding Exercise 2 (Intro)
Coding Exercise 2 (Solution)
First Steps with Pandas Series
Analyzing Numerical Series with unique() nunique() and value_counts()
UPDATE Pandas Version 0.24.0 (Jan 2019)
EXCURSUS: Updating Pandas / Anaconda
Analyzing non-numerical Series with unique() nunique() value_counts()
Sorting of Series and Introduction to the inplace - parameter
Coding Exercise 3 (Intro)
Coding Exercise 3 (Solution)
First Steps with Pandas Index Objects
Changing Row Index with set_index() and reset_index()
Renaming Index & Column Labels with rename()
Coding Exercise 4 (Intro)
Coding Exercise 4 (Solution)
Sorting DataFrames with sort_index() and sort_values()
nunique() and nlargest() / nsmallest() with DataFrames
Filtering DataFrames (one Condition)
Filtering DataFrames by many Conditions (AND)
Filtering DataFrames by many Conditions (OR)
Advanced Filtering with between() isin() and ~
Coding Exercise 5 (Intro)
Coding Exercise 5 (Solution)
Intro to NA Values / missing Values
Handling NA Values / missing Values
Exporting DataFrames to csv
Summary Statistics and Accumulations
Coding Exercise 6 (Intro)
Coding Exercise 6 (Solution)
Adding new Columns to a DataFrame
Arithmetic Operations (Part 1)
Arithmetic Operations (Part 2)
Creating DataFrames from Scratch with pd.DataFrame()
Adding new Rows (Hands-on)
Adding new Rows to a DataFrame
Manipulating Elements in a DataFrame
Coding Exercise 8 (Intro)
Coding Exercise 8 (Solution)
Introduction to GroupBy Operations
Understanding the GroupBy Object
split-apply-combine applied
Hierarchical Indexing with Groupby
Coding Exercise 9 (Intro)
Coding Exercise 9 (Solution)
Importing Time Series Data from csv-files
Converting strings to datetime objects with pd.to_datetime()
Initial Analysis / Visualization of Time Series
Indexing and Slicing Time Series
Creating a customized DatetimeIndex with pd.date_range()
Coding Exercise 10 (intro)
Coding Exercise 10 (Solution)
Downsampling Time Series with resample() (Part 1)
Downsampling Time Series with resample (Part 2)
Advanced Indexing with reindex()
Coding Exercise 11 (intro)
Coding Exercise 11 (Solution)
Getting Ready (Installing required library)
Importing Stock Price Data from Yahoo Finance (it still works!)
Initial Inspection and Visualization
Normalizing Time Series to a Base Value (100)
The methods diff() and pct_change()
Measuring Stock Performance with MEAN Returns and STD of Returns
Financial Time Series - Return and Risk
Financial Time Series - Covariance and Correlation
Importing Financial Data from Excel
Merging / Aligning Financial Time Series (hands-on)
Coding Exercise 12 (intro)
Coding Exercise 12 (Solution)
Creating the equally-weighted Portfolio
Creating many random Portfolios with Python
What is the Sharpe Ratio and a Risk Free Asset?
Portfolio Analysis and the Sharpe Ratio with Python
Finding the Optimal Portfolio
Excursus: Portfolio Optimization with scipy
Sharpe Ratio - visualized and explained
Coding Exercise 13 (Intro)
Coding Exercise 13 (Solution)
Capital Market Line (CML) & Two-Fund-Theorem
The Portfolio Diversification Effect
Systematic vs. unsystematic Risk
Capital Asset Pricing Model (CAPM) & Security Market Line (SLM)
Redefining the Market Portfolio
Cyclical vs. non-cyclical Stocks - another Intuition on Beta
Coding Exercise 14 (Intro)
Coding Exercise 14 (Solution)
Cleaning and preparing the Data - Movies Database (Part 1)
Cleaning and preparing the Data - Movies Database (Part 2)
Covariance and Correlation Coefficient (Theory)
How to calculate Covariance and Correlation in Python
Correlation and Scatterplots – visual Interpretation
Creating a Confidence Interval for the Correlation Coefficient (Bootstrapping)
Testing for Correlation (t-Test)
What is Linear Regression? (Theory)
A simple Linear Regression Model with numpy & Scipy
How to interpret Intercept and Slope Coefficient
Case Study (Part 1): The Market Model (Single Factor Model)
Case Study (Part 2): The Market Model (Single Factor Model)
OLS (Ordinary Least Squares) Regression (Theory)
OLS Regression with statsmodels - Intro
OLS Regression - ANOVA (Theory)
OLS Regression with Statsmodels - ANOVA
Coefficient of Determination (R squared)
OLS Regression with statsmodels and DataFrames
Confidence Intervals for Regression Coefficients - Bootstrapping
Hypothesis Testing of Regression Coefficients (Theory)
Hypothesis Testing of Regression Coefficients with statsmodels
Regression Analysis with statsmodels - the Summary Table
Case Study (Part 3): The Market Model (Single Factor Model)
Multiple Regression (Theory)
Movies Dataset - Preparing the Data
Multiple Regression Analysis with statsmodels
Coefficient of Determination (Adjusted R squared)
Regression Coefficients Hypothesis Testing & Model Specification
How to test the Significance of the Model as a whole (F-Test)
Creating and working with Dummy Variables (Part 1)
Creating and working with Dummy Variables (Part 2)
Fama-French: An Introduction
Single-Factor Models with the Fama-French Market Portfolio (Part 1)
Single-Factor Models with the Fama-French Market Portfolio (Part 2)
How to create a Fama-French Three-Factor Model
The Factors Profitability and Investment
How to create a Fama-French Five-Factor Model
Linear Regression - not that easy!
Detecting and Handling Outliers (Part 1)
Detecting and Handling Outliers (Part 2)
Non-Linear Relationships - Feature Transformation
Detecting and Handling Multicollinearity
Detecting and Correcting Heteroskedasticity
Detecting and Handling Serial Correlation (Autocorrelation)
Logistic Regression (Theory)
Logistic Regression with statsmodels (Part 1)
Logistic Regression with statsmodels (Part 2)
Downloads for this Section ***Updated May 2023***
Introduction to OOP and examples for Classes
The FinancialInstrument Class live in action (Part 1)
The FinancialInstrument Class live in action (Part 2)
The special method __init__()
String representation and the special method __repr__()
The methods plot_prices() and plot_returns()
Encapsulation and protected Attributes
Adding more methods and performance metrics
Inheritance and the super() Function
Adding meaningful Docstrings
Creating and Importing Python Modules (.py)
Coding Exercise: Create your own Class