Python数据分析之商品零售购物篮分析
1 # -*- coding: utf-8 -*- 2 3 # 代码8-1 查看数据特征 4 5 import numpy as np 6 import pandas as pd 7 8 inputfile = '../data/GoodsOrder.csv' # 输入的数据文件 9 data = pd.read_csv(inputfile,encoding = 'gbk') # 读取数据 10 data .info() # 查看数据属性 11 12 data = data['id'] 13 description = [data.count(),data.min(), data.max()] # 依次计算总数、最小值、最大值 14 description = pd.DataFrame(description, index = ['Count','Min', 'Max']).T # 将结果存入数据框 15 print('描述性统计结果:\n',np.round(description)) # 输出结果 16 17 18 19 # 代码8-2 分析热销商品 20 21 # 销量排行前10商品的销量及其占比 22 import pandas as pd 23 inputfile = '../data/GoodsOrder.csv' # 输入的数据文件 24 data = pd.read_csv(inputfile,encoding = 'gbk') # 读取数据 25 group = data.groupby(['Goods']).count().reset_index() # 对商品进行分类汇总 26 sorted=group.sort_values('id',ascending=False) 27 print('销量排行前10商品的销量:\n', sorted[:10]) # 排序并查看前10位热销商品 28 29 # 画条形图展示出销量排行前10商品的销量 30 import matplotlib.pyplot as plt 31 x=sorted[:10]['Goods'] 32 y=sorted[:10]['id'] 33 plt.figure(figsize = (8, 4)) # 设置画布大小 34 plt.barh(x,y) 35 plt.rcParams['font.sans-serif'] = 'SimHei' 36 plt.xlabel('销量') # 设置x轴标题 37 plt.ylabel('商品类别') # 设置y轴标题 38 plt.title('商品的销量TOP10') # 设置标题 39 plt.savefig('../tmp/top10.png') # 把图片以.png格式保存 40 plt.show() # 展示图片 41 42 # 销量排行前10商品的销量占比 43 data_nums = data.shape[0] 44 for idnex, row in sorted[:10].iterrows(): 45 print(row['Goods'],row['id'],row['id']/data_nums) 46 47 48 49 50 # 代码8-3 各类别商品的销量及其占比 51 52 import pandas as pd 53 inputfile1 = '../data/GoodsOrder.csv' 54 inputfile2 = '../data/GoodsTypes.csv' 55 data = pd.read_csv(inputfile1,encoding = 'gbk') 56 types = pd.read_csv(inputfile2,encoding = 'gbk') # 读入数据 57 58 group = data.groupby(['Goods']).count().reset_index() 59 sort = group.sort_values('id',ascending = False).reset_index() 60 data_nums = data.shape[0] # 总量 61 del sort['index'] 62 63 sort_links = pd.merge(sort,types) # 合并两个datafreame 根据type 64 # 根据类别求和,每个商品类别的总量,并排序 65 sort_link = sort_links.groupby(['Types']).sum().reset_index() 66 sort_link = sort_link.sort_values('id',ascending = False).reset_index() 67 del sort_link['index'] # 删除“index”列 68 69 # 求百分比,然后更换列名,最后输出到文件 70 sort_link['count'] = sort_link.apply(lambda line: line['id']/data_nums,axis=1) 71 sort_link.rename(columns = {'count':'percent'},inplace = True) 72 print('各类别商品的销量及其占比:\n',sort_link) 73 outfile1 = '../tmp/percent.csv' 74 sort_link.to_csv(outfile1,index = False,header = True,encoding='gbk') # 保存结果 75 76 # 画饼图展示每类商品销量占比 77 import matplotlib.pyplot as plt 78 data = sort_link['percent'] 79 labels = sort_link['Types'] 80 plt.figure(figsize=(8, 6)) # 设置画布大小 81 plt.pie(data,labels=labels,autopct='%1.2f%%') 82 plt.rcParams['font.sans-serif'] = 'SimHei' 83 plt.title('每类商品销量占比') # 设置标题 84 plt.savefig('../tmp/persent.png') # 把图片以.png格式保存 85 plt.show() 86 87 88 89 # 代码8-4 非酒精饮料内部商品的销量及其占比 90 91 # 先筛选“非酒精饮料”类型的商品,然后求百分比,然后输出结果到文件。 92 selected = sort_links.loc[sort_links['Types'] == '非酒精饮料'] # 挑选商品类别为“非酒精饮料”并排序 93 child_nums = selected['id'].sum() # 对所有的“非酒精饮料”求和 94 selected['child_percent'] = selected.apply(lambda line: line['id']/child_nums,axis = 1) # 求百分比 95 selected.rename(columns = {'id':'count'},inplace = True) 96 print('非酒精饮料内部商品的销量及其占比:\n',selected) 97 outfile2 = '../tmp/child_percent.csv' 98 sort_link.to_csv(outfile2,index = False,header = True,encoding='gbk') # 输出结果 99 100 # 画饼图展示非酒精饮品内部各商品的销量占比 101 import matplotlib.pyplot as plt 102 data = selected['child_percent'] 103 labels = selected['Goods'] 104 plt.figure(figsize = (8,6)) # 设置画布大小 105 explode = (0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.08,0.3,0.1,0.3) # 设置每一块分割出的间隙大小 106 plt.pie(data,explode = explode,labels = labels,autopct = '%1.2f%%', 107 pctdistance = 1.1,labeldistance = 1.2) 108 plt.rcParams['font.sans-serif'] = 'SimHei' 109 plt.title("非酒精饮料内部各商品的销量占比") # 设置标题 110 plt.axis('equal') 111 plt.savefig('../tmp/child_persent.png') # 保存图形 112 plt.show() # 展示图形