1. 程式人生 > >基於Python Plotly 對 MySQL 儲存資料的視覺化初步

基於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中查詢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])

結果圖:


同時,在http://plot.ly的my chart中,新建圖表和資料已上傳。