pandas(day10)

一. 各各品类产品交易指数对比

获取文件名
files = glob.glob("./*.xlsx")

# 读取数据,并改列名,增加一列 品牌
dfs = []
for f in files:
    t = f[2:4]
    df = pd.read_excel(f)
    df["品牌"] = t
    if t == "拜耳":
        df.rename(columns={"时间":"日期"},inplace=True)
    dfs.append(df)
   
#拼接 
data = pd.concat(dfs,ignore_index=True)
#创建品类列,且都为nan
data["品类"] = np.nan

d.index 
#(['上门服务', '杀虫剂', '白蚁', '虫', '虱', '蚂蚁', '蛾', '蝇', '螨', '蟑螂', '鼠'], dtype='object', name='适用对象')


# 从d.index 上门服务', '杀虫剂', '白蚁', '虫', '虱', '蚂蚁', '蛾', '蝇', '螨', '蟑螂', '鼠' 的 白蚁开始到最后,修改品类这一列
for x in d.index[2:]:
    data.loc[data.商品.str.contains(x),"品类"] = x 

# 对比三家公司 将各种品类的销售金额 进行对比
for x in d.index[2:]:
    display(x,data.query("品类 == @x").groupby("品牌").交易金额.sum())

二. 市场上商品结构

# 将品类为蟑螂的所有数据, 与 按照商品分类后对交易指数求和 的数据进行拼接,且把求和列改为 交易指数和
data = pd.merge(data.query("品类 == '蟑螂'"),data.groupby("商品").交易指数.sum().reset_index(0).rename(columns={"交易指数":"交易指数和"}),left_on="商品",right_on="商品")


# 每一家公司 对 同种商品 进行销售的 比例 (如果为 1 说明只有一家在售卖)
data["同种类商品售卖比例"]=data["交易指数"].div(data["交易指数和"])


#调和均值
data["交易增长幅度调和值"] = data["交易增长幅度"].mul(data["同种类商品售卖比例"])


# 现在df是根据商品分类,进行的一系列操作
df = data.groupby("商品")\
.agg({"交易指数":"sum","交易增长幅度调和值":"sum","商品":"count","品牌":"max"})\
.rename(columns={"交易指数":"相对市场占有率","交易增长幅度调和值":"相对市场增长率","商品":"产品数量"})


1.因为绘制BCG图时候,发现有些间隔中数据拉的过大,需要我们在选择时舍弃一些
display(df.describe(percentiles=[0.8,0.85,0.9,0.95,0.99,1]))  #描述统计

# 找到变化率不太快的位置  , 让大值 = 0.85位置的数值
# 这里的x 就是 下面action函数的 series。
def quantile(x,q=0.85):
    qu = x.quantile(q)  # 找到0.85百分的值
 # 如果当前的值 大于0.85的值,则当前值替换为0.85.否则不便
    return x.mask(x > qu, qu)   # mysql 当中 if(cond,True,False)  mask有循环的功效
    
# 截取数据,都替换成0.85的数据
def action(df):
    df = df.copy() #希望原先的数据不被修改
    df["相对市场占有率"] = quantile(df["相对市场占有率"])
    df["相对市场增长率"] = quantile(df["相对市场增长率"])
    return df

绘制

def BCGPlot(df,is_mean=True,xq=0.5,yq=0.5): #默认使用均值进行分割
    axes = sns.scatterplot(df,x="相对市场占有率",y="相对市场增长率",size="产品数量",hue="品牌")
    # 如果ismean 为true, 线都采用均值计算,否则用0.5分位进行绘制
    if is_mean:
        plt.axvline(df.相对市场占有率.mean(),c="k",ls=":",lw=1)
        plt.axhline(df.相对市场增长率.mean(),c="k",ls=":",lw=1)
    else:
        plt.axvline(df.相对市场占有率.quantile(xq),c="k",ls=":",lw=1)
        plt.axhline(df.相对市场增长率.quantile(yq),c="k",ls=":",lw=1)
    
    plt.text(250000,.8,"明星类",fontsize=20,color="y")
    plt.text(250000,-.5,"奶牛类",fontsize=20,color="r")
    plt.text(100000,.8,"山猫类",fontsize=20,color="b")
    plt.text(100000,-.5,"瘦狗类",fontsize=20,color="k")

 

三. 给数据打上标签 

def target(df,is_mean=True,xq=0.5,yq=0.5):
    相对市场占有率均值 = df["相对市场占有率"].mean()
    相对市场增长率均值 = df["相对市场增长率"].mean()

    df.loc[(df["相对市场占有率"] >= 相对市场占有率均值) & (df["相对市场增长率"] >= 相对市场增长率均值),"产品结构"] = "明星类"
    df.loc[(df["相对市场占有率"] >= 相对市场占有率均值) & (df["相对市场增长率"] < 相对市场增长率均值),"产品结构"] = "金牛类"
    df.loc[(df["相对市场占有率"] < 相对市场占有率均值) & (df["相对市场增长率"] >= 相对市场增长率均值),"产品结构"] = "山猫类"
    df.loc[(df["相对市场占有率"] < 相对市场占有率均值) & (df["相对市场增长率"] < 相对市场增长率均值),"产品结构"] = "瘦狗类"
    
    df.loc[(df["相对市场占有率"] >= 相对市场占有率均值) & (df["相对市场增长率"] >= 相对市场增长率均值),"序号"] = 2
    df.loc[(df["相对市场占有率"] >= 相对市场占有率均值) & (df["相对市场增长率"] < 相对市场增长率均值),"序号"] = 1
    df.loc[(df["相对市场占有率"] < 相对市场占有率均值) & (df["相对市场增长率"] >= 相对市场增长率均值),"序号"] = 3
    df.loc[(df["相对市场占有率"] < 相对市场占有率均值) & (df["相对市场增长率"] < 相对市场增长率均值),"序号"] = 4
    
    return df.sort_values(by="序号")

result = target(result)

 result 是各个产品结构(比如金牛),对每个结构的数量进行热力图绘制

# 进行透视, index是产品结构, 列名是品牌,对产品数量计数(查看金牛等产品的个数)
d = pd.pivot_table(data=result,index="产品结构",columns="品牌",values="产品数量",aggfunc="count").fillna(0)


sns.heatmap(data=d.loc[result.产品结构.unique()],annot=True,cmap="autumn",linewidths=1)

 

四.流量

  • ROI : 投资回报比

  • 不同的渠道, 带来的用户质量(客单价 退货率 转换程付费率) 微信视频

  • 投放广告的周期 ; 50W 7点 开投 - 9店 10点

  • 不同的人群

  • 不同的广告投放方式

  • 付费流量

  • "免费"流量

    • 淘宝客 : 自己生成链接 , 由淘宝客 推 链接出去 , 别人点击了链接 并且 购买了,则有提成
    • SEO优化 : 关键字(关键字热度)

五. 剔除无用数据

import re
# re.sub 替换, 将表情替换空
data["评论"]=data.评论.map(lambda x : re.sub(r"[^\u000000-\uffffff]+","",x))

data = data.loc[data.评论 != "此用户没有填写评论"]

六. 中文分词(jieba库)

import jieba  #结巴
from wordcloud import WordCloud

# 将一句话 切称 有意义的词,或短句
jieba.lcut(data.评论[2])
# 将数据划分为有用的词,然后选取大于1 的词
def fo(x):
    return [w for w in jieba.lcut(x) if len(w)>1]

mask = plt.imread("../../leaf.jpg") 

def wcplot(d):
    
    #去除停用词  我认为这些词汇 可能没有用处
    w = d.explode()  # 把一个列表多个词 分为一个一个的

    # w.isin() 是筛选在里的 , 取反取不是停用词
    w = w.loc[~w.isin(stopwords)]  #去除停用词
    
    c = w.value_counts()  #词计数
    
    #当前只是图片的配置项 返回词云画布
    wc = WordCloud(font_path="../../SimHei.ttf",mask=mask,width=1000,height=800,min_font_size=10,max_font_size=100,background_color="white")
    
    #这个就是生成了词云图
    wc.fit_words(c)
    # 借助 imshow 绘制
    plt.imshow(wc)
    # 去除坐标轴
    plt.axis("off")


d = data.query("品牌 == '拜耳'").评论.map(fo)

wcplot(d)

 七, 情感分析

def fo(x):
    s = pd.Series([w for w in jieba.lcut(x) if len(w)>1])
     # 这里去除 停用词 然后选取这些数据, join 是直接去除逗号
    return " ".join(s.loc[~s.isin(stopwords)])
    

textdata = data.评论.map(fo)



textdata.iloc[6]

a = data.loc[data.评论.str.contains("垃圾|完全没有效果|小强依然活跃")]
a["评价"] = 0

b= data.loc[data.评论.str.contains("必须好评|效果很好|强烈推荐")]
b["评价"] = 1

ab = pd.concat([a,b])
ab

八 . 贝叶斯分析

from sklearn.feature_extraction.text import TfidfVectorizer #把文字转换 成数字  #词向量

tfidf = TfidfVectorizer()

feature = tfidf.fit_transform(ab.评论) #179行数据  682个词汇

pred_feature = tfidf.transform(textdata) #更加上面682个词汇 把 当前的数据 也定义成  词向量

target = ab.评价


from sklearn.naive_bayes import BernoulliNB  #二项分布  添加越策标签


model = BernoulliNB().fit(feature,target)

pred_target = model.predict(pred_feature)

data["评价"] = pred_target

data.评价

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/536069.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言读取 .ico 文件并显示数据

原来是想做光标编辑器&#xff0c;自己把绘图板的内容导出为光标格式 鼠标指针文件格式解析——Windows&#xff08;一&#xff09; (qq.com) 代码来源自 Icons | Microsoft Learn 鄙人又补充些变量可以运行微软的代码 简单代码如下 #include <stdio.h> #include &l…

uniapp 小程序获取WiFi列表

<template><view ><button click"getWifiList">获取WiFi列表</button><scroll-view:scroll-top"scrollTop"scroll-yclass"content-pop"><viewclass"itemInfo"v-for"(item, index) in wifiList&…

unity——Button组件单击双击长按功能

1.实现单击、双击、长按功能 using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; public class ButtonControl_Click_Press_Double : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler {publi…

debian安装和基本使用

debian安装和基本使用 文章目录 debian安装和基本使用1. 为什么选择debian2. 如何下载Debian2.1 小型安装镜像2.2 完整安装镜像 3. Debian操作系统安装3.1 创建Debian虚拟机3.2 安装操作系统 4. Debian系统的初始设置4.1 桌面环境的配置4.2 配置网络4.3 生效网络配置4.4 配置de…

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏,又增加了哔哩哔哩搜索和必应搜索

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏&#xff0c;又增加了哔哩哔哩搜索和必应搜索. <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"…

Python学习之-matplotlib详解

前言&#xff1a; Matplotlib 是一个 Python 的图表绘制库&#xff0c;广泛用于生成各种静态、动态和交互式的图表。它能够创建线图、散点图、条形图、饼图、直方图、误差线图、箱型图、热图、子图网络、散点矩阵等图表。 安装 Matplotlib&#xff1a; pip install matplotli…

RocketMQ的docker安装和SpringBoot的集成

1.Docker安装 1.1创建docker-compose.yml文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876networks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxiswho/rocketmq:brokercontainer_name: rmqbrokerports…

docker完美安装分布式任务调度平台XXL-JOB

分布式任务调度平台XXL-JOB 1、官方文档 自己看 https://www.xuxueli.com/xxl-job/#1.1%20%E6%A6%82%E8%BF%B0 2、使用docker部署 本人使用的腾讯云&#xff0c;安装docker暴露一下端口&#xff0c;就很舒服的安装这个服务了。 docker pull xuxueli/xxl-job-admin:2.4.03…

ELFK的部署

目录 一、ELFK&#xff08;FilebeatELK&#xff09; 1. Filebeat的作用 2. ELFK工作流程 3. ELFK的部署 3.1 服务器配置 3.2 服务器环境 3.3 安装filebeat 3.4 修改filebeat主配置文件 3.5 在logstash组件所在节点&#xff08;apache节点&#xff09;上新建一个logstas…

关闭笔记本自带的键盘

目录 一、问题 二、方法 【方法一】 【方法二】 一、问题 笔记本自带的键盘上的个别按键又坏了&#xff0c;可能是因为使用电脑时&#xff0c;最先坏的几个按键那里温度比较高&#xff0c;久而久之就烧坏了吧。距离上次更换新键盘才差不多一年&#xff0c;所以不打算再买新…

librosa.beat.beat_track()报错解决记录

在使用librosa.beat.beat_track(yy, srsr)时报错&#xff1a;AttributeError: module scipy.signal has no attribute hann&#xff0c;很奇怪的问题&#xff0c;大家好像都没有遇到这个错误&#xff1a; 很奇怪&#xff0c;这个hann明明是scipy.signal.windows里面的。。虚拟环…

开发日志2024-04-11

开发日志2024/04/11 1、会员/普通用户预约完成后&#xff0c;技师对应的积分添加预约完成的项目价格添加到统计表的业绩字段中&#xff0c;同时对应的服务次数字段1 实现代码&#xff1a; 前端 shHandler(){this.$confirm(确定操作?, "提示", {confirmButtonText…

数据仓库的ELT/ETL

ETL 和 ELT 有很多共同点&#xff0c;从本质上讲&#xff0c;每种集成方法都可以将数据从源端抽取到数据仓库中&#xff0c;两者的区别在于数据在哪里进行转换。 01 ETL ETL – 抽取、转换、加载 从不同的数据源抽取信息&#xff0c;将其转换为根据业务定义的格式&#xff0…

如何实现word一键注音?给一篇word文章快速注音的方法

在日常生活和工作中&#xff0c;我们经常需要处理各种文档&#xff0c;其中不乏包含大量生僻字或需要标注拼音的文本。手动为每一个字添加拼音不仅效率低下&#xff0c;而且容易出错。那么&#xff0c;有没有一种方法可以实现Word文档的一键注音呢&#xff1f;本文将为大家详细…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果 一、简单介绍 二、简单视频卡通画效果实现原理 三、简单视频卡通画效果…

Python处理PDF:在PDF文档中插入页眉和页脚

在处理篇幅较长、结构复杂的PDF文档时&#xff0c;页眉和页脚的设计与插入就显得尤为重要。它们不仅扮演着美化文档、提升专业度的角色&#xff0c;更承担了导航指引、信息标注的重要功能。 页眉通常用于展示文档的标题或章节名称&#xff0c;有助于读者在翻阅过程中迅速定位所…

构建强大的物联网平台系统架构:关键步骤与最佳实践

随着物联网&#xff08;IoT&#xff09;技术的快速发展和广泛应用&#xff0c;越来越多的企业开始意识到搭建一个强大而可靠的物联网平台系统架构的重要性。一个完善的物联网平台可以帮助企业高效地管理和监控各种连接设备&#xff0c;并实现数据的收集、处理和分析。在本文中&…

【python】图像边缘检测

一、代码 import pyautogui import cv2 import numpy as np import time import os # 获取屏幕尺寸 screen_width, screen_height pyautogui.size() screen_size (1920, 1080) # cv2.namedWindow("Screen Capture", cv2.WINDOW_NORMAL) # cv2.resizeWindow("…

jetbrains全家桶历史版本下载(IDEA/PyCharm...)

IDEA&#xff1a; 其他版本 - IntelliJ IDEA (jetbrains.com)https://www.jetbrains.com/zh-cn/idea/download/other.html PyCharm: 其他版本 - PyCharm (jetbrains.com)https://www.jetbrains.com/zh-cn/pycharm/download/other.html Goland: 其他版本 - GoLand (jetbrain…

OpenHarmony4.0源码解析之媒体框架

媒体框架简介 媒体框架 multimedia_player_framework 主要提供音视频的录制与播放功能。 框架简介 从框架图中可以看出&#xff0c;媒体框架的主要工作模式为通过 Gstreamer 的插件自动化注册及插件组合功能&#xff0c;将其余媒体播放相关的框架功能插件化&#xff0c;配合 …