python+matplotlib+web.py
最近看了厦门大学数据库实验室林子雨老师的《大数据课程实验案例:网站用户行为分析》,可视化这块是用的R语言,我决定用Python来实现一下。
参考文献 http://dblab.xmu.edu.cn/post/7499/
数据来源 http://pan.baidu.com/s/1nuOSo7B
# -*- coding: utf-8 -*-
"""
Created on Wed Apr 19 17:26:53 2017 @author: touristlee TO:Don't worry,be happy!
""" import pandas as pd
import numpy as np
import matplotlib.pylab as plt
import matplotlib.patches as mpatches #数据下载地址https://pan.baidu.com/s/1nuOSo7B
#本案例采用的数据集为user.zip,包含了一个大规模数据集raw_user.csv(包含2000万条记录),
#和一个小数据集small_user.csv(只包含30万条记录)。
#小数据集small_user.csv是从大规模数据集raw_user.csv中抽取的一小部分数据。
#之所以抽取出一少部分记录单独构成一个小数据集,是因为,在第一遍跑通整个实验流程时,
#会遇到各种错误,各种问题,先用小数据集测试,可以大量节约程序运行时间。
#等到第一次完整实验流程都顺利跑通以后,就可以最后用大规模数据集进行最后的测试。
#user_id(用户id)
#item_id(商品id)
#behaviour_type(包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4)
#user_geohash(用户地理位置哈希值,有些记录中没有这个字段值,所以后面我们做数据预处理时把这个字段全部删除,用随机生成的省份代替)
#item_category(商品分类)
#time(该记录产生时间) #读取数据
df = pd.read_csv('small_user.csv',encoding='utf-8')
#随机生成一个省份列表
def get_province(x):
youlist = []
for i in x:
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'澳门']
youlist.append(maplist[i])
return youlist
#切割字符串
def format_time(x):
return str(x).split(' ')[0]
#格式化
df = df[['user_id','item_id','behavior_type','item_category','time']]
df['province'] = get_province(np.random.randint(0,33,len(df)))
df['time'] = df['time'].map(format_time)
df.columns=['uid','itemid','behavior','itemcagegory','time','province']
df['time']=df['time'].astype('datetime64')
print df.dtypes #查询
#查询有多少条数据
print df.count()
#查询有多少用户
print df.drop_duplicates(['uid']).count()
#查询有多少不重复的数据
print df.drop_duplicates().count() #条件查询
#查询2014年12月10日到2014年12月13日有多少人浏览了商品
print df[('2014-12-13'>=df['time']) & (df['time'] >= '2014-12-10') & (df['behavior']==1)].head()
#每天网站卖出去的商品的个数
df2=df.drop_duplicates()
print df2[df2['behavior']==4].groupby('time').itemcagegory.count()
#取给定时间和给定地点,求当天发出到该地点的货物的数量
print df[(df['time']=='2014-12-12') & (df['province']==u'山西') & (df['behavior']==4)].itemcagegory.count() #根据用户行为分析
#查询一件商品在某天的购买比例或浏览比例
print df[df['time']=='2014-12-11'].itemcagegory.count()
print df[(df['time']=='2014-12-11') & (df['behavior']==4)].itemcagegory.count()
print float(df[(df['time']=='2014-12-11') & (df['behavior']==4)].itemcagegory.count())/float(df[df['time']=='2014-12-11'].itemcagegory.count()) ##查询某个用户在某一天点击网站占该天所有点击行为的比例(点击行为包括浏览,加入购物车,收藏,购买)
print df[(df['uid']==10001082) & (df['time']=='2014-12-12')].behavior.count()
print float(df[(df['uid']==10001082) & (df['time']=='2014-12-12')].behavior.count())/float(df[df['time']=='2014-12-12'].behavior.count()) #用户实时查询分析
#各个地区浏览网站的访问次数 df2=df[df['behavior']==1]
df2=df2.drop_duplicates('uid')
print df2.groupby('province').uid.count() #可视化
#分析各省份消费者对商品的行为(浏览)
fig=plt.figure(figsize=(8,4))
ax1=fig.add_subplot(111)
plt.title(u'behavior by province')
plt.xlabel('province')
plt.ylabel('count')
df2=df[df['behavior']==1]
df2=df2.groupby('province').uid.count()
df2.plot(kind='bar')
#分析消费者对商品的行为 df3=df[['behavior']]
df3=df3.groupby('behavior').behavior.count()
fig2=plt.figure(figsize=(8,4))
ax2=fig2.add_subplot(111)
plt.title(u'behavior')
plt.xlabel('behavior')
plt.ylabel('count')
df3.plot(kind='bar') ##分析被购买最多的商品是哪一类 TOP10
df4=df[['behavior','itemcagegory']]
df4=df4[df4['behavior']==4]
df4=df4.groupby('itemcagegory').itemcagegory.count()
df5=df4.sort_values(ascending=False).head(10)
fig3=plt.figure(figsize=(8,4))
ax3=fig3.add_subplot(1,1,1)
colors=['red','blue','yellow','green','white','black','magenta','cyan','yellowgreen','lightcoral']
ax3.scatter(df5.index,df5.values,c=colors)
plt.xlabel('var')
plt.ylabel('freq')
plt.title('TOP10 category')
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.)
plt.show() ##分析每年的那个月份购买商品的量最多
#先增加一列 月份
df6=df[df['behavior']==4]
df7=df6.copy()
df7['month']=np.array([i.month for i in df7['time']])
df7=df7[['behavior','month']]
df7=df7.groupby('month').count()
df7.plot(kind='bar') ##分析每年的每个月份的行为习惯
df7=df.copy()
df7['month']=np.array([i.month for i in df7['time']])
df7=df7[['behavior','month']]
tmp=df7.groupby(['month','behavior']).behavior.count()
tmp.plot(kind='bar',color=['red','blue','green','yellow']) #分析各省份消费者对商品的行为(收藏)
#分析国内哪个省份的消费者最有购买欲望 即收藏
df8=df[df['behavior']==3]
df8=df8.drop_duplicates('uid')
tmp8=df8.groupby('province').uid.count()
fig8=plt.figure(figsize=(8,4))
ax8=fig.add_subplot(111)
plt.title(u'behavior by province')
plt.xlabel('province')
plt.ylabel('count')
tmp8.plot(kind='bar')
最后一个分析那个省份的消费者最有购买欲望的,原文用的是R语言的地图,matplotlib画地图很麻烦。
我想到的办法是用第三方模块来替代。首先想到的是百度的echarts了,这可以说是百度的良心产品了。
使用这个可以用Django或者web.py,这里我选择最简单的web.py。
代码我上传到了 https://github.com/touristlee/webpy.git
python+matplotlib+web.py的更多相关文章
- 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块
详细解读Python的web.py框架下的application.py模块 这篇文章主要介绍了Python的web.py框架下的application.py模块,作者深入分析了web.py的源码, ...
- 【Python】web.py初识学习
简单而直接的Python web 框架:web.py 2016年11月03日 14:09:08 擒贼先擒王 阅读数:35157更多 个人分类: Web From:https://www.oschi ...
- python使用web.py开发httpserver,解决post请求跨域问题
使用web.py做http server开发时,遇到postman能够正常请求到数据,但是浏览器无法请求到数据,查原因之后发现是跨域请求的问题. 跨域请求,就是在浏览器窗口中,和某个服务端通过某个 “ ...
- 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.安装MySQLd ...
- Python Web.py
安装Web.py root@bt:~# sudo pip install web.py Downloading/unpacking web.py Downloading web.py-0.37.tar ...
- python web.py安装使用
官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们快速了解python语法(遇到看不懂的语法就去google),另一方面可以学习到python高级特性的使用 ...
- python学习笔记(十 四)、web.py
使用web.py 通过python进行网页的编写,下面我们来简单了解一哈web.py 的使用 1 url处理 使用特定的url结构来解析我们发送的请求.如下面所示: urls = ( '/login' ...
- python web.py实现简单的get和post请求
使用web.py框架,实现简单的get和post请求: py文件名:mytest.py import web urls = ( '/', 'hello' ) app = web.application ...
- python web py安装与简单使用
web.py是一个轻量级的python web框架,简单而且功能强大.相对flask和Django,web.py更适合初学者来学习和了解web开发的基础知识. 安装: pip install we ...
随机推荐
- “织梦”CMS注入高危漏洞情况
"织梦"CMS注入高危漏洞情况 作者: 时间:2014-04-17 "织梦"CMS是由上海卓卓网络科技有限公司研发的一款网站建站系统软件,又称&quo ...
- 正则表达式入门案例C#
---恢复内容开始--- 在网上百度了好多关于正则表达式的,不过好多都是关于语法的,没有一个具体的案例,有点让人难以入门,毕竟我还是喜欢由具体到抽象的认识.所以我就在这先提供了一个入门小案例(学了了6 ...
- 关于PHP高并发抢购系统设计
内容并发抢购系统注意事项高并发架构设计描述程序端核心代码实现订单流程mysql 端并发解决方案注意事项(1)高并发环境下,对于服务器cup.内存.网络宽带使用率会瞬间暴涨,需要注意对同服务器上其他应用 ...
- JavaScript中Object的总结
基于原型继承,动态对象扩展,闭包,JavaScript已经成为当今世界上最灵活和富有表现力的编程语言之一. 这里有一个很重要的概念需要特别指出:在JavaScript中,包括所有的函数,数组,键值对和 ...
- DOUAudioStreamer 中kqueue的应用
DOUAudioStreamer是一个基于Core Audio的流式音频播放器,其中的DOUAudioEventLoop通过kqueue来控制音频的各种状态. kqueue简介(详情请看官方manua ...
- Windows系统如何使用sqlmap
使用方法:需要安装python,不能安装最新版本的python3.2.2只能安装2.6-3.0这些版本,包括2.6,3.0 这里,我提供一个Python的安装包.点击这里下载→ Python2.7 然 ...
- 关于sqlmap的一些命令
Options(选项):--version 显示程序的版本号并退出-h, --help 显示此帮助消息并退出-v VERBOSE 详细级别:0-6(默认为1)Target(目标):以下至少需要设置其中 ...
- C语言中指针和数组的区别
看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h> int m ...
- Spring定时任务实例
一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是出了名的任务调度框架,它可以与J2SE和J2EE应用程序相结合 ...
- ASP.NET MVC5(五):身份验证、授权
使用Authorize特性进行身份验证 通常情况下,应用程序都是要求用户登录系统之后才能访问某些特定的部分.在ASP.NET MVC中,可以通过使用Authorize特性来实现,甚至可以对整个应用程序 ...