做快消品看那些网站好,联合智慧旅游建设旅游门户网站,百度灰色词排名代发,网站安全防护方案本学习笔记为阿里云天池龙珠计划Python训练营的学习内容#xff0c;学习链接为#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu
一、学习知识点概要
本次主要通过阿里云天池的赛题【Python入门系…本学习笔记为阿里云天池龙珠计划Python训练营的学习内容学习链接为https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu
一、学习知识点概要
本次主要通过阿里云天池的赛题【Python入门系列】用Pandas揭秘美国选民的总统喜好 进行学习主要学习内容有
数据集获取数据处理数据探索和清洗数据分析数据可视化
二、学习内容
1.数据集获取
首先我们需要获取以下信息
所有候选人信息 该文件为每个候选人提供一份记录并显示候选人的信息、总收入、从授权委员会收到的转账、付款总额、给授权委员会的转账、库存现金总额、贷款和债务以及其他财务汇总信息。 数据字段描述详细:https://www.fec.gov/campaign-finance-data/all-candidates-file-description/ 关键字段说明
CAND_ID 候选人IDCAND_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 候选人IDCAND_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 委员会IDNAME 捐款人姓名CITY 捐款人所在市State 捐款人所在州EMPLOYER 捐款人雇主/公司OCCUPATION 捐款人职业
数据来源:https://www.fec.gov/files/bulk-downloads/2020/indiv20.zip
接着我们需要安装词云处理包
# 安装词云处理包wordcloud
!pip install wordcloud --user
2.数据处理
进行数据处理前我们需要知道我们最终想要的数据是什么样的因为我们是想分析候选人与捐赠人之间的关系所以我们想要一张数据表中有捐赠人与候选人一一对应的关系所以需要将目前的三张数据表进行一一关联汇总到需要的数据。
2.1 将委员会和候选人一一对应通过CAND_ID关联两个表
由于候选人和委员会的联系表中无候选人姓名只有候选人IDCAND_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委员会IDCAND_ID候选人IDCAND_NAME候选人姓名CAND_PTY_AFFILIATION候选人党派
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])
# 将候选人与委员会关系表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 – 候选人党派
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.9MBSTATE、EMPLOYER、OCCUPATION有缺失值另外日期列目前为int64类型需要进行转换为str类型。
#空值处理统一填充 NOT PROVIDEDc_itcont[STATE].fillna(NOT PROVIDED,inplaceTrue)c_itcont[EMPLOYER].fillna(NOT PROVIDED,inplaceTrue)c_itcont[OCCUPATION].fillna(NOT PROVIDED,inplaceTrue)
# 对日期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# 查看数据表中数据类型的列的数据分布情况
c_itcont.describe()
TRANSACTION_AMT
count 7.562050e05
mean 1.504307e02
std 2.320452e03
min -5.600000e03
25% 2.000000e01
50% 3.500000e01
75% 1.000000e02
max 1.500000e06# 查看单列的数据发布情况
c_itcont[CAND_NAME].describe()count 756205
unique 312
top BIDEN, JOSEPH R JR
freq 507816
Name: CAND_NAME, dtype: object4.数据分析
# 计算每个党派的所获得的捐款总额然后排序取前十位
c_itcont.groupby(CAND_PTY_AFFILIATION).sum().sort_values(TRANSACTION_AMT,ascendingFalse).head(10)
TRANSACTION_AMT
CAND_PTY_AFFILIATION DEM 75961730REP 37170653IND 328802LIB 169202DFL 76825GRE 18607NON 11256UNK 10195CON 4117BDY 3250
# 计算每个总统候选人所获得的捐款总额然后排序取前十位
c_itcont.groupby(CAND_NAME).sum().sort_values(TRANSACTION_AMT,ascendingFalse).head(10)
TRANSACTION_AMTCAND_NAME BIDEN, JOSEPH R JR 68111142TRUMP, DONALD J. 16594982SULLIVAN, DAN 9912465JACOBS, CHRISTOPHER L. 6939209BLOOMBERG, MICHAEL R. 3451916MARKEY, EDWARD J. SEN. 606832SHAHEEN, JEANNE 505446KENNEDY, JOSEPH P III 467738CORNYN, 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,ascendingFalse).head(10)
TRANSACTION_AMTOCCUPATION
NOT EMPLOYED 24436214RETIRED 18669950
NOT PROVIDED 5089355ATTORNEY 4443569FOUNDER 3519109PHYSICIAN 3295595CONSULTANT 1647033LAWYER 1565976PROFESSOR 1481260EXECUTIVE 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,ascendingFalse).head(5)
TRANSACTION_AMT
STATE CA 19999115NY 11468537FL 8128789TX 8101871MA 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端另一方面也凸显出这些州的经济水平发达。 大家也可以通过数据查看下上面列举的高端职业在各州的分布情况进行进一步的分析探索。
5.数据可视化
首先导入相关Python库
# 导入matplotlib中的pyplot
import matplotlib.pyplot as plt
# 为了使matplotlib图形能够内联显示
%matplotlib inline
# 导入词云库
from wordcloud import WordCloud,ImageColorGenerator
5.1 按州总捐款数和总捐款人数柱状图
# 各州总捐款数可视化
st_amt c_itcont.groupby(STATE).sum().sort_values(TRANSACTION_AMT,ascendingFalse)[:10]
st_amtpd.DataFrame(st_amt, columns[TRANSACTION_AMT])
st_amt.plot(kindbar)
AxesSubplot:xlabelSTATE 5.2 各州捐款总人数可视化
# 各州捐款总人数可视化取前10个州的数据
st_amt c_itcont.groupby(STATE).size().sort_values(ascendingFalse).head(10)
st_amt.plot(kindbar)
AxesSubplot:xlabelSTATE 5.3 热门候选人拜登在各州的获得的捐赠占比
# 从所有数据中取出支持拜登的数据
biden c_itcont[c_itcont[CAND_NAME]BIDEN, JOSEPH R JR]
# 统计各州对拜登的捐款总数
biden_state biden.groupby(STATE).sum().sort_values(TRANSACTION_AMT, ascendingFalse).head(10)
# 饼图可视化各州捐款数据占比
biden_state.plot.pie(figsize(10, 10),autopct%0.2f%%,subplotsTrue)
array([AxesSubplot:ylabelTRANSACTION_AMT], dtypeobject) 5.3 总捐最多的候选人捐赠者词云图
通过数据分析中获得捐赠总额前三的候选人统计中可以看出拜登在2020.7.22-2020.8.20这期间获得捐赠的总额是最多的所以我们以拜登为原模型制作词云图。
首先下载图片模型,这里提供的是已经处理好的图片有兴趣的选手可以自己写代码进行图片处理
# 处理结果需要将人图像和背景颜色分离并纯色填充词云才会只显示在人图像区域
# 拜登原图https://img.alicdn.com/tfs/TB1pUcwmZVl614jSZKPXXaGjpXa-689-390.jpg
# 拜登处理后图片https://img.alicdn.com/tfs/TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg
!wget https://img.alicdn.com/tfs/TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg
# 由于下载图片文件名过长我们对文件名进行重命名
import os
os.rename(TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg, biden.jpg)
# 将所有捐赠者姓名连接成一个字符串
data .join(biden[NAME].tolist())
# 读取图片文件
bg plt.imread(biden.jpg)
# 生成
wc WordCloud(# FFFAE3background_colorwhite, # 设置背景为白色默认为黑色width890, # 设置图片的宽度height600, # 设置图片的高度maskbg, # 画布margin10, # 设置图片的边缘max_font_size100, # 显示的最大的字体大小random_state20, # 为每个单词返回一个PIL颜色
).generate_from_text(data)
# 图片背景
bg_color ImageColorGenerator(bg)
# 开始画图
plt.imshow(wc.recolor(color_funcbg_color))
# 为云图去掉坐标轴
plt.axis(off)
# 画云图显示
# 保存云图
wc.to_file(biden_wordcloud.png)
wordcloud.wordcloud.WordCloud at 0x7f64fca05400 三、学习问题与解答
学习问题出现还是蛮多的主要是出现的方法的机理参数的作用不清楚。
四、学习思考与总结
本次学习的内容如果要完全理解对我这种几天前才开始学Python的人来说还是挺难的里面有涉及到安装包、引入库的操作。引入的那些如Pandas、wordcloud包里面的方法不熟悉学习起来比较吃力。这些例程做下记录以后会好好学习弄懂。