python+matplotlib+web.py

最近看了厦门大学数据库实验室林子雨老师的《大数据课程实验案例:网站用户行为分析》,可视化这块是用的R语言,我决定用Python来实现一下。

参考文献 http://dblab.xmu.edu.cn/post/7499/

数据来源 http://pan.baidu.com/s/1nuOSo7B

  1 # -*- coding: utf-8 -*-
  2 """
  3 Created on Wed Apr 19 17:26:53 2017
  4
  5 @author: touristlee
  6
  7 TO:Don‘t worry,be happy!
  8 """
  9
 10 import pandas as pd
 11 import numpy as np
 12 import matplotlib.pylab as plt
 13 import matplotlib.patches as mpatches
 14
 15 #数据下载地址https://pan.baidu.com/s/1nuOSo7B
 16 #本案例采用的数据集为user.zip,包含了一个大规模数据集raw_user.csv(包含2000万条记录),
 17 #和一个小数据集small_user.csv(只包含30万条记录)。
 18 #小数据集small_user.csv是从大规模数据集raw_user.csv中抽取的一小部分数据。
 19 #之所以抽取出一少部分记录单独构成一个小数据集,是因为,在第一遍跑通整个实验流程时,
 20 #会遇到各种错误,各种问题,先用小数据集测试,可以大量节约程序运行时间。
 21 #等到第一次完整实验流程都顺利跑通以后,就可以最后用大规模数据集进行最后的测试。
 22 #user_id(用户id)
 23 #item_id(商品id)
 24 #behaviour_type(包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4)
 25 #user_geohash(用户地理位置哈希值,有些记录中没有这个字段值,所以后面我们做数据预处理时把这个字段全部删除,用随机生成的省份代替)
 26 #item_category(商品分类)
 27 #time(该记录产生时间)
 28
 29
 30 #读取数据
 31 df = pd.read_csv(‘small_user.csv‘,encoding=‘utf-8‘)
 32 #随机生成一个省份列表
 33 def get_province(x):
 34     youlist = []
 35     for i in x:
 36         maplist = [u‘北京‘,u‘天津‘,u‘上海‘,u‘重庆‘,u‘河北‘,u‘山西‘,u‘辽宁‘,u‘吉林‘,u‘黑龙江‘,u‘江苏‘,u‘浙江‘,u‘安徽‘,u‘福建‘,u‘江西‘,u‘山东‘,u‘河南‘,u‘湖北‘,u‘湖南‘,u‘广东‘,u‘海南‘,u‘四川‘,u‘贵州‘,u‘云南‘,u‘陕西‘,u‘甘肃‘,u‘青海‘,u‘台湾‘,u‘内蒙古‘,u‘广西‘,u‘西藏‘,u‘宁夏‘,u‘新疆‘,u‘香港‘,u‘澳门‘]
 37         youlist.append(maplist[i])
 38     return youlist
 39 #切割字符串
 40 def format_time(x):
 41     return str(x).split(‘ ‘)[0]
 42 #格式化
 43 df = df[[‘user_id‘,‘item_id‘,‘behavior_type‘,‘item_category‘,‘time‘]]
 44 df[‘province‘] = get_province(np.random.randint(0,33,len(df)))
 45 df[‘time‘] = df[‘time‘].map(format_time)
 46 df.columns=[‘uid‘,‘itemid‘,‘behavior‘,‘itemcagegory‘,‘time‘,‘province‘]
 47 df[‘time‘]=df[‘time‘].astype(‘datetime64‘)
 48 print df.dtypes
 49
 50 #查询
 51 #查询有多少条数据
 52 print df.count()
 53 #查询有多少用户
 54 print df.drop_duplicates([‘uid‘]).count()
 55 #查询有多少不重复的数据
 56 print df.drop_duplicates().count()
 57
 58 #条件查询
 59 #查询2014年12月10日到2014年12月13日有多少人浏览了商品
 60 print df[(‘2014-12-13‘>=df[‘time‘]) & (df[‘time‘] >= ‘2014-12-10‘) & (df[‘behavior‘]==1)].head()
 61 #每天网站卖出去的商品的个数
 62 df2=df.drop_duplicates()
 63 print df2[df2[‘behavior‘]==4].groupby(‘time‘).itemcagegory.count()
 64 #取给定时间和给定地点,求当天发出到该地点的货物的数量
 65 print df[(df[‘time‘]==‘2014-12-12‘) & (df[‘province‘]==u‘山西‘) & (df[‘behavior‘]==4)].itemcagegory.count()
 66
 67
 68
 69 #根据用户行为分析
 70 #查询一件商品在某天的购买比例或浏览比例
 71 print df[df[‘time‘]==‘2014-12-11‘].itemcagegory.count()
 72 print df[(df[‘time‘]==‘2014-12-11‘) & (df[‘behavior‘]==4)].itemcagegory.count()
 73 print float(df[(df[‘time‘]==‘2014-12-11‘) & (df[‘behavior‘]==4)].itemcagegory.count())/float(df[df[‘time‘]==‘2014-12-11‘].itemcagegory.count())
 74
 75
 76
 77 ##查询某个用户在某一天点击网站占该天所有点击行为的比例(点击行为包括浏览,加入购物车,收藏,购买)
 78 print df[(df[‘uid‘]==10001082) & (df[‘time‘]==‘2014-12-12‘)].behavior.count()
 79 print float(df[(df[‘uid‘]==10001082) & (df[‘time‘]==‘2014-12-12‘)].behavior.count())/float(df[df[‘time‘]==‘2014-12-12‘].behavior.count())
 80
 81 #用户实时查询分析
 82 #各个地区浏览网站的访问次数
 83
 84 df2=df[df[‘behavior‘]==1]
 85 df2=df2.drop_duplicates(‘uid‘)
 86 print df2.groupby(‘province‘).uid.count()
 87
 88
 89
 90 #可视化
 91 #分析各省份消费者对商品的行为(浏览)
 92 fig=plt.figure(figsize=(8,4))
 93 ax1=fig.add_subplot(111)
 94 plt.title(u‘behavior by province‘)
 95 plt.xlabel(‘province‘)
 96 plt.ylabel(‘count‘)
 97 df2=df[df[‘behavior‘]==1]
 98 df2=df2.groupby(‘province‘).uid.count()
 99 df2.plot(kind=‘bar‘)
100 #分析消费者对商品的行为
101
102 df3=df[[‘behavior‘]]
103 df3=df3.groupby(‘behavior‘).behavior.count()
104 fig2=plt.figure(figsize=(8,4))
105 ax2=fig2.add_subplot(111)
106 plt.title(u‘behavior‘)
107 plt.xlabel(‘behavior‘)
108 plt.ylabel(‘count‘)
109 df3.plot(kind=‘bar‘)
110
111 ##分析被购买最多的商品是哪一类 TOP10
112 df4=df[[‘behavior‘,‘itemcagegory‘]]
113 df4=df4[df4[‘behavior‘]==4]
114 df4=df4.groupby(‘itemcagegory‘).itemcagegory.count()
115 df5=df4.sort_values(ascending=False).head(10)
116 fig3=plt.figure(figsize=(8,4))
117 ax3=fig3.add_subplot(1,1,1)
118 colors=[‘red‘,‘blue‘,‘yellow‘,‘green‘,‘white‘,‘black‘,‘magenta‘,‘cyan‘,‘yellowgreen‘,‘lightcoral‘]
119 ax3.scatter(df5.index,df5.values,c=colors)
120 plt.xlabel(‘var‘)
121 plt.ylabel(‘freq‘)
122 plt.title(‘TOP10 category‘)
123 plt.legend(handles=[mpatches.Patch(color=x, label=y,joinstyle=‘round‘) for (x,y) in zip(colors,df5.index)],bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
124 plt.show()
125
126 ##分析每年的那个月份购买商品的量最多
127 #先增加一列 月份
128 df6=df[df[‘behavior‘]==4]
129 df7=df6.copy()
130 df7[‘month‘]=np.array([i.month for i in df7[‘time‘]])
131 df7=df7[[‘behavior‘,‘month‘]]
132 df7=df7.groupby(‘month‘).count()
133 df7.plot(kind=‘bar‘)
134
135 ##分析每年的每个月份的行为习惯
136 df7=df.copy()
137 df7[‘month‘]=np.array([i.month for i in df7[‘time‘]])
138 df7=df7[[‘behavior‘,‘month‘]]
139 tmp=df7.groupby([‘month‘,‘behavior‘]).behavior.count()
140 tmp.plot(kind=‘bar‘,color=[‘red‘,‘blue‘,‘green‘,‘yellow‘])
141
142
143 #分析各省份消费者对商品的行为(收藏)
144 #分析国内哪个省份的消费者最有购买欲望 即收藏
147 df8=df[df[‘behavior‘]==3]
148 df8=df8.drop_duplicates(‘uid‘)
149 tmp8=df8.groupby(‘province‘).uid.count()
150 fig8=plt.figure(figsize=(8,4))
151 ax8=fig.add_subplot(111)
152 plt.title(u‘behavior by province‘)
153 plt.xlabel(‘province‘)
154 plt.ylabel(‘count‘)
155 tmp8.plot(kind=‘bar‘)

最后一个分析那个省份的消费者最有购买欲望的,原文用的是R语言的地图,matplotlib画地图很麻烦。

我想到的办法是用第三方模块来替代。首先想到的是百度的echarts了,这可以说是百度的良心产品了。

使用这个可以用Django或者web.py,这里我选择最简单的web.py。

代码我上传到了 https://github.com/touristlee/webpy.git

时间: 2024-10-24 11:49:43

python+matplotlib+web.py的相关文章

每天一点python:web.py框架入门

在使用微信搭建公众平台的时候,使用的是web.py这个方便简单的框架,学习一下. 框架文档:http://webpy.org/docs/0.3/tutorial.zh-cn  按照文档的内容写一遍程序入门就没什么问题了 运行程序:cmd中--进入文件所在路径--输入 python 文件名即可运行 遇到的问题: 问题1.模板文件中,第一行必须以 $def with()开头,否则会报错 $def with (name) $if name: I just wanted to say <em>hell

我的第一个python应用-web.py

https://git.oschina.net/yuweibing/web.py.git 实现了一个简单的需求: 客服部信息系统概况描述     一.系统目标 系统开发的意图为便于公司总部及外省各业务线投诉处理信息的管理,方便查看核实有关投诉处理的情况.如各业务线投诉数量,时间段内的退订退费情况,客服部内处理情况共享.亦可为市场人员提供实时数据情况查询. 二.业务需求 l  客服账号:信息的添加.修改.和查询. l  管理账号:信息的添加.修改.和查询. 信息的删除,批量导入,查询结果的导出.

web.py简单demo

1.准备工作 安装python/安装web.py/安装sql插件 2.python代码 1 # coding:utf-8 2 import sys 3 default_encoding = 'utf-8' 4 if sys.getdefaultencoding() != default_encoding: 5 reload(sys) 6 sys.setdefaultencoding(default_encoding) 7 import web 8 from web import form 9 i

python后端开发:高并发异步uwsgi+web.py+gevent

为什么用web.py? python的web框架有很多,比如webpy.flask.bottle等,但是为什么我们选了webpy呢?想了好久,未果,硬要给解释,我想可能原因有两个:第一个是兄弟项目组用webpy,被我们组拿来主义,直接用了:第二个是我可能当时不知道有其他框架,因为刚工作,知识面有限.但是不管怎么样,webpy还是好用的,所有API的URL和handler在一个文件中进行映射,可以很方便地查找某个handler是为了哪个API服务的.(webpy的其中一个作者是Aaron Swar

python web.py

web.py 1.安装: wget http://webpy.org/static/web.py-0.37.tar.gz tar xvfz web.py-0.37.tar.gz cd web.py-0.37 sudo python setup.py install 2.需求: 先说下需求,http://10.75.7.237:8080/?ipaddress=10.75.7.29&count=100 ,最终得到这个ip的日志的前100行 3.讲解: #!/usr/bin/python import

mac OS X 配置Python+Web.py+MySQLdb环境

MAC默认支持Python 2.7所以不用安装. 1.安装pip sudo easy_install pip 2.安装Web.py sudo pip install Web.py 3.安装MySQLdb sudo pip search MySQL_python sudo pip install MySQL_python 安装完成后建立软链 sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient

CentOS6.5环境中配置Python + Web.py + Apache部署环境

1. 安装apache:    yum install -y httpd httpd-devel     修改/etc/httpd/conf/httpd.conf中的servername等配置,使http://*:*/ 能正常访问 2. 安装python:    wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz        tar -xzvf Python-2.7.8.tgz    cd Python-2.7.8    

Python开发WebService:REST,web.py,eurasia,Django

Python开发WebService:REST,web.py,eurasia,Django 博客分类: Python PythonRESTWebWebServiceDjango 对于今天的WebService开发,我们至少有两种选择:SOAP/WSDL/UDDI系列的: REST风格架构系列的 !!! 在Bioinformatics(生物信息学)领域,WebService是很重要的一种数据交换技术,未来必将更加重要.目前EBI所提供的WebService就分别有SOAP和REST两种方式的服务,

Python web 框架:web.py

web.py 是一个Python 的web 框架,它简单而且功能强大.web.py 是公开的,无论用于什么用途都是没有限 制的. web.py 安装: pip install web.py 下面开始我们第一个实例hello.py: # _*_ coding:utf-8 _*_ import web urls = ("/.*", "hello") # 指定任何url都指向hello类 app = web.application(urls, globals()) # 绑