【天池龙珠计划】Python训练营 Task04 Python数据分析:从0完成一个数据分析实战(利用Pandas分析美国选民总统喜好度)


文章目录

  • 【天池龙珠计划】Python训练营 Task04 Python数据分析:从0完成一个数据分析实战(利用Pandas分析美国选民总统喜好度)
    • 1、赛前准备
      • 1.1 前言
      • 1.2 数据集来源介绍
      • 1.3 需要提前安装的包
      • 1.4 需要提前下载好数据集
    • 2、数据处理
      • 2.1 将委员会和候选人一一对应,通过`CAND_ID`关联两个表
      • 2.2 将候选人和捐赠人一一对应,通过`CMTE_ID`关联两个表
    • 3、数据探索与清洗
    • 4、数据分析
    • 4、数据可视化
      • 4.1 按州总捐款数和总捐款人数柱状图
      • 4.2 各州捐款总人数可视化
      • 4.3 热门候选人拜登在各州的获得的捐赠占比
      • 4.4 总捐最多的候选人捐赠者词云图
      • 4.5 按州总捐款热力地图
      • 4.6 收到捐赠额最多的两位候选人的总捐赠额变化趋势
    • 5、大致流程

有幸参加阿里云天池寒假训练营活动,目前活动已经圆满结束,收获颇丰,仅在此做一些学习笔进记行巩固和继续学习

天池龙珠计划:https://tianchi.aliyun.com/specials/promotion/aicamps?spm=5176.20977230.J_6770933040.1.256d301eHKJSd5https://hao.360.com/?a1004


1、赛前准备

1.1 前言

学习赛事地址: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: pillow in /opt/conda/lib/python3.6/site-packages (from wordcloud) (8.0.1)
Requirement already satisfied: matplotlib in /opt/conda/lib/python3.6/site-packages (from wordcloud) (3.3.3)
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: 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: six in /opt/conda/lib/python3.6/site-packages (from cycler>=0.10->matplotlib->wordcloud) (1.15.0)
[33mWARNING: You are using pip version 20.3.3; however, version 21.0 is available.
You should consider upgrading via the '/opt/conda/bin/python -m pip install --upgrade pip' command.[0m
'''
WARNING: You are using pip version 20.3.3; however, version 21.0 is available.
You should consider upgrading via the '/opt/conda/bin/python -m pip install --upgrade pip' command.
'''
#/opt/conda/bin/python -m pip install--upgrade pip
"\nWARNING: You are using pip version 20.3.3; however, version 21.0 is available.\nYou should consider upgrading via the '/opt/conda/bin/python -m pip install --upgrade pip' command.\n"

1.4 需要提前下载好数据集

下载本案例数据集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','TRANSACTION_PGI','IMAGE_NUM','TRANSACTION_TP','ENTITY_TP','NAME','CITY','STATE','ZIP_CODE','EMPLOYER','OCCUPATION','TRANSACTION_DT','TRANSACTION_AMT','OTHER_ID','TRAN_ID','FILE_NUM','MEMO_CD','MEMO_TEXT','SUB_ID'])
/opt/conda/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3058: DtypeWarning: Columns (10,15,16,18) have mixed types.Specify dtype option on import or set low_memory=False.interactivity=interactivity, compiler=compiler, result=result)
# 将候选人与委员会关系表ccl和个人捐赠数据表itcont合并,通过 CMTE_ID
c_itcont =  pd.merge(ccl,itcont)
# 提取需要的数据列
c_itcont = pd.DataFrame(c_itcont, columns=[ 'CAND_NAME','NAME', 'STATE','EMPLOYER','OCCUPATION','TRANSACTION_AMT', 'TRANSACTION_DT','CAND_PTY_AFFILIATION'])

数据说明

  • CAND_NAME – 接受捐赠的候选人姓名
  • NAME – 捐赠人姓名
  • STATE – 捐赠人所在州
  • EMPLOYER – 捐赠人所在公司
  • OCCUPATION – 捐赠人职业
  • TRANSACTION_AMT – 捐赠数额(美元)
  • TRANSACTION_DT – 收到捐款的日期
  • CAND_PTY_AFFILIATION – 候选人党派
# 查看目前数据前10行
c_itcont.head(10)
CAND_NAME NAME STATE EMPLOYER OCCUPATION TRANSACTION_AMT TRANSACTION_DT CAND_PTY_AFFILIATION
0 MORGAN, JOSEPH DAVID MARTIN, WILLIAM II AZ RETIRED RETIRED 100 7242020 REP
1 MORGAN, JOSEPH DAVID RODRIGUEZ, GERARDO AZ VA HOSPITAL LAB TECH 40 7242020 REP
2 MORGAN, JOSEPH DAVID RODRIGUEZ, GERARDO AZ VA HOSPITAL LAB TECH 40 7312020 REP
3 WOOD, DANIEL HOPKINS, RICHARD AZ POWERS-LEAVITT INSURANCE AGENT 300 8102020 REP
4 WOOD, DANIEL PENDLETON, DIANE AZ UNEMPLOYED NaN 500 8072020 REP
5 WOOD, DANIEL PREVATT, WILLIAM AZ SELF-EMPLOYED DVM 500 7312020 REP
6 WOOD, DANIEL HARDING, DOUG AZ MICROSURE OPERATIONS MANAGER 2800 8102020 REP
7 WOOD, DANIEL HARDING, MARI AZ NaN NaN 1400 8152020 REP
8 WOOD, DANIEL HEDGER, CYNTHIA TX NaN NaN 200 7312020 REP
9 HUANG, PEGGY HUANG - PERSONAL FUNDS, PEGGY CA OFFICE OF THE ATTORNEY GENERAL DEPUTY ATTORNEY GENERAL 2600 7252020 REP

3、数据探索与清洗

进过数据处理部分,我们获得了可用的数据集,现在我们可以利用调用shape属性查看数据的规模,调用info函数查看数据信息,调用describe函数查看数据分布。

# 查看数据规模 多少行 多少列
c_itcont.shape
(756205, 8)
# 查看整体数据信息,包括每个字段的名称、非空数量、字段的数据类型
c_itcont.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 756205 entries, 0 to 756204
Data columns (total 8 columns):#   Column                Non-Null Count   Dtype
---  ------                --------------   ----- 0   CAND_NAME             756205 non-null  object1   NAME                  756205 non-null  object2   STATE                 756160 non-null  object3   EMPLOYER              737413 non-null  object4   OCCUPATION            741294 non-null  object5   TRANSACTION_AMT       756205 non-null  int64 6   TRANSACTION_DT        756205 non-null  int64 7   CAND_PTY_AFFILIATION  756205 non-null  object
dtypes: int64(2), object(6)
memory usage: 51.9+ MB

通过上面的探索我们知道目前数据集的一些基本情况,目前数据总共有756205行,8列,总占用内存51.9+MB,STATEEMPLOYEROCCUPATION有缺失值,另外日期列目前为int64类型,需要进行转换为str类型。

#空值处理,统一填充 NOT PROVIDED
c_itcont['STATE'].fillna('NOT PROVIDED',inplace=True)
c_itcont['EMPLOYER'].fillna('NOT PROVIDED',inplace=True)
c_itcont['OCCUPATION'].fillna('NOT PROVIDED',inplace=True)
# 对日期TRANSACTION_DT列进行处理
c_itcont['TRANSACTION_DT'] = c_itcont['TRANSACTION_DT'] .astype(str)
# 将日期格式改为年月日  7242020
c_itcont['TRANSACTION_DT'] = [i[3:7]+i[0]+i[1:3] for i in c_itcont['TRANSACTION_DT'] ]
# 再次查看数据信息
c_itcont.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 756205 entries, 0 to 756204
Data columns (total 8 columns):#   Column                Non-Null Count   Dtype
---  ------                --------------   ----- 0   CAND_NAME             756205 non-null  object1   NAME                  756205 non-null  object2   STATE                 756205 non-null  object3   EMPLOYER              756205 non-null  object4   OCCUPATION            756205 non-null  object5   TRANSACTION_AMT       756205 non-null  int64 6   TRANSACTION_DT        756205 non-null  object7   CAND_PTY_AFFILIATION  756205 non-null  object
dtypes: int64(1), object(7)
memory usage: 51.9+ MB
# 查看数据前3行
c_itcont.head(3)
CAND_NAME NAME STATE EMPLOYER OCCUPATION TRANSACTION_AMT TRANSACTION_DT CAND_PTY_AFFILIATION
0 MORGAN, JOSEPH DAVID MARTIN, WILLIAM II AZ RETIRED RETIRED 100 2020724 REP
1 MORGAN, JOSEPH DAVID RODRIGUEZ, GERARDO AZ VA HOSPITAL LAB TECH 40 2020724 REP
2 MORGAN, JOSEPH DAVID RODRIGUEZ, GERARDO AZ VA HOSPITAL LAB TECH 40 2020731 REP
# 查看数据表中数据类型的列的数据分布情况
c_itcont.describe()
TRANSACTION_AMT
count 7.562050e+05
mean 1.504307e+02
std 2.320452e+03
min -5.600000e+03
25% 2.000000e+01
50% 3.500000e+01
75% 1.000000e+02
max 1.500000e+06
# 查看单列的数据发布情况
c_itcont['CAND_NAME'].describe()
count                 756205
unique                   312
top       BIDEN, JOSEPH R JR
freq                  507816
Name: CAND_NAME, dtype: object

4、数据分析

# 计算每个党派的所获得的捐款总额,然后排序,取前十位
c_itcont.groupby("CAND_PTY_AFFILIATION").sum().sort_values("TRANSACTION_AMT",ascending=False).head(10)
TRANSACTION_AMT
CAND_PTY_AFFILIATION
DEM 75961730
REP 37170653
IND 328802
LIB 169202
DFL 76825
GRE 18607
NON 11256
UNK 10195
CON 4117
BDY 3250
# 计算每个总统候选人所获得的捐款总额,然后排序,取前十位
c_itcont.groupby("CAND_NAME").sum().sort_values("TRANSACTION_AMT",ascending=False).head(10)
TRANSACTION_AMT
CAND_NAME
BIDEN, JOSEPH R JR 68111142
TRUMP, DONALD J. 16594982
SULLIVAN, DAN 9912465
JACOBS, CHRISTOPHER L. 6939209
BLOOMBERG, MICHAEL R. 3451916
MARKEY, EDWARD J. SEN. 606832
SHAHEEN, JEANNE 505446
KENNEDY, JOSEPH P III 467738
CORNYN, JOHN SEN 345959
FIGLESTHALER, WILLIAM MATTHEW MD 258221

获得捐赠最多的党派有DEM(民主党)REP(共和党),分别对应BIDEN, JOSEPH R JR(拜登)TRUMP, DONALD J.(特朗普),从我们目前分析的2020.7.22-2020.8.20这一个月的数据来看,在选民的捐赠数据中拜登代表的民主党完胜特朗普代表的共和党,由于完整数据量过大,所以没有对所有数据进行汇总分析,因此也不能确定11月大选公布结果就一定是拜登当选

# 查看不同职业的人捐款的总额,然后排序,取前十位
c_itcont.groupby('OCCUPATION').sum().sort_values("TRANSACTION_AMT",ascending=False).head(10)
TRANSACTION_AMT
OCCUPATION
NOT EMPLOYED 24436214
RETIRED 18669950
NOT PROVIDED 5089355
ATTORNEY 4443569
FOUNDER 3519109
PHYSICIAN 3295595
CONSULTANT 1647033
LAWYER 1565976
PROFESSOR 1481260
EXECUTIVE 1467865
# 查看每个职业捐款人的数量
c_itcont['OCCUPATION'].value_counts().head(10)
NOT EMPLOYED    224109
RETIRED         151834
ATTORNEY         19666
NOT PROVIDED     14912
PHYSICIAN        14033
CONSULTANT        8333
PROFESSOR         8022
TEACHER           8013
ENGINEER          7922
SALES             6435
Name: OCCUPATION, dtype: int64

从捐款人的职业这个角度分析,我们会发现NOT EMPLOYED(自由职业)的总捐赠额是最多,通过查看每个职业捐赠的人数来看,我们就会发现是因为NOT EMPLOYED(自由职业)人数多的原因,另外退休人员捐款人数也特别多,所以捐款总数对应的也多,其他比如像:律师、创始人、医生、顾问、教授、主管这些高薪人才虽然捐款总人数少,但是捐款总金额也占据了很大比例。

# 每个州获捐款的总额,然后排序,取前五位
c_itcont.groupby('STATE').sum().sort_values("TRANSACTION_AMT",ascending=False).head(5)
TRANSACTION_AMT
STATE
CA 19999115
NY 11468537
FL 8128789
TX 8101871
MA 5187957
# 查看每个州捐款人的数量
c_itcont['STATE'].value_counts().head(5)
CA    127895
TX     54457
FL     54343
NY     49453
MA     29314
Name: STATE, dtype: int64

最后查看每个州的捐款总金额,我们会发现CA(加利福利亚)NY(纽约)FL(弗罗里达)这几个州的捐款是最多的,在捐款人数上也是在Top端,另一方面也凸显出这些州的经济水平发达。
大家也可以通过数据查看下上面列举的高端职业在各州的分布情况,进行进一步的分析探索。

4、数据可视化

首先导入相关Python库

# 导入matplotlib中的pyplot
import matplotlib.pyplot as plt
# 为了使matplotlib图形能够内联显示
%matplotlib inline
# 导入词云库
from wordcloud import WordCloud,ImageColorGenerator

4.1 按州总捐款数和总捐款人数柱状图

# 各州总捐款数可视化
st_amt = c_itcont.groupby('STATE').sum().sort_values("TRANSACTION_AMT",ascending=False)[:10]
st_amt=pd.DataFrame(st_amt, columns=['TRANSACTION_AMT'])
st_amt.plot(kind='bar')
<AxesSubplot:xlabel='STATE'>

4.2 各州捐款总人数可视化

# 各州捐款总人数可视化,取前10个州的数据
st_amt = c_itcont.groupby('STATE').size().sort_values(ascending=False).head(10)
st_amt.plot(kind='bar')
<AxesSubplot:xlabel='STATE'>

4.3 热门候选人拜登在各州的获得的捐赠占比

# 从所有数据中取出支持拜登的数据
biden = c_itcont[c_itcont['CAND_NAME']=='BIDEN, JOSEPH R JR']
# 统计各州对拜登的捐款总数
biden_state = biden.groupby('STATE').sum().sort_values("TRANSACTION_AMT", ascending=False).head(10)
# 饼图可视化各州捐款数据占比
biden_state.plot.pie(figsize=(10, 10),autopct='%0.2f%%',subplots=True)
array([<AxesSubplot:ylabel='TRANSACTION_AMT'>], dtype=object)

4.4 总捐最多的候选人捐赠者词云图

通过数据分析中获得捐赠总额前三的候选人统计中可以看出拜登在2020.7.22-2020.8.20这期间获得捐赠的总额是最多的,所以我们以拜登为原模型,制作词云图。

# 首先下载图片模型,这里提供的是已经处理好的图片,有兴趣的选手可以自己写代码进行图片处理
# 处理结果:需要将人图像和背景颜色分离,并纯色填充,词云才会只显示在人图像区域
# 拜登原图:https://img.alicdn.com/tfs/TB1pUcwmZVl614jSZKPXXaGjpXa-689-390.jpg
# 拜登处理后图片:https://img.alicdn.com/tfs/TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg
# 特朗普原图:https://img.alicdn.com/tfs/TB1D0l4pBBh1e4jSZFhXXcC9VXa-298-169.jpg
# 特朗普处理后图片:https://img.alicdn.com/tfs/TB1BoowmZVl614jSZKPXXaGjpXa-298-169.jpg
# 这里我们先下载处理后的图片
!wget https://img.alicdn.com/tfs/TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg
--2021-01-31 11:39:47--  https://img.alicdn.com/tfs/TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg
Resolving img.alicdn.com (img.alicdn.com)... 180.97.251.252, 180.97.251.251
Connecting to img.alicdn.com (img.alicdn.com)|180.97.251.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4236 (4.1K) [image/jpeg]
Saving to: ‘TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg’100%[======================================>] 4,236       --.-K/s   in 0s      2021-01-31 11:39:47 (56.4 MB/s) - ‘TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg’ saved [4236/4236]
# 由于下载图片文件名过长,我们对文件名进行重命名
import os
os.rename('TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg', 'biden.jpg')
# 在4.2 热门候选人拜登在各州的获得的捐赠占比 中我们已经取出了所有支持拜登的人的数据,存在变量:biden中
# 将所有捐赠者姓名连接成一个字符串
data = ' '.join(biden["NAME"].tolist())
# 读取图片文件
bg = plt.imread("biden.jpg")
# 生成
wc = WordCloud(# FFFAE3background_color="white",  # 设置背景为白色,默认为黑色width=890,  # 设置图片的宽度height=600,  # 设置图片的高度mask=bg,    # 画布margin=10,  # 设置图片的边缘max_font_size=100,  # 显示的最大的字体大小random_state=20,  # 为每个单词返回一个PIL颜色
).generate_from_text(data)
# 图片背景
bg_color = ImageColorGenerator(bg)
# 开始画图
plt.imshow(wc.recolor(color_func=bg_color))
# 为云图去掉坐标轴
plt.axis("off")
# 画云图,显示
# 保存云图
wc.to_file("biden_wordcloud.png")
<wordcloud.wordcloud.WordCloud at 0x7f0d3da009b0>

4.5 按州总捐款热力地图

# 按州总捐款热力地图
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# 各州总捐款数可视化
st_amt = c_itcont.groupby('STATE').sum().sort_values("TRANSACTION_AMT",ascending=False)[:10]
st_amt=pd.DataFrame(st_amt, columns=['TRANSACTION_AMT'])
st_amt.head(10)
TRANSACTION_AMT
STATE
CA 19999115
NY 11468537
FL 8128789
TX 8101871
MA 5187957
WA 4455361
IL 3788997
VA 3659134
PA 3501967
MD 2923730
sns.heatmap(st_amt,cmap='Reds')
#cmap颜色
<AxesSubplot:ylabel='STATE'>

4.6 收到捐赠额最多的两位候选人的总捐赠额变化趋势

# 收到捐赠额最多的两位候选人的总捐赠额变化趋势
# 将候选人与委员会关系表ccl和个人捐赠数据表itcont合并,通过 CMTE_ID
c_itcont2 =  pd.merge(ccl,itcont)
# 提取需要的数据列
c_itcont2 = pd.DataFrame(c_itcont2, columns=[ 'CAND_NAME','TRANSACTION_AMT', 'TRANSACTION_DT'])
#c_itcont2.head(10)
#c_itcont2.shape
#c_itcont2.info()
# 对日期TRANSACTION_DT列进行处理
c_itcont2['TRANSACTION_DT'] = c_itcont2['TRANSACTION_DT'] .astype(str)
# 将日期格式改为年月日  7242020
c_itcont2['TRANSACTION_DT'] = [i[3:7]+i[0]+i[1:3] for i in c_itcont2['TRANSACTION_DT'] ]
#c_itcont2.info()
c_itcont2.head(5)
CAND_NAME TRANSACTION_AMT TRANSACTION_DT
0 MORGAN, JOSEPH DAVID 100 2020724
1 MORGAN, JOSEPH DAVID 40 2020724
2 MORGAN, JOSEPH DAVID 40 2020731
3 WOOD, DANIEL 300 2020810
4 WOOD, DANIEL 500 2020807
#获取拜登每天获得的捐款数
biden=c_itcont2[c_itcont2['CAND_NAME']=='BIDEN, JOSEPH R JR']
#biden.head(10)
biden=biden.groupby('TRANSACTION_DT').sum().sort_values("TRANSACTION_AMT", ascending=False)
biden=biden.sort_values('TRANSACTION_DT', ascending=True)
biden=biden.rename(columns={'TRANSACTION_AMT':'BIDEN_TRANSACTION_AMT'})
biden.head(10)
BIDEN_TRANSACTION_AMT
TRANSACTION_DT
2020722 888622
2020723 963605
2020724 1172065
2020725 919555
2020726 1108782
2020727 1097421
2020728 1475198
2020729 1275603
2020730 1063531
2020731 2341590
#获取特朗普每天获得的捐款数
trump=c_itcont2[c_itcont2['CAND_NAME']=='TRUMP, DONALD J.']
#trump.head(10)
trump=trump.groupby('TRANSACTION_DT').sum().sort_values('TRANSACTION_AMT', ascending=False)
trump=trump.sort_values('TRANSACTION_DT', ascending=True)
trump=trump.rename(columns={'TRANSACTION_AMT':'TRUMP_TRANSACTION_AMT'})
#trump.columns
trump.head(10)
#TRUMP, DONALD J.
TRUMP_TRANSACTION_AMT
TRANSACTION_DT
2020722 330603
2020723 224317
2020724 273289
2020725 207652
2020726 493181
2020727 515034
2020728 455095
2020729 716851
2020730 1130337
2020731 1992496
#将得到的拜登和特朗普的每天获得的捐款数进行整合
c_itcont4 =  pd.concat([biden,trump],axis=1)
c_itcont4.head(10)
BIDEN_TRANSACTION_AMT TRUMP_TRANSACTION_AMT
TRANSACTION_DT
2020722 888622 330603
2020723 963605 224317
2020724 1172065 273289
2020725 919555 207652
2020726 1108782 493181
2020727 1097421 515034
2020728 1475198 455095
2020729 1275603 716851
2020730 1063531 1130337
2020731 2341590 1992496
c_itcont4.plot(y={'TRUMP_TRANSACTION_AMT','BIDEN_TRANSACTION_AMT'},grid=True, rot=45)
<AxesSubplot:xlabel='TRANSACTION_DT'>

5、大致流程

1.赛前准备:

  • 数据字段描述、关键字段说明
  • 需要提前安装的包
  • 需要提前下载好数据集

2.数据处理:

  • 将相关的表进行关联
  • 数据探索与清洗:

3.数据分析:

  • 对可用的数据集进行操作,现在我们可以利用调用shape属性查看数据的规模,调用info函数查看数据信息,调用describe函数查看数据分布等等。

4.数据可视化:

  • 首先导入相关Python库
  • 提取相关数据,并进行绘图

【天池龙珠计划】Python训练营 Task04 Python数据分析:从0完成一个数据分析实战相关推荐

  1. 阿里云天池龙珠计划SQL训练营Task04:集合运算-表的加减法和join等

    本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql: 4.1表的加减法 4.1.1 ...

  2. 【天池龙珠计划寒假训练营】python学习笔记(二):数据结构大汇总

    六. 列表的定义 列表是有序集合,没有固定大小,能够保存任意数量任意类型的 Python 对象,语法为 [元素1, 元素2, ..., 元素n] . 关键点是「中括号 []」和「逗号 ,」 中括号 把 ...

  3. 【天池龙珠计划寒假训练营】python学习笔记(三):从函数到高级魔法方法

    十二. 函数与Lambda表达式 12.1 函数 还记得 Python 里面"万物皆对象"么?Python 把函数也当成对象,可以从另一个函数中返回出来而去构建高阶函数,比如: 参 ...

  4. 【天池龙珠计划寒假训练营】python学习笔记(四):利用Pandas分析美国选民总统喜好度

    一.数据准备 1.1 数据集来源介绍 1. 所有候选人信息 该文件为每个候选人提供一份记录,并显示候选人的信息.总收入.从授权委员会收到的转账.付款总额.给授权委员会的转账.库存现金总额.贷款和债务以 ...

  5. 天池龙珠计划机器学习训练营机器学习基础知识学习笔记--Task03

    天池龙珠计划机器学习训练营–Task03重点记录 LightGBM的介绍 LightGBM的主要优点: 简单易用.提供了主流的Python\C++\R语言接口,用户可以轻松使用LightGBM建模并获 ...

  6. 【学习笔记】阿里云天池龙珠计划SQL训练营-Task06:综合练习题-10道经典题目

    本笔记为阿里云天池龙珠计划SQL训练营的学习内容 链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql 练习题1: 请使用A股上市公司 ...

  7. 本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql” Task06学习笔记

    本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql" Task06学习笔 ...

  8. 阿里云天池龙珠计划SQL训练营Task03:复杂查询方法-视图、子查询、函数等

    本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql: 3.1 视图 我们先来看一个 ...

  9. 【阿里云天池龙珠计划SQL训练营】SQL复习Task3

    本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql: 目录 Task03:复杂查询 ...

最新文章

  1. HBase基本概念和hbase shell常用命令用法
  2. EdgeGallery:聚焦 5 大行业场景,MEC 开源平台将 5G 能力拓展到边缘
  3. Mac计算器的计算过程怎么看?教你一键查看运算记录!
  4. btoa java_javascript atob()函数和 btoa()函数-Base64的编码与解码-Go语言中文社区
  5. 《剑指offer》面试题31——连续子数组的最大和
  6. Flink Weekly | 每周社区动态更新(附5月活跃榜单)
  7. eXtremeComponents 中文参考文档
  8. Matlab 自定义colormap
  9. python选股接口_财码Python量化选股(三)选股分析
  10. Android之应用市场排行榜、上架、首发
  11. 数据分析|SQL面试题集锦
  12. BDSN数据存储服务节点激励通证TYB将于6月21日正式上线
  13. windows远程mstsc命令指定远程的窗口大小
  14. AlertPay网银
  15. B/S结构下套打票据实现 - Lodop打印组件
  16. 声网Agora Signaling SD例子运行方法
  17. 双USB 蓝牙 MCU芯片 CH583/CH582/CH581引脚信息 跟异同
  18. java 开源网盘_现在的开源网盘还有哪些推荐?
  19. LDO与DCDC这次给它彻底搞懂
  20. 新手查找下载文献论文攻略:有什么好的检索下载文献论文的办法吗?

热门文章

  1. java 线图_在Java中绘制一个简单的线图
  2. 小程序毕业设计 基于微信商城小程序毕业设计开题报告功能参考
  3. 安卓9去掉搜索栏_小米9pro桌面下边搜索栏怎么关闭 只需一招即可搞定
  4. PCB板设计之Altium Designer了解以及电子设计基础知识
  5. gitee 从 拉取新分支到本地_git fetch 的简单用法:更新远程代码到本地仓库
  6. 平庸和优秀的距离,我要得不仅仅是土豆
  7. android安卓实现圆形头像效果(使用第三方开源库)
  8. Faker库:生成测试数据
  9. Vue:push添加数据出现__ob__: Observer
  10. 【OpenCV-Python】教程:6-1 相机标定