前序
这次在工作中需要对一个excel表格的数据进行可视化显示,但是数据有些不规则以及空白内容,所以做了一点简单的处理,利用python的pyecharts模块进行绘图并保存为html格式
上代码!
import xlrd import re from pyecharts import Bar,Pie#直方图/饼状图 data = xlrd.open_workbook("xywy.xlsx")#打开文件 table = data.sheets()[0]#取第一个sheet print(table.nrows)#打印行号列号 print(table.ncols) xdata =[] temp = [] ydata =[] man_num = 0 woman_num = 0 age_dic = {} age_value = [] age_num = [] for i in range(0,24):#二十四小时时间 xdata.append(i) for i in range(1,table.nrows): if len(table.row_values(i)[4]) == 19:#取出时间信息 time = int(table.row_values(i)[4][10:13])#去除小时位置 temp.append(time) if len(table.row_values(i)[2]) == 1:#取出性别信息 if table.row_values(i)[2] == "男": man_num += 1 else: woman_num += 1 if len(table.row_values(i)[3]) >= 1 and len(table.row_values(i)[3]) <= 4:#取出年龄信息 age = table.row_values(i)[3] if "月" in age or "天" in age:#年龄信息内含有月和天的视为0岁 if '0' in age_dic: age_dic[0] += 1 else: age_dic[0] = 1 else: linee = re.sub('[\u4e00-\u9fa5]','',age)#过滤汉字得到实际年龄数字 if int(linee) in age_dic: age_dic[int(linee)] += 1 else: age_dic[int(linee)] = 1 for i in range(0,24):#统计20小时出现次数 num = temp.count(i) if num != 0: ydata.append(num) else: ydata.append(0) a = sorted(age_dic.items(),key = lambda x:x[0])#排序年龄 print(a) print("-----------------------") age_dic.clear() for i in range(0,len(a),1): print(type(a[i])) age_dic[a[i][0]] = a[i][1] print(age_dic) for key in age_dic.keys(): age_value.append(key) age_num.append(age_dic[key]) #以下就是数据作为参数最后输出html bar_time = Bar("问诊时间","24小时制") bar_time.add("Time",xdata,ydata) bar_time.render("output/time.html") people_num = [man_num,woman_num] sex = ["Man","Woman"] Pie_sex = Pie("性别分类","男女") Pie_sex.add("sex",sex,people_num,is_label_show=True) Pie_sex.render("output/sex.html") bar_age = Bar("年龄分布","岁") bar_age.add("Age",age_value,age_num) bar_age.render("output/age.html")
以上就是程序主体内容,最后得到了绘制结果:
后续记录
记录一些写代码时遇到的问题的记录tips:
1.过滤字符串中汉字
linee = re.sub('[\u4e00-\u9fa5]','',age) #linee是返回字符串,re是正则表达式模块,age是原字符串
2.对字典进行排序
a = sorted(age_dic.items(),key = lambda x:x[0])#排序年龄 #此处根据字典的key排序返回到a中,返回值是元组
3.元组转字典
for i in range(0,len(a),1): print(type(a[i])) age_dic[a[i][0]] = a[i][1] #通过循环元组逐个赋值
4.最后是pyecharts库注意版本问题,最新的版本写法和成员函数都不太一样,我这下载的是0.1.9.4
>>> import pyecharts >>> pyecharts.__version__ '0.1.9.4' >>>
全部评论
(7) 回帖