文档章节

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

KeepMoving
 KeepMoving
发布于 2014/11/05 14:42
字数 654
阅读 232
收藏 1

功能:将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
粉丝 13
博文 20
码字总数 3503
作品 0
厦门
高级程序员
私信 提问
大数据分析挖掘学习方向?数据分析师的就业前景怎么样?

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

加米谷大数据
04/17
0
0
Python selenium自动化网页抓取器

(开开心心每一天~ ---虫瘾师) 直接入正题---Python selenium自动控制浏览器对网页的数据进行抓取,其中包含按钮点击、跳转页面、搜索框的输入、页面的价值数据存储、mongodb自动id标识等等...

jamesjoshuasss
01/19
0
0
Python队列及在微信机器人中的应用

本文来源于i春秋学院,未经允许严禁转载。 最近打算更新微信机器人,发现机器人的作者将代码改进了很多,但去掉了sqlite数据库,需要自己根据需求设计数据库,跟作者沟通得到的建议是为了防止...

i春秋学院
2017/04/23
156
0
Python操作MongoDB - 极简教程

Python 连接 MongoDB 安装PyMongo模块 使用MongoClient建立连接 获取数据库 获取集合 上述任何命令都没有在MongoDB服务器上实际执行任何操作。当第一个文档插入集合时才创建集合和数据库。 ...

kangvcar
2017/11/02
0
2
djongo:Django和MongoDB连接器

在Django项目中使用MongoDB作为后端数据库,且不改变Django的ORM框架。实现Django用户管理程序对MongoDB数据库中文件的增加和修改。 用法 1.pip install djongo 2.在Django项目下的setting.p...

p柯西
06/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
17分钟前
0
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
34分钟前
12
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
35分钟前
1
0
Confluence 6 文档主题合并问答

在 Confluence 官方 前期发布的消息 中,文档主题在 Confluence 6.0 及其后续版本中已经不可用。我们知道你可能对这个有很多好好奇的问题,因此我们在这里设置了一个问答用于帮助你将这个主题...

honeymose
今天
2
0
java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部