文档章节

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

KeepMoving
 KeepMoving
发布于 2014/11/05 14:42
字数 654
阅读 238
收藏 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
博文 21
码字总数 3777
作品 0
厦门
高级程序员
私信 提问
大数据分析挖掘学习方向?数据分析师的就业前景怎么样?

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

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

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

jamesjoshuasss
2018/01/19
0
0
地铁译:Spark for python developers ---Spark的数据戏法

聚焦在 Twitter 上关于Apache Spark的数据, 这些是准备用于机器学习和流式处理应用的数据。 重点是如何通过分布式网络交换代码和数据,获得 串行化, 持久化 , 调度和缓存的实战经验 。 认真使...

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

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

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

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

kangvcar
2017/11/02
0
2

没有更多内容

加载失败,请刷新页面

加载更多

Cesium中级4 - 空间数据可视化(二)

Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Viewer中的Entity功能 让我们看看Viewer为操作entities提供出来的功能函数。 选中和描述 点击Viewer中的e...

Cesium中文网
4分钟前
0
0
Linux-CentOS7 安装VMware Workstation

Linux-CentOS7 安装VMware Workstation 太极之道关注0人评论1605人阅读2018-10-17 14:36:22 Linux-CentOS7 安装VMware Workstation 12 1、下载VMware 衔接地址 http://www.vmware.com/produc......

linjin200
7分钟前
0
0
centos7.5 部署flask+nginx+uwsgi+python3

centos7.5 部署flask+nginx+uwsgi+python3 ## uwsgi [uwsgi] master = true max-requests = 6000 processes = 6 threads = 6 chmod-socket = 664 thunder-lock = true buffer-size = 32768 #......

丁典
11分钟前
0
0
BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览

一、引言 时间到了2019年,数据库也发展到了一个新的拐点,有三个明显的趋势: 越来越多的数据库会做云原生(CloudNative),会不断利用新的硬件及云本身的优势打造CloudNative数据库,国内以阿...

阿里云官方博客
16分钟前
0
0
好代码是什么样的?

简评: 好代码是什么样的?相信不同的人会有不同的看法,正如「一千个读者,就有一千个哈姆雷特」,关键在于你有没有自己的标准。 这篇文章是我个人很喜欢的一家公司 - Atomic Spin 的 blog...

极光推送
16分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部