python爬虫(4)——统计并可视化数据

数据统计的三步走

爬取数据的三字真言

**整理清洗数据;
更新数据库;
数据的可视化;**

下面我几句我这几天所的可视化数据统计的知识,来简单总结一下知识点:

1、整理清洗数据

我们上代码:

#引入我们所需要的库文件
import pymongo
from string import punctuation
import charts

#连接数据库
client = pymongo.MongoClient('localhost',27017)
ceshi = client['ceshi']
item_info = ceshi['item_infoY']

#展开预览数据
for i in item_info.find().limit(300):
    print(i['area'])

二、更新数据库

加入我们想要的数据是这样的:

[‘朝阳’, ‘高碑店’]
[‘朝阳’, ‘定福庄’]
[‘西城’, ‘西单’]
[‘朝阳’, ‘望京’]

但是真实的数据是这样的:

[‘朝阳’, ‘-‘, ‘高碑店’]
[‘朝阳’, ‘-‘, ‘定福庄’]
[‘西城’, ‘-‘, ‘西单’]
[‘朝阳’, ‘-‘, ‘望京’]

所以我们要将数据库中的数据更改为我们想要的:
下面简单的上段代码演示一下:

for i in item_info.find():
    if i['area']:
        area = [i for i in i['area'] if i not in punctuation]
    else:
        area = ['不明']
#将更改后的数据在数据库中进行更新:
    item_info.update({'_id':i['_id']},{'$set':{'area':area}})

三、数据可视化

1、首先到HighCharts官网查找你想要的演示图形;

HighCharts官网:

然后查看图形代码,然后用python实现图形代码;

下面我用折线图为做个示例:
首先,我们来看一下官网上折线图的js代码是怎样的:

$(function () {
    $('#container').highcharts({
        title: {
            text: 'Monthly Average Temperature',
            x: -20 //center
        },
        subtitle: {
            text: 'Source: WorldClimate.com',
            x: -20
        },
        xAxis: {
            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        yAxis: {
            title: {
                text: 'Temperature (°C)'
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: '#808080'
            }]
        },
        tooltip: {
            valueSuffix: '°C'
        },
        legend: {
            layout: 'vertical',
            align: 'right',
            verticalAlign: 'middle',
            borderWidth: 0
        },
        series: [{
            name: 'Tokyo',
            data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]
        }, {
            name: 'New York',
            data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]
        }, {
            name: 'Berlin',
            data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0]
        }, {
            name: 'London',
            data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
        }]
    });
});

然后我们试着用python来实现上面的js代码:

#在这里我们需要一个日期,这里实现的一个自增长的日期函数;
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
#打印一下;
for i in get_all_dates('2015.12.24','2016.01.05'):
    print(i)

结果是:

2015.12.24
2015.12.25
2015.12.26
2015.12.27
2015.12.28
2015.12.29
2015.12.30
2015.12.31
2016.01.01
2016.01.02
2016.01.03
2016.01.04
2016.01.05

#我们需要将我们的数据和js代码中的series数据格式统一;
def get_data_within(date1,date2,areas):
    for area in areas:
        area_day_posts = []
        for date in get_all_dates(date1,date2):
            a = list(item_info.find({'pub_date':date,'area':area}))
            each_day_post = len(a)
            area_day_posts.append(each_day_post)
        data = {
            'name': area,
            'data': area_day_posts,
            'type': 'line'
        }
        yield data
#打印一下:
for i in get_data_within('2015.12.24','2016.01.05',['朝阳','海淀','通州']):
    print(i)

结果是:

{‘data’: [220, 217, 259, 266, 322, 287, 309, 307, 346, 440, 488, 641, 649], ‘type’: ‘line’, ‘name’: ‘朝阳’}
{‘data’: [137, 146, 154, 156, 176, 183, 171, 217, 239, 284, 288, 397, 395], ‘type’: ‘line’, ‘name’: ‘海淀’}
{‘data’: [58, 54, 74, 57, 82, 84, 93, 79, 114, 113, 133, 151, 201], ‘type’: ‘line’, ‘name’: ‘通州’}

#最后用python将js代码实现:
options = {
    'title'   : {'text': '发帖量统计'},
    'subtitle': {'text': '可视化统计图表'},
    'xAxis'   : {'categories': [i for i in get_all_dates('2015.12.24','2016.01.05')]},
    'yAxis'   : {'title': {'text': '数量'}}
    }

series = [i for i in get_data_within('2015.12.24','2016.01.05',['朝阳','海淀','通州'])]

charts.plot(series, options=options,show='inline')
# options=dict(title=dict(text='Charts are AWESOME!!!'))

看一下成果:

这里写图片描述

最后要说的是我们所用的工具插件都有哪些:

1、jupyter
2、Highcharts

安装成功后我来演示一下具体你操作:
打开命令行工具,输入jupyter-notebook;
这里写图片描述
这时默认浏览器会自动打开,接着你就可以在上面对你所爬取的数据进行统计可视化了;
这里写图片描述

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值