美文网首页python 学习
Python学习日记7|在python中使用jupyter实现数

Python学习日记7|在python中使用jupyter实现数

作者: 是蓝先生 | 来源:发表于2016-04-26 21:37 被阅读3904次

    今天是4.26号。

    自从自己3月17号决定开始在这里记录学习开始,一晃就是一个月零十天了。这些天里进步了吗,有一点,其他情况也有了一点好转,但谈不上令自己喜笑颜开。晚上8点多的时候,投的yy实习有了回音,让与相关人员进一步沟通。加上qq联系方式后问了几句工作的相关内容,然后那边突然问道,你现在是研究生吧?这份实习的工作都是一些基础的,难道你不准备找一个专业性更强一点的实习岗位吗?我一下愣住了,说实话自己被戳到痛点了,没有核心竞争力,现在要想找一个专业性强一点的实习根本找不到,如实给那边说了一下情况。但又能怎样,多多学校多多实践吧。

    还有昨天下午,来到实验室发现去年买的鞋穿了不到一年坏了,该死的,便宜总是没有好货,搞的自己现在完全不敢在网上买鞋。


    今天学习jupyter notebook的相关知识,即以前的ipython notebook。其主要内容是根据相应要求对mongodb中的数据实现可视化。
    (1)导入之前抓取下来的json数据,方法见学习日记6中的第6点。

    (2)明确要求,要求绘制指定日期段(2015.12.27-2016.1.17),指定区域('海淀','朝阳'等)的每天的发帖量。

    (3)分析思路:先得到起始和截止日期之间的所有日期,以作为绘制折线图时的横坐标。再根据日期,和地区,使用find函数找到相应记录,并统计发帖量。

    (4)难点在于:
    a). 数据库中日期是以字符串格式而不是日期型格式储存的,而且不能使用date(s)直接将字符串s转化为日期类型。因此要from datetime import date,timedelta,然后设计相应函数,返回起始日期到结束日期之间的所有天数。

    def get_all_date(date1,date2):
        start_date=date(int(date1.split('.')[0]),int(date1.split('.')[1]),int(date1.split('.')[2]))  #把字符串形式日期转为真正的日期型
        end_date=date(int(date2.split('.')[0]),int(date2.split('.')[1]),int(date2.split('.')[2]))
        days=timedelta(days=1)
        while start_date <= end_date:
            yield (start_date.strftime('%Y.%m.%d'))
            start_date = start_date+days
    

    其中date,timedelta的用法为:
    b=date(2015,2,16)
    print(b)结果为:2015-2-16,而不能是a='2015-2-16',date(a)这是错误的。

    timedelta代表两个datetime之间的时间差,
    由于date类型数据是不支持直接相加减的,但可以利用timedelta进行操作,如上面的 start_date = start_date+days。

    此外strftime('%Y.%m.%d')后面的('%Y.%m.%d')其中的大小写要注意,否则会导致错误。

    b).在jupyter 中经常涉及到生成器yield()的使用,他的作用是生成所有()里的值,不管是列表还是字典。注意它只生成但并不返回,所以要调用生成的数据时,可以用for i in xxx(),其中xxx()为包含yield的函数。而要让生成的数据转换成列表中数据,可以用[i for i in xxx()],不能直接用list(xxx()),也是因为xxx()并不返回数据

    c).根据相应的要求生成相应的图表

    options={
        'chart':{'zoomtype':'xy'},
        'title':{'text':'北京地区二手物品发帖量'},
        'subtitle':{'text':'统计分析表'},
        'xAxis':{'categories':[i for i in get_all_date('2015.12.24','2016.01.09')]},
        'yAxis':{'title':{'text':'数量'}}
    }
    charts.plot(series,options,show='inline')
    

    一般带有日期型的数据展示时用折线图,不带日期型的可以用直方图或者饼图。不同的图表类型通过data中的type来进行设置。

    data={
        'name':area,
        'data':area_day_posts,  #注意data必须是list类型,即使只有一个数据,如[]
        'type':'line'
    }
    

    最后的结果如下图所示:

    部分数据展示1.png 部分数据展示2.png

    相关文章

      网友评论

      • 泛泛入烟雾:问下jupyter notebook中 python3 版本 import charts 会报错

        ImportError Traceback (most recent call last)
        <ipython-input-46-751677ad0e98> in <module>()
        1 import pymongo
        2 from string import punctuation
        ----> 3 import charts

        /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/charts/__init__.py in <module>()
        3 __version__ = '0.4.6'
        4
        ----> 5 from plot import plot, plotasync, line, area, spline, pie
        6 from server import run_server
        7

        ImportError: No module named 'plot'
        这种如何解决呐
      • 梅仁峰:charts是什么库?
        是蓝先生:@梅仁峰 jupyter notebook库就能够支持图表生成,不需要额外用其他的库

      本文标题:Python学习日记7|在python中使用jupyter实现数

      本文链接:https://www.haomeiwen.com/subject/potcrttx.html