基于Python Plotly 对 MySQL 存储数据的可视化初步

Pyhon提供强大的可视化工具,除matplotlib外,pandas、seaborn、ggplot、bokeh、pygal、plotly都具有强大的可视功能(http://www.thebigdata.cn/YeJieDongTai/30555.html),根据不同的数据、平台要求选择适当的工具进行可视化能较大程度地展示python的强大功能。个人认为plotly功能强大,且其适合web端的展现,并提供js库,能生产具有交互性的图表,非常值得学习。并且,笔者近日入了MySQL的坑,对于一众diaosi来说,MySQL大部分功能免费,相比于Oracle的昂贵价格和MS SQL Server根植于MS的特性,MySQL不仅免费,而且开源,模块的改进简单,而且在千万级别数据量时性能并不太亚于MS SQL Server,是一款值得入手的开源数据库软件。本文的目的,就是希望通过Plotly的Python接口,对MySQL数据库中的数据进行可视化。


第一部分: MySQL 与 Python 之间的连接

MySQL 与 Python 之间的连接通过MySQL-python实现。笔者假定终端已经安装好Python2.7及以上,并能基于easy_install 或pip进行第三方库的安装。打开cmd,定位到D:\Program Files(x86)\python2_7_11\Scripts(笔者电脑安装的为python2.7.11),命令行输入pip install MySQL-python,即可安装这个包。不过,可能会出现一点安装问题,尽管baidu、Stackoverflow、oschina、csdn搜索了一大堆资料,还是未能解决。因此,采用第二大杀器——Python第三方库安装文件集锦(http://www.lfd.uci.edu/~gohlke/pythonlibs/),搜索MySQL-python,根据电脑系统选择对应的安装文件(后缀为.whl)下载,笔者下载的是MySQL_python-1.2.5-cp27-none-win32.whl。在cmd中输入pip install C:\Users\Liuph\Desktop\MySQL_python-1.2.5-cp27-none-win32.whl,后者为文件路径和文件名。

安装好之后通过import MySQLdb即可实现连接。



第二部分:在Python中调用Plotly包

同理,pip install plotly。安装好之后,需要前往plotly官网(https://plot.ly)注册一个账号并获取秘钥。

在Python中引用,import plotly。当然,可以将plotly的三个模块都加载:

import plotly.plotly as py

import plotly.graph_objs as go

import plot.tools as tls


第三部分:向MySQL中存储数据

本文以简单的数据为例,介绍MySQL创建数据库、数据表和插入数据的方法:

打开cmd,输入mysql -uroot -p,再输入密码,表示以root用户名登录数据库。

创建名为t 的数据库

CREATE DATABESE t; 

SHOW CREATE DATABASE t;可查看数据库t的属性,可以修改数据库的编码,例如ALTER DATABASE t CHARACTER SET utf8;                 

创建关系表

CREATE TABLE score(

id SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(20) NOT NULL UNIQUE,

gender VARCHAR(10) NOT NULL,

grade SMALLINT UNSIGNED NOT NULL,

ratio FLOAT UNSIGNED NOT NULL

);

SHOW COLUMNS FROM score;可以查看关系表的结构。

插入新的数据记录

INSERT score VALUES (1,'Alen','girl',85,0.68),(2,'Bob','boy',76,0.73),(3,'Cindy','girl',89,0.96),(4,'David','boy',63,0.35),(5,'Frank','boy',83,0.94);

SELECT * FROM score;

以上语句的执行结果如下图所示:

基于Python Plotly 对 MySQL 存储数据的可视化初步_第1张图片



第四部分: 在Python中查询MySQL的数据并调用Plotly进行数据渲染

# -*- coding: utf-8 -*-
# Author: Liuph
# Date: 28 Jul, 2016
# Version: 1.1
import plotly
import plotly.graph_objs
import MySQLdb

#print py.get_credentials()
#tls.set_credentials_file(username='liuph', api_key='jmvqrktxw9')

try:
    #连接数据库t
    conn = MySQLdb.connect(host="localhost", user="root", passwd="123456", db="t", charset="utf8")
    print "Conection success!\n"
    cur = conn.cursor()

    cur.execute('SELECT gender, grade, ratio FROM score')
    rows = cur.fetchall()
    x_data = []
    y_data = []
    gender = []
    colors = []
    for row in rows:
        gender.append(row[0])   #性别
        x_data.append(row[1])   #成绩
        y_data.append(row[2])   #出席率
        if(row[0] == 'boy'):    #根据性别设置scatter的颜色
            colors.append('rgb(93, 164, 214)')
        else:
            colors.append('rgb(255, 65, 54)')
    data = [
        {
            'x': x_data,
            'y': y_data,
            'mode': 'markers',
            'marker': {
                'color':colors,
                'size': x_data
            }
        }
    ]
    plotly.offline.plot(data, filename='grade_ratio.html')  #本地
    plotly.plotly.iplot(data, filename='g_r')               #上传至web
except MySQLdb.Error,e:
    print "Mysql Error %d: %s" % (e.args[0], e.args[1])

结果图:

基于Python Plotly 对 MySQL 存储数据的可视化初步_第2张图片

同时,在http://plot.ly的my chart中,新建图表和数据已上传。

   基于Python Plotly 对 MySQL 存储数据的可视化初步_第3张图片


你可能感兴趣的:(数据可视化)