【问题标题】:Creating a table from BLS labor statistics using JSON使用 JSON 从 BLS 劳动力统计数据创建表
【发布时间】:2014-01-19 23:00:13
【问题描述】:

我对 Python 还很陌生,但已经解决一个问题已经有一段时间了。 BLS 网站使用 JSON 交换格式。我已经能够处理数据调用以制作输出表文件。但是,与其逐行打印到输出文件,我更愿意构建一个表,我可以按 seriesID(从小到大)对行进行排序,并通过观察(从小到大)对日期条目进行排序。这样做的一个动机是,可以想象列表中观察的顺序可能不会在所有系列中排列(更可能是其他 BLS 数据系列的情况)。我还想将此迁移到动态网页以报告最新的就业统计数据。我在下面有我当前的工作代码。

#JSON call to //api.bls.gov/ retrieve and print "National Employment by Major Industry"

import requests
import json
headers = {'Content-type': 'application/json'}
data = json.dumps({"seriesid":        ['CES0000000001','CES1000000001','CES2000000001','CES3000000001','CES4000000001','CES5000000001','CES5500000001','CES6000000001','CES6500000001','CES7000000001','CES8000000001','CES9091000001','CES9092000001','CES9093000001'],"startyear":"2012", "endyear":"2012"})
p = requests.post('http://api.bls.gov/publicAPI/v1/timeseries/data/', data=data, headers=headers)
print p.url
print p.content
json_data = json.loads(p.text)
d_results = json_data['Results']  #Dictionary: seriesID: str, data: list of data by date
l_series = d_results['series']    #List of Dictionaries

makeheader = 'True'
f=open('outfile.csv','w')
for lst in sorted(l_series):
    tmp = lst                   #Dictionary: seriesID: str, data: list of data observation dictionaries
#    type(tmp)
    tmpp = tmp['data']          #List of data observation dictionaries
    if makeheader == 'True':
        for ent in tmp['data']:
            f.write( ',' + ent['year'] + ":" + ent['period'] ),  #create observation marker as YYYY:MM
        makeheader = 'False'
    f.write('\n')
    f.write(tmp['seriesID'] ),
    for ent in tmp['data']:
        f.write(',' + ent['value'] ),
f.close

我考虑过制作可排序的 seriesID 和观察列表。然后我可以使用这些列表从字典的 json 列表中提取数据,但我不确定在列表中找到正确字典的最佳方法是什么。第一部分如下所示:

# continuation...
s1 = []                  # Get and sort series IDs
for ent in l_series:
    s1.append(ent['seriesID'])
s1.sort()

d1 = []                  # Get and sort observations (currently collected as tubles)
for ent in l_series[0]['data']:
    d1.append( (ent['year'] + ":" + ent['period'] , ent['year'] , ent['period']) )
d1.sort()

所以,我希望从这个小组中获得一些有关继续策略的指导。任何想法将不胜感激。

【问题讨论】:

    标签: python json dictionary


    【解决方案1】:

    我建议将 BLS 数据直接加载到关系数据库(例如 SQLite)中,其中关系是“日期”。我看起来并不太难,但这应该可行: Convert JSON to SQLite in Python - How to map json keys to database columns properly?

    然后,如果您想“排列”两个不同来源(例如失业和通货膨胀)之间的所有系列数据,则可以执行 SQL 连接查询。例如:

    SELECT unemployment.*,inflation.* FROM unemployment 
    INNER JOIN inflation ON unemployment.date = inflation.date;
    

    排序方法的问题在于,您必须解决关系数据库已经解决的几个问题,例如“当行在表 A 而不是 B 时该怎么办”或“你有一个表A中的重复条目”等。

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多