Python如何实现分布分析
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章主要介绍了Python如何实现分布分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言分布分析法,一般是根据分析目的,将数据
千家信息网最后更新 2025年02月07日Python如何实现分布分析
这篇文章主要介绍了Python如何实现分布分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
前言
分布分析法,一般是根据分析目的,将数据进行分组,研究各组别分布规律的一种分析方法。数据分组方式有两种:等距或不等距分组。
分布分析在实际的数据分析实践中应用非常广泛,常见的有用户性别分布,用户年龄分布,用户消费分布等等。
分布分析
1.导入相关库包
import pandas as pdimport matplotlib.pyplot as pltimport math
2.数据处理
>>> df = pd.read_csv('UserInfo.csv')>>> df.info()RangeIndex: 1000000 entries, 0 to 999999Data columns (total 4 columns):UserId 1000000 non-null int64CardId 1000000 non-null int64LoginTime 1000000 non-null objectDeviceType 1000000 non-null objectdtypes: int64(2), object(2)memory usage: 30.5+ MB
由于接下来我们需要做年龄分布分析,但是从源数据info()方法可知,并无年龄字段,需要自己生成。
# 查看年龄区间,进行分区>>> df['Age'].max(),df['Age'].min()# (45, 18)>>> bins = [0,18,25,30,35,40,100]>>> labels = ['18岁及以下','19岁到25岁','26岁到30岁','31岁到35岁','36岁到40岁','41岁及以上']>>> df['年龄分层'] = pd.cut(df['Age'],bins, labels = labels)
3.计算年龄
由于数据来源于线下,并未进行数据有效性验证,在进行年龄计算前,先针对数据进行识别,验证。
# 提取出生日期:月和日>>> df[['month','day']] = df['DateofBirth'].str.split('-',expand=True).loc[:,1:2]# 提取小月,查看是否有31号>>> df_small_month = df[df['month'].isin(['02','04','06','09','11'])]# 无效数据,如图所示>>> df_small_month[df_small_month['day']=='31']# 统统删除,均为无效数据>>> df.drop(df_small_month[df_small_month['day']=='31'].index,inplace=True)# 同理,校验2月>>> df_2 = df[df['month']=='02']# 2月份的校验大家可以做的仔细点儿,先判断是否润年再进行删减>>> df_2[df_2['day'].isin(['29','30','31'])]# 统统删除>>> df.drop(df_2[df_2['day'].isin(['29','30','31'])].index,inplace=True)
# 计算年龄# 方法一>>> df['Age'] = df['DateofBirth'].apply(lambda x : math.floor((pd.datetime.now() - pd.to_datetime(x)).days/365))# 方法二>>> df['DateofBirth'].apply(lambda x : pd.datetime.now().year - pd.to_datetime(x).year)
4.年龄分布
# 查看年龄区间,进行分区>>> df['Age'].max(),df['Age'].min()# (45, 18)>>> bins = [0,18,25,30,35,40,100]>>> labels = ['18岁及以下','19岁到25岁','26岁到30岁','31岁到35岁','36岁到40岁','41岁及以上']>>> df['年龄分层'] = pd.cut(df['Age'],bins, labels = labels)
由于该数据记录的是用户登录信息,所以必定有重复数据。而Python如此强大,一个nunique()方法就可以进行去重统计了。
# 查看是否有重复值>>> df.duplicated('UserId').sum() #47681# 数据总条目>>> df.count() #980954
分组后用count()方法虽然也能够计算分布情况,但是仅限于无重复数据的情况。而Python这么无敌,提供了nunique()方法可用于计算含重复值的情况
>> df.groupby('年龄分层')['UserId'].count()年龄分层18岁及以下 2526219岁到25岁 25450226岁到30岁 18175131岁到35岁 18141736岁到40岁 18158941岁及以上 156433Name: UserId, dtype: int64# 通过求和,可知重复数据也被计算进去>>> df.groupby('年龄分层')['UserId'].count().sum()# 980954>>> df.groupby('年龄分层')['UserId'].nunique()年龄分层18岁及以下 2401419岁到25岁 24219926岁到30岁 17283231岁到35岁 17260836岁到40岁 17280441岁及以上 148816Name: UserId, dtype: int64>>> df.groupby('年龄分层')['UserId'].nunique().sum()# 933273 = 980954(总)-47681(重复)# 计算年龄分布>>> result = df.groupby('年龄分层')['UserId'].nunique()/df.groupby('年龄分层')['UserId'].nunique().sum()>>> result# 结果年龄分层18岁及以下 0.02573119岁到25岁 0.25951626岁到30岁 0.18518931岁到35岁 0.18494936岁到40岁 0.18515941岁及以上 0.159456Name: UserId, dtype: float64# 格式化一下>>> result = round(result,4)*100>>> result.map("{:.2f}%".format)年龄分层18岁及以下 2.57岁到25岁 25.95%26岁到30岁 18.52%31岁到35岁 18.49%36岁到40岁 18.52%41岁及以上 15.95%Name: UserId, dtype: object
感谢你能够认真阅读完这篇文章,希望小编分享的"Python如何实现分布分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
年龄
数据
分析
方法
用户
篇文章
分组
情况
区间
等距
验证
强大
有效
接下来
价值
兴趣
分析法
前言
同时
字段
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
组织观看网络安全
郑州文科专科学校网络技术
免费网络安全知识有奖竞答答案
互联网与网络安全与保密协议
达内学网络安全
学软件开发中国哪所学校好
上海兴畅网络技术
浙江诚信网络技术咨询售价
网络技术从哪里学起
线上网络安全公开课活动
云服务器申请软件服务
sap软件开发需要口语很好吗
硬盘内部数据和外部数据库
如果连接到被墙的国外服务器
苏州小程序服务器租用
服务器 压力测试
计算机网络技术开设的课程
四川大学的网络安全是一流学科吗
安卓绘图软件开发
网络安全方向还是图像处理
android需要数据库么
服务器删除的文件怎么恢复
服务器一开机就进去安全模式
数据库原理与DB2应用教程
管理云服务器的工具
当前大学生网络安全
达州市网络安全监察支队
海量数据库一体机
网络安全法考试开展情况
汽车销售系统数据库设计