前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >驱使Python蟒蛇为自己工作

驱使Python蟒蛇为自己工作

作者头像
张俊红
发布于 2019-05-30 13:40:40
发布于 2019-05-30 13:40:40
1.3K00
代码可运行
举报
文章被收录于专栏:张俊红张俊红
运行总次数:0
代码可运行

00|花园里的驱蛇者

驱使Python蟒蛇为自己工作的奇幻之旅

那是一个寻常的下午,他困了。

"飞碟瓜,最近战事紧张,多个植物花园发生了激烈的战斗,麻烦你统计一下上个月的战斗成果,看一下植物战士们的战斗力有没有提高。今天晚上向我汇报。“火炬树桩交待了这个任务,就去指挥战斗了。

"When can I leave work and go home?" 他一遍遍的问自己:“我什么时候可以下班回家?”

飞碟瓜还没有把工作做完,而这导致他目前无法下班。怎么办呢? 向日葵老师发来微信了,刚好问一下她。

后来,经过一个月的学习,飞碟瓜成为了数据分析的熟练工。他偶尔还是会想起那个令他绝望的下午。

以前,他每天的工作,就是数据的罗列,报表的生成,以及分类汇总,他曾经是植物花园里,远近闻名的”表哥”。但是,从那个下午开始,他开始尝试,把一些每月例行的重复工作,写成脚本文件,让python蟒蛇来进行办公自动化的操作。“这像是一个奇幻之旅。”飞碟瓜说。

在1996年5月20日,全世界有3000多万人使用微软Excel,而且平均每分钟新增5个用户。根据pythonanywhere.com网站博客文章的估算,世界上大约有180万至280万的python程序员。2019年2月印刷的一本《对比Excel,轻松学习Python数据分析》引起了这两个庞大的用户群体的热烈追捧。在这本书里,围绕数据分析的流程,作者数据分析师张俊红先生,详细介绍了每个步聚中,用Excel如何实现,用Python如何实现。

『 事务千万件,流程第一件。不按流程走,返工流眼泪 』。这是向日葵老师反复强调的事情,也是飞碟瓜长期工作的经验。

现在,飞碟瓜就按照数据分析的基本流程,一步步的开始分析了。

01|明确目的

根据各个花园上报的这样的明细数据

僵尸ID

僵尸类别ID

战场编号

僵尸等级

僵尸数量

战斗日期

战斗ID

统计战斗成果,每月例行填写下列表格:

本月累计

上月同期

去年同期

环比

同比

战功

战斗次数

每场战功

其中,战功就是僵尸等级乘以僵尸数量。打败的僵尸越多,打败的僵尸的等级越高,战功越大。

02|熟悉工具

飞碟瓜去这个网址,下载了Python蟒蛇的集成开发环境Anaconda。

然后他念起了咒语:『 天灵灵,地灵灵,Python蟒蛇快显灵。拿出熊猫工具包,日期时间包也要。帮我解决大难题,你的好处少不了 』。

Python蟒蛇回答说:『 SyntaxError: invalid character in identifier 』语法错误:标识符中的字符无效。

向日葵老师提醒道:『 你想驱使Python蟒蛇帮你干活,必须是你去学习蛇语,而不是蟒蛇学习咒语。好在蛇语不难学,跟英语挺相似的 』。

飞碟瓜无奈的打开了Anaconda里面的jupyter notebook软件,给大蟒蛇下达了指令。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from datetime import datetime
import pandas as pd

03|获取数据

飞碟瓜继续下达指令:

蟒蛇,战斗成果的原始数据文件的位置,放在了"d:\documents\temp1\"的文件夹里面,文件名字叫做"battle.xlsx"。

有一个叫做“战斗日期”的列,是记录日期的,你可不要以为是数值,你拿出你的日期时间工具包,把它处理一下,要保证理解为日期的值。

文件的编码是GBK编码的,别搞乱码了。

把文件取出之后,放在一个DataFrame数据框架里面,并且起个名字叫做data“ (DataFrame是由一组数据与一对索引(行索引和列索引)组成的表格型数据结构)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data=pd.read_excel(r'd:\documents\temp1\battle.xlsx',parse_dates=['战斗日期'],encoding='gbk')

04|熟悉数据

『 弄好了吗 』,显示dataframe的前五行数据,给我看看吧。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print (data.head())

蟒蛇回复:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  僵尸ID     僵尸类别ID  战场编号  僵尸等级  僵尸数量       战斗日期                     战斗ID
0  30006206  915000003  CDNL     4         1             2018-01-01          20170103CDLG000210052759
1  30163281  914010000  CDNL     1         2             2018-01-02          20170103CDLG000210052759
2  30200518  922000000  CDNL     2         1             2018-01-03          20170103CDLG000210052759
3  29989105  922000000  CDNL     1         3             2018-01-04          20170103CDLG000210052759
4  30179558  915000100  CDNL     4         1             2018-01-05          20170103CDLG000210052759

05|处理数据

看一下是否有缺失值,各个列的数据类型是什么

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print (data.info())

蟒蛇应答:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3478 entries, 0 to 3477
Data columns (total 7 columns):
僵尸ID      3478 non-null int64
僵尸类别ID    3478 non-null int64
战场编号      3478 non-null object
僵尸等级      3478 non-null int64
僵尸数量      3478 non-null int64
战斗日期      3478 non-null datetime64[ns]
战斗ID      3478 non-null object
dtypes: datetime64[ns](1), int64(4), object(2)
memory usage: 190.3+ KB
None

飞碟瓜看了一下,注意到

  • 所有的列都是3478行,全都没有空值(non-null)
  • 而且”战斗日期"的数据格式为datetime64[ns],符合要求。

查一下是否有异常的数值,比方说,僵尸数量为负数,僵尸等级大于5,目前如果存在这类数据,就属于异常值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(data.describe())

蟒蛇回答:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 僵尸ID        僵尸类别ID         僵尸等级         僵尸数量
count     3.478000e+03  3.478000e+03  3478.000000  3478.000000
mean      3.004899e+07  9.214786e+08     2.526164     1.478723
std       7.303804e+04  9.653496e+06     1.109625     1.901963
min       2.998902e+07  9.100000e+08     1.000000     1.000000
25%       2.998915e+07  9.140701e+08     2.000000     1.000000
50%       3.001310e+07  9.220000e+08     3.000000     1.000000
75%       3.010167e+07  9.230000e+08     4.000000     2.000000
max       3.021483e+07  9.600000e+08     4.000000    45.000000

06|分析数据

本月累计

上月同期

去年同期

环比

同比

战功=僵尸等级*僵尸数量

战斗次数=战斗ID去重计数

每场战功=战功/战斗次数

筛选出本月累计、上月同期、去年同期 这三个时间段范围内,对应的数据框架DataFrame。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
This_data=data[(data['战斗日期']>=datetime(2018,2,1))&(data['战斗日期']<=datetime(2018,2,28))]
Last_data=data[(data['战斗日期']>=datetime(2018,1,1))&(data['战斗日期']<=datetime(2018,1,31))]
Same_data=data[(data['战斗日期']>=datetime(2017,2,1))&(data['战斗日期']<=datetime(2017,2,28))]

编写函数,输入的参数为 各个时间段的数据框架DataFrame, 输出的值为 战功,战斗次数,每场战功的数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_month_data(perioddata):
    contribution=(perioddata['僵尸等级']*perioddata['僵尸数量']).sum()
    number_of_battles=perioddata['战斗ID'].drop_duplicates().count()
    s_t=(contribution/number_of_battles)
    print (contribution,number_of_battles,s_t)
    return (contribution,number_of_battles,s_t)

调用函数,计算出需要的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
contribution_1,number_of_battles_1,a_n_1=get_month_data(This_data)   #分别计算本月的战功,战斗次数,每场战功
contribution_2,number_of_battles_2,a_n_2=get_month_data(Last_data)   #分别计算上月的战功,战斗次数,每场战功
contribution_3,number_of_battles_3,a_n_3=get_month_data(Same_data)   #分别计算上年同期的战功,战斗次数,每场战功

合并三个时间段的指标到同一个DataFrame数据框架里面

  • 设定DataFrame的行名称是['战功','战斗次数','每场战功']
  • 设定DataFrame的列名称为['本月累计','上月同期','去年同期']
  • 第1行的数据项填充为'contribution_1(本月战功),contribution_2(上月战功),contribution_3(上年同期战功)
  • 第2行的数据项填充为'number_of_battles_1(本月战斗次数),number_of_battles_2(上月战斗次数),number_of_battles_3(上年同期战斗次数)
  • 第3行的数据项填充为'a_n_1(本月每场战功),a_n_2(上月每场战功),a_n_3(上年同期每场战功)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
report=pd.DataFrame([[contribution_1,contribution_2,contribution_3],[number_of_battles_1,number_of_battles_2,number_of_battles_3],[a_n_1,a_n_2,a_n_3]],columns=['本月累计','上月同期','去年同期'],index=['战功','战斗次数','每场战功'])

增加环比和同比指标。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
report['环比']=report['本月累计']/report['上月同期']-1
report['同比']=report['本月累计']/report['去年同期']-1

查看数据,并且导出文件到本地。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(report)
report.to_excel(r'd:\documents\temp1\report.xlsx')

蟒蛇回复:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       本月累计 上月同期 去年同期 环比 同比
战功     4433 4237 4331 0.046259 0.023551
战斗次数 343 315 262 0.088889 0.30916
每场战功 12.9242 13.45079 16.53053 -0.03915 -0.21816

从此以后,每当有其他的植物花园发送来战斗情况表的时候,飞碟瓜只需要召唤一下,Python蟒蛇就会刷刷刷的算好需要的数据,贴心地生成Excel文件。飞碟瓜就再也不用加班啦。

07|完整的Python代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from datetime import datetime
import pandas as pd
data=pd.read_excel(r'd:\documents\temp1\battle.xlsx',parse_dates=['战斗日期'],encoding='gbk')
print (data.head())
print (data.info())
print(data.describe())
def get_month_data(perioddata):
    contribution=(perioddata['僵尸等级']*perioddata['僵尸数量']).sum()
    number_of_battles=perioddata['战斗ID'].drop_duplicates().count()
    s_t=(contribution/number_of_battles)
    print (contribution,number_of_battles,s_t)
    return (contribution,number_of_battles,s_t)
This_data=data[(data['战斗日期']>=datetime(2018,2,1))&(data['战斗日期']<=datetime(2018,2,28))]
Last_data=data[(data['战斗日期']>=datetime(2018,1,1))&(data['战斗日期']<=datetime(2018,1,31))]
Same_data=data[(data['战斗日期']>=datetime(2017,2,1))&(data['战斗日期']<=datetime(2017,2,28))]
contribution_1,number_of_battles_1,a_n_1=get_month_data(This_data)   #分别计算本月的战功,战斗次数,每场战功
contribution_2,number_of_battles_2,a_n_2=get_month_data(Last_data)   #分别计算上月的战功,战斗次数,每场战功
contribution_3,number_of_battles_3,a_n_3=get_month_data(Same_data)   #分别计算上年同期的战功,战斗次数,每场战功
report=pd.DataFrame([[contribution_1,contribution_2,contribution_3],[number_of_battles_1,number_of_battles_2,number_of_battles_3],[a_n_1,a_n_2,a_n_3]],columns=['本月累计','上月同期','去年同期'],index=['战功','战斗次数','每场战功'])
report['环比']=report['本月累计']/report['上月同期']-1
report['同比']=report['本月累计']/report['去年同期']-1
print(report)
report.to_excel(r'd:\documents\temp1\report.xlsx')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 俊红的数据分析之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析
这是kaggle上的一份巴西传统线下汽车服务类连锁店的实际销售数据,大小约3.43G,包含了从2017年3月31日到2020年4月1日大约2600万多的销售数据。
朱小五
2020/08/11
1.2K0
Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析
『数据分析』使用python进行同期群分析
五一以迅雷不及掩耳盗铃儿响叮当仁不让之势结束,这不马上又周末了,我们又可以愉快的学习啦,本次节后第一篇来自小小明大哥主笔。
可以叫我才哥
2021/08/05
6420
Python数据分析之Pandas(三)
: | -----: | ------: | -----: | --------: | | 0 | 1 | 1193 | 5 | 978300760 | | 1 | 1 | 661 | 3 | 978302109 | | 2 | 1 | 914 | 3 | 978301968 | | 3 | 1 | 3408 | 4 | 978300275 | | 4 | 1 | 2355 | 5 | 978824291 |
yuanshuai
2022/08/22
1.5K0
Python数据分析之Pandas(三)
电商用户行为数据可视化分析实战
先进电子商务的用户数量激增,而包括买家浏览电子商务商店而花费大量时间等信息被,店主们还计划利用各种算法来吸引顾客,试图研究和利用顾客行为模式来增加营收。
数据STUDIO
2022/05/24
1.7K0
电商用户行为数据可视化分析实战
基于LightGBM的UCI信贷数据建模(完整Python代码)
本文是UCI数据集建模的第3篇,第一篇是数据的探索性分析EDA部分,第二篇是基于LightGBM模型的baseline。
皮大大
2024/06/30
3550
基于LightGBM的信贷数据建模
本文是UCI金融信贷数据集的第二篇文章:基于LightGBM的二分类建模。主要内容包含:
皮大大
2024/01/19
3550
Python爬虫新手教程:爬取了6574篇文章,告诉你产品经理在看什么!
作为互联网界的两个对立的物种,产品汪与程序猿似乎就像一对天生的死对头;但是在产品开发链条上紧密合作的双方,只有通力合作,才能更好地推动项目发展。那么产品经理平日里面都在看那些文章呢?我们程序猿该如何投其所好呢?我爬取了人人都是产品经理栏目下的所有文章,看看产品经理都喜欢看什么。
一墨编程学习
2019/07/26
9510
Python爬虫新手教程:爬取了6574篇文章,告诉你产品经理在看什么!
Pandas看这一篇即可
Pandas是Wes McKinney在2008年开发的一个强大的「分析结构化数据」的工具集。Pandas以NumPy为基础(数据表示和运算),提供了用于数据处理的函数和方法,对数据分析和数据挖掘提供了很好的支持;同时Pandas还可以跟数据可视化工具Matplotlib很好的整合在一起,非常轻松愉快的实现数据的可视化展示。
润森
2022/08/18
1.7K0
Pandas看这一篇即可
我爬取了人人都是产品经理6574篇文章,发现产品竟然在看这些
人人都是产品经理是以产品经理、运营为核心的学习、交流、分享平台,集媒体、培训、招聘、社群为一体,全方位服务产品人和运营人,成立8年举办在线讲座500+期,线下分享会300+场,产品经理大会、运营大会20+场,覆盖北上广深杭成都等15个城市,在行业有较高的影响力和知名度。平台聚集了众多BAT美团京东滴滴360小米网易等知名互联网公司产品总监和运营总监。选取这个社区更有代表性。
用户4551289
2019/01/22
5240
我爬取了人人都是产品经理6574篇文章,发现产品竟然在看这些
利用 Python 分析了某化妆品企业的销售情况,我得出的结论是?
【导语】本篇文章是关于某化妆品企业的销售分析。从分析思路思路开始带大家一步步的用python进行分析,找出问题,并提出解决方案的整个流程。
杰哥的IT之旅
2021/02/05
5640
利用 Python 分析了某化妆品企业的销售情况,我得出的结论是?
Python入门系列(八)日期时间、数学、json
Python中的日期本身不是数据类型,但我们可以导入一个名为datetime的模块,将日期作为日期对象使用。
用户10002156
2022/09/05
5670
用Python分析《令人心动的offer2》的13万条弹幕,网友们都在吐槽什么?
综艺,是我们劳累了一天的放松方式,也是我们饭后的谈资。看着自己喜欢的综艺,时光足够美。而《令人心动的offer》,就是一个不错的综艺选择。
Python进击者
2020/12/08
1.1K1
用Python分析《令人心动的offer2》的13万条弹幕,网友们都在吐槽什么?
「Python」用户消费行为分析
请注意,本文编写于 297 天前,最后修改于 296 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1K0
「Python」用户消费行为分析
Python中的时间序列数据操作总结
时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式
deephub
2023/02/01
3.4K0
Pandas 秘籍
您可以使用read_csv函数从CSV文件读取数据。 默认情况下,它假定字段以逗号分隔。
ApacheCN_飞龙
2022/12/01
1.5K0
Python告诉你:李子柒的螺蛳粉到底有多火?
【导语】:今天我们聊聊火遍全网的螺蛳粉,Python技术部分可以直接看第二部分。公众号后台,回复关键字“螺蛳粉”获取完整数据。
CDA数据分析师
2020/04/08
1.1K0
Python告诉你:李子柒的螺蛳粉到底有多火?
Python报表自动化
这篇文章是『读者分享系列』第二篇,这一篇来自袁佳林同学,这是他在读完我的书以后做的第一个Python报表自动化项目,现在他把整体的思路以及实现代码分享出来,希望对你有帮助。
张俊红
2019/05/05
4.1K0
Python报表自动化
12000字!实战案例!Python+SQL京东用户行为分析
项目对京东电商运营数据集进行指标分析以了解用户购物行为特征,为运营决策提供支持建议。本文采用了MySQL和Python两种代码进行指标计算以适应不同的数据分析开发环境。
用户6888863
2023/03/01
2K3
12000字!实战案例!Python+SQL京东用户行为分析
Python实战项目——旅游数据分析(四)
由于有之前的项目,所以今天我们直接开始,不做需求分析,还不会需求分析的可以看我之前的文章。Python实战项目——用户消费行为数据分析(三)
老虎也淘气
2024/01/30
4221
Python实战项目——旅游数据分析(四)
用户群组分析Cohort analysis、RFM用户分层模型、Kmeans用户聚类模型
本文介绍用户群组分析Cohort analysis、RFM用户分层模型、Kmeans用户聚类模型的完整实施过程。
皮大大
2024/04/09
6930
推荐阅读
相关推荐
Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文