(一)无人便利店项目的可视化
(1)需求
新增用户日报表
- 每日新增用户数
- 月用户数
销售日报表
- 每日所有商品的总销售量
- 每日所有商品的总销售额
(2)代码如下:
from log import LogMangerSysimport datetimeimport reclass DataAnalysisSys:def __init__(self):#数据分析系统通过日志管理系统操作日志文件,分析数据self.log_manage = LogMangerSys()'''功能:根据指定时间间隔,获取当前时间前days天的日期参数:days:时间间隔,整数,如果获取当前日期则传入0format:日期格式化方式,“%Y%m%d”返回值:返回指定格式化后的日期'''def get_date(self,days,format):#获取当前日期today = datetime.datetime.today()#时间间隔timedelta = datetime.timedelta(days=days)#获取指定日期target_date = today - timedeltareturn target_date.strftime(format)'''功能:新增用户日报表'''def user_report(self):#获取统计报表的月份ym = self.get_date(3,"%Y%m")#通过日志管理系统读取用户信息csv文件datas = self.log_manage.read_log_csv("d://user_info.csv")new_user_dict = {} #格式:{"20180421":5,20180422":3,...}for data in datas:dt = data[1]rs = re.match("{}".format(ym),dt)if rs != None:#先从从存储新增用户数的字典中获取指定日期的新增用户数,然后+1user_num = new_user_dict.get(dt,0) + 1new_user_dict[dt] = user_numm_new_user_count = 0 #月新增用户#m_new_user_dict = {}for key,value in new_user_dict.items():m_new_user_count += value#m_new_user_dict[ym] = m_new_user_countprint("{}月每日新增用户数:{}".format(ym,new_user_dict))print("{}月新增用户数:{}".format(ym,m_new_user_count))'''功能:销售日报表'''def sale_report(self):# 获取统计报表的月份ym = self.get_date(3, "%Y%m")file_dir = "d://buy_log//"files = self.log_manage.list_dir_file(file_dir)sale_money_dict = {}sale_count_dict = {}for file in files:if re.match("user_buy_log_{}".format(ym),file):file_path = file_dir + filedatas = self.log_manage.read_log_csv(file_path)money = 0 #销售额count = 0 #销量for data in datas:money += float(data[1])#每个订单的金额累加,从文本读取出来的数据是字符串类型,需要转成浮点型items = data[2].split("|")count += len(items) #每天的销量 = 每个订单的商品列表数量累加file_date = file[13:21]sale_money_dict[file_date] = moneysale_count_dict[file_date] = countprint("{}月每日销量:{}".format(ym,sale_count_dict))print("{}月每日销售额:{}".format(ym,sale_money_dict))
(二)微信接口itchat
(1)介绍
- itchat是一个开源的第三方微信
- 安装方法:
c:\Users\thomas\PycharmProjects\venv\Scripts\pip3.6.exe install itchat
(2)代码
import itchat'''功能:微信好友性别分析报表功能:微信好友地域分布分析报表'''itchat.auto_login()friends = itchat.get_friends()male_count = 0female_count = 0other_count = 0province_dict = {}for friend in friends[1:]:gender = friend['Sex']province = friend["Province"]if gender == 1:male_count += 1elif gender == 2:female_count += 1else:other_count += 1if province == "":province = "Unknown"else:#使用get方法,如果province对应的键在列表中不存在,则创建,并赋给对应的value初值0,然后结果加1.如果存在,则直接key对应的value值加1.province_dict[province] = province_dict.get(province, 0) + 1total = len(friends[1:]) #含有总数print("------------*微信好友分析报告*----------------")print("好友总数:{}".format(total))print("男性好友数:%d,占比:%.2f%%"%(male_count,float(male_count)/total*100))print("女性好友数:%d,占比:%.2f%%"%(female_count,float(female_count)/total*100))print("未知性别好友数:%d,占比:%.2f%%" % (other_count, float(other_count) / total * 100))data_list = []for item in province_dict.items():data_list.append(item)data_list.sort(key=lambda item:item[1], reverse=True)list_final = data_list[:3]for item in list_final:print("好友最多的前三个省份的数据-{}:{}人".format(item[0],item[1]))
运行结果为:
------------*微信好友分析报告*----------------好友总数:254男性好友数:135,占比:53.15%女性好友数:96,占比:37.80%未知性别好友数:23,占比:9.06%好友最多的前三个省份的数据-上海:130人好友最多的前三个省份的数据-江苏:11人好友最多的前三个省份的数据-浙江:10人
(三)绘图库matplotlib
(1)简介
- 绘图库matplotlib是一个Python的2D绘图库,可以绘制常用的直方图、折线图、散点图等
- 安装方法:
c:\Users\thomas\PycharmProjects\venv\Scripts>pip3.6.exe install matplotlibCollecting matplotlibDownloading https://files.pythonhosted.org/packages/bf/b9/485032835e979ee11d514bb3b9b0543a928b8b96c099c178aeab1d2ba861/matplotlib-2.2.2-cp36-cp36m-win_amd64.whl (8.7MB)100% |████████████████████████████████| 8.7MB 55kB/sCollecting cycler>=0.10 (from matplotlib)Downloading https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whlCollecting pytz (from matplotlib)Downloading https://files.pythonhosted.org/packages/dc/83/15f7833b70d3e067ca91467ca245bae0f6fe56ddc7451aa0dc5606b120f2/pytz-2018.4-py2.py3-none-any.whl (510kB)100% |████████████████████████████████| 512kB 129kB/sCollecting pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 (from matplotlib)Downloading https://files.pythonhosted.org/packages/6a/8a/718fd7d3458f9fab8e67186b00abdd345b639976bc7fb3ae722e1b026a50/pyparsing-2.2.0-py2.py3-none-any.whl (56kB)100% |████████████████████████████████| 61kB 142kB/sCollecting python-dateutil>=2.1 (from matplotlib)Downloading https://files.pythonhosted.org/packages/0c/57/19f3a65bcf6d5be570ee8c35a5398496e10a0ddcbc95393b2d17f86aaaf8/python_dateutil-2.7.2-py2.py3-none-any.whl (212kB)100% |████████████████████████████████| 215kB 85kB/sCollecting numpy>=1.7.1 (from matplotlib)Downloading https://files.pythonhosted.org/packages/af/e4/7d7107bdfb5c33f6cf33cdafea8c27d1209cf0068a6e3e3d3342be6f3578/numpy-1.14.3-cp36-none-win_amd64.whl (13.4MB)100% |████████████████████████████████| 13.4MB 35kB/sCollecting kiwisolver>=1.0.1 (from matplotlib)Downloading https://files.pythonhosted.org/packages/44/72/16630c3392eba03788ad87949390516bbc488e8e118047a3b824631d21a6/kiwisolver-1.0.1-cp36-none-win_amd64.whl (57kB)100% |████████████████████████████████| 61kB 120kB/sCollecting six>=1.10 (from matplotlib)Downloading https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whlRequirement already satisfied: setuptools in c:\users\thomas\pycharmprojects\venv\lib\site-packages\setuptools-28.8.0-py3.6.egg (from kiwisolver>=1.0.1->matplotlib)Installing collected packages: six, cycler, pytz, pyparsing, python-dateutil, numpy, kiwisolver, matplotlibSuccessfully installed cycler-0.10.0 kiwisolver-1.0.1 matplotlib-2.2.2 numpy-1.14.3 pyparsing-2.2.0 python-dateutil-2.7.2 pytz-2018.4 six-1.11.0
(2)代码
import itchatimport matplotlib.pyplot as pltitchat.auto_login()friends = itchat.get_friends()male_count = 0female_count = 0other_count = 0province_dict = {}'''功能:根据数据生成饼图参数说明:datas:展示的数据列表labels:展示的数据标签'''def get_pie(datas, labels):# 设置字符集plt.rcParams["font.sans-serif"] = ["SimHei"]plt.figure(figsize=(8, 6), dpi=80)plt.axes(aspect=1)plt.pie(datas, labels=labels, autopct="%.2f%%", shadow=False)plt.title("微信好友性别分析图")plt.show()def get_bar(datas, labels):# 设置字符集plt.rcParams["font.sans-serif"] = ["SimHei"]plt.xlabel("province")plt.ylabel("count")plt.xticks(range(len(datas)), labels)plt.bar(range(len(datas)), datas, color="rgb")plt.title("微信好友地域分布图")plt.show()'''功能:微信好友性别分析报表功能:微信好友地域分布分析报表'''for friend in friends[1:]:gender = friend['Sex']province = friend["Province"]if gender == 1:male_count += 1elif gender == 2:female_count += 1else:other_count += 1if province == "":province = "Unknown"else:province_dict[province] = province_dict.get(province, 0) + 1total = len(friends[1:]) #含有总数print("------------*微信好友分析报告*----------------")print("好友总数:{}".format(total))print("男性好友数:%d,占比:%.2f%%" % (male_count,float(male_count)/total*100))print("女性好友数:%d,占比:%.2f%%" % (female_count,float(female_count)/total*100))print("未知性别好友数:%d,占比:%.2f%%" % (other_count, float(other_count) / total * 100))# 初始化饼图绘图参数,包括数据和标签datas = [male_count, female_count, other_count]labels = ["男性", "女性", "未知"]# 初始化柱状图绘图参数,包括数据和标签data_list = []# 针对各省人数降序排序for item in province_dict.items():data_list.append(item)data_list.sort(key=lambda item:item[1], reverse=True)#取人数前十名的省份list_final = data_list[:10]datas_list = []labels_list = []#将人数前十名的省份和人数,分别放入labels_list和datas_list中for item in list_final:datas_list.append(item[1])labels_list.append(item[0])#调用get_pie画饼图get_pie(datas, labels)#调用get_par画柱状图get_bar(datas_list, labels_list)
运行结果为:
Getting uuid of QR code.Downloading QR code.Please scan the QR code to log in.Please press confirm on your phone.Loading the contact, this may take a little while.Login successfully as 青峰------------*微信好友分析报告*----------------好友总数:254男性好友数:135,占比:53.15%女性好友数:96,占比:37.80%未知性别好友数:23,占比:9.06%LOG OUT!
以及生成的饼图以及柱状图
