{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## pandas' describe() function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$X \\sim \\mathcal N(1,2^2)$$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "x = 1.0 + 2.0 * np.random.randn(100000000)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "dataset = pd.DataFrame(x)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0
01.362232
1-0.087704
2-0.256481
33.171572
40.081185
\n", "
" ], "text/plain": [ " 0\n", "0 1.362232\n", "1 -0.087704\n", "2 -0.256481\n", "3 3.171572\n", "4 0.081185" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0
count1.000000e+08
mean1.000089e+00
std2.000164e+00
min-1.052901e+01
25%-3.490349e-01
50%1.000359e+00
75%2.349312e+00
max1.282455e+01
\n", "
" ], "text/plain": [ " 0\n", "count 1.000000e+08\n", "mean 1.000089e+00\n", "std 2.000164e+00\n", "min -1.052901e+01\n", "25% -3.490349e-01\n", "50% 1.000359e+00\n", "75% 2.349312e+00\n", "max 1.282455e+01" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\mathrm{count} \\leftrightarrow N$$\n", "$$\\mathrm{mean} \\leftrightarrow \\bar{X}, \\ \\mathrm{std} \\leftrightarrow s$$\n", "$$ 25\\% \\leftrightarrow Q_1, \\ 50\\% \\leftrightarrow M \\equiv Q_2,\\ 75\\% \\leftrightarrow Q_3$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Μέτρα Ασυμμετρίας" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Μέτρο ασυμμετρίας Pearson\n", "$$\\tilde{Sk}_p = \\frac{3(\\bar{X}-M)}{s}$$" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 1.000089\n", "dtype: float64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.mean()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 1.000359\n", "dtype: float64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.median()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 2.000164\n", "dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.std()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "pearson = 3*(dataset.mean()-dataset.median())/dataset.std()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 -0.000405\n", "dtype: float64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pearson" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Μέτρο ασυμμετρίας Bowley\n", "$$Sk_b = \\frac{(Q_3 - M)-(M-Q_1)}{Q_3-Q_1}$$" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "Q_1 = dataset.quantile(0.25)\n", "M = dataset.median()\n", "Q_3 = dataset.quantile(0.75)\n", "bowley = ((Q_3 - M) - (M - Q_1))/(Q_3-Q_1)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 -0.000164\n", "dtype: float64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bowley" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Καμπύλη Lorenz - Συντελεστής Gini" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "wage = np.array([5000, 10000, 15000, 20000, 50000])\n", "\n", "wage = np.insert(wage, 0, 0.0)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame(wage, columns=['x'])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x
00
15000
210000
315000
420000
550000
\n", "
" ], "text/plain": [ " x\n", "0 0\n", "1 5000\n", "2 10000\n", "3 15000\n", "4 20000\n", "5 50000" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\Phi_n = \\frac{\\sum_{j=1}^{n} x_j}{\\sum_{j=1}^{N} x_j}$$" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "100000" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['x'].sum()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 0\n", "1 5000\n", "2 15000\n", "3 30000\n", "4 50000\n", "5 100000\n", "Name: x, dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['x'].cumsum()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "df['Phi'] = df['x'].cumsum()/df['x'].sum()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xPhi
000.00
150000.05
2100000.15
3150000.30
4200000.50
5500001.00
\n", "
" ], "text/plain": [ " x Phi\n", "0 0 0.00\n", "1 5000 0.05\n", "2 10000 0.15\n", "3 15000 0.30\n", "4 20000 0.50\n", "5 50000 1.00" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array(range(len(wage)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$RF_n = \\frac{n}{N}$$" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "df['RF'] = np.array(range(len(wage)))/(len(wage)-1)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xPhiRF
000.000.0
150000.050.2
2100000.150.4
3150000.300.6
4200000.500.8
5500001.001.0
\n", "
" ], "text/plain": [ " x Phi RF\n", "0 0 0.00 0.0\n", "1 5000 0.05 0.2\n", "2 10000 0.15 0.4\n", "3 15000 0.30 0.6\n", "4 20000 0.50 0.8\n", "5 50000 1.00 1.0" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\{(RF_n,\\Phi_n)\\}_{n=1}^N$$" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.plot(x='RF',y='Phi')\n", "plt.plot((0,1),(0,1))" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.05, 0.15, 0.3 , 0.5 ])" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Phi'][:-1].values" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.05, 0.15, 0.3 , 0.5 , 1. ])" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Phi'][1:].values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\Sigma \\Phi_n = \\Phi_n + \\Phi_{n-1}$$" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "SPhi = df['Phi'][1:].values + df['Phi'][:-1].values" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.05, 0.2 , 0.45, 0.8 , 1.5 ])" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SPhi" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "SPhi = np.insert(SPhi, 0, 0.0)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.05, 0.2 , 0.45, 0.8 , 1.5 ])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SPhi" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "df['SPhi'] = SPhi" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xPhiRFSPhi
000.000.00.00
150000.050.20.05
2100000.150.40.20
3150000.300.60.45
4200000.500.80.80
5500001.001.01.50
\n", "
" ], "text/plain": [ " x Phi RF SPhi\n", "0 0 0.00 0.0 0.00\n", "1 5000 0.05 0.2 0.05\n", "2 10000 0.15 0.4 0.20\n", "3 15000 0.30 0.6 0.45\n", "4 20000 0.50 0.8 0.80\n", "5 50000 1.00 1.0 1.50" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\Delta RF_n = RF_n - RF_{n-1}$$" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "DRF = df['RF'][1:].values - df['RF'][0:-1].values" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "DRF = np.insert(DRF, 0, 0.0)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "df['DRF'] = DRF" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xPhiRFSPhiDRF
000.000.00.000.0
150000.050.20.050.2
2100000.150.40.200.2
3150000.300.60.450.2
4200000.500.80.800.2
5500001.001.01.500.2
\n", "
" ], "text/plain": [ " x Phi RF SPhi DRF\n", "0 0 0.00 0.0 0.00 0.0\n", "1 5000 0.05 0.2 0.05 0.2\n", "2 10000 0.15 0.4 0.20 0.2\n", "3 15000 0.30 0.6 0.45 0.2\n", "4 20000 0.50 0.8 0.80 0.2\n", "5 50000 1.00 1.0 1.50 0.2" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "df['SPhi_DRF'] = df['SPhi'] * df['DRF']" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xPhiRFSPhiDRFSPhi_DRF
000.000.00.000.00.00
150000.050.20.050.20.01
2100000.150.40.200.20.04
3150000.300.60.450.20.09
4200000.500.80.800.20.16
5500001.001.01.500.20.30
\n", "
" ], "text/plain": [ " x Phi RF SPhi DRF SPhi_DRF\n", "0 0 0.00 0.0 0.00 0.0 0.00\n", "1 5000 0.05 0.2 0.05 0.2 0.01\n", "2 10000 0.15 0.4 0.20 0.2 0.04\n", "3 15000 0.30 0.6 0.45 0.2 0.09\n", "4 20000 0.50 0.8 0.80 0.2 0.16\n", "5 50000 1.00 1.0 1.50 0.2 0.30" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "Gini = 1 - df['SPhi_DRF'].sum()" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Gini" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.16" } }, "nbformat": 4, "nbformat_minor": 4 }