数据分析python基础实战分析

数据分析python基础实战分析

安装python,建议安装Anaconda

【Anaconda下载链接】https://repo.anaconda.com/archive/

记得勾选上这个框框
在这里插入图片描述

安装完后,然后把这两个框框给取消掉再点完成
在这里插入图片描述

在电脑搜索框输入"Jupyter",牛马启动!
在这里插入图片描述

等待终端运行在这里插入图片描述

运行完后会自动弹出网页
在这里插入图片描述
这里建议设置一下目录,以便后续创建的所有文件容易找到:
新建一个目录“python练习”
在这里插入图片描述
输入“jupyter notebook”然后回车,就会运行终端弹出浏览器
在这里插入图片描述
这样就得到一个干净的笔记本啦,可以右上角new新建python文件写代码运行
在这里插入图片描述
shift + enter 运行
在这里插入图片描述

数据类型

常见有整型int,浮点型float,布尔型bool,字符串string,列表list,字典dict,根据业务变量需要而变化。

变量与赋值

变量 = 数值,将数值赋值给变量

数据结构

list列表:数据量级大的时候,将多个数据一同存储到一个变量,方便后面使用。
dict字典:{key(唯一):值},如果懂什么叫映射就理解dict。excel里的表头就相当于key,如果列的表头带着多个值可以这样写:{key : [ 值1, 值2, 值3] }表示一列,key作表头,有3行值的数据;如果是多列可以写成:{key1 : [ 值1, 值2, 值3] ,key2 : [ 值1, 值2, 值3] ,key3 : [ 值1, 值2, 值3] } ;还有这种 [{key1 : 值1 , key2 : 值2 ,key3 : 值3 }, {key1 : 值1 , key2 : 值2 ,key3 : 值3 }, {key1 : 值1 , key2 : 值2 ,key3 : 值3 }]

数据结构检索与访问

检索:列表[0,3] 代表从第0个开始,共3个
访问:字典[‘key’] 返回对应key的值

分析数据过程:

1.取出数据,赋值给一个变量。例如有个字典ad_list, ad_1 = ad_list[0],打印ad_1
2.处理重复数据,例如del ad_1[‘成交金额’],打印ad_1
3.处理异常值,ad_1[‘GMV’] = ad_1[‘GMV’]/100, 打印ad_1
4.发现缺少某些指标,例如ROI, ad_1[‘ROI’] = round(ad_1[‘GMV’]/ ad_1[‘消耗’],2),打印ad_1,并且roi保留两位小数
5.查看广告策略,例如 ad_1[‘商品名称’] = ad_1 [‘广告计划名称’].split(‘‘)[0], ad_1[‘人群标签’] = ad_1 [‘广告计划名称’].split(’’)[1], ad_1[‘用户年龄’] = ad_1 [‘广告计划名称’].split(‘‘)[2], ad_1[‘用户等级’] = ad_1 [‘广告计划名称’].split(’’)[3]

for循环

for item in list:print(item)//range()范围,这里3的意思是会产生一个0到3的序列范围,左闭右开
//len()长度,list里面有多少个数值
for i in range(len(list)):print(list[i])

如果数据太长,可以用txt保存在用python进行读取:

with open('历史数据.txt', 'r', encoding = 'utf-8') as f:history = f.readline()
//打印结果为字符串
history
//将字符串转换成list
history = eval(history)
history
//如果history需要整合其他list,ad_list会追加到history后面
history.extend(ad_list)

IF语句

if 条件:do
else:do
if 条件:do
elif 条件:do
else:do
#如果要取出ROI大于1的数据
roi_list = []
for i range(len(hisotry)):if history[i]['roi']>=1:print(history[i])roi_list.append(history[i])elsepass
#打印
roi_list

自定义函数

#参数输入,有返回值

#f''字符串可以在字符串中嵌套变量
def nooddle_machine(water, flour):print('搅拌……')print(f'{water}和{flour}已经变成面团')print('正在挤压面团')return f'由{water}和{flour}制作而成的面条已经ok了'
#使用
bowl = nooddle_machine('水','面粉')
bowl

#没有输入参数,但有返回值

import datetime
def yesterday():date = datetime.datetim.now() -- datetime.timedelta(days=1)return date.date()
yesterday = yesterday()
yesterday

#有输入参数,但没有返回值

def upload_data(date):print(f'已经将{date}的数据上传至数据库')
upload_data('2024-06-25')

#没有输入参数,没有返回值

def upload_data():date = yesterday()print(f'已经将{date}的数据上传到数据库')

批量处理:

def batch_data(data_list):for i in range(len(data_list)):process_data(data_list[i])#比方说选出ROI大于1的数据
def filter_roi(data_list):roi_list = []for i range(len(data_list)):if data_list[i]['ROI'] >=1:print(data_list[i])roi_list.append(data_list[i])else:passreturn ros_list

模块与包

import pandas as pd

Series/DataFrame

Series: 属于一维的

# name相当于表头
# index索引
s1 = pd.Series(['a','b','c'],name = 'test', index=['1','2','3'])#如果需要将两个Series整合
pd.concat([s1],[s2], axis=1)

DataFrame: 二维, 本质上是字典,里面的值是列表,可以理解成是Series构成的

pandas读取和导出

读取

import pandas as pd
data = pd.read_excel(r'路径\文件.xlsx',converters={'uid': str, 'id':str })
//查看数据
data.info()
#另一种方式
data['id'] = data['id'].astype(str)

导出

#index = False 可以去掉导出后excel的索引
data.to_excel('test excel.xlsx', index = False)data.to_csv('test csv.csv', encoding='GB18030')//文字能识别成功,但是数值会被Excel使用科学计数法代替
data.to_csv('test csv.txt', sep='\t')

访问与筛选

访问
访问列:data[‘字段名’]; 如果是多个字段->data[[‘字段名1’,‘字段名2’,‘字段名3’]]
访问行:data.iloc[1]; data.iloc[1:6],左闭右开返回2到5行数据; data.iloc[1:6][‘字段名’],返回2到5行这个字段的数据
筛选
主要是通过True and false来判断
data[data[‘progress’] >= 100000 ]
去重筛选
data.drop_duplicates(subset=‘uid’, keep =‘last’, inplace=True)

轴/合并/连接

:axis=0是行,axis=1是列,axis相当于方向
合并:concat_demo = pd.concat([data, data2], axis=0)
连接:pd.merge(左表, 右表, how=‘inner’, on=‘uid’)
如果名字不一样:
rename:左表.rename(columns = {‘uid’: ‘user_id’ }, inplace = True)
pd.merge(左表, 右表, how=‘inner’, left_on=‘uid’, right=‘user_id’)

排序与匿名函数

排序
data.sort_values([‘uid’,‘ctime’], ascending = [True, False])
匿名函数
add2 = lambda x: x+5
add3 = lambda x, y : x+y

分组/聚合/转换

分组:分组只会创建一个object,再用object去调用count方法
data_manager = data.groupby(‘字段’)->data_manager.count()

聚合
先groupby后再调用聚合方法
data_manager[[‘消耗’,‘GMV’]].sum()
data_manager[[‘消耗’,‘GMV’]].agg([‘max’,‘min’])//看每个字段的最大和最小
data_manager.agg({‘消耗’: [‘max’,‘min’], ‘GMV’ : ‘min’})
算最大值和最小值的差值
data_manager[[‘消耗’,‘GMV’]].agg(lambda x: x.max() - x.min())

转换
data_manager[‘GMV’].transform(func=‘sum’)
同效果:data_manager[‘GMV’].agg(func=‘sum’)
组内排名:
#每个投放日期内,广告计划ID和GMV排名

history['每日GMV排名'] = history.groupby('投放日期')['GMV'].rank(method = 'dense', ascending =False)
history['每日GMV排名'] = history['每日GMV排名'].astype(int)
history.head(20)

字符串,数据清洗

split::用什么符号分割

history[’广告计划名称‘].str.split('_', expand=True),返回一个DataFrame

contains:字符串中包含了什么内容

`history[history['商品名称'].str.contains('玩转'),返回值是布尔`值].reset_index(drop=True)

replace:
举例,将《》两个符号改成【】

history['商品名称'].str.replace('《','【').str.replace('》','】')

结合正则表达式,更简洁的方式:

正则表达式在线测试网站:https://regex101.com/

history['商品名称'].str.replace(r'《(.*?)》',r'【\1】',regex=True)

extract:提取一个数据里面的部分内容

history['广告计划名称'].str.extract(r'(.*?)_')

绘图

折线图

history.groupby('投放日期')['GMV'].sum().plot(kind='line', x='投放日期', y='GMV')#如果想导入中文字体
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'

柱状图

history.groupby('广告计划ID')['GMV'].sum().plot(kind='bar', x='广告计划ID', y='GMV')

水平柱状图

history.groupby('广告计划ID')['GMV'].sum().plot(kind='barh', x='广告计划ID', y='GMV')

直方图

history['GMV'].plot(kind = 'hist')

散点图

history.plot(kind ='scatter', x='GMV', y='消耗')

饼图

history.groupby('广告计划ID')['GMV'].sum().plot(kind ='pie')

PyGWalker
安装:在电脑CMD输入
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygwalker
使用

import pygwalker as pw
pw.walk(history)

在这里插入图片描述

map/apply/applymap

map: 对列或行进行处理
将GMV列的数据转换成int型

history['GMV'].map(lambda x : int(x))

与apply不同的可以用字典:
history[‘人群标签’].map({‘数据分析’ : ‘数分’})

apply:
如果操作的数据类型式DataFrame,则使用apply或者applymap。

#举例,因为这个是从左往右相加,所以要用axis进行定义,args是对系数设置 :
coe = None
if condition1:coe = 0.8
elif condition2:coe = 0.5
elif condition3:coe = 0.3def demo(x, coe):formular = x['客单价'] + x['消耗'] +['直播间消耗']formular = formular + x['GMV']return formular * coehistory.apply(demo, axis=1, args=(coe,))

applymap:所有字段都需要做同一个处理,其实apply也能做到

办公自动化:

背景:老板需要提供抖音平台上男士护肤品牌的带货视频,将已有的excel数据转换成word文档展示给老板看。

首先明确python怎么操作word,再确认将excel整合到word的格式。
CMD安装python-docx

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

1.导入pandas as pd获取excel数据

import pandas as pd
video_list = pd.read_excel('video_list.xlsx')
speech_text = pd.read_excel('speech_text.xlsx')#检查数据,用vide_list.info()发现id为转换成整型,应该需要字符串
video_list['AwemeId'] = video_list['AwemeId'].astype(str)
speech_text['VideoId'] = speech_text['VideoId'].astype(str)#将两个表连接一起
merge = pd.merge(video_list, speech_text, how = 'inner', left_on ='AwemeId', right_on ='VideoId')

创建一个空的document:

from docx import Document
document = Document()

记得每次要新建的文件要重新赋值Document()

document = Document()
for i in range(len(merge)):#如果遇到同一个品牌的时候无须重复创建,i == 0 防止第一条查找时报错if merge.iloc[i]['品牌'] != merge.iloc[i-1]['品牌'] or i == 0:document.add_heading(merge.iloc[i]['品牌'],level = 1)document.add_heading(merge.iloc[i]['视频标题'],level = 2)document.add_paragraph(f'达人昵称:{merge.iloc[i]["BloggerName"]}')document.add_paragraph(f'视频链接:douyin.com/video/{merge.iloc[i]["AwemeId"]}')document.add_paragraph(merge.iloc[i]['视频文案'])
document.save('demo.docx')

探索分析

背景:得到一组弹幕数据,怎么做内容分析

数据处理
导入

import pandas as pduser_level = pd.read_excel('user_level.xlsx') 
#将本地文件整合
import os
excel_list = []for item in os.listdir('./'):if 'xlsx' in item and 'user_level' not in item:excel_list.append(item)danmu = pd.DataFrame()
for item in excel_list:excel = pd.read_excel(item,converters = {'id': str, 'uid' : str, 'Awemeid' : str})#合并前新建一个字段区分每个表excel['视频标题'] = itemdanmu = pd.concat([danmu, excel], axis=0)

时间处理
时间维度

danmu['弹幕创建时间'] = danmu['ctime'].map(datetime.fromtimestamp)danmu['年'] = danmu['弹幕创建时间'].map(lambda x: x.year)
danmu['月份'] = danmu['弹幕创建时间'].map(lambda x: x.month)
danmu['星期'] = danmu['弹幕创建时间'].map(datetime.isoweekday)
danmu['小时'] = danmu['弹幕创建时间'].map(lambda x: x.hour)

时间可视化分析

#准备画图工具,字体设置微软雅黑
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']danmu_year = danmu[danmu['年']==2022]
danmu_year.groupby('月份')[['id']].count().plot()
danmu_year.groupby('月份')[['uid']].nunique().plot()

在这里插入图片描述

danmu_year.groupby('星期')[['id']].count().plot()
danmu_year.groupby('星期')[['uid']].nunique().plot()

在这里插入图片描述

danmu_year.groupby('小时')[['id']].count().plot()
danmu_year.groupby('小时')[['uid']].nunique().plot()

在这里插入图片描述

用户画像:
用户处理

#统计用户弹幕的数
danmu['用户弹幕数'] = danmu.groupby('uid')['id'].transform('count')
#想加上另一个表的level字段,记得id号on的时候类型要保持一致,这里是字符串
user_level['uid'] = user_level['uid'].astype(str)
danmu_level = pd.merge(danmu, user_level, on = 'uid', how = 'inner')

弹幕内容

#按降序排弹幕数最多的用户,新建一个id列来存储count数
danmu_level.groupby('uid')[['id']].count().sort_values('id', ascending=False)
#限制300行数据,选定一个id用户来看
pd.set_option('display.max_rows',300)
danmu_level[danmu_level['uid'] == '6653485828143602809']

等级分布

#画出用户等级柱状图
danmu_level.groupby('level')[['id']].count().plot(kind='bar')

在这里插入图片描述

#看用户的唯一值,可用于验证假设
danmu_level.groupby('level')[['uid']].nunique().plot(kind='bar')

在这里插入图片描述
视频内容

视频内容处理

from time import strftime
from time import gmtimedanmu['视频进度'] = danmu['progress'].map(lambda x: strftime('%H:%M:%S',gmtime(x)))
#取时和分
danmu['视频进度【时分】'] = danmu['视频进度'].str[:5]

视频内容分析

p1 =  danmu[danmu['视频标题']=='1、系统认识数据分析.xlsx']
p1.groupby('视频进度【时分】')[['id']].count().sort_values('id',ascending=False)#查看某时分的视频内容
p1[p1['视频进度【时分】'] == '00:11']

总结:
分析一个数据的时候可以从3个维度,时间,画像,内容进行分析, 时间维度可以提出猜想与假设,画像和内容可以判断出某些真实用户的情况,即可以提出某些结论;具体执行过程可以分为3步,1.先进行数据处理,2.再拿处理好的数据进行分析,3.提出假设,再看实际内容验证假设。

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

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

相关文章

网易严选礼品卡有什么用?

网易严选的礼品卡可以在网易商城里买东西 但是现在好多人买东西基本上都用的是淘宝京东之类的 很少会有人用网易吧 但是最近我朋友送了我几张网易的卡,我自己也用积分兑换一张,一直不知道怎么用 最后还是在收卡云上转让出去了,价格高不说…

2024年JCR分区,将发生重大变化

科睿唯安官方微信发布消息,指出今年的期刊排名及相应JCR分区将发生重大变化。 原文比较长,不熟悉相关规则的朋友也不太容易读懂。因此,我们今天做一个详细的解读。 首先明确几个基本概念: (1)2024年发布2…

File类和IO流

File类和IO流 文章目录 File类和IO流[TOC](文章目录)前言一、java.io.File类&IO流原理及流的分类1.1 File类及其API1.2 IO流原理及分类 二、节点流的介绍(字符/字节)2.1 Reader\Writer--字符IO抽象基类2.2 FileReader\FileWriter--字符IO节点流2.3 I…

Android 多媒体开发——Media3与MediaSession最全使用指南

一、Media3库简介 1.1 Media3是什么? 官方释义: Jetpack Media3 is the new home for media libraries that enables Android apps to display rich audio and visual experiences. Media3 offers a simple architecture with powerful customization,…

Git 和 TortoiseGit 安装和配置(图文详解)

使用git,需要在Windows上需要安装两个软件:1)Git 2)TortoiseGit 若需要,可以下载TortoiseGit汉化语言包。 注意:tortoiseGit是在安装了Git的基础上运行的,所以需要先安装Git,后安装…

Mysql索引的实现原理,B+Tree,WAL

InnoDB 引擎,每一个数据表有两个文件 .frm和.ibd,分别为表结构,数据和索引,数据挂在主索引的叶子节点上,此主索引称为聚簇索引。 MyISAM 引擎,每一个数据表有三个文件.frm和.MYI和.MYD,分别为表…

深入理解计算机系统 CSAPP 家庭作业7.13

用一下496页提到的工具咯 A: whereis libm.a file lidm.a gedit libm.a libm.a是个ASCII text文件打开一看原来 libm-2.27.a 和libmvec.a才是我们要看的 所以我们cd到目标地址后 ar -t libm-2.27.a ar -t libmvec.a B: gcc -Og bar5.c foo5.c 用之前的两个文件链接后生成…

【CS.DS】数据结构 —— 图:深入了解三种表示方法之邻接表(Adjacency List)

文章目录 1 概念2 无向图的邻接表2.1 示例2.2 Mermaid 图示例2.3 C实现2.3.1 简单实现2.3.2 优化封装 2.4 总结 3 有向图的邻接表3.1 示例3.2 C实现3.3 总结 4 邻接图的遍历5 拓展补充References 数据结构 1 概念 优点:空间效率高,适合稀疏图。动态性强…

springboot 整合redis

文章目录 一、Jedis二、Lettuce三、RedisTemplate(重点)单机3.1 springboot 整合swagger3.2 序列化中文问题集群3.3 applications配置3.4 问题 一、Jedis package com.example.redis;import redis.clients.jedis.Jedis;import javax.print.DocFlavor; import java.util.*;/***…

【编译原理】绪论

1.计算机程序语言以及编译 编译是对高级语言的翻译 源程序是句子的集合,树可以较好的反应句子的结构 编译程序是一种翻译程序 2.编号器在语言处理系统中的位置 可重定位:在内存中存放的起始位置不是固定的 加载器:修改可重定位地址&#x…

古文字识别笔记

前置知识 部件:大部分的汉字是由若干组笔画结构拼合而成的,这些相对独立的笔画结构称为「部件」。 部件是大于基本笔画(例如:点、横、撇、捺等)而小于或等同于 偏旁 的结构单位。 例如「测」字有三个部件:…

【学习】使用PyTorch训练与评估自己的ResNet网络教程

参考:保姆级使用PyTorch训练与评估自己的ResNet网络教程_训练自己的图像分类网络resnet101 pytorch-CSDN博客 项目地址:GitHub - Fafa-DL/Awesome-Backbones: Integrate deep learning models for image classification | Backbone learning/comparison…

高效修复机床导轨磨损,保障加工精度!

机床导轨是支承和引导运动构件沿着一定轨迹运动的传动装置,在机器设备中是个十分重要的部件,在机床中是常见的部件。机床的加工精度与导轨精度有直接的联系,且导轨一旦损坏,维修较复杂且困难。我们简单总结了以下几点对于机床导轨…

编程设计思想

健康检查脚本 nmap:扫描端口 while true do healthycurl B:httpPORT/healthy -i | grep HTTP/1.1 | tail -n 1 | awk {print $2} done 批量操作类型脚本(记录每一步日志) 将100个nginx:vn推送到harbor仓库192.168.0.100 根据镜像对比sha值…

【开源项目】自然语言处理领域的明星项目推荐:Hugging Face Transformers

在当今人工智能与大数据飞速发展的时代,自然语言处理(NLP)已成为推动科技进步的重要力量。而在NLP领域,Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度,为您深…

面向对象修炼手册(四)(多态与空间分配)(Java宝典)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀面向对象修炼手册 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 1 多态 1.1 多态的形式&…

需求之 实现获取调试信息在h5页面,在手机端可以查看调试(二)

事实证明 chatgpt很好用,有不懂的问题可以问它 https://zhuanlan.zhihu.com/p/690118775 国内外9个免费的ChatGPT网站 我筛选出来的比较好用免费的网站 fchat.dykyzdh.cn/ 这个也可以 阿里云的 通义灵码 在vscode中安装使用 而且阿里云有一个产品,可以…

面试-Java线程池

1.利用Excutors创建不同的线程池满足不同场景的需求 分析: 如果并发的请求的数量非常多,但每个线程执行的时间非常短,这样就会频繁的创建和销毁线程。如此一来,会大大降低系统的效率。 可能出现,服务器在为每个线程创建…

jdk1.8升级到jdk11遇到的各种问题

一、第三方依赖使用了BASE64Decoder 如果项目中使用了这个类 sun.misc.BASE64Decoder,就会导致错误,因为再jdk11中,该类已经被删除。 Caused by: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder 当然这个类也有替换方式&#xf…

MySQL实训--原神数据库

原神数据库 er图DDL/DML语句查询语句存储过程/触发器 er图 DDL/DML语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS artifacts; CREATE TABLE artifacts (id int NOT NULL AUTO_INCREMENT,artifacts_name varchar(255) CHARACTER SET utf8 COLLATE …