利用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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python正则表达式如何进行字符串替换实例
Dec 28 Python
Python自动发邮件脚本
Mar 31 Python
python采集微信公众号文章
Dec 20 Python
python os模块简单应用示例
May 23 Python
Django密码系统实现过程详解
Jul 19 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
django+echart数据动态显示的例子
Aug 12 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
Django如何使用jwt获取用户信息
Apr 21 Python
Python变量及数据类型用法原理汇总
Aug 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
2006/10/09 PHP
解决中英文字符串长度问题函数
2007/01/16 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php中hashtable实现示例分享
2014/02/13 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
php session 写入数据库
2016/02/13 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
PHP实现验证码校验功能
2017/11/16 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
js微信支付实现代码
2016/12/22 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
简单使用Python自动生成文章
2014/12/25 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
python输出带颜色字体实例方法
2019/09/01 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
设计顾问服务计划书
2014/05/04 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
党小组鉴定意见
2015/06/02 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
python运行脚本文件的三种方法实例
2022/06/25 Python