charts 画折线图

主题:指定日期内,不同地区的发布信息的数量的变化曲线

  数据库是mongod

  数据是58同城的发布的信息  

 整体思路:

  1由于从数据库中拿到的数据,格式等方面并不一样能完全满足需求,需要对数据库中的数据进行整理

  2 更新数据库

  3 数据可视化

 

出发点:

  从哪天开始,到哪天结束

  具体区域

追求点:

  以上区域在 限定时间内的发帖变化。

 

part1:拿到截止天和开始天之间的每一天。

  为什么把这个功能单独拿出来作为一个函数?

  because 后面生成图表是,横坐标是 每一天。

  所以,这样设计是有意义的。

  这里用到datetime模块中的date,timedelta,和strftime方法。

def get_all_date(date1,date2):
    delta = timedelta(days=1)
    d1 = date(int(date1.split('-')[0]),int(date1.split('-')[1]),int(date1.split('-')[2]))
    d2 = date(int(date2.split('-')[0]),int(date2.split('-')[1]),int(date2.split('-')[2]))
    while d1<=d2:
        yield d1.strftime('%Y-%m-%d')
        d1 += delta

part2:使用find函数查找指定数据

  

def get_one_area_one_date(area,date1):
    return col.find({'area':area,'pub_date':date1}).count()

实际上这个函数,可以用aggregate,$group,更简单,更迅速的实现。
from datetime import date,timedelta

def get_one_area_many_date(area,date1,date2):
    delta = timedelta(days=1)
    d1 = date(int(date1.split('-')[0]),int(date1.split('-')[1]),int(date1.split('-')[2]))
    d2 = date(int(date2.split('-')[0]),int(date2.split('-')[1]),int(date2.split('-')[2]))
    while d1<=d2:
        yield col.find({'area':area,'pub_date':d1.strftime('%Y-%m-%d')}).count()
        d1 += delta
def get_many_area_many_date(areas,date1,date2):
    for area in areas:
        yield {'name':area,'data':[i for i in get_one_area_many_date(area,date1,date2)],'type':'line'}

part3:   转化数据

 

最终显示:

import charts
options = {
    'title':{
        'text':'发帖量统计'
    },
    'subtitle':{
        'text':'北京地区'
    },
    'chart':{
        'zoomType':'xy',
    },
    'xAxis':{
        'categories':[i for i in get_all_date('2015-11-01','2016-01-10') ]  #这便是用到的第一个函数,坐标值,每一天。是在这里。
    },
    'yAxis':{
        'title':{
            'text':'数量'
        }
    }
}
charts.plot(ll,show='inline',options=options)

 

posted @ 2018-04-11 15:36  骑者赶路  阅读(203)  评论(0编辑  收藏  举报