数据可视化实战(三)

图书销量情况对比

import pandas as pd
import matplotlib.pyplot as plt 

# 读取Excel数据
df=pd.read_excel('mrbook.xlsx')
df
序号书号序号.1月份销量rate
0B189.787569e+1211月15060.3
1B199.787569e+1222月1200-0.3
2B259.787569e+1233月33050.6
3B219.787569e+1244月66100.5
4NaNNaN55月88880.3
5B159.787569e+1266月123540.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.barh(y = industry.index[::-1],
#          width=industry.values[::-1],
#          color = '#3c7f7f')

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 = '--')
# 设置y轴标签
ax1.set_ylabel( '销售(册)', fontsize=18)

ax2 = ax1.twinx()
ax2.plot(df['月份'], df['rate'], color='#3c0f7f', linestyle='--', marker='o', linewidth=2)
# 设置y轴标签
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()

在这里插入图片描述

订单数据分析

# 读取Excel数据
mrtb=pd.read_excel('mrtb_data.xlsx')
mrtb.shape # (599, 21)
mrtb.head()
买家会员名买家实际支付金额宝贝总数量宝贝标题类别宝贝种类总金额收货人姓名性别收货地址...物流单号确认收货时间联系手机联系电话订单付款时间订单关闭原因订单创建时间订单备注订单状态运送方式
0mr0001451100.01.0【正版即插即用】ASP.NET编程词典珍藏版(含1TB移动硬盘)资源库编程词典1.01100.0*************...No:210262018-03-19 16:23:07****'null2018-03-09 14:55:49订单未关闭2018-03-09 10:00:36'null交易成功快递
1mr0004921198.01.0【正版即插即用】ASP.NET编程词典珍藏版(含1TB移动硬盘)资源库编程词典1.01198.0*************...No:213732018-06-15 10:57:01****'null2018-06-09 09:25:16订单未关闭2018-06-08 19:33:32'null交易成功快递
2mr0004931198.01.0【正版即插即用】ASP.NET编程词典珍藏版(含1TB移动硬盘)资源库编程词典1.01198.0*************...No:213742018-06-15 10:57:01****'null2018-06-09 09:25:16订单未关闭2018-06-08 19:33:32'null交易成功快递
3mr0002471168.01.0【正版-即插即用】C#编程词典珍藏版(含1TB移动硬盘)资源库编程词典1.01168.0*************...No:211282018-12-02 10:46:44****'null2018-11-20 19:21:58订单未关闭2018-11-20 19:21:33'null交易成功快递
4mr0002711168.01.0【正版-即插即用】C#编程词典珍藏版(含1TB移动硬盘)资源库编程词典1.01168.0*************...No:211522018-11-01 18:41:44****'null2018-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
类别性别买家会员名
0V1会员31
1V1会员44
2V2会员36
3V2会员13
4图书50
5图书381
6明日高级VIP3
7明日高级VIP14
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.007425.00
V2会员14651.0014651.00
图书44650.3344650.33
明日高级VIP15096.0015096.00
编程词典28681.2028681.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()
开奖日期期号中奖号码销售额(元)中奖注数一等奖中奖注数二等奖
02020/1/16202000705 12 17 20 25 31 1035803596238 (津 冀 吉 沪..)269
12020/1/14202000603 04 05 10 16 32 0936169731620 (浙 豫 粤 桂..)363
22020/1/12202000511 16 17 22 26 32 044006424768 (冀 皖 赣 鄂..)224
32020/1/9202000402 15 17 27 32 33 033708261587 (晋 浙 鲁 粤..)189
42020/1/7202000309 17 26 29 30 32 0336896093816 (苏 浙 鄂 湘..)134

# 提取中奖号码
winning_numbers = win['中奖号码'].str.split(' ', expand=True)

# 将"nan"替换为实际的NaN值
# df.replace("nan", np.nan, inplace=True)
# 填充NaN值为0
# winning_numbers.fillna(0, inplace=True).astype(int)

winning_numbers
0123456789101112
005121720253110
103040510163209
211161722263204
302151727323303
409172629303203
..........................................
82708101214182814
82801041922242515
82906101128303312
83004212331323304
83103091520272901

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()
1234567
0.00.00.00.00.00.00.0
01163.00.00.00.00.00.060.0
02128.022.00.00.00.00.049.0
0385.038.03.00.00.00.047.0
0480.039.010.00.00.00.056.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()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值