文档章节

python获取mysql天数据,聚合存入mongodb(我的第一个用python写的程序)

KeepMoving
 KeepMoving
发布于 2014/11/05 14:42
字数 654
阅读 222
收藏 1
点赞 0
评论 0

功能:将mysql中保存的各个产品每天的dau数据,计算聚合到mongodb中,因为应用数据直接保存到mongodb中。离线调用python脚本,将每天的数据聚合写到mongodb的周表中。mysql数据都是模拟的,通过程序随机数据写入。

1.mysql数据库:

plat_dau_detail

表结构说明:天dau

属性

类型

说明

prod_id

varchar(20)

产品标识

d_date

int

时间戳

dau

int

dau

2.mongodb周数据库设计:

plat_dau_week

表结构说明:周dau

属性

类型

说明

prod_id

string

产品标识

d_date

int

时间戳

d_quarter

int

季度(1,2,3,4

d_month

int

d_week

int

一个月的第n

d_last

int

1代表一个月的最后一周

dau

int

dau

 主程序dauMgt.py:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

'management dau data from mysql'

import MySQLdb
import pymongo 
import string
from datetime import datetime,date,time
import dateManage

DB_HOST = '127.0.0.1'
DB_USER = 'root'
DB_PASS = ''
DB_NAME = 'platdau'

MONGO_HOST = '127.0.0.1'
MONGO_PORT = 27017

myConn = MySQLdb.connect(host=DB_HOST,user=DB_USER,passwd=DB_PASS,db=DB_NAME,charset="utf8")
cursor = myConn.cursor()

#获取dau详细数据

# sql = 'select * from plat_dau_detail'
sql = 'SELECT sum( dau ) dau , prod_id, from_unixtime( d_date ) d_date \
FROM `plat_dau_detail`\
GROUP BY weekofyear( from_unixtime( d_date ) ) , prod_id'
resultCnt = cursor.execute(sql)
platDauData = cursor.fetchall()

dataList = []
for item in platDauData:
    prodId = item[1]
    d_date = item[2]
    d_date = str(d_date.date())
    dau = item[0]
    dict1 = {'prodId':prodId,'d_date':str(d_date),'dau':dau}
    dataList.append(dict1)
    

# print dataList


mongoCon = pymongo.Connection(MONGO_HOST,MONGO_PORT)
db = mongoCon.dau
for item in dataList:
    d_date = item['d_date']
    prodId = item['prodId']
    dau = item['dau']
    dateInfo = dateManage.getDateInfo(d_date)
    db.plat_dau_week.insert({'prod_id':prodId,'d_date':dateInfo['timestamp'],'d_quarter':dateInfo['quarter'],'d_month':dateInfo['month'],'d_week':dateInfo['week'],'d_last':dateInfo['last'],'dau':int(dau)})

时间处理模块dateManage.py:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

"""date management"""

from datetime import datetime,date,timedelta
import math
import time




#取得一个时间的详细信息
def getDateInfo(param):
    param1 = param + ' 00:00:00'
    d = datetime.strptime(param1,"%Y-%m-%d %H:%M:%S").date()
    weekday = d.isoweekday()
    dayDif = weekday - 1
    monday = d - timedelta(days=dayDif)
    year = monday.year
    month = monday.month
    quarter = int(math.ceil(float(month/3.0)))
    timestamp = int(time.mktime(time.strptime(str(monday), "%Y-%m-%d")))

    month1 = date(year,month,1)
    monthMonday1 = month1.isoweekday()
    tempMonth = month1.month
    monthMonday = []
      while tempMonth <= month :
          monthMonday1 = month1.isoweekday()
          if monthMonday1 != 1:
              dayDiff = 7-monthMonday1 + 1
              month1 = month1 + timedelta(days=dayDiff)
          curDate = str(month1)
          monthMonday.append(curDate)
        month1 = month1 + timedelta(days=7)
        tempMonth = month1.month
    weekNum = monthMonday.index(str(monday)) + 1
    lastNum = 0
    if len(monthMonday) == weekNum :
        lastNum = 1
    
    result = {'timestamp':timestamp,'quarter':quarter,'month':month,'week':weekNum,'last':lastNum}
    return result


# a = '2014-10-01';
# a = getDateInfo(a)
# print a

运行结果:



PS:由于第一次练手,不足之处难免,记录一下。以后回头看看

© 著作权归作者所有

共有 人打赏支持
KeepMoving
粉丝 11
博文 20
码字总数 3503
作品 0
厦门
高级程序员
大数据分析挖掘学习方向?数据分析师的就业前景怎么样?

加米谷数据分析挖掘课程明细,从理论到云端实操环境到项目实战,手把手教您从0掌握数据分析与挖掘技术,带您走进数据时代。 第一阶段(python基础) python入门:1、Python版本特性介绍2、P...

加米谷大数据 ⋅ 04/17 ⋅ 0

Fedora上使用Python操作MongoDB学习笔记

1. 创建Python虚拟环境 Fedora中已经安装有Python2和Python3,可执行文件的目录在/usr/bin/目录下,其中软连接为 接下来采用Python3来操作MongoDB,因此为不污染原有的系统环境,以及隔离此特...

t_huanghai ⋅ 04/21 ⋅ 0

一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者 ⋅ 04/25 ⋅ 0

趣说Mongodb和他的两个小伙伴

Mongodb的自述 大家好,我是Mongodb 在数据库家族众多兄弟中,大致可以分为关联性数据库和文档性数据库(NoSQL)两类,而我就属于后者。 近些年随着我的朋友Node慢慢变得愈发强大,我也受到了...

dali_saymore ⋅ 06/13 ⋅ 0

Python中MongoDB使用

MongoDB的层级为 database -->collection --> document 安装MongoDB,启动mongo服务 PyMongo模块是Python对MongoDB操作的接口包,主要实现对MongoDB的几种操作:增删改查以及排序等功能 安装...

鱼煎 ⋅ 05/31 ⋅ 0

python3 scrapy爬取智联招聘存mongodb

写在前面,这次写智联招聘的爬虫是其次,主要的是通过智联招聘上的数据信息弄一个数据挖掘的小项目,这一篇主要是如何一气呵成的将智联招聘上的招聘信息给爬下来 (一)scrapy框架的使用 sc...

徐代龙 ⋅ 05/01 ⋅ 0

Python爬虫入门并不难,甚至进阶也很简单

互联网的数据爆炸式的增长,而利用 Python 爬虫我们可以获取大量有价值的数据: 1.爬取数据,进行市场调研和商业分析 爬取知乎优质答案,筛选各话题下最优质的内容; 抓取房产网站买卖信息,...

菜鸟学python ⋅ 06/07 ⋅ 0

存储大量爬虫数据的数据库,了解一下?

"当然, 并不是所有数据都适合" 在学习爬虫的过程中, 遇到过不少坑. 今天这个坑可能以后你也会遇到, 随着爬取数据量的增加, 以及爬取的网站数据字段的变化, 以往在爬虫入门时使用的方法局限性...

fesoncn ⋅ 04/09 ⋅ 0

MongoDB 4.0 RC 版本强势登陆

MongoDB 因其灵活的文档模型、可扩展分布式设计广受开发者喜爱,在此基础上,MongoDB 4.0 推出了更强大的功能支持,目前4.0第一个RC版本已经发布,本文将介绍 MongoDB 4.0 核心的一些新特性。...

张友东 ⋅ 05/30 ⋅ 0

MongoDB-pymongo.errors.CursorNotFound: Cursor

python, python3. 先从数据库中取得所有数据 db['test'].find({},{_id:0}),然后对结果进行for循环 但是当do_something函数耗时过长,在cursor上长时间没有进行操作,引发cursor在mongodb...

寒月谷 ⋅ 05/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 29分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 44分钟前 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 46分钟前 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 52分钟前 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

前端基础(三):函数

字数:1685 阅读时间:5分钟 函数定义 在最新的ES规范中,声明函数有4中方法: -函数声明 -函数表达式 -构造函数Function -生成器函数 1.函数声明 语法: function name([param[, param2 [....

老司机带你撸代码 ⋅ 今天 ⋅ 0

Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。 中国人把Stack翻译成“栈”,把Hea...

java高级架构牛人 ⋅ 今天 ⋅ 0

Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 今天 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 今天 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部