利用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 相关文章推荐
python常规方法实现数组的全排列
Mar 17 Python
让Python代码更快运行的5种方法
Jun 21 Python
Python使用lxml模块和Requests模块抓取HTML页面的教程
May 16 Python
python中json格式数据输出的简单实现方法
Oct 31 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
Django中的forms组件实例详解
Nov 08 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
详解Python中的测试工具
Jun 09 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
深入了解python中元类的相关知识
Aug 29 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
Python爬虫之爬取最新更新的小说网站
May 06 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
php Ajax乱码
2008/04/09 PHP
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
php生成无限栏目树
2017/03/16 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
javascript self对象使用详解
2016/10/18 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
在线服装零售商:SheIn
2016/07/22 全球购物
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
优秀体育委员自荐书
2014/01/31 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
环保建议书作文300字
2015/09/14 职场文书
大学生志愿者心得体会
2016/01/15 职场文书