pandas(day10)

news2024/11/26 20:41:18

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

获取文件名
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.评价

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.NET MVC API Swagger 自动生成API文档入坑

开发环境 Win10 VS2022 .NET8.0 1.从NuGet添加Swagger 在解决方案资源管理器中右键单击项目>管理 NuGet 包 将包源设置为“nuget.org” 确保启用“包括预发行”选项 在搜索框中输入“Swashbuckle.AspNetCore” 从“浏览”选项卡中选择最新的“Swashbuckle.AspNetCore”包&a…

C++ | Leetcode C++题解之第21题合并两个有序链表

题解&#xff1a; 题解&#xff1a; class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* preHead new ListNode(-1);ListNode* prev preHead;while (l1 ! nullptr && l2 ! nullptr) {if (l1->val < l2->val) {prev-…

OJ刷题日记:1、双指针(1)

目录 1、283.移动零 2、1089.复写零 3、202.快乐数 1、283.移动零 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 …

PC-3000 Portable III、PC-3000 Express、PC-3000 UDMA 有哪些区别?

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设…

EEPROM读写案例(以AT24C02为例)

本篇文章主要是在学习单片机串行接口时的学习经历&#xff0c;主要侧重于驱动程序的讲解。下文将通过ESP32S3、STM32两款MCU进行编写驱动案例。 1、AT24C02简要说明 AT24C02是美国微芯科技公司生产的电擦写式只读存储器系列中的一款&#xff0c;其容量为2K位&#xff08;即256字…

ios包上架系列 四、虚拟机涉及网站

一、网站相关 苹果开发者平台 https://developer.apple.com/ 谷歌邮箱 https://mail.google.com/mail/u/0/#inbox 微云在线或者安装QQ https://www.weiyun.com/disk 下载下的为zip文件&#xff0c;需要复制里面的内容出来使用 二、环境配置 1、ios-upload 配置&#x…

LeetCode 最长重复子串的更换问题

LeetCode 最长重复子串的更换问题 在处理字符串问题时&#xff0c;我们经常会遇到一些具有挑战性的问题&#xff0c;比如今天的这个问题&#xff1a;给定一个字符串 s 和一个整数 k&#xff0c;我们的任务是找到可以通过最多更换 k 个字符来形成的最长重复子串的长度。 我的解…

【HDFS存储】Java语言实现

Hadoop生态系统中包含多种与其相关联的技术应用&#xff0c;主要包括但不限于HDFS HDFS&#xff08;Hadoop Distributed File System&#xff09;&#xff1a;作为一个高度可靠、高吞吐量的分布式文件系统&#xff0c;它是Hadoop核心技术之一&#xff0c;用于存储海量数据。 J…

如何停止 Win11 自动更新?如何彻底关闭 Windows 更新呢?

如何停止 Win11 自动更新&#xff1f;如何彻底关闭 Windows 更新呢&#xff1f; 段子手168 我们在使用电脑时&#xff0c;有时并不需要 windows 频繁更新系统&#xff0c; 这样可能会使你的 C 盘突然爆满或者系统启动缓慢&#xff0c; 那么如何彻底关闭 Windows 更新呢&#…

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

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

ETL工具-nifi干货系列 第九讲 处理器EvaluateJsonPath,根据JsonPath提取字段

1、其实这一节课本来按照计划一起学习RouteOnAttribute处理器&#xff08;相当于java中的ifelse&#xff0c;switch case 控制语句&#xff09;&#xff0c;但是在学习的过程中遇到了一些问题。RouteOnAttribute 需要依赖处理器EvaluateJsonPath&#xff0c;所以本节课我们一起…

ESP8266开发

1esp8266Wifi连接,通过手机控制点灯 1.下载Arduino,编程 2.下载blinker手机APP。 3.下载blinker库。https://arduino.me/s/blinker-arduino?aid=711 4.打开编程工具 Arduino,加载blinker库 5. 打开库里面的例程,基于例程开发。 blinker-library-0.3.10230510\blinker-…

JavaSE——常用API进阶二(2/8)-BigDecimal(BigDecimal的常见构造器、常用方法,用法示例,使用规范)

目录 BigDecimal BigDecimal的常见构造器、常用方法 用法示例 使用规范 在进行浮点型运算时&#xff0c;直接使用“ - * / ”可能会出现运算结果失真&#xff0c;例如&#xff1a; System.out.println(0.1 0.2); System.out.println(1.0 - 0.32); System.out.println(1.…

【Ubuntu】 Github Readme导入GIF

1.工具安装 我们使用 ffmpeg 软件来完成转换工作1.1 安装命令 sudo add-apt-repository ppa:jonathonf/ffmpeg-3sudo apt-get updatesudo apt-get install ffmpeg1.2 转换命令 &#xff08;1&#xff09;直接转换命令&#xff1a; ffmpeg -i out.mp4 out.gif(2) 带参数命令&…

哨兵-1A与DInSAR技术监测尼泊尔地震前后地表形变

2015年4月25号&#xff0c;尼泊尔发生里氏7.8级地震&#xff0c;超过5000人伤亡和几百万人受到影响。大量的卫星影像支持地震救援。地理学家利用卫星影像量测地震对陆地的影响。 Sentinel-1A是欧洲委员会发起的哥白尼环境监测计划中的第一颗卫星。可获取全天候的数据&#xff0…

大模型+交通治理,高德地图“评诊治”系统迎来全新升级

近日&#xff0c;由中国道路交通安全协会主办的第十四届中国国际道路交通安全产品博览会暨公安交警警用装备展(以下简称交博会)在厦门国际会展中心开幕&#xff0c;会上高德地图发布了全新升级的城市交通“评诊治”智能决策SaaS系统&#xff0c;以助力城市交通的可持续、精细化…

水利自动化控制系统平台介绍

水利自动化控制系统平台介绍 在当今社会&#xff0c;水资源的管理和保护日益成为全球关注的重要议题。随着科技的进步和信息化的发展&#xff0c;水利监测系统作为一种集成了现代信息技术、自动化控制技术以及环境监测技术的综合性平台&#xff0c;正在逐步改变传统的水利管理模…

Oracle 常用命令总结

文章目录 一、数据库启动 & 关闭&查看1、启动数据库2、关闭数据库3、连接数据库4、查看数据库名5、查看实例 二、用户1、创建用户2、重置密码3、账户解锁4、账号赋权5、账户撤销权限6、删除用户7、查询所有用户&#xff08;DBA账号执行&#xff09;8、查看当前用户连接…

卫星影像联合无人机实现农业保险全生命周期监管监测

随着科技的进步&#xff0c;农业保险监管系统的发展日新月异。特别是近年来&#xff0c;随着卫星技术与无人机技术的结合&#xff0c;为农业保险监管系统带来了前所未有的革新。本文将深入探讨如何利用卫星与无人机方案构建高效的农业保险监管系统&#xff0c;并结合实例进行说…

面试经典算法系列之二叉树3 -- 二叉树的层序遍历

面试经典算法18 - 二叉树的层序遍历 LeetCode.102 公众号&#xff1a;阿Q技术站 问题描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;roo…