数据分析三剑客:NumPy、Pandas、Matplotlib

数据分析三剑客:

一、能说出NumPy、Pandas、Matplotlib的关系:

NumPy是底层数值计算基础:

NumPy提供了高效的多维数组和数值计算能力,是后两者的基础,比如Pandas里的DataFrame底层存储的其实就是NumPy数组。Pandas 的数值运算(像求均值、求和)最终都是调用 NumPy 的函数来实现的。

Pandas 是基于它做结构化数据分析的:

Pandas是中层工具,它在NumPy的基础上,把数组包装成了更适合业务分析的表格结构,(Series 是单列数组,DataFrame 是多列表格),还加了索引、列名这些方便理解的信息,更适合处理结构化数据。

Matplotlib 靠前两者提供的数据做可视化。

Matplotlib就是上层展示,它可以直接接收?NumPy数组或者Pandas的Series/DataFrame 作为数据源,把数据转换成图表(比如折线图、散点图),相当于把前两者处理好的数据可视化出来,方便直观理解。

简单说就是:NumPy 负责 "算得快",Pandas 负责 "用得顺",Matplotlib 负责 "看得懂",三者是从底层计算到中层处理再到上层展示的递进关系。

二、掌握Numpy数组创建操作:np.array() 或者 np.random.randn()

  1. 这块我用得很多:
  • np.array()的话,既可以把Python的列表转成数组(比如np.array([1,2,3])生成一维数组,np.array([[1,2],[3,4]])生成二维数组),也能指定数据类型(比如加dtype=np.float32把数据存成浮点型,节省内存)。

  • np.random.randn()是生成服从标准正态分布的随机数组,比如np.random.randn(3,4)就能生成3行4列、均值0、标准差1的随机浮点数;如果是生成整数随机数组,我也常用np.random.randint(0,10,size=(2,3))(生成0到10之间的整数,2行3列)。

    另外像生成全0数组(np.zeros())、全1数组(np.ones())这些常用的创建方式,我也都很熟练。

三、了解numpy数组的相关操作:属性、索引、形状、运算

  • 属性 :比如看数组的形状用arr.shape,看数据类型用arr.dtype,看数组元素个数用arr.size,这些属性能帮我快速了解数组的基本信息。arr.ndim是数组的维度。

  • 索引

    一维数组直接用arr[0]取第一个元素;二维数组可以用arr[1,2]取第2行第3列,

    也能切片(比如arr[0:2, 1:3]取前2行、第2到3列的区域);

    如果是条件索引,比如arr[arr>5]可以直接取出数组中大于5的元素。

  • 形状调整 :比如用arr.reshape(2,6)把原来的数组改成2行6列,arr.T数组的转置。

    或者用arr.flatten()把多维数组转成一维,这些在数据格式不匹配的时候经常用。

  • 运算

    数组之间可以直接做加减乘除(比如arr1 + arr2),也能和标量运算(比如arr * 2);

    矩阵乘法:公式:(m,p)*(p,n) = (m,n) API:np.dot

    另外像求均值np.mean(arr)、求和np.sum(arr)、求最大值np.max(arr)这些统计运算,我也会根据需求用(比如np.sum(arr, axis=0)是按列求和,axis=1是按行求和)。

四、能说出Pandas中Series和DataFrame的联系

我很清楚这两者的关系:

首先Series是Pandas里的"单列数据结构"------它像是带索引的一维数组,既有数据值,也有对应的索引(可以是默认的数字索引,也能自己指定比如日期、名称)。

而DataFrame是"多列表格结构"------它可以理解成是由多个Series"拼"起来的,每一列都是一个Series,并且这些Series共享同一个行索引。

举个例子:如果我有一个存"用户年龄"的Series和一个存"用户消费"的Series,把这两个Series按列组合起来,就能得到一个包含"年龄""消费"两列的DataFrame;反过来,从DataFrame里取某一列(比如df['年龄']),得到的就是对应的Series。

所以两者的核心联系是:DataFrame是Series的容器,Series是DataFrame的组成单元。

五、掌握DataFrame对象的创建操作:从文件读取或者列表/字典等转换

  1. 这些创建方式我都常用:
  • 从文件读取 :比如读CSV文件用pd.read_csv('文件路径.csv'),读Excel文件用pd.read_excel('文件路径.xlsx'),还能指定参数(比如sep='\t'指定分隔符、usecols=[0,2]只读取第1和第3列)。

  • 用列表/字典创建 :如果是字典,比如pd.DataFrame({'姓名':['张三','李四'],'年龄':[20,25]}),字典的键会变成列名,值会变成对应列的数据;如果是列表嵌套列表,比如pd.DataFrame([['张三',20],['李四',25]], columns=['姓名','年龄']),需要手动指定列名。

    另外像从NumPy数组创建(pd.DataFrame(np.random.rand(3,2), columns=['列1','列2'])),或者从数据库查询结果创建,这些方式我也用过。

六、熟悉DataFrame的相关操作:选择、筛选、缺失值、分组聚合

  1. 这些都是我日常分析的核心操作:
  • 选择 :选列可以用df[['列名1','列名2']],选行可以用df.loc[行索引]或者df.iloc[行号]

  • 筛选 :比如筛选"年龄>20"的行用df[df['年龄']>20],多条件筛选(比如"年龄>20且消费>100")用df[(df['年龄']>20) & (df['消费']>100)]

  • 缺失值处理 :先用df.isnull().sum()统计每列的空值数量,然后根据情况处理------比如用df.dropna()删除有空值的行,或者用df.fillna(df['列名'].mean())把空值填充成该列的均值。

  • 分组聚合 :比如按"性别"分组求"消费"的均值,用df.groupby('性别')['消费'].mean();如果要同时求均值和总和,就用df.groupby('性别')['消费'].agg(['mean','sum'])

  • **数据透视表:**pivot_table()

七、能够使用Matplotlib绘制简单的折线图和散点图

这两种图我经常用:

  • 折线图 :比如画"日期-销量"的折线图,先导入库import matplotlib.pyplot as plt,然后用plt.plot(df['日期'], df['销量']),再加上plt.xlabel('日期')(x轴标签)、plt.ylabel('销量')(y轴标签)、plt.title('每日销量趋势')(标题),最后用plt.show()显示图表。

  • 散点图 :比如画"年龄-消费"的散点图,用plt.scatter(df['年龄'], df['消费']),同样可以加标签和标题,还能通过c参数指定点的颜色(比如c='red'),通过s参数调整点的大小。

    如果是从Pandas的DataFrame取数据,直接把Series传进去就行,不用额外转格式。

相关推荐
SelectDB4 小时前
较 Trino 省 67% 成本,速度快 10 倍,中通快递基于 SelectDB 的湖仓分析架构
数据库·数据分析
xingzhemengyou14 小时前
python pandas操作excel
python·excel·pandas
asyxchenchong8884 小时前
联合物种分布模型HMSC——深入贝叶斯群落生态学分析,涵盖单物种与多物种建模、环境筛与生物筛解析、时空数据分析及系统发育整合等
经验分享·数据挖掘·数据分析
我的offer在哪里5 小时前
开源的音视频元数据分析工具
数据挖掘·数据分析·音视频
小白学大数据5 小时前
从爬取到分析:使用 Pandas 处理头条问答数据
开发语言·爬虫·python·pandas
未来魔导14 小时前
go语言中json操作总结
数据分析·go·json
Lucky高16 小时前
Pandas库入门
python·pandas
阿达_优阅达20 小时前
Tableau 2025.3 发布!可视化扩展升级、Server 版 Agent、平台数据 API,让 AI 深度融入业务工作流
人工智能·ai·数据分析·数据可视化·仪表板·tableau·版本更新
叮铃铃上课了21 小时前
HiveSQL 中的集合运算
数据分析