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.pswp.cn/news/374460.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374460.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374460.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Spring Security 3.1保護RESTful Web服務,第3部分

1.概述 本教程顯示了如何使用Spring和基于Java的Spring Security 3.1來保護REST服務 。 本文將重點介紹如何使用“登錄和Cookie”方法專門針對REST API設置安全配置。 2. Spring Security的體系結構完全基于Servlet過濾器,因此,在HTTP請求處理方面&…

一次完整的HTTP請求所經歷的7個步驟

HTTP通信機制是在一次完整的HTTP通信過程中,Web瀏覽器與Web服務器之間將完成下列7個步驟: 1、建立TCP連接 在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共…

jQuery基礎--樣式篇(3)

1.jQuiery對象與DOM對象   對于剛剛接觸jQuery的初學者,我們要清楚認識一點:jQuery對象與DOM對象是不一樣的。可能一時半會分不清楚哪些是jQuery對象,哪些是DOM對象,下面重點介紹一下jQuery對象,以及兩者相互間的轉換…

hls fifo_HLS優化方法DATAFLOW你用了嗎

上期內容:異步跨時鐘域電路該怎么約束DATAFLOW作為HLS的一種優化方法,對于改善吞吐率(Throughput)、降低延遲(Latency)非常有效。DATAFLOW的作用對象DATAFLOW可以作用于函數,也可以作用于for循環。如下圖所示(圖片來源Figure62, Figure 63, u…

Java 8虛擬擴展方法

我一直關注Java 8 Lambda表達式項目的發展已經有一段時間了,我對其當前的進展狀態感到非常興奮。 我發現的最新“易于理解”的演示文稿是這樣的: http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf 現在,作為一名…

python爬蟲 庫_七款必備的Python爬蟲庫,你知道幾個?

很多你需要的信息數據都是在網站內,雖然有些網站的數據會以整潔、結構化的形式呈現,但大部分網站卻無法做到這樣。因此,當你想要獲得一些數據的時候,你需要一些爬蟲工具幫助抓取,然后再對其進行分析。今天,…

62個Android Studio小技巧合集

轉載: 原文鏈接:http://laobie.github.io/android/2016/02/14/android-studio-tips.html轉載于:https://www.cnblogs.com/kesteler/p/5618490.html

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

繼續使用JMX的過程(請參閱: 人類JMX ),我們將學習如何在一些流行的框架中啟用JMX支持(通常是統計和監視功能)。 這些信息大部分都可以在項目的主頁上找到,但是我決定在收集這些信息的同時&#…

二叉樹遍歷(前中后)

二叉樹前序遍歷&#xff1a; /*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution { public:vector<int> preorderTravers…

python語言程序設計實踐教程答案實驗六_Python程序設計實踐教程

書名&#xff1a;Python程序設計實踐教程 定價&#xff1a;29.8 ISBN&#xff1a;9787115532602 作者&#xff1a;儲岳中 薛希玲 版次&#xff1a;*1版 出版時間&#xff1a;2020-04 內容提要&#xff1a; 本書是Python語言程序設計的配套實踐教材&#xff0c;分為三部分&#…

400多萬微信用戶如何“變現”?凱叔說了五大秘訣與教訓

凱叔&#xff0c;原名王凱&#xff0c;自媒體“凱叔講故事”創始人&#xff0c;近日在獅享家班委會上做了分享&#xff0c;全是實實在在的實驗性方法論。以下是王凱的分享內容&#xff0c;整理 / 垅青 我講的主題叫“基于內容的MVP探索”&#xff0c;MVP是什么東西&#xff1f;…

使用dbUnit,JSON,HSQLDB和JUnit規則進行數據庫單元測試

在本周TDD課程的運行中&#xff0c;我認為編寫一些夾具以簡化dbUnit的使用將很有趣。 我最初的想法只是教dbUnit有關JSON的知識&#xff0c;但事實證明Lieven Doclo已經做到了。 因此&#xff0c;我決定更進一步&#xff0c;還將dbUnit與JUnit Rules結合起來&#xff0c;并提供…

Codeforces Round #321 (Div. 2) E. Kefa and Watch 線段樹hash

E. Kefa and Watch Time Limit: 1 Sec Memory Limit: 256 MB 題目連接 http://codeforces.com/contest/580/problem/EDescription One day Kefa the parrot was walking down the street as he was on the way home from the restaurant when he saw something glittering by…

python文字游戲源代碼求年紀_Python實現猜年齡游戲代碼實例

1. 在猜年齡的基礎上編寫登錄、注冊方法&#xff0c;并且把猜年齡游戲分函數處理&#xff0c;如 2. 登錄函數 3. 注冊函數 4. 猜年齡函數 5. 選擇獎品函數 代碼如下 import json real_age 18 prize_list [好迪洗發水, 綠箭俠, 小豬佩奇, 布娃娃, 再來一次!] import random us…

KVC 與 KVO

一、Key-Value Coding (KVC)鍵值編碼 KVC&#xff0c;即是指 NSKeyValueCoding&#xff0c;一個非正式的 Protocol&#xff0c;提供一種機制來間接訪問對象的屬性。KVO 就是基于 KVC 實現的關鍵技術之一。 一個對象擁有某些屬性。比如說&#xff0c;一個 Person 對象有一個 nam…

使用模擬的單元測試–測試技術5

我的最后一個博客是有關測試代碼方法的一系列博客中的第四篇&#xff0c;演示了如何創建使用存根對象隔離測試對象的單元測試。 今天的博客探討了有時被視為對立的技術&#xff1a;使用模擬對象進行單元測試。 同樣&#xff0c;我使用了從數據庫檢索地址的簡單方案&#xff1a;…

多線程中的volatile和偽共享

偽共享 false sharing&#xff0c;顧名思義&#xff0c;“偽共享”就是“其實不是共享”。那什么是“共享”&#xff1f;多CPU同時訪問同一塊內存區域就是“共享”&#xff0c;就會產生沖突&#xff0c;需要控制協議來協調訪問。會引起“共享”的最小內存區域大小就是一個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處理…

【轉】各種概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB

POJO&#xff08;pure old java object&#xff09; 是普通java類&#xff0c;有一些private的參數作為對象的屬性&#xff0c;然后針對每一個參數定義get和set方法訪問的接口。我看到這個定義&#xff0c;心里就有個疑問了&#xff0c;這個POJO跟JavaBean的定義怎么就這么像&a…