数据分析处理(九)之口红

模拟自练数据分析

1、统计出防晒的产品保质期3年及以上且质量分高于4.55的前十数据,价格排序,绘图X轴为店名,Y轴为价格
2、绘制柱状图,X轴为各个国家,Y轴为只适合女的产品总数量。
3、哪个国家的不同店名数量最高前十名 绘图X为国家,Y为国家对应的店铺数量
4、以不同人群分组,得出对应分数量组下不同功效的数量,以数量降序排列,取出前五绘制饼状图。
5、取出总销量前10的产品,将其质量分和服务分取出来,绘制折现统计图,做在一张图里,对比质量分和服务分的情况。X轴总销量,Y轴分数
6、假设每样口红成本价是出售价的80%,求出不同产地(国家)下所有商品平均可以净赚多少钱。并平均价由高到低排序绘制柱状图,X为国家,Y轴为对应国家下的商品平均价。
7、以不同产地(国家)分组,绘制非防晒产品系列中,总销量,价格与总评数三个折线统计图,X为国家,Y轴为数量,取总销量前十的国家
8、按产地(国家)分类所有产品,组平均价大于平台(即整个的所有)商品平均价的商店数量柱状图,(提示:横轴为国家,纵轴为各产地(国家)对应商店数量)
9、求出价格Top10下对应的不同服务分的平均分数。绘制柱状图,X为价格,服务分平均分数为Y轴

表格结构如下:
在这里插入图片描述

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import re
plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
data=pd.read_excel('口红.xlsx')

1、统计出防晒的产品保质期3年及以上且质量分高于4.55的前十数据,价格排序,绘图X轴为店名,Y轴为价格

data['防晒']=data['防晒'].apply(lambda x:str(x).strip())  #去重空格
data1=data[(data['防晒']=='是')&(data['质量分']>4.55)&(data['保质期']=='3年及以上')]  #过滤条件
# data1['价格']=data1['价格'].apply(lambda x:float(re.sub('¥.*~','',x).replace('¥',''))) #把价格字段值重新定义成数字类型,方便后面操作
data2=data1.sort_values(by=['价格'],ascending=False)  #降序排列
X=data2['店名'].values[:10] #取出店名前十
Y=data2['价格'].values[:10] #取出价格前十
plt.xticks(np.arange(0,10),X,rotation=60) #设置X轴刻度线
plt.bar(['A','B','C','D','E','F','G','H','I','J'],Y) #先定义X轴头部
plt.show()

在这里插入图片描述

2、绘制柱状图,X轴为各个国家,Y轴为只适合女的产品总数量。

data1=data[data['适合人群']=='女']  #取出只适合女的产品
data2=data1[['国家','店名']] #适合女的产品中取出国家和店名的数据
data3=data2.groupby(by='国家').count() #以国家分组记数
data3.sort_values('店名',ascending=False,inplace=True) #以店名的数量排序
data3.plot(kind='bar') 

在这里插入图片描述

3、哪个国家的不同店名数量最高前十名 绘图X为国家,Y为国家对应的店铺数量

data1=data['国家'].unique()  #取出不同的国家
list=[]
for i in data1:#遍历国家
    data2=data[data['国家']==i].drop_duplicates(['店名'])['店名'].count() #遍历每个国家下对应的店名的数量
    list.append(data2)
data3=pd.DataFrame(list,index=data1) #构建DataFrame,值为不同店名数量,索引为国家
data4=data3.sort_values(0,ascending=False) #以店名数量降序排列
data4[:10].plot.bar() #构建前十的国家对应的店名的数量柱状图

在这里插入图片描述

4、以不同人群分组,得出对应分数量组下不同功效的数量,以数量降序排列,取出前五绘制饼状图。

data['适合人群']=data['适合人群'].fillna(value='空') #将适合人群为空的值赋值一个‘空’字符串
data1=data[['适合人群','功效']] #取出适合人群和功效的数据
data2=data1.groupby(by='适合人群')['功效'].nunique() #以人群分组,然后以功效取独自数据
data_index=data2.index #取出适合人群
data_value=data2.values #取出不同功效数量
data3=pd.DataFrame(data_value,index=data_index) #构建一个新的DataFrame类型,索引为适合人群,值为功效数量
data3.sort_values(0,ascending=False,inplace=True) #以标签索引取出值进行降序排列
data3[:5].plot.pie(subplots=True,autopct="%.2f%%",legend=False) 
#需要加subplots=True否则报错:ValueError: pie requires either y column or 'subplots=True'
#autopct是百分比,lengend=False去掉图例。

在这里插入图片描述

5、取出总销量前10的产品,将其质量分和服务分取出来,绘制折现统计图,做在一张图里,对比质量分和服务分的情况。X轴总销量,Y轴分数

data1=data.sort_values('总销量',ascending=False) #先排序总销量
data2=data1[:10][['质量分','服务分']] #取出前十条的俩个字段下的值
X=data1['总销量']
Y1=data2['质量分'] #取出质量分为Y1
Y2=data2['服务分'] #取出服务分为Y2
plt.xticks(np.arange(10),X,rotation=60)  #设置刻度线
plt.plot(['A','B','C','D','E','F','G','H','I','J'],Y1,label='质量分')  #绘制Y1
plt.plot(['A','B','C','D','E','F','G','H','I','J'],Y2,label='服务分') #绘制Y2
plt.legend() #图例
plt.show()  
​

在这里插入图片描述

6、假设每样口红成本价是出售价的80%,求出不同产地(国家)下所有商品平均可以净赚多少钱。并平均价由高到低排序绘制柱状图,X为国家,Y轴为对应国家下的商品平均价。

data['价格']=data['价格'].apply(lambda x:float(re.sub('¥.*~','',x).replace('¥',''))) #处理价格
data['利润']=(data['价格'])*(data['总销量'])*0.2  #设立一个新的利润值字段
data1=data[['利润','国家']]  #取出利润和国家
data2=data1.groupby(by='国家').mean()  #以国家分组,求对应数据的平均值,即利润的平均值
data2.sort_values('利润',ascending=False,inplace=True) #以利润排序
data2.plot(kind='bar') #绘制柱状图

在这里插入图片描述

7、以不同产地(国家)分组,绘制非防晒产品系列中,总销量,价格与总评数三个折线统计图,X为国家,Y轴为数量,取总销量前十的国家

data['价格']=data['价格'].apply(lambda x:float(re.sub('¥.*~','',x).replace('¥',''))) #处理价格为浮点类型
data['防晒']=data['防晒'].apply(lambda x:str(x).strip())  #去空格
data1=data[data['防晒']=='否']  #过滤条件为否的防晒产品
data2=data1[['国家','总销量','价格','总评价数']]  #取数据
data3=data2.groupby('国家').sum() #求总数量
data4=data3.sort_values('总销量',ascending=False)  #以总销量降序排列
data4[:10].plot()

在这里插入图片描述

8、按产地(国家)分类所有产品,组平均价大于平台(即整个的所有)商品平均价的商店数量柱状图,(提示:横轴为国家,纵轴为各产地(国家)对应商店数量)

data['价格']=data['价格'].apply(lambda x:float(re.sub('¥.*~','',x).replace('¥',''))) #处理价格为浮点类型
mean_price=data['价格'].mean()  #求所有价格的平均值
data1=data.groupby('国家').mean() #以国家分组求平均值(包含了分组求平均价的数据)
data2=data1[data1['价格']>mean_price] #取出分组后平均价格大于所有平均价的数据
data3=data2.index #取出索引即对于满足上述条件的国家
list=[]
for i in data3:  #遍历国家名字
    d=data[data['国家']==i]['店名'].nunique() #取出不同国家对于不同商店的数量
    list.append(d) #添加到列表构成新的数据
data4=pd.DataFrame(list,index=data3)  #构建新的DataFrame类型,国家为索引,对于商店数量为值
data5=data4.sort_values(0,ascending=False) #以值降序排列
Y=data5.values.reshape(1,11)[0]  #构建Y,取0是因为它是列表套列表,我们只需要一层列表
X=data5.index #设定X
plt.xticks(np.arange(0,11),X,rotation=60) #设置X刻度线
plt.bar(['A','B','C','D','E','F','G','H','I','J','L'],Y)  #绘制柱状图
plt.show()

在这里插入图片描述

9、求出价格Top10下对应的不同服务分的平均分数。绘制柱状图,X为价格,服务分平均分数为Y轴

data['价格']=data['价格'].apply(lambda x:float(re.sub('¥.*~','',x).replace('¥',''))) #处理价格为浮点类型
data1=data['价格'].unique().tolist()  #取出转成列表
data2=sorted(data1,reverse=True)[:10] #列表降序排列,取出前十条数据
list=[]
for i in data2: #遍历价格
    data3=data[data['价格']==i].drop_duplicates(['服务分'])['服务分'].mean() #对每次遍历的价格进行处理
    list.append(data3)
data4=pd.DataFrame(list,index=data2) #设定DataFrame类型,值为平均分,索引为价格
data5=data4.sort_values(0,ascending=False)  #以平均分降序排列
data5.plot.bar() #绘制柱状图    ​

在这里插入图片描述

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值