转自链接:https://blog.csdn.net/YEPAO01/article/details/99197487

一、查看数据分布趋势

 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#读取源数据
df = pd.read_csv('http://jse.amstat.org/datasets/normtemp.dat.txt', header=None, sep='\s+', names = ['体温','性别','心率'])
df.head()

#下载到本地
  re = requests.get("http://jse.amstat.org/datasets/normtemp.dat.txt")
  re.encoding = "utf-8"
  with open("normtemp.dat.txt","w") as f:
  f.write(re.text)
  df = pd.read_csv("normtemp.dat.txt", header=None, sep="\s+")
  df.columns = ['体温','性别','心率']
  df.head()
  #2 不下载
  columns = ['体温','性别','心率']
  df = pd.read_csv("http://jse.amstat.org/datasets/normtemp.dat.txt", header=None, sep="\s+")
  df.columns = ['体温','性别','心率']

 
#查看数据基本特征
df.describe()

绘制散点图

# 散点图
fig = plt.figure(figsize=(16,5))
df1 = df[df["性别"]==1]
df1.shape
plt.scatter(df1.index, df1["体温"], c="r", label="male")
plt.legend()
df2 = df[df["性别"]==2]
df2.shape
plt.scatter(df2.index, df2["体温"], c="b", label="female")
plt.legend()
plt.ylabel("tw")
plt.xlabel("x")
plt.grid()

 柱形图

# 柱形图
x = np.arange(0,130,1)
y = df_tw.values
plt.bar(x,y)

绘制直方图查看体温分布趋势

df_tw.hist(bins=20,alpha = 0.5) df_tw.plot(kind = 'kde', secondary_y=True)

计算温度个数

# 针对温度数据, 计算温度的个数
df_tm01 = df_tm.value_counts() # 计数
df_tm01.sort_index(inplace=True) # 按照温度排序
print(df_tm01.head()) 96.3 1
96.4 1
96.7 2
96.8 1
96.9 1
Name: 体温, dtype: int64
plt.scatter(df_tm01.index,df_tm01.values)

 检验是否符合正太

方法1 :scipy.stats.normaltest (a, axis=0)
参数:a - 待检验数据;axis - 可设置为整数或置空,如果设置为 none,则待检验数据被当作单独的数据集来进行检验。该值默认为 0,即从 0 轴开始逐行进行检验。
返回:k2 - s^2 + k^2,s 为 skewtest 返回的 z-score,k 为 kurtosistest 返回的 z-score,即标准化值;p-value - p值

import scipy.stats
scipy.stats.normaltest(df_tm) NormaltestResult(statistic=2.703801433319236, pvalue=0.2587479863488212)

得到的p值>0.05

方法2 Shapiro-Wilk test
方法:scipy.stats.shapiro(x)
官方文档:SciPy v1.1.0 Reference Guide
参数:x - 待检验数据
返回:W - 统计数;p-value - p值

scipy.stats.shapiro(df_tm.values)

(0.9865770936012268, 0.233174666762352)

得到的p值 0.23 > 0.05, 符合正态分布

方法3: scipy.stats.kstest

方法:scipy.stats.kstest (rvs, cdf, args = ( ), N = 20, alternative =‘two-sided’, mode =‘approx’)
官方文档:SciPy v0.14.0 Reference Guide
参数:rvs - 待检验数据,可以是字符串、数组;
cdf - 需要设置的检验,这里设置为 norm,也就是正态性检验;
alternative - 设置单双尾检验,默认为 two-sided
返回:W - 统计数;p-value - p值

u = df_tm.mean()
std = df_tm.std()
scipy.stats.kstest(df_tm.values,'norm',args=(u,std)) KstestResult(statistic=0.06472685044046644, pvalue=0.6450307317439967)

方法4: Anderson-Darling test
方法:scipy.stats.anderson (x, dist =‘norm’ )
该方法是由 scipy.stats.kstest 改进而来的,可以做正态分布、指数分布、Logistic 分布、Gumbel 分布等多种分布检验。默认参数为 norm,即正态性检验。
官方文档:SciPy v1.1.0 Reference Guide
参数:x - 待检验数据;dist - 设置需要检验的分布类型
返回:statistic - 统计数;critical_values - 评判值;significance_level - 显著性水平

scipy.stats.anderson(df_tm.values,dist="norm")

AndersonResult(statistic=0.5201038826714353, critical_values=array([0.56 , 0.637, 0.765, 0.892, 1.061]), significance_level=array([15. , 10. ,  5. ,  2.5,  1. ]))

结论:三种检验的pvalue值均大于5%,因此体温值服从正态分布。第四种方法返回的不是pvalue值.

使用箱型图查看是否存在异常值.

#箱型图
df_tm.plot.box(vert=False, grid = True)

 查找具体的异常值数据

# 上四分位数
q3 = df_tm.quantile(q=0.75)
#下四分位数
q1 = df_tm.quantile(q=0.25)
# 四分位差
iqr = q3-q1
print("上四分位数:{}\n下四分位数:{}\n四分位差{}".format(q3,q1,iqr))
df_tm_01 = df_tm[(df_tm>q3+1.5*iqr) | (df_tm<q1-1.5*iqr)]
print("异常值:\n{}".format(df_tm_01)) 上四分位数:98.7
下四分位数:97.8
四分位差0.9000000000000057
异常值:
0 96.3
65 96.4
129 100.8
Name: 体温, dtype: float64

利用python计算两者之间的相关性系数
需要了解统计学三大相关系数: 绝对值越大,相关性越强

pearson
kendall
spearman
相关系数 相关强度
0.8-1.0 极强
0.6-0.8 强
0.4-0.6 中等
0.2-0.4 弱
0.0-0.2 极弱

#相关系数
df["体温"].corr(df["心率"], method='pearson')
0.24328483580230698 # spearman 相关系数
df["体温"].corr(df["心率"], method='spearman')
0.265460363879611 # kendall 相关系数
df["体温"].corr(df["心率"], method='kendall')
0.17673221630037853

df = df[["体温","心率"]]
print(df.corr(method='pearson'),"\n")
print(df.corr(method='spearman'),"\n")
print(df.corr(method='kendall'),"\n") 体温 心率
体温 1.000000 0.243285
心率 0.243285 1.000000 体温 心率
体温 1.00000 0.26546
心率 0.26546 1.00000 体温 心率
体温 1.000000 0.176732
心率 0.176732 1.000000
fig = plt.figure(figsize=(16,5))
plt.scatter(df.index, df["体温"])
plt.scatter(df.index, df["心率"])

参考链接https://blog.csdn.net/cyan_soul/article/details/81236124


二、python中实现数据分布的方法

参考链接:https://www.cnblogs.com/pinking/p/7898313.html

#二项分布
from scipy.stats import binom #几何分布
from scipy.stats import geom #泊松分布
from scipy.stats import poisson #均匀分布
from scipy.stats import uniform #指数分布
from scipy.stats import expon #正太分布
from scipy.stats import norm

python数据分析之数据分布的更多相关文章

  1. Python数据分析--Pandas知识点(三)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...

  2. Python数据分析初始(一)

    基础库 pandas:python的一个数据分析库(pip install pandas) pandas 是基于 NumPy 的一个 python 数据分析包,主要目的是为了 数据分析 .它提供了大量 ...

  3. 《Python 数据分析》笔记——pandas

    Pandas pandas是一个流行的开源Python项目,其名称取panel data(面板数据)与Python data analysis(Python 数据分析)之意. pandas有两个重要的 ...

  4. Python 数据分析中常用的可视化工具

    Python 数据分析中常用的可视化工具 1 Matplotlib 用于创建出版质量图表的绘图工具库,目的是为 Python 构建一个 Matlab 式的绘图接口. 1.1 安装 Anaconada ...

  5. [Python数据分析]新股破板买入,赚钱几率如何?

    这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. == ...

  6. 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例

    基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...

  7. 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化

    继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...

  8. 【搬砖】【Python数据分析】Pycharm中plot绘图不能显示出来

    最近在看<Python数据分析>这本书,而自己写代码一直用的是Pycharm,在练习的时候就碰到了plot()绘图不能显示出来的问题.网上翻了一下找到知乎上一篇回答,试了一下好像不行,而且 ...

  9. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

随机推荐

  1. javascript实现每秒执行一次的方法

    javascript实现每秒执行一次的方法 <pre> i=0; function showzhandou() { $('.zhandouresult p').eq(i).fadeIn() ...

  2. 18 Ajax、Json以及jackson框架解析json的基本应用

    1. Ajax (1)概念:ASynchronous JavaScript And XML 异步的JavaScript 和 XML 异步和同步:客户端和服务器端相互通信的基础上 * 客户端必须等待服务 ...

  3. [Oracle] - 查看数据库中每个表占用空间大小,及进行表压缩

    查询用户创建的表 select * from user_tab_comments; -- 查询本用户的表,视图等. select * from user_col_comments; -- 查询本用户的 ...

  4. maven 打包错误 Cannot access central in offline mode

    出错的场景是这样的,先是在一台联网的linux机器上下载项目需要的包,linux机器上jdk为1.8 springboot1.5.然后将项目代码和.m2目录拷贝到一台windows机器上,window ...

  5. logrus 剖析之 hook

    logrus 通过实现 Hook接口扩展 hook 机制,可以根据需求将日志分发到任意的存储介质, 比如 es, mq 或者监控报警系统,及时获取异常日志.可以说极大的提高了日志系统的可扩展性. ho ...

  6. (转)三大WEB服务器对比分析(apache ,lighttpd,nginx)

    ref : https://www.iteye.com/blog/hai0378-1860220   一.软件介绍(apache  lighttpd  nginx) 1. lighttpd Light ...

  7. Vasya and Shifts CodeForces - 832E (高斯消元)

    大意: 给定$4n$个$m$位的五进制数, $q$个询问, 每个询问给出一个$m$位的五进制数$b$, 求有多少种选数方案可以使五进制异或和为$b$. 高斯消元入门题 每次询问相当于就是给定了$m$个 ...

  8. 环境配置--升级Python 3.6爬坑

    升级到3.6之后,发现ctrl alt t呼不出命令台,找了半天发现update manager也打不开,而且没有错误报告.....查阅了一番资料看到有人有类似的问题(https://askubunt ...

  9. resnet的理解-- 面试笔记

    上周参加了XX大学研究生推免的面试,面试老爷问到了resnet主要解决了什么问题,我下意识的回答到解决了当网络加深的时候会出现的vanishing/exploding gradients,然后面试老爷 ...

  10. [jsp学习笔记]servelt get post

    1.post提交数据是隐式的,get是通过在url里面传递的(可以看一下你浏览器的地址栏),用来传递一些不需要保密的数据. 2.用get时,传输数据的大小有限制 (注意不是参数的个数有限制),为2K: ...