2021-05-27 14:07:05 +00:00
|
|
|
import pandas as pd
|
|
|
|
import numpy as np
|
2021-05-28 08:54:52 +00:00
|
|
|
import io
|
2021-05-27 14:07:05 +00:00
|
|
|
import demjson
|
|
|
|
import requests
|
|
|
|
from fake_useragent import UserAgent
|
|
|
|
|
|
|
|
url = {
|
|
|
|
"eurostat": "http://ec.europa.eu/eurostat/wdds/rest/data/v2.1/json/en/",
|
2021-05-28 08:54:52 +00:00
|
|
|
"ecb": "https://sdw-wsrest.ecb.europa.eu/service/data/"
|
2021-05-27 14:07:05 +00:00
|
|
|
}
|
|
|
|
|
2021-05-28 08:54:52 +00:00
|
|
|
class ecb_data(object):
|
|
|
|
def __init__(self, url=url["ecb"]):
|
|
|
|
self.url = url
|
2021-05-27 14:07:05 +00:00
|
|
|
|
2021-05-28 08:54:52 +00:00
|
|
|
def codebook(self):
|
|
|
|
return "please follow the ECB's codebook: https://sdw.ecb.europa.eu/browse.do?node=9691101"
|
|
|
|
|
|
|
|
def get_data(self,
|
|
|
|
datacode="ICP",
|
|
|
|
key="M.U2.N.000000.4.ANR",
|
|
|
|
startdate="2000-01-01",
|
|
|
|
enddate="2020-01-01"):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
tmp_url = self.url + "{}/".format(datacode) + "{}".format(key)
|
2021-06-07 04:53:37 +00:00
|
|
|
ua = UserAgent(verify_ssl=False)
|
2021-05-28 08:54:52 +00:00
|
|
|
request_header = {"User-Agent": ua.random, 'Accept': 'text/csv'}
|
|
|
|
request_params = {
|
|
|
|
"startPeriod": "{}".format(startdate),
|
|
|
|
"endPeriod": "{}".format(enddate)
|
|
|
|
}
|
|
|
|
r = requests.get(tmp_url, params = request_params, headers = request_header)
|
|
|
|
data_text = r.content
|
|
|
|
df = pd.read_csv(io.StringIO(data_text.decode('utf-8')))
|
|
|
|
return df
|
|
|
|
|
|
|
|
class eurostat_data(object):
|
|
|
|
def __init__(self, url=url["eurostat"]):
|
|
|
|
self.url = url
|
|
|
|
|
|
|
|
def codebook(self):
|
|
|
|
return "please follow the EuroStat's codebook: \nhttps://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&dir=dic"
|
|
|
|
|
|
|
|
def get_data(self,
|
|
|
|
datasetcode="nama_10_gdp",
|
|
|
|
precision="1",
|
|
|
|
unit="CP_MEUR",
|
|
|
|
na_item="B1GQ",
|
|
|
|
time="2020"):
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
tmp_url = self.url + "{}".format(datasetcode)
|
2021-06-07 04:53:37 +00:00
|
|
|
ua = UserAgent(verify_ssl=False)
|
2021-05-28 08:54:52 +00:00
|
|
|
request_header = {"User-Agent": ua.random, 'Accept': 'text/csv'}
|
|
|
|
request_params = {
|
|
|
|
"precision": "{}".format(precision),
|
|
|
|
"unit": "{}".format(unit),
|
|
|
|
"na_item": "{}".format(na_item),
|
|
|
|
"time": "{}".format(time)
|
|
|
|
}
|
|
|
|
r = requests.get(tmp_url, params = request_params, headers = request_header)
|
|
|
|
data_text = r.text
|
|
|
|
data_json = demjson.decode(data_text)
|
|
|
|
value = data_json['value']
|
|
|
|
abb = data_json['dimension']['geo']['category']['index']
|
|
|
|
abb = {abb[k]:k for k in abb}
|
|
|
|
geo = data_json['dimension']['geo']['category']['label']
|
|
|
|
geo_list = [abb[int(k)] for k in list(value.keys())]
|
|
|
|
geo = [geo[k] for k in geo_list]
|
|
|
|
df = pd.DataFrame({"Geo":geo, "{}".format(na_item): list(value.values())})
|
|
|
|
return df
|