Skip to content

Commit

Permalink
ENH: Add e-Stat limit and start position
Browse files Browse the repository at this point in the history
  • Loading branch information
sinhrks committed Mar 12, 2019
1 parent 44e88b4 commit bec09a3
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 3 deletions.
17 changes: 16 additions & 1 deletion doc/source/jpdatareader.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

``jpd.DataReader`` を利用すると、国内のデータソースの情報を ``DataFrame`` として取得できます。以下のデータソースをサポートしています。

- ``yahoojp``: 削除されました。 https://www.yahoo-help.jp/app/answers/detail/p/546/a_id/93575
- ``estat``: e-Stat API から統計情報を取得。
- ほか、``pd.DataReader`` でサポートしているデータソース

Expand Down Expand Up @@ -78,3 +77,19 @@ e-Stat API
1980-01-01 男女総数
1980-01-01 男女総数
1980-01-01 男女総数
e-Statでは、一度のリクエストで10万件のレコードまで取得できます。
取得するレコード数は `limit`キーワードで変更できます。

.. code-block:: python
>>> df = jpd.DataReader("0003280394", 'estat', appid=key, limit=100)
取得するレコードの開始位置は `startPosition`キーワードで変更できます。
10万件目以降のレコードを取得する際にはこのキーワードを利用してください。

.. code-block:: python
>>> df = jpd.DataReader("0003280394", 'estat', appid=key, startPosition=100001)
15 changes: 13 additions & 2 deletions japandas/io/estat.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@

class EStatReader(_BaseReader):

def __init__(self, symbols=None, appid=None, **kwargs):
def __init__(self, symbols=None, appid=None,
limit=None, startPosition=None, **kwargs):
if isinstance(symbols, pd.DataFrame):
if '統計表ID' in symbols.columns:
symbols = symbols.loc[:, '統計表ID']
Expand All @@ -46,13 +47,23 @@ def __init__(self, symbols=None, appid=None, **kwargs):
raise ValueError('アプリケーションID "appid" を文字列で指定してください')
self.appid = appid

# e-Stat attrs
self.limit = limit
self.startPosition = startPosition

@property
def url(self):
return 'http://api.e-stat.go.jp/rest/2.0/app/getStatsData'

@property
def params(self):
return {'appId': self.appid, 'lang': 'J'}
params = {'appId': self.appid, 'lang': 'J'}

for attr in ['limit', 'startPosition']:
value = getattr(self, attr, None)
if value is not None:
params[attr] = value
return params

def read(self):
""" read data """
Expand Down
22 changes: 22 additions & 0 deletions japandas/io/tests/test_estat.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,28 @@ def test_data_estat_data_numeric(self):
df = jpd.DataReader('0003109612', 'estat', appid=ESTAT_KEY)
self.assertEqual(df['value'].dtype, np.float64)

def test_data_limit(self):
ESTAT_KEY = os.environ['ESTAT']
df = jpd.DataReader('0003280394', 'estat', appid=ESTAT_KEY)
assert len(df) == 100000
self.assertEqual(df['value'].dtype, np.float64)

df = jpd.DataReader('0003280394', 'estat', appid=ESTAT_KEY,
limit=20)
assert len(df) == 20
self.assertEqual(df['value'].dtype, np.float64)

def test_data_position(self):
ESTAT_KEY = os.environ['ESTAT']
df = jpd.DataReader('0003280394', 'estat', appid=ESTAT_KEY, limit=100)
assert len(df) == 100
self.assertEqual(df['value'].dtype, np.float64)

df2 = jpd.DataReader('0003280394', 'estat', appid=ESTAT_KEY,
startPosition=11, limit=90)
tm.assert_frame_equal(df.iloc[10:], df2)
self.assertEqual(df2['value'].dtype, np.float64)


if __name__ == '__main__':
import nose
Expand Down

0 comments on commit bec09a3

Please sign in to comment.