您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

十分钟掌握数据分析及可视化基本操作

时间:2020-08-17 11:19:28  来源:  作者:

为了更好地掌握数据科学必备库Pandas的基本使用,本文通过精灵宝可梦的数据集实战,我们一起过一遍Pandas的基本操作,文中的代码都附有注释,并给出了结果的配图。

话不多说,我们开始吧!

  • 导入pandas库,并读取csv文件
import pandas as pd
df=pd.read_csv('pokemon/Pokemon.csv')
  • 查看DataFrame信息
df.info()        # 数据类型,内存消耗等信息
df.describe()    # 统计特征,均值方差等
十分钟掌握数据分析及可视化基本操作

 

  • 查看DataFrame的前几行以及后几行
pd.head(n=5)  # 可以添加参数n,表示显示几行
pd.tail()
十分钟掌握数据分析及可视化基本操作

 

  • 显示行列信息
df.index    # 列索引
df.columns  # 行索引
df.values   # array对象
df.dtypes   # 列元素属性
  • 删除行列
df.drop(['#'],axis=1,inplace=True)
# 删除‘#’列数据,在原DataFrame上改变
df.drop([1,2,3],axis=0)
# 删除行索引为1、2、3的行,不在原DataFrame上改变
  • 修改列名(两种方法将‘Type 1’以及‘Type 2’中间的空格去掉)
df.rename(columns={'Type 1':'Type1','Type 2':'Type2'})
df.columns=df.columns.str.replace(' ','')
  • 数据观察
df['Defense'].mean()     # 所有宝可梦Defense的均值
df['Attack'].argmax()    # Attack最高的行索引
df['Sp.Atk'].idxmax()    # Sp.Atk最高的行索引
df.sort_values('HP',ascending=False).head(3)
# HP最多的前三条数据
df['Type1'].unique()     # Type1一共有哪些种类
df['Type1'].nunique()    # Type1一共有几种
df['Type2'].value_counts()
# Type2每种共有多少条
  • 检测空值
df.isnull().sum().sort_values(ascending=False)
# 将空值判断进行汇总,按从高到低排序
十分钟掌握数据分析及可视化基本操作

 

  • 空值填充
df['Type2'].fillna(value="Unknown",inplace=True)
# 将所有空缺值填为Unknown
df['Type2'].fillna(df['Type1'], inplace=True)
# 将所有Type2空缺值填为其对应Type1的值
  • 删除空值
df.dropna(how='any')
# 去除所有包含空值的行
  • 去重
df.drop_duplicates(['Type1'],keep='first')
# 去除相同的Type1的数据,仅保留第一个
  • 数据条件查询
df[df['Name']=='Squirtle']
# 查看杰尼龟的数据
df[df['Type1'].isin(['Fire'])]
# 查看所有Type1为Fire的数据
df[(df['Generation']==1)&(df['Attack’]>=100)]
# 查看Generation为1并且攻击力大于100的宝可梦
十分钟掌握数据分析及可视化基本操作

 

  • 数据访问方式(单行索引)
df.loc[3]   # 访问行索引为3的数据
df.iloc[3]  # 访问第4行数据,两行代码结果相同
十分钟掌握数据分析及可视化基本操作

 

  • 数据访问方式(区域索引,先行后列)
df.iloc[:5,:2]    # 数据前5行前两列,按位置索引
十分钟掌握数据分析及可视化基本操作

 

df.loc[10:15,['Generation','Attack','Sp.Atk']]
# 数据行标签10-15,列标签Generation,Attack和Sp.Atk,按标签索引
df.loc[[10,11,12,13,14,15],['Generation','Attack','Sp.Atk']]
# 与上述写法结果相同
十分钟掌握数据分析及可视化基本操作

 

df.loc[(df['Legendary']==True)|(df['Type1']=='Grass')]
# Legendary为真或者Type1为Grass的数据
  • 参考资料:Pandas官方文档

接下来我们主要涉及seaborn以及matplotlib两个可视化库。

上半篇我们主要使用matplotlib来进行柱状图、散点图、饼图折线图等的绘制,下半篇主要使用seaborn来进行箱线图、小提琴图、分簇散点图、热力图等的绘制。本文是下半篇,上半篇链接在这里。

箱线图

箱线图可以提供数据位置及其分散情况的关键信息,主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。

十分钟掌握数据分析及可视化基本操作

 

如上图所示,箱线图主要包含几个关键的数据,上、下四方位数,中位数,上、下边缘以及异常值。简单来说,上四分位数表示全部数据中有四分之一的数据大于它,异常值表示远离上或下四分位数。

我们来用箱线图观察一下宝可梦的各项属性的分散情况。

df2=df.drop(['Generation','Total','Legendary'],axis=1)
sns.boxplot(data=df2)
plt.show()
十分钟掌握数据分析及可视化基本操作

 

可以看到每种属性都有异常值,远超于普通宝可梦,其中血量值的异常值数量最多。

接着我们来看不同的代目的各种属性的分布特征,共用同一个Y轴,同时绘制四张子图。

fig,axes=plt.subplots(1,4,sharey=True)
sns.boxplot(x="Generation",y="Attack",data=df,ax=axes[0])
sns.boxplot(x="Generation",y="Sp.Atk",data=df,ax=axes[1])
sns.boxplot(x="Generation",y="Defense",data=df,ax=axes[2])
sns.boxplot(x="Generation",y="Sp.Def",data=df,ax=axes[3])
fig.set_size_inches(20,7)
十分钟掌握数据分析及可视化基本操作

 

总体来看,五代目宝可梦的攻击力水平要高于其他代目,二代目宝可梦的特殊攻击水平要低于其他代目。

我们还可以用箱线图来观察不同类型的宝可梦对其防御数值的影响,结果显而易见,钢铁类型的宝可梦拥有最为卓越的防御属性。

plt.subplots(figsize=(20,5))
plt.title('Defence by Type 1')
sns.boxplot(x='Type1',y='Defense',data=df2)
plt.ylim(0,240)  # 设置y轴的范围
plt.show()
十分钟掌握数据分析及可视化基本操作

 

另外我们还可以在boxplot中添加参数hue,分门别类地进行箱线图绘制,这里根据是否为神兽来做区分,显然神兽的防御属性远超非神兽。

十分钟掌握数据分析及可视化基本操作

 

小提琴图

小提琴图结合了箱线图与核密度估计图的特点,它表征了在一个或多个分类变量情况下,连续变量数据的分布并进行了比较,它是一种观察多个数据分布有效方法。

这里我们绘制不同类型的宝可梦的攻击力值小提琴图。

plt.title('Attack by Type1')
sns.violinplot(x="Type1", y ="Attack",data=df2)
plt.ylim(0,200)
plt.show()
十分钟掌握数据分析及可视化基本操作

 

小提琴图中宽度较厚的部分表示具有较高密度点的区域,而较薄的部分则表示低密度点的区域。我们可以清楚地看到有一部分电系宝可梦的攻击力在60左右,小提琴图有明显的膨胀部分;而岩石系的宝可梦的攻击力分布较为平均,小提琴图呈长窄形状。

我们对不同代目的宝可梦绘制了总属性值的小提琴图,并且将是否为神兽区分开来。

plt.title('Strongest Generation')
sns.violinplot(x="Generation",y="Total",data=df,hue="Legendary",split=True)
plt.show()
十分钟掌握数据分析及可视化基本操作

 

根据小提琴图我们似乎可以得出一代目的神兽实力最为强劲,三代目的非神兽实力则更优。

热力图

这里采用热力图来可视化数据各列之间的相关性。可以看到特殊攻击、攻击和特殊防御的数值与是否为神兽的相关性较高,而代目与其他数据的相关性较低。

df3=df.drop(['Total'],axis=1)
sns.heatmap(df3.corr(),annot=True)
plt.show()
十分钟掌握数据分析及可视化基本操作

 

分簇散点图

分簇散点图可以理解为数据点不重叠的分类散点图,swarmplot函数类似于stripplot函数,但该函数可以对点进行一些调整,使得数据点不重叠。

swarmplot()可以自己实现对数据分类的展现,也可以作为箱线图、小提琴图的一种补充,用来显示所有结果以及基本分布情况。

首先通过melt将宝可梦的各项数据汇到同一列中,即把窄宽的数据拉伸为长瘦型,将宝可梦的各项数值按照类型以分簇散点图的形式展现出来。

df5=pd.melt(df2, id_vars=["Name", "Type1", "Type2"], var_name="Stat")
sns.swarmplot(x="Stat", y="value", data=df5, hue="Type1",dodge=True)
plt.legend(bbox_to_anchor=(1, 1), loc=2, borderaxespad=0.)
plt.show()
十分钟掌握数据分析及可视化基本操作

 

参考资料

  • Visualizing Pokémon Stats with Seaborn
  • Seaborn官方文档


Tags:数据分析   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、什么是数据分析结合分析工具,运用数据分析思维,分析庞杂数据信息,为业务赋能。 2、数据分析师工作的核心流程:(1)界定问题:明确具体问题是什么;●what 发生了什么(是什么)●why 为...【详细内容】
2021-12-01  Tags: 数据分析  点击:(25)  评论:(0)  加入收藏
最近有一位刚入行的朋友跟我吐槽,说他提交了一份8月的经营数据分析报告给领导,报告里面放了很多图表,也罗列了很多数据,结果却被老板痛批了一顿,说分析了半天也看不懂他的分析逻...【详细内容】
2021-09-17  Tags: 数据分析  点击:(44)  评论:(0)  加入收藏
老李最近在后台看到很多想进入数据分析领域的朋友私信我,让我帮忙解答一些职业问题。在跟他们的交流中,我发现他们之中70%都是一无所知或刚入门的数据小白,但是都特别积极主动,...【详细内容】
2021-09-16  Tags: 数据分析  点击:(80)  评论:(0)  加入收藏
1 内容总概不管是数据分析还是数据运营,少不了做分析报告,通常一份简洁的分析报告总是令人眼前一亮,但是,大部分同学拿到一组数据时,不能很好的应用,没有思路、想法和头绪,这里作者...【详细内容】
2021-09-14  Tags: 数据分析  点击:(46)  评论:(0)  加入收藏
在不久前结束的东京奥运会女子10米气步枪赛场上,杨倩以251.8环破了奥运记录,代表中国拿下东京奥运会首金。她又与杨浩然一起,顶住压力拿下10米气枪混合团体赛金牌。在感受到强...【详细内容】
2021-08-16  Tags: 数据分析  点击:(53)  评论:(0)  加入收藏
随着数据分析岗位招聘越来越内卷,问“你用过/建过什么模型”的也越来越多。这个问题很容易给人“面试造航母,工作拧螺丝”的感觉。实际工作中,真的要搞那么多模型???搞得很多同学...【详细内容】
2021-07-13  Tags: 数据分析  点击:(70)  评论:(0)  加入收藏
明确目的带着问题出发,明确我们的目的是探索不同岗位、城市、公司数据人薪资是怎样的,所以是一个探索性分析。数据处理1、查看并理解字段拿到数据,大概看一下,总共有184条记录,量...【详细内容】
2021-07-06  Tags: 数据分析  点击:(89)  评论:(0)  加入收藏
本文讲解窗口函数的概念,窗口函数与数据分组的功能相似,可以指定数据窗口进行统计分析,但窗口函数与数据分组又有所区别,窗口函数对每个组返回多行,而数据分组对每个组只返回一行...【详细内容】
2021-06-25  Tags: 数据分析  点击:(65)  评论:(0)  加入收藏
数据分析思维九段路线1. 初段:目标思维做数据分析,首先要一定明确目标,以终为始。只有明确目标,才不会迷失方向,就像导航软件,如果没有设置目的地,那么它是没法告诉你路线图的。目...【详细内容】
2021-06-25  Tags: 数据分析  点击:(104)  评论:(0)  加入收藏
缺失的原因1)有些信息暂时无法获取,或者获取信息的代价太大2)有些信息是被遗漏的。3)属性值不存在。缺失值的影响1)数据挖掘建模将丢失大量的有用信息。2)数据挖掘模型所表现出的...【详细内容】
2021-05-20  Tags: 数据分析  点击:(366)  评论:(0)  加入收藏
▌简易百科推荐
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(1)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(7)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(5)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(7)  评论:(0)  加入收藏
借助pyautogui库,我们可以轻松地控制鼠标、键盘以及进行图像识别,实现自动抢课的功能1.准备工作我们在仓库里提供了2个必须的文件,包括: auto_get_lesson_pic_recognize.py:脚本...【详细内容】
2021-12-17  程序员道道    Tags:python   点击:(13)  评论:(0)  加入收藏
前言越来越多开发者表示,自从用了Python/Pandas,Excel都没有打开过了,用Python来处理与可视化表格就是四个字——非常快速!下面我来举几个明显的例子1.删除重复行和空...【详细内容】
2021-12-16  查理不是猹    Tags:Python   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条