用Pandas揭秘美国选民的总统喜好【天池比赛】

本文记录了一次阿里云Python比赛中关于美国选民捐款数据分析的过程,涉及数据清洗、关联、探索和可视化。通过Pandas处理候选人、委员会和捐赠人数据,揭示了捐赠趋势和热门候选人在各州的支持情况。
摘要由CSDN通过智能技术生成

此项目为参加阿里云Python比赛记录,供个人学习!!!!

1、赛前准备

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 需要提前安装的包
# 安装词云处理包wordcloud
!pip install wordcloud --user
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Requirement already satisfied: wordcloud in /data/nas/workspace/envs/python3.6/site-packages (1.8.1)
Requirement already satisfied: numpy>=1.6.1 in /opt/conda/lib/python3.6/site-packages (from wordcloud) (1.19.4)
Requirement already satisfied: matplotlib in /opt/conda/lib/python3.6/site-packages (from wordcloud) (3.3.3)
Requirement already satisfied: pillow in /opt/conda/lib/python3.6/site-packages (from wordcloud) (8.0.1)
Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.6/site-packages (from matplotlib->wordcloud) (1.2.0)
Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.6/site-packages (from matplotlib->wordcloud) (0.10.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in /opt/conda/lib/python3.6/site-packages (from matplotlib->wordcloud) (2.4.7)
Requirement already satisfied: python-dateutil>=2.1 in /opt/conda/lib/python3.6/site-packages (from matplotlib->wordcloud) (2.8.1)
Requirement already satisfied: six in /opt/conda/lib/python3.6/site-packages (from cycler>=0.10->matplotlib->wordcloud) (1.15.0)
1.4 需要提前下载好数据集

【注意】如果你只是在天池技术圈看到本文,你需要先查看赛事指南
通过赛事指南提示操作你可以成功Fork赛事论坛的baseline到你的天池实验室,并点击编辑按钮成功跳转到了DSW在线编程。
在进行数据处理前,你需要点击DSW左侧天池tab,下载本案例数据集2020_US_President_political_contributions,后续步骤才能正确执行。

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=['CAND_ID','CAND_ELECTION_YR','FEC_ELECTION_YR','CMTE_ID','CMTE_TP','CMTE_DSGN','LINKAGE_ID'])
# 关联两个表数据
ccl = pd.merge(ccl,candidates)
# 提取出所需要的列
ccl = pd.DataFrame(ccl, columns=[ 'CMTE_ID','CAND_ID', 'CAND_NAME','CAND_PTY_AFFILIATION'])

数据字段说明:

  • CMTE_ID:委员会ID
  • CAND_ID:候选人ID
  • CAND_NAME:候选人姓名
  • CAND_PTY_AFFILIATION:候选人党派
# 查看目前ccl数据前10行
ccl.head(10)
CMTE_ID CAND_ID CAND_NAME CAND_PTY_AFFILIATION
0 C00697789 H0AL01055 CARL, JERRY LEE, JR REP
1 C00701557 H0AL01063 LAMBERT, DOUGLAS WESTLEY III REP
2 C00701409 H0AL01071 PRINGLE, CHRISTOPHER PAUL REP
3 C00703066 H0AL01089 HIGHTOWER, BILL REP
4 C00708867 H0AL01097 AVERHART, JAMES DEM
5 C00710947 H0AL01105 GARDNER, KIANI A DEM
6 C00722512 H0AL01121 CASTORANI, JOHN REP
7 C00725069 H0AL01139 COLLINS, FREDERICK G. RICK' DEM
8 C00462143 H0AL02087 ROBY, MARTHA REP
9 C00493783 H0AL02087 ROBY, MARTHA REP
2.2 将候选人和捐赠人一一对应,通过CMTE_ID关联两个表

通过CMTE_ID将目前处理好的候选人和委员会关系表与人捐款档案表进行关联,得到候选人与捐赠人一一对应联系表cil

# 读取个人捐赠数据,由于原始数据没有表头,需要添加表头
# 提示:读取本文件大概需要5-10s
itcont = pd.read_csv('itcont_2020_20200722_20200820.txt', sep='|',names=['CMTE_ID','AMNDT_IND','RPT_TP',
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值