python统计第90届奥斯卡竞猜数据

作为python新手,记一次用python处理数据的经历,写作目的仅为自己不要忘记。

1. 数据介绍

通过微信小程序“报名工具”,设计了3个信息字段和10个问题,发放到各个城市的影迷群,共收集403条数据,数据不多,拿来试手还可以


2. Python读写Excel

python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。https://pypi.python.org/pypi,使用方式参见另一篇文章:[python]使用xlrd对Excel表格进行读写操作python使用xlwt模块操作Excel

2.1 导入模块
import xlrd
import xlwt
from collections import Counter
2.2 定义读数据函数
def read_excel():
    # 打开文件
    workbook = xlrd.open_workbook(r'C:\Users\Pan\Desktop\淘票票奥斯卡有奖竞猜.xls')

    # 根据sheet索引或者名称获得sheet内容
    sheet1 = workbook.sheet_by_index(0)

    # sheet的名称,行数,列数
    nrows = sheet1.nrows

    data = []

    for i in range(1, nrows):
        data.append(sheet1.row_values(i))
    return data
3. 统计数据
3.1 统计每个问题选择最多的选项

Python中统计列表中重复出现项的个数有很多方法,可参见博文:Python统计列表中的重复项出现的次数,这里选择使用collections 的 Counter方法。当然还可以使用博文中没有提及的numpy库的unique方法,参见:numpy.unique。在read_excel() 中添加代码:

# 全局统计每一项最多的选择
for i in range(4, ncols - 1):  # 去掉无关项
    print(Counter(sheet1.col_values(i)).most_common(1))
3.2 统计每个城市的正确情况并写入Excel

【参数】lst:所有数据集;city_list:城市列表;result:最终正确的答案

def city_result(lst, city_list, result):  # 计算城市的正确率
    workbook = xlwt.Workbook(encoding='utf-8')
    for i in range(len(city_list)):
        city_name = city_list[i]
        city_data = list(filter(lambda x: x[3] == city_name, lst))
        for j in range(len(city_data)):
            correct = 0
            for k in range(4, len(city_data[j]) - 1):
                # 字符串查找
                if city_data[j][k].find(result[k-4]) >= 0:
                    correct += 1
            city_data[j].append(correct)
        # 按照最后一行降序排列
        sort_data = sorted(city_data, key=lambda ls: ls[len(city_data[0])-1], reverse=True)

        # 写入excel
        worksheet = workbook.add_sheet(city_name)
        for i in range(len(sort_data)):
            for j in range(len(sort_data[i])):
                worksheet.write(i, j, label=sort_data[i][j])
    workbook.save(r'C:\Users\Panjf\Desktop\淘票票奥斯卡有奖竞猜结果.xls')

【注意点】

1. python中字符串查找可以使用index() 和find()方法。使用index(),如果匹配失败,会抛出异常:ValueError:substring not found,如果用find()方法代替,匹配失败返回false,匹配成功返回匹配开始的索引;

2. python numpy数组的排列方式有许多种,参见:python 列表排序方法sort、sorted技巧

3. 关于Numpy数组需要注意:同一个Numpy数组中所有元素的类型必须是相同的。通过numpy.array(list)的方式创建数组,如果list中既含有字符串又含有数值类型,转变成数组后,类型都是字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值