Loading [MathJax]/jax/input/TeX/config.js
前往小程序,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」用户消费行为分析
请注意,本文编写于 297 天前,最后修改于 296 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1.1K0
「Python」用户消费行为分析
Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析
这是kaggle上的一份巴西传统线下汽车服务类连锁店的实际销售数据,大小约3.43G,包含了从2017年3月31日到2020年4月1日大约2600万多的销售数据。
朱小五
2020/08/11
1.2K0
Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析
Python中的时间序列数据操作总结
时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式
deephub
2023/02/01
3.5K0
『数据分析』使用python进行同期群分析
五一以迅雷不及掩耳盗铃儿响叮当仁不让之势结束,这不马上又周末了,我们又可以愉快的学习啦,本次节后第一篇来自小小明大哥主笔。
可以叫我才哥
2021/08/05
6580
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(三)
python 时间序列预测 —— prophet
prophet 是facebook 开源的一款时间序列预测工具包,直接用 conda 安装 fbprophet 即可
全栈程序员站长
2022/06/25
2.3K0
python 时间序列预测 —— prophet
电商用户行为数据可视化分析实战
先进电子商务的用户数量激增,而包括买家浏览电子商务商店而花费大量时间等信息被,店主们还计划利用各种算法来吸引顾客,试图研究和利用顾客行为模式来增加营收。
数据STUDIO
2022/05/24
1.7K0
电商用户行为数据可视化分析实战
Python报表自动化
这篇文章是『读者分享系列』第二篇,这一篇来自袁佳林同学,这是他在读完我的书以后做的第一个Python报表自动化项目,现在他把整体的思路以及实现代码分享出来,希望对你有帮助。
张俊红
2019/05/05
4.1K0
Python报表自动化
【机器学习实战】kaggle playground最新竞赛,预测贴纸数量--python源码+解析
对于此挑战,你将预测来自不同(真实!)国家/地区的不同虚拟商店的各种 Kaggle 品牌贴纸的多年销售额。该数据集是完全合成的,但包含您在现实世界数据中看到的许多影响,例如周末和假期影响、季节性等。
机器学习司猫白
2025/01/21
930
【机器学习实战】kaggle playground最新竞赛,预测贴纸数量--python源码+解析
基于LightGBM的UCI信贷数据建模(完整Python代码)
本文是UCI数据集建模的第3篇,第一篇是数据的探索性分析EDA部分,第二篇是基于LightGBM模型的baseline。
皮大大
2024/06/30
3740
基于LightGBM的信贷数据建模
本文是UCI金融信贷数据集的第二篇文章:基于LightGBM的二分类建模。主要内容包含:
皮大大
2024/01/19
3610
整理总结 python 中时间日期类数据处理与类型转换(含 pandas)
我自学 python 编程并付诸实战,迄今三个月。 pandas可能是我最高频使用的库,基于它的易学、实用,我也非常建议朋友们去尝试它。——尤其当你本身不是程序员,但多少跟表格或数据打点交道时,pandas 比 excel 的 VBA 简单优雅多了。
刘娟娟PRESSone
2019/10/25
2.3K0
实战 | 用Python爬取《云南虫谷》3.6万条评论,并做数据统计可视化展示分析,好看!
最近鬼吹灯系列网剧《云南虫谷》上线,作为鬼吹灯系列作品,承接上部《龙岭迷窟》内容,且还是铁三角原班人马主演,网友直呼非常好看!
可以叫我才哥
2021/09/24
1.3K0
Python爬虫新手教程:爬取了6574篇文章,告诉你产品经理在看什么!
作为互联网界的两个对立的物种,产品汪与程序猿似乎就像一对天生的死对头;但是在产品开发链条上紧密合作的双方,只有通力合作,才能更好地推动项目发展。那么产品经理平日里面都在看那些文章呢?我们程序猿该如何投其所好呢?我爬取了人人都是产品经理栏目下的所有文章,看看产品经理都喜欢看什么。
一墨编程学习
2019/07/26
9570
Python爬虫新手教程:爬取了6574篇文章,告诉你产品经理在看什么!
数据分析方法——常用的数据分析指标和术语
在进行数据分析时,我们往往不会对原始的一条一条的数据直接进行分析,因为那毫无意义。通常,需要对数据先做一些聚合运算,比如求和、求平均值、计数等,也就是会用到一些分析指标和术语,这些指标和术语可以帮助我们打开思路,从多种角度对数据进行深度解读。
陈学谦
2020/06/04
3.8K0
浅谈pandas,pyspark 的大数据ETL实践经验
本文主要以基于AWS 搭建的EMR spark 托管集群,使用pandas pyspark 对合作单位的业务数据进行ETL ---- EXTRACT(抽取)、TRANSFORM(转换)、LOAD(加载) 等工作为例介绍大数据数据预处理的实践经验,很多初学的朋友对大数据挖掘,数据分析第一直观的印象,都只是业务模型,以及组成模型背后的各种算法原理。往往忽视了整个业务场景建模过程中,看似最普通,却又最精髓的数据预处理或者叫数据清洗过程。
流川疯
2019/01/17
5.6K0
Pandas 秘籍
您可以使用read_csv函数从CSV文件读取数据。 默认情况下,它假定字段以逗号分隔。
ApacheCN_飞龙
2022/12/01
1.5K0
Pandas非常用技巧汇总
注意:由于NaN的存在,B列初始的数据类型是float,如果要变成整数,使用astype转换即可。
致Great
2023/08/25
5490
借网站日记分析~普及一下Pandas基础
对网站日记分析其实比较常见,今天模拟演示一下一些应用场景,也顺便说说Pandas,图示部分也简单分析了下
逸鹏
2018/08/14
3890
借网站日记分析~普及一下Pandas基础
Pandas看这一篇即可
Pandas是Wes McKinney在2008年开发的一个强大的「分析结构化数据」的工具集。Pandas以NumPy为基础(数据表示和运算),提供了用于数据处理的函数和方法,对数据分析和数据挖掘提供了很好的支持;同时Pandas还可以跟数据可视化工具Matplotlib很好的整合在一起,非常轻松愉快的实现数据的可视化展示。
润森
2022/08/18
1.7K0
Pandas看这一篇即可
推荐阅读
相关推荐
「Python」用户消费行为分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验