目录
一、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.雷达图
分类对比,展示多个维度的对比。(极地图)