当前位置:   article > 正文

Python数据分析项目实战_数据分析实战项目

数据分析实战项目

 本节主要通过两个项目,利用Python进行实际应用,具体可参考以下目录

目录

项目一:将Excel中的内容自动添置Word文档

1. 依据目标确定待使用工具

(1)安装第三方包

(2)官网复制,运行提供的样例代码 

(3)模拟练习

简易版练习

进阶版练习 

再进阶版

项目二:视频弹幕数据分析

循环读取Excel

时间处理

 按照月份分析

按照星期分析 

用户画像 

弹幕内容 

等级分布

视频内容

项目一:将Excel中的内容自动添置Word文档

1. 依据目标确定待使用工具

利用Pandas对Excel进行处理,那利用??对Word进行处理呢(网上搜索)

答案:借助Python-docx这个第三方包进行管理

(1)安装第三方包

  1. #控制台输入该命令,进行安装(用了清华镜像,速度可以UP
  2. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx

(2)官网复制,运行提供的样例代码 

官网地址:python-docx — python-docx 1.1.0 文档

其中将该句代码注释或删除(因为没有这张图片,运行会报错)

执行后,文件夹就多了一个demo.docx文档

(3)模拟练习

简易版练习

通过人为简易版输出

进阶版练习 

借用for循环

  1. #1.需要用到Pandas,先导入
  2. import pandas as pd
  3. #2. 将需要用到的表格进行读入,并进行数据读取和处理
  4. video_list=pd.read_excel('video_list.xlsx')
  5. speech_list=pd.read_excel('speech_text.xlsx')
  6. video_list['AwemeId']=video_list['AwemeId'].astype(str)
  7. speech_list['VideoId']=speech_list['VideoId'].astype(str)
  8. #3. 两个表进行合并
  9. merge=pd.merge(video_list,speech_list,how='inner',left_on='AwemeId',right_on='VideoId')
  10. merge
  1. #4. 循环访问每一条数据
  2. document=Document() #该句一定要加,否则会延续之前的内容
  3. for i in range(len(merge)):
  4. print(merge.iloc[i]['品牌'])
  5. document.add_heading(merge.iloc[i]['品牌'],level=1)
  6. document.add_heading(merge.iloc[i]['视频标题'],level=2)
  7. document.add_paragraph(merge.iloc[i]['视频文案'] )
  8. document.save('demo.docx')

展示结果:

再进阶版
  1. #5.让相同品牌名只出现一次
  2. document=Document() #该句一定要加,否则会延续之前的内容
  3. for i in range(len(merge)):
  4. if merge.iloc[i]['品牌']!=merge.iloc[i-1]['品牌']or i==0: #判断让同品牌名只出现一次
  5. document.add_heading(merge.iloc[i]['品牌'],level=1)
  6. document.add_heading(merge.iloc[i]['视频标题'],level=2)
  7. document.add_paragraph(f'达人昵称:{merge.iloc[i]["BloggerName"]}' )#补充新内容
  8. document.add_paragraph(f'视频地址:douyin.com/video/{merge.iloc[i]["AwemeId"]}' )
  9. document.add_paragraph(merge.iloc[i]['视频文案'] )
  10. document.save('demo.docx')

项目二:视频弹幕数据分析

循环读取Excel

  1. #循环读取列表的文件,简化工作流程
  2. import os
  3. excel_list=[]
  4. for item in os.listdir('./'):
  5. if 'xlsx'in item and 'user_level'not in item:
  6. excel_list.append(item)
  7. excel_list
'
运行

  1. danmu=pd.DataFrame()
  2. for item in excel_list:
  3. excel=pd.read_excel(item,converters={'uid':str,'id':str})#利用converters指定读取结果
  4. excel['视频标题']=item#增加一列来记录每条记录来自哪个视频
  5. danmu=pd.concat([danmu,excel],axis=0)
  6. danmu

时间处理

  1. #时间处理
  2. from datetime import datetime
  3. #新建一列,其为弹幕存储时间
  4. danmu['弹幕创建时间']=danmu['ctime'].map(datetime.fromtimestamp)
  5. #取出每一个属性对应时间的年,月,以及计算出星期
  6. danmu['年']=danmu['弹幕创建时间'].map(lambda x:x.year)
  7. danmu['月份']=danmu['弹幕创建时间'].map(lambda x:x.month)
  8. danmu

 

由于原数据没有直接点名星期,故需要一定的转换

  1. danmu['星期']=danmu['弹幕创建时间'].map(datetime.isoweekday)
  2. danmu

  1. #导入该包,使其能够正常显示中文
  2. import matplotlib.pyplot as plt
  3. plt.rcParams['font.sans-serif']=['SimHei']
'
运行

 按照月份分析

  1. #将22年的弹幕都取出来
  2. danmu_year=danmu[danmu['年']==2022]
  3. danmu_year
  1. #按月份进行分组,并对id进行聚合,且通过折线图展示出来
  2. danmu_year.groupby('月份')[['id']].count().plot()

 

  1. #按月份分组,nunique保证每个uid只计算一次
  2. danmu_year.groupby('月份')[['uid']].nunique().plot()

 

按照星期分析 

大部分细节代码同上

  1. #利用pyg做一些复杂的图
  2. import pygwalker as pyg
  3. pyg.walk(danmu_year)

用户画像 

  1. #新增一列,记录每个uid所发的弹幕数
  2. danmu['用户弹幕数']=danmu.groupby('uid')['id'].transform('count')

在连接前,查看两张表的连接键,其类型是否一致

                                 

  1. #统一连接键数据类型
  2. user_level['uid']=user_level['uid'].astype(str)
  3. #以uid为关键字,进行两表连接
  4. danmu_level=pd.merge(danmu,user_level,on='uid',how='inner')
  5. danmu_level

弹幕内容 

Question:如何查看每个用户发了多少弹幕,并且可按数量进行降序排序

  1. #按uid进行分租,统计每个id的数量,并按该数量进行降序排列
  2. danmu_level.groupby('uid')[['id']].count().sort_values('id',ascending=False)

  1. #查看发弹幕最多的这个人都发了什么弹幕
  2. pd.set_option('display.max_rows',300) #设置DataFrame展示的最大行数为300
  3. danmu_level[danmu_level['uid']=='6653485828143602809']

等级分布

danmu_level.groupby('level')[['uid']].count().plot(kind='bar')

 

视频内容

1. 视频内容处理(将progress中的毫秒转换为秒的形式)

  1. #引入两个相关的包
  2. from time import strftime
  3. from time import gmtime
  4. danmu['progress']=danmu['progress']/1000
  5. danmu['视频进度']=danmu['progress'].map(lambda x:strftime('%H:%M:%S',gmtime(x)))
  6. danmu['视频进度']

  1. #将时分但拎出来
  2. danmu['视频进度【时分】']=danmu['视频进度'].str[:5]
  3. danmu

 2. 开始分析啦 

  1. #把p1挑出来
  2. p1=danmu[danmu['视频标题']=='1、系统认识数据分析.xlsx']
  3. #按视频进度【时分】分组,并计算对应的id数量,且按降序排列
  4. p1.groupby('视频进度【时分】')[['id']].count().sort_values('id',ascending=False)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/894566
推荐阅读
相关标签
  

闽ICP备14008679号