python + mysql 清洗数据

1、创建表

CREATE TABLE `test_sdr_daily_action` (
    `log_date` DATE NOT NULL
    ,`sales_id` BIGINT (20) NOT NULL
    ,`sales_name` VARCHAR(256) NOT NULL
    ,`contacted_prospect` INT (11) NOT NULL DEFAULT 0
    ,`total_call` INT (11) NOT NULL DEFAULT 0
    ,`success_call` INT (11) NOT NULL DEFAULT 0
    ,`success_call_time` INT (11) NOT NULL DEFAULT 0
    ,`average_call_time` DECIMAL(10, 4) NOT NULL DEFAULT 0
    )

2、书写python脚本

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

"""

Create on ‘‘
Update on ‘‘
Author:guangxu.qi
"""

import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)
sys.path.append("/data/dp/dp_common/common/dbase")
from myDbase import Mysql
from myEngine import MyEngine
import datetime
import pandas as pd

lucrativ = Mysql("LUCRATIV")
lucrativ.getAll("set time_zone=‘PST8PDT‘")

def get_data(log_date):
    sql = """
    SELECT user_id sales_id
        ,concat(uu.first_name,‘ ‘,uu.last_name) sales_name
        ,count(*) total_call
        ,count(distinct contact_id) contacted_prospect
        ,sum(case when bcr.status in (‘both-completed‘,‘called-completed‘) then 1 else 0 end) success_call
        ,sum(case when bcr.status in (‘both-completed‘,‘called-completed‘) then duration else 0 end) success_call_time
    FROM bell.call_record bcr
    JOIN user.user uu ON bcr.user_id = uu.id
        AND uu.team_id = 74101849065537536
    WHERE user_id IN (92214216773079040, 92216577134432256, 98385799069859840, 98386104637489152, 104237409167769600)
        AND bcr.team_id = 74101849065537536
        AND bcr.create_time >= ‘%s‘
        AND bcr.create_time < date_add(‘%s‘,interval 1 day)
        -- AND bcr.contact_type = ‘prospect‘
    GROUP BY user_id""" %(log_date,log_date)
    result = lucrativ.getAll(sql)
    print result
    print pd.DataFrame(list(result))
    return pd.DataFrame(list(result))

def merge_data(log_date):
    # 获取数据
    data = get_data(log_date)
    # 处理数据
    data[‘log_date‘] = log_date
    data[‘average_call_time‘] = data[‘success_call_time‘] / data[‘success_call‘]
    # 插入数据
    insert_data(data, log_date)

def insert_data(data, log_date):
    obj = MyEngine("DP_STAT")
    sql = "delete from test_sdr_daily_action where log_date = ‘%s‘"%(log_date)
    obj.delete(sql)
    print ‘delete success‘
    obj.insert(‘test_sdr_daily_action‘,data)
    print ‘insert success‘

if __name__ == ‘__main__‘:
    print "[" + sys.argv[0] + "] started at:", str(datetime.datetime.now())[0:19]
    log_date = ‘‘
    if len(sys.argv) == 1:
        log_date = datetime.date.today() - datetime.timedelta(days=1)
        log_date = log_date.strftime(‘%Y-%m-%d‘)
    elif len(sys.argv) == 2:
        log_date = sys.argv[1]
    else:
        print ‘wrong input parameter !!!‘
        print "[" + sys.argv[0] + "] finished at:", str(datetime.datetime.now())[0:19]
        sys.exit()
    print "log_date: ",log_date
    merge_data(log_date)
    print "[" + sys.argv[0] + "] finished at:", str(datetime.datetime.now())[0:19]

3、常用shell命令

创建文件夹
mkdir test

回主目录
cd
返回上级目录
cd ..
进入目录
cd testdir

编辑文本
vim test.txt
vim hello_world.py

下载文件
sz test.txt
上传文件
rz

4、基础SQL

show databases;

use bell;

show tables;

desc bell.call_record;

set time_zone=‘PST8PDT‘;

SELECT count(*) call_num
FROM bell.call_record
WHERE user_id = 92214216773079040
    AND team_id = 74101849065537536
    AND create_time >= ‘2019-04-11‘
    AND create_time < ‘2019-04-12‘;

SELECT count(*) call_num
    ,count(DISTINCT contact_id) call_prospect
FROM bell.call_record
WHERE user_id = 92214216773079040
    AND team_id = 74101849065537536
    AND create_time >= ‘2019-04-11‘
    AND create_time < ‘2019-04-12‘;

SELECT count(*) call_num
    ,count(DISTINCT contact_id) call_prospect
    ,sum(CASE WHEN status IN (‘both-completed‘, ‘called-completed‘) THEN 1 ELSE 0 END) success_call_num
FROM bell.call_record
WHERE user_id = 92214216773079040
    AND team_id = 74101849065537536
    AND create_time >= ‘2019-04-11‘
    AND create_time < ‘2019-04-12‘;

SELECT user_id
    ,count(*) call_num
FROM bell.call_record
WHERE user_id IN (92214216773079040, 92216577134432256, 98385799069859840, 98386104637489152, 104237409167769600)
    AND team_id = 74101849065537536
    AND create_time >= ‘2019-04-11‘
    AND create_time < ‘2019-04-12‘
GROUP BY user_id

SELECT user_id sales_id
    ,concat(uu.first_name,‘ ‘,uu.last_name) sales_name
    ,count(*) total_call
    ,count(distinct contact_id) contacted_prospect
    ,sum(case when bcr.status in (‘both-completed‘,‘called-completed‘) then 1 else 0 end) success_call
    ,sum(case when bcr.status in (‘both-completed‘,‘called-completed‘) then duration else 0 end) success_call_time
FROM bell.call_record bcr
JOIN user.user uu ON bcr.user_id = uu.id
    AND uu.team_id = 74101849065537536
WHERE user_id IN (92214216773079040, 92216577134432256, 98385799069859840, 98386104637489152, 104237409167769600)
    AND bcr.team_id = 74101849065537536
    AND bcr.create_time >= ‘2019-04-11‘
    AND bcr.create_time < ‘2019-04-12‘
    -- AND bcr.contact_type = ‘prospect‘
GROUP BY user_id

原文地址:https://www.cnblogs.com/huanhuan10/p/10764795.html

时间: 2024-08-30 05:20:52

python + mysql 清洗数据的相关文章

解决python mysql插入数据时报错:TypeError: %d format: a number is required, not str

今天在使用python爬取数据并将其写入mysql数据库时,使用该如下语句: cursor.execute( "insert into comments_p_spider(owner_id,from_name,content,create_time,score,comment_level) values(%d,%s,%s,%s,%f,%s)", (p_id,str(username), str(contentStr), str(create_time),float(score), st

分享一个简单的python+mysql网络数据抓取

最近学习python网络爬虫,所以自己写了一个简单的程序练练手(呵呵..).我使用的环境是python3.6和mysql8.0,抓取目标网站为百度热点(http://top.baidu.com/).我只抓取了实时热点内容,其他栏目应该类似.代码中有两个变量SECONDS_PER_CRAWL和CRAWL_PER_UPDATE_TO_DB,前者为抓取频率,后者为抓取多少次写一次数据库,可自由设置.我抓取的数据内容是热点信息,链接,关注人数和时间.其在内存中存放的结构为dict{tuple(热点信息,

Python MySQL - 进行数据查询

#coding=utf-8 import mysql.connector import importlib import sys # reload(sys) # sys.setdefaultencoding('utf-8') #连接数据库的信息 class ConnectionMysql(object): __config = { 'host':'115.xx.10.121', 'port':'3306', 'user':'root', 'password':'xxxxx8Z6XPXbvos',

Python mysql sqlite 数据没有更新

原因 MySQL事务隔离级别 解决方案 conn.commit() conn.close()

Python+Mysql生成zabbix统计数据

先大概了解一下zabbix数据库结构: 1.groups表 可以根据组名查到组ID 2.找到组ID就可以根据组ID找出这个组下面的所有服务器的ID,这个关系在hosts_groups表里面: 3.有了hostid就可以在hosts表里查看这台机器的基本信息了: items表则可以根据hostid查出这台服务器的所有监控项: 4.终于在items表查到itemid,利用这个itemid在trends和trends_uint这两个表中统计出我们需要的数据 我python水平挺菜的,很多面向对象的功能

Python+Mysql生成zabbix统计数据(优化)

周末重新整理了一下,把有些不合理的地方改了下,自我感觉好多了 ZabbixReport.py #!/usr/bin/python #coding:utf-8 import MySQLdb import time,datetime #zabbix数据库信息: zdbhost = '192.168.1.100' zdbuser = 'zabbix' zdbpass = 'zabbixreport' zdbport = 3306 zdbname = 'zabbix' #生成文件名称: xlsfilen

python连接mysql获取数据 字符串 获取变量

python脚本中的变量经常会变动,所以考虑写到mysql里面如何获取mysql里面数据作为参数,参考如下脚本: #!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("3.12.5.1", "root", "root", "test", charset='utf8') # 使用cursor()方法获取操作

python抓网页数据【ref:http://www.1point3acres.com/bbs/thread-83337-1-1.html】

前言:数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matlab)都有可以实现和网站交互的包.本人试过用java,python,R抓网页,感觉语法各有差异,逻辑上是一样的.我准备用python来大概讲讲抓网页是什么概念,具体的内容要自己看手册或者google别人的博客,这里算是抛砖引玉了.水平有限,出现错误或者有更好的办法,欢迎讨论.. more info o

做Data Mining,其实大部分时间都花在清洗数据

做Data Mining,其实大部分时间都花在清洗数据 时间 2016-12-12 18:45:50  51CTO 原文  http://bigdata.51cto.com/art/201612/524771.htm 主题 数据挖掘 前言:很多初学的朋友对大数据挖掘第一直观的印象,都只是业务模型,以及组成模型背后的各种算法原理.往往忽视了整个业务场景建模过程中,看似最普通,却又最精髓的特征数据清洗.可谓是平平无奇,却又一掌定乾坤,稍有闪失,足以功亏一篑. 大数据圈里的一位扫地僧 说明:这篇文章很