dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]

7efa55762873ae42c2fe85f1cea93156.gif

数理统计:

数理统计是以概率论为基础,研究社会和自然界中大量随机现象数量变化基本规律的一种方法。分为:

  • 描述统计

    (描述统计的任务是搜集资料,进行整理、分组,编制次数分配表,绘制次数分配曲线,计算各种特征指标,以描述资料分布的集中趋势、离中趋势和次数分布的偏斜度等。)

  • 推断统计

    (推断统计是在描述统计的基础上,根据样本资料归纳出的规律性,对总体进行推断和预测。)

6a8ba843952f5b580e8c8ff1efe7baa3.png

概念

描述性统计,就是从总体数据中提取变量的主要信息(总和、均值等),从而从总体层面上,对数据进行统计性描述。

在统计的过程中,通常会配合绘制相关的统计图来进行辅助。

描述性统计所提取统计的信息,称为统计量

统计量

  • 频数与频率

    (数据的频数与频率统计适用于类别变量)

    • 频数

      (数据中类别变量每个不同取值出现的次数)

    • 频率

      (每个类别变量的频数与总次数的比值,通常采用百分数表示)

e.g. 在n个变量中,类别变量a出现了m次(频数),频率为m/n

集中趋势分析

  • 均值

    (即平均值,其为一组数据的总和除以数据的个数)

  • 中位数

    (将一组数据升序排列,位于该组数据最中间位置的值。如果数据个数为偶数,则取中间两个数值的均值)

  • 众数

    (一组数据中出现次数最多的值)

  • 分位数

    (通过n-1个分位将数据划分为n个区间,使得每个区间的数值个数相等,或近似相等。其中,n为分位数的数量。

    常用的分位数有四分位数与百分位数)

    以四分位数为例,通过3个分位,将数据划分为4个区间

    • 第1个分位称为1/4分位(下四分位)。数据中1/4的数据小于该分位值

    • 第2个分位称为2/4分位(中四分位)。数据中2/4的数据小于该分位值

    • 第3个分位称为3/4分位(上四分位)。数据中3/4的数据小于该分位值

四分位值的计算

1.首先,计算四分位的位置

12c987e60eb96e64efc936a4ecfc65f0.png(其中,位置index从0开始,n为数组中元素的个数)2.根据位置计算四分位值
⊙如果index为整数(小数点后为0),四分位的值就是数组中索引为index的元素
⊙如果index不为整数,则四分位位置介于ceil(index)[向上取整]与floor(index)[向下取整]之间,根据这两个位置的元素确定四分位值

离散程度分析

  • 极差

    (一组数据中,最大值与最小值之差)

  • 方差

    (一组数据中,每个元素与均值偏离的大小)

    eb45d0535697bd57db078a7945358847.png

    5e9f0ee34ce6149d21273c7847faece5.png:数组中的每个元素

    8df2222d5b68692ce19f5c5d948a5352.png:数组中所有元素的均值

    706f48f7c85a4112a2286a07b6a02ca2.png:数组元素的个数

  • 标准差

    (方差的开方)

    dbe2e0bf40d1315d8c9448924d3b182c.png

分布形状

  • 偏度

    (是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征)

    • 如果数据对称分布(例如正态分布) ⇒ 偏度为0

    • 如果数据左偏分布 ⇒ 偏度小于0

    • 如果数据右偏分布 ⇒ 则偏度大于0

  • 峰度

    (是描述总体中所有取值分布形态陡缓程度的统计量,可理解为数据分布的高矮程度

    峰度的比较是相对于标准正态分布的)

    • 对于标准正态分布,峰度为0

    • 如果峰度大于0,则密度图高于标准正态分布

      • 数据在分布上比标准正态分布密集,方差(标准差)较小

    • 如果峰度小于0,则密度图低于标准正态分布

      • 数据在分布上比标准正态分布分散,方差(标准差)较大

变量

  • 类别变量

    (变量是一种分类,e.g. 颜色,性别,职位...)

    • 无序类别变量

      (无大小顺序等级之分,又称名义变量)

    • 有序类别变量

      (可按大小顺序等级区分,又称等级变量)

  • 数值变量

    (变量是一个具体的值,e.g. 1, 0.1...)

    • 连续变量

      (在一定区间内可以任意取值)

    • 离散变量

      (按一定顺序一一列举,通常以整数位取值的变量)

Q&A:

当数据中用0和1表示性别(或其他类别变量)时,此时0和1在实际意义上不做数值计算,应映射为类别变量。

均值、中位数与众数:

  • 数值变量通常使用均值与中值表示集中趋势

  • 类别变量通常使用众数表示集中趋势

  • 在正态分布下,三者是相同的。在偏态分布下,三者会有所不同

  • 均值使用所有的数据进行计算,因此容易受到极端值的影响

  • 中位数与众数不受极端值的影响,因此会相对稳定

  • 众数在一组数据中可能不是唯一的

三者的数量关系如下:

92af2ba26b07f606e418e4a8732bbffa.pngbb08d19416d65d898440ab8401cbc949.pnge69975027c1c2fb9c7ef533201d052cf.png

极差、方差与标准差:

  • 极差的计算非常简单,但是极差没有充分的利用数据信息

  • 方差(标准差)可以体现数据的分散性。方差(标准差)越大,数据越分散,方差(标准差)越小,数据越集中

  • 方差(标准差)也可以体现数据的波动性(稳定性)。方差(标准差)越大,数据波动性越大,方差(标准差)越小,数据波动性越小

  • 当数据较大时,也可以使用n代替n-1

代码实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
import warnings

# 设置seaborn绘图的样式
sns.set(style = "darkgrid")
plt.rcParams["font.family"] = "SimHei" # 正常显示中文标签
plt.rcParams["axes.unicode_minus"] = False # 正常显示负号

# 忽略警告信息
warnings.filterwarnings("ignore")

# 加载鸢尾花数据集
iris = load_iris() # dict[花萼的长度,花萼的宽度,花瓣的长度,花瓣的宽度]

# iris.data:鸢尾花数据集
# iris.target:每朵鸢尾花对应的类别(三种类别,取值为0,1,2)
print(iris.data[0:10],iris.target[:10]) # 取前10条数据

# iris.feature_names:特征列的名称
# iris.target_names:鸢尾花类别的名称
print(iris.feature_names,iris.target_names)

输出结果:

eb9aa43f41d9293c738d0da816cf8d69.png

# 将鸢尾花数据与对应的类型合并,组合成完整的记录
data = np.concatenate([iris.data, iris.target.reshape(-1,1)], axis=1) # 横向拼接
data = pd.DataFrame(data, columns=["sepal_length","sepal_width","petal_length","petal_width","type"])
data.sample(10) # 任意取出10条数据

输出结果:

4a082f1fff6a2f1601ac9a4de9c40a8e.png

iris.target.reshape(  -1,1)  表示将一维数组转为二维数组

1频数与频率
# 计算鸢尾花数据中,每个类别出现的频数
frequency = data["type"].value_counts()
print(frequency)
# 计算每个类别出现的频率,通常使用百分比表示
percentage = frequency * 100 / len(data)
print(percentage)
# 绘制条状图
frequency.plot(kind="bar")

输出结果:

0ffdadfb7238ab4cac775fcd5928e7e1.png

2均值、中位数以及众数
# 计算花萼长度的均值
mean = data["sepal_length"].mean()

# 计算花萼长度的中位数
median = data["sepal_length"].median()

# 方法一:计算花萼长度的众数
s = data["sepal_length"].mode()
print(s)
# 注意:mode方法返回的是Series类型
mode = s.iloc[0]
print(mean, median, mode)

# 方法二:使用scipy中的stats模块获取花萼长度的众数
from scipy import stats

stats.mode(data["sepal_length"]).mode

# 绘制数据的分布(直方图+密度图)
sns.distplot(data["sepal_length"])

# 绘制垂直线
plt.axvline(mean, ls="-", color="r", label="均值")
plt.axvline(median, ls="-", color="g", label="中位数")
plt.axvline(mode, ls="-", color="indigo", label="众数")
plt.legend()

输出结果:

c98473453f46e09148da0bd440e302a0.png

3分位数
# index为整数的情况
x = np.arange(10,19)
n = len(x)

# 计算四分位的索引(index)
q1_index = (n-1) * 0.25
q2_index = (n-1) * 0.5
q3_index = (n-1) * 0.75
print(q1_index, q2_index, q3_index)

# 将index转换成整数类型
index = np.array([q1_index, q2_index, q3_index]).astype(np.int32)
print(x[index])

plt.figure(figsize=(15,4))
plt.xticks(x)
plt.plot(x, np.zeros(len(x)), ls="", marker="D", ms=15, label="元素值")
plt.plot(x[index], np.zeros(len(index)), ls="", marker="X", ms=15, label="四分位置")
plt.legend()

输出结果:

4a96ac7fb665b1f02088d27841bc33d1.png

# index不为整数的情况
x = np.arange(10,20)
n = len(x)
q1_index = (n-1) * 0.25
q2_index = (n-1) * 0.5
q3_index = (n-1) * 0.75
print(q1_index, q2_index, q3_index)

# 使用该值临近的两个整数来计算四分位置
index = np.array([q1_index, q2_index, q3_index])

# 计算index左边的整数值
left = np.floor(index).astype(np.int32)

# 计算index右边的整数值
right = np.ceil(index).astype(np.int32)

# 获取index的小数部分与整数部分(整数部分不使用,变量名用下划线) 
weight, _ = np.modf(index)

# 根据左右两边的整数,加权计算四分位数的值。权重与距离成反比
q = x[left] * (1-weight) + x[right] * weight
print(q)

plt.figure(figsize=(15,4))
plt.xticks(x)
plt.plot(x, np.zeros(len(x)), ls="", marker="D", ms=15, label="元素值")
plt.plot(q, np.zeros(len(q)), ls="", marker="X", ms=15, label="四分位置")
for v in q:
    plt.text(v, 0.01, s=v, fontsize=15)
plt.legend()

输出结果:

a5f60b09b42a18541e43194b94df3807.png

# Numpy中计算分位数 np.quantile(x, q)/np.percentile(x, q)
x = [1, 3, 10, 15, 18, 20, 23, 40]

print(np.quantile(x, q=[0.25, 0.5, 0.75]))
print(np.percentile(x, q=[25, 50, 75]))

输出结果:

3ed7ddc5cc263d70c4ca4a059958a9b2.png

quantile与percentile都可以计算分位数
quantile方法中 q(要计算的分位数)的取值范围为[0,1]
percentile方法中 q 的取值范围为[0,100]

# Pandas中计算分位数 s.describe(percentiles)
x = [1, 3, 10, 15, 18, 20, 21, 23, 40]
s = pd.Series(x)
print(s.describe())

输出结果:

feb290df2dac50d4ea3559b31c68afd4.png

获取四分之一分位的值的方法:

A. s.describe()[4]

B. s.describe()["25%"]

C. s.describe().iloc[4] (推荐使用)

D. s.describe().loc["25%"](推荐使用)

E. s.describe().ix[4]

F. s.describe().ix["25%"]

4极差、方差以及标准差
# 计算极差
sub1 = data["sepal_length"].max() - data["sepal_length"].min()
sub2 = np.ptp(data["sepal_length"]) 
# pandas 新版本中无法使用ptp(),旧版本的可以使用如下
# sub2 = data["sepal_length"].ptp()

# 计算方差
var = data["sepal_length"].var()

# 计算标准差
std = data["sepal_length"].std()
print(sub1, sub2, var, std)

输出结果:

e614b28ae65af15fa890af95a8006ebc.png

5偏度以及峰度
# 构造左偏分布数据
t1 = np.random.randint(1, 11, size=100)
t2 = np.random.randint(11, 21, size=500)
t3 = np.concatenate([t1, t2])
left_skew = pd.Series(t3)

# 构造右偏分布数据
t1 = np.random.randint(1, 11, size=500)
t2 = np.random.randint(11, 21, size=100)
t3 = np.concatenate([t1, t2])
right_skew = pd.Series(t3)

# 计算偏度
print(left_skew.skew(), right_skew.skew())

# 绘制核密度图
sns.kdeplot(left_skew, shade=True, label="左偏")
sns.kdeplot(right_skew, shade=True, label="右偏")
plt.legend()

输出结果:

6861fca679cfcfc68bfbc98f06eb76e2.png

# 标准正态分布
standard_normal = pd.Series(np.random.normal(0, 1, size=10000))
print("标准正态分布峰度:", standard_normal.kurt(), "标准差:", standard_normal.std())
print("花萼宽度峰度:", data["sepal_width"].kurt(), "标准差:", data["sepal_width"].std())
print("花瓣长度峰度:", data["petal_length"].kurt(), "标准差:", data["petal_length"].std())
sns.kdeplot(standard_normal, label="标准正态分布")
sns.kdeplot(data["sepal_width"], label="花萼宽度峰度")
sns.kdeplot(data["petal_length"], label="花瓣长度峰度")

输出结果:

e7d821deb1eede83bacb2bed574070a3.png

学习课程:开课吧-大数据分析全栈课程

419dc813bc4e46ce17e481e796dc58fb.pngcdc5778e8080e8e07319072b12e426ee.png47d13efb96f29a75f67421f2a6d3f7f7.png

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

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

相关文章

c语言高级语言期中测试答案,上海理工大学C语言2011期中试题和答案

C语言2010/2011学年 第二学期 期中测试高级语言程序设计(C)试卷 A □BA1. 输入一行字符&#xff0c;统计其中的英文字母个数。#include void main(){ char ch;int n0;printf(“Input a string:\n”);while(1){ chgetchar();if (ch \n ) break;if (ch> a && ch< z…

如何构建ASP.NET MVC4JQueryAJaxJSon示例

背景&#xff1a; 博客中将构建一个小示例&#xff0c;用于演示在ASP.NET MVC4项目中&#xff0c;如何使用JQuery Ajax。 直接查看JSon部分 步骤&#xff1a; 1&#xff0c;添加控制器(HomeController)和动作方法(Index),并为Index动作方法添加视图(Index.cshtml),视图中HTML如…

echarts 有引导线和内部文字_点、线、面构图的异同以及相互转化

点、线、面构图既有相似性&#xff0c;又有差异性。相似的是都有对齐、强调、群组、重复、突出层次的作用&#xff0c;不同的是点的特点是聚焦、线的特点是运动和方向性&#xff0c;面的特性是体量感、稳定性。点的情感最弱&#xff0c;线、面的情感要比点丰富。一、点、线、面…

《Python黑帽子:黑客与渗透测试编程之道》 Web攻击

Web的套接字函数库&#xff1a;urllib2 一开始以urllib2.py命名脚本&#xff0c;在Sublime Text中运行会出错&#xff0c;纠错后发现是重名了&#xff0c;改过来就好&#xff1a; #!/usr/bin/python #codingutf-8 import urllib2url "http://www.baidu.com"headers …

vCenter Converter Standalone使用文档

文档目的能够使用vCenter Converter Standalone 将物理机操作系统迁移到虚拟机操作系统基础知识vCenter Converter Standalone 能将物理机上的操作系统、VMware虚拟机上的操作系统或者Hype-V 上的虚拟机操作系统迁移到VMware上。系统环境操作系统&#xff1a;Windows Server 20…

1093芯片做正弦波逆变器_正弦波逆变器中的SPWM调制(钟任生)

欢迎加入技术交流QQ群(2000人)&#xff1a;电力电子技术与新能源 905723370高可靠新能源行业顶尖自媒体在这里有电力电子、新能源干货、行业发展趋势分析、最新产品介绍、众多技术达人与您分享经验&#xff0c;欢迎关注我们&#xff0c;搜索微信公众号&#xff1a;电力电子技术…

android 手机短信恢复,安卓手机短信删除了怎么恢复?简单恢复的方法

原标题&#xff1a;安卓手机短信删除了怎么恢复&#xff1f;简单恢复的方法安卓手机短信删除了怎么恢复&#xff1f;手机短信是生活中不经常使用到&#xff0c;但是依然是十分重要的存在&#xff0c;因为我们现在比较喜欢用社交软件与别人进行交流&#xff0c;但是在一些相对重…

bash下个人习惯的一些文件设置

2019独角兽企业重金招聘Python工程师标准>>> bash_profile export PATH/usr/local/bin:$PATH export EDITORviinputrc set editing-mode vi #set editing-mode emacs set show-all-if-ambiguous on set completion-ignore-case on set meta-flag on set conver…

docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像

一、前言1、本文主要内容将在项目中实际使用到的相关东西整理记录一波&#xff0c;同时可以方便其他同学在使用到的时候参考一下(自己也备忘)&#xff0c;有不对的地方&#xff0c;欢迎指出~~Docker部署SpringBoot 项目通用Dockerfile文件、脚本Jenkins新建任务图文详解3、本文…

android 发送短信 广播 demo,向Android模拟器打电话发短信的简单方法

在开发android应用程序时&#xff0c;有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应。譬如编写一个广播接收器&#xff0c;来提示用户有短信收到或者处理短信&#xff0c;就需要向该手机发送短信来进行测试。这里介绍一种简单的向android模拟器打电话发短…

android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究

在android中&#xff0c;常常会和输入法的软件键盘交互。在Manifest文件中&#xff0c;系统给activity的一个属性-windowSoftInputMode来控制输入法的显示方式。该属性提供了Activity的window与软键盘的window交互的方式。这里的属性设置有双方面的影响&#xff1a;1.软键盘的显…

天才基本法_《天才基本法》强推!年度神仙小说,看完这本书我竟然爱上了数学...

《天才基本法》——长洱小说文案元宝的书评这个真的是本年度的神仙小说&#xff0c;讲述了女主回到少女时代&#xff0c;可以和他一直暗恋的数学天才重来一遍。女主让男主改变了觉得她碌碌无为的看法&#xff0c;也改变了自己的人生。本书最大的主角其实是数学&#xff01;天知…

千年鸿蒙 盼尔来兮是什么意思,鸿蒙是什么意思_鸿蒙的意思和出处_我爱历史网...

鸿蒙&#xff0c;是一个汉语词语&#xff0c;亦作“鸿濛”。中国神话传说的远古时代&#xff0c;传说在盘古开天辟地之前&#xff0c;世界是一团混沌状&#xff0c;因此把那个时代称作鸿蒙时代&#xff0c;后来该词也常被用来泛指远古时代。引证解释亦作“鸿濛”。1、宇宙形成前…

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

from:http://m.blog.csdn.net/article/details?id51075023 在VS2015中先创建C#项目&#xff0c;然后再创建要编写的动态库DLL项目&#xff0c;这样做的好处是整个解决方案的编程环境是C#模式&#xff0c;这样就可以有很多智能的提示或快捷的编程方式在整个解决方案中都可以使用…

(转)CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景

CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景 我们刚刚分析了《极限跳跃》这款游戏&#xff0c;下面我们开始制作第一个游戏场景&#xff0c;也就是游戏的开始场景。 首先&#xff0c;打开CocosCreator&#xff0c;新建HelloWorld项目。选择项目路径&#xff0…

连接池超时配置_HttpClient连接池的一些思考

前言使用apache的httpclient进行http的交互处理已经很长时间了&#xff0c;而httpclient实例则使用了http连接池&#xff0c;想必大家也没有关心过连接池的管理。事实上&#xff0c;通过分析httpclient源码&#xff0c;发现它很优雅地隐藏了所有的连接池管理细节&#xff0c;开…

视图和模型变换

视图变换&#xff0c;是指变换照相机的位置&#xff0c;角度。 模型变换&#xff0c;是指变换被照物体的位置&#xff0c;角度。 这两个变换&#xff0c;都会影响最终图形中&#xff0c;物体的位置&#xff0c;角度。而这两个变换&#xff0c;可以达到相同的效果。比如&#x…

鸿蒙os全面升级,华为突然宣布,鸿蒙OS正式版6月底全面升级,幸福来得太突然...

原标题&#xff1a;华为突然宣布&#xff0c;鸿蒙OS正式版6月底全面升级&#xff0c;幸福来得太突然摘要&#xff1a;早在今年2月华为Mate X2折叠屏新品发布会上&#xff0c;余承东曾表示&#xff0c;鸿蒙OS正式版将于今年4月份全面上线。或许是因为华为宣布卖车分散了很多的精…

eclipse启动失败:An internal error occurred during: reload maven project

2019独角兽企业重金招聘Python工程师标准>>> 1.找到workspace文件夹下的/.metadata文件夹&#xff0c;将其删除掉&#xff0c;然后在讲项目重新导入进去eclipse中。但是这个有一点不好的地方&#xff0c;之前对eclipse所做的配置也会恢复为默认配置 2.在.metadata下…

skt7850鸿蒙策略,lol 英雄联盟 SKT状态回暖轻取外卡,SUP难挡Faker

MSI 第四日 SUP vs SKT双方bpBAN LISTBAN&#xff1a;SUP:流浪 牛头 豹女SKT&#xff1a;巴德 妖姬 鱼人PICKSUP:大树 男枪 冰女 卢锡安 锤石SKT&#xff1a;艾克 千珏 沙皇 EZ 布隆比赛开始&#xff0c;双方正常对线开局。前期下路锤石多次勾中ez&#xff0c;男枪也来逼出EZ布…