Monthly Archives: 五月 2014
python 生成统计图
想用python+matplotlib生成每天用户使用的统计图。测试环境,CentOS6.5,数据存放于mysql中,python2.7,matplotlib使用easy_install安装。
首先建一个表。
CREATE TABLE `member` ( `id` int(1) NOT NULL AUTO_INCREMENT, `user` varchar(15) DEFAULT NULL, `access_date` datetime DEFAULT NULL, `mark` varchar(1) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
测试数据部分还是写个python脚本生成,这样批量做就方便了。
#!/bin/python #-*- coding:utf-8 -*- # Filename: main.py # Revision: 1.0 # Date: 2012-06-14 # Author: simonzhang # web: www.simonzhang.net # Email: simon-zzm@163.com ### END INIT INFO import time import random # 基础设置 dict = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] # 生成日期的unix起始时间 create_unix_time = 1396281600 # 生成每次日期的间隔时间。单位是小时。 hour_skip_start = 1 hour_skip_end = 12 def main(): start_unix_time = create_unix_time f = open('create.sql', 'wb') # 开始循环生成sql for i in range(280): # 生成用户名 user_name = '' for j in range(random.randint(1,5)): user_name = user_name+random.choice(dict) # 生成时间 start_unix_time = start_unix_time+(random.randint(hour_skip_start, hour_skip_end)*3600) get_create_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start_unix_time)) f.write("INSERT INTO `member` VALUES ('%s', '%s', '%s', null);\n" % (i, user_name, get_create_time)) f.close() if __name__ == '__main__': main()
开始正式部分,获取数据并生成图片。
#!/bin/python #-*- coding:utf-8 -*- # Filename: main.py # Revision: 1.0 # Date: 2012-06-14 # Author: simonzhang # web: www.simonzhang.net # Email: simon-zzm@163.com ### END INIT INFO import time import MySQLdb from pylab import * from matplotlib.font_manager import FontProperties #### set nearest_day = 32 def create_pic(memberData): print memberData # 将数据x,y整理两个列表 x_date = [] y_count = [] for i in memberData: x_date.append(i[2]) y_count.append(i[1]) # 将x轴日期元组化 zu = [] da = [] for j in range(1, len(x_date)/5+1): zu.append(j*5) da.append(x_date[j*5]) # 开始生成表 font = FontProperties(fname=r"/usr/share/fonts/truetype/freefont/msyh.ttf", size=10) cla() label = u'测试' plot(y_count) # x和y轴定义 xlabel(u'日期', fontproperties=font) ylabel(u'统计数量', fontproperties=font) xticks(tuple(zu), tuple(da), fontproperties=font) title(u'统计', fontproperties=font) grid(True) legend(loc = 'lower right') savefig("test1.png") def main(): try: conn=MySQLdb.connect(host='115.28.42.253',user='test',passwd='123456',db='pymatplotlib',port=3306,charset='utf8') cur=conn.cursor() start_date = time.strftime('%Y-%m-%d', time.localtime(time.time()-3600*24*nearest_day)) end_date = time.strftime('%Y-%m-%d', time.localtime(time.time())) my_sql = "SELECT id,count(*),DATE_FORMAT(access_date, '%Y-%m-%d' ) \ FROM member \ WHERE access_date BETWEEN '"+start_date+"' and '"+end_date+"' \ GROUP BY DATE_FORMAT(access_date, '%Y-%m-%d' ) " print my_sql cur.execute(my_sql) cds=cur.fetchall() conn.close() except MySQLdb.Error,e: print "Mysql Error %d: %s" % (e.args[0], e.args[1]) create_pic(cds) if __name__ == '__main__': main()
读《wireshark数据包分析实例》
读《全球一流设计方案》
centos 6.5 下编译测试pypy2.3
编译环境使用dell服务器,CPU主频2.6GHz,内存32G,操作系统使用CentOS6.5 64位,python为2.7。简单操作记录如下。
yum install gcc* make libffi libffi-devel expat expat-devel \
bzip2 bzip2-devel libncurses-devel libssl-dev libgc-dev
wget https://bitbucket.org/pypy/pypy/downloads/pypy-2.3-src.tar.bz2
tar jxvf pypy-2.3-src.tar.bz2
mv pypy-pypy-394146e9bb67 /usr/local/pypy
cd /usr/local/pypy
python rpython/bin/rpython -Ojit pypy/goal/targetpypystandalone.py
耐心等待一个多小时(104m56.034s)编译完成。到pypy目录下看到pypy-c的可执行文件。
rpyhon 编译参数
-O : 编译为字节码后的优化级别。默认为2,此处使用的jit。
级别说明:
0 – 关闭优化功能,编译速度最快。使用的是系统垃圾回收器(Debian package libgc-dev)。0和1级别外都是使用的内置垃圾回收器。0和1运行速度会非常慢。
1 – 使用非耗时的优化
size – 最大限度的减小可执行文件的体积
mem – 最大程度减小内存消耗
2 – 开启所有优化,获得好的运行性能
3 – 同2类似,使用gcc重新编译pypy部分。
jit – 开启所有优化,使用jit即时编译器。jit是将字节码转换成可以直接发送给处理器的指令的程序。
编译是单核进行的,所以多核是没有意义,如果想快就要主频高,内存高。如果是用云主机2G内存的话估计要一、两天时间。
注:操作系统CentOS 6.3编译有问题。具体问题没有详细查。
计算速度测试代码位置http://www.simonzhang.net/?p=1844
使用python运行 14.9753940105秒,pyp运行3.56524395943秒。
安装pip,后用pip安装tornado和flask框架。
tornado测试代码
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") application = tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": application.listen(5000) tornado.ioloop.IOLoop.instance().start()
flask测试代码
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run(host='192.168.6.250')
为了方便使用将命令放到系统环境中。
ln -s /usr/local/pypy/pypy-c /usr/local/bin/pypy
ln -s /usr/local/pypy/bin/pypy-c /usr/local/bin/pip
参考网页
http://pypy.readthedocs.org/en/latest/config/opt.html