n维迭代比例拟合

ipfn的Python项目详细描述


迭代比例拟合是一种在许多不同领域(如经济学或社会科学)中使用的算法,其改变结果的方式是,沿着一个或多个维度的聚合与已知的边缘(或沿着这些相同维度的聚合)相匹配该算法有两个版本:


*numpy版本,是迄今为止速度最快的
*pandas版本,它比numpy版本慢得多,但使用起来更简单



E问题。要安装程序包:

*pip install ipfn
*pip install git+http://github.com/dirguis/ipfn@master

说明方法和指向特定示例的链接<;http://www.demog.berkeley.edu/~eddieh/ipfdescription/akdolwdipftwod.pdf>;`
*https://github.com/dirguis/ipfn

----


如果要测试包,请克隆repo并从主文件夹运行:

*py.test--verbose--color=yes tests/tests.py

--


该项目与r可用的ipfp包类似,并且已运行测试以确保相同的结果。

--


*输入变量:
*原始:要在其上执行ipfn的numpy darray矩阵或数据帧。
*aggregates:numpy数组或darray或pandas数据帧/序列的列表。聚合与边距相同。
它们是沿一个或多个轴聚合时,我们希望沿一个或多个轴聚合的目标值。
*维度:如果使用numpy对象,则为整数列表;如果使用pandas对象,则为列名列表。
保留我们求和得到相应聚集的d维。
*收敛速度:如果有许多聚集/边缘,可以放宽收敛条件。
*最大迭代:整数。允许的最大迭代次数。
*详细:整数0、1或2。每个案例号都包含前一个案例号的输出。

*0:返回更新的矩阵。

*1:输出状态的标志(0表示失败,1表示成功)。

*2:在所有步骤都包含迭代号和收敛速度信息的数据帧。

*速率公差:浮点值。如果高于0.0,如0.001,则当连续两次迭代的conv_rate变量之间的差值低于指定值时,算法将停止。

在下面运行包。除了下面列出的示例外,ipfn.py脚本中还列出了其他几个示例。这个例子取自`<;http://www.demog.berkeley.edu/~eddieh/ipfdescription/akdolwdipfthreed.pdf>;`

以NP形式进口新的进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫作为进口大熊猫的0,0,0,0,0,0,1]=2<0 0 0,0,1]>m[0,0,0,0,1]=2
>m[0,0,0,0,1]=2<0 0,0,0,1]>m[0,0,0,0,0,1]=2
>m[0,0,0,0,0,0,1]=2,2 2 br/>m[0,2,2]=2
m[0,3,0]=1
m[0,3,1] = 7
m[0,3,2] = 2
m[1,0,0] = 5
m[1,0,1] = 4
m[1,0,2] = 2
m[1,1,0] = 5
m[1,1,1] = 5
m[1,1,2] = 5
m[1,2,0] = 3
m[1,2,1] = 8
m[1,2,2] = 7
m[1,3,0] = 2
m[1,3,1] = 7
m[1,3,2] = 6

Now,让我们定义一些边界:

xpjp=np.array([20,30,35,15])
xppk=np.array([35,40,25])
xijp=np.array([[9,17,19,7],[11,13,16,8]])
xpjk=n p.数组([[7,9,4],[8,12,10],[15,12,8],[5,7,3]])


沿着第一个维度将由两个元素组成。我们希望维度2和维度3中m元素的和等于边缘:

m[1,:,:].sum()==xipp[1]


k,xijp,xpjk]
维度=[[0],[1],[2],[0,1],[1,2]]


最后,运行算法::


ipf=ipfn.ipfn(m,聚集,维度)
m=ipf.iteration()
打印(xijp[0,0])
打印(m[0,0,:].sum())



————
以同样的方式,我们可以运行一个类似的示例,但是使用一个数据帧:

_l = [501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501,
502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502]
size_l = [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4,
1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]

age_l = ['20-25','30-35','40-45',
'20-25','30-35','40-45',
‘20-25’、‘30-35’、‘40-45’、‘40-45’、‘20-25’、‘30-35’、‘30-35’、‘30-35’、‘30-35’、‘30-35’、‘40-45’、‘20-25’、‘30-25’、‘30-35’、‘30-35’、‘40-45’、‘40-45’、‘40-25’、‘20-25’、‘30-35’、‘20-25’、‘20-25’、‘20-25’、‘30-25’、‘30-25’、‘30-25’、‘40-45’、‘30-25’、‘30-45’、‘30-45’、‘40-45’、‘40-45’、‘40-45’、‘40-dma']=dma l
df['size']=size l
df['age']=年龄
df['total']=m

xpp=df.groupby('dma')['total'].sum()
xpjp=df.groupby('size')['total'].sum()
xppk=df.groupby('age')['total'].sum()
xjp=df.groupby(['dma','size']].groupby(['dma','size'''].groupby(['dma','size''''''size''''''''''].sum'].sum()=br/>xpsum()
xppk=df.groupby('age')['total']因此,

xpp.loc[501]=52
xpp.loc[502]=48

>xpp.loc[1]=20
>xpp.loc[2]=30
>xpp.loc[3]=35
>xpp.loc[4]=15


>xpk.loc['20-25']=35
>xpk.loc['30-35']=40
>xpp.loc['40-45']=25=25
>xpk

xijp.loc[501]=[9,17,19,7]
xijp.loc[502]=[11,13,16


>xpjk.loc[1]=[7,9,4]
>xpjk.loc[2]=[8,12,10]
>xpjk.loc[3]=[15,12,8]
>xpjk.loc[4]=[5,7,3]






>聚合=[xipp,xpjp,xppk,xijp,xijp,xpjp,xpjj,xpjk]
>维度=[[[[[['dma'],['size'],['age'],['dma','size']],['dma,size']]],[[["尺寸","年龄"]

df=ipf.iteration()

print(df)
print(df.groupby('size')['total'].sum(),xpjp)


添加了注释:
----


要在程序中调用算法,请从ipfn import ipfn执行::



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在Spring Boot 2.2.0中添加弹性搜索?   jakarta ee如何在没有java认证的情况下停止直接访问网页(自定义标记)   java Hibernate:使用executeUpdate()的批删除未清除一级缓存   java如何在Hibernate中插入外键定义为Long的实体?   带参数的java Mockito单元测试计算器方法   java如何从Rally Rest API读取集合属性   java如何对基于消息的处理执行集成测试?   带插入排序的java排序字符串数组标记,双链表   java为什么在基于注释的Spring app@Value默认值中解析为null?   java Apache Commons Http客户端注册特定于客户端的协议   如何使用java反转字符串中n个部分的n个字符   java Tomcat在本地主机上运行良好,但在部署时出现内部服务器错误   使用信号量的变量的java结果   Java编译/运行时类路径问题   java哪个提供商负责AES/CTR/NOP添加?   伪错误解码器中的java响应未获取Zalando问题自定义属性