小而全的Pandas使用案例

Python中Pandas常用函数及案例详解 5、df.append() 功能:将另一个DataFrame添加到当前DataFrame的末尾。7、df.sort_values() 功能:根据一个或多个列的值对DataFrame进行排序。9、df.merge() 功能:按照指定的键(key)或者索引来合并两个DataFrame。2、pandas.DataFrame() 功能:创建一个DataFrame。3、df.loc 功能:基于行标签和列名来获取DataFrame的子集。10、df.corr() 功能:计算DataFrame中各列的相关系数。 阅读详情

本文给大家介绍一个简单的综合使用,主要分为:

  • 如何自行模拟数据

  • 多种数据处理方式

  • 数据统计与可视化

  • 用户RFM模型

  • 用户复购周期

构建数据

本案例中用的数据是小编自行模拟的,主要包含两个数据:订单数据和水果信息数据,并且会将两份数据合并

import pandas as pd
import numpy as np
import random
from datetime import *
import time

import plotly.express as px
import plotly.graph_objects as go
import plotly as py

# 绘制子图
from plotly.subplots import make_subplots

1、时间字段

2、水果和用户

3、生成订单数据

order = pd.DataFrame({
    "time":time_range,  # 下单时间
    "fruit":fruit_list,  # 水果名称
    "name":name_list,  # 顾客名
    # 购买量
    "kilogram":np.random.choice(list(range(50,100)), size=len(time_range),replace=True) 
})

order

 

4、生成水果的信息数据

infortmation = pd.DataFrame({
    "fruit":fruits,
    "price":[3.8, 8.9, 12.8, 6.8, 15.8, 4.9, 5.8, 7],
    "region":["华南","华北","西北","华中","西北","华南","华北","华中"]
})

infortmation

5、数据合并

将订单信息和水果信息直接合并成一个完整的DataFrame,这个df就是接下来处理的数据

 

6、生成新的字段:订单金额

到这里你可以学到:

  • 如何生成时间相关的数据

  • 如何从列表(可迭代对象)中生成随机数据

  • Pandas的DataFrame自行创建,包含生成新字段

  • Pandas数据合并

分析维度1:时间

2019-2021年每月销量走势

1、先把年份和月份提取出来:

df["year"] = df["time"].dt.year
df["month"] = df["time"].dt.month
# 同时提取年份和月份
df["year_month"] = df["time"].dt.strftime('%Y%m')

df

2、查看字段类型:

3、分年月统计并展示:

# 分年月统计销量
df1 = df.groupby(["year_month"])["kilogram"].sum().reset_index()

fig = px.bar(df1,x="year_month",y="kilogram",color="kilogram")
fig.update_layout(xaxis_tickangle=45)   # 倾斜角度

fig.show()

2019-2021销售额走势

df2 = df.groupby(["year_month"])["amount"].sum().reset_index()

df2["amount"] = df2["amount"].apply(lambda x:round(x,2))

fig = go.Figure()
fig.add_trace(go.Scatter(  #
    x=df2["year_month"],
    y=df2["amount"],
    mode='lines+markers', # mode模式选择
    name='lines')) # 名字

fig.update_layout(xaxis_tickangle=45)   # 倾斜角度

fig.show()

年度销量、销售额和平均销售额

分析维度2:商品

水果年度销量占比

df4 = df.groupby(["year","fruit"]).agg({"kilogram":"sum","amount":"sum"}).reset_index()
df4["year"] = df4["year"].astype(str)
df4["amount"] = df4["amount"].apply(lambda x: round(x,2))

from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(
    rows=1, 
    cols=3,
    subplot_titles=["2019年","2020年","2021年"],
    specs=[[{"type": "domain"},   # 通过type来指定类型
           {"type": "domain"},
           {"type": "domain"}]]
)  

years = df4["year"].unique().tolist()

for i, year in enumerate(years):
    name = df4[df4["year"] == year].fruit
    value = df4[df4["year"] == year].kilogram
    
    fig.add_traces(go.Pie(labels=name,
                        values=value
                       ),
                 rows=1,cols=i+1
                )

fig.update_traces(
    textposition='inside',   # 'inside','outside','auto','none'
    textinfo='percent+label',
    insidetextorientation='radial',   # horizontal、radial、tangential
    hole=.3,
    hoverinfo="label+percent+name"
)

fig.show()

各水果年度销售金额对比

years = df4["year"].unique().tolist()

for _, year in enumerate(years):
    
    df5 = df4[df4["year"]==year]
    fig = go.Figure(go.Treemap( 
        labels = df5["fruit"].tolist(),
        parents = df5["year"].tolist(),
        values = df5["amount"].tolist(),
        textinfo = "label+value+percent root"
    ))
    
    fig.show()

商品月度销量变化

fig = px.bar(df5,x="year_month",y="amount",color="fruit")
fig.update_layout(xaxis_tickangle=45)   # 倾斜角度
fig.show()

折线图展示的变化:

分析维度3:地区

不同地区的销量

不同地区年度平均销售额

df7 = df.groupby(["year","region"])["amount"].mean().reset_index()

分析维度4:用户

用户订单量、金额对比

df8 = df.groupby(["name"]).agg({"time":"count","amount":"sum"}).reset_index().rename(columns={"time":"order_number"})

df8.style.background_gradient(cmap="Spectral_r")

用户水果喜好

根据每个用户对每种水果的订单量和订单金额来分析:

df9 = df.groupby(["name","fruit"]).agg({"time":"count","amount":"sum"}).reset_index().rename(columns={"time":"number"})

df10 = df9.sort_values(["name","number","amount"],ascending=[True,False,False])

df10.style.bar(subset=["number","amount"],color="#a97fcf")

px.bar(df10,
       x="fruit",
       y="amount",
#            color="number",
       facet_col="name"
      )

用户分层—RFM模型

RFM模型是衡量客户价值和创利能力的重要工具和手段。

通过这个模型能够反映一个用户的交期交易行为、交易的总体频率和总交易金额3项指标,通过3个指标来描述该客户的价值状况;同时依据这三项指标将客户划分为8类客户价值:

  • Recency(R)是客户最近一次购买日期距离现在的天数,这个指标与分析的时间点有关,因此是变动的。理论上客户越是在近期发生购买行为,就越有可能复购

  • Frequency(F)指的是客户发生购买行为的次数--最常购买的消费者,忠诚度也就较高。增加顾客购买的次数意味着能占有更多的时长份额。

  • Monetary value(M)是客户购买花费的总金额。

下面通过Pandas的多个方法来分别求解这个3个指标,首先是F和M:每位客户的订单次数和总金额

如何求解R指标呢?

1、先求解每个订单和当前时间的差值

2、根据每个用户的这个差值R来进行升序排列,排在第一位的那条数据就是他最近购买记录:以xiaoming用户为例,最近一次是12月15号,和当前时间的差值是25天

3、根据用户去重,保留第一条数据,这样便得到每个用户的R指标:

4、数据合并得到3个指标:

当数据量足够大,用户足够多的时候,就可以只用RFM模型来将用户分成8个类型

用户复购周期分析

复购周期是用户每两次购买之间的时间间隔:以xiaoming用户为例,前2次的复购周期分别是4天和22天

下面是求解每个用户复购周期的过程:

1、每个用户的购买时间升序

2、将时间移动一个单位:

3、合并后的差值:

出现空值是每个用户的第一条记录之前是没有数据,后面直接删除了空值部分

直接取出天数的数值部分:

5、复购周期对比

px.bar(df16,
       x="day",
       y="name",
       orientation="h",
       color="day",
       color_continuous_scale="spectral"   # purples
      )

上图中矩形越窄表示间隔越小;每个用户整个复购周期由整个矩形长度决定。查看每个用户的整体复购周期之和与平均复购周期:

得到一个结论:Michk和Mike两个用户整体的复购周期是比较长的,长期来看是忠诚的用户;而且从平均复购周期来看,相对较低,说明在短时间内复购活跃。

从下面的小提琴中同样可以观察到,Michk和Mike的复购周期分布最为集中。

以上就是本次分享的所有内容,如果你觉得文章还不错,欢迎关注公众号:Python编程学习圈,每日干货分享,内容覆盖Python电子书、教程、数据库编程、Django,爬虫,云计算等等。或是前往编程学习网,了解更多编程技术知识。

pandas 数据透视表 使用函数 pivot_table( ) 阅读详情

相关推荐

158、NumPy与Pandas、Matplotlib的集成技巧及应用案例

本文介绍了Python开发中NumPy与其他库的集成技巧,主要围绕NumPy与Pandas、Matplotlib的结合使用进行阐述。通过实际案例,展示了如何利用这些库进行数据处理、分析和可视化。文章涵盖了从数据清洗、分析到图表绘制的整个流程,旨在帮助读者掌握Python数据科学的核心技能。

silenceallat的博客 1106

删除列表中的重复项

Pretty much I need to write a program to check if a list has any duplicates and if it does it remov

asdfgh0077的博客 2012

使用 Pandas 进行数据对比

在本文中,我们探讨了如何使用 Pandas 进行数据对比,包括数据加载、数据清洗、数据对比方法、结果分析等关键步骤。通过实际案例,我们展示了如何比较两个销售数据集,并找出销售额发生变化的产品。Pandas 提供了强大的工具和方法,可以帮助我们在数据分析过程中更加高效地完成数据对比任务。无论是对于初学者还是经验丰富的数据分析师,掌握这些技巧都是非常有用的。

C'mon的博客 1917

np.unique()的用法

该函数时去除数组中重复数字,并进行排序之后输出

qq_44798484的博客 1224

【案例+操作+演示】20分钟带你入门Pandas,掌握数据分析科学模块,附带上百个案例练习题【含答案】

这个一篇针对pandas新手的简短入门,想要了解更多复杂的内容,参阅Cookbook。

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 464

【CVPR 2025】低光增强HVI论文精读与源码复现---part1 论文网络精读

【CVPR 2025】本文参考论文HVI: A New Color Space for Low-light Image Enhancement part1 在文章中对论文核心网络与原理展开详细解释 part2 对论文公开代码的arch网络与其他核心部分展开详细解释

BOB_BOB_BOB_的博客 3267

Python基础知识(五)2021.2.4

循环结构 (二)for循环 (三)嵌套循环 嵌套循环练习 (四)break语句 (五)continue语句 (六)else语句 (七)循环代码优化技巧【极其重要】 (八)zip并行迭代 推导式创建序列 综合练习 第五章 函数用法和底层分析 (一)函数简介 (二)函数的定义和调用 ...

很注重数学和408 595

5分钟搞懂MSDNet:用Transformer实现小样本语义分割的保姆级教程

本文详细介绍了MSDNet(Multi-Scale Decoder Network)如何利用Transformer架构实现小样本语义分割。通过多尺度解码器和空间Transformer解码器,MSDNet能够在仅有1-5张标注图像的情况下完成精确分割任务。文章提供了PyTorch代码实例和优化技巧,帮助开发者快速掌握这一前沿技术。

weixin_30832143的博客 506

dataframe将其中两列分别处理成行索引和列索引

如题所述,我们的目标是将含有三列的dataframe中的两列分别处理成行索引和列索引,第三列则是(行索引,列索引)对应位置的值。 dataframe设为df1,其中三列分别为date,id,cnt date id cnt 2020-03-03 00:00:00 000001 7 2020-03-03 01:00:00 000002 4 2020-03-03 02:00:00 000003 9 2020-03-03 03:00:00 .

csg3140100993的博客 2211

基于大模型的重度膝关节骨关节炎全流程预测与治疗方案研究

本研究基于大模型构建了重度膝关节骨关节炎(KOA)预测体系,涵盖术前风险预测、手术方案优化、术中监测和术后康复指导全流程。通过分析临床和影像数据,模型在手术风险预测准确率(85%)、并发症预警(血栓预测准确率88%)等方面显著优于传统方法。研究实现了临床数据与AI技术的深度融合,术前预测指导麻醉选择(如高危患者推荐椎管内麻醉),术中实时监测生命体征,术后个性化康复方案使患者HSS评分平均提升45分。

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1390

Stata实战:RCS限制立方样条非线性关系建模与P值解读全攻略

本文详细介绍了在Stata中使用RCS限制立方样条进行非线性关系建模的全过程,包括数据准备、节点设置、COX回归模型构建、结果可视化及P值解读。通过乳腺癌临床数据实例,展示了如何捕捉年龄与死亡风险之间的复杂非线性关系,并提供了实用的Stata代码和图形优化技巧。

weixin_30650039的博客 472

【项目实战】Echarts+Python水果销售系统-django蔬菜水果商城系统

Echarts+Python水果销售系统包含用户和管理员的角色,用户可以查看水果信息、收藏、添加购物车购买、评价水果、查看水果宣传知识等,管理员可以管理员水果的宣传知识、管理分类、水果的信息、接受订单发货、对销量进行可视化的统计。

qq_2105837402的博客 1428

【PT+Arduino+OneNET基础教程1】PacketTracer中MCU芯片编程教程(零基础入门)

PacketTracer软件内MCU芯片编程入门 零基础

ChloeMax_的博客 9455

小而全的Pandas数据分析案例

公众号:尤而小屋作者:Peter编辑:Peter 大家好,我是Peter~ 写过很多关于Pandas的文章,本文开展了一个简单的综合使用,主要分为: 如何自行模拟数据 多种数据处理方式 数据统计与可视化 用户RFM模型 用户复购周期 构建数据 本案例中用的数据是小编自行模拟的,主要包含两个数据:订单数据和水果信息数据,并且会将两份数据合并 import pandas as pd import numpy as np import random from datetime import * imp.

尤尔小屋 1396

SIC知识(8)--碳化硅的制备难点

6. 器件制造难点:碳化硅器件制造过程中的掺杂步骤需要在高温下完成,且需要采用高温离子注入的方式,这与传统硅基器件的扩散工艺不同。这些步骤需要精密的设备和严格的工艺控制,以确保器件的结构和功能。综上所述,碳化硅的制备难点相较于传统硅基器件主要在于更高的制备温度、更慢的生长速度、晶型控制的复杂性、后加工的难度、外延工艺的低效率以及器件制造的特殊要求和较高的成本。- **数据管理**:需要有效的数据管理系统来跟踪和记录生产过程中的每一个步骤,包括原料的批次、生长条件、加工参数等,以确保产品质量的可追溯性。

阿拉伯梳子的专栏 1597

2026年1至9月武汉市房地产价格深度分析报告

本报告基于2026年1月至9月武汉市实际成交案例,从成交价格、区域分布、户型结构、价格走势等维度进行深度分析。数据来源包括武汉市住房保障和房屋管理局备案数据、主要中介机构成交记录及典型楼盘网签案例,覆盖全市15个行政区及主要功能板块。

王国平的博客 331

90个Pandas案例

90个Pandas案例 文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的 为了方便查找,先提供目录,一步定位! 如何使用列表和字典创建 Series 使用列表创建 Series 使用 name 参数创建 Series 使用简写的列表创建 Series 使用字典创建 Series 如何使用 Numpy 函数创建 Series 如何获取 Series 的索引和值 如何在创建 Series 时指定索引 如何获取 Series 的大小和形状 如何获取 Series 开始或末

郑哥哥の博客 3363

[系统安全] 四十七.恶意软件分析 (3)动态分析经典沙箱Cape的安装和基础用法详解

系统安全将更好地帮助初学者了解病毒逆向分析和系统安全。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助!

杨秀璋的专栏 6738

真香啊,5个小而美的 Pandas 实战案例

大家好,之前分享过很多关于 Pandas 的文章,今天我给大家分享5个小而美的 Pandas 实战案例,喜欢的小伙伴,记得收藏、分享、点赞。 内容主要分为: 如何自行模拟数据 多种数据处理方式 数据统计与可视化 用户RFM模型 用户复购周期 推荐文章 终于盼到了,Python 数据科学速查表中文版来了 上瘾了,最近又给公司撸了一个可视化大屏(附源码) 梳理半月有余,精心准备了17张知识思维导图,这次要讲清统计学 年终汇总:20份可视化大屏模板,直接套用真香(文末附源码

m0_59596937的博客 4054

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

python数据分析Pandas案例之股票分析

个人笔记之股票分析案例用来巩固完善pandas知识点,查缺补漏,还介绍了均线和金叉死叉等股票概念知识,并锻炼了用python进行一定的数据处理和数据分析的能力。

Magician_liu的博客 4281

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python之Pandas:pandas.DataFrame.to_csv函数的简介、具体案例、使用方法详细攻略

Python之Pandas:pandas.DataFrame.to_csv函数的简介、具体案例、使用方法详细攻略 目录 pandas.DataFrame.to_csv函数的简介 pandas.to_csv()函数的具体案例 pandas.DataFrame.to_csv函数的简介 DataFrame.to_csv(path_or_buf=None,sep=',',na_rep='',float_format=None,columns=None,header=True,

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

pandas-log 使用教程

pandas-log 使用教程 1. 项目介绍 pandas-log 是一个 Python 库,旨在为基本的 pandas 操作提供反馈。它提供了简单的包装函数,用于最常见的操作,如 query、apply、merge、group_by 等。通过 pandas-log,用户可以在执行这些操作时获得详细的日志信息,帮助快速定位问题和理解数据处理过程。 pandas-log 是 R 语言包 tidyl...

gitblog_00867的博客 1099

【学习笔记】《深入浅出Pandas》第17章:Pandas实战案例

学习笔记

weixin_43894455的博客 2412

20 个 Pandas 数据实战案例,干货多多

作者 |俊欣来源 | 关于数据分析与可视化今天我们讲一下pandas当中的数据过滤内容,小编之前也写过也一篇相类似的文章,但是是基于文本数据的过滤,大家有兴趣也可以去查阅一下。下面小编会...

AI科技大本营 4920
上一篇: 一个神器,大幅提升爬虫爬取效率!
下一篇: 用 Python 开发交互式 Web 应用,So Easy~
程序员小六
博客等级 码龄6年 111粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值