zoukankan      html  css  js  c++  java
  • python读取excel数据做分类统计

    某excel中记录了某个人的通话记录,下面程序将按照通话地点,通话类型等统计通话时间

    # -*- coding:utf-8 -*-
    import xlrd
    import datetime
    infos=[]
    info_file=xlrd.open_workbook('src.xls')#打开excel文件
    info_sheet=info_file.sheets()[0]#通过索引顺序获取工作表
    row_count=info_sheet.nrows#获取行数,列数ncols
    for row in range(1,row_count):
        time_string=info_sheet.cell(row,3).value
        time_s_sp=time_string.split(':')
        infos.append(#该数组里放了row_count个字典
            {
                'type':info_sheet.cell(row,2).value,#获取单元格,通话类型,主叫被叫
                'other_cellphone':info_sheet.cell(row,0).value,#对方号码,
                'timespan':datetime.timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])),
                'gpscity':info_sheet.cell(row,5).value#通话是本地还是外地
            }
        )
    time_all=datetime.timedelta(seconds=0)#初始化
    time_types={}
    time_classes={}
    time_numbers={}
    for infor in infos:#取出该数组里的字典
        time_all +=infor['timespan']#求总通话次数
        infor_type=infor['type']
        if infor_type in time_types:
            time_types[infor_type]+=infor['timespan']
        else:
            time_types[infor_type]=infor['timespan']#按通话类型统计通话时间
        infor_class=infor['gpscity']
        if infor_class in time_classes:
            time_classes[infor_class]+=infor['timespan']
        else:
            time_classes[infor_class]=infor['timespan']#这里相当于先分类赋值再++,按归属地统计通话时间
        infor_number=infor['other_cellphone']
        if infor_number in time_numbers:
            time_numbers[infor_number]+=infor['timespan']
        else:
            time_numbers[infor_number]=infor['timespan']#根据号码统计通话时间
    
    print '总通话时间:%s' % time_all
    print
    print '总通话方式分类'
    for k,v in time_types.items():
        print k.encode('utf-8'),v
    print
    print '通话类型分类:'
    for k,v in time_classes.items():
        print k.encode('utf-8'),v
    print
    print '对方号码分类:'
    for k,v in time_numbers.items():
        print k,v

     再优化下代码

    # -*- coding:utf-8 -*-
    import xlrd
    from datetime import timedelta
    def read_excel(file_excel):#读excel并将需要的数据分类放在数组里
        infos=[]
        info_file=xlrd.open_workbook(file_excel)
        info_sheet=info_file.sheets()[0]
        row_count=info_sheet.nrows
        for row in range(1,row_count):
            time_string=info_sheet.cell(row,3).value
            time_s_sp=time_string.split(':')
            infos.append(
                {
                    'type':info_sheet.cell(row,2).value,
                    'other_cellphone':info_sheet.cell(row,0).value,
                    'timespan':timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])),
                    'gpscity':info_sheet.cell(row,5).value
    
                }
            )
        return infos
    def count_cell(list_dirs,infotype):#统计总通话及分类统计结果,存在字典里
        result_dir={}
        time_all=timedelta(seconds=0)
        for list_dir in list_dirs:
            time_all +=list_dir['timespan']
            info_type = list_dir[infotype]
            if info_type not in result_dir:
                result_dir[info_type]=list_dir['timespan']
            else:
                result_dir[info_type]+=list_dir['timespan']
        return time_all,result_dir
    def print_result(result_dir):#打印数据
        for k,v in result_dir.items():
            print k.encode('utf-8'),v
    
    if __name__=="__main__":
        list_dirs=read_excel('src.xls')
        time_all,result_type=count_cell(list_dirs,'type')
        result_cell=count_cell(list_dirs,'other_cellphone')
        result_gpscity = count_cell(list_dirs, 'gpscity')
        print '总通话时间:%s' % time_all
        print '按照通话类型分类:'
        print_result(result_type)
        print '按照号码分类:'
        print_result(result_cell[1])
        print '按照归属地分类:'
        print_result(result_gpscity[1])
  • 相关阅读:
    js中级-函数封装
    js中级-11.7
    js中级-11.5
    js中级-11.2
    js中级-this
    js中级-作用域链
    10.23
    10.22
    10.19js
    10.18
  • 原文地址:https://www.cnblogs.com/facexiaoxi/p/8557080.html
Copyright © 2011-2022 走看看