Python如何实现分布分析
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍了Python如何实现分布分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言分布分析法,一般是根据分析目的,将数据
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
互联网网络安全法
数据库主键标记
惠州旅游软件开发机构
服务器如何禁止
网络安全应急知识宣传
家用小型服务器配置
sql如何批量删除数据库
db2数据库通配符
肠道菌群的数据库生信挖掘
转服后原服务器
山西常用软件开发价格大全
乌克兰网络安全断电
天朗气清服务器
信息网络安全期刊 的模板
数据库讲坛
药店医保网络安全管理制度最新
计算机应用及网络技术好就业吗
安徽网新网络技术公司
mysql数据库与表
网络安全课护苗
我的世界电脑开服务器
长春先进网络技术服务质量推荐
4大安全网络安全
河北ios软件开发需求
软件开发与应用软件开发
ema药物数据库
多维内存数据库产品
数据库log文件查看
南京网络技术外包
访问DFS文件服务器慢