美文网首页
4.数据处理案例——民调统计

4.数据处理案例——民调统计

作者: 零_WYF | 来源:发表于2018-01-23 20:55 被阅读82次

需求:把民调结束时间转换成yy-mm的形式,按照月份,统计特朗普和希拉里民调的和

1. 引入所需模块

import numpy as np
import datetime

2. 数据文件的储存地址

filename = './presidential_polls.csv'

3. 打开文件,读取列名,也就是第一行的数据

with open(filename,'r') as f:
    col_names_str = f.readline()[:-1]
print(col_names_str)
##################################运行结果####################################
cycle,branch,type,matchup,forecastdate,state,startdate,enddate,pollster,grade,
samplesize,population,poll_wt,rawpoll_clinton,rawpoll_trump,rawpoll_johnson,
rawpoll_mcmullin,adjpoll_clinton,adjpoll_trump,adjpoll_johnson,adjpoll_mcmullin,
multiversions,url,poll_id,question_id,createddate,timestamp
##############################################################################

4. 把标题的字符串切分开来,转换成列表

col_names_list = col_names_str.split(',')
print(col_names_list)
##################################运行结果####################################
['cycle', 'branch', 'type', 'matchup', 'forecastdate', 'state', 'startdate', 'enddate',
 'pollster', 'grade', 'samplesize', 'population', 'poll_wt', 'rawpoll_clinton', 
'rawpoll_trump', 'rawpoll_johnson', 'rawpoll_mcmullin', 'adjpoll_clinton', 
'adjpoll_trump', 'adjpoll_johnson', 'adjpoll_mcmullin', 'multiversions', 'url', 
'poll_id', 'question_id', 'createddate', 'timestamp']
##############################################################################

5. 定义使用的列

# 定义使用的列
use_col_name_list = ['enddate','adjpoll_clinton','adjpoll_trump']

6. 获取相应的列名,索引号

use_col_index_list = [col_names_list.index(use_col_name) for use_col_name in use_col_name_list]
print(use_col_index_list)
#######################运行结果########################
[7, 17, 18]
######################################################

7. 加载文件读取数据

# 加载文件读取数据
data_array = np.loadtxt(filename, # 文件名
                        delimiter = ',', # 逗号分隔符
                        skiprows = 1, # 跳过指定的行
                        dtype = str, # 字符串类型
                        usecols = use_col_index_list # 指定读取列的索引
)
print(data_array)
#######################运行结果########################
[['10/31/2016' '42.6414' '40.86509']
 ['10/30/2016' '43.29659' '44.72984']
 ['10/30/2016' '46.29779' '40.72604']
 ..., 
 ['9/22/2016' '45.9713' '39.97518']
 ['6/21/2016' '45.2939' '46.66175']
 ['8/18/2016' '31.62721' '44.65947']]
######################################################

8. 处理日期的格式

# 处理日期的格式
enddate_idx = use_col_name_list.index('enddate')
print(enddate_idx)
enddate_lst = data_array[:,enddate_idx].tolist()
print(enddate_lst)
#######################运行结果########################
['10/31/2016', '10/30/2016',....., '6/21/2016', '8/18/2016']
######################################################

9. 将日期字符串格式同一

enddate_lst = [enddate.replace('-','/') for enddate in enddate_lst]
print(enddate_lst)
#######################运行结果########################
['10/31/2016', '10/30/2016',....., '6/21/2016', '8/18/2016']
######################################################

10. 将日期的字符串转换成日期

# 将日期的字符串转换成日期
date_lst = [datetime.datetime.strptime(enddate,'%m/%d/%Y') for enddate in enddate_lst]
print(date_lst)
#######################运行结果########################
[datetime.datetime(2016, 10, 31, 0, 0),......, datetime.datetime(2016, 8, 18, 0, 0)]
######################################################

11. 构造年份一月份的列表

# 构造年份一月份的列表
month_list = ["%d-%02d" % (date_obj.year,date_obj.month) for date_obj in date_lst]
print(month_list)
#######################运行结果########################
['2016-10', '2016-10',......, '2016-08']
######################################################

12. 去重

month_array = np.array(month_list)
months = np.unique(month_array) # 去重
print(months)
#######################运行结果########################
['2015-11' '2015-12' '2016-01' '2016-02' '2016-03' '2016-04' '2016-05'
 '2016-06' '2016-07' '2016-08' '2016-09' '2016-10']
######################################################

13. 统计希拉里调整之后的投票数

# 统计希拉里调整之后的投票数
adjpoll_clinton_idx = use_col_name_list.index("adjpoll_clinton")
adjpoll_clinton_data  = data_array[:,adjpoll_clinton_idx]
print(adjpoll_clinton_data)
#######################运行结果########################
['42.6414' '43.29659' '46.29779' ..., '45.9713' '45.2939' '31.62721']
######################################################

14. 数据类型的转换

# 数据类型的转换
adjpoll_clinton_data = np.where(adjpoll_clinton_data == "","0",adjpoll_clinton_data)
adjpoll_clinton_data = adjpoll_clinton_data.astype(np.float64)
print(adjpoll_clinton_data)
#######################运行结果########################
[ 42.6414   43.29659  46.29779 ...,  45.9713   45.2939   31.62721]
######################################################

15. 统计特朗普调整后的投票情况

adjpoll_trump_idx = use_col_name_list.index("adjpoll_trump")
adjpoll_trump_data = data_array[:,adjpoll_trump_idx]
print(adjpoll_trump_data)
#######################运行结果########################
['40.86509' '44.72984' '40.72604' ..., '39.97518' '46.66175' '44.65947']
######################################################

16. 数据类型从字符串转换成float

# 数据类型从字符串转换成float
adjpoll_trump_data = np.where(adjpoll_trump_data=="","0",adjpoll_trump_data)
adjpoll_trump_data = adjpoll_trump_data.astype(np.float64)
print(adjpoll_trump_data)
#######################运行结果########################
[ 40.86509  44.72984  40.72604 ...,  39.97518  46.66175  44.65947]
######################################################

17. 按月份统计选票

results = []
for month in months:
    # 调整之后 希拉里的数据
    adjpoll_clinton_month_data = adjpoll_clinton_data[month_array==month]
    # 统计当月的总票数
    adjpoll_clinton_month_sum = np.sum(adjpoll_clinton_month_data)
    
    # 调整之后,特朗普的数据
    adjpoll_trump_month_data = adjpoll_trump_data[month_array == month]
    # 统计求和
    adjpoll_trump_month_sum = np.sum(adjpoll_trump_month_data)
    
    results.append([month,adjpoll_clinton_month_sum,adjpoll_trump_month_sum])

18. 打印结果

# 打印结果
for item in results:
    print("{}:clinton:{},trump:{}".format(item[0],item[1],item[2]))
##########################运行结果###########################
2015-11:clinton:1916.6980600000002,trump:1937.3290100000002
2015-12:clinton:4637.25688,trump:4088.9218999999994
2016-01:clinton:6585.167019999999,trump:6253.24935
2016-02:clinton:7946.228610000001,trump:7672.3398
2016-03:clinton:11156.09824,trump:9991.59358
2016-04:clinton:11579.426780000002,trump:9884.156190000002
2016-05:clinton:12242.27538,trump:12069.761290000002
2016-06:clinton:19771.335759999998,trump:18154.90623
2016-07:clinton:23233.111679999998,trump:22757.07327
2016-08:clinton:67909.28210000001,trump:66428.29714000001
2016-09:clinton:102445.45295,trump:106065.00385000001
2016-10:clinton:165319.59355,trump:164990.78638900002
############################################################

相关文章

  • 4.数据处理案例——民调统计

    需求:把民调结束时间转换成yy-mm的形式,按照月份,统计特朗普和希拉里民调的和 1. 引入所需模块 2. 数据文...

  • 案例:使用线性回归预测葡萄酒质量

    这也是一个经典的描述性统计与建模的小案例了,主要用到pandas进行数据处理,用statsmodels进行统计建模...

  • 《SPSS 24统计分析基础》,你想学的统计分析都在这里

    看看简介,看看案例,SPPS一本书保罗万象,想学统计分析,想学数据处理,都在这里了。

  • 2020-11-11-Scala-31(scala中文版的摘录2

    1.统计案例复习柯里化和高阶函数 2.可变集合和不可变集合 3 4.隐式转换 318

  • 4. 数据处理

    数据清洗 数据清洗就是将重复的数据筛选清除、将缺失的数据补充完善、将错误的数据纠正或删除 处理重复数据 查找重复数...

  • 统计与统计案例

    统计与统计案例是高考的热点,高考对该内容的考查主要体现了以下两个特点:一是覆盖面广,几乎所有的统计考点都有所涉及,...

  • Power Query 系列 (15) - Table 和 Li

    本文通过一个数据处理的案例,说明 table 和 list 相互转换在 Power Query (PQ) 数据处理...

  • Python快速入门(5):字典

    1. 声明 2. 添加 可以在声明时添加: 3. 操作 获取 遍历所有的key 4. 案例:统计列表中水果出现的次数

  • 4.统计方法

    多元线性回归因变量为连续型逐步法 logic回归:病例对照研究image.pngimage.pngimage.pn...

  • 民调

    最近有媒体报道说,德国商报做了一个民调,说中国将取代美国成为世界强国。我国国力增强这是不争的事实,对于外部的反华我...

网友评论

      本文标题:4.数据处理案例——民调统计

      本文链接:https://www.haomeiwen.com/subject/egjeaxtx.html