数据分析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.mzph.cn/bicheng/35543.shtml

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

相关文章

司美格鲁肽在中国获批!深度解析报告附上

在中国,肥胖问题日益严重,但有效的治疗方法却相对匮乏。然而,这一现状随着国家药品监督管理局(NMPA)对诺和诺德公司研发的司美格鲁肽注射液(商品名:诺和盈)的批准而得到改变。6月25日…

LabVIEW中卡尔曼滤波的作用与意义

卡尔曼滤波(Kalman Filter)是一种在控制系统和信号处理领域广泛应用的递推滤波算法,能够在噪声环境下对动态系统的状态进行最优估计。其广泛应用于导航、目标跟踪、图像处理、经济预测等多个领域。本文将详细介绍卡尔曼滤波在LabVIEW中的作用…

pytorch基础知识Tensor算术运算

1、Tensor的基本概念 标量是零维的张量,向量是一维的张量,矩阵是二维的张量 2、Tensor的创建 import torch"""常见的几个tensor创建""" a torch.Tensor([[1,2],[3,4]]) #2行2列的 print(a, a.type()) print(torch.on…

大数据平台需要存算分离吗?某保险集团:以 ZBS 优化资源利用率,缩短业务用时超一半

金融机构普遍采用“存算一体”架构支撑基于 Hadoop 框架的大数据平台。而随着金融业务的多元化发展,不同业务对计算和存储的需求差异较大,由于“存算一体”架构共享存储与计算资源,经常会出现资源需求不均衡、资源利用率低下、难以灵活调度等…

c++网络通信

TCP/IP协议 OSI参考模型采用分层划分原则,将网络中的数据传输划分为7层,其中,物理层居于最下层,是最基础、核心的网络硬件层;应用层居于最上层,负责应用资源的管理。每一层使用下层的服务,并向…

程序设计语言前言

1.机器语言及特点 2.编译语言及特点 3.高级语言及特点 4.编译和解释 5.IPO编程方式 一、机器语言 机器语言,也被称为二进制代码语言,是计算机硬件能够直接识别的程序语言或指令代码。它是由一系列由0和1组成的二进制指令码构成,每一条指令码…

drozer中文乱码解决方法

drozer简介 drozer 是 Android 的安全测试框架。 drozer 允许您通过扮演应用的角色并与 Android 运行时、其他应用的 IPC 端点和底层操作系统进行交互来搜索应用和设备中的安全漏洞。 drozer 提供了一些工具来帮助您使用、分享和理解公共 Android 漏洞。 drozer 是开源软件…

ESP32-C2模组数据透传模式配置详细教程

文章目录 1. 背景2. 关键步骤2.1 烧录AT指令固件2.2 配置透传模式2.3 如何退出透传模式重新配置3. 思考1. 背景 最近做的项目中,有蓝牙+WIFI的数据透传的需求,即系统A和系统B之间的通讯通过无线的方式,其实在实际项目中有很多这种场景比如无线调试手柄、无线数据终端、无线…

状态压缩动态规划(State Compression DP)算法详解

状态压缩动态规划(State Compression DP)是一种高效解决组合优化问题的技术,特别适用于那些状态空间较大且可以用二进制表示的情况。本文将详细讲解状态压缩DP的原理、常用的位运算技巧、以及具体的例题分析。 原理概述 状态压缩DP的核心思…

【D3.js in Action 3 精译】1.2 D3 生态系统——入门须知

1.2 D3 生态系统——入门须知 D3.js 从不单打独斗,而是作为 D3 生态系统的一员,与生态内的一系列技术和工具相结合来创建丰富的 Web 界面。与其他网页一样,D3 项目也是充分利用 HTML5 的强大功能在 DOM 内构建出来的。尽管 D3 也可以创建并操…

ElementUI搭建

概述 Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组 件库. 安装 ElementUI npm 安装 推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用。 npm i element-ui -S 在控制台输入此命令来安装ElementUI 在 main.j…

MyPostMan:按照项目管理接口,基于迭代生成接口文档、执行接口自动化联合测试

MyPostMan 是一款类似 PostMan 的接口请求软件,不同于 PostMan 的是,它按照 项目(微服务)、目录来管理我们的接口,基于迭代来管理我们的接口文档,可导出或者在局域网内共享,按照迭代编写自动化测…

netmiko_ssh_华为防火墙

from netmiko import ConnectHandlerip 防火墙ip地址hw_fw {device_type: huawei,host: ip, # 使用 host 字段同时指定 IP 和端口号username: 用户名,password: 密码,port: 50022 # 直接设置 port 字段 }net_connect ConnectHandler(**hw_fw)ou net_connect.send_command…

西安国际医学中心医院 多学科联合创新白癜风治疗法取得进展

近日,西安国际医学中心医院“自体头皮毛囊裂解物混悬液移植治疗白癜风”项目,备受瞩目。据悉,在白癜风和白发的研究及治疗上,均有望取得显著进展。 卢涛主任高分通过医院新技术新业务立项 “白癜风”——是由于皮肤黑素细胞被破坏…

autoware.universe源码略读(3.3)--perception:tensorrt_yolo

autoware.universe源码略读3.3--perception:tensorrt_yolo 模块组成cuda_utils(CUDA接口)calibrator(校准器)ImageStreamInt8EntropyCalibrator mish(mish激活函数,基于CUDA)mish_p…

Python22 Pandas库

Pandas 是一个Python数据分析库,它提供了高性能、易于使用的数据结构和数据分析工具。这个库适用于处理和分析输入数据,常见于统计分析、金融分析、社会科学研究等领域。 1.Pandas的核心功能 Pandas 库的核心功能包括: 1.数据结构&#xff…

ODYSSEE加速电机仿真优化

由于对低碳社会的强烈需求,电动汽车(EV)和混合动力汽车(HEV)的数量正在迅速增长。新能源汽车的主要部件是电池、逆变器和电机。电机市场的规模也将不断扩大。为了提高EV的性能,对电机设计工程师的要求越来越高。 除了EV市场,协作机器人市场也…

【Linux】gdb调试器

一、gdb调试器背景 程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 二、安装gdb yum install gdb三、使用gdb 在Linux当中g…

Spark运行spark-shell与hive运行时均报错的一种解决方案

环境按照尚硅谷的配置的。 在运行hive的时候,报错代码为30041,无法执行insert语句。 在运行spark-shell的时候,报错,无法进入到shell脚本中。 可能的问题: 对集群设置的域名与集群的主机名称不一致。 例如:…

Cesium入门:Camera的关键知识点

作者: 还是大剑师兰特 ,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。 查看本专栏目录 - 本文是第 078篇文章 文章目录…