如何把网站做跳转浏览器链接地址,正规网页设计培训怎么样,成都网站建设排行榜,啥前端框架可以做网站首页前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者#xff1a;严小样儿
分布分析法#xff0c;一般是根据分析目的#xff0c;将数据进行分组#xff0c;研究各组别分布规律的一种分析方法。…前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者严小样儿
分布分析法一般是根据分析目的将数据进行分组研究各组别分布规律的一种分析方法。数据分组方式有两种等距或不等距分组。
分布分析在实际的数据分析实践中应用非常广泛常见的有用户性别分布用户年龄分布用户消费分布等等。本文将进行如下知识点讲解
1.数据类型的修改
2.新字段生成方法
3.数据有效性校验
4.性别与年龄分布
分布分析
1.导入相关库包
import pandas as pd
import matplotlib.pyplot as plt
import math
2.数据处理df pd.read_csv(UserInfo.csv)df.info()RangeIndex: 1000000 entries, 0 to 999999
Data columns (total 4 columns):
UserId 1000000 non-null int64
CardId 1000000 non-null int64
LoginTime 1000000 non-null object
DeviceType 1000000 non-null object
dtypes: 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(-,expandTrue).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,inplaceTrue)
# 同理校验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,inplaceTrue)# 计算年龄
# 方法一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岁及以下 25262
19岁到25岁 254502
26岁到30岁 181751
31岁到35岁 181417
36岁到40岁 181589
41岁及以上 156433
Name: UserId, dtype: int64
# 通过求和可知重复数据也被计算进去df.groupby(年龄分层)[UserId].count().sum()
# 980954df.groupby(年龄分层)[UserId].nunique()
年龄分层
18岁及以下 24014
19岁到25岁 242199
26岁到30岁 172832
31岁到35岁 172608
36岁到40岁 172804
41岁及以上 148816
Name: UserId, dtype: int64df.groupby(年龄分层)[UserId].nunique().sum()
# 933273 980954总-47681重复
# 计算年龄分布result df.groupby(年龄分层)[UserId].nunique()/df.groupby(年龄分层)[UserId].nunique().sum()result
# 结果
年龄分层
18岁及以下 0.025731
19岁到25岁 0.259516
26岁到30岁 0.185189
31岁到35岁 0.184949
36岁到40岁 0.185159
41岁及以上 0.159456
Name: UserId, dtype: float64
# 格式化一下result round(result,4)*100result.map({:.2f}%.format)
年龄分层
18岁及以下 2.57%
19岁到25岁 25.95%
26岁到30岁 18.52%
31岁到35岁 18.49%
36岁到40岁 18.52%
41岁及以上 15.95%
Name: UserId, dtype: object通过以上结果及分布图可以知道19到25岁年龄段的用户占比最高为26%。