前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python数据分析实战之分布分析

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

作者头像
用户7466307
发布于 2020-06-17 14:08:28
发布于 2020-06-17 14:08:28
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

前言

分布分析法,一般是根据分析目的,将数据进行分组,研究各组别分布规律的一种分析方法。数据分组方式有两种:等距或不等距分组。

分布分析在实际的数据分析实践中应用非常广泛,常见的有用户性别分布,用户年龄分布,用户消费分布等等。

本文将进行如下知识点讲解:

1.数据类型的修改

2.新字段生成方法

3.数据有效性校验

4.性别与年龄分布

分布分析

1.导入相关库包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import matplotlib.pyplot as plt
import math

2.数据处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df = pd.read_csv('UserInfo.csv')
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
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()方法可知,并无年龄字段,需要自己生成。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 提取出生日期需要先把身份证号码转换成字符串
>>> df['CardId'] = df['CardId'].astype('str')

# 提取出生日期,并生成新字段
>>> df['DateofBirth'] = df.CardId.apply(lambda x : x[6:10]+"-"+x[10:12]+"-"+x[12:14])

# 提取性别,待观察性别分布
>>> df['Gender'] = df['CardId'].map(lambda x : 'Male' if int(x[-2]) % 2 else 'Female')

>>> df.head()

3.计算年龄

由于数据来源于线下,并未进行数据有效性验证,在进行年龄计算前,先针对数据进行识别,验证。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 提取出生日期:月和日
>>> 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)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算年龄
# 方法一
>>> 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.年龄分布

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看年龄区间,进行分区
>>> 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()方法就可以进行去重统计了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看是否有重复值
>>> df.duplicated('UserId').sum()    #47681

# 数据总条目
>>> df.count()    #980954

分组后用count()方法虽然也能够计算分布情况,但是仅限于无重复数据的情况。而Python这么无敌,提供了nunique()方法可用于计算含重复值的情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df.groupby('年龄分层')['UserId'].count()
年龄分层
18岁及以下      25262
19岁到25254502
26岁到30181751
31岁到35181417
36岁到40181589
41岁及以上     156433
Name: UserId, dtype: int64

# 通过求和,可知重复数据也被计算进去
>>> df.groupby('年龄分层')['UserId'].count().sum()
# 980954

>>> df.groupby('年龄分层')['UserId'].nunique()
年龄分层
18岁及以下      24014
19岁到25242199
26岁到30172832
31岁到35172608
36岁到40172804
41岁及以上     148816
Name: UserId, dtype: int64


>>> df.groupby('年龄分层')['UserId'].nunique().sum()
# 933273  = 980954(总)-47681(重复)

# 计算年龄分布
>>> result = df.groupby('年龄分层')['UserId'].nunique()/df.groupby('年龄分层')['UserId'].nunique().sum()
>>> result

# 结果
年龄分层
18岁及以下     0.025731
19岁到250.259516
26岁到300.185189
31岁到350.184949
36岁到400.185159
41岁及以上     0.159456
Name: UserId, dtype: float64


# 格式化一下
>>> result = round(result,4)*100
>>> result.map("{:.2f}%".format)

年龄分层
18岁及以下      2.57%
19岁到2525.95%
26岁到3018.52%
31岁到3518.49%
36岁到4018.52%
41岁及以上     15.95%
Name: UserId, dtype: object

通过以上结果及分布图可以知道,19到25岁年龄段的用户占比最高,为26%。

好了,就讲解到这了~

END!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试test 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hacker曾经知晓的那些事
笔者想到现在年轻的Hacker们对ASCII表和那些奇怪的控制字符越来越陌生,不禁感慨万千。 这些知识原本是年轻Hacker们初出茅庐的第一课。然而世事变迁无常,转眼间这些硬件终端都已经被淘汰,RS-232协议也即将寿终正寝。工具产生文化;当工具过时之后,一些文化共性也随之烟消云散,而我们很难察觉到。 这篇文章是笔者收集的一些关于ASCII以及相关技术的介绍,特别是硬件串口终端、RS-232和调制解调器等技术。昔日,这是些人尽皆知的概念,而如今知者甚少。现在已经很少有人直接使用这些技术了,只有在老古董设备中
CSDN技术头条
2018/02/12
1.1K0
Hacker曾经知晓的那些事
计算机简史:从分布式到中心化的博弈螺旋
当我们在计算机领域提到「去中心化」时,它对于不同的人有不同的寓意。被「去中心化」的到底是什么东西呢?在加密技术行业里,当一个人提到「去中心化」的时候,他可能指的是以下几个东西:
区块链大本营
2019/09/19
7280
计算机简史:从分布式到中心化的博弈螺旋
还原真实的腾讯:从最不被看好,到即时通讯巨头的草根创业史
本文原文由CSDN组织翻译并以原题《腾讯帝国的野蛮生长史》发布于CSDN公众号,英文原文:hackernoon.com/the-chinese-social-network-bb282204af9c,本次收录时有改动。
JackJiang
2019/01/28
1.7K0
唯有霍金拒绝!英国女王70年给这12位大科学家封爵
---- 新智元报道   编辑:拉燕 桃子 【新智元导读】在位70年,伊丽莎白二世不仅是一位高科技爱好者,还将各种荣誉授予了12位科学家。 9月8日,英国在位最长的君主伊丽莎白二世去世,标志着一个时代的落幕。 同时,这也暗示着科技界一个时代的结束。 在位70年,伊丽莎白二世不仅是一位高科技爱好者(第一位高科技女王去世!伊丽莎白二世曾是二战机械手、狂飙路虎的女司机),还将各种荣誉授予了几位科技领袖。 其中就包括,万维网发明者Tim Berners-Lee、时代物理巨人斯蒂芬·霍金、「上帝粒子」发现者P
新智元
2022/09/13
5570
唯有霍金拒绝!英国女王70年给这12位大科学家封爵
Linux/Moose蠕虫:操纵路由器“帮你玩”社交网络
ESET的安全研究员发表了一篇技术报告,报告中详细分析了一个新的蠕虫Linux/Moose。它的攻击对象主要是调制解调器、家用路由器和其他嵌入式计算机,可将这些设备变成一个代理网络,然后创建伪造的社交账号实施欺诈行为。 该恶意程序是由Olivier Bilodeau和Thomas Dupuy发现的,它会感染基于Linux的路由器和其他基于Linux系统的设备。如果它发现有其他的恶意程序和它争夺路由器的有限资源,会将其清除,然后继续寻找下一个感染目标。 Moose蠕虫不会利用路由器上存在的任何漏洞,它
FB客服
2018/02/06
1.2K0
Linux/Moose蠕虫:操纵路由器“帮你玩”社交网络
40年前的「聊天记录」,两种「化石语言」,谷歌关Usenet讨论组引争议
喜欢冲浪的早期网民可能听说过一个叫「Usenet」的讨论组应用。它的功能类似于我们今天用的贴吧、论坛,但使用方法却更接近邮箱客户端。
机器之心
2020/08/11
3870
40年前的「聊天记录」,两种「化石语言」,谷歌关Usenet讨论组引争议
历史上最伟大的12位程序员
所谓程序员,是指那些能够创造、编写计算机程序的人。不论一个人是什么样的程序员,或多或少,他都在为我们这个社会贡献着什么东西。然而,有些程序员的贡献却超过了一个普通人一辈子能奉献的力量。这些程序员是先驱
程序员互动联盟
2018/03/13
1.8K0
历史上最伟大的12位程序员
Web技术的发展 网络发展简介(三)
通信协议是通信的理论基石,计算机、操作系统以及各种网络设备对通信的支持是计算机网络通信的物质基础
noteless
2019/02/25
1.4K0
Web技术的发展  网络发展简介(三)
互联网究竟是怎么诞生的?
这颗卫星的升空,轰动了整个世界,也让当时的美国政府震惊不已。他们认为,在日趋激烈的冷战对抗中,自己已经全面落后于苏联。
鲜枣课堂
2021/03/04
5550
游戏机 —— Dreamcast 的新生 | Linux 中国
1999 年 9 月 9 日,在日本的某个地方,一名间谍潜入了一个大型计算机的机房。她入侵并关闭了安全系统。警卫出来调查,却被她一个漂亮的踢腿打晕了。而这时,计算机系统却突然“活”了起来,所有警报都变红了,显示器上突然出现一个奇怪的漩涡图案。很明显,这个计算机系统正在运行、正在“思考”。间谍被吓跑了。而“思考”中的计算机想要阻止她,试图把她困在大楼里。最终,这名间谍撞破了一扇窗户逃跑了,不过在逃跑前她带走了一个箱子。而在这个箱子里,是一种可以改变一切的新型机器的原型机。
用户8639654
2021/09/01
9960
大学课程 | 计算机网络
2.互连网:网络之间通过路由器互连起来,就构成了一个覆盖范围更大的计算机网络,因此互连网是“网络中的网络” 3.网络:网络把许多计算机连接在一起,而互连网则把许多网络通过路由器连接在一起。与网络相连的计算机称为主机。 4.计算机网络的三种定义:
Justlovesmile
2021/12/14
9430
大学课程 | 计算机网络
[初始计算机]——计算机网络的基本概念和发展史及OSI参考模型
解释1:计算机网络是将分散在不同地理位置的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。
神秘泣男子
2024/06/03
3180
[初始计算机]——计算机网络的基本概念和发展史及OSI参考模型
网安大事记 | 2021年度漏洞利用事件汇总
网络时代,万物互联,人们在享受数字生活带来的福利时,背后隐藏的安全漏洞也正时刻构成威胁,只要技术是一把双刃剑,漏洞就将伴随信息技术的不断发展,与之相对应的,一些网络黑客对漏洞的利用技术也在提升,攻击事件变得越发频繁。
雨笋教育
2022/01/25
2.2K0
网安大事记 | 2021年度漏洞利用事件汇总
Linux再次被爆root提权漏洞,已存在15年之久!
前段时间,sudo被曝不要密码就可进行root提权的漏洞引起一片哗然,众多公司纷纷连夜打补丁来避免损失。FreeBuf也对此进行了相应的报道《不用密码就能获取root权限?sudo被曝新漏洞》。
FB客服
2021/03/25
1K0
纪念晶体管诞生71周年——改变世界30款芯片大阅兵!
1947年12月23日,第一个基于锗半导体的具有放大功能的点接触式晶体管面世,标志着现代半导体产业的诞生和信息时代正式开启。
新智元
2018/12/29
1.1K0
​1970年代-大规模集成芯片(LSI)、ASIC和电子游戏吃豆人的诞生
1970年代发展迅速的十年,BASIC和C高级编程语言在这十年中被广泛采用,大规模集成芯片(LSI)、ASIC等也被广泛应用到电子游戏中,同时经典游戏《吃豆人》和《星际迷航》也在这个时期诞生的,接下来让我们看看这十年的电子游戏和IC的发展。
碎碎思
2021/07/16
1.4K0
USENET简介
普通的互联网用户,可能对USENET知之甚少,或者根本就没有听说过它。但是,这是一种很重要的网络应用,里面有一些真正有趣的东西。 我在网上没有找到比较通俗易懂的USENET中文介绍,于是决定自己写一篇。一方面是为了介绍USENET,另一方面也是想加强自己对互联网的理解和表达。写作过程中,主要参考了wikipedia上关于USENET的条目。 ================== USENET简介 作者:阮一峰 2007.11.6 1. 起源 简单地说,USENET是一个巨大无比的网上讨论组,一般也称为"新闻
ruanyf
2018/04/12
8130
特斯拉CEO马斯克父亲专访:亿万富翁是如何养成的?
摘自:凤凰科技 北京时间7月4日消息,《福布斯》杂志网络版发表客座文章,以采访埃隆·马斯克(Elon Musk)的父亲埃罗尔·马斯克(Errol Musk)的形式,介绍了埃隆的成长经历。文章称,埃隆成
大数据文摘
2018/05/21
1.1K0
会议整理 | 2023年度国内外图像图形学术会议
2023年第二届云计算、计算机视觉和图像处理亚洲会议(3CVIP 2023)将于2023年3月17-19日在中国上海举行。它由国际应用计算学会(ISAC)和工程师技术协会(T.I.E.)赞助。
一点人工一点智能
2023/02/22
2.7K0
会议整理 | 2023年度国内外图像图形学术会议
计算机网络期末考试题库(超级多的那种)「建议收藏」
你好,我是罡罡同学! 代码谱第一页忘掉心上人,最后一页。。。。。。 废话不多说,不管是应对期末考试还是考研基础复习,刷题是必不可少的!!! 大家冲就完了!!!! 记得给 罡罡同学点关注哦! 后期还会更新其他题库的呢!!! 另外还有4套模拟题哦!!!
全栈程序员站长
2022/09/07
11.4K0
计算机网络期末考试题库(超级多的那种)「建议收藏」
推荐阅读
相关推荐
Hacker曾经知晓的那些事
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验