Python如何实现分布分析
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了Python如何实现分布分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言分布分析法,一般是根据分析目的,将数据
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
互联网科技工作委员会主任
互联网科技与金融科技
无线互联网科技
碳银互联网科技有限公司
掌上梦互联网科技
互联网科技美容
互联网金融和金融科技
博兴的互联网电子科技公司
互联网科技博主是什么意思
重庆威客帮互联网科技
湖南一路畅行互联网科技
宜昌元轩互联网科技有限公司
杭州壁岐互联网科技有限公司
苏州铭阳互联网科技有限公司
明优互联网科技有限公司
互联网方面的科技前沿
山东子淼互联网科技有限公司
2021互联网科技公司排名
互联网科技的前景
宁波允成互联网科技有限公司
互联网与科技
深圳九邦互联网科技有限公司
互联网金融监管科技数据
疫情对互联网科技公司影响
互联网科技卖菜
高科技与互联网
为想互联网科技
成都狮子座互联网科技
互联网金融科技名词解释
启辰互联网科技