Python数分实战

学习视频:【课程3.0】Python基础与分析实战_哔哩哔哩_bilibili

        由于学习过python进行数据分析,所以就简单记录一下,最主要学习的还是视频最后的两个项目,进行实战

        之前想不明白明明有很智能的软件做数据分析,为什么还要学python,现在发现它处理txt文本格式的数据很方便,如图所示

列表和字典复习

[xx,xx,xx] 可以看作一行/一列数据

{k:v,k:v,k:v} 可以看作一行数据(含表头)

{k:v} 若v是列表,可以看作一列数据(含表头)

{k:v,k:v,k:v} 若v是列表,可以看作多行多列的数据(含表头)

[{k1:v,k2:v,k3:v},

{k1:v,k2:v,k3:v},

{k1:v,k2:v,k3:v}] 可以看作多行多列的数据(含表头)

数据预处理

        查看数据,发现每条广告数据表头字段都是一样的,那就代表我们只需要对一个处理,后面用循环就可以

        观察部分数据发现,比较明显的错误:GMV和成交金额都太大了且相同

取出数据,赋值

        取出第一条广告数据

去除重复值

        这里GMV和成交金额相同,那么为了更明显的观察,删除成交金额,保留GMV

处理异常值

        得知这里GMV单位出错了,这里的单位是分,那就除以100即可

增添必要字段

        作为一张广告数据表,必要的字段是roi,即投入产出比,成交额/成本,可以直观看到是负收入

分隔字段(广告策略)

        这里的广告计划名称特别长,得知代表的意义分别是:商品名称、人群标签、用户年龄、用户等级,按照下划线分割开来

        

循环处理

        上文都是对ad_1进行处理,我们需要第二条、第三条也被处理,可以手动把ad_list[0]中0改为1、2再运行一遍,但是比较麻烦

        这里用for循环很简单,先回顾一下for循环两种形式:

        item可以随意改名,menu是一个列表

        for item in menu:

                print(item)

        for i in range(len(menu)):【len(menu)更符合工作需求】

                print(menu[i])

这里增加了历史数据,需要同样处理然后整合

导入数据

        第二份数据太长了,直接粘贴过来可能会卡住,所以放在txt文件中导入进来,这里用的是with open,我记得我之前用的是read。这里还给了个名字history

        注意:数据现在是字符串类型的,需要修改

数据预处理

更改数据类型

        用到eval函数:自动计算括号内的表达式

循环处理

整合数据

        history数据没有1月1号的,用extend函数可以将ad_list增加到history尾部

条件筛选

        对每一条数据判断roi是否>=1,挑选出符合条件的数据取出

自定义函数

有参数输入,有返回值

        这里学习到一个新知识:f''

        f‘’可以将变量嵌入到内容当中

        注意:有返回值那我们需要用一个变量接住返回值

无参数输入,有返回值

有参数输入,无返回值

既没有输入参数,也没有返回值

处理单条数据

        这里我们只需要进行这个操作即可,无需返回什么

批量处理数据

        由于我们写好了处理单条数据的代码,那么可以直接放在for循环中遍历,也不需要输出

筛选数据

Pandas学习

        引入pandas,然后转为dataframe对象查看

series和dataframe

series

        一维数据结构,代表一列数据,name相当于这一列数据的表头字段,index则可以对索引命名

        这里再创建一个s2,将s1、s2用concat连接起来,会按照索引对应起来而不是按照顺序

dataframe

        可以看作由多个series组成

Pandas实战练习

数据读取

        1.这里可以直接读取数据,但是演示了一下如果跟原数据不在同一文件夹下的情况,就将上方搜索框内的内容复制 + \ + 原数据名称,注意前面要加个r

        2.converters参数,是在数据读取阶段将uid改为字符串形式,否则会自动给我们改为数字

        3.id列同样也希望是字符串形式,这里展示另一种改法,用astype函数

数据导出

        一般导出数据是excel格式,后缀是xlsx,这里的index=False代表去除导出表格里面第一列的索引

        如果有需求导出为csv格式,那么建议先导出为txt格式,按照制表符分隔,然后再用excel打开这个txt文件

数据访问

        访问列数据

        访问行数据

        访问行列

数据筛选

        data['progress']>=100000判断出每条数据满足条件为True,否则为False,外面再套一个data[]就能将为True的取出来

数据去重

        drop_duplicates()默认对完全重复的行去重,可以在内部添加参数

        subset:对某一列去重,例如每个uid对应一个人,那么肯定有用户发了多条弹幕,对uid去重可以看到有多少人发了弹幕

        keep:first保留最先一条数据,last保留最后一条数据

        inplace:一个赋值操作

        理解轴的概念,按照方向更好理解

合并

        导入第二张表,用pandas自带的concat函数将data和data2连接在一起

连接

        user_level是一张用户等级表,想给每个用户分等级,用pandas的merge函数连接两张表,第一个参数是左表,第二个参数是右表,how代表连接方式,默认为inner内连接,on代表连接的字段

        这里我们用rename修改uid这个列名,这时再用merge连接两表就需要增加左表连接字段和右表连接字段

排序

        sort_values按照某字段排序,ascending默认为升序,False代表降序

匿名函数

        可以写简单的函数

分组

        用group by进行分组,一般是为了使用聚合函数而分组,这里想对每个商品名称的消耗求和,如果直接写['消耗']结果是一个series对象,为了更直观地观察可以写成[['消耗']],会变成dataframe对象

        agg函数,希望对聚合字段看到不一样的聚合结果时使用

        这是另一种写法

        自定义函数写法,求最大值与最小值的差

转换

        相当于窗口函数,对每个商品名称的GMV求和,放入新的一列中

        注意:这里product_gp是history按照’商品名称‘分组过后的表,未聚合过是不可以用transform的

        

排名

        要求每个投放日期内GMV排名,那先要对’投放日期‘分组,然后对其中的GMV排序,排序用到rank函数

        method = ’dense‘代表密集排名方法,会为每个不同的值分配一个唯一的排名,并且相同的值将获得相同的排名。

        但是我们希望排名是整数,用astype修改类型

字符串方法

split

        对这一列用'_'分隔,expand代表拆分成列,这样用[0]、[1]可以直接取列

        像这样就添加到原表了

contains

        一个筛选功能,用contains可以对’商品名称‘列匹配’玩转‘这个字符串,有的会显示True,否则为False,那么外面套一层history[]就能将True的数据挑选出来

        reset_index是重置索引,drop是丢掉原来的索引

replace

        用注释内的代码写起来较简单,但是不美观

        可以使用正则表达式来做

extract

        我们只想提取此列中第一个_前的内容,就用extract来提取

绘图

折线图

        按照日期分组,对GMV求和,然后绘制折线图

柱形图

条形图

直方图

散点图

饼图

map、apply、applymap

map

        map对series或字典中每个数据进行操作,单列数据

apply

        apply对 Series 中的每个元素或 DataFrame 的每列/每行应用一个函数

        这里要注意,默认axis是为0的,但是这样传入的是一列一列的数据,相当一是按照索引值传入的,那么会找不到‘客单价’等字段,所以这里我们修改为axis=1

applymap

        applymap对 DataFrame 中的每个元素应用一个函数

apply使用补充

        当工作中有需求要自己填入参数,比如算出来的结果要乘以系数

        参数添加args=自行定义的参数

项目一:办公自动化

        项目背景:老板需要你提供抖音平台上,男士护肤品的带货视频

        简而言之,就是将这两张表的内容按一定顺序呈现到word里面,而我们熟知操作excel,但是并不会操作word,所以接下来我们要自主学习如何用python操作word

        自主学习思路:

        1.百度搜索python操作word,寻找各个帖子内提及最多的方法,我们会发现,最多的词是python-docx

        2.搜索打开python-docx官方文档,学习新知识可以先将示例运行一下,运行前要先下载一下python-docx,cmd运行(这里我一开始报错,因为没关代理,记得用pip下载时要关闭代理)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx

        3.运行过后发现多出一个word,将代码和word对比观察可以看到每部分代码做了什么事

        4.大致明白各代码作用后,可以删除下面增加分页和制作表格的代码,只保留上半部分便于学习

第一版

        我们希望将video_list表中品牌作为一级标题,AwemeDesc作为二级标题,speech_text表中的视频文案作为正文显示出来

        仿照示例写的代码如下

        结果如图

第二版

        我们希望可以循环处理这些数据,首先要读取这两张表进来,然后查看数据类型有没有问题,并将两张表连接起来

        用一个for循环将每一行中的所需字段提取出来

        结果如下

第三版

        在第二版的基础上,我们还需要优化

        1.标题一:我们希望标题一不会重复,相同的大标题只会出现一次。这里通过if判断语句来实现,当本条数据跟上一条数据的’品牌‘不一样或者是第一条数据时,才会将这条数据的’品牌‘变成大标题

        2.我们希望在标题二的后面可以加上’达人昵称‘和’视频地址‘,这里我们使用f语句,之前也使用过,可以读取字符串内的表达式,使其应用出来

        注意:在f''内部我们所提取的字段,类似:BloggerName需要改成双引号,跟f''区别开,否则报错

项目二:弹幕内容分析

数据处理

        首先导入用户等级表

        剩余的五张表由于表头都一样,所以我们不用一张一张导入,希望可以用循环导入并拼接起来

        这里用到新知识os.listdir,'./'代表在本文件夹中读取

        这里也是用for循环将五张表拼接起来,先将每张表读取出来,然后用concat拼接

        在进行合并操作前我们新增一列将数据来源于哪张表标注清楚

时间处理

        处理时间列要引入新函数,由于时间列是时间戳形式,用datetime.fromtimestamp转换,然后就可以用year等自动处理年月日,但是星期是标准日期没有的,要查询出来还得用datetime.isoweekday

时间分析

月份

        我们对2022年的数据分析

        发现:2022年3月份弹幕很活跃,但是并不能说明发弹幕的人多,所以我们再继续分析发弹幕的人数

        这里我们对uid进行不重复计数,用的是nuique函数

        结论:2022年3月份发送弹幕的人也是最多的

        假设:季节?视频进入推流池?这些猜想都无法被验证

星期

        惊人的发现:工作日1-4、周天,弹幕是最活跃的,周五、六活跃度下降

        这里使用pygwalker导入数据,省了很多代码

用户画像

数据处理

        分组计数,用transform扩展至每一组中数据

        两张表uid的类型不同,连接报错,修改一下user_level的uid类型

弹幕内容

        这里有个细节就是[['id']],变成dataframe对象,否则无法对id降序排列

        查看弹幕数最多的人都发了些什么

        第一行代码是限制最多展示300行

等级分布
 

        大部分分弹幕主要来自于4、5级用户,自学课程大部分发弹幕的观众是b站的粘性用户

        可以证实上述结论

视频内容

数据处理

        progress显示的是视频进度条,是毫秒,需要除以1000转换单位

        只要取时分秒即可转化为进度条

        我们要绘图不需要精确到秒,取时分即可

视频内容分析

        去掉开头结尾,11分钟有100条弹幕,但似乎并没什么特殊的;9分钟是因为有互动

        观察11分钟的弹幕内容

        其余几张表类似操作即可

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++票据查验、票据ocr、文字识别

现在,80、90后的人们逐渐过渡为职场上的主力人员,在工作中当然也会碰到各种各样的问题。比如,当你的老板给你一个艰难的任务时,肯定是不能直接拒绝的。那么我们该怎么做呢?翔云建议您先认真考虑老板说的任务的难度&…

倍福ADS通信教程

介绍 TwinCAT3 TwinCAT3是Beckhoff推出的一款基于PC的控制器软件,简单理解是一套集成开发环境,里边有各种分析工具以及通信中间件;开发者可以很方便的用它来进行IPC和PLC之间的通信连接 ADS 倍福ADS(‌Automation Device Spec…

WebRTC音视频开发读书笔记(六)

数据通道不仅可以发送文本消息, 还可以发送图片、二进制文件,将其类型binaryType属性设置成arraybuffer类型即可. 九\、文件传输 1、文件传输流程 (1)使用表单file打开本地文件 (2)使用FileReader读取文件的二进制数据 &#…

零基础学习Redis(5) -- redis单线程模型介绍

前面我们提到过,redis是单线程的,这期我们详细介绍一下redis的单线程模型 1. redis单线程模型 redis只使用一个线程处理所有的请求,并不是redis服务器进程内部只有一个线程,其实也存在多个线程,只不过多个线程是在处…

SparkSQL遵循ANSI标准

ANSI简介 ANSI Compliance通常指的是遵循美国国家标准学会(American National Standards Institute, ANSI)制定的标准。在计算机科学和技术领域,这通常涉及到数据库管理系统(DBMS)对于SQL语言的支持程度。 ANSI为SQL…

基于vue框架的爱学习分享平台ud317(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,学科分类,交流答疑,论坛交流,学习资料 开题报告内容 基于Vue框架的爱学习分享平台 开题报告 一、项目背景与意义 随着互联网技术的飞速发展,知识的获取与传播方式正经历着前所未有的变革。在线教育平台逐渐成为满足…

如何理解:进程控制

文章目录 前言:进程创建:进程终止:如何终止进程?进程等待非阻塞等待: 总结: 前言: ​ 对于前面的地址空间的学习,我们现在了解到原来所谓变量的地址其实是虚拟地址,该虚…

【数学建模备赛】Ep05:斯皮尔曼spearman相关系数

文章目录 一、前言🚀🚀🚀二、斯皮尔曼spearman相关系数:☀️☀️☀️1. 回顾皮尔逊相关系数2. 斯皮尔曼spearman相关系数3. 斯皮尔曼相关系数公式4. 另外一种斯皮尔曼相关系数定义5. matlab的用法5. matlab的用法 三、对斯皮尔曼相…

MySQL(二)——CRUD

文章目录 CRUD新增全列插入指定列插入插入查询结果 查询全列查询指定列查询查询字段为表达式表达式不包含字段表达式包含一个字段表达式包含多个字段 补充:别名去重查询排序条件查询 补充:运算符区间查询模糊查询NULL的查询 分页查询聚合查询聚合函数 分…

C++实现——红黑树

目录 1.红黑树 1.1红黑树的概念 1.2红黑树的性质 1.3红黑树节点的定义 1.4红黑树的插入操作 1.5红黑树的验证 1.6红黑树的删除 1.7红黑树与AVL树的比较 1.8红黑树的应用 1.红黑树 1.1红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位…

Chat App 项目之解析(二)

Chat App 项目介绍与解析(一)-CSDN博客文章浏览阅读76次。Chat App 是一个实时聊天应用程序,旨在为用户提供一个简单、直观的聊天平台。该应用程序不仅支持普通用户的注册和登录,还提供了管理员登录功能,以便管理员可以…

初识指针4の学习笔记

目录 1>>前言 2>>字符指针变量 3>>数组指针变量 4>>函数指针变量 5>>函数指针数组 6>>回调函数是什么? 7>>结语 1>>前言 今天我会继续分享一些我做的笔记,以及我对指针的理解, 后续会…

Vue状态管理工具:vuex

目录 基本概念 使用步骤 核心概念 1.State 2.Getters 3.Mutations 4.Actions 5.Modules 辅助函数 基本概念 基础用法 基本概念 官方:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以…

Android全面解析之context机制(三): 从源码角度分析context创建流程(下)

前言 前面已经讲了什么是context以及从源码角度分析context创建流程(上)。限于篇幅把四大组件中的广播和内容提供器的context获取流程放在了这篇文章。广播和内容提供器并不是context家族里的一员,所以他们本身并不是context,因而…

查找物理学领域文献的常用数据库

当我们查找文献时如果盲目去各个文献数据库查找不仅浪费时间和精力还不一定能找到自己需要的文献。我们需要对数据库有个简单的了解有方向的去寻找我们研究领域的文献资料,本文就向大家介绍一下查找物理学领域文献的数据库有哪些。 一、物理专业数据库(…

Android平台无纸化同屏如何实现实时录像功能

技术背景 我们在做无纸化同屏的时候,好多开发者采集到屏幕、麦克风|扬声器数据,除了需要推RTMP出去,或者启动个轻量级RTSP服务,对外提供个拉流的RTSP URL,别的终端过来拉流(小并发场景)&#x…

vue3基础ref,reactive,toRef ,toRefs 使用和理解

文章目录 一. ref基本用法在模板中使用ref 与 reactive 的区别使用场景 二. reactive基本用法在模板中使用reactive 与 ref 的区别使用场景性能优化 三. toRef基本用法示例在组件中的应用主要用途对比 ref 和 toRef 四. toRefs基本用法示例在组件中的应用主要用途对比 ref 和 t…

基于Arch的轻量级发行版Archcraft结合内网穿透实现远程SSH连接

文章目录 前言1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定SSH公网地址6. SSH固定地址连接 前言 本文主要介绍如何在Archcraft系统中安装Cpolar内网穿透工具,并以实现Windows环境ssh远程连接本地局域网Archcraft系统来说明使用内网…

高性能web服务器详解

一、Web服务的基础介绍 正常情况下单次web服务访问的流程简图: 1.1 Web服务介绍 这里介绍的是 Apache 和 NGINX 1.1.1 Apache 经典的Web服务端 Apache 起初由美国的伊利诺伊大学香槟分校的国家超级计算机应用中心开发 目前经历了两大版本分别是 1.X 和 2.X…

笔试练习day5

目录 游游的you题目解析解法方法一贪心方法二 腐烂的苹果题目解析例子1例子2解法多源BFS最短路径代码代码解析 JZ62 孩子们的游戏(圆圈中最后剩下的数)题目解析解法方法一模拟环形链表模拟数组模拟 方法二递推/递归/动态规划状态表示状态转移方程代码 感谢各位大佬对我的支持,如…