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])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM