Oli*_*man 0 python kernel-density probability-density
我有一个大数据集,每行包含3个属性:A,B,C
列A:可以取值1,2和0.列B和C:可以取任何值.
我想使用直方图对P(A = 2 | B,C)进行密度估计,并使用python绘制结果.
我不需要代码来做它,我可以尝试自己想出来.我只需要知道我应该使用的程序和工具吗?
小智 5
要回答您的全部问题,我们应该采取不同的步骤并回答不同的问题:
如何阅读csv文件(或文本数据)?
如何过滤数据?
如何绘制数据?
在每个阶段,您需要使用一些技术和特定工具,您可能在不同阶段也有不同的选择(您可以在互联网上查找不同的替代方案).
1-如何阅读csv文件:
有一个内置函数可以通过存储数据的csv文件.但大多数人推荐Pandas来处理csv文件.
后安装熊猫包,您可以使用阅读您的CSV文件Read_CSV命令.
import pandas as pd
df= pd.read_csv("file.csv")
Run Code Online (Sandbox Code Playgroud)
由于您没有共享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
Run Code Online (Sandbox Code Playgroud)
注意:Numpy是一个python-Package.使用数学运算很有帮助.你并不是主要需要它,但我提到它可以清除混乱.
如果您在这种情况下打印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
Run Code Online (Sandbox Code Playgroud)
2- - 如何过滤数据:有不同的技术来过滤数据.最简单的方法是选择数据框内的列名称+条件.在我们的例子中,标准是在B列中选择值"2".
l= df[df['B']==2]
print l
Run Code Online (Sandbox Code Playgroud)
您还可以使用其他方式,例如groupby,lambda来遍历数据框并应用不同的条件来过滤数据.
for key in df.groupby('B'):
print key
Run Code Online (Sandbox Code Playgroud)
如果您运行上述脚本,您将获得:
对于第一个:只有B == 2的数据
A C B
3 -0.405150 -1.111787 2
9 1.386778 -1.774599 2
12 -0.264265 1.216617 2
Run Code Online (Sandbox Code Playgroud)
对于第二个:打印结果分组.
(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)
Run Code Online (Sandbox Code Playgroud)
绘制数据的最简单方法是使用matplotlib
在B列中绘制数据的最简单方法是运行:
import random
import matplotlib.pyplot as plt
xbins=range(0,len(l))
plt.hist(df.B, bins=20, color='blue')
plt.show()
Run Code Online (Sandbox Code Playgroud)
你会得到这个结果:
如果你想绘制结果,你应该使用不同的颜色/技术使其有用.
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()
Run Code Online (Sandbox Code Playgroud)
你会得到结果:
绘制数据是由特定需求驱动的.您可以通过浏览marplotlib.org官方网站的示例来探索绘制数据的不同方法.