一般我们进行数据统计的时候要进行数据摸查,可能是摸查整体的分布情况啊。平均值,标准差,总数,各分段的人数啊。这时候用excel或者数据库统计都不方便。
我要统计的一个文件,太大了,还得分成15个文件,结果导一个进mysql都要导很久。再mysql进行编程,执行更久,很费事。
但是用python直接统计就很方便啦。
1 @author: pc 2 """ 3 import matplotlib as mpb 4 import pandas as pd 5 import pylab as pl 6 import numpy as np 7 #读取文件 8 #mnames=[' product_type','phone_num',' flow_total',' flow_used', 'phone_total',' phone_used' ] 9 mnames=['time'] 10 product=pd.read_table('C:\\Users\\pc\\Desktop\\time.txt',encoding='utf-8',sep='|',header=None,names=mnames) 11 # print(product['product_subtotal']) 12 #选取产品小计列 13 time=product['time'] 14 #按分位数划分区间 15 cats=pd.qcut(time,[0,0.2,0.4,0.6,0.8,1.0]) 16 # print(cats) 17 # print(pd.value_counts(cats)) 18 # print(product_subtotal) 19 count=time.value_counts() 20 #写入csv文件 21 count.to_csv('C:\\Users\\pc\\Desktop\\counts9.csv') 22 #输出描述性统计结果 23 print(time.describe()) 24 #根据电话号码查询某行的值 25 #num=product['phone_num'] 26 #print(product[product['phone_num']==18948482538]) 27 bins=np.arange(0,5000,100) 28 pl.hist(time, bins)
但是这是适合一个一个文件算,如果存在多个文件,我们可以使用python合并后计算。
#-*-coding:utf-8-*- import codecs import os filepath = "E:\\workspace\\test\\source\\usebill\\" #把要合并的文件放入一个文件夹 flist = os.listdir(filepath) fileWrite =codecs.open("../source/alluse.txt",'w+','utf-8')#编码方便 for file in flist: child = os.path.join('%s%s'%(filepath,file))#连接路径 print(child) fh = codecs.open(child,'r','utf-8') for line in fh.readlines(): fileWrite.write(line) fileWrite.close() import pandas as pd product=pd.read_table('..\\source\\alluse.txt',encoding='utf-8',sep='|',header=None) print(product[5][:10]) print(product[5].describe())
再说下编码一个小问题吧。多数的挖掘在unicode文件进行,f=open('XXXXX', 'r')
content=f.read().decode('utf-8')这是解码成unicode
参考 文件(gbk, utf-8...) decode 成为 unicode 文件 编码 encode- 成为 文件(gbk, utf-8...)