1.1 前言
本次项目来源于阿里云天池,赛事由开源学习组织Datawhale主办。
主要带领学习者利用Python进行数据分析以及数据可视化。
包含数据集的处理、数据探索与清晰、数据分析、数据可视化四部分,利用pandas、matplotlib、wordcloud等第三方库。
学习赛事地址:https://tianchi.aliyun.com/competition/entrance/531837/introduction
1.2 数据集来源介绍
所有候选人信息
该文件为每个候选人提供一份记录,并显示候选人的信息、总收入、从授权委员会收到的转账、付款总额、给授权委员会的转账、库存现金总额、贷款和债务以及其他财务汇总信息。
数据字段描述详细:https://www.fec.gov/campaign-finance-data/all-candidates-file-description/
关键字段说明
CAND_ID 候选人ID
CAND_NAME 候选人姓名
CAND_PTY_AFFILIATION 候选人党派
数据来源:https://www.fec.gov/files/bulk-downloads/2020/weball20.zip
候选人委员会链接信息
该文件显示候选人的身份证号码、候选人的选举年份、联邦选举委员会选举年份、委员会识别号、委员会类型、委员会名称和链接标识号。
信息描述详细:https://www.fec.gov/campaign-finance-data/candidate-committee-linkage-file-description/
关键字段说明
CAND_ID 候选人ID
CAND_ELECTION_YR 候选人选举年份
CMTE_ID 委员会ID
数据来源:https://www.fec.gov/files/bulk-downloads/2020/ccl20.zip
个人捐款档案信息 【注意】由于文件较大,本数据集只包含2020.7.22-2020.8.20的相关数据,如果需要更全数据可以通过数据来源中的地址下载。
该文件包含有关收到捐款的委员会、披露捐款的报告、提供捐款的个人、捐款日期、金额和有关捐款的其他信息。
信息描述详细:https://www.fec.gov/campaign-finance-data/contributions-individuals-file-description/
关键字段说明
CMTE_ID 委员会ID
NAME 捐款人姓名
CITY 捐款人所在市
State 捐款人所在州
EMPLOYER 捐款人雇主/公司
OCCUPATION 捐款人职业
数据来源:https://www.fec.gov/files/bulk-downloads/2020/indiv20.zip
1.3 需要提前安装的包
在cmd的命令行中下载:
安装词云处理包wordcloud
pip install wordcloud --user
2、数据处理
进行数据处理前,我们需要知道我们最终想要的数据是什么样的,因为我们是想分析候选人与捐赠人之间的关系,所以我们想要一张数据表中有捐赠人与候选人一一对应的关系,所以需要将目前的三张数据表进行一一关联,汇总到需要的数据。
`
2.1 将委员会和候选人一一对应,通过CAND_ID关联两个表
由于候选人和委员会的联系表中无候选人姓名,只有候选人ID(CAND_ID),所以需要通过CAND_ID从候选人表中获取到候选人姓名,最终得到候选人与委员会联系表ccl。
# 导入相关处理包
import pandas as pd
# 读取候选人信息,由于原始数据没有表头,需要添加表头
candidates = pd.read_csv("weball20.txt", sep = '|',names=['CAND_ID','CAND_NAME','CAND_ICI','PTY_CD','CAND_PTY_AFFILIATION','TTL_RECEIPTS',
'TRANS_FROM_AUTH','TTL_DISB','TRANS_TO_AUTH','COH_BOP','COH_COP','CAND_CONTRIB',
'CAND_LOANS','OTHER_LOANS','CAND_LOAN_REPAY','OTHER_LOAN_REPAY','DEBTS_OWED_BY',
'TTL_INDIV_CONTRIB','CAND_OFFICE_ST','CAND_OFFICE_DISTRICT','SPEC_ELECTION','PRIM_ELECTION','RUN_ELECTION'
,'GEN_ELECTION','GEN_ELECTION_PRECENT','OTHER_POL_CMTE_CONTRIB','POL_PTY_CONTRIB',
'CVG_END_DT','INDIV_REFUNDS','CMTE_REFUNDS'])
# 读取候选人和委员会的联系信息
ccl = pd.read_csv("ccl.txt", sep = '|',names=[