数据库是mongdb

数据是58同城上发的转手记录

  

一 为了保证数据安全,对需要进行处理的数据进行拷贝。

> db.createCollection('test')
{ "ok" : }
> show collections
base_url
detail_info
detail_url
test
> db.detail_info.copyTo('test')
WARNING: db.eval is deprecated

二  对数据库中的数据进行处理

  不要想着将数据拿出来,处理完后,在一一对应放到数据库中!

  原本数据库中的地址存储的格式是:北京-昌平,北京-通州,需要拿到具体的某个区。

  在jupyter notebook中进行操作。

  这用到了update方法和$set 操作符。update方法的调用者是 col ,表。

for i in col.find():
zone_l = (i['zone'].split('-'))
if len(zone_l)>:
new_zone = zone_l[]
else:
new_zone = '不明'
col.update({'_id':i['_id']},{'$set':{'zone':new_zone}})

三 从数据库中读到 地址,对地址进行整理。

  这里用到了set集合,和列表的count方法,内置函数zip()。很关键

zones = []
for i in col.find():
zone.append(i['zone'])
single_zone = list(set(zones))
num = [zones.count(i) for i in single_zone ]

  构建charts要求格式的数据。

def foo():
l = []
for zone,n in zip(single_zone,num):
Data={
'name':zone,
'data':[n],
'type':'column',
}
l.append(Data)
return l

  PS.

  这里实际上可以用生成器,节省内存。

def foo():
for zone,n in zip(single_zone,num):
Data={
'name':zone,
'data':[n],
'type':'column',
}
yield Data
l = [ i for i in foo() ]

四 调用charts.plot方法。

  依照固定格式传参

l = foo()
charts.plot(l,show='inline',options=dict(title=dict(text='Beijing')))

最终现实结果:

  

  

示例二: 使用aggregate(),管道函数比find()快很多。

import charts
import pymongo
client = pymongo.MongoClient('localhost',)
db = client['ganji']
col = db['test'] for i in col.find().limit():
print(i)

  输出:

{'_id': ObjectId('5698f524a98063dbe9e91ca8'), 'pub_date': '2016-01-12', 'look': '-', 'area': '朝阳', 'title': '【图】95成新小冰柜转让 - 朝阳高碑店二手家电 - 北京58同城', 'url': 'http://bj.58.com/jiadian/24541664530488x.shtml', 'cates': ['北京58同城', '北京二手市场', '北京二手家电', '北京二手冰柜'], 'price': '450 元'}
{'_id': ObjectId('5698f525a98063dbe4e91ca8'), 'pub_date': '2016-01-14', 'look': '-', 'area': '朝阳', 'title': '【图】洗衣机,小冰箱,小冰柜,冷饮机 - 朝阳定福庄二手家电 - 北京58同城', 'url': 'http://bj.58.com/jiadian/24349380911041x.shtml', 'cates': ['北京58同城', '北京二手市场', '北京二手家电', '北京二手洗衣机'], 'price': '1500 元'}

  aggregate()

pipeline = [
{'$match':{'area':'昌平'}},
{'$group':{'_id':{'$slice':['$cates',,]},'count':{'$sum':}}},
{'$sort':{'count':-}},
{'$limit':},
]
def get_one_area(area):
pipeline = [
{'$match':{'area':area}},
{'$group':{'_id':{'$slice':['$cates',,]},'count':{'$sum':}}},
{'$sort':{'count':-}},
{'$limit':},
]
for i in col.aggregate(pipeline):
Data = {
'name':i['_id'],
'data':[i['count']],
'type':'column'
}
yield Data
l = [i for i in get_one_area('昌平')]
import charts
options = {
'title':{
'text':'昌平'
},
'subtitle':{
'text':'前三名'
},
'yAxis':{
'title':{
'text':'数量'
}
}
}
charts.plot(l,show='inline',options=options)

  输出:

  

charts jupyter notebook 画简单的柱状图的更多相关文章

  1. 27个Jupyter Notebook使用技巧及快捷键(翻译版)

    Jupyter Notebook Jupyter Notebook 以前被称为IPython notebook.Jupyter Notebook是一款能集各种分析包括代码.图片.注释.公式及自己画的图 ...

  2. 如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline

    如何在Python中快速画图--使用Jupyter notebook的魔法函数(magic function)matplotlib inline 先展示一段相关的代码: #we test the ac ...

  3. jupyter notebook + pyspark 环境搭建

    安装并启动jupyter 安装 Anaconda 后, 再安装 jupyter pip install jupyter 设置环境 ipython --ipython-dir= # override t ...

  4. pyspark 中启动 jupyter notebook

    还是打算选择python学习spark编程 因为java写函数式比较复杂,scala学习曲线比较陡峭,而且sbt和eclipse和maven的结合实在是让人崩溃,经常找不到主类去执行 python以前 ...

  5. Jupyter notebook入门

    Jupyter notebook入门 [TOC] Jupyter notebook 是一种 Web 应用,能让用户将说明文本.数学方程.代码和可视化内容全部组合到一个易于共享的文档中. Jupyter ...

  6. python︱Anaconda安装、简介(安装报错问题解决、Jupyter Notebook)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 安装完anaconda,就相当于安装了Pyth ...

  7. jupyter notebook的架构

    最近项目需要改写jupyter notebook的内核,由于内功不够,英语过差,读文档真的是心痛,然后各种搜索找到了一篇不错的讲解. 转自:http://blog.just4fun.site/jupy ...

  8. Jupyter Notebook中的快捷键

    1.快捷键 Jupyter Notebook 有两种键盘输入模式.编辑模式,允许你往单元中键入代码或文本:这时的单元框线是绿色的.命令模式,键盘输入运行程序命令:这时的单元框线是灰色. 命令模式 (按 ...

  9. Jupyter NoteBook功能介绍

    一.Jupyter Notebook 介绍 文学编程 在介绍 Jupyter Notebook 之前,让我们先来看一个概念:文学编程 ( Literate programming ),这是由 Dona ...

随机推荐

  1. 【春节版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统

    本系统是10月5日最新完整版本的Windows10 安装版镜像,win10正式版,更新了重要补丁,提升应用加载速度,微软和百度今天宣布达成合作,百度成为win10 Edge浏览器中国默认主页和搜索引擎 ...

  2. Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理

    面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问"茴香豆的茴字有哪几种写法?" 所谓代理模式,是指客户端(Cl ...

  3. select *from where 和select *from jion on 语句的差别

    https://zhidao.baidu.com/question/541791438.html select 学号 a,成绩 a,姓名 b from 成绩表 a,学生表 b where a.学号=b ...

  4. JavaScript中数据类型和typeof返回的数据类型

    除了上图,要注意三点:1.symbol是ES6中新增的数据类型 2.typeof(null)结果是Object 3.typeof(Object)和typeof(Array)的结果是function,因 ...

  5. 用Kotlin开发android平台语音识别,语义理解应用(olamisdk)

    Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而android Studio是 基于IntelliJ修改而来的.Kotlin是一门包含很多 ...

  6. Vuex基本概念

    Vuex基本概念 State Getter Mutation Action Module 简单的Store import Vue from 'vue'; import Vuex from 'vuex' ...

  7. div section article区分--20150227

    div section article ,语义是从无到有,逐渐增强的.div 无任何语义,仅仅用作样式化或者脚本化的钩子(hook),对于一段主题性的内容,则就适用 section,而假如这段内容可以 ...

  8. 七:MYSQL之常用操作符

    前言: 运算符连接表达式中各个操作数,其作用是用来指明对操作数所进行的运算. 常见的运算有数学计算.比较运算.位运算及逻辑运算 一:算数运算符 用于各类数值运算.包括加(+).减(-).乘(*).除( ...

  9. LeetCode 673. Number of Longest Increasing Subsequence

    Given an unsorted array of integers, find the number of longest increasing subsequence. Example 1: I ...

  10. JavaScript正则表达式-断言

    (?=reg_pattern):正前向断言 只有当字符串右侧出现匹配reg_pattern的字符时才匹配正则表达式. str = "img1.jpg,img2.jpg,img3.bmp&qu ...