python分析奥巴马资金来源

Python012

python分析奥巴马资金来源,第1张

奥巴马的竞选资金是一点点从选民那里募集来的。如获党内提名,可得政府拔款,但也没多少。美国大选不仅禁外国人捐款,而且禁止公司机构捐款,而只允许个人捐款。不仅如此,还为个人捐款限制了上限,防止富人捐过多的款而影响未来的公平执政。

不仅富人自己不能多捐,如果某个老板呼吁自己的员工给某人捐钱或投票支持他,都是犯法的。因此,想要筹到几千万竞争资金,唯一的办法是争取更多选民支持,一点点募集。所以,中国、公司、大笔捐款,这三条都是犯法的。

我记得以前已经有华人闹过这种丑闻了。美国的选举法就是要严防少数人企图用几个臭钱影响美国的政治。所以我们作为外国人就更别去自讨没趣了。

导入包

In [1]:

import numpy as npimport pandas as pdfrom pandas import Series,DataFrame

方便大家操作,将月份和参选人以及所在政党进行定义

In [2]:

months = {'JAN' : 1, 'FEB' : 2, 'MAR' : 3, 'APR' : 4, 'MAY' : 5, 'JUN' : 6, 'JUL' : 7, 'AUG' : 8, 'SEP' : 9, 'OCT': 10, 'NOV': 11, 'DEC' : 12}of_interest = ['Obama, Barack', 'Romney, Mitt', 'Santorum, Rick','Paul, Ron', 'Gingrich, Newt']parties = { 'Bachmann, Michelle': 'Republican', 'Romney, Mitt': 'Republican', 'Obama, Barack': 'Democrat', "Roemer, Charles E. 'Buddy' III": 'Reform', 'Pawlenty, Timothy': 'Republican', 'Johnson, Gary Earl': 'Libertarian', 'Paul, Ron': 'Republican', 'Santorum, Rick': 'Republican', 'Cain, Herman': 'Republican', 'Gingrich, Newt': 'Republican', 'McCotter, Thaddeus G': 'Republican', 'Huntsman, Jon': 'Republican', 'Perry, Rick': 'Republican'}

读取文件

In [3]:

table = pd.read_csv('data/usa_election.txt')table.head()

C:\jupyter\lib\site-packages\IPython\core\interactiveshell.py:2785: DtypeWarning: Columns (6) have mixed types. Specify dtype option on import or set low_memory=False. interactivity=interactivity, compiler=compiler, result=result)

Out[3]:

cmte_id cand_id cand_nm contbr_nm contbr_city contbr_st contbr_zip contbr_employer contbr_occupation contb_receipt_amt contb_receipt_dt receipt_desc memo_cd memo_text form_tp file_num

0 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 250.0 20-JUN-11 NaN NaN NaN SA17A 736166

1 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 50.0 23-JUN-11 NaN NaN NaN SA17A 736166

2 C00410118 P20002978 Bachmann, Michelle SMITH, LANIER LANETT AL 3.68633e 08 INFORMATION REQUESTED INFORMATION REQUESTED 250.0 05-JUL-11 NaN NaN NaN SA17A 749073

3 C00410118 P20002978 Bachmann, Michelle BLEVINS, DARONDA PIGGOTT AR 7.24548e 08 NONE RETIRED 250.0 01-AUG-11 NaN NaN NaN SA17A 749073

4 C00410118 P20002978 Bachmann, Michelle WARDENBURG, HAROLD HOT SPRINGS NATION AR 7.19016e 08 NONE RETIRED 300.0 20-JUN-11 NaN NaN NaN SA17A 736166

In [8]:

#使用map函数 字典,新建一列各个候选人所在党派partytable['party'] = table['cand_nm'].map(parties)table.head()

Out[8]:

cmte_id cand_id cand_nm contbr_nm contbr_city contbr_st contbr_zip contbr_employer contbr_occupation contb_receipt_amt contb_receipt_dt receipt_desc memo_cd memo_text form_tp file_num party

0 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 250.0 20-JUN-11 NaN NaN NaN SA17A 736166 Republican

1 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 50.0 23-JUN-11 NaN NaN NaN SA17A 736166 Republican

2 C00410118 P20002978 Bachmann, Michelle SMITH, LANIER LANETT AL 3.68633e 08 INFORMATION REQUESTED INFORMATION REQUESTED 250.0 05-JUL-11 NaN NaN NaN SA17A 749073 Republican

3 C00410118 P20002978 Bachmann, Michelle BLEVINS, DARONDA PIGGOTT AR 7.24548e 08 NONE RETIRED 250.0 01-AUG-11 NaN NaN NaN SA17A 749073 Republican

4 C00410118 P20002978 Bachmann, Michelle WARDENBURG, HAROLD HOT SPRINGS NATION AR 7.19016e 08 NONE RETIRED 300.0 20-JUN-11 NaN NaN NaN SA17A 736166 Republican

In [10]:

#party这一列中有哪些元素table['party'].unique()

Out[10]:

array(['Republican', 'Democrat', 'Reform', 'Libertarian'], dtype=object)

In [ ]:

#使用value_counts()函数,统计party列中各个元素出现次数,value_counts()是Series中的,无参,返回一个带有每个元素出现次数的Series

In [11]:

table['party'].value_counts()

Out[11]:

Democrat 292400Republican 237575Reform 5364Libertarian 702Name: party, dtype: int64

In [12]:

#使用groupby()函数,查看各个党派收到的政治献金总数contb_receipt_amttable.groupby(by='party')['contb_receipt_amt'].sum()

Out[12]:

partyDemocrat 8.105758e 07Libertarian4.132769e 05Reform 3.390338e 05Republican 1.192255e 08Name: contb_receipt_amt, dtype: float64

In [13]:

#查看具体每天各个党派收到的政治献金总数contb_receipt_amt 。使用groupby([多个分组参数])table.groupby(by=['party','contb_receipt_dt'])['contb_receipt_amt'].sum()

Out[13]:

party contb_receipt_dtDemocrat01-AUG-11175281.0001-DEC-11651532.8201-JAN-12 58098.8001-JUL-11165961.0001-JUN-11145459.0001-MAY-11 82644.0001-NOV-11122529.8701-OCT-11148977.0001-SEP-11403297.6202-AUG-11164510.1102-DEC-11216056.9602-JAN-12 89743.6002-JUL-11 17105.0002-JUN-11422453.0002-MAY-11396675.0002-NOV-11147183.8102-OCT-11 62605.6202-SEP-11137948.4103-AUG-11147053.0203-DEC-11 81304.0203-JAN-12 87406.9703-JUL-11 5982.0003-JUN-11320176.2003-MAY-11261819.1103-NOV-11119304.5603-OCT-11363061.0203-SEP-11 45598.0004-APR-11640235.1204-AUG-11598784.2304-DEC-11 72795.10 ...Republican 29-AUG-11941769.2329-DEC-11428501.4229-JAN-11 750.0029-JAN-12 75220.0229-JUL-11233423.3529-JUN-11 1340704.2929-MAR-11 38875.0029-MAY-11 8363.2029-NOV-11407322.6429-OCT-11 81924.0129-SEP-11 1612794.5230-APR-11 43004.8030-AUG-11915548.5830-DEC-11492470.4530-JAN-12255204.8030-JUL-11 12249.0430-JUN-11 2744932.6330-MAR-11 50240.0030-MAY-11 17803.6030-NOV-11809014.8330-OCT-11 43913.1630-SEP-11 4886331.7631-AUG-11 1017735.0231-DEC-11 1094376.7231-JAN-11 6000.0031-JAN-12869890.4131-JUL-11 12781.0231-MAR-11 62475.0031-MAY-11301339.8031-OCT-11734601.83Name: contb_receipt_amt, Length: 1183, dtype: float64

In [14]:

def trasform_date(d):day,month,year = d.split('-')month = months[month]return "20" year '-' str(month) '-' day

In [17]:

#将表中日期格式转换为'yyyy-mm-dd'。日期格式,通过函数加map方式进行转换table['contb_receipt_dt'] = table['contb_receipt_dt'].apply(trasform_date)

In [18]:

table.head()

Out[18]:

cmte_id cand_id cand_nm contbr_nm contbr_city contbr_st contbr_zip contbr_employer contbr_occupation contb_receipt_amt contb_receipt_dt receipt_desc memo_cd memo_text form_tp file_num party

0 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 250.0 2011-6-20 NaN NaN NaN SA17A 736166 Republican

1 C00410118 P20002978 Bachmann, Michelle HARVEY, WILLIAM MOBILE AL 3.6601e 08 RETIRED RETIRED 50.0 2011-6-23 NaN NaN NaN SA17A 736166 Republican

2 C00410118 P20002978 Bachmann, Michelle SMITH, LANIER LANETT AL 3.68633e 08 INFORMATION REQUESTED INFORMATION REQUESTED 250.0 2011-7-05 NaN NaN NaN SA17A 749073 Republican

3 C00410118 P20002978 Bachmann, Michelle BLEVINS, DARONDA PIGGOTT AR 7.24548e 08 NONE RETIRED 250.0 2011-8-01 NaN NaN NaN SA17A 749073 Republican

4 C00410118 P20002978 Bachmann, Michelle WARDENBURG, HAROLD HOT SPRINGS NATION AR 7.19016e 08 NONE RETIRED 300.0 2011-6-20 NaN NaN NaN SA17A 736166 Republican

In [19]:

#查看老兵(捐献者职业)DISABLED VETERAN主要支持谁 :查看老兵们捐赠给谁的钱最多table['contbr_occupation'] == 'DISABLED VETERAN'

Out[19]:

0 False1 False2 False3 False4 False5 False6 False7 False8 False9 False10False11False12False13False14False15False16False17False18False19False20False21False22False23False24False25False26False27False28False29False ... 536011False536012False536013False536014False536015False536016False536017False536018False536019False536020False536021False536022False536023False536024False536025False536026False536027False536028False536029False536030False536031False536032False536033False536034False536035False536036False536037False536038False536039False536040FalseName: contbr_occupation, Length: 536041, dtype: bool

In [21]:

old_bing_df = table.loc[table['contbr_occupation'] == 'DISABLED VETERAN']

In [22]:

old_bing_df.groupby(by='cand_nm')['contb_receipt_amt'].sum()

Out[22]:

cand_nmCain, Herman 300.00Obama, Barack 4205.00Paul, Ron 2425.49Santorum, Rick 250.00Name: contb_receipt_amt, dtype: float64

In [23]:

table['contb_receipt_amt'].max()

Out[23]:

1944042.43

In [24]:

#找出候选人的捐赠者中,捐赠金额最大的人的职业以及捐献额 .通过query("查询条件来查找捐献人职业")table.query('contb_receipt_amt == 1944042.43')

Out[24]:

cmte_id cand_id cand_nm contbr_nm contbr_city contbr_st contbr_zip contbr_employer contbr_occupation contb_receipt_amt contb_receipt_dt receipt_desc memo_cd memo_text form_tp file_num party

176127 C00431445 P80003338 Obama, Barack OBAMA VICTORY FUND 2012 - UNITEMIZED CHICAGO IL 60680 NaN NaN 1944042.43 2011-12-31 NaN X * SA18 763233 Democrat

来源:https://www.icode9.com/content-1-497751.html

在一定的范围内,无论物体是大还是小,人眼都可以分辨出来。然而计算机要有相同的能力却不是那么的容易,在未知的场景中,计算机视觉并不能提供物体的尺度大小,其中的一种方法是把物体不同尺度下的图像都提供给机器,让机器能够对物体在不同的尺度下有一个统一的认知。在建立统一认知的过程中,要考虑的就是在图像在不同的尺度下都存在的特征点。

在早期图像的多尺度通常使用图像金字塔表示形式。图像金字塔是同一图像在不同的分辨率下得到的一组结果其生成过程一般包括两个步骤:

多分辨率的图像金字塔虽然生成简单,但其本质是降采样,图像的局部特征则难以保持,也就是无法保持特征的尺度不变性。

我们还可以通过图像的模糊程度来模拟人在距离物体由远到近时物体在视网膜上成像过程,距离物体越近其尺寸越大图像也越模糊,这就是高斯尺度空间,使用不同的参数模糊图像(分辨率不变),是尺度空间的另一种表现形式。

构建尺度空间的目的是为了检测出在不同的尺度下都存在的特征点,而检测特征点较好的算子是Δ^2G(高斯拉普拉斯,LoG)

使用LoG虽然能较好的检测到图像中的特征点,但是其运算量过大,通常可使用DoG(差分高斯,Difference of Gaussina)来近似计算LoG。

从上式可以知道,将相邻的两个高斯空间的图像相减就得到了DoG的响应图像。为了得到DoG图像,先要构建高斯尺度空间,而高斯的尺度空间可以在图像金字塔降采样的基础上加上高斯滤波得到,也就是对图像金字塔的每层图像使用不同的参数σ进行高斯模糊,使每层金字塔有多张高斯模糊过的图像。

如下图,octave间是降采样关系,且octave(i+1)的第一张(从下往上数)图像是由octave(i)中德倒数第三张图像降采样得到。octave内的图像大小一样,只是高斯模糊使用的尺度参数不同。

对于一幅图像,建立其在不同尺度scale下的图像,也称为octave,这是为了scale-invariant,也就是在任何尺度都能有对应的特征点。下图中右侧的DoG就是我们构建的尺度空间。

为了寻找尺度空间的极值点,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如图所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。下图中将叉号点要比较的26个点都标为了绿色。

找到所有特征点后, 要去除低对比度和不稳定的边缘效应的点 ,留下具有代表性的关键点(比如,正方形旋转后变为菱形,如果用边缘做识别,4条边就完全不一样,就会错误;如果用角点识别,则稳定一些)。去除这些点的好处是增强匹配的抗噪能力和稳定性。最后,对离散的点做曲线拟合,得到精确的关键点的位置和尺度信息。

近来不断有人改进,其中最著名的有 SURF(计算量小,运算速度快,提取的特征点几乎与SIFT相同)和 CSIFT(彩色尺度特征不变变换,顾名思义,可以解决基于彩色图像的SIFT问题)。

其中sift.detectAndCompute()函数返回kp,des。

上图dog的shape为(481, 500, 3),提取的特征向量des的shape为(501, 128),501个128维的特征点。

该方法可以在特征点处绘制一个小圆圈。

https://blog.csdn.net/happyer88/article/details/45817305

https://www.jianshu.com/p/d94e558ebe26

https://www.cnblogs.com/wangguchangqing/p/4853263.html

这个问题跟image registration很相似 ,其实就是假设图像A和图像B之间存在一个平移(以及旋转)关系 ,使得平移后A和B重合的部分差别最小。

具体到这个问题, 只需要将源图像A和目标图像B都设成输入图像, 然后计算图像差的时候 。算平移后A和B重合的部分就可以了, 这样可以算出来一个平移向量, 有了平移向量之后, 在输入图像上面任意一点开始 ,这个点和他自身加上平移向量得到的点所围成的矩形一定是重复单元。

至于要最小重复单元, 只需要找到最短的平移向量就可以了, 不过需要去掉平凡解(零向量)。

以前看过image registration的东西有个快速的方法可以做到这一点。

先将源图片和目标图片降采样几次, 得到图像金字塔 先对金字塔顶端图片上寻找最佳匹配。 然后将最佳匹配对应的平移旋转参数作为初始估计, 再在下一层级的图像上再次估计 直到最后在原图像上估计。