◆ ◆ ◆  ◆ ◆

前言

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

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

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

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()
<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()方法可知,并无年龄字段,需要自己生成。

# 提取出生日期需要先把身份证号码转换成字符串
>>> 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.计算年龄

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

# 提取出生日期:月和日
>>> 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岁及以下      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

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

好了,就讲解到这了~END!

觉得不错的,记得点在看,如果可以转发一下朋友圈就更好了!

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群请扫码进群(如果是博士或者准备读博士请说明):

【Python基础】Python数据分析实战之分布分析相关推荐

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

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:严小样儿 分布分析法,一般是根据分析目的,将数据进行分组,研究各组别 ...

  2. Python 爬虫和数据分析实战

    课程介绍 本课程以一个小项目带你快速上手 Python 爬虫和数据分析,主要分 3 部分: 第 1 部分是 Python 爬虫,主要使用 Urllib 3 和 BeautifulSoup 抓取天猫商城 ...

  3. python深度神经网络算法_02.深度神经网络算法之Python基础与数据分析

    资源内容: 02.深度神经网络算法之Python基础与数据分析|____2016最新python基础篇视频教程22课|____Python学习手册(第4版).pdf|____Python程序入门与进阶 ...

  4. Python基础-Python基础使用

    Python基础-Python基础使用 1.Python解释器 在Python文件的开头加入以下代码就制定了解释器. #!/usr/bin/env python # _*_ coding:utf-8 ...

  5. python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值

    python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...

  6. 大厂技术文档:Python基础+爬虫+数据分析+面试经精选

    有段时间没跟各位粉丝分享编程资源福利了,看了下自己的资料夹,就剩下我认为比较好的Python学习资料了.相信这套资料可以对你进阶高级工程师有帮助! 为什么只有Python这么火,能有机会成为通用语言? ...

  7. 大厂技术文档:Python 基础+爬虫+数据分析+面试经精选

    有段时间没跟各位粉丝分享编程资源福利了,看了下自己的资料夹,就剩下我认为比较好的Python学习资料了.相信这套资料可以对你进阶高级工程师有帮助! 为什么只有Python这么火,能有机会成为通用语言? ...

  8. 基于python的大数据分析实战学习笔记-pandas(数据分析包)

    pandas是什么呢?可能大家会看到各种解释,其实ta就是一个数据分析包啊.....没啥可解释的 pandas中常见的数据结构有三种,Series(一维数组,也叫序列),DataFrame(二维表格, ...

  9. Python 基础 — Python 简介

    前言 未来是数据的世界,而 python 是一门可以高效简洁处理数据的语言,博主打算花一些时间完成 python 学习的从 0 到 1.以此相关系列博客作为一个记录. 1. Python 简介 Pyt ...

最新文章

  1. EOS 共识机制 (1)DPOS共识介绍
  2. springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA
  3. MIT陈刚教授案件新进展,律师反诉美检察官利用不实信息制造舆情、干扰司法公正...
  4. 如何管理QQ浏览器的扩展工具 QQ浏览器扩展工具的管理方法
  5. 访问VirtualBox创建的CentOS虚拟主机里面的WEB服务
  6. 动画 - 收藏集 - 掘金
  7. 活着,总有你看不惯的人,也有看不惯你的人.
  8. 《教孩子学编程(Python语言版)》——1.3 运行Python程序
  9. [pion]测试你的TURN服务器
  10. SQLite Expert查看SQLite数据库文件没有数据的问题
  11. BugKu CTF(杂项篇MISC)--Pokergame
  12. MAC版photoshop CS6安装与破解
  13. java的web开发之旅——第1站html
  14. React 调用手机,电脑摄像头扫描识别二维码
  15. flash ActionScript快速入门(全部章节)
  16. python实现对输入日期计算日期为当年第几天
  17. 【优秀的下载工具】Leech for Mac 3.1.4
  18. Vue 生成海报的插件vue-canvas-poster
  19. 计算机专业数学专业考研学校排名,数学专业考研院校推荐
  20. MATLAB,关于SOLVE函数报错的问题

热门文章

  1. Salesforce中所有常用类型字段的取值与赋值
  2. 二叉搜索树的查询操作《算法导论》12.2
  3. 对《构建之法》的一点认识
  4. Redis分布式部署,一致性hash
  5. 微信平台开发1--开发者模式基本配置
  6. Effective C++学习笔记——构造/析构/拷贝运算
  7. c字符串函数实现(1)---strncpy
  8. DELPHI 7 动态链接库DLL断点调试
  9. 蛋白提取纯化的方法、注意事项及常见问题解答
  10. 计算机视觉与深度学习 | 基于DNN神经网络实现人的年龄及性别预测(代码类)