Python高阶:站在巨人的肩膀上 - Numpy、Pandas、Matplotlib、Requests

1 概述

1.1 背景介绍

Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,由于其简单的语法、强大的工具库等优势被很多人青睐,应用于各个行业之中。

本案例将基于华为开发者空间进行。华为开发者空间集成了CodeArts IDE for Python,支持一站式、全流程、安全可信的软件开发生产线。

1.2 适用对象

  • 个人开发者
  • 高校学生

1.3 案例时间

本案例总时长预计40分钟。

1.4 案例流程

487b244c63c810e5df7fb4899a8fe48b.png{{{width="30%" height="auto"}}}

说明:

① 用户开通华为开发者空间,进入云主机; ② 在CodeArts IDE 编写代码进行学习。

1.5 资源总览

本案例预计花费总计0元。

资源名称规格单价(元)时长(分钟)
开发者空间 - 云主机2vCPUs | 4GB X86 CodeArts IDE for Python免费40

2 准备开发环境

2.1 配置云主机并进入

参考“10分钟玩转云主机” 案例介绍中“2.2 申请云主机”章节内容完成华为开发者空间云主机申请与配置,配置云主机建议:

  • CPU架构:X86
  • 规格:2 vCPUs 4GB
  • 操作系统:Ubuntu
  • 系统镜像:公共镜像Ubuntu 22.04 Server定制版

5c9d93c10af55087041181306df59057.PNG

点击进入桌面进入云主机。

7e5a3aad2239cbe5a309de676fbee220.PNG

2.2 使用CodeArts IDE创建工程

参考“初识云主机:CodeArts IDE入门”案例介绍“3.1 新建工程”章节新建工程。

3 NumPy

NumPy(Numerical Python)是Python中用于科学计算的基础工具库,可以理解为处理数字的“超强工具箱”。 NumPy相当于Python中的“数学加速器”,特别适合处理大量数字计算。如果你的数据像一列火车(一维)、一张地图(二维)或一个魔方(三维),用NumPy会比普通列表更高效、更简洁。

3.1 安装numpy

在CodeArts IDE的终端输入如下命令安装numpy:

pip install numpy

1cc0972a5e97cb98b4a3e5d6c628808c.png

3.2 数组创建

Step1:删除“main.py”中原有内容,输入下列代码。

import numpy as np

def main():
    # 将列表转化成数组
    arr = np.array([1, 2, 3])

    # 全0数组,生成一个3行3列,int类型的全0数组
    zeros = np.zeros((3, 3),np.int32)

     # 全1数组,生成一个2行2列,int类型的全1数组
    ones = np.ones((2, 2),np.int32)

    # 创建一个2行3列的未初始化数组
    empty = np.empty((2, 3))       

    # 生成固定步长的等差数列,起始值为0,终止值为10,步长为2
    arange = np.arange(0, 10, 2)    

    # 在指定区间内生成均匀分布的等间距数值序列,在1-9之间,生成5个等间距的数值,包含1和9
    linspace = np.linspace(1, 9, 5) 

    print(f"arr:{arr}")
    print(f"zeros:\n{zeros}")
    print(f"ones:\n{ones}")
    print(f"empty:\n{empty}")
    print(f"arange:{arange}")
    print(f"linspace:{linspace}")

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“控制台”可以看到打印结果:

ab5f593d17d2e1e6274f795442c69c00.png

3.3 数组属性

Step1:删除“main.py”中原有内容,输入下列代码。

import numpy as np

def main():
    arr = np.array([[1,2,3],[4,5,6],[7,8,9]])

    # 数组的形状,(3, 3):3行3列
    print(f"数组形状:{arr.shape}")

    # 数组的维度:2
    print(f"数组维度:{arr.ndim}")

    # 数组的数据类型:int64
    print(f"数组数据类型:{arr.dtype}")

    # 数组元素总数:9
    print(f"数组元素总数:{arr.size}")

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“控制台”可以看到打印结果:

fa50fc6e3084fba0a3e9ecbefcd6e5d8.PNG

3.4 索引与切片

在NumPy中,切片和索引是操作数组的基本方法,它们允许你选择数组的一部分或单个元素。索引是指通过位置选择数组中的单个元素。切片是指选择数组的一部分,索引是从0开始的。切片的基本语法是arr[start:stop:step],其中start是切片开始的位置(默认为0),stop是切片结束的位置(不包括此位置的元素),step是步长,默认为1。

Step1:删除“main.py”中原有内容,输入下列代码。

import numpy as np

def main():
    arr = np.array([[1, 2, 3], [4, 5, 6]])

    # arr[0, 1]:0表示行索引,1表示列索引,索引从0开始计数
    # arr[0, 1]表示第1行第2列的元素,即是2
    print(f"第1行第2列的元素:{arr[0, 1]}")

    # 冒号‘:’表示所有行
    # 1:3 表示列索引从1到2,也就是第2列到第三列
    # arr[:, 1:3]表示保留所有行,截取第2列到第三列的数据
    print(f"列切片:\n{arr[:, 1:3]}")

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“控制台”可以看到打印结果:

810a406f761ac3a9d38a9ef139140598.PNG

3.5 数组操作

Step1:删除“main.py”中原有内容,输入下列代码。

import numpy as np

def main():
    # 将[0 1 2 3 4 5],调整为2行3列数组
    arr = np.arange(6).reshape(2,3)
    print(f"调整数组形状:\n{arr}")


    # 转为一维数组
    arr_flatten = arr.flatten() 
    print(f"转为一维数组:{arr_flatten}")

    a = np.array([[1, 2], [3, 4]])
    b = np.array([[5, 6]])

    # 数组合并
    c = np.concatenate((a, b))    
    print(f"数组合并:{c }")

    # 数组分割:将数组c分割为3个子数组
    arr_split = np.split(c,3)
    print(arr_split)
    print(f"数组分割:{arr_split}")

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“控制台”可以看到打印结果:

eb7d1b374f2767d0020654eaf12a651b.PNG

3.6 数学运算

Step1:删除“main.py”中原有内容,输入下列代码。

import numpy as np

def main():
    a = np.array([1, 2, 3])
    b = np.array([4, 5, 6])

    print(a + b)    # [5 7 9]       
    print(a * 2)    # [2 4 6]     

    # 1*4+2*5+3*6=32  
    print(np.dot(a, b))     

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“控制台”可以看到打印结果:

450d583265724a9cdb544132ef624849.PNG

4 Pandas

Pandas是Python中一个专门处理表格数据的工具库。它基于NumPy开发,更适合处理现实世界中各种不规整的结构化数据。

4.1 安装pandas

在CodeArts IDE的终端输入如下命令安装pandas:

pip install pandas

0564edbf29e981051cbf321f2c22388d.png

4.2 Series

Series是pandas中一维带标签数组,类似Excel的单列数据,但支持更灵活的索引和运算。适合存储同类型数据,每个数据点可关联业务含义的标签。Series的索引可以是任意可哈希类型,而非固定数字。NaN(Not a Number)表示缺失数据,Series 支持安全处理缺失值而不报错。

Step1:删除“main.py”中原有内容,输入下列代码。

import pandas as pd

#1.创建带业务含义的Series(含缺考)
math_scores = pd.Series(
    data=[85, 92, None, 95, 88],  # 王五缺考,None自动转NaN
    index=["张三", "李四", "王五", "赵六", "周七"],  # 学生姓名作为索引
    name="数学成绩",  # 列名,用于后续报表
    dtype="Int64"  #重点:Int64允许NaN,避免int类型报错
)

#2.基础属性查看(理解数据结构)
print("=== 数据概览 ===")
print("数据类型(允许缺失):", math_scores.dtype)  # Int64(非float)
print("有效成绩数量:", math_scores.count())  # 4(王五缺考不计入)
print("成绩范围:", math_scores.min(), "-", math_scores.max())  # 85-95(忽略NaN)

#3.索引对比:标签vs位置
print("\n=== 成绩查询(标签更安全) ===")
print("李四的成绩(标签):", math_scores["李四"])  # 92(按索引获取)
print("李四的成绩(位置):", math_scores.iloc[1])  # 92(按位置获取,慎用,当前正确,但插入新学生会错位)

#4.补考处理:索引对齐
makeup = pd.Series({"王五": 80}, name="数学成绩")  # 仅王五补考,标签匹配
final = math_scores.combine_first(makeup)  # 自动按标签填充,其他不变
print("\n=== 最终成绩(含补考) ===")
print(final)  # 输出带姓名索引的Series,王五成绩修复

#5.向量化分析
print("\n=== 教学分析 ===")
print("平均分:", final.mean())  # 88.0(自动忽略原NaN)
print("进步最大:", (final - math_scores).idxmax())  # 王五(从NaN→80,进步最大)

Step3:点击右上角“运行”按钮,“控制台”可以看到打印结果:

366caff253c72468af0de60aeb0f32fb.png

4.3 DataFrame

DataFrame 是二维表格结构,每列可以是不同数据类型。用于存储异构数据,支持行列双向操作,类似Excel工作表。列是DataFrame的核心,可自由添加、删除、修改。索引方式分为loc和iloc两种方式,loc基于标签,iloc基于位置。

Step1:删除“main.py”中原有内容,输入下列代码。

import pandas as pd

#1.创建初始DataFrame(含缺考)
student_data = {
    "姓名": ["张三", "李四", "王五", "赵六"],
    "性别": ["男", "女", "男", "男"],
    "数学": [85, 92, 80, 95],
    "英语": [88, 79, 91, 85],
    "体育": [90, 85, None, 95]  # 王五体育缺考(NaN)
}
df = pd.DataFrame(student_data)

#2.数据洞察(表格结构展示)
print("=== 原始成绩单 ===")
print(df.head())  # 前4行,自动生成整数索引
print("\n各列数据类型:\n", df.dtypes)  # 体育列为float64(含NaN)

#3.索引操作(标签筛选 vs 位置切片)
print("\n=== 女生数学成绩分析 ===")
female = df.loc[  #重点:loc用标签和条件
    df["性别"] == "女",  # 行:性别为女
    ["姓名", "数学", "英语"]  # 列:指定科目
]
print(female)  # 李四:数学92,英语79

#4.列操作(增删改操作)
df["总分"] = df[["数学", "英语", "体育"]].sum(axis=1, min_count=2)  # 至少2科有效
df["排名"] = df["总分"].rank(ascending=False)  # 降序排名(总分高排前)
df.drop(columns=["性别"], inplace=True)  # 删除不再需要的列

#5.数据合并(按姓名对齐加分项)
extra = pd.DataFrame({
    "姓名": ["王五", "张三"],  # 顺序不同,但标签匹配
    "加分": [2, 3]
})
df = df.merge(extra, on="姓名", how="left").fillna(0)  # 左连接,赵六无加分补0
df["最终得分"] = df["总分"] + df["加分"]

#6.最终输出(带业务含义的报表)
print("\n=== 奖学金评定表 ===")
print(df[["姓名", "数学", "英语", "体育", "最终得分", "排名"]].round(1))

Step2:点击右上角“运行”按钮,“控制台”可以看到打印结果:

ae8d8ceda8f240cc83aeeec630781146.png

5 Matplotlib

Matplotlib是Python中一个数据画板,专门用来把枯燥的数字变成直观的图表。

5.1 安装Matplotlib

在CodeArts IDE的终端输入如下命令安装Matplotlib:

pip install matplotlib

71c3cdae413c9159f2d263440294b5dc.png

5.2 绘制折线图

使用matplotlib绘制折线图并保存为图片。

Step1:删除“main.py”中原有内容,输入下列代码。

# 导入matplotlib
import matplotlib.pyplot as plt

def main():

    # 生成数据 (x: 0-3,y: 平方数)
    x = [0, 1, 2, 3]
    y = [0, 1, 4, 9]

    # 调用plot方法绘制
    plt.plot(x, y)   
    # 调用savefig方法保存图表为图片格式   
    plt.savefig('plot.png')

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“资源管理器”区域可以看到绘制的图片:

5e6f592b4f7b40cc2a842708c7445f6d.PNG

5.3 绘制柱状图

使用matplotlib绘制柱状图并保存为图片。

Step1:删除“main.py”中原有内容,输入下列代码。

import matplotlib.pyplot as plt

def main():

    # 1. 准备数据 
    categories = ['Apple', 'Banana', 'Orange', 'Grape', 'Peach']
    values = [23, 45, 32, 28, 39]

    # 2. 创建柱状图 
    plt.bar(categories,       # X轴标签 
        values,             # 柱体高度 
        color='skyblue',      # 柱体颜色 
        edgecolor='black',    # 边框颜色 
        width=0.6)           # 柱体宽度            

    # 3. 添加图表装饰 
    plt.xlabel('Fruits', fontsize=12)          # X轴标签 
    plt.ylabel('Sales (units)', fontsize=12)    # Y轴标签 
    plt.title('Fruit Sales Report', fontsize=14, pad=20)  # 主标题 
    plt.xticks(rotation=45)                    # X标签旋转角度 

    # 4. 显示图表 
    plt.tight_layout()  # 自动调整布局 
    plt.savefig('bar.png')

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“资源管理器”区域可以看到绘制的图片:

fb79a63ba75034f99dc951356c106266.PNG

5.4 绘制饼状图

使用matplotlib绘制饼状图并保存为图片。

Step1:删除“main.py”中原有内容,输入下列代码。

import matplotlib.pyplot as plt

def main():

    # 1. 准备数据 
    labels = ['A', 'B', 'C', 'D']
    sizes = [15, 30, 45, 10]  # 各部分占比(总和无需100,自动计算比例)
    explode = (0, 0.1, 0, 0)  # 突出显示第二个部分(B)
    colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']

    # 2. 绘制饼图 
    plt.pie(sizes, 
        explode=explode, 
        labels=labels, 
        colors=colors,
        autopct='%1.1f%%',  # 显示百分比(保留一位小数)
        shadow=True,        # 添加阴影 
        startangle=90)      # 起始角度(逆时针)

    # 3. 添加标题并显示 
    plt.title('Simple Pie Chart Example')
    plt.axis('equal')  # 确保饼图显示为圆形(非椭圆)
    plt.savefig('pie.png')

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“资源管理器”区域可以看到绘制的图片:

106539f0864143c7f75176a52217cd56.PNG

6 Requests

Requests是一个用于发送HTTP请求的Python库。能够让开发者用尽可能少的代码完成复杂的网络请求任务。常见使用场景:获取网页内容、调用API接口、提交表单数据等。

6.1 安装Requests

在CodeArts IDE的终端输入如下命令安装Requests:

pip install requests

677ea061f203266f21a4c5dbcd080091.png

6.2 GET请求

Step1:删除“main.py”中原有内容,输入下列代码。

import requests # 导入requests
def main():
    url = "https://b1f058974c4a4fed85b34845a590a149.apig.cn-north-4.huaweicloudapis.com/getAppVersionInfo"
    # get请求
    response = requests.get(url)
    # 状态码
    print(f"状态码: {response.status_code}")
    # 返回json数据
    print(f"JSON解析: {response.json()}")

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“控制台”可以看到打印结果:

15d6f28af14f1347508300d8c5f13ee7.PNG

6.3 POST请求

Step1:删除“main.py”中原有内容,输入下列代码。

import requests # 导入requests

def main():
    url = "https://b1f058974c4a4fed85b34845a590a149.apig.cn-north-4.huaweicloudapis.com/postManager"

    # 请求参数
    params = {"id": 1000}  
    # 发送post请求
    response = requests.post(url, data=params)
    # 打印状态码
    print(f"状态码: {response.status_code}") 
    # 打印返回json数据
    print(f"返回的JSON数据: {response.json()}")   

if __name__ == "__main__":
    main()

Step2:点击右上角“运行”按钮,“控制台”可以看到打印结果:

04757b70d89e4e732c1fe72f25f043cb.PNG

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值