利用Python绘制MySQL数据图实现数据可视化


Posted in Python onMarch 30, 2015

本教程的所有Python代码可以在网上的IPython notebook中获取。

考虑在公司里使用Plotly?可以看一下Plotly的on-premises企业版。(注:On-premises是指软件运行在工作场所或公司内部,详见维基百科)

注意操作系统:尽管Windows或Mac用户也可以跟随本文操作,但本文假定你使用的是Ubuntu系统(Ubuntu桌面版或Ubuntu服务器版)。如果你没有Ubuntu Server,你可以通过Amazon的Web服务建立一个云平台(阅读这份教程的前半部分)。如果你用的是Mac,我们推荐你购买并下载VMware Fusion,在上面安装Ubuntu桌面版。你也可以通过Zareason购买一台便宜的预装Ubuntu桌面版/服务器版的笔记本或服务器。

使用Python读取MySQL的数据并绘图很简单,所有你需要的工具都可以免费下载。本文会展示怎么做。如果你遇到问题或者卡住了,可以给feedback@plot.ly发送邮件,也可以在本文下面评论,或者在tweeter上@plotlygraphs。
第1步:确保MySQL已安装且在运行

首先,你需要有一台安装了MySQL的计算机或服务器。你可以通过以下方法检查MySQL是否安装:打开控制台,输入“mysql”,如果你收到MySQL无法连接的错误,这意味着MySQL安装了,但是没有运行。在命令行或“Terminal”中,尝试输入sudo /etc/init.d/mysql start并按回车来启动MySQL。

如果MySQL没有安装,不要失望。在Ubuntu中下载并安装只需一行命令:

shell> sudo apt-get install mysql-server --fix-missing

安装过程中会让你输入一个密码。安装结束后,你可以在终端中键入以下命令进入MySQL控制台:
 

shell> sudo mysql -uroot -p

输入“exit”就可以退出MySQL控制台,。

本教程使用MySQL经典的“world”样例数据库。如果你想跟随我们的步骤,可以在MySQL文档中心下载world数据库。你也可以在命令行中使用wget下载:
 

shell> wget http://downloads.mysql.com/docs/world.sql.zip

然后解压文件:
 

shell> unzip world.sql.zip

(如果unzip没有安装,输入sudo apt-get install unzip安装)

现在需要把world数据库导入到MySQL,启动MySQL控制台:
 

shell> sudo mysql -uroot -p

进入控制台后,通过以下MySQL命令使用world.sql文件创建world数据库:
 

mysql> CREATE DATABASE world;
mysql> USE world;
mysql> SOURCE /home/ubuntu/world.sql;

(在上面的SOURCE命令中,确保将路径改为你自己world.sql所在目录)。
上述操作说明摘自MySQL文档中心。
第2步:使用Python连接MySQL

使用Python连接MySQL很简单。关键得安装python的MySQLdb包。首先需要安装两项依赖:
 

shell> sudo apt-get install python-dev
shell> sudo apt-get install libmysqlclient-dev

然后安装Python的MySQLdb包:
 

shell> sudo pip install MySQL-python

现在,启动Python并导入MySQLdb。你可以在命令行或者IPython notebook中执行:
 

shell> python
>>> import MySQLdb

创建MySQL中world数据库的连接:
 

>>> conn = MySQLdb.connect(host="localhost", user="root", passwd="XXXX", db="world")

cursor是用来创建MySQL请求的对象。
 

>>> cursor = conn.cursor()

我们将在Country表中执行查询。
第3步:Python中执行MySQL查询

cursor对象使用MySQL查询字符串执行查询,返回一个包含多个元组的元组——每行对应一个元组。如果你刚接触MySQL语法和命令,在线的MySQL参考手册是一个很不错的学习资源。
 

>>> cursor.execute('select Name, Continent, Population, LifeExpectancy, GNP from Country');
>>> rows = cursor.fetchall()

rows,也就是查询的结果,是一个包含多个元组的元组,像下面这样:

利用Python绘制MySQL数据图实现数据可视化

使用Pandas的DataFrame来处理每一行要比使用一个包含元组的元组方便。下面的Python代码片段将所有行转化为DataFrame实例:
 

>>> import pandas as pd
>>> df = pd.DataFrame( [[ij for ij in i] for i in rows] )
>>> df.rename(columns={0: 'Name', 1: 'Continent', 2: 'Population', 3: 'LifeExpectancy', 4:'GNP'}, inplace=True);
>>> df = df.sort(['LifeExpectancy'], ascending=[1]);

完整的代码可以参见IPython notebook
第4步:使用Plotly绘制MySQL数据

现在,MySQL的数据存放在Pandas的DataFrame中,可以轻松地绘图。下面的代码用来绘制国家GNP(国民生产总值)VS平均寿命的图,鼠标悬停的点会显示国家名称。确保你已经下载了Plotly的Python库。如果没有,你可以参考一下它的入门指南。
 

import plotly.plotly as py
from plotly.graph_objs import *
 
trace1 = Scatter(
   x=df['LifeExpectancy'],
   y=df['GNP'],
   text=country_names,
   mode='markers'
)
layout = Layout(
   xaxis=XAxis( title='Life Expectancy' ),
   yaxis=YAxis( type='log', title='GNP' )
)
data = Data([trace1])
fig = Figure(data=data, layout=layout)
py.iplot(fig, filename='world GNP vs life expectancy')

完整的代码在这份IPython notebook中。下面是作为一个iframe嵌入的结果图:

利用Python绘制MySQL数据图实现数据可视化

利用Plotly的Python用户指南中的气泡图教程,我们可以用相同的MySQL数据绘制一幅气泡图,气泡大小表示人口的多少,气泡的颜色代表不同的大洲,鼠标悬停会显示国家名称。下面显示的是作为一个iframe嵌入的气泡图。

利用Python绘制MySQL数据图实现数据可视化

创建这个图表以及这个博客中的所有python代码都可以从这个IPython notebook中拷贝。

Python 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
python文件与目录操作实例详解
Feb 22 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
Django 响应数据response的返回源码详解
Aug 06 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
如何理解python对象
Jun 21 Python
用python爬虫批量下载pdf的实现
Dec 01 Python
python 获取谷歌浏览器保存的密码
Jan 06 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 Python
Python面向对象编程中的类和对象学习教程
Mar 30 #Python
详细介绍Python函数中的默认参数
Mar 30 #Python
在Python中利用Into包整洁地进行数据迁移的教程
Mar 30 #Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 #Python
使用Python中PDB模块中的命令来调试Python代码的教程
Mar 30 #Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 #Python
使用Python标准库中的wave模块绘制乐谱的简单教程
Mar 30 #Python
You might like
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
js表单登陆验证示例
2016/10/19 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
Python类的基础入门知识
2008/11/24 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
python中的二维列表实例详解
2018/06/19 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Python class的继承方法代码实例
2020/02/14 Python
python数字类型math库原理解析
2020/03/02 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
中医药大学市场营销专业自荐信
2013/09/29 职场文书
外语专业毕业生自我评价分享
2013/10/05 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
校园安全演讲稿
2014/05/09 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
学习党章的体会
2014/11/07 职场文书
创业计划书之寿司
2019/07/19 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python