Python数据分析:从0完成一个数据分析实战(1)

学习目标:

从0-1的数据分析实战

学习内容:

1、 数据分析基本介绍

2、 数据准备及读取

3、 数据探索

学习产出:

1.1.项目介绍

本练习项目包含数据集的处理、数据探索与清晰、数据分析、数据可视化四部分,利用pandas、matplotlib、wordcloud等第三方库进行数据分析

1.2.数据来源

数据文件为每个候选人的数据记录,并显示候选人的信息、总收入、从授权委员会收到的转账、付款总额、给授权委员会的转账、库存现金总额、贷款和债务以及其他财务汇总信息。
数据字段描述详细:
https://www.fec.gov/campaign-finance-data/all-candidates-file-description/

"所有候选人信息"关键字段说明:

  1. CAND_ID 候选人ID
  2. CAND_ELECTION_YR 候选人选举年份
  3. CMTE_ID 委员会ID

"候选人委员会链接信息"关键字段说明:

  1. CAND_ID 候选人ID
  2. CAND_ELECTION_YR 候选人选举年份
  3. CMTE_ID 委员会ID

'个人捐款档案信息"关键字段说明:

  1. CMTE_ID 委员会ID
  2. NAME 捐款人姓名
  3. CITY 捐款人所在市
  4. State 捐款人所在州
  5. EMPLOYER 捐款人雇主/公司
  6. OCCUPATION 捐款人职业
2.1.数据准备
# 安装词云处理包wordcloud
!pip install wordcloud --user

下载数据集

2.2.数据处理

分析候选人与捐赠人之间的关系,需要一张数据表中有捐赠人与候选人一一对应的关系,所以将目前的三张数据表进行一一关联,汇总到需要的数据。

# 导入相关处理包
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'])

# 查看目前ccl数据前10行
ccl.head(10)

结果输出

# 读取个人捐赠数据,由于原始数据没有表头,需要添加表头
# 提示:读取本文件大概需要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'])
# 查看目前数据前10行
c_itcont.head(10)

在这里插入图片描述

3.1.数据探索与清洗

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

# 查看数据规模 多少行 多少列
c_itcont.shape
#(756205, 8)

# 查看整体数据信息,包括每个字段的名称、非空数量、字段的数据类型
c_itcont.info()

在这里插入图片描述

通过上面的探索我们知道目前数据集的一些基本情况,目前数据总共有756205行,8列,总占用内存51.9+MB,STATE、EMPLOYER、OCCUPATION有缺失值,另外日期列目前为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()

在这里插入图片描述

# 查看数据前3行
c_itcont.head(3)

在这里插入图片描述

# 查看数据表中数据类型的列的数据分布情况
c_itcont.describe()

在这里插入图片描述

# 查看单列的数据发布情况
c_itcont['CAND_NAME'].describe()

在这里插入图片描述
数据及代码源于"AI训练营Python-阿里云天池"

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值