图书销量情况对比
import pandas as pd
import matplotlib. pyplot as plt
df= pd. read_excel( 'mrbook.xlsx' )
df
序号 书号 序号.1 月份 销量 rate 0 B18 9.787569e+12 1 1月 1506 0.3 1 B19 9.787569e+12 2 2月 1200 -0.3 2 B25 9.787569e+12 3 3月 3305 0.6 3 B21 9.787569e+12 4 4月 6610 0.5 4 NaN NaN 5 5月 8888 0.3 5 B15 9.787569e+12 6 6月 12354 0.3
plt. rcParams[ 'font.sans-serif' ] = [ 'SimHei' ]
plt. rcParams[ 'axes.unicode_minus' ] = False
plt. figure( figsize= ( 12 , 9 ) )
fig, ax1 = plt. subplots( )
ax1. bar( df[ '月份' ] , df[ '销量' ] )
plt. title( label= ' 销量情况对比 ' ,
fontsize= 32 , weight= 'bold' , color= 'white' ,
backgroundcolor= '#cf778f' , ha = 'center' , pad = 30 )
ax1. tick_params( labelsize= 16 )
ax1. grid( lw = 0.5 , color = '#3c7f7f' , ls = '--' )
ax1. set_ylabel( '销售(册)' , fontsize= 18 )
ax2 = ax1. twinx( )
ax2. plot( df[ '月份' ] , df[ 'rate' ] , color= '#3c0f7f' , linestyle= '--' , marker= 'o' , linewidth= 2 )
ax2. set_ylabel( '增长率' , fontsize= 18 )
for a, b in zip ( df[ '月份' ] , df[ 'rate' ] ) :
plt. text( a, b+ 0.02 , '%.2f' % b, ha= 'center' , va= 'bottom' , fontsize= 10 , color= 'r' )
plt. show( )
订单数据分析
mrtb= pd. read_excel( 'mrtb_data.xlsx' )
mrtb. shape
mrtb. head( )
买家会员名 买家实际支付金额 宝贝总数量 宝贝标题 类别 宝贝种类 总金额 收货人姓名 性别 收货地址 ... 物流单号 确认收货时间 联系手机 联系电话 订单付款时间 订单关闭原因 订单创建时间 订单备注 订单状态 运送方式 0 mr000145 1100.0 1.0 【正版即插即用】ASP.NET编程词典珍藏版(含1TB移动硬盘)资源库 编程词典 1.0 1100.0 *** 男 ********** ... No:21026 2018-03-19 16:23:07 **** 'null 2018-03-09 14:55:49 订单未关闭 2018-03-09 10:00:36 'null 交易成功 快递 1 mr000492 1198.0 1.0 【正版即插即用】ASP.NET编程词典珍藏版(含1TB移动硬盘)资源库 编程词典 1.0 1198.0 *** 男 ********** ... No:21373 2018-06-15 10:57:01 **** 'null 2018-06-09 09:25:16 订单未关闭 2018-06-08 19:33:32 'null 交易成功 快递 2 mr000493 1198.0 1.0 【正版即插即用】ASP.NET编程词典珍藏版(含1TB移动硬盘)资源库 编程词典 1.0 1198.0 *** 男 ********** ... No:21374 2018-06-15 10:57:01 **** 'null 2018-06-09 09:25:16 订单未关闭 2018-06-08 19:33:32 'null 交易成功 快递 3 mr000247 1168.0 1.0 【正版-即插即用】C#编程词典珍藏版(含1TB移动硬盘)资源库 编程词典 1.0 1168.0 *** 男 ********** ... No:21128 2018-12-02 10:46:44 **** 'null 2018-11-20 19:21:58 订单未关闭 2018-11-20 19:21:33 'null 交易成功 快递 4 mr000271 1168.0 1.0 【正版-即插即用】C#编程词典珍藏版(含1TB移动硬盘)资源库 编程词典 1.0 1168.0 *** 女 ********** ... No:21152 2018-11-01 18:41:44 **** 'null 2018-10-29 02:31:39 订单未关闭 2018-10-29 02:30:37 'null 交易成功 快递
5 rows × 21 columns
不同性别在不同类别的消费分布
mrtb1= mrtb. groupby( [ '类别' ] ) [ '买家实际支付金额' ] . sum ( )
mrtb1
"""
类别
V1会员 7425.00
V2会员 14651.00
图书 44650.33
明日高级VIP 15096.00
编程词典 28681.20
Name: 买家实际支付金额, dtype: float64
"""
mrtb2= mrtb. groupby( [ '类别' , '性别' ] ) [ '买家会员名' ] . count( ) . reset_index( )
mrtb2
类别 性别 买家会员名 0 V1会员 女 31 1 V1会员 男 44 2 V2会员 女 36 3 V2会员 男 13 4 图书 女 50 5 图书 男 381 6 明日高级VIP 女 3 7 明日高级VIP 男 14 8 编程词典 女 6 9 编程词典 男 21
plt. figure( figsize= ( 8 , 6 ) )
plt. bar( mrtb1. index, mrtb1. values, color= 'blue' , alpha= 0.5 )
plt. xlabel( '类别' , fontsize= 12 )
plt. ylabel( '买家实际支付金额' , fontsize= 12 )
plt. title( '不同类别的买家实际支付金额' , fontsize= 16 )
plt. xticks( rotation= 45 )
plt. tight_layout( )
plt. show( )
不同性别在不同类别的消费分布
mrtb1_df = pd. DataFrame( mrtb1)
pivot_table = pd. pivot_table( mrtb1_df. merge( mrtb2, on= '类别' ) , index= '类别' , columns= '性别' , values= '买家实际支付金额' , aggfunc= 'sum' )
pivot_table
性别 女 男 类别 V1会员 7425.00 7425.00 V2会员 14651.00 14651.00 图书 44650.33 44650.33 明日高级VIP 15096.00 15096.00 编程词典 28681.20 28681.20
plt. figure( figsize= ( 8 , 6 ) )
categories = pivot_table. index
labels = pivot_table. columns
colors = [ 'pink' , 'lightblue' ]
bottom = None
for label in labels:
values = pivot_table[ label]
plt. bar( categories, values, bottom= bottom, label= label, color= colors. pop( 0 ) )
if bottom is None :
bottom = values
else :
bottom += values
for i, value in enumerate ( values) :
plt. annotate( f'¥ { value: .2f } ' , ( i, bottom[ i] ) , ha= 'center' , va= 'bottom' )
plt. xlabel( '类别' , fontsize= 12 )
plt. ylabel( '买家实际支付金额' , fontsize= 12 )
plt. title( '不同性别在不同类别的消费分布' , fontsize= 16 , backgroundcolor= '#cf778f' )
plt. legend( )
plt. xticks( rotation= 45 )
plt. tight_layout( )
plt. show( )
双色球中奖号码分析
win = pd. read_csv( 'data.csv' , encoding= 'gb2312' )
win. head( )
开奖日期 期号 中奖号码 销售额(元) 中奖注数一等奖 中奖注数二等奖 0 2020/1/16 2020007 05 12 17 20 25 31 10 358035962 38 (津 冀 吉 沪..) 269 1 2020/1/14 2020006 03 04 05 10 16 32 09 361697316 20 (浙 豫 粤 桂..) 363 2 2020/1/12 2020005 11 16 17 22 26 32 04 400642476 8 (冀 皖 赣 鄂..) 224 3 2020/1/9 2020004 02 15 17 27 32 33 03 370826158 7 (晋 浙 鲁 粤..) 189 4 2020/1/7 2020003 09 17 26 29 30 32 03 368960938 16 (苏 浙 鄂 湘..) 134
winning_numbers = win[ '中奖号码' ] . str . split( ' ' , expand= True )
winning_numbers
0 1 2 3 4 5 6 7 8 9 10 11 12 0 05 12 17 20 25 31 10 1 03 04 05 10 16 32 09 2 11 16 17 22 26 32 04 3 02 15 17 27 32 33 03 4 09 17 26 29 30 32 03 ... ... ... ... ... ... ... ... ... ... ... ... ... ... 827 08 10 12 14 18 28 14 828 01 04 19 22 24 25 15 829 06 10 11 28 30 33 12 830 04 21 23 31 32 33 04 831 03 09 15 20 27 29 01
832 rows × 13 columns
number_counts = winning_numbers. apply ( pd. value_counts) . fillna( 0 )
number_counts = number_counts[ [ 0 , 2 , 4 , 6 , 8 , 10 , 12 ] ]
number_counts. set_axis( range ( 1 , len ( number_counts. columns) + 1 ) , axis= 1 , inplace= True )
number_counts. head( )
1 2 3 4 5 6 7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 01 163.0 0.0 0.0 0.0 0.0 0.0 60.0 02 128.0 22.0 0.0 0.0 0.0 0.0 49.0 03 85.0 38.0 3.0 0.0 0.0 0.0 47.0 04 80.0 39.0 10.0 0.0 0.0 0.0 56.0
plt. figure( figsize= ( 10 , 8 ) )
sns. heatmap( number_counts, annot= True , fmt= 'g' , cmap= 'YlGnBu' )
plt. title( ' 双色球中奖号码次数热力图 ' , fontsize= 16 , backgroundcolor= '#cf778f' )
plt. xlabel( '中奖号码位置' , fontsize= 12 )
plt. ylabel( '中奖号码' , fontsize= 12 )
plt. xticks( rotation= 45 )
plt. yticks( rotation= 0 )
plt. tight_layout( )
plt. show( )