├── .gitignore ├── README.md ├── data_visualization ├── Basic Bar.ipynb ├── Data_visualization.ipynb ├── bar_project.py ├── cmu_profit │ ├── DataFrame_IV.ipynb │ ├── GOOG.csv │ └── MSFT.csv ├── histogram │ ├── GOOG.csv │ ├── Histogram.ipynb │ └── MSFT.csv ├── interactive_2d.ipynb ├── line_chart_two_axis │ ├── GOOG.csv │ ├── Line-Chart-with-double-axis.ipynb │ └── MSFT.csv ├── pie_chart │ ├── Nested-Pie-Charts.ipynb │ ├── Pie_Chart.ipynb │ └── revenue.xlsx ├── revenue.xlsx ├── scatter │ ├── Scatter.ipynb │ └── risk_return.csv └── seaborn.ipynb ├── gentle_start ├── EP1_抓資料.ipynb ├── EP2創建資料庫.ipynb ├── EP3_股票收益率?.ipynb ├── EP4_MLE.ipynb ├── EP5_TA.ipynb ├── EP6_RSI_KD.ipynb ├── EP7_2MA.ipynb ├── Portfolio_Construction_PyInvest.pdf └── 下載央行資料.ipynb ├── stat_learning └── Statisics_Learning.pdf ├── stock_price ├── file.csv └── 股價圖.ipynb └── zipline_tutorial ├── WF_basic.ipynb ├── Zipline_tutorial.ipynb └── zipline_more_examples.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints 2 | */.ipynb_checkpoints/* 3 | 4 | ## Core latex/pdflatex auxiliary files: 5 | *.aux 6 | *.lof 7 | *.log 8 | *.lot 9 | *.fls 10 | *.out 11 | *.toc 12 | *.fmt 13 | *.fot 14 | *.cb 15 | *.cb2 16 | .*.lb 17 | 18 | ## Intermediate documents: 19 | *.dvi 20 | *.xdv 21 | *-converted-to.* 22 | # these rules might exclude image files for figures etc. 23 | # *.ps 24 | # *.eps 25 | # *.pdf 26 | 27 | ## Generated if empty string is given at "Please type another file name for output:" 28 | .pdf 29 | 30 | ## Bibliography auxiliary files (bibtex/biblatex/biber): 31 | *.bbl 32 | *.bcf 33 | *.blg 34 | *-blx.aux 35 | *-blx.bib 36 | *.run.xml 37 | 38 | ## Build tool auxiliary files: 39 | *.fdb_latexmk 40 | *.synctex 41 | *.synctex(busy) 42 | *.synctex.gz 43 | *.synctex.gz(busy) 44 | *.pdfsync 45 | 46 | ## Build tool directories for auxiliary files 47 | # latexrun 48 | latex.out/ 49 | 50 | ## Auxiliary and intermediate files from other packages: 51 | # algorithms 52 | *.alg 53 | *.loa 54 | 55 | # achemso 56 | acs-*.bib 57 | 58 | # amsthm 59 | *.thm 60 | 61 | # beamer 62 | *.nav 63 | *.pre 64 | *.snm 65 | *.vrb 66 | 67 | # changes 68 | *.soc 69 | 70 | # comment 71 | *.cut 72 | 73 | # cprotect 74 | *.cpt 75 | 76 | # elsarticle (documentclass of Elsevier journals) 77 | *.spl 78 | 79 | # endnotes 80 | *.ent 81 | 82 | # fixme 83 | *.lox 84 | 85 | # feynmf/feynmp 86 | *.mf 87 | *.mp 88 | *.t[1-9] 89 | *.t[1-9][0-9] 90 | *.tfm 91 | 92 | #(r)(e)ledmac/(r)(e)ledpar 93 | *.end 94 | *.?end 95 | *.[1-9] 96 | *.[1-9][0-9] 97 | *.[1-9][0-9][0-9] 98 | *.[1-9]R 99 | *.[1-9][0-9]R 100 | *.[1-9][0-9][0-9]R 101 | *.eledsec[1-9] 102 | *.eledsec[1-9]R 103 | *.eledsec[1-9][0-9] 104 | *.eledsec[1-9][0-9]R 105 | *.eledsec[1-9][0-9][0-9] 106 | *.eledsec[1-9][0-9][0-9]R 107 | 108 | # glossaries 109 | *.acn 110 | *.acr 111 | *.glg 112 | *.glo 113 | *.gls 114 | *.glsdefs 115 | *.lzo 116 | *.lzs 117 | 118 | # uncomment this for glossaries-extra (will ignore makeindex's style files!) 119 | # *.ist 120 | 121 | # gnuplottex 122 | *-gnuplottex-* 123 | 124 | # gregoriotex 125 | *.gaux 126 | *.gtex 127 | 128 | # htlatex 129 | *.4ct 130 | *.4tc 131 | *.idv 132 | *.lg 133 | *.trc 134 | *.xref 135 | 136 | # hyperref 137 | *.brf 138 | 139 | # knitr 140 | *-concordance.tex 141 | # TODO Comment the next line if you want to keep your tikz graphics files 142 | *.tikz 143 | *-tikzDictionary 144 | 145 | # listings 146 | *.lol 147 | 148 | # luatexja-ruby 149 | *.ltjruby 150 | 151 | # makeidx 152 | *.idx 153 | *.ilg 154 | *.ind 155 | 156 | # minitoc 157 | *.maf 158 | *.mlf 159 | *.mlt 160 | *.mtc[0-9]* 161 | *.slf[0-9]* 162 | *.slt[0-9]* 163 | *.stc[0-9]* 164 | 165 | # minted 166 | _minted* 167 | *.pyg 168 | 169 | # morewrites 170 | *.mw 171 | 172 | # nomencl 173 | *.nlg 174 | *.nlo 175 | *.nls 176 | 177 | # pax 178 | *.pax 179 | 180 | # pdfpcnotes 181 | *.pdfpc 182 | 183 | # sagetex 184 | *.sagetex.sage 185 | *.sagetex.py 186 | *.sagetex.scmd 187 | 188 | # scrwfile 189 | *.wrt 190 | 191 | # sympy 192 | *.sout 193 | *.sympy 194 | sympy-plots-for-*.tex/ 195 | 196 | # pdfcomment 197 | *.upa 198 | *.upb 199 | 200 | # pythontex 201 | *.pytxcode 202 | pythontex-files-*/ 203 | 204 | # tcolorbox 205 | *.listing 206 | 207 | # thmtools 208 | *.loe 209 | 210 | # TikZ & PGF 211 | *.dpth 212 | *.md5 213 | *.auxlock 214 | 215 | # todonotes 216 | *.tdo 217 | 218 | # vhistory 219 | *.hst 220 | *.ver 221 | 222 | # easy-todo 223 | *.lod 224 | 225 | # xcolor 226 | *.xcp 227 | 228 | # xmpincl 229 | *.xmpi 230 | 231 | # xindy 232 | *.xdy 233 | 234 | # xypic precompiled matrices and outlines 235 | *.xyc 236 | *.xyd 237 | 238 | # endfloat 239 | *.ttt 240 | *.fff 241 | 242 | # Latexian 243 | TSWLatexianTemp* 244 | 245 | ## Editors: 246 | # WinEdt 247 | *.bak 248 | *.sav 249 | 250 | # Texpad 251 | .texpadtmp 252 | 253 | # LyX 254 | *.lyx~ 255 | 256 | # Kile 257 | *.backup 258 | 259 | # gummi 260 | .*.swp 261 | 262 | # KBibTeX 263 | *~[0-9]* 264 | 265 | # TeXnicCenter 266 | *.tps 267 | 268 | # auto folder when using emacs and auctex 269 | ./auto/* 270 | *.el 271 | 272 | # expex forward references with \gathertags 273 | *-tags.tex 274 | 275 | # standalone packages 276 | *.sta 277 | 278 | # Makeindex log files 279 | *.lpz 280 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # python_finance_tutorial 2 | This is a simple tutorial for manipulating financial data. 3 | -------------------------------------------------------------------------------- /data_visualization/Basic Bar.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### matplotlib畫基本條狀圖\n", 8 | "\n", 9 | "假設有A,B,C三種品牌的銷售量,怎麼用圖形來表達它?\n", 10 | "\n", 11 | "-> Bar(條狀圖) 是一個好選擇" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 2, 17 | "metadata": {}, 18 | "outputs": [ 19 | { 20 | "data": { 21 | "image/png": "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\n", 22 | "text/plain": [ 23 | "
" 24 | ] 25 | }, 26 | "metadata": { 27 | "needs_background": "light" 28 | }, 29 | "output_type": "display_data" 30 | } 31 | ], 32 | "source": [ 33 | "import matplotlib.pyplot as plt\n", 34 | "\n", 35 | "\n", 36 | "sales = [100,80,50]\n", 37 | "x_labels = ['A','B','C']\n", 38 | "\n", 39 | "plt.bar(x_labels,sales)\n", 40 | "plt.show()" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 3, 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "data": { 50 | "image/png": "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\n", 51 | "text/plain": [ 52 | "
" 53 | ] 54 | }, 55 | "metadata": { 56 | "needs_background": "light" 57 | }, 58 | "output_type": "display_data" 59 | } 60 | ], 61 | "source": [ 62 | "import matplotlib.pyplot as plt\n", 63 | "\n", 64 | "sales = [100,80,50]\n", 65 | "x_labels = ['A','B','C']\n", 66 | "\n", 67 | "plt.barh(x_labels,sales)\n", 68 | "plt.show()" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 5, 74 | "metadata": {}, 75 | "outputs": [ 76 | { 77 | "data": { 78 | "image/png": "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\n", 79 | "text/plain": [ 80 | "
" 81 | ] 82 | }, 83 | "metadata": { 84 | "needs_background": "light" 85 | }, 86 | "output_type": "display_data" 87 | } 88 | ], 89 | "source": [ 90 | "import matplotlib.pyplot as plt\n", 91 | "\n", 92 | "sales = [100,80,50]\n", 93 | "x_labels = ['A','B','C']\n", 94 | "\n", 95 | "plt.bar(x_labels,sales,color=['black','blue','red'])\n", 96 | "plt.show()" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": 6, 102 | "metadata": {}, 103 | "outputs": [ 104 | { 105 | "data": { 106 | "image/png": "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\n", 107 | "text/plain": [ 108 | "
" 109 | ] 110 | }, 111 | "metadata": { 112 | "needs_background": "light" 113 | }, 114 | "output_type": "display_data" 115 | } 116 | ], 117 | "source": [ 118 | "import matplotlib.pyplot as plt\n", 119 | "\n", 120 | "sales = [100,80,50]\n", 121 | "x_labels = ['A','B','C']\n", 122 | "\n", 123 | "plt.bar(x_labels,sales,color=['white','white','white'],edgecolor='blue')\n", 124 | "plt.show()" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 9, 130 | "metadata": {}, 131 | "outputs": [ 132 | { 133 | "data": { 134 | "image/png": "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\n", 135 | "text/plain": [ 136 | "
" 137 | ] 138 | }, 139 | "metadata": { 140 | "needs_background": "light" 141 | }, 142 | "output_type": "display_data" 143 | } 144 | ], 145 | "source": [ 146 | "#加入標題 軸說明\n", 147 | "import matplotlib.pyplot as plt\n", 148 | "\n", 149 | "\n", 150 | "sales = [100,80,50]\n", 151 | "x_labels = ['A','B','C']\n", 152 | "plt.title('My title')\n", 153 | "plt.xlabel('Items')\n", 154 | "plt.ylabel('Sales')\n", 155 | "plt.bar(x_labels,sales)\n", 156 | "plt.show()" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 11, 162 | "metadata": {}, 163 | "outputs": [ 164 | { 165 | "data": { 166 | "image/png": "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\n", 167 | "text/plain": [ 168 | "
" 169 | ] 170 | }, 171 | "metadata": { 172 | "needs_background": "light" 173 | }, 174 | "output_type": "display_data" 175 | } 176 | ], 177 | "source": [ 178 | "#控制x軸位置\n", 179 | "import matplotlib.pyplot as plt\n", 180 | "\n", 181 | "\n", 182 | "sales = [100,80,50]\n", 183 | "x_labels = ['A','B','C']\n", 184 | "sales_pos = [0,1,5]\n", 185 | "plt.bar(sales_pos,sales)\n", 186 | "plt.xticks(sales_pos,x_labels)\n", 187 | "plt.show()" 188 | ] 189 | }, 190 | { 191 | "cell_type": "code", 192 | "execution_count": 12, 193 | "metadata": {}, 194 | "outputs": [ 195 | { 196 | "data": { 197 | "image/png": "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\n", 198 | "text/plain": [ 199 | "
" 200 | ] 201 | }, 202 | "metadata": { 203 | "needs_background": "light" 204 | }, 205 | "output_type": "display_data" 206 | } 207 | ], 208 | "source": [ 209 | "#控制x軸寬度\n", 210 | "import matplotlib.pyplot as plt\n", 211 | "\n", 212 | "\n", 213 | "sales = [100,80,50]\n", 214 | "x_labels = ['A','B','C']\n", 215 | "sales_pos = [0,1,5]\n", 216 | "widths = [0.1,0.2,3]\n", 217 | "plt.bar(sales_pos,sales,width=widths)\n", 218 | "plt.xticks(sales_pos,x_labels)\n", 219 | "plt.show()" 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": null, 225 | "metadata": {}, 226 | "outputs": [], 227 | "source": [] 228 | } 229 | ], 230 | "metadata": { 231 | "kernelspec": { 232 | "display_name": "Python 3", 233 | "language": "python", 234 | "name": "python3" 235 | }, 236 | "language_info": { 237 | "codemirror_mode": { 238 | "name": "ipython", 239 | "version": 3 240 | }, 241 | "file_extension": ".py", 242 | "mimetype": "text/x-python", 243 | "name": "python", 244 | "nbconvert_exporter": "python", 245 | "pygments_lexer": "ipython3", 246 | "version": "3.7.3" 247 | } 248 | }, 249 | "nbformat": 4, 250 | "nbformat_minor": 2 251 | } 252 | -------------------------------------------------------------------------------- /data_visualization/bar_project.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import matplotlib.pyplot as plt 3 | from matplotlib.animation import FuncAnimation 4 | 5 | 6 | data = pd.read_csv('data.csv') 7 | data = data.groupby('Country/Region').sum() 8 | data = data.iloc[:,2:] 9 | 10 | 11 | def animate(i): 12 | date = pd.to_datetime(data.columns[i]).strftime('%Y-%m-%d') 13 | countries = list(data.iloc[:,i].sort_values()[-5:].index) 14 | values = list(data.iloc[:,i].sort_values()[-5:]) 15 | plt.cla() 16 | plt.barh(countries,values) 17 | plt.title(date) 18 | 19 | plt.figure(figsize=(20,15)) 20 | ani = FuncAnimation(plt.gcf(),animate,interval=1000,frames=len(data.columns)-1) 21 | plt.show() -------------------------------------------------------------------------------- /data_visualization/histogram/Histogram.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "import matplotlib.pyplot as plt\n", 11 | "%matplotlib inline" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 2, 17 | "metadata": {}, 18 | "outputs": [ 19 | { 20 | "data": { 21 | "text/html": [ 22 | "
\n", 23 | "\n", 36 | "\n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | "
G_pctM_pct
Date
2018-12-040.0518490.040939
2018-12-060.0392230.040381
2018-12-070.0454640.049377
2018-12-100.0245870.039369
2018-12-110.0199650.032669
\n", 77 | "
" 78 | ], 79 | "text/plain": [ 80 | " G_pct M_pct\n", 81 | "Date \n", 82 | "2018-12-04 0.051849 0.040939\n", 83 | "2018-12-06 0.039223 0.040381\n", 84 | "2018-12-07 0.045464 0.049377\n", 85 | "2018-12-10 0.024587 0.039369\n", 86 | "2018-12-11 0.019965 0.032669" 87 | ] 88 | }, 89 | "execution_count": 2, 90 | "metadata": {}, 91 | "output_type": "execute_result" 92 | } 93 | ], 94 | "source": [ 95 | "GOOG=pd.read_csv('GOOG.csv')\n", 96 | "MSFT=pd.read_csv('MSFT.csv')\n", 97 | "GOOG.set_index(pd.to_datetime(GOOG['Date'],format='%Y-%m-%d'),inplace=True)\n", 98 | "MSFT.set_index(pd.to_datetime(MSFT['Date'],format='%Y-%m-%d'),inplace=True)\n", 99 | "# GOOG['G_pct']=(GOOG['High']-GOOG['Low'])\n", 100 | "# MSFT['M_pct']=(MSFT['High']-MSFT['Low'])\n", 101 | "GOOG['G_pct']=(GOOG['High']-GOOG['Low'])/GOOG['Low']\n", 102 | "MSFT['M_pct']=(MSFT['High']-MSFT['Low'])/MSFT['Low']\n", 103 | "df=pd.merge(GOOG,MSFT,left_index=True,right_index=True,how='inner')\n", 104 | "df=df[['G_pct','M_pct']]\n", 105 | "df.tail()\n" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 3, 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "data": { 115 | "text/html": [ 116 | "
\n", 117 | "\n", 130 | "\n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | "
DateOpenHighLowCloseAdj CloseVolumeG_pct
Date
2013-12-122013-12-12536.296875537.971008531.046082531.522949531.52294932136000.013040
2013-12-132013-12-13534.225403534.667480525.526978526.967590526.96759043528000.017393
2013-12-162013-12-16528.562195533.872681527.573669533.023193533.02319332248000.011940
2013-12-172013-12-17532.943726536.888062530.738037531.473267531.47326730913000.011588
2013-12-182013-12-18532.461853538.969543526.098267538.870178538.87017844493000.024466
\n", 213 | "
" 214 | ], 215 | "text/plain": [ 216 | " Date Open High Low Close \\\n", 217 | "Date \n", 218 | "2013-12-12 2013-12-12 536.296875 537.971008 531.046082 531.522949 \n", 219 | "2013-12-13 2013-12-13 534.225403 534.667480 525.526978 526.967590 \n", 220 | "2013-12-16 2013-12-16 528.562195 533.872681 527.573669 533.023193 \n", 221 | "2013-12-17 2013-12-17 532.943726 536.888062 530.738037 531.473267 \n", 222 | "2013-12-18 2013-12-18 532.461853 538.969543 526.098267 538.870178 \n", 223 | "\n", 224 | " Adj Close Volume G_pct \n", 225 | "Date \n", 226 | "2013-12-12 531.522949 3213600 0.013040 \n", 227 | "2013-12-13 526.967590 4352800 0.017393 \n", 228 | "2013-12-16 533.023193 3224800 0.011940 \n", 229 | "2013-12-17 531.473267 3091300 0.011588 \n", 230 | "2013-12-18 538.870178 4449300 0.024466 " 231 | ] 232 | }, 233 | "execution_count": 3, 234 | "metadata": {}, 235 | "output_type": "execute_result" 236 | } 237 | ], 238 | "source": [ 239 | "GOOG.head()" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": 4, 245 | "metadata": {}, 246 | "outputs": [ 247 | { 248 | "data": { 249 | "text/plain": [ 250 | "array([[,\n", 251 | " ]],\n", 252 | " dtype=object)" 253 | ] 254 | }, 255 | "execution_count": 4, 256 | "metadata": {}, 257 | "output_type": "execute_result" 258 | }, 259 | { 260 | "data": { 261 | "image/png": "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\n", 262 | "text/plain": [ 263 | "
" 264 | ] 265 | }, 266 | "metadata": { 267 | "needs_background": "light" 268 | }, 269 | "output_type": "display_data" 270 | } 271 | ], 272 | "source": [ 273 | "df.hist()" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 5, 279 | "metadata": {}, 280 | "outputs": [ 281 | { 282 | "data": { 283 | "image/png": "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\n", 284 | "text/plain": [ 285 | "
" 286 | ] 287 | }, 288 | "metadata": { 289 | "needs_background": "light" 290 | }, 291 | "output_type": "display_data" 292 | } 293 | ], 294 | "source": [ 295 | "df['G_pct'].hist(bins=20,density=True,color='skyblue',label='GOOG',alpha=0.5)\n", 296 | "df['M_pct'].hist(bins=20,density=True,color='pink',label='MSFT',alpha=0.5)\n", 297 | "plt.legend()\n", 298 | "plt.show()" 299 | ] 300 | }, 301 | { 302 | "cell_type": "code", 303 | "execution_count": 6, 304 | "metadata": {}, 305 | "outputs": [ 306 | { 307 | "data": { 308 | "text/plain": [ 309 | "" 310 | ] 311 | }, 312 | "execution_count": 6, 313 | "metadata": {}, 314 | "output_type": "execute_result" 315 | }, 316 | { 317 | "data": { 318 | "image/png": "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\n", 319 | "text/plain": [ 320 | "
" 321 | ] 322 | }, 323 | "metadata": { 324 | "needs_background": "light" 325 | }, 326 | "output_type": "display_data" 327 | } 328 | ], 329 | "source": [ 330 | "df['G_pct'].hist(bins=20,density=True,range=(0,0.03),color='skyblue',cumulative=True,orientation='horizontal')" 331 | ] 332 | }, 333 | { 334 | "cell_type": "code", 335 | "execution_count": null, 336 | "metadata": {}, 337 | "outputs": [], 338 | "source": [] 339 | } 340 | ], 341 | "metadata": { 342 | "kernelspec": { 343 | "display_name": "Python 3", 344 | "language": "python", 345 | "name": "python3" 346 | }, 347 | "language_info": { 348 | "codemirror_mode": { 349 | "name": "ipython", 350 | "version": 3 351 | }, 352 | "file_extension": ".py", 353 | "mimetype": "text/x-python", 354 | "name": "python", 355 | "nbconvert_exporter": "python", 356 | "pygments_lexer": "ipython3", 357 | "version": "3.5.6" 358 | } 359 | }, 360 | "nbformat": 4, 361 | "nbformat_minor": 2 362 | } 363 | -------------------------------------------------------------------------------- /data_visualization/pie_chart/Nested-Pie-Charts.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import matplotlib.pyplot as plt\n", 10 | "%matplotlib inline" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "class_1=['Finance','Industry','IT']\n", 20 | "class_2=['Banks','Securities','Cars','Oils','Computers','5G']\n", 21 | "\n", 22 | "val_1=[80,70,100]\n", 23 | "val_2=[30,50,35,35,30,70]" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 3, 29 | "metadata": {}, 30 | "outputs": [ 31 | { 32 | "data": { 33 | "image/png": "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\n", 34 | "text/plain": [ 35 | "
" 36 | ] 37 | }, 38 | "metadata": {}, 39 | "output_type": "display_data" 40 | } 41 | ], 42 | "source": [ 43 | "fig,ax=plt.subplots(figsize=(5,5))\n", 44 | "\n", 45 | "colors=['lightblue','skyblue','lightcoral','orange','lightgreen','limegreen']\n", 46 | "\n", 47 | "pie1,c1_text,n1_text=ax.pie(val_1,labels=class_1,autopct='%.2f%%',radius=0.7,labeldistance=0.2,pctdistance=0.7,wedgeprops=dict(width=0.3,edgecolor='w'))\n", 48 | "ax.pie(val_2,labels=class_2,autopct='%.2f%%',radius=1,pctdistance=0.9,wedgeprops=dict(width=0.3,edgecolor='w'),colors=colors)\n", 49 | "\n", 50 | "for t in c1_text:\n", 51 | " t.set_size(13)\n", 52 | "\n", 53 | "for n in n1_text:\n", 54 | " n.set_size(13)\n", 55 | "\n", 56 | "ax.set(title='class', aspect='equal')\n", 57 | "\n", 58 | "plt.show()" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": null, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [] 67 | } 68 | ], 69 | "metadata": { 70 | "kernelspec": { 71 | "display_name": "Python 3", 72 | "language": "python", 73 | "name": "python3" 74 | }, 75 | "language_info": { 76 | "codemirror_mode": { 77 | "name": "ipython", 78 | "version": 3 79 | }, 80 | "file_extension": ".py", 81 | "mimetype": "text/x-python", 82 | "name": "python", 83 | "nbconvert_exporter": "python", 84 | "pygments_lexer": "ipython3", 85 | "version": "3.5.6" 86 | } 87 | }, 88 | "nbformat": 4, 89 | "nbformat_minor": 2 90 | } 91 | -------------------------------------------------------------------------------- /data_visualization/pie_chart/revenue.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyinvest/python_finance_tutorial/e7de246ccb9d4dc6b33e9b5c2b51136f28d3a6a9/data_visualization/pie_chart/revenue.xlsx -------------------------------------------------------------------------------- /data_visualization/revenue.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyinvest/python_finance_tutorial/e7de246ccb9d4dc6b33e9b5c2b51136f28d3a6a9/data_visualization/revenue.xlsx -------------------------------------------------------------------------------- /data_visualization/scatter/risk_return.csv: -------------------------------------------------------------------------------- 1 | ETF,risk,return 2 | 0050,17.5,1.46 3 | High Dividend,14.64,2.06 4 | G,14.39,0.58 5 | Gold,13.5,8.82 6 | Oilx2,97.81,-18.94 7 | VIX,80.54,22.15 8 | EMbond,10.53,0.73 9 | -------------------------------------------------------------------------------- /gentle_start/EP1_抓資料.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 第一部份:取得台股日線資料\n", 8 | "我們這邊介紹二個方式取得台股的日線資料,一個是到台灣證券交易所抓取資料,我們也可以利用已經寫好的套件庫去抓取。\n", 9 | "- [臺灣證券交易所](http://www.twse.com.tw/zh/)\n", 10 | "- [twstock套件](https://github.com/mlouielu/twstock)" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 83, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "import requests\n", 20 | "import pandas as pd\n", 21 | "import io\n", 22 | "import re\n", 23 | "import time\n", 24 | "import datetime" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 80, 30 | "metadata": {}, 31 | "outputs": [], 32 | "source": [ 33 | "def crawler(date_time):\n", 34 | " page_url = 'http://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=' + date_time +'&type=ALLBUT0999'\n", 35 | " page = requests.get(page_url)\n", 36 | " use_text = page.text.splitlines()\n", 37 | " for i,text in enumerate(use_text):\n", 38 | " if text == '\"證券代號\",\"證券名稱\",\"成交股數\",\"成交筆數\",\"成交金額\",\"開盤價\",\"最高價\",\"最低價\",\"收盤價\",\"漲跌(+/-)\",\"漲跌價差\",\"最後揭示買價\",\"最後揭示買量\",\"最後揭示賣價\",\"最後揭示賣量\",\"本益比\",':\n", 39 | " initial_point = i\n", 40 | " break\n", 41 | " test_df = pd.read_csv(io.StringIO(''.join([text[:-1] + '\\n' for text in use_text[initial_point:]])))\n", 42 | " test_df['證券代號'] = test_df['證券代號'].apply(lambda x:x.replace('\"',''))\n", 43 | " test_df['證券代號'] = test_df['證券代號'].apply(lambda x: x.replace('=',''))\n", 44 | " return test_df" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 123, 50 | "metadata": {}, 51 | "outputs": [], 52 | "source": [ 53 | "#抓好幾天\n", 54 | "def trans_date(date_time):\n", 55 | " return ''.join(str(date_time).split(' ')[0].split('-'))\n", 56 | "\n", 57 | "def parse_n_days(start_date,n):\n", 58 | " df_dict = {}\n", 59 | " now_date = start_date\n", 60 | " for i in range(n):\n", 61 | " time.sleep(5)\n", 62 | " now_date = now_date - datetime.timedelta(days=1)\n", 63 | " try:\n", 64 | " df = crawler(trans_date(now_date))\n", 65 | " print(\"Current date\" + trans_date(now_date))\n", 66 | " df_dict.update({trans_date(now_date):df})\n", 67 | " print('Successful!!')\n", 68 | " except:\n", 69 | " print('Fails at' + str(now_date))\n", 70 | " return df_dict" 71 | ] 72 | }, 73 | { 74 | "cell_type": "markdown", 75 | "metadata": {}, 76 | "source": [ 77 | "## twstock套件" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 125, 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "from twstock import Stock\n", 87 | "\n", 88 | "stock = Stock('2330')" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 126, 94 | "metadata": {}, 95 | "outputs": [ 96 | { 97 | "data": { 98 | "text/plain": [ 99 | "twstock.stock.Stock" 100 | ] 101 | }, 102 | "execution_count": 126, 103 | "metadata": {}, 104 | "output_type": "execute_result" 105 | } 106 | ], 107 | "source": [ 108 | "type(stock)" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 129, 114 | "metadata": {}, 115 | "outputs": [], 116 | "source": [ 117 | "stock_price = stock.fetch_31()" 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "# 第二部份:練習用的高頻資料\n", 125 | "FXCM的模擬帳戶提供高頻資料的api獲取\n", 126 | "- Step1:[開啟免費模擬帳戶](https://www.fxcm.com/uk/forex-trading-demo/) \n", 127 | "- Step2:創造 API Token" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 165, 133 | "metadata": {}, 134 | "outputs": [], 135 | "source": [ 136 | "import fxcmpy\n", 137 | "api = fxcmpy.fxcmpy(access_token=API_key, server='demo')" 138 | ] 139 | }, 140 | { 141 | "cell_type": "code", 142 | "execution_count": 166, 143 | "metadata": {}, 144 | "outputs": [], 145 | "source": [ 146 | "from fxcmpy import fxcmpy_tick_data_reader as tdr" 147 | ] 148 | }, 149 | { 150 | "cell_type": "code", 151 | "execution_count": 167, 152 | "metadata": {}, 153 | "outputs": [ 154 | { 155 | "name": "stdout", 156 | "output_type": "stream", 157 | "text": [ 158 | "('AUDCAD', 'AUDCHF', 'AUDJPY', 'AUDNZD', 'CADCHF', 'EURAUD', 'EURCHF', 'EURGBP', 'EURJPY', 'EURUSD', 'GBPCHF', 'GBPJPY', 'GBPNZD', 'GBPUSD', 'GBPCHF', 'GBPJPY', 'GBPNZD', 'NZDCAD', 'NZDCHF', 'NZDJPY', 'NZDUSD', 'USDCAD', 'USDCHF', 'USDJPY')\n" 159 | ] 160 | } 161 | ], 162 | "source": [ 163 | "print(tdr.get_available_symbols())" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 170, 169 | "metadata": {}, 170 | "outputs": [], 171 | "source": [ 172 | "start = datetime.datetime(2018, 2, 1)\n", 173 | "end = datetime.datetime(2018, 2, 15)" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 171, 179 | "metadata": {}, 180 | "outputs": [ 181 | { 182 | "name": "stdout", 183 | "output_type": "stream", 184 | "text": [ 185 | "Fetching data from: https://tickdata.fxcorporate.com/EURUSD/2018/5.csv.gz\n", 186 | "Fetching data from: https://tickdata.fxcorporate.com/EURUSD/2018/6.csv.gz\n", 187 | "Fetching data from: https://tickdata.fxcorporate.com/EURUSD/2018/7.csv.gz\n" 188 | ] 189 | } 190 | ], 191 | "source": [ 192 | "dr = tdr('EURUSD', start, end, verbosity=True)" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": 172, 198 | "metadata": {}, 199 | "outputs": [ 200 | { 201 | "name": "stdout", 202 | "output_type": "stream", 203 | "text": [ 204 | "\n", 205 | "Index: 5643477 entries, 01/28/2018 22:00:46.425 to 02/16/2018 21:59:08.423\n", 206 | "Data columns (total 2 columns):\n", 207 | "Bid float64\n", 208 | "Ask float64\n", 209 | "dtypes: float64(2)\n", 210 | "memory usage: 129.2+ MB\n" 211 | ] 212 | } 213 | ], 214 | "source": [ 215 | "dr.get_raw_data().info()" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": 174, 221 | "metadata": {}, 222 | "outputs": [ 223 | { 224 | "name": "stdout", 225 | "output_type": "stream", 226 | "text": [ 227 | "\n", 228 | "DatetimeIndex: 5643477 entries, 2018-01-28 22:00:46.425000 to 2018-02-16 21:59:08.423000\n", 229 | "Data columns (total 2 columns):\n", 230 | "Bid float64\n", 231 | "Ask float64\n", 232 | "dtypes: float64(2)\n", 233 | "memory usage: 129.2 MB\n" 234 | ] 235 | } 236 | ], 237 | "source": [ 238 | "dr.get_data().info()" 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 175, 244 | "metadata": {}, 245 | "outputs": [ 246 | { 247 | "data": { 248 | "text/html": [ 249 | "
\n", 250 | "\n", 263 | "\n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | "
BidAsk
2018-01-28 22:00:46.4251.242391.24282
2018-01-28 22:00:46.4381.242361.24282
2018-01-28 22:00:59.1171.242361.24267
2018-01-28 22:00:59.1341.242291.24267
2018-01-28 22:01:25.6681.242281.24266
\n", 299 | "
" 300 | ], 301 | "text/plain": [ 302 | " Bid Ask\n", 303 | "2018-01-28 22:00:46.425 1.24239 1.24282\n", 304 | "2018-01-28 22:00:46.438 1.24236 1.24282\n", 305 | "2018-01-28 22:00:59.117 1.24236 1.24267\n", 306 | "2018-01-28 22:00:59.134 1.24229 1.24267\n", 307 | "2018-01-28 22:01:25.668 1.24228 1.24266" 308 | ] 309 | }, 310 | "execution_count": 175, 311 | "metadata": {}, 312 | "output_type": "execute_result" 313 | } 314 | ], 315 | "source": [ 316 | "dr.get_data().head()" 317 | ] 318 | }, 319 | { 320 | "cell_type": "code", 321 | "execution_count": null, 322 | "metadata": {}, 323 | "outputs": [], 324 | "source": [] 325 | } 326 | ], 327 | "metadata": { 328 | "kernelspec": { 329 | "display_name": "Python 3", 330 | "language": "python", 331 | "name": "python3" 332 | }, 333 | "language_info": { 334 | "codemirror_mode": { 335 | "name": "ipython", 336 | "version": 3 337 | }, 338 | "file_extension": ".py", 339 | "mimetype": "text/x-python", 340 | "name": "python", 341 | "nbconvert_exporter": "python", 342 | "pygments_lexer": "ipython3", 343 | "version": "3.6.4" 344 | } 345 | }, 346 | "nbformat": 4, 347 | "nbformat_minor": 2 348 | } 349 | -------------------------------------------------------------------------------- /gentle_start/EP2創建資料庫.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 簡單教學 - 建立一個sqlite檔案,整理抓到的csv檔案\n", 8 | "這個簡單的教學分為三個部份,第一個部份我們會利用glob以及pandas套件來讀取我們抓來的2014-2019年的台股資料,第二個部份為建立一個sqlite檔案來存入我們的資料庫,第三個部份為進一步整理為用個股來分的資料庫。" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 2, 14 | "metadata": {}, 15 | "outputs": [], 16 | "source": [ 17 | "import pandas as pd\n", 18 | "import sqlite3\n", 19 | "import glob" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "## 第一部份 讀取我們抓到的資料\n", 27 | "當我們用EP1的程式抓取大量的表單之後,如果我們簡單用迴圈加to_csv方法,會發現現在我們的資料夾裡面已經堆滿的大量的csv檔案了,我們要如何使用程式來整理我們的檔案勒?如果用pandas一個一個讀入顯然很沒有效率,這邊我們使用glob套件一次讀入所有的csv檔案吧" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 2, 33 | "metadata": {}, 34 | "outputs": [], 35 | "source": [ 36 | "'''\n", 37 | "glob套件是用來查找符合特定規則的文件名,跟我們用搜尋跳出來的結果差不多,這邊我們查詢副檔名為csv的檔案並存為一個列表的形式。\n", 38 | "'''\n", 39 | "All_csv_file = glob.glob('*.csv')" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 3, 45 | "metadata": {}, 46 | "outputs": [], 47 | "source": [ 48 | "df = pd.read_csv(All_csv_file[0]).iloc[:,1:]" 49 | ] 50 | }, 51 | { 52 | "cell_type": "markdown", 53 | "metadata": {}, 54 | "source": [ 55 | "## 第二部份 創建資料庫,存成以時間為一張張表的資料庫\n", 56 | "我們這邊會使用sqlite來存取我們抓下來的股價資料\n", 57 | "- python內建sqlite套件,我們無須特安裝\n", 58 | "- 支援完整sql語法查詢我們的資料\n", 59 | "- 使用以及轉移方便,一個資料庫就像一個本地文件一樣\n", 60 | "\n", 61 | "在這邊,我們直接使用DataFrame提供把DataFrame存入Sql資料庫當作表格的方法。" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 4, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [ 70 | "dbname = 'TWStock.db'" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 5, 76 | "metadata": {}, 77 | "outputs": [], 78 | "source": [ 79 | "#連接到我們的資料庫,如果沒有的話會重新建一個\n", 80 | "db = sqlite3.connect(dbname)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 6, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "name": "stdout", 90 | "output_type": "stream", 91 | "text": [ 92 | "CPU times: user 47.7 s, sys: 3.39 s, total: 51.1 s\n", 93 | "Wall time: 1min 11s\n" 94 | ] 95 | } 96 | ], 97 | "source": [ 98 | "%%time\n", 99 | "for file_name in All_csv_file:\n", 100 | " pd.read_csv(file_name).iloc[:,1:].to_sql(file_name.replace('.csv',''),db,if_exists='replace')" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | " ### 如何讀取資料庫的表格\n", 108 | "我們這邊簡單介紹如何讀取sqlite檔案裡面的表格" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 7, 114 | "metadata": {}, 115 | "outputs": [], 116 | "source": [ 117 | "dates_list = [file_name.replace('.csv','') for file_name in All_csv_file]" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 8, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "data": { 127 | "text/html": [ 128 | "
\n", 129 | "\n", 142 | "\n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | "
index證券代號證券名稱成交股數成交筆數成交金額開盤價最高價最低價收盤價漲跌(+/-)漲跌價差最後揭示買價最後揭示買量最後揭示賣價最後揭示賣量本益比
000050元大台灣508,909,4551,051595,197,35366.7566.9066.6566.850.0066.8538566.901360.00
110051元大中型10026,12021754,99028.8928.9428.8328.88+0.0128.88128.9010.00
220052富邦科技2,000281,96040.9840.9840.9840.98+0.1440.33140.9830.00
330053元大電子45,466201,294,28728.5928.5928.4528.500.0028.45828.5420.00
440054元大台商5024,0005537,14022.3722.4422.3522.44-0.0122.22322.4410.00
\n", 268 | "
" 269 | ], 270 | "text/plain": [ 271 | " index 證券代號 證券名稱 成交股數 成交筆數 成交金額 開盤價 最高價 最低價 \\\n", 272 | "0 0 0050 元大台灣50 8,909,455 1,051 595,197,353 66.75 66.90 66.65 \n", 273 | "1 1 0051 元大中型100 26,120 21 754,990 28.89 28.94 28.83 \n", 274 | "2 2 0052 富邦科技 2,000 2 81,960 40.98 40.98 40.98 \n", 275 | "3 3 0053 元大電子 45,466 20 1,294,287 28.59 28.59 28.45 \n", 276 | "4 4 0054 元大台商50 24,000 5 537,140 22.37 22.44 22.35 \n", 277 | "\n", 278 | " 收盤價 漲跌(+/-) 漲跌價差 最後揭示買價 最後揭示買量 最後揭示賣價 最後揭示賣量 本益比 \n", 279 | "0 66.85 0.00 66.85 385 66.90 136 0.00 \n", 280 | "1 28.88 + 0.01 28.88 1 28.90 1 0.00 \n", 281 | "2 40.98 + 0.14 40.33 1 40.98 3 0.00 \n", 282 | "3 28.50 0.00 28.45 8 28.54 2 0.00 \n", 283 | "4 22.44 - 0.01 22.22 3 22.44 1 0.00 " 284 | ] 285 | }, 286 | "execution_count": 8, 287 | "metadata": {}, 288 | "output_type": "execute_result" 289 | } 290 | ], 291 | "source": [ 292 | "pd.read_sql(con=db,sql='SELECT * FROM' + ' \"'+ dates_list[0] +'\"').head()" 293 | ] 294 | }, 295 | { 296 | "cell_type": "markdown", 297 | "metadata": {}, 298 | "source": [ 299 | "## 第三部份 整理出以個股為一張張表的資料庫" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": 15, 305 | "metadata": {}, 306 | "outputs": [ 307 | { 308 | "name": "stdout", 309 | "output_type": "stream", 310 | "text": [ 311 | "CPU times: user 19min 19s, sys: 2min 53s, total: 22min 13s\n", 312 | "Wall time: 22min 13s\n" 313 | ] 314 | } 315 | ], 316 | "source": [ 317 | "%%time\n", 318 | "total_df = pd.DataFrame()\n", 319 | "for date in dates_list:\n", 320 | " df = pd.read_sql(con=db,sql='SELECT * FROM' + ' \"'+ date +'\"')\n", 321 | " df['Date'] = date\n", 322 | " total_df = total_df.append(df)" 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": 16, 328 | "metadata": {}, 329 | "outputs": [ 330 | { 331 | "name": "stdout", 332 | "output_type": "stream", 333 | "text": [ 334 | "CPU times: user 15 µs, sys: 0 ns, total: 15 µs\n", 335 | "Wall time: 17.6 µs\n" 336 | ] 337 | }, 338 | { 339 | "data": { 340 | "text/plain": [ 341 | "(1203195, 18)" 342 | ] 343 | }, 344 | "execution_count": 16, 345 | "metadata": {}, 346 | "output_type": "execute_result" 347 | } 348 | ], 349 | "source": [ 350 | "%%time\n", 351 | "total_df.shape" 352 | ] 353 | }, 354 | { 355 | "cell_type": "code", 356 | "execution_count": 3, 357 | "metadata": {}, 358 | "outputs": [], 359 | "source": [ 360 | "dbname_2 = 'TWStock_2'\n", 361 | "db2 = sqlite3.connect(dbname_2)" 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "execution_count": 48, 367 | "metadata": {}, 368 | "outputs": [], 369 | "source": [ 370 | "%%time \n", 371 | "total_dict = dict(tuple(total_df.groupby('證券代號')))\n", 372 | "for key in total_dict.keys():\n", 373 | " df = total_dict[key].iloc[:,2:]\n", 374 | " df['Date'] = pd.to_datetime(df['Date'])\n", 375 | " df = df.sort_values(by=['Date'])\n", 376 | " df.to_sql(key,db2,if_exists='replace')" 377 | ] 378 | }, 379 | { 380 | "cell_type": "code", 381 | "execution_count": 7, 382 | "metadata": {}, 383 | "outputs": [ 384 | { 385 | "name": "stdout", 386 | "output_type": "stream", 387 | "text": [ 388 | " index 證券名稱 成交股數 成交筆數 成交金額 開盤價 最高價 最低價 \\\n", 389 | "1216 410 台積電 24,443,428 11,779 5,745,045,809 237.50 238.00 233.00 \n", 390 | "1217 410 台積電 35,901,584 12,064 8,461,930,934 238.00 238.00 234.00 \n", 391 | "1218 410 台積電 34,651,731 14,723 8,008,768,323 231.50 232.00 229.50 \n", 392 | "1219 410 台積電 35,521,888 15,588 8,442,986,620 237.50 240.00 234.50 \n", 393 | "1220 410 台積電 34,691,670 13,157 8,448,805,962 240.00 246.00 239.00 \n", 394 | "\n", 395 | " 收盤價 漲跌(+/-) 漲跌價差 最後揭示買價 最後揭示買量 最後揭示賣價 最後揭示賣量 本益比 \\\n", 396 | "1216 233.00 - 5.0 233.00 3,359 233.50 136 18.71 \n", 397 | "1217 235.00 + 2.0 234.50 81 235.00 661 18.88 \n", 398 | "1218 232.00 - 3.0 232.00 91 232.50 824 18.63 \n", 399 | "1219 240.00 + 8.0 239.50 207 240.00 817 19.28 \n", 400 | "1220 244.50 + 4.5 244.00 1,076 244.50 55 19.64 \n", 401 | "\n", 402 | " Date \n", 403 | "1216 2019-06-04 00:00:00 \n", 404 | "1217 2019-06-05 00:00:00 \n", 405 | "1218 2019-06-06 00:00:00 \n", 406 | "1219 2019-06-10 00:00:00 \n", 407 | "1220 2019-06-11 00:00:00 \n", 408 | " index 證券名稱 成交股數 成交筆數 成交金額 開盤價 最高價 最低價 收盤價 \\\n", 409 | "909 926 君耀-KY 46,000 23 3,347,600 72.60 72.80 72.60 72.80 \n", 410 | "910 926 君耀-KY 85,804 24 6,237,950 72.70 72.70 72.70 72.70 \n", 411 | "911 928 君耀-KY 58,169 27 4,234,186 72.70 72.80 72.70 72.80 \n", 412 | "912 924 君耀-KY 37,060 24 2,694,360 72.70 72.80 72.70 72.70 \n", 413 | "913 924 君耀-KY 125,397 50 9,120,920 72.60 72.80 72.60 72.70 \n", 414 | "\n", 415 | " 漲跌(+/-) 漲跌價差 最後揭示買價 最後揭示買量 最後揭示賣價 最後揭示賣量 本益比 Date \n", 416 | "909 + 0.2 72.70 46 72.80 7 13.84 2018-09-13 00:00:00 \n", 417 | "910 - 0.1 72.70 69 72.80 13 13.82 2018-09-14 00:00:00 \n", 418 | "911 + 0.1 72.80 14 72.90 33 13.84 2018-09-17 00:00:00 \n", 419 | "912 - 0.1 72.70 81 72.80 11 13.82 2018-09-18 00:00:00 \n", 420 | "913 0.0 72.70 94 72.80 1 13.82 2018-09-19 00:00:00 \n", 421 | "CPU times: user 48.6 ms, sys: 313 µs, total: 48.9 ms\n", 422 | "Wall time: 47.6 ms\n" 423 | ] 424 | } 425 | ], 426 | "source": [ 427 | "%%time\n", 428 | "#測試股票代號資料庫\n", 429 | "print(pd.read_sql(con=db2,sql='SELECT * FROM \"2330\"').tail())\n", 430 | "print(pd.read_sql(con=db2,sql='SELECT * FROM \"6422\"').tail())" 431 | ] 432 | }, 433 | { 434 | "cell_type": "code", 435 | "execution_count": null, 436 | "metadata": {}, 437 | "outputs": [], 438 | "source": [] 439 | } 440 | ], 441 | "metadata": { 442 | "kernelspec": { 443 | "display_name": "Python 3", 444 | "language": "python", 445 | "name": "python3" 446 | }, 447 | "language_info": { 448 | "codemirror_mode": { 449 | "name": "ipython", 450 | "version": 3 451 | }, 452 | "file_extension": ".py", 453 | "mimetype": "text/x-python", 454 | "name": "python", 455 | "nbconvert_exporter": "python", 456 | "pygments_lexer": "ipython3", 457 | "version": "3.6.4" 458 | } 459 | }, 460 | "nbformat": 4, 461 | "nbformat_minor": 2 462 | } 463 | -------------------------------------------------------------------------------- /gentle_start/EP4_MLE.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# MLE介紹與簡單的python實做\n", 8 | "在上一次的影片中,我們知道我們可以給定連續報酬率的分配來做風險評估,讓我們更進一步來探討怎麼做吧\n", 9 | "$$ln(\\frac{P_t}{P_{t-1}}) \\sim \\text{some distribution}$$\n", 10 | "這邊我們當然可以不假設分配而使用非參數估計分配,但我們由上一集圖形可以看出,常態分配可能也不是特別壞的選擇,當然,我們也可以假設一些厚尾的分配,可能更接近真實狀況,如果我們假設\n", 11 | "$$ln(\\frac{P_t}{P_{t-1}}) \\sim N(\\mu,\\sigma^2)$$\n", 12 | "那我們如何估計參數$\\mu$以及$\\sigma^2$?" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "metadata": {}, 18 | "source": [ 19 | "## 什麼是MLE\n", 20 | "在這邊,一個簡單的作法便是利用MLE(最大概似法)來估計我們的參數,最大概似法的想法很簡單,當我們得到一組樣本$s_1, \\cdots s_n$後,我們想辦法找到參數使的出現這組樣本的機率最大,那這樣的參數便是我們想要的參數。為了更好理解這個概念,讓我們看看一個簡單的例子:\n", 21 | "### 一個例子\n", 22 | "假設妳的朋友拿出一個硬幣,說要跟妳賭一杯啤酒,但是妳擔心妳的朋友可能會作弊,所以想要檢查這個硬幣是不是一個公平的硬幣,但是她並沒有任何直接檢驗這個硬幣的方法,她只能藉由丟擲硬幣並觀察丟擲的結果來判斷這是不是一個公平硬幣。我們來想想這種情況下,她擁有哪些資訊?\n", 23 | "- 首先,硬幣擲出來應該不是人頭面就是錢幣面,所以她可以假設投擲錢幣出現那一面的機率分配滿足一個Bernoulli(p),所謂的Bernoulli(p)滿足下列的機率函數\n", 24 | "$$f_X(x)= p^x(1-p)^{1-x} = \\begin{cases} p, & \\text{if}\\ x=1 \\\\\n", 25 | " 1-p, & \\text{if} \\ x=0 \\end{cases}$$\n", 26 | " 這邊,我們假設x=1為人頭,x=0為錢幣。\n", 27 | "- 再來,她可以觀察到一系列的投擲硬幣的結果,假設她自己投擲了硬幣n次,則我們可以觀察到$x_1,x_2,\\cdots,x_n$個結果。\n", 28 | "那我們怎麼利用這兩個資訊來判斷$p$到底等於多少,是不是$p=\\frac{1}{2}$為一個公平的硬幣?" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "在這種情況下,我們可以使用MLE來估計我們的參數,我們的目標是要找到合適的$p$使得出現$x_1,x_2,\\cdots,x_n$這組樣本的機率最大,這代表說,我們必須先計算出這組樣本的聯合機率分佈是長怎麼樣子。在這邊,我們假設每次抽樣是獨立的,也就是說,現在丟擲的硬幣的機率分佈不會被之前投擲的硬幣的結果所影響,則因為每一個硬幣都滿足Bernoulli(p),我們可以計算出聯合機率密度函數為\n", 36 | "$$f_{X_1,X_2,\\cdots,X_n} = p^{\\sum^n_{i=1}}(1-p)^{n-\\sum^n_{i=1}}$$\n", 37 | "而我們的目標便是找到$p$使得上面的機率最大,所以形式上來說,我們是解以下的方程式\n", 38 | "$$arg\\max_{p} p^{\\sum^n_{i=1} x_i}(1-p)^{n-\\sum^n_{i=1}x_i}$$\n", 39 | "但是為了計算方便,我們可以把上面的式子做一個對數轉換,因為對數轉換是一個單調轉換,所以有沒有取對數不會改變讓上面方程式最大的$p$值,所以,我們來解\n", 40 | "$$arg\\max_{p} (\\sum^n_{i=1} x_i) log(p) + (n-\\sum^n_{i=1} x_i) log(1-p) $$\n", 41 | "微分後,我們可以解出\n", 42 | "$$\\hat{p} = \\frac{\\sum^n_{i=1} x_i}{n}$$\n", 43 | "這告訴我們,我們可以藉由計算樣本平均來觀察$p$是否等於$\\frac{1}{2}$。那為什麼我們要用MLE?" 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "## 為什麼使用MLE\n", 51 | "其中一個優點就是MLE有良好的理論基礎,假設我們要解\n", 52 | "$$\\hat{\\theta} = arg\\max_{\\theta \\in \\Theta} Q_n(\\theta)$$\n", 53 | "這邊\n", 54 | "$$Q_n(\\theta) = \\frac{1}{n} \\sum^n_{i=1} \\log(f(x_i,\\theta)$$\n", 55 | "為取log的機率函數。\n", 56 | "則我們有以下的兩個定理" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": {}, 62 | "source": [ 63 | "### 定理一:一致性定理\n", 64 | "假設\n", 65 | "- 1. $\\Theta$ is compact\n", 66 | "- 2. $\\sup_{\\theta \\in \\Theta} |Q_n(\\theta) - Q_*(\\theta)| \\rightarrow^p 0$ for some $Q_*:\\Theta \\rightarrow R$\n", 67 | "- 3. $Q_* $is continuous in $\\theta \\in \\Theta$\n", 68 | "\n", 69 | "- 4. $ Q_* $ is uniquely maximized at $ \\theta_0 $\n", 70 | "\n", 71 | "則\n", 72 | "$$\\hat{\\theta} \\rightarrow^p \\theta_0$$" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | " ## 定理二:漸進常態定理\n", 80 | " 假設一致性定理的條件都被滿足,且我們額外假設\n", 81 | "\n", 82 | "- 1. $\\theta_0 \\in int(\\Theta)$ \n", 83 | " \n", 84 | "- 2. $f(x,\\theta)$ is twice continuously differentiable and $f(x,\\theta) > 0$ in a neighborhood $\\mathcal{N}$ of $\\theta_0$ with probability one\n", 85 | "\n", 86 | "- 3. $$E[|\\frac{\\partial f(x,\\theta_0)}{\\partial \\theta}|^2]<\\infty$$ and \n", 87 | " $$E[\\sup_{\\theta \\in \\mathcal{N}} |\\frac{\\partial^2 \\log f(x,\\theta)}{\\partial \\theta \\partial \\theta'}|] < \\infty$$\n", 88 | " \n", 89 | "- 4. $$J = E[\\frac{\\partial f(x,\\theta_0)}{\\partial \\theta} \\frac{\\partial \\log f(x,\\theta_0)}{\\partial \\theta'}]$$ is nonsingular\n", 90 | "\n", 91 | "則\n", 92 | "$$\\sqrt{n} (\\hat{\\theta} - \\theta_0) \\rightarrow^d N(0, J^{-1})$$" 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "所以回到我們的例子,我們基本上是計算下面的式子\n", 100 | "$$ arg\\max_{\\mu,\\sigma^2} \\log (\\prod^n_{i=1} \\frac{1}{\\sqrt{2 \\pi \\sigma^2}} \\exp^{\\frac{-(x_i-\\mu)^2}{2 \\sigma^2}}) $$\n", 101 | " = \n", 102 | " $$arg\\max_{\\mu,\\sigma^2} \\sum^n_{i=1} -\\frac{1}{2} \\log(2 \\pi \\sigma^2) + \\frac{-(x_i-\\mu)^2}{2 \\sigma^2} $$\n", 103 | "則我們可以解出\n", 104 | "$$\\hat{\\mu} = \\frac{\\sum^n_{i=1} x_i}{n} $$\n", 105 | "$$\\hat{\\sigma^2} = \\frac{1}{n} \\sum_{i=1}^n (x_i - \\hat{\\mu})^2$$\n", 106 | "我們接下來計算MLE對於常態分配的估計吧" 107 | ] 108 | }, 109 | { 110 | "cell_type": "markdown", 111 | "metadata": {}, 112 | "source": [ 113 | "\n" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 1, 119 | "metadata": {}, 120 | "outputs": [], 121 | "source": [ 122 | "def MLE_mu_normal(X):\n", 123 | " n = len(X)\n", 124 | " return sum(X)/n\n", 125 | "\n", 126 | "def MLE_sigma_normal(X):\n", 127 | " n = len(X)\n", 128 | " mu_hat = MLE_mu_normal(X)\n", 129 | " s = sum([(x-mu_hat)**2 for x in X])\n", 130 | " return s/n" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": 2, 136 | "metadata": {}, 137 | "outputs": [ 138 | { 139 | "name": "stdout", 140 | "output_type": "stream", 141 | "text": [ 142 | "2.0\n", 143 | "0.6666666666666666\n" 144 | ] 145 | } 146 | ], 147 | "source": [ 148 | "print(MLE_mu_normal([1,2,3]))\n", 149 | "print(MLE_sigma_normal([1,2,3]))" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 3, 155 | "metadata": {}, 156 | "outputs": [], 157 | "source": [ 158 | "#讓我們看看實際資料吧\n", 159 | "import pandas as pd\n", 160 | "import matplotlib.pyplot as plt\n", 161 | "import sqlite3\n", 162 | "\n", 163 | "db = sqlite3.connect('TWStock_2')\n", 164 | "#台積電2330\n", 165 | "tsmc = pd.read_sql(con=db,sql='SELECT * FROM \"2330\"')" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": 4, 171 | "metadata": {}, 172 | "outputs": [], 173 | "source": [ 174 | "tsmc.index = tsmc['Date']\n", 175 | "tsmc.index = pd.to_datetime(tsmc.index)\n", 176 | "tsmc = tsmc[['證券名稱','收盤價']]\n", 177 | "tsmc['收盤價'] = pd.to_numeric(tsmc['收盤價'].apply(lambda x:x.replace(',','')),errors='coerce')\n", 178 | "tsmc.columns = ['stock_code','close']" 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": 5, 184 | "metadata": {}, 185 | "outputs": [ 186 | { 187 | "data": { 188 | "text/html": [ 189 | "
\n", 190 | "\n", 203 | "\n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | "
stock_codeclose
Date
2014-06-19台積電126.0
2014-06-20台積電124.5
2014-06-23台積電123.0
2014-06-24台積電123.0
2014-06-25台積電123.5
\n", 244 | "
" 245 | ], 246 | "text/plain": [ 247 | " stock_code close\n", 248 | "Date \n", 249 | "2014-06-19 台積電 126.0\n", 250 | "2014-06-20 台積電 124.5\n", 251 | "2014-06-23 台積電 123.0\n", 252 | "2014-06-24 台積電 123.0\n", 253 | "2014-06-25 台積電 123.5" 254 | ] 255 | }, 256 | "execution_count": 5, 257 | "metadata": {}, 258 | "output_type": "execute_result" 259 | } 260 | ], 261 | "source": [ 262 | "tsmc.head()" 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 6, 268 | "metadata": {}, 269 | "outputs": [], 270 | "source": [ 271 | "tsmc = tsmc[['close']].resample('W').mean().dropna()" 272 | ] 273 | }, 274 | { 275 | "cell_type": "code", 276 | "execution_count": 7, 277 | "metadata": {}, 278 | "outputs": [], 279 | "source": [ 280 | "#計算連續報酬率\n", 281 | "import math\n", 282 | "\n", 283 | "price_list = list(tsmc['close'])\n", 284 | "ratio_list = [p_1/p_2 for p_1,p_2 in zip(price_list[1:],price_list[:-1])]\n", 285 | "c_return_list = [math.log(x) for x in ratio_list]" 286 | ] 287 | }, 288 | { 289 | "cell_type": "code", 290 | "execution_count": 8, 291 | "metadata": {}, 292 | "outputs": [ 293 | { 294 | "name": "stdout", 295 | "output_type": "stream", 296 | "text": [ 297 | "0.002566764633485997\n", 298 | "0.0005459544223345868\n" 299 | ] 300 | } 301 | ], 302 | "source": [ 303 | "mu = MLE_mu_normal(c_return_list)\n", 304 | "sigma_2 = MLE_sigma_normal(c_return_list)\n", 305 | "print(mu)\n", 306 | "print(sigma_2)" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": 10, 312 | "metadata": {}, 313 | "outputs": [ 314 | { 315 | "data": { 316 | "image/png": "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\n", 317 | "text/plain": [ 318 | "
" 319 | ] 320 | }, 321 | "metadata": {}, 322 | "output_type": "display_data" 323 | } 324 | ], 325 | "source": [ 326 | "#讓我們畫畫圖吧\n", 327 | "import scipy.stats as stats\n", 328 | "import numpy as np\n", 329 | "\n", 330 | "h = sorted(c_return_list)\n", 331 | "x_axis = np.arange(h[0],h[-1], 0.0001)\n", 332 | "plt.plot(x_axis,stats.norm.pdf(x_axis,mu,math.sqrt(sigma_2)))\n", 333 | "plt.hist(h)\n", 334 | "plt.show()" 335 | ] 336 | }, 337 | { 338 | "cell_type": "code", 339 | "execution_count": 11, 340 | "metadata": {}, 341 | "outputs": [ 342 | { 343 | "name": "stdout", 344 | "output_type": "stream", 345 | "text": [ 346 | "0.03424529537560574\n", 347 | "0.006985305396849162\n" 348 | ] 349 | } 350 | ], 351 | "source": [ 352 | "#來估計週報酬小於-0.04的機率吧\n", 353 | "print(stats.norm(mu, math.sqrt(sigma_2)).cdf(-0.04))\n", 354 | "#大於0.06的機率\n", 355 | "print(1 - stats.norm(mu, math.sqrt(sigma_2)).cdf(0.06))" 356 | ] 357 | }, 358 | { 359 | "cell_type": "code", 360 | "execution_count": null, 361 | "metadata": {}, 362 | "outputs": [], 363 | "source": [] 364 | } 365 | ], 366 | "metadata": { 367 | "kernelspec": { 368 | "display_name": "Python 3", 369 | "language": "python", 370 | "name": "python3" 371 | }, 372 | "language_info": { 373 | "codemirror_mode": { 374 | "name": "ipython", 375 | "version": 3 376 | }, 377 | "file_extension": ".py", 378 | "mimetype": "text/x-python", 379 | "name": "python", 380 | "nbconvert_exporter": "python", 381 | "pygments_lexer": "ipython3", 382 | "version": "3.6.4" 383 | } 384 | }, 385 | "nbformat": 4, 386 | "nbformat_minor": 2 387 | } 388 | -------------------------------------------------------------------------------- /gentle_start/EP6_RSI_KD.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 用Pandas來計算常見技術指標 - RSI\n", 8 | "我們這次來計算看看RSI" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "metadata": {}, 15 | "outputs": [], 16 | "source": [ 17 | "#載入套件庫與讀入資料\n", 18 | "import pandas as pd\n", 19 | "import matplotlib.pyplot as plt\n", 20 | "import sqlite3\n", 21 | "\n", 22 | "db = sqlite3.connect('TWStock_2')\n", 23 | "tsmc = pd.read_sql(con=db,sql='SELECT * FROM \"2330\"')" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 2, 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "#清理資料\n", 33 | "#我們需要成交股數、開盤價、最高價、最低價、收盤價的資料\n", 34 | "#並使用Date當作我們的索引值\n", 35 | "\n", 36 | "tsmc.index = pd.to_datetime(tsmc['Date'])\n", 37 | "tsmc = tsmc[['成交股數','開盤價','最高價','最低價','收盤價']]\n", 38 | "tsmc.columns = ['Volume','Open','High','Low','Close']\n", 39 | "tsmc['Close'] = pd.to_numeric(tsmc['Close'])\n", 40 | "tsmc = tsmc['2019-01-01':]" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "## RSI\n", 48 | "根據[維基百科](https://www.wikiwand.com/zh-hant/%E7%9B%B8%E5%B0%8D%E5%BC%B7%E5%BC%B1%E6%8C%87%E6%95%B8):\n", 49 | "相對強弱指數(Relative Strength Index,RSI),一藉比較價格升降運動以表達價格強度的技術分析工具。 其計算方法為\n", 50 | "設每天向上變動為U,向下變動為D。\n", 51 | "- 在價格上升的日子: U = 當日收盤價 - 昨日收盤價, D =0\n", 52 | "- 在價格下跌的日子: U = 0 , D = 昨日收盤價 - 當日收盤價\n", 53 | "有了U和D的值之後,我們需要計算U以及D的平均值,這邊的平均值是使用n天的指數移動平均(EMA),則我們可以計算出相對強度\n", 54 | "\n", 55 | "$$RS = \\frac{EMA(U,n)}{EMA(D,n)}$$\n", 56 | "有了相對強度,我們就可以計算出RSI\n", 57 | "\n", 58 | "$$RSI = (1 - \\frac{1}{1+RS}) \\times 100\\%$$\n", 59 | "根據威爾德(英語:J. Welles Wilder)的測量結果,當n=14時,指數最具代表性。他指出當某證券的RSI升至70時,代表該證券已被超買(Overbought),投資者應考慮出售該證券。相反,當證券RSI跌至30時,代表證券被超賣(Oversold),投資者應購入該證券。 " 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 4, 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [ 68 | "tsmc['Dif'] = tsmc['Close'].diff()" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 6, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [ 77 | "def cal_U(num):\n", 78 | " if num >= 0:\n", 79 | " return num\n", 80 | " else:\n", 81 | " return 0\n", 82 | "def cal_D(num):\n", 83 | " num = -num\n", 84 | " return cal_U(num)\n", 85 | "\n", 86 | "tsmc['U'] = tsmc['Dif'].apply(cal_U)\n", 87 | "tsmc['D'] = tsmc['Dif'].apply(cal_D)\n", 88 | "tsmc['ema_U'] = tsmc['U'].ewm(span=14).mean()\n", 89 | "tsmc['ema_D'] = tsmc['D'].ewm(span=14).mean()\n", 90 | "tsmc['RS'] = tsmc['ema_U'].div(tsmc['ema_D'])\n", 91 | "tsmc['RSI'] = tsmc['RS'].apply(lambda rs:rs/(1+rs) * 100)" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 29, 97 | "metadata": {}, 98 | "outputs": [ 99 | { 100 | "data": { 101 | "image/png": "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\n", 102 | "text/plain": [ 103 | "
" 104 | ] 105 | }, 106 | "metadata": {}, 107 | "output_type": "display_data" 108 | } 109 | ], 110 | "source": [ 111 | "#最後來畫畫圖\n", 112 | "#來畫個圖吧\n", 113 | "plt.figure(figsize=(10,10))\n", 114 | "tsmc['RSI'].plot()\n", 115 | "plt.plot(tsmc.index,[70]*len(tsmc.index))\n", 116 | "plt.plot(tsmc.index,[30]*len(tsmc.index))\n", 117 | "plt.legend()\n", 118 | "plt.show()\n" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": null, 124 | "metadata": {}, 125 | "outputs": [], 126 | "source": [] 127 | } 128 | ], 129 | "metadata": { 130 | "kernelspec": { 131 | "display_name": "Python 3", 132 | "language": "python", 133 | "name": "python3" 134 | }, 135 | "language_info": { 136 | "codemirror_mode": { 137 | "name": "ipython", 138 | "version": 3 139 | }, 140 | "file_extension": ".py", 141 | "mimetype": "text/x-python", 142 | "name": "python", 143 | "nbconvert_exporter": "python", 144 | "pygments_lexer": "ipython3", 145 | "version": "3.6.4" 146 | } 147 | }, 148 | "nbformat": 4, 149 | "nbformat_minor": 2 150 | } 151 | -------------------------------------------------------------------------------- /gentle_start/Portfolio_Construction_PyInvest.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyinvest/python_finance_tutorial/e7de246ccb9d4dc6b33e9b5c2b51136f28d3a6a9/gentle_start/Portfolio_Construction_PyInvest.pdf -------------------------------------------------------------------------------- /gentle_start/下載央行資料.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "metadata": { 3 | "language_info": { 4 | "codemirror_mode": { 5 | "name": "ipython", 6 | "version": 3 7 | }, 8 | "file_extension": ".py", 9 | "mimetype": "text/x-python", 10 | "name": "python", 11 | "nbconvert_exporter": "python", 12 | "pygments_lexer": "ipython3", 13 | "version": "3.7.3-final" 14 | }, 15 | "orig_nbformat": 2, 16 | "kernelspec": { 17 | "name": "python_defaultSpec_1598093947723", 18 | "display_name": "Python 3.7.3 64-bit" 19 | } 20 | }, 21 | "nbformat": 4, 22 | "nbformat_minor": 2, 23 | "cells": [ 24 | { 25 | "cell_type": "code", 26 | "execution_count": 6, 27 | "metadata": {}, 28 | "outputs": [], 29 | "source": [ 30 | "import TWCB \n", 31 | "import json\n", 32 | "import pandas as pd" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "info = TWCB.get_info()" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 4, 47 | "metadata": { 48 | "tags": [] 49 | }, 50 | "outputs": [ 51 | { 52 | "output_type": "stream", 53 | "name": "stdout", 54 | "text": "Start to process the BP01D01.px\nStart to process the BP01M01.px\nStart to process the BP01Y01.px\nStart to process the EF01Y01.px\nStart to process the EF01M01.px\nStart to process the EF03Y01.px\nStart to process the EF03M01.px\nStart to process the EFA4Y01.px\nStart to process the EFA4M01.px\nStart to process the EF05Y01.px\nStart to process the EF05M01.px\nStart to process the EF07Y01.px\nStart to process the EF07M01.px\nStart to process the EF10M01.px\nStart to process the EF11Y01.px\nStart to process the EF11M01.px\nStart to process the EF12Y01.px\nStart to process the EF12M01.px\nStart to process the EF13Y01.px\nStart to process the EF13M01.px\nStart to process the EF15Y01.px\nStart to process the EF15M01.px\nStart to process the EF17Y01.px\nStart to process the EF17M01.px\nStart to process the EF19Y01.px\nStart to process the EF19M01.px\nStart to process the EF21Y01.px\nStart to process the EF21M01.px\nStart to process the EF71D01.px\nStart to process the EF72Y01.px\nStart to process the EF72M01.px\nStart to process the EF73Y01.px\nStart to process the EF73M01.px\nStart to process the EFA1Y01.px\nStart to process the EFA1M01.px\nStart to process the EF39Y01.px\nStart to process the EF39M01.px\nStart to process the EF41Y01.px\nStart to process the EF41M01.px\nStart to process the EF35Y01.px\nStart to process the EF35M01.px\nStart to process the EF37Y01.px\nStart to process the EF37M01.px\nStart to process the EF23Y01.px\nStart to process the EF23M01.px\nStart to process the EF25Y01.px\nStart to process the EF25M01.px\nStart to process the EF27Y01.px\nStart to process the EF27M01.px\nStart to process the EF29Y01.px\nStart to process the EF29M01.px\nStart to process the EF43Y01.px\nStart to process the EF43M01.px\nStart to process the EF45Y01.px\nStart to process the EF45M01.px\nStart to process the EF47Y01.px\nStart to process the EF47M01.px\nStart to process the EF49Y01.px\nStart to process the EF49M01.px\nStart to process the EF55Y01.px\nStart to process the EF55M01.px\nStart to process the EF57Y01.px\nStart to process the EF57M01.px\nStart to process the EF59Y01.px\nStart to process the EF59M01.px\nStart to process the EF61Y01.px\nStart to process the EF61M01.px\nStart to process the EF63Y01.px\nStart to process the EF63M01.px\nStart to process the EF64Y01.px\nStart to process the EF64M01.px\nStart to process the EG65Y01.px\nStart to process the EG65M01.px\nStart to process the EF65Y01.px\nStart to process the EF65M01.px\nStart to process the EF67Y01.px\nStart to process the EF67M01.px\nStart to process the EG05Y01.px\nStart to process the EG05M01.px\nStart to process the EG03Y01.px\nStart to process the EG03M01.px\nStart to process the EG07Y01.px\nStart to process the EG07M01.px\nStart to process the EGA9Y01.px\nStart to process the EGA9M01.px\nStart to process the EGA7M01.px\nStart to process the EGC7Q01.px\nStart to process the EI75Y01.px\nStart to process the EI75M01.px\nStart to process the EI77Y01.px\nStart to process the EI77M01.px\nStart to process the EI79Y01.px\nStart to process the EI79M01.px\nStart to process the EI80M01.px\nStart to process the EI81M01.px\nStart to process the EIA1M01.px\nStart to process the EI82M01.px\nStart to process the EI83M01.px\nStart to process the EI84M01.px\nStart to process the EI85Y01.px\nStart to process the EI85M01.px\nStart to process the EI86Y01.px\nStart to process the EI86M01.px\nStart to process the EI87Y01.px\nStart to process the EI87M01.px\nStart to process the EI97Y01.px\nStart to process the EI97M01.px\nStart to process the EI98Y01.px\nStart to process the EI98M01.px\nStart to process the E95GY01.px\nStart to process the E95GM01.px\nStart to process the EF99Y01.px\nStart to process the EF99M01.px\nStart to process the EG01Y01.px\nStart to process the EG01M01.px\nStart to process the EG11Y01.px\nStart to process the EG11M01.px\nStart to process the EG11D01.px\nStart to process the EG13Y01.px\nStart to process the EG13M01.px\nStart to process the EG13D01.px\nStart to process the EG15Y01.px\nStart to process the EG15M01.px\nStart to process the EG15D01.px\nStart to process the EG16Y01.px\nStart to process the EG16M01.px\nStart to process the EG16D01.px\nStart to process the EG17Y01.px\nStart to process the EG17M01.px\nStart to process the EG19Y01.px\nStart to process the EG19M01.px\nStart to process the EG21Y01.px\nStart to process the EG21M01.px\nStart to process the EG23Y01.px\nStart to process the EG23M01.px\nStart to process the EGA4Y01.px\nStart to process the EGA4M01.px\nStart to process the EGB4Y01.px\nStart to process the EGB4M01.px\nStart to process the EG25Y01.px\nStart to process the EG25M01.px\nStart to process the EG27Y01.px\nStart to process the EG27M01.px\nStart to process the EG2AY01.px\nStart to process the EG2AM01.px\nStart to process the EG28D01.px\nStart to process the EG2BY01.px\nStart to process the EG2BM01.px\nStart to process the EG2WM01.px\nStart to process the EG30D01.px\nStart to process the EG39Y01.px\nStart to process the EG39Q01.px\nStart to process the EH45Y01.px\nStart to process the EH45M01.px\nStart to process the EG37Y01.px\nStart to process the EG37M01.px\nStart to process the EG37D01.px\nStart to process the EG41Y01.px\nStart to process the EG41M01.px\nStart to process the EG43Y01.px\nStart to process the EG43M01.px\nStart to process the EG45M01.px\nStart to process the EG46Y01.px\nStart to process the EG46M01.px\nStart to process the EG47Y01.px\nStart to process the EG47M01.px\nStart to process the EG49Y01.px\nStart to process the EG49M01.px\nStart to process the EG4ZD01.px\nStart to process the EG51M01.px\nStart to process the EG51D01.px\nStart to process the EG52M01.px\nStart to process the EG55Y01.px\nStart to process the EG55M01.px\nStart to process the EG55D01.px\nStart to process the EF09Y01.px\nStart to process the EF09M01.px\nStart to process the EG60Y01.px\nStart to process the EG60M01.px\nStart to process the EG60D01.px\nStart to process the EF70Y01.px\nStart to process the EF70M01.px\nStart to process the EG77Y01.px\nStart to process the EG77M01.px\nStart to process the EF69Y01.px\nStart to process the EF69M01.px\nStart to process the EG02Y01.px\nStart to process the EG02M01.px\nStart to process the EG75Y01.px\nStart to process the EG75M01.px\nStart to process the EG73Y01.px\nStart to process the EG73M01.px\nStart to process the BPP2Y01.px\nStart to process the BPP2Q01.px\nStart to process the BPF4Y01.px\nStart to process the FL01_cn.px\nStart to process the FL02_cn.px\n" 55 | } 56 | ], 57 | "source": [ 58 | "TWCB.get_all()" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 7, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "with open('download_TWCB.json','r',encoding='utf-8') as f:\n", 68 | " test_data = json.load(f)\n", 69 | "\n", 70 | "test_data = {key:pd.read_json(test_data[key]) for key in test_data.keys()} " 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 9, 76 | "metadata": {}, 77 | "outputs": [ 78 | { 79 | "output_type": "execute_result", 80 | "data": { 81 | "text/plain": " date 新台幣NTD/USD 日圓JPY/USD 英鎊USD/GBP 港幣HKD/USD 韓元KRW/USD \\\n0 19930105 25.405 125.25 1.5499 7.7427 788.2 \n1 19930106 25.427 124.84 1.5423 7.7415 790.3 \n2 19930107 25.411 125.09 1.5309 7.7427 791.1 \n3 19930108 25.423 125.42 1.5314 7.7430 791.9 \n4 19930111 25.450 125.36 1.5516 7.7420 792.5 \n... ... ... ... ... ... ... \n6859 20200727 29.507 105.56 1.2829 7.7516 1196.1 \n6860 20200728 29.502 105.62 1.2850 7.7505 1196.9 \n6861 20200729 29.501 104.82 1.2966 7.7502 1193.1 \n6862 20200730 29.521 105.07 1.2986 7.7501 1194.4 \n6863 20200731 29.502 104.44 1.3137 7.7502 1191.3 \n\n 加拿大幣CAD/USD 新加坡元SGD/USD 人民幣CNY/USD 澳幣USD/AUD 印尼盾IDR/USD 泰銖THB/USD \\\n0 1.2766 1.6560 7.7200 0.6732 2048.0 25.550 \n1 1.2794 1.6530 7.7200 0.6687 2048.0 25.510 \n2 1.2800 1.6588 7.7450 0.6709 2049.0 25.540 \n3 1.2826 1.6620 7.7450 0.6727 2049.0 25.550 \n4 1.2780 1.6602 7.7150 0.6736 2050.0 25.540 \n... ... ... ... ... ... ... \n6859 1.3385 1.3809 7.0010 0.7130 14530.0 31.590 \n6860 1.3386 1.3809 7.0072 0.7127 14535.0 31.565 \n6861 1.3347 1.3750 6.9997 0.7186 14535.0 31.450 \n6862 1.3395 1.3760 7.0064 0.7149 14600.0 31.400 \n6863 1.3407 1.3706 6.9794 0.7199 14600.0 31.205 \n\n 馬來西亞幣MYR/USD 菲律賓披索PHP/USD 歐元USD/EUR 馬克DEM/USD 法國法郎FRF/USD 荷蘭幣NLG/USD \\\n0 2.5908 - - 1.6255 5.5425 1.8258 \n1 2.5930 - - 1.6350 5.5665 1.8360 \n2 2.5955 - - 1.6380 5.5670 1.8415 \n3 2.5970 - - 1.6475 5.6050 1.8515 \n4 2.5945 - - 1.6340 5.5245 1.8375 \n... ... ... ... ... ... ... \n6859 4.2525 49.200 1.1696 - - - \n6860 4.2545 49.220 1.1711 - - - \n6861 4.2460 49.090 1.1759 - - - \n6862 4.2460 49.135 1.1758 - - - \n6863 4.2395 49.060 1.1876 - - - \n\n 越南盾VND/USD \n0 - \n1 - \n2 - \n3 - \n4 - \n... ... \n6859 23181.5 \n6860 23200.0 \n6861 23180.0 \n6862 23177.5 \n6863 23180.0 \n\n[6864 rows x 19 columns]", 82 | "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 \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 \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 \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
date新台幣NTD/USD日圓JPY/USD英鎊USD/GBP港幣HKD/USD韓元KRW/USD加拿大幣CAD/USD新加坡元SGD/USD人民幣CNY/USD澳幣USD/AUD印尼盾IDR/USD泰銖THB/USD馬來西亞幣MYR/USD菲律賓披索PHP/USD歐元USD/EUR馬克DEM/USD法國法郎FRF/USD荷蘭幣NLG/USD越南盾VND/USD
01993010525.405125.251.54997.7427788.21.27661.65607.72000.67322048.025.5502.5908--1.62555.54251.8258-
11993010625.427124.841.54237.7415790.31.27941.65307.72000.66872048.025.5102.5930--1.63505.56651.8360-
21993010725.411125.091.53097.7427791.11.28001.65887.74500.67092049.025.5402.5955--1.63805.56701.8415-
31993010825.423125.421.53147.7430791.91.28261.66207.74500.67272049.025.5502.5970--1.64755.60501.8515-
41993011125.450125.361.55167.7420792.51.27801.66027.71500.67362050.025.5402.5945--1.63405.52451.8375-
............................................................
68592020072729.507105.561.28297.75161196.11.33851.38097.00100.713014530.031.5904.252549.2001.1696---23181.5
68602020072829.502105.621.28507.75051196.91.33861.38097.00720.712714535.031.5654.254549.2201.1711---23200.0
68612020072929.501104.821.29667.75021193.11.33471.37506.99970.718614535.031.4504.246049.0901.1759---23180.0
68622020073029.521105.071.29867.75011194.41.33951.37607.00640.714914600.031.4004.246049.1351.1758---23177.5
68632020073129.502104.441.31377.75021191.31.34071.37066.97940.719914600.031.2054.239549.0601.1876---23180.0
\n

6864 rows × 19 columns

\n
" 83 | }, 84 | "metadata": {}, 85 | "execution_count": 9 86 | } 87 | ], 88 | "source": [ 89 | "test_data['中央銀行統計資料庫_我國與主要貿易對手通貨對美元之匯率_日']" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": null, 95 | "metadata": {}, 96 | "outputs": [], 97 | "source": [] 98 | } 99 | ] 100 | } -------------------------------------------------------------------------------- /stat_learning/Statisics_Learning.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pyinvest/python_finance_tutorial/e7de246ccb9d4dc6b33e9b5c2b51136f28d3a6a9/stat_learning/Statisics_Learning.pdf --------------------------------------------------------------------------------