Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中用于条件密度估计的工具_Python_Kernel Density_Probability Density - Fatal编程技术网

Python中用于条件密度估计的工具

Python中用于条件密度估计的工具,python,kernel-density,probability-density,Python,Kernel Density,Probability Density,我有一个大型数据集,每行包含3个属性:a、B、C 列A:可以取值1、2和0。 B列和C列:可以接受任何值 我想使用p(A=2 | B,C)的直方图执行密度估计,并使用python绘制结果 我不需要代码来做这件事,我可以试着自己去想。我只需要知道我应该使用的程序和工具 要回答您的所有问题,我们应该通过不同的步骤回答不同的问题: 如何读取csv文件(或文本数据) 如何过滤数据 如何绘制数据 在每个阶段,你都需要使用一些技术和特定的工具,在不同的阶段你也可能有不同的选择(你可以在互联网上寻找不同的

我有一个大型数据集,每行包含3个属性:a、B、C

列A:可以取值1、2和0。 B列和C列:可以接受任何值

我想使用p(A=2 | B,C)的直方图执行密度估计,并使用python绘制结果


我不需要代码来做这件事,我可以试着自己去想。我只需要知道我应该使用的程序和工具

要回答您的所有问题,我们应该通过不同的步骤回答不同的问题:

  • 如何读取csv文件(或文本数据)

  • 如何过滤数据

  • 如何绘制数据

在每个阶段,你都需要使用一些技术和特定的工具,在不同的阶段你也可能有不同的选择(你可以在互联网上寻找不同的选择)

1-如何读取csv文件:

有一个内置的函数可以遍历存储数据的csv文件。但是大多数人建议处理csv文件

之后,您可以使用命令读取csv文件

由于您没有共享csv文件,我将创建一个随机数据集来解释接下来的步骤

import pandas as pd
import numpy as np

t= [1,1,1,2,0,1,1,0,0,2,1,1,2,0,0,0,0,1,1,1]
df = pd.DataFrame(np.random.randn(20, 2), columns=list('AC'))
df['B']=t  #put a random column with only 0,1,2 values, then insert it to the dataframe
注意:是一个python包。处理数学运算很有帮助。你基本上不需要它,但我提到它是为了澄清这里的混乱

如果您在本例中打印df,您将得到以下结果:

         A         C    B
0  -0.090162  0.035458  1
1   2.068328 -0.357626  1
2  -0.476045 -1.217848  1
3  -0.405150 -1.111787  2
4   0.502283  1.586743  0
5   1.822558 -0.398833  1
6   0.367663  0.305023  1
7   2.731756  0.563161  0
8   2.096459  1.323511  0
9   1.386778 -1.774599  2
10 -0.512147 -0.677339  1
11 -0.091165  0.587496  1
12 -0.264265  1.216617  2
13  1.731371 -0.906727  0
14  0.969974  1.305460  0
15 -0.795679 -0.707238  0
16  0.274473  1.842542  0
17  0.771794 -1.726273  1
18  0.126508 -0.206365  1
19  0.622025 -0.322115  1
2--如何过滤数据: 有不同的技术来过滤数据。最简单的方法是选择dataframe中的列名+条件。在我们的例子中,标准是选择B列中的值“2”

l= df[df['B']==2]
print l
您还可以使用其他方式,如groupby、lambda来遍历数据帧,并应用不同的条件来过滤数据

for key in df.groupby('B'):
    print key 
如果运行上述脚本,您将获得:

对于第一个:只有B==2的数据

           A         C  B
3  -0.405150 -1.111787  2
9   1.386778 -1.774599  2
12 -0.264265  1.216617  2
对于第二个:打印分组的结果

(0,            A         C  B
4   0.502283  1.586743  0
7   2.731756  0.563161  0
8   2.096459  1.323511  0
13  1.731371 -0.906727  0
14  0.969974  1.305460  0
15 -0.795679 -0.707238  0
16  0.274473  1.842542  0)
(1,            A         C  B
0  -0.090162  0.035458  1
1   2.068328 -0.357626  1
2  -0.476045 -1.217848  1
5   1.822558 -0.398833  1
6   0.367663  0.305023  1
10 -0.512147 -0.677339  1
11 -0.091165  0.587496  1
17  0.771794 -1.726273  1
18  0.126508 -0.206365  1
19  0.622025 -0.322115  1)
(2,            A         C  B
3  -0.405150 -1.111787  2
9   1.386778 -1.774599  2
12 -0.264265  1.216617  2)
  • 如何绘制数据:
绘制数据的最简单方法是使用

在B列中绘制数据的最简单方法是运行:

import random
import matplotlib.pyplot as plt

xbins=range(0,len(l))
plt.hist(df.B, bins=20, color='blue')
plt.show()
您将得到以下结果:

         A         C    B
0  -0.090162  0.035458  1
1   2.068328 -0.357626  1
2  -0.476045 -1.217848  1
3  -0.405150 -1.111787  2
4   0.502283  1.586743  0
5   1.822558 -0.398833  1
6   0.367663  0.305023  1
7   2.731756  0.563161  0
8   2.096459  1.323511  0
9   1.386778 -1.774599  2
10 -0.512147 -0.677339  1
11 -0.091165  0.587496  1
12 -0.264265  1.216617  2
13  1.731371 -0.906727  0
14  0.969974  1.305460  0
15 -0.795679 -0.707238  0
16  0.274473  1.842542  0
17  0.771794 -1.726273  1
18  0.126508 -0.206365  1
19  0.622025 -0.322115  1

如果你想把结果组合起来,你应该使用不同的颜色/技术使其有用

import numpy as np
import matplotlib.pyplot as plt
a = df.A
b = df.B
c = df.C
t= range(20)
plt.plot(t, a, 'r--',  b, 'bs--', c, 'g^--')
plt.legend()
plt.show()
因此,您将得到:


绘图数据由特定需求驱动。通过以下示例,您可以探索绘制数据的不同方法

要回答您的所有问题,我们应该通过不同的步骤回答不同的问题:

  • 如何读取csv文件(或文本数据)

  • 如何过滤数据

  • 如何绘制数据

在每个阶段,你都需要使用一些技术和特定的工具,在不同的阶段你也可能有不同的选择(你可以在互联网上寻找不同的选择)

1-如何读取csv文件:

有一个内置的函数可以遍历存储数据的csv文件。但是大多数人建议处理csv文件

之后,您可以使用命令读取csv文件

由于您没有共享csv文件,我将创建一个随机数据集来解释接下来的步骤

import pandas as pd
import numpy as np

t= [1,1,1,2,0,1,1,0,0,2,1,1,2,0,0,0,0,1,1,1]
df = pd.DataFrame(np.random.randn(20, 2), columns=list('AC'))
df['B']=t  #put a random column with only 0,1,2 values, then insert it to the dataframe
注意:是一个python包。处理数学运算很有帮助。你基本上不需要它,但我提到它是为了澄清这里的混乱

如果您在本例中打印df,您将得到以下结果:

         A         C    B
0  -0.090162  0.035458  1
1   2.068328 -0.357626  1
2  -0.476045 -1.217848  1
3  -0.405150 -1.111787  2
4   0.502283  1.586743  0
5   1.822558 -0.398833  1
6   0.367663  0.305023  1
7   2.731756  0.563161  0
8   2.096459  1.323511  0
9   1.386778 -1.774599  2
10 -0.512147 -0.677339  1
11 -0.091165  0.587496  1
12 -0.264265  1.216617  2
13  1.731371 -0.906727  0
14  0.969974  1.305460  0
15 -0.795679 -0.707238  0
16  0.274473  1.842542  0
17  0.771794 -1.726273  1
18  0.126508 -0.206365  1
19  0.622025 -0.322115  1
2--如何过滤数据: 有不同的技术来过滤数据。最简单的方法是选择dataframe中的列名+条件。在我们的例子中,标准是选择B列中的值“2”

l= df[df['B']==2]
print l
您还可以使用其他方式,如groupby、lambda来遍历数据帧,并应用不同的条件来过滤数据

for key in df.groupby('B'):
    print key 
如果运行上述脚本,您将获得:

对于第一个:只有B==2的数据

           A         C  B
3  -0.405150 -1.111787  2
9   1.386778 -1.774599  2
12 -0.264265  1.216617  2
对于第二个:打印分组的结果

(0,            A         C  B
4   0.502283  1.586743  0
7   2.731756  0.563161  0
8   2.096459  1.323511  0
13  1.731371 -0.906727  0
14  0.969974  1.305460  0
15 -0.795679 -0.707238  0
16  0.274473  1.842542  0)
(1,            A         C  B
0  -0.090162  0.035458  1
1   2.068328 -0.357626  1
2  -0.476045 -1.217848  1
5   1.822558 -0.398833  1
6   0.367663  0.305023  1
10 -0.512147 -0.677339  1
11 -0.091165  0.587496  1
17  0.771794 -1.726273  1
18  0.126508 -0.206365  1
19  0.622025 -0.322115  1)
(2,            A         C  B
3  -0.405150 -1.111787  2
9   1.386778 -1.774599  2
12 -0.264265  1.216617  2)
  • 如何绘制数据:
绘制数据的最简单方法是使用

在B列中绘制数据的最简单方法是运行:

import random
import matplotlib.pyplot as plt

xbins=range(0,len(l))
plt.hist(df.B, bins=20, color='blue')
plt.show()
您将得到以下结果:

         A         C    B
0  -0.090162  0.035458  1
1   2.068328 -0.357626  1
2  -0.476045 -1.217848  1
3  -0.405150 -1.111787  2
4   0.502283  1.586743  0
5   1.822558 -0.398833  1
6   0.367663  0.305023  1
7   2.731756  0.563161  0
8   2.096459  1.323511  0
9   1.386778 -1.774599  2
10 -0.512147 -0.677339  1
11 -0.091165  0.587496  1
12 -0.264265  1.216617  2
13  1.731371 -0.906727  0
14  0.969974  1.305460  0
15 -0.795679 -0.707238  0
16  0.274473  1.842542  0
17  0.771794 -1.726273  1
18  0.126508 -0.206365  1
19  0.622025 -0.322115  1

如果你想把结果组合起来,你应该使用不同的颜色/技术使其有用

import numpy as np
import matplotlib.pyplot as plt
a = df.A
b = df.B
c = df.C
t= range(20)
plt.plot(t, a, 'r--',  b, 'bs--', c, 'g^--')
plt.legend()
plt.show()
因此,您将得到:


绘图数据由特定需求驱动。通过以下示例,您可以探索绘制数据的不同方法

如果您正在寻找比使用直方图进行非参数密度估计更复杂的工具,请将其检查到python存储库,或者直接使用安装包

pip install cde
除了大量文档之外,该包还实现

  • 非参数(条件和邻域核密度估计)
  • 半参数(最小二乘cde)和
  • 基于参数神经网络的方法(混合密度网络、核密度估计)
此外,该软件包允许计算中心矩、统计差异(kl差异、hellinger、jensen-shannon)、百分位数、预期短缺和数据生成过程(arma跳跃、跳跃扩散、GMMs等)


免责声明:我是软件包开发人员之一。

如果您正在寻找比直方图非参数密度估计更复杂的工具,请将其检查到python存储库,或直接使用

pip install cde
除了大量文档之外,该包还实现