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