前言

用户量数据分析有几个关键步骤

1.获取用户行为数据(一般就是埋点数据)

2.对所有获取到的数据进行第一遍数据筛选

3.筛查后的数据进行基础的数据整理(主要就是数据的分组聚合等操作)

4.整理完成的数据转换成需要输出的数据格式(输出到文件,数据库等)

第一步

获取用户行为数据

一般用户的行为数据在数据库,比较多的由mysql,mongo,es等

本次就以es为例:

1.初始化es对象

Python学习交流Q群:906715085###
from elasticsearch import Elasticsearch
# 初始化es
es = Elasticsearch(
['10.10.3.13:19200', '10.10.3.15:19200', '10.10.3.41:19200'],  # 连接集群,以列表的形式存放各节点的IP地址
sniff_on_start=True,  # 连接前测试
sniff_on_connection_fail=True,  # 节点无响应时刷新节点
sniff_timeout=60  # 设置超时时间
# 除开链接指定的IP地址外,其他的都可以不设置,使用默认值
)

2.获取es数据:这里写的比较简单,条件只有请求的时间范围,调用es的search方法查询,参数为index:索引名,doc_type:类型名,body:查询语句,这里完全就是dll语句,相比于java来说简单了很多

def get_es_data(startTime, endTime):
query = {       "query": {            "range": {               "requestTime": {                   "gte": startTime,                    "lte": endTime               }            }        },"size": 50000   }all_search = es.search(index="bury_point_log", doc_type="main", body=query)    res = all_search['hits']['hits']    return res

在对这个语句的查询过程中,有一个弊端,数据量过大的时候,size也必须设置的很大,导致查询效率特别低,另外一种方式就是使用聚合语句,把本来要在panda中要做的事情,先在es中做掉一部分

这个查询效率就特别快

def get_es_data_agg():   query = {       "query": {            "range": {               "requestTime": {                   "gte": "2022-05-01 00:00:00",                    "lte": "2022-05-31 23:59:59"                }            }        }, "aggs": {            "appName": {                "terms": {                   "field": "appName",                   "size": 10                }, "aggs": {                    "user": {                        "terms": {                            "field": "userId",                            "size": 100000                        }                    }                }            }        }    }    all_search = es.search(index="bury_point_log", doc_type="main", body=query)

第二步

对数据进行筛选,把获取到的数据转成成DataFrame,利于后续进行分组聚合

Python学习交流Q群:906715085###
def show_pd_message(items):   res = []    for item in items:        content = item['_source']        appTypeName = ''       if content.get('appName') == '1':            appTypeName = '家长端'        elif content.get('appName') == '2':            appTypeName = '教师端'        elif content.get('appName') == '3':            appTypeName = '后台'        content_filter = {'appName': appTypeName, 'clientIp': content['clientIp'], 'module': content['requestRemark'],                         'requestTime': content['requestTime'], 'userId': content['userId']}        res.append(content_filter)indexs = [(i + 1) for i in range(len(res))]    columns = ['appName', 'clientIp', 'module', 'requestTime', 'userId']pd_res = pd.DataFrame(res, columns=columns, index=indexs)    return pd_res

这里就是把需要的字段筛选出来,配合上colums和index,转换成panda对象。

第三步

数据整理

以对每个客户端用户数量进行统计为例,先对各客户端以及用户Id进行分组聚合,出来的对象再转换成需要的字典或者列表数据

def get_user_num(pd_res):
# 各端使用人数
# print('''    #
------------------各客户端数据使用情况(人次)---------------------    #             ''')
result1 = pd_res.groupby(['appName', 'userId'], as_index=False).agg({'module': 'size'})
res = result1.to_dict('records')   # print(result1)
res1 = {}
for item in res:
if item['appName'] in res1.keys():
if item['userId'] != 'null':
origin_value = list(res1[item['appName']])
origin_value.append({item['userId']: item['module']})
res1.update({item['appName']: origin_value})
else:
res1.update({item['appName']: [{item['userId']: item['module']}]})# print(res1)   return res1

第四步

数据输出

一般数据出来后,就会输出到数据库或者文件中,这里简单点就直接控制台打印出来

def user_num_data_anylsis(user_all_res):
family_user = ''   teacher_user = ''   for item in user_all_res:        if '家长端' in item.keys():            family_user_list = list(item['家长端'])
family_user = family_user + str(len(family_user_list)) + ','
else:
family_user = family_user + '0,'if '教师端' in item.keys():
teacher_user_list = list(item['教师端'])           teacher_user = teacher_user + str(len(teacher_user_list)) + ','        else:           teacher_user = teacher_user + '0,'print(last_month_next_start.split('-')[1] + "月:\n家长端人数" + family_user.split(',')[0] + "次\n教师端人数" +          teacher_user.split(',')[0] + "人")    print(last_month_start.split('-')[1] + "月:\n家长端人数" + family_user.split(',')[1] + "次\n教师端人数" +          teacher_user.split(',')[1] + "人")   # 环比    huanbi = ((int)(family_user.split(',')[1]) - (int)(family_user.split(',')[0])) / (int)(        family_user.split(',')[0]) * 100    print('家长端人数:' + last_month_start.split('-')[1] + '月环比' + str(round(huanbi, 2)) + '%')    huanbi1 = ((int)(teacher_user.split(',')[1]) - (int)(teacher_user.split(',')[0])) / (int)(        teacher_user.split(',')[0]) * 100    print('教师端人数:' + last_month_start.split('-')[1] + '月环比' + str(round(huanbi1, 2)) + '%')

最后的结果:


这一章的知识到这里就结束了,整体来说还是非常简单的,闲的无聊的时候拿来练手真的很nice,喜欢的小伙伴记得点赞收藏。

【Python】数据分析——用户行为相关推荐

  1. python数据分析:用户消费情况数据分析

    本次分析数据介绍: 数据为某奶茶店2018年1月-2019年6月的销售数据,共计69,659项数据,用户共计23,570名: 数据集共4个字段: user_id: 用户id order_id: 购买日 ...

  2. python数据分析可视化实例_Python数据分析及可视化实例之基于Kmean分析RFM进行用户关怀...

    系列文章总目录:Python数据分析及可视化实例目录 数据集下载 Python数据分析及可视化实例之全国各城市房价分析(含数据采集) Python数据分析及可视化实例之帝都房价预测 Python数据分 ...

  3. Python数据分析之用户留存

    Python数据分析之用户留存 前言 概览 数据预处理和数据集探究 规范列名 删除多余的列 dummy化类别型特征 探究通话时间与费用的关系 探究流失率 添加平均通话时长 可视化缺失值分布 训练模型 ...

  4. Python数据分析高薪实战第十二天 网络服务用户流失预测分析和国产电视剧评分预测分析

    29 综合实战:网络服务用户流失预测与分析 绝大多数互联网公司都面临一个非常重要的问题:用户流失问题.随着互联网和移动互联网的充分发展,发展新用户(也就是一般所说的拉新)的成本越来越高,往往要几块或者 ...

  5. python数据分析实战之用户分析及RFM模型分析

    理论基础知识可以看我之前的博客: 1.python之Numpy知识点详细总结 2.python最最最重要的数据分析工具之pandas 3.pandas之表连接与高级查询 也可以进入我的专栏:欢迎订阅哦 ...

  6. 作业3(大作业):python数据分析与应用大作业,对用户用电量数据进行数据处理,包括数据转置、异常数据识别和处理、统计基本统计量(包括峰度、偏度)、按日/周(求和)差分、5%分位数等

    Python数据分析与应用大作业 使用学习过的知识(Numpy数值分析基础.Matplotlib数据可视化基础.Pandas统计分析基础),对data.csv用户用户用电量数据进行相关处理,其中数据中 ...

  7. python数据分析及可视化(十五)数据分析可视化实战篇(抖音用户数据分析、二手房数据分析)

    python数据分析的实战篇,围绕实例的数据展开分析,通过数据操作案例来了解数据分析中的频繁用到的知识内容. 抖音用户数据分析 1.理解数据 数据字段含义 了解数据内容,确保数据来源是正常的,安全合法 ...

  8. 《Python数据分析与挖掘实战》一3.1 数据质量分析

    本节书摘来自华章出版社<Python数据分析与挖掘实战>一书中的第3章,第3.1节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  9. Python数据分析可以应用到哪些领域

    随着大数据的应用越来越广泛,应用的行业也越来越多,我们每天都可以看到一些关于数据分析的新鲜应用,从而帮助人们获取到有价值的信息.例如,网购时经常发现电商平台向我们推荐商品,往往这类商品都是我们最近浏览 ...

  10. 靠Python数据分析已赚10w的本科生,附赠学习资料

    今天小编给大家推荐一个Python终身学习者:老表,他是开源学习组织Datawhale终身成员,有一年半的Python编程学习经验,热爱爬虫与数据分析,掌握了Python Web开发框架 Flask, ...

最新文章

  1. python join split
  2. 手把手教你用线性回归预测二手房房价
  3. nginx域名配置虚拟主机
  4. mysql replication principle--转
  5. Matlab之switch-case语句
  6. springboot中如何获取yml配置文件中的配置信息
  7. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170406
  8. boost::geometry::tag用法的测试程序
  9. 我的博客网站开发6——博文关键字搜索
  10. 设计模式(五)--工厂模式汇总
  11. uploadify动态改变参数
  12. MaxCompute,基于Serverless的高可用大数据服务 1
  13. /proc/cpuinfo文件分析(查看CPU信息)
  14. Objective-C学习准备__C语言6
  15. Servlet chapter 2
  16. 解决Windows桌面部分快捷方式图标变为空白的问题
  17. 定期360评估系统优于年度绩效考核
  18. oa系统客户端服务器ip端口,致远oa客户端服务器ip
  19. 微信公众号小程序实战开发vue3+nodejs+koa2+mysql+nginx阿里云部署教程
  20. 常用统计量及其常见分布

热门文章

  1. Win10 C盘爆红找出edb文件146G,删除后又出现如何解决
  2. C语言实现一个走迷宫小游戏(深度优先算法)
  3. testlink的使用
  4. java实现线程安全的三种方式
  5. 企业数字化转型的核心—大数据分析平台
  6. 正兴证券损失通知书:Rosen Law Firm宣布针对中国正兴车轮集团有限公司提起证券集体诉讼和参加集体诉讼的重要截止日期
  7. 迷信自身专业者,守株待兔尔
  8. 解决gerrit merge conflict
  9. [转]AP,mAP计算
  10. 一个人,不管是富是穷,都可以富养自己