{"componentChunkName":"component---src-templates-blog-post-js","path":"/2021-12-16-python-data-inspect-note1/","result":{"data":{"site":{"siteMetadata":{"title":"Howard's Note","disqusShortname":""}},"markdownRemark":{"id":"f8c1759e-0eb7-5ca1-927b-2b12ec5d377b","html":"<p>Just some useful toolkit note, including api, useful tip, etc.</p>\n<h2>request data</h2>\n<p>There are two most use library in python world, acording to Google search: <code class=\"language-text\">request</code> and <code class=\"language-text\">http.client</code>. <code class=\"language-text\">request</code> seems a easiest and quickest way to fetch web content and api.</p>\n<p>but <code class=\"language-text\">http.client</code> seems to be more oo way. so I just try to use <code class=\"language-text\">http.client</code> to fetch data instead.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> http<span class=\"token punctuation\">.</span>client\n<span class=\"token keyword\">import</span> json\nurl <span class=\"token operator\">=</span> <span class=\"token string\">'www.twse.com.tw'</span>\nroute <span class=\"token operator\">=</span> <span class=\"token string\">'/v1/exchangeReport/MI_INDEX'</span>\n\n<span class=\"token comment\"># params just the parameter u want to use in GET request</span>\nparams <span class=\"token operator\">=</span> urllib<span class=\"token punctuation\">.</span>parse<span class=\"token punctuation\">.</span>urlencode<span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token string\">'date'</span><span class=\"token punctuation\">:</span> date<span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'response'</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'json'</span> \n    <span class=\"token string\">'_'</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>time<span class=\"token punctuation\">.</span>time<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token number\">500</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Note that don't need to add protocal (http or https) in url.</span>\n<span class=\"token comment\"># instend, just choose to use HTTPSConnection or HttpConnection to make a request.</span>\n<span class=\"token comment\"># also note that port is needed to be selected.</span>\nclient <span class=\"token operator\">=</span> http<span class=\"token punctuation\">.</span>client<span class=\"token punctuation\">.</span>HTTPSConnection<span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">,</span> <span class=\"token number\">443</span><span class=\"token punctuation\">,</span> timeout<span class=\"token operator\">=</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span> \nclient<span class=\"token punctuation\">.</span>request<span class=\"token punctuation\">(</span><span class=\"token string\">'GET'</span><span class=\"token punctuation\">,</span> <span class=\"token string-interpolation\"><span class=\"token string\">f'</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>self<span class=\"token punctuation\">.</span>_route<span class=\"token punctuation\">}</span></span><span class=\"token string\">?</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>params<span class=\"token punctuation\">}</span></span><span class=\"token string\">'</span></span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">with</span> client<span class=\"token punctuation\">.</span>getresponse<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> res<span class=\"token punctuation\">:</span> \n    <span class=\"token comment\"># use json to loads the response and parse to dict.</span>\n    data <span class=\"token operator\">=</span> json<span class=\"token punctuation\">.</span>loads<span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> \n    <span class=\"token keyword\">return</span> data</code></pre></div>\n<h2>panda</h2>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> panda <span class=\"token keyword\">as</span> pd</code></pre></div>\n<ul>\n<li>\n<p>load json to data farme:</p>\n<p>use Dataframe. in my case, I use <code class=\"language-text\">json.loads</code> + Dataframe + <code class=\"language-text\">pd.concat</code> to achieve goal.</p>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">load_to_df</span><span class=\"token punctuation\">(</span>filename<span class=\"token punctuation\">,</span> df<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">try</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span>filename<span class=\"token punctuation\">,</span> <span class=\"token string\">'r'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n            j <span class=\"token operator\">=</span> json<span class=\"token punctuation\">.</span>loads<span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token comment\"># concat</span>\n            date <span class=\"token operator\">=</span> filename<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">'.'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f'load date: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>date<span class=\"token punctuation\">}</span></span><span class=\"token string\">'</span></span><span class=\"token punctuation\">)</span>\n            temp <span class=\"token operator\">=</span> pd<span class=\"token punctuation\">.</span>DataFrame<span class=\"token punctuation\">(</span>columns<span class=\"token operator\">=</span>j<span class=\"token punctuation\">[</span><span class=\"token string\">'fields8'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> data<span class=\"token operator\">=</span>j<span class=\"token punctuation\">[</span><span class=\"token string\">'data8'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> index<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string-interpolation\"><span class=\"token string\">f'</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>date<span class=\"token punctuation\">}</span></span><span class=\"token string\">(</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">)'</span></span> <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>j<span class=\"token punctuation\">[</span><span class=\"token string\">'data8'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n            df <span class=\"token operator\">=</span> pd<span class=\"token punctuation\">.</span>concat<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>df<span class=\"token punctuation\">,</span> temp<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">except</span> Exception <span class=\"token keyword\">as</span> e<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">'[ERROR] error happen in file: '</span> <span class=\"token operator\">+</span> filename<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f'[ERROR] msg: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>e<span class=\"token punctuation\">}</span></span><span class=\"token string\">'</span></span> <span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">''</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> df</code></pre></div>\n<p><code class=\"language-text\">pd.concat</code> will create a new DataFframe, that is good, in my opinion.</p>\n<p>note that use <code class=\"language-text\">for comprehension</code> to create index, which is a elegent way to create, and show purpose.</p>\n<ul>\n<li>\n<p>get data row from DataFrame by index.</p>\n<p>Just find two api that may be useful: <code class=\"language-text\">df.loc()</code> and <code class=\"language-text\">df.ioc()</code>. This time I just use <code class=\"language-text\">loc()</code> to acheive my goal.</p>\n<p>ref from: <a href=\"https://www.shanelynn.ie/pandas-iloc-loc-select-rows-and-columns-dataframe/#1-pandas-iloc-data-selection\">here</a></p>\n</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">get_overall_by_date</span><span class=\"token punctuation\">(</span>date<span class=\"token punctuation\">,</span> df<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">return</span> df<span class=\"token punctuation\">.</span>loc<span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span>date <span class=\"token operator\">+</span> <span class=\"token string-interpolation\"><span class=\"token string\">f'(</span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">}</span></span><span class=\"token string\">)'</span></span> <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span></code></pre></div>\n<h2>Data visualization.</h2>\n<p>Choose to use matplotlib, which seems a easiest solution.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> matplotlib<span class=\"token punctuation\">.</span>pyplot <span class=\"token keyword\">as</span> plt</code></pre></div>","frontmatter":{"title":"data inspect note","date":"December 16, 2021","description":null,"tags":["python","note"],"template":"post"}}},"pageContext":{"slug":"/2021-12-16-python-data-inspect-note1/","previous":{"node":{"fields":{"slug":"/2021-12-05-python-notebook-nbextensions-issue/"},"frontmatter":{"date":"05 December, 2021","title":"jupyter notebook nbextensiions 404 issue.","tags":["python"]}}},"next":{"node":{"fields":{"slug":"/2022-01-30/"},"frontmatter":{"date":"30 January, 2022","title":"Cljure FAQ","tags":["clojure","note"]}}}}},"staticQueryHashes":["2841359383","3810545343","916993862"]}