• Python 2.7_pandas连接MySQL数据处理_20161229


    在我本地Mysql_local_db数据库建立了一个pandas数据表用来对pandas模块的学习 学习过程借鉴学习蓝鲸的网站分析笔记

    1、创建表

    CREATE TABLE pandastest(
    城市 VARCHAR(255),
    用户ID INT(19),
    订单日期 DATE,
    金额 DECIMAL(19,4),
    金额区间 VARCHAR(255),
    订单数 INT(19),
    上次订单日期 DATE,
    距上次订单天数 INT(19),
    上次金额 DECIMAL(19,4),
    距上次订单间隔区间 VARCHAR(255),
    品类数 INT(19),
    KEY city (城市),
    KEY res_id(用户ID)
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
    

     2、Kettle导入测试数据 对数据进行了处理

    3、执行SQL查询数据

    4、Pycharm中编写代码

    用pandas模块进行连接MySQL数据库  numpy 模块进行创建数组 matplotlib进行绘图

    代码如下:

    #coding:utf-8
    import sys
    import MySQLdb
    from datetime import datetime
    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    #系统编码置为'utf-8'
    reload(sys)
    sys.setdefaultencoding('utf-8')
    #连接mysql 其中conn为pandas模块 read_sql方法的第二个参数
    conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='密码',port=3306,db='local_db',charset='utf8')
    sql='''
        SELECT 城市,用户ID,订单日期,金额,金额区间,订单数
        FROM  pandastest
        WHERE 订单日期<'2016-12-26'
        limit 10000
    '''
    #用pandas模块中read_sql方法获取数据表(含表头和数据) real_sql 包含两个参数 一个是执行的sql 这里用sql变量代替 也可用字符串代替 一个是con=conn
    df = pd.read_sql(sql, con=conn)
    conn.close()
    #练习对df中订单日期字段进行拆分成年月日操作 for循环为遍历日期型数据 因此用datetime模块中的strftime方法将日期型转换为字符型
    date_time=pd.DataFrame((x.strftime("%Y-%m-%d").split('-') for x in df['订单日期']),columns=['year','month','day'])
    #将date_time拆分开后的年月日和df的数据横行合并
    df=pd.merge(df,date_time,right_index=True, left_index=True)
    print df
    #按金额区间进行汇总
    jinequjian=df.groupby('金额区间')['金额区间'].agg(len)
    print jinequjian
    #图表字体为华文细黑 字号为11
    plt.rc('font', family='STXihei', size=11)
    #创建一个一维数组
    a=np.array([1,2,3,4])
    #创建条形图 数据源为jinequjian这个变量(金额区间汇总) 设置颜色 透明度 居中对齐和图表边框
    plt.barh([1,2,3,4],jinequjian,color='#052B6C',alpha=0.8,align='center',edgecolor='white')
    #y轴标题
    plt.ylabel('金额区间')
    #x轴标题
    plt.xlabel('客户数')
    #x轴长度
    plt.xlim(0,8000)
    #y轴长度
    plt.ylim(0,6)
    #图表的标题
    plt.title('各金额区间客户分布情况')
    #图例及显示位置
    plt.legend(['客户数'], loc='upper right')
    #背景网格线的颜色样式 尺寸 和透明度
    plt.grid(color='#375589',linestyle='--', linewidth=2,axis='y',alpha=0.4)
    #设置y轴上的数据分类名称和金额区间group by 的字段保持一致
    plt.yticks(a,('(000到500元含)','(500到1000元含)','(1000到1500元含)','(1500元以上)'))
    #展现表
    plt.show()
    

     

     

  • 相关阅读:
    Expression基础体验
    浅谈Pool对象
    TreeBuilder科学的树创建器
    2种负载均衡算法
    亲自打造Deferred对象
    Animation
    micro-template改造
    Node.js的缺陷
    让JSON.js完全适应.NET
    关系型数据库操作一些不好用的地方
  • 原文地址:https://www.cnblogs.com/Mr-Cxy/p/6235097.html
Copyright © 2020-2023  润新知