python学生分布_Python数据分析实战之分布分析

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:严小样儿

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

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

3ba49e4f9a034c5ca3eac97ae1675c04?from=pc

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

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)

ced1c6f1c3e344bfa99b56db7d921b19?from=pc

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)

11ef58db854a44658bdbbf1233c2701f?from=pc

# 计算年龄

# 方法一

>>> 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

9df486d8b571425ba38994f7b906379d?from=pc

分组后用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()

# 980954

>>> df.groupby('年龄分层')['UserId'].nunique()

年龄分层

18岁及以下 24014

19岁到25岁 242199

26岁到30岁 172832

31岁到35岁 172608

36岁到40岁 172804

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岁到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)*100

>>> result.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

5d8b6e0f59d34dcfa8ef81b839a07520?from=pc

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hls fifo_HLS优化方法DATAFLOW你用了吗

上期内容:异步跨时钟域电路该怎么约束DATAFLOW作为HLS的一种优化方法,对于改善吞吐率(Throughput)、降低延迟(Latency)非常有效。DATAFLOW的作用对象DATAFLOW可以作用于函数,也可以作用于for循环。如下图所示(图片来源Figure62, Figure 63, u…

在Hibernate,EhCache,Quartz,DBCP和Spring中启用JMX

继续使用JMX的过程(请参阅: 人类JMX ),我们将学习如何在一些流行的框架中启用JMX支持(通常是统计和监视功能)。 这些信息大部分都可以在项目的主页上找到,但是我决定在收集这些信息的同时&#…

400多万微信用户如何“变现”?凯叔说了五大秘诀与教训

凯叔,原名王凯,自媒体“凯叔讲故事”创始人,近日在狮享家班委会上做了分享,全是实实在在的实验性方法论。以下是王凯的分享内容,整理 / 垅青 我讲的主题叫“基于内容的MVP探索”,MVP是什么东西?…

使用模拟的单元测试–测试技术5

我的最后一个博客是有关测试代码方法的一系列博客中的第四篇,演示了如何创建使用存根对象隔离测试对象的单元测试。 今天的博客探讨了有时被视为对立的技术:使用模拟对象进行单元测试。 同样,我使用了从数据库检索地址的简单方案:…

多线程中的volatile和伪共享

伪共享 false sharing,顾名思义,“伪共享”就是“其实不是共享”。那什么是“共享”?多CPU同时访问同一块内存区域就是“共享”,就会产生冲突,需要控制协议来协调访问。会引起“共享”的最小内存区域大小就是一个cache…

C语言代码规范(一)缩进与换行

一、缩进的空格数为4个。最好配置代码编辑器将TAB键设置为空格替换&#xff0c;避免出现另一个编辑器打开时格式变乱的情况。 例如Notepad设置 KEIL设置 二、“{” 和 “}”各自独占一行。 不规范例子&#xff1a; for(i 0; i < student_num; i) { if((score[i] > 0…

armv7 cortex a系列编程手册_AWTK能为现代GUI编程带来何种改变?

AWTK是一个伸缩性极强的嵌入式图形框架&#xff0c;它的诞生会给GUI编程研发工程师带来哪些改变&#xff1f;AWTK是一个伸缩性极强的嵌入式图形框架&#xff0c;可在Cortex-M3这样低端的单片机上运行&#xff0c;也可以在Cortex-A7/A8/A9等处理器&#xff0c;甚至DSP以及X86处理…

为什么要编写单元测试–测试技巧8

我对最近在“您应该测试什么”上的博客有很多反应&#xff0c;有些人出于各种原因同意我的想法&#xff0c;另一些人则认为建议某些类可能不需要单元测试是非常危险的。 已经处理了什么测试&#xff0c;今天的博客涉及为什么要编写单元测试&#xff0c;而今天的示例代码是基于一…

c++ 多重背包状态转移方程_动态规划入门——详解经典问题零一背包

本文始发于个人公众号&#xff1a;TechFlow&#xff0c;原创不易&#xff0c;求个关注今天是周三算法与数据结构专题的第12篇文章&#xff0c;动态规划之零一背包问题。在之前的文章当中&#xff0c;我们一起探讨了二分、贪心、排序和搜索算法&#xff0c;今天我们来看另一个非…

python定义一个圆_Python-矩形和圆形

原博文 2019-11-11 12:34 − Exercise 15.1. 定义一个叫做Circle 类&#xff0c;类的属性是圆心 (center) 和半径 (radius) , 其中&#xff0c;圆心 (center) 是一个 Point 类&#xff0c;而半径 (radius) 是一个数字。 实例化一个圆心 (center) 为 (150, 100) &#xff0c;半…

STM32F1笔记(一)GPIO输出

GPIO&#xff1a;General Purpose Input Output &#xff08;通用输入/输出&#xff09;。 GPIO最经典应用&#xff1a;LED灯。 先看电路。声明&#xff1a;参考正点原子战舰开发板。 与LED串联的电阻称为限流电阻。 限流电阻计算公式&#xff1a;R(U-LED压降)/20ma。 U为LE…

dataframe转化为array_【Python专栏】12 种高效 Numpy 和 Pandas 函数为你加速分析

来源&#xff1a;机器之心编译&#xff1a;Jamin、杜伟、张倩我们都知道&#xff0c;Numpy 是 Python 环境下的扩展程序库&#xff0c;支持大量的维度数组和矩阵运算&#xff1b;Pandas 也是 Python 环境下的数据操作和分析软件包&#xff0c;以及强大的数据分析库。二者在日常…

具有GlassFish和一致性的高性能JPA –第1部分

您以前听说过连贯性吗&#xff1f; 大概是。 它是那些著名的内存网格解决方案之一&#xff0c;该解决方案承诺了超快的数据访问速度和对经常使用的数据的无限空间。 一些众所周知的竞争对手是Infinispan &#xff0c; Memcached和Terracotta Ehcache 。 它们都很棒&#xff0c;…

boost原理与sklearn源码_机器学习sklearn系列之决策树

一、 Sklearn库 Scikit learn 也简称 sklearn, 自2007年发布以来&#xff0c;scikit-learn已经成为Python重要的机器学习库了。支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。sklearn是Scipy的扩展&#xff0c;建立在NumPy和…

STM32F1笔记(二)GPIO输入

STM32 GPIO输入的经典应用是按键。 先看电路。声明&#xff1a;参考正点原子战舰开发板。 在这里可以看到&#xff0c;KEY_UP按键是高电平有效的&#xff0c;即当按下该按键时&#xff0c;GPIO读到高电平。 KEY0/1/2是低电平有效的&#xff0c;即当按下该按键时&#xff0c;G…

STM32F1笔记(三)UART/USART

UART&#xff1a;Universal Asynchronous Receiver/Transmitter&#xff08;通用异步收/发器&#xff09; USART&#xff1a;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff08;通用同步/异步串行收/发器&#xff09; 从命名即可看出USART就是UART的基础上…

python安装界面翻译_python环境搭建

如果想要运行python需要有解释器和编辑器。 什么是解释器 解释器我们可以把它理解成翻译官&#xff0c;它是将我们写的python代码翻译成计算机能够懂得机器语言。 然后计算机收到解释器的命令来干活&#xff0c;最终再将结果反馈在解释器中。 解释器推荐使用anaconda3 什么是an…

进阶篇-用户界面:4.Android中常用组件

1.下拉菜单 在Web开发中&#xff0c;HTML提供了下拉列表的实现&#xff0c;就是使用<select>元素实现一个下拉列表&#xff0c;在其中每个下拉列表项使用<option>表示即可。这是在Web开发中一个必不可少的交互性组件&#xff0c;而在Android中的对应实现就是Spinne…

http的“无连接”指的是_http协议无状态中的 quot;状态quot; 到底指的是什么?...

引子&#xff1a;最近在好好了解http&#xff0c;发现对介绍http的第一句话【http协议是无状态的&#xff0c;无连接的】就无法理解了&#xff1a;无状态的【状态】到底指的是什么&#xff1f;&#xff01;找了很多资料不仅没有发现有一针见血正面回答这个问题的&#xff0c;而…

个人日志-7.4

姓名 刘鑫 时间 2016.7.4 学习内容 完善需求分析报告。撰写数据库设计说明书。初步安排计划概要设计说明书。调整项目开发计划说明书。 所遇问题 无 解决方案 无 转载于:https://www.cnblogs.com/liuxin13070013/p/5641967.html