Example #1
0
def word_frequency(query_name):
    data_container = []
    query_name = query_name
    spans = [{
        'from_parameter': '2018-01-01',
        'to': '2018-01-15'
    }, {
        'from_parameter': '2018-01-16',
        'to': '2018-01-31'
    }, {
        'from_parameter': '2018-02-01',
        'to': '2018-02-15'
    }, {
        'from_parameter': '2018-02-15',
        'to': '2018-02-28'
    }, {
        'from_parameter': '2018-03-01',
        'to': '2018-03-15'
    }, {
        'from_parameter': '2018-03-16',
        'to': '2018-03-31'
    }]
    for span in spans:
        news = News()
        data = news.fetch_news(q=query_name,
                               language='en',
                               from_parameter=span['from_parameter'],
                               to=span['to'])
        # print(data)
        analysis = news.analyze_count(data)
        data_container.append(analysis)

    wordset = set()
    combined_data_container = {}
    for analysis in data_container:
        for key in analysis.keys():
            if key in wordset:
                combined_data_container[key] = {
                    **combined_data_container[key],
                    **analysis[key]
                }
            else:
                wordset.add(key)
                combined_data_container[key] = analysis[key]

    # var trace1 = {
    #   x: [1, 2, 3, 4],
    #   y: [10, 15, 13, 17],
    #   mode: 'markers',
    #   name: 'Scatter'
    # };

    js_data_container = []
    for word in combined_data_container:
        x = list(combined_data_container[word].keys())
        x.sort()
        y = []
        for date in x:
            y.append(int(combined_data_container[word][date]))
        trace = {'x': x, 'y': y, 'name': word}
        if sum(trace['y']) > 100 and trace['name'] != query_name.lower():
            js_data_container.append(trace)

    layout = {
        'title':
        'Other Words Found in Headlines that include "{}" (2018-YTD)'.format(
            query_name),
        'xaxis': {
            'title': 'Week Number'
        },
        'yaxis': {
            'title': 'Count of Appearances in Headlines'
        }
    }

    # save raw js to the database with id=query_name above

    return [js_data_container, layout]