Python数据分析个人笔记7

一、openpyxl使用

1.简介

​ openpyxl是一个第三方库,可以处理xlsx格式的Excel文件。

2.安装

# 在Miniconda中使用以下安装命令
pip install openpyxl

在这里插入图片描述

3.导入包

import numpy as np
import pandas as pd
import openpyxl

4.导入数据

data = pd.read_excel('./data/家具电商数据(6).xlsx')
data

输出:

在这里插入图片描述

5.处理数据

​ 观察表格自定义函数处理销售额列和应用apply函数。

# 自定义函数处理销售额列
def split_sale(y):
    x = str(y)
    if '元' in x:
        return eval(x[:x.index('元')])
    elif '¥' in x:
        return eval(x[x.index('¥')+1:])
    else:
        return eval(x)
        
# 应用apply函数
data['销售额']= data['销售额'].apply(split_sale)

data

输出:

在这里插入图片描述

分组groupby

# 根据地区汇总销售额
data.groupby(by='地区').agg({'销售额':np.sum}).sort_values(by='销售额', ascending=False)

输出:

在这里插入图片描述

# 根据地区汇总利润
data.groupby(by='地区').agg({'利润':np.sum}).sort_values(by='利润', ascending=False)

在这里插入图片描述

二、涉及函数

函数描述
read_excel读取Excel数据
apply函数作为一个对象,能作为参数传递给其他函数
groupby分组
agg总数、合计、聚合
sort_values排序

read_excel

data = pd.read_excel('./data/家具电商数据(6).xlsx')

apply

语法:

DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwargs)

参数:

func: 函数或 lambda 表达式,应用于每行或者每列

axis: {0 or ‘index’, 1 or ‘columns’}, 默认为0

  • 0 or ‘index’: 表示函数处理的是每一列
  • 1 or ‘columns’: 表示函数处理的是每一行

raw: bool 类型,默认为 False;

  • False ,表示把每一行或列作为 Series 传入函数中;
  • True,表示接受的是 ndarray 数据类型;

result_type:{‘expand’, ‘reduce’, ‘broadcast’, None}, default None

  • ‘expand’ : 列表式的结果将被转化为列。
  • ‘reduce’ : 如果可能的话,返回一个 Series,而不是展开类似列表的结果。这与 expand 相反。
  • ‘broadcast’ : 结果将被广播到 DataFrame 的原始形状,原始索引和列将被保留。

args: func 的位置参数

kwargs:要作为关键字参数传递给 func 的其他关键字参数,1.3.0 开始支持

示例:

import numpy as np
import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3],
                   'B': [4, 5, 6],
                   'C': [7, 8, 9]},
                  index=['a', 'b', 'c'])
df
	A	B	C
a	1	4	7
b	2	5	8
c	3	6	9

# 对各列应用函数 axis=0
df.apply(lambda x: np.sum(x))
A     6
B    15
C    24
dtype: int64

# 对各行应用函数
df.apply(lambda x: np.sum(x), axis=1)
a    12
b    15
c    18
dtype: int64

agg

语法:

DataFrame.agg(func=None, axis=0, *args, **kwargs)

参数:

  • func:用于聚合数据的函数,函数必须在DataFrame和apply函数中均可用;输入可以是函数名称、函数名称的字符串、函数组成的列表、或轴标签字典。
  • axis:取值为0或’index’(函数作用于每列),1或’columns’(函数作用于每行),默认为0。
  • args:传递函数的位置参数。
  • kwargs:传递关键字的位置参数。

返回值:scalar,Series 或 DataFrame

  • scalar:当在 Series.agg() 中使用单个函数时;
  • Series:当在 DataFrame.agg() 中使用单个函数时;
  • DataFrame:当在 DataFrame.agg() 中使用多个函数时

示例:

import numpy as np
import pandas as pd
data = [['AA',1,2],['BB',-3,12],['CC',0,6],['DD',7,9],['BB',3,5],['CC',4,9]]
df = pd.DataFrame(data, columns=['NAME','VAL1','VAL2'])

## 结果
  NAME  VAL1  VAL2
0   AA     1     2
1   BB    -3    12
2   CC     0     6
3   DD     7     9
4   BB     3     5
5   CC     4     9

df.agg({'VAL1':[np.max, np.min, pd.Series.nunique], 'VAL2':[np.max, np.min, np.mean]})

## 结果 ##
         VAL1       VAL2
amax      7.0  12.000000
amin     -3.0   2.000000
mean      NaN   7.166667
nunique   6.0        NaN

groupby

语法:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True)

参数:

  • by: 映射、函数、标签或标签列表

  • axis: {0 或 ‘index’,1 或 ‘columns’},默认 0

    ​ 沿行 (0) 或列 (1) 拆分。

  • level: int, level name, or sequence of such, default None

    ​ 如果轴是 MultiIndex(分层),则按特定级别或多个级别分组。

  • as_index: 布尔值,默认为 True

    ​ 对于聚合输出,返回以组标签为索引的对象。仅与 DataFrame 输入相关。as_index=False 实际上是“SQL 风格”的分组输出。

  • sort: 布尔值,默认 True

    ​ 对组键进行排序。关闭此功能可获得更好的性能。请注意,这不会影响每组内的观察顺序。Groupby 保留每个组内的行顺序。

  • group_keys: 布尔值,默认为 True

    ​ 调用 apply 时,将组键添加到索引以识别片段。

  • squeeze: bool,默认 False

    ​ 如果可能,减少返回类型的维数,否则返回一致的类型。

  • observed: 布尔值,默认为 False

    ​ 这仅适用于任何 groupers 是分类的。如果为真:仅显示分类分组的观察值。如果为 False:显示分类分组的所有值。

  • dropna: 布尔值,默认为 True

    ​ 如果为 True,并且组键包含 NA 值,则 NA 值连同行/列将被删除。如果为 False,NA 值也将被视为组中的键。

示例:

# 根据地区汇总销售额
data.groupby(by='地区').agg({'销售额':np.sum}).sort_values(by='销售额', ascending=False)

sort_values

语法:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

参数:

  • by: 按str 或 str 列表 要排序的名称或名称列表。

    ​ 如果轴为 0 或“索引”,则by可能包含索引级别和/或列标签。

    ​ 如果轴为 1 或“列”,则by可能包含列级别和/或索引标签。

  • axis: {0 或 ‘index’,1 或 ‘columns’},默认 0

    ​ 要排序的轴。

  • ascending: 升序bool 或 bool 列表,默认 True

    ​ 升序与降序排序。指定多个排序顺序的列表。如果这是一个布尔列表,则必须匹配 by 的长度。

  • inplace: bool,默认 False

    ​ 如果为 True,则就地执行操作。

  • kind : {‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’},默认 ‘quicksort’

    ​ 排序算法的选择。另请参阅numpy.sort()以获取更多信息。合并排序和稳定是唯一稳定的算法。对于 DataFrame,此选项仅在对单个列或标签进行排序时应用。

  • na_position : {‘first’,‘last’},默认’last’

    ​ 如果first ,则将 NaNs 放在开头;最后将 NaN 放在最后。

  • ignore_index: 布尔值,默认为 False

    ​ 如果为 True,则生成的轴将标记为 0、1、…、n - 1。

示例:

# 根据地区汇总利润
data.groupby(by='地区').agg({'利润':np.sum}).sort_values(by='利润', ascending=False)

三、数据可视化

​ 数据可视化,是关于数据视觉表现形式的科学技术研究。其中,这种数据的视觉表现形式被定义为,一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量。

​ 它是一个处于不断演变之中的概念,其边界在不断地扩大。主要指的是技术上较为高级的技术方法,而这些技术方法允许利用图形、图像处理、计算机视觉以及用户界面,通过表达、建模以及对立体、表面、属性以及动画的显示,对数据加以可视化解释。与立体建模之类的特殊技术方法相比,数据可视化所涵盖的技术方法要广泛得多。

常用图表

1.柱状图

​ 分类对比,宽度无意义展示类别,高度有意义展示数量。

在这里插入图片描述

2.条形图

​ 分类对比,宽度无意义展示类别,高度有意义展示数量。

在这里插入图片描述

3.折线图

​ 和时间相关的,展示某种变量的变化趋势,趋势分析。

在这里插入图片描述

4.直方图

​ 对数值型的数据做分类,(连续型的数据离散化)(分桶),主要看数据分布状况。柱子是连续的,柱子的宽度是组距有意义,柱子的高度是数量,也有意义,通常看柱子的面积比较分布状况。

在这里插入图片描述

5.箱型图

​ 箱线图,盒须图,盒式图。常用于分布,检测异常值。

在这里插入图片描述

6.饼图

​ 分类对比,常用于占比。研究总体中的占比是多少。(环形图,扇形图)。

在这里插入图片描述

7.散点图

​ 横纵坐标都是数值。主要研究两个变量之间的关系:相关分析,回归分析。(气泡图)。

在这里插入图片描述

8.雷达图

​ 分类对比,展示多个维度的对比。(极地图)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红陌樱花vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值