千家信息网

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)

Python数据分析实战之分布分析

# 计算年龄# 方法一>>> 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应用教程 管理云服务器的工具 当前大学生网络安全 达州市网络安全监察支队 海量数据库一体机 网络安全法考试开展情况 汽车销售系统数据库设计
0