文档章节

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

KeepMoving
 KeepMoving
发布于 2014/11/05 14:42
字数 654
阅读 229
收藏 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
粉丝 11
博文 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操作MongoDB - 极简教程

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

kangvcar
2017/11/02
0
2
Mongodb python驱动教程

Mongodb python驱动教程 安装 使用python驱动mongodb需要下载、安装PyMongo包 Windows用户,点击这里下载。 使用pip安装 在linux平台使用pip命令安装: 指定版本: 升级: `pip install --u...

youthflies
2014/04/30
0
0
djongo:Django和MongoDB连接器

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

p柯西
06/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《看图轻松理解数据结构与算法系列》导引贴

最近学习数据结构,遇到一个很喜欢的博主,他的文章图文并茂,理解起来很容易。特此开贴记录,方便反复阅读。 博主主页 https://juejin.im/user/57c3970f79bc440063e58518/posts?sort=popul...

科陆李明
46分钟前
1
0
20.27 分发系统介绍~ 20.30 expect脚本传递参数

分发系统介绍分发系统-expect讲解(也就是一个分发的脚本)场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因...

洗香香
今天
2
0
设计一个百万级的消息推送系统

前言 首先迟到的祝大家中秋快乐。 最近一周多没有更新了。其实我一直想憋一个大招,分享一些大家感兴趣的干货。 鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两...

crossoverJie
今天
2
0
软件架构:5种你应该知道的模式

Singleton(单例模式)、仓储模式(repository)、工厂模式(factory)、建造者模式(builder)、装饰模式(decorator)……大概每个上课听讲的程序员都不会陌生——软件的设计模式为我们提供...

好雨云帮
今天
3
0
OSChina 周二乱弹 —— 这只是一笔金钱交易

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《暮春秋色》- 窦唯 / 译乐队 《暮春秋色》- 窦唯 / 译乐队 手机党少年们想听歌,请使劲儿戳(这里) @我没有抓狂:跨服聊...

小小编辑
今天
1K
18

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部