文章目录

  • 概述
  • 题目要求
    • 1:导入模块
    • 2:获取数据
    • 3:数据处理
      • 1:日期处理
      • 2:投票数据处理
  • 完整代码
  • 实验总结

概述

数据来源:https://www.kaggle.com/fivethirtyeight/2016-election-polls
因为下载数据需要注册登录,比较麻烦,这边为了方便,我直接把需要分析的数据表导出来啦
链接:https://pan.baidu.com/s/1IasBj6DcqXvFkJox4Zg2VQ?pwd=7ctn
提取码:7ctn

读取CSV文件格式:

loadtxt(fname, dtype = , comments = '#', delimiter = None, converters = None, skiprows = 0,usecols = None, unpack = False, nbmin = 0, enconding = 'bytes')

主要参数及其说明:

参数 说明
fname 读取的CSV文件名
delimiter 数据的分隔符
stype 数据类型,默认float
comments 注释
delimiter 分隔符,默认是空格
converters 转换元素类型
skiprows 跳过前几行读取,默认是0,必须是int整型
usecols 要读取哪些列,0是第一列
unpack 如果为True,将分列读取
ndmin 指定生成数组的最小维度
enconding 要使用的编码

题目要求

利用Numpy所学知识完成2016年美国大选数据统计,将Clinton和Trump自2015-11到2016-08每月得票数进行统计输出

1:导入模块

import datetime as dt
import pandas as pd
import numpy as np
import csv

2:获取数据

获取日期、Clinton的票数数据、特朗普投票数据三列需要的数据

data = np.loadtxt('presidential_polls.csv',dtype=str,usecols=(7,17,18),delimiter=',')

查看数据

print(data)
[['enddate' 'adjpoll_clinton' 'adjpoll_trump']['10/31/2016' '42.6414' '40.86509']['10/30/2016' '43.29659' '44.72984']...['9/22/2016' '45.9713' '39.97518']['6/21/2016' '45.2939' '46.66175']['8/18/2016' '31.62721' '44.65947']]

3:数据处理

把数据转化为列表并去掉第一行的的标题

data_poll = data.tolist()[1:]

查看数据

i = 0
for x in data_poll:i += 1print(x, end = ' ')if i % 3 == 0:print()
['10/31/2016', '42.6414', '40.86509'] ['10/30/2016', '43.29659', '44.72984'] ['10/30/2016', '46.29779', '40.72604']
['10/24/2016', '46.35931', '45.30585'] ['10/25/2016', '45.32744', '42.20888'] ['10/25/2016', '44.6508', '42.26663']
['10/31/2016', '46.21834', '43.56017'] ['10/30/2016', '46.89049', '43.50333'] ['10/27/2016', '41.22576', '37.24948']
['10/31/2016', '42.21983', '41.6954'] ['10/31/2016', '44.53217', '43.84845'] ['10/27/2016', '41.81832', '47.92262']
['10/23/2016', '55.68839', '29.50605'] ['10/30/2016', '43.31551', '40.34972'] ['10/26/2016', '45.20793', '42.01937']
['10/26/2016', '43.19458', '45.07725'] ['10/24/2016', '50.18283', '39.33826'] ['10/24/2016', '42.67789', '46.11255']
['10/28/2016', '47.77047', '39.80679'] ['10/25/2016', '45.74354', '41.34735'] ['10/17/2016', '46.84417', '39.99571']
['10/28/2016', '38.51061', '50.7572'] ['10/28/2016', '41.75385', '38.87231'] ['10/26/2016', '45.63602', '41.55637']
['10/28/2016', '41.76', '43.84806'] ['10/26/2016', '45.78602', '45.0337'] ['10/28/2016', '47.77576', '44.78595']
['10/31/2016', '44.50363', '44.1804'] ['10/30/2016', '45.66489', '40.41809'] ['10/25/2016', '38.42823', '49.47709']
['10/24/2016', '43.04313', '38.24964'] ['10/30/2016', '44.7114', '41.14791'] ['10/30/2016', '42.7114', '46.14791']
['10/30/2016', '44.7114', '45.14791'] ['10/30/2016', '45.7114', '40.14791'] ['10/30/2016', '46.38828', '44.13978']
['10/23/2016', '45.74498', '41.64333'] ['10/24/2016', '43.73338', '39.62985'] ['10/24/2016', '45.73579', '46.35058']
['10/30/2016', '46.7114', '41.14791'] ['10/26/2016', '44.08772', '44.58124'] ['10/30/2016', '48.63733', '43.2056']
['10/26/2016', '47.3517', '39.01773'] ['10/18/2016', '47.20443', '41.15833'] ['10/22/2016', '42.63636', '46.87188']
['10/24/2016', '46.95812', '39.36292'] ['10/25/2016', '43.94143', '42.24168'] ['10/30/2016', '43.7114', '46.14791']
['10/30/2016', '45.63095', '40.2258'] ['10/31/2016', '42.73449', '45.10929'] ['10/24/2016', '41.09849', '44.92952']
['10/30/2016', '45.78382', '40.53563'] ['10/29/2016', '39.79761', '50.76878'] ['10/30/2016', '48.5308', '39.71922']
......
['6/12/2016', '46.06344', '38.65057'] ['10/19/2016', '31.53417', '29.49314'] ['11/15/2015', '47.57453', '37.87221']
['2/21/2016', '46.96003', '39.42957'] ['10/13/2016', '38.10209', '53.95455'] ['7/19/2016', '50.60115', '33.0715']
['7/11/2016', '43.29751', '41.88533'] ['8/16/2016', '29.94538', '36.82408'] ['9/22/2016', '30.45553', '47.80848']
['8/10/2016', '42.62525', '42.01089'] ['1/7/2016', '42.07473', '45.06726'] ['8/4/2016', '26.74404', '40.16534']
['7/11/2016', '40.33774', '41.5603'] ['10/13/2016', '37.30964', '54.76821'] ['10/6/2016', '49.13094', '39.41588']
['9/22/2016', '45.9713', '39.97518'] ['6/21/2016', '45.2939', '46.66175'] ['8/18/2016', '31.62721', '44.65947']

1:日期处理

将日期由mm/dd/yyyy转化为yyyy/mm的格式:
知识点:
(1)%y 两位数的年份表示(00 - 99)
(2)%Y 四位数的年份表示(000 - 9999)
(3)%m 月份(01 - 12)
(4)%d 月内中的一天(0 - 31)
1:用列表解析式把日期提取出来

date = [i[0] for i in data_poll]

2:把日期的f分成三个参数分别用m,d,Y保存

date1 = [dt.datetime.strptime(date,'%m/%d/%Y') for date in date]

3:以yyyy-mm的格式保存日期的年和月

date2 = [i.strftime('%Y-%m') for i in date1]

2:投票数据处理

1:处理Clinton的投票数据,先遍历一边数据,把空的数值数据初始化为零,最后把数据转化为浮点数类型

Clinton_poll = [i[1] for i in data_poll]for i in range(len(Clinton_poll)):if Clinton_poll[i] =='':Clinton_poll[i]='0'
Clinton_poll_arr = np.array( Clinton_poll,dtype=np.float64)

2:处理Trump的投票数据,同样先遍历一边数据,把空的数值数据初始化为零,最后把数据转化为浮点数类型

Trump_poll = [i[2] for i in data_poll]
for i in range(len(Trump_poll)):if Trump_poll[i] =='':Trump_poll[i]='0'Trump_poll_arr = np.array(Trump_poll,dtype=np.float64)

3:使用DataFrame合并日期,Clinton的投票数据以及Trump的投票数据为一个二维数组

my_data = pd.DataFrame({'Date':date2, 'Clinton': Clinton_poll_arr, 'Trump':Trump_poll_arr},columns=['Date','Clinton','Trump'])

4:对Clinton每月的数据求和并输出2015-11到2016-08的投票数据

sum_Clinton = my_data['Clinton'].groupby(my_data['Date']).sum()print('Clinton从2015-11到2016-08的投票数据如下:')
i = 0
for key_value in sum_Clinton.items():i += 1print(key_value)if i == 10:break;

5:对Trump每月的数据求和并输出2015-11到2016-08的投票数据

sum_Trump = my_data['Trump'].groupby(my_data['Date']).sum()
print('Trump从2015-11到2016-08的投票数据如下:')
i = 0
for key_value in sum_Trump.items():i += 1print(key_value)if i == 10:break;

完整代码

import numpy as np
import pandas as pd
import datetime as dt
import csvdata = np.loadtxt('presidential_polls.csv',dtype=str,usecols=(7,17,18),delimiter=',')
data_poll = data.tolist()[1:]date = [i[0] for i in data_poll]
date1 = [dt.datetime.strptime(date,'%m/%d/%Y') for date in date]
date2 = [i.strftime('%Y-%m') for i in date1]Clinton_poll = [i[1] for i in data_poll]for i in range(len(Clinton_poll)):if Clinton_poll[i] =='':Clinton_poll[i]='0'
Clinton_poll_arr = np.array( Clinton_poll,dtype=np.float64)Trump_poll = [i[2] for i in data_poll]
for i in range(len(Trump_poll)):if Trump_poll[i] =='':Trump_poll[i]='0'Trump_poll_arr = np.array(Trump_poll,dtype=np.float64)my_data = pd.DataFrame({'Date':date2, 'Clinton': Clinton_poll_arr, 'Trump':Trump_poll_arr},columns=['Date','Clinton','Trump'])
sum_Clinton = my_data['Clinton'].groupby(my_data['Date']).sum()print('Clinton从2015-11到2016-08的投票数据如下:')
i = 0
for key_value in sum_Clinton.items():i += 1print(key_value)if i == 10:break;print('------------------------------------------')sum_Trump = my_data['Trump'].groupby(my_data['Date']).sum()
print('Trump从2015-11到2016-08的投票数据如下:')
i = 0
for key_value in sum_Trump.items():i += 1print(key_value)if i == 10:break;
Clinton从2015-11到2016-08的投票数据如下:
('2015-11', 1916.6980600000002)
('2015-12', 4637.256880000004)
('2016-01', 6585.16702)
('2016-02', 7946.2286100000065)
('2016-03', 11156.098239999998)
('2016-04', 11579.426779999998)
('2016-05', 12242.275380000008)
('2016-06', 19771.335760000005)
('2016-07', 23233.11167999999)
('2016-08', 67909.28209999984)
------------------------------------------
Trump从2015-11到2016-08的投票数据如下:
('2015-11', 1937.3290100000002)
('2015-12', 4088.921899999999)
('2016-01', 6253.249349999999)
('2016-02', 7672.339800000001)
('2016-03', 9991.593580000008)
('2016-04', 9884.156190000002)
('2016-05', 12069.761289999995)
('2016-06', 18154.906229999993)
('2016-07', 22757.07327000001)
('2016-08', 66428.29714000005)
​

实验总结

实训的过程不是特别顺利,尤其是在网站里面获取数据尝试了很多种方法才成功,正如陆游笔下的
——山重水复疑无路,柳暗花明又一村
后面的过程还是比较顺利的

2016年美国大选数据统计数据分析相关推荐

  1. 【数据分析学习笔记day09】数据分析实战案例:2016美国大选民意调查统计+2016年美国总统大选民意调查数据统计+示例代码1 +示例代码2:

    文章目录 2016年美国大选民意调查数据统计: 示例代码1 : 示例代码2: 2016年美国大选民意调查数据统计: 项目地址:https://www.kaggle.com/fivethirtyeigh ...

  2. 2016美国大选数据分析

    2016年美国大选Trump数据分析: 案例题目:分析随时间推移的民意调查趋势,提取特朗普/克林顿的选票比率. 数据来源:https://www.kaggle.com/fivethirtyeight/ ...

  3. 3 Python数据分析 美国各州人口分析案例 Pandas高级操作 美国大选献金案例 matplotlib

    Python数据分析 1 案例 美国各州人口分析 1.1 数据介绍 数据来源:https://github.com/jakevdp/data-USstates/ 1.1.1 州人口数量表 state- ...

  4. Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]

    目录 前言 一.任务详情 二.数据集来源 三.实现过程 四.运行代码 前言 在学习Python数据分析的过程中,是离不开实战的. 今天跟大家带来数据分析可视化经典项目,美国总统大选数据可视化分析,希望 ...

  5. Python实战项目:基于jupyter notebook处理16年美国总统大选数据

    Python实战项目:基于jupyter notebook处理16年美国总统大选数据 设计需求说明 源码展示以及实验截图: 总结: 设计需求说明 设计任务 按照月份求两位候选人民调数据的和,用折线图反 ...

  6. 项目3:美国大选献金目数据分析

    """ 需求: 1.读取数据 2.查看是否有缺失数据 3.用统计学指标快速描述数值型属性的概要 4.空值处理.可能因为忘记填写保密等原因,相关字段出现了空值,将其填充为N ...

  7. 利用python进行数据分析-14.5 2012美国大选数据分析(基础复习)

    美国大选数据分析 导入数据及相关库 数据清洗 填充缺失值 数据转换 面元化数据(分桶) 数据聚合与分组运算 时间处理 str转datetime(datetime为时间序列数据类型) 重新采样和频率转换 ...

  8. 2012美国大选献金项目数据分析

    文章目录 1.数据载入与预览 1.1 数据加载 1.2 数据合并 1.3 数据预览 1.3.1 查看是否有空值 1.3.2用统计学指标快速描述数值型属性的概要 2.数据的预处理 2.1 数据清洗 2. ...

  9. 用python怎么做数据统计-新闻联播也可以拿用Python来做数据分析?

    原标题:新闻联播也可以拿用Python来做数据分析? 数据准备 获取近10年的新闻联播文本有两个方法,一是自己写爬虫,将CCTV网站的新闻联播网页爬取下来,二是通过Tushare SDK的API免费获 ...

最新文章

  1. 12.MySql关于获取当前时间的三个函数
  2. ubuntu16.04上安装valgrind
  3. OpenCV2.4.4中调用SIFT特征检测器进行图像匹配
  4. SDUT 3400 数据结构实验之排序三:bucket sort
  5. 阿里云数据湖解决方案全面满足数据需求,帮助企业释放数据价值
  6. php 显示ip所属地 (qq版)
  7. windows error错误代码
  8. 贝叶斯估计原理及流程
  9. VS2010下配置 OpenCV2.2
  10. makefile的编写(4)
  11. cisp-pte渗透工程师考试总结
  12. 什么是列联表分析(Contingency table analysis)?
  13. Badboy 安装 使用 常见问题 badboy当前页面脚本发生错误
  14. MATLAB 如何让图形变美?[第一期]
  15. 【Hard to Park】Estimating Parking Difficulty at Scale
  16. 元旦给计算机老师的贺卡,元旦贺卡给老师的祝福语(精选50句)
  17. 短视频APP软件开发源码提供
  18. SpringBoot如何打包项目?
  19. n76e003引脚图_n76e003at20数据手册
  20. 直流电机制动matlab,他励直流电机:起动、调速、制动(原理与Simulink仿真)

热门文章

  1. 小象学院—hadoop进阶项目实战(完整)
  2. 【论文解读】Finding community structure in networks using the eigenvectors of matrices
  3. 数据库索引高频面试题(最新版)
  4. Android home键、recent键点击无效
  5. 1.2 你应该了解的轨至轨输入
  6. 如何快速找到适合发表的期刊
  7. 数据库表名字段如何大小写转换
  8. 云计算与大数据第11章 大数据隐私保护习题带答案
  9. C语言里ou是什么意思语言,C语言的!=是什么意思
  10. 有钱不一定幸福,但没钱一定不会幸福