3-3homework

结果


Result

代码


# coding: utf-8


import pymongo
import charts
from string import punctuation
from datetime import timedelta, date

client = pymongo.MongoClient('localhost', 27017)
ganji = client['ganji']
item_info = ganji['item_info']

pub_dates = []
for i in item_info.find():
    if ('pub_date' in i and i['pub_date'] != '') and i['pub_date'].find('发布') == -1:
         pub_dates.append(i['pub_date'])
         print(i['pub_date'])
         frags = i['pub_date'].split('-')
         date = '2016.{}.{}'.format(frags[0],frags[1])
         item_info.update_one({'_id':i['_id']},{'$set':{'pub_date':date}})
     else:
        date = '2016.01.01'
        item_info.update_one({'_id':i['_id']},{'$set':{'pub_date':date}})
 print(pub_dates)


def get_all_dates(date1, date2):
    the_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 the_date <= end_date:
        yield (the_date.strftime('%Y.%m.%d'))
        the_date = the_date + days


def get_data_within(date1, date2, areas):
    for area in areas:
        area_times = []
        for date in get_all_dates(date1,date2):
            a = list(item_info.find({'pub_date':date, 'area':area}))
            each_day_area = len(a)
            area_times.append(each_day_area)
        data = {
             'name': area,
             'data': area_times,
             'type': 'line'
         }
        yield data


for i in get_data_within('2016.08.18','2016.08.19',['朝阳','海淀']):
    print(i)


areas_ori = []
for i in item_info.find({}, {'area': 1, '_id': 0}):
    if len(i['area']) > 1 and i['area'][1] != '':
        areas_ori.append(i['area'][1])
    else:
        areas_ori.append('不明')

area_indexs = list(set(areas_ori))

options = {
      'chart': {'zoomType': 'xy'},
      'title': {'text': 'Monthly Average Temprature'},
      'subtitle': {'text': 'Source:WorldClimate.com'},
      'xAxis': {'categories': [data for data in get_all_dates('2016.08.18', '2016.08.19')]},
      'yAxis': {'title': {'text': '数量'}}
}

series = [data for data in get_data_within('2016.08.18', '2016.08.19', area_indexs)]
charts.plot(series, show='inline', options=options)

总结


1. 思路:

折线图参数需求,data字段需要一个list

折线图.png
  • 我们的需求是获取一段时间内,不同的区域的发帖量,那么简化的伪代码应该是这样的:
 for date in dates:
      一个区域的发帖量
多个区域,一段时间的发帖量就是:

for area in areas:
       for date in dates:
            一个区域的发帖量

下面需要解决的就是,怎么获得一段时间,以及怎么获得多个地区的发帖量

  • 一段时间的获取
// 设置起始日期 和 结束日期, 然后把这一段时间分别yield即可,
// 并且这个的日期格式要和数据库中的'pub_date'对齐,这里还需要做的一步就是将数据库中的pub_date格式统一更新。

def get_all_dates(date1, date2):
    the_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 the_date <= end_date:
        yield (the_date.strftime('%Y.%m.%d'))
        the_date = the_date + days

// 更新pub_date的格式
pub_dates = []
for i in item_info.find():
    if ('pub_date' in i and i['pub_date'] != '') and i['pub_date'].find('发布') == -1:
         pub_dates.append(i['pub_date'])
         print(i['pub_date'])
         frags = i['pub_date'].split('-')
         date = '2016.{}.{}'.format(frags[0],frags[1])
         item_info.update_one({'_id':i['_id']},{'$set':{'pub_date':date}})
     else:
        date = '2016.01.01'
        item_info.update_one({'_id':i['_id']},{'$set':{'pub_date':date}})
 print(pub_dates)

由于赶集网的详情页面的更新,现在的发布日期抓取跟之前格式不太一样,且根据我的爬取数据(大概5w条左右),几乎日期比分散,主要是8月18号一天的数据,看之前的数据,每天的发帖不过几百条,但目前光朝阳区一天(8月18日)发帖就超过8000条,网站的不断变化给爬取分析数据也造成了一定的难度。

  • 获取最终的数据
// 这里的思路就是,根据pub_date和area找到该区域在该日期下的发帖数量,进而得出在一段时间内的该区域的发帖数量,
// 再最后得出,全部区域在一段时间内的发帖数量

def get_data_within(date1, date2, areas):
    for area in areas:
        area_times = []
        for date in get_all_dates(date1,date2):
            a = list(item_info.find({'pub_date':date, 'area':area}))
            each_day_area = len(a)
            area_times.append(each_day_area)
        data = {
             'name': area,
             'data': area_times,
             'type': 'line'
         }
        yield data

2. date函数

a = date(2016, 8, 20)
print(a)
 // 2016-08-20

b = a.strftime('%Y.%m.%d')
print(b)
// 2016.08.20

d = timedelta(days=1)
print(d) 
// 1 day, 0:00:00

3. and / or

python中没有&& 和 ||,取而代之的是 and 和 or,而且处理在2个以上的条件时,记得要括号

if ('pub_date' in i and i['pub_date'] != '') and i['pub_date'].find('发布') == -1:
      pass

if 'key13' in a or 'key2' in a:
    print('true')

4. key in dict

python3中取消has_key方法,取而代之的是key in dict的方法,也是字典中最常用的方法之一。

if 'key1' in a:
    print('true')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,273评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,349评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,709评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,520评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,515评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,158评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,755评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,660评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,203评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,287评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,427评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,122评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,801评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,272评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,808评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,440评论 2 359

推荐阅读更多精彩内容