python excel条件格式_Python数据探索,直接用pandas做条件格式,看清数据走势

5bafa40f4bfbfbed93c62c6204bee733aec31fe6.jpeg?token=2b3c5ba7fa9cea177c239ddfb64149e7&s=741AC83384C07EEA4B54D6E40300E021

转发本文并私信我"python",即可获得Python资料以及各种心得(持续更新的)

前言

之前已经多篇文章关于使用 pandas 处理数据,那仅仅是工作的开端,只是把数据整理完毕而不继续探索数据,那么就白白浪费了 Python 这样的好工具。

今天要探索的数据来自于微软的 power bi 关于 TV Game 的销量相关案例,我们开始吧。

本文概要

通过本文你将会学到以下知识点:

pandas 连接多表数据如何高效编写代码,以方便多维度汇总数据直接在 DataFrame 中可视化输出,如下:

060828381f30e924d4918a1430467e031d95f7b5.jpeg?token=11916178233cc86b9f8e3271452be4b6&s=4DE03266D4F485DE982E6FBA02005016

34fae6cd7b899e51304f152e3ee9c936c9950d9d.jpeg?token=6e630fa65f176c78d1f4674f469c924a&s=A822EC170B624684D0F170D3030050B0

案例介绍

案例数据有5个表的数据,以5个 csv 文件保存。以下是每个表的概要信息:

sales :记录每个游戏的销售情况(销量、用户评分如何?)games :记录每个游戏的基本信息(游戏名字、开发商、分级、发布日期)consoles : 每个游戏终端信息(电视游戏主机、厂商有哪些?)ratings : 每个分级信息genres : 游戏类型信息(动作游戏还是解密游戏?)最多的记录就是销量表 sales ,以他为中心关联其他的表即可得到以下信息数据:

游戏xxx是微软的主机 xbox360 的销量是10.5 百万用户评分7.5分是一款动作类游戏各个表关系图如下:

37d3d539b6003af39efec24e4864d6591038b62f.jpeg?token=2dea836ef34772e29b28a22b71cc55c0&s=50B21B710E26570D0CA8B54A0000F0B3

sales 表对 games 表的关系是多对一关系实际上 sales 表的每行的游戏都是唯一的,也就是 GameID 列没有重复的加载数据

我们现在需要从5个 csv 文件加载数据,然后把5个表连接成一个 DataFrame。 首先定义一个方法,负责加载、连接数据。方法名字就叫 get_df ,如下图:

aa18972bd40735faec943767e21f1fb60e24085e.jpeg?token=570be8f539a9a981caa3a2d2c6349920&s=E1E09342DBF080494EC5CD060000F0C2

上图是加载 sales 表的代码,就两句代码。中间省略了其他4个表的加载代码。定义 sales_cols 列表,表示加载所需的列,我们不要加载所有的列。pd.read_csv ,读取 csv 文件,其中参数 usecols 指定需要的列。在加载游戏信息表时,特别指定 pd.read_csv 方法中的参数 parse_dates ,让其把 Release 列(游戏发布日期)作为日期处理然后同样是在方法get_df中,把5个表连接起来。如下:

2fdda3cc7cd98d100078d43d5d71a80b7aec90e5.jpeg?token=3e8f7f0358fbe48c6e9f69561b853b87&s=EBE0A342DBE499721AF1440B0000E0C2

这里有个技巧,从核心表 sales 表开始,按照关系图一直"左连接"到所有的表。左连接的左边一般是一对多关系中的"多方"。merge ,用于连接2个 DataFrame 。参数 how='left' 指定为左连接, on=xxx 表示用 xxx 字段做 key。我们来看看表关系图和连接代码之间的关系。

7aec54e736d12f2ea8797eec338cc56784356895.jpeg?token=926155bc4b9ac90eea73acc0d1efebf2&s=0380F3019E1F17CC681490880000A091

关联好数据了,现在看看数据的情况。

faf2b2119313b07e00336a667199812696dd8ca1.jpeg?token=70e441d6e4ee5130697e1c4839d04bd8&s=60F223661AA58A4F4674B41B0000B0C3

调用之前定义的 get_df 方法,加载数据df.info() ,查看数据的基本元信息可以清楚看到,数据有20621笔数据Total_Sales 销量列,有一半数据是缺失的User_Score 用户评分,只有6000多笔数据而已

d8f9d72a6059252d44511df348d5133e5ab5b952.jpeg?token=3fb801fd873e13e943b7292b26d170fc&s=E0829F1A57435CEA125FB4C90300F0FA

定义核心问题

我们先制定一些探索目标,否则整个过程没有方向,很容易迷失。 我们希望通过数据,回答以下一些问题:

整体游戏市场的销量如何?各个主机的游戏销量如何?什么类型的游戏比较好卖或受欢迎?不要重复写汇总代码

假设我们希望看看每个品牌主机的游戏销量,那么可能会编写如下代码:

9345d688d43f87940e04e439af551ef11ad53a85.jpeg?token=87eb18b39e55975131400d0154b81073&s=61C113665FA4B3680C49150A000070C1

虽然此代码编写也算容易,但是我们需要经常变换汇总维度,每次重复编写这样的代码会很不方便。

因此,我们希望每次调用时,只需要告诉 pandas 以下信息即可:

用哪些维度字段做汇总使用哪个字段做统计,统计方法是什么(平均、求和还是计数),统计后的列名字是什么首先定义一个方法cal,每次只需要调用他即可得到汇总结果:

86d6277f9e2f0708cff3baaf956aa89ca801f27b.jpeg?token=615fedfbd048001358d2a88881fa1c57&s=E9E0B3425BE4974D1C59AD0E0000F0C2

参数 labels ,就是"需要的维度字段列表"参数 cal_funcs ,是统计方法列表,这里特意定义为无限个数的参数,那么就可以一次统计多个不同的方法接下来,我们就要根据数据定义统计方法。比如:销量求总,用来分析销量情况

d833c895d143ad4bc9b83a0df94c4aaaa50f063f.jpeg?token=9f9758fc5b470024db71134c6c1a6391&s=6960834687B0BC7208493403000070C2

CalFunc 只是一个 namedtuple,用于记录3个信息(统计列名、统计方法、统计后的新列名字)如上图,对 Total_Sales 列进行求和计算(sum) ,结果列名字为 total_revenue我们试试,统计每个品牌每年的销量,如下:

8ad4b31c8701a18b7037b6aee261170d2a38fec3.jpeg?token=6ebca94eeab54063f6acb46815f58731&s=29C1136E92B5B06F4E640C1A0000C0C2

接着,根据我们之前定义的核心问题,可以编写以下2个方法:

e824b899a9014c08bfd7dcf07635120d7af4f44f.jpeg?token=77353a4c710ced06d4626359fb2f1edf&s=6960B34253E4874D42444C0E000070C2

cal_total_games ,用于分析游戏数量cal_avg_user_score ,用于分析用户对游戏的喜欢程度看图说话

Python 上做图表有许多库可以选择,不过这次我们来试试直接在 DataFrame 中添加格式来可视化数据。

首先定义一个通用的方法用于输出带格式的DataFrame。

f2deb48f8c5494eeb3c0ff6a51bbf0fb98257eb2.jpeg?token=7bf456bcdd1dda91181650bb16ce961f&s=E961A34697F0BA714C4C140D000070C3

通过 DataFrame.style.bar ,即可输出带 css 格式的文本参数 subset ,用于表示哪些列需要带格式参数 color ,格式的颜色看看整体市场每年的游戏数量与销量走势。

21a4462309f790528327e4cb70bdc7cf7acbd5da.jpeg?token=559b648a3730591578c5070746f6f6e6&s=E970834233B4B27E1A628515020000C9

由于年份太多,因此只保留2000年以后的数据可以看到2008年游戏数量和销售量都是最好的而2017年虽然游戏数量与2008年接近,但销量却是差很多为什么2019年这么少(这可能是数据出问题)?看看不同厂商品牌的销量情况。

d53f8794a4c27d1e0f5d6770679bbd6bdcc438da.jpeg?token=50333d744b7bab642bc203f2a9eaf389&s=E9F0A34653B4966F4E5CFC0E000070C3

sony 大热胜出微软则不管游戏数量和销量都是垫底哪类型游戏比较受欢迎?

c8177f3e6709c93dc3d04480e373e8d9d100547e.jpeg?token=7f873fcd9e5c7da4750c1cdb6754f929&s=61F2A2645BF4B04B0EC60405020030C8

策略类和角色扮演类游戏的用户评分最高动作类游戏用户评分虽然只是第4,但游戏数量和销量高出其他类型很多。是动作游戏比较容易取材和制作?最后

篇幅有限,本文先把此案例解析到这里。可以看到,即使在不制作图表的情况,可以做一些简单的格式化输出,同样可以达到探索数据的效果。

不过,图表对于数据可视化是必不可少。之后我会结合 Python 和 Power BI 分享更多案例。

请关注本号,后续会有更多相关教程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值