Python 概率分布函数

Python 概率分布函数,python,numpy,pandas,matplotlib,visualization,Python,Numpy,Pandas,Matplotlib,Visualization,我有一组原始数据,我必须确定这些数据的分布。绘制概率分布函数最简单的方法是什么?我试着用正态分布来拟合它 但我更好奇的是,这些数据本身携带的是什么分布 我没有代码来显示我的进度,因为我在python中找不到任何允许我测试数据集分布的函数。我不想对数据进行切片,并强制它适应可能是正态分布或偏态分布的情况 有没有办法确定数据集的分布?如有任何建议,我们将不胜感激 这是正确的方法吗 这与我所寻找的非常接近,但它再次使数据符合正态分布 编辑: 输入有一百万行,下面给出了简短的示例 Hashtag,Fre

我有一组原始数据,我必须确定这些数据的分布。绘制概率分布函数最简单的方法是什么?我试着用正态分布来拟合它

但我更好奇的是,这些数据本身携带的是什么分布

我没有代码来显示我的进度,因为我在python中找不到任何允许我测试数据集分布的函数。我不想对数据进行切片,并强制它适应可能是正态分布或偏态分布的情况

有没有办法确定数据集的分布?如有任何建议,我们将不胜感激

这是正确的方法吗
这与我所寻找的非常接近,但它再次使数据符合正态分布

编辑:

输入有一百万行,下面给出了简短的示例

Hashtag,Frequency
#Car,45
#photo,4
#movie,6
#life,1
频率范围从
1
20000
count,我正在尝试确定关键字频率的分布。我试着绘制一个简单的直方图,但得到的结果是一个条形图

代码:

import pandas
import matplotlib.pyplot as plt


df = pandas.read_csv('Paris_random_hash.csv', sep=',')
plt.hist(df['Frequency'])
plt.show()
输出

这是一个显示直方图的简单示例。它只解决了你的一部分问题,但它可以是朝着你的目标迈出的一步。请注意,
直方图
函数为您提供箱子两个角的值,您必须进行插值以获得中心值

import numpy as np
import matplotlib.pyplot as pl

x = np.random.randn(10000)

nbins = 20

n, bins = np.histogram(x, nbins, density=1)
pdfx = np.zeros(n.size)
pdfy = np.zeros(n.size)
for k in range(n.size):
    pdfx[k] = 0.5*(bins[k]+bins[k+1])
    pdfy[k] = n[k]

pl.plot(pdfx, pdfy)
您可以使用以下示例来拟合数据:


您是否尝试使用seaborn库?它们有一个很好的核密度估计函数。尝试:

import seaborn as sns
sns.kdeplot(df['frequency'])

您可以找到安装说明

数据本身携带的唯一分布是。如果您的数据为1d numpy数组
数据
,则可以将at
x
的值计算为小于或等于x的值的累积相对频率:

d[d <= x].size / d.size

这并不意味着数据是来自经验分布的随机样本。如果您只想通过查看数据来了解数据的样本分布(如果有的话),答案是您不能。但这更多的是关于统计,而不是关于编程。

我想你问的是一个稍微不同的问题:

我的原始数据和我映射到的曲线之间的相关性是什么

这是一个概念上的问题,你试图理解R和R平方的意义。从工作开始。您可能想浏览一下这篇非Python文章,以了解要拟合的曲线的类别以及最小二乘法在拟合曲线时的用法


你可能被否决了,因为这是一个数学问题,而不是一个编程问题。

直方图与你认为的不同,你尝试显示一个条形图。直方图需要列表中的每个数据点,而不是频率本身。你有[3,2,0,4,…]布特应该有[1,1,1,2,2,4,4,4,4]。您无法自动确定概率分布

我可能遗漏了一些东西,但似乎有一个要点被全面忽略了:您描述的数据集是一个分类数据集。也就是说,x值不是数字,它们只是文字(汽车、照片等)。概率分布形状的概念对于分类数据集来说毫无意义,因为分类没有逻辑顺序。直方图会是什么样子?汽车会是第一个垃圾箱吗?或者它会一直在你的图表的右边吗?除非你有一些标准来量化你的类别,否则试图根据分布的形状做出判断是毫无意义的

这里有一个基于文本的小例子来阐明我的意思。假设我调查了一群人,问他们最喜欢的颜色。我绘制了结果图:

   Red | ##
 Green | #####
  Blue | #######
Yellow | #####
Orange | ##
嗯,看起来颜色偏好是正态分布的。等等,如果我在我的图表中随机地把颜色按不同的顺序排列会怎么样

  Blue | #######
Yellow | #####
 Green | #####
Orange | ##
   Red | ##

我猜数据实际上是正偏的?当然,情况并非如此——对于分类数据集来说,分布的形状毫无意义。只有当您决定如何量化数据集中的每个hashtag时,问题才会有意义。是否要将哈希标记的长度与其频率进行比较?或者按字母顺序排列标签的频率?等等。

当然是一个统计问题-听起来你想做一个概率测试,看看这个分布是否与正态分布、对数正态分布、二项式分布等非常相似。最简单的方法是测试正常或对数正常,如下所述


设置你的Pvalue截止值,通常情况下,如果你的Pvalue是第一步:绘制一个直方图,然后查看:)@cel谢谢这是我一直在寻找的,我的下一个疑问是我是否像绘制CDF和CCDF时那样对数据进行排序?直方图与你认为的不同,你尝试显示一个条形图。直方图需要列表中的每个数据点,而不是频率本身。你有[3,2,0,4,…]布特应该有[1,1,1,2,2,4,4,4,4]。您无法自动确定概率分布:我与seaborn合作过,但没有检查是否会进行明确检查,而且我的数据在本质上是离散的,因此是否适用?我确实尝试实施了您提供的解决方案,但在我看来不错,但当我尝试在seaborn中实施分布图时kde的绘图很好,但温切换到hist,它将进入无限循环,不会返回任何关于这方面的建议?@SitzBlogz如果您对某些代码有问题,并且希望得到调试方面的帮助,请将其添加到您的问题中,或者最好问另一个问题。感谢您的详细解释。。我的数据是真实世界的推特搜索关键词,对我来说,关键词的频率看起来更谨慎。当绘制CDF时,它显示的步骤比曲线多。感谢您的回答。我用这件事澄清了更多的疑问。我同意这可能更像是一个统计问题
  Blue | #######
Yellow | #####
 Green | #####
Orange | ##
   Red | ##
import numpy as np 
import pylab 
import scipy.stats as stats

mydata = whatever data you are looking to fit to a distribution  
stats.probplot(mydata, dist='norm', plot=pylab)
pylab.show()