M数据分析NumPy基础.py

发布于:2025-06-19 ⋅ 阅读:(16) ⋅ 点赞:(0)

前言:NumPy 是数据分析和科学计算领域中 Python 的重要库。它以高效的多维数组对象 ndarray 为核心,提供了丰富的数组操作功能,涵盖数组创建、属性查看、元素访问与切片、向量化运算等基础功能,还具备快速生成特殊数组、进行统计分析、重塑数组形状等实用技巧。在实际应用中,NumPy 能助力用户高效处理复杂数据,是数据分析与科学计算的得力工具。

目录

初识 NumPy,从数组启程

数组属性,知晓数据详情

快速创建特殊数组

数组元素访问与切片

向量化运算,解锁批量处理高效技能

统计分析,洞察数据奥秘

数组重塑,掌握形状变换技巧

布尔索引,精准筛选数据利器

结构化数组,复杂数据的收纳宝盒

实战演练:doubanTop250 电影数据分析


初识 NumPy,从数组启程

NumPy 的核心在于 ndarray,也就是多维数组对象。咱们先从最基础的一维和二维数组入手,开启探索之旅。

import numpy as np

# 创建一维数组,就像一个直线上的数字队列
arr_1d = np.array([1, 2, 3, 4, 5])
print("【1. 一维数组】", arr_1d)

# 创建二维数组,想象成一个数字表格,有行有列
arr_2d = np.array([[1, 2], [3, 4], [5, 6]])
print("【2. 二维数组】\n", arr_2d)

数组属性,知晓数据详情

了解数组的属性,就如同知晓一个人的基本信息般关键。例如维度数、形状以及数据类型,这些信息都很重要。

print("【3. 数组属性】")
print("维度数:", arr_2d.ndim)        # 这告诉我们这是二维数组
print("形状(行数, 列数):", arr_2d.shape)  # 告诉我们有3行2列
print("数据类型:", arr_2d.dtype)      # 告诉我们存储的是64位整数

快速创建特殊数组

NumPy 提供了诸多便捷函数,用于快速生成一些特殊数组,在实际应用中十分实用。

print("\n【4. 特殊数组】")

# 创建全零数组,初始化或者占位特别好用
zeros = np.zeros((2, 3))
print("全零数组:\n", zeros)

# 创建全一数组,特定场景下计算很方便
ones = np.ones((3, 2))
print("全一数组:\n", ones)

# 创建范围数组,相当于数字序列生成器
range_arr = np.arange(0, 10, 2)
print("范围数组:", range_arr)

# 创建等间距数组,数据采样特别好用
linspace_arr = np.linspace(0, 10, 5)
print("等间距数组:", linspace_arr)

# 创建单位矩阵,线性代数的必备工具
identity = np.eye(3)
print("单位矩阵:\n", identity)

数组元素访问与切片

访问数组元素,如同从书架上精准取书般简单。切片操作则更为灵活,可以轻松获取数组的一部分。

print("\n【5. 索引与切片】")

# 获取单个元素
print("一维数组首个元素:", arr_1d[0])
print("二维数组(1,1)位置元素:", arr_2d[1, 1])

# 获取数组的一部分(切片)
print("一维数组切片[1:4]:", arr_1d[1:4])
print("二维数组第一行所有元素:", arr_2d[0, :])

向量化运算,解锁批量处理高效技能

向量化运算是 NumPy 的王牌功能,它能同时对数组中的所有元素进行运算,效率惊人。

print("\n【6. 数组运算】")

# 基础算术运算,直接作用于每个元素
print("数组加法:", arr_1d + arr_1d)
print("数组乘法:", arr_1d * 2)
print("数组平方:", arr_1d ** 2)

# 矩阵乘法,注意和元素乘法的区别
arr_2d_2 = np.array([[1, 2], [3, 4]])
print("矩阵乘法:\n", np.dot(arr_2d_2, arr_2d_2))

统计分析,洞察数据奥秘

NumPy 配备了众多统计分析函数,助力我们迅速把握数据的基本特征。

print("\n【7. 统计运算】")

print("数组和:", np.sum(arr_1d))
print("数组最大值:", np.max(arr_1d))
print("数组平均值:", np.mean(arr_1d))
print("数组标准差:", np.std(arr_1d))

数组重塑,掌握形状变换技巧

重塑功能可以改变数组的形状,但需确保元素总数保持不变。

print("\n【8. 形状操作】")

# 把一维数组变成二维数组
arr_reshaped = arr_1d.reshape(1, 5)
print("一维转二维:\n", arr_reshaped)

# 把多个数组垂直堆叠在一起
vstack_arr = np.vstack([arr_1d, arr_1d])
print("垂直堆叠:\n", vstack_arr)

# 把多个数组水平拼接在一起
hstack_arr = np.hstack([arr_1d, arr_1d])
print("水平堆叠:", hstack_arr)

布尔索引,精准筛选数据利器

布尔索引如同给数组元素设置筛选条件,只有符合条件的元素才能被选中。

print("\n【9. 布尔索引】")

# 筛选出大于3的元素
mask = arr_1d > 3
print("大于3的元素:", arr_1d[mask])

# 筛选大于2且小于5的元素
complex_mask = (arr_1d > 2) & (arr_1d < 5)
print("大于2且小于5的元素:", arr_1d[complex_mask])

结构化数组,复杂数据的收纳宝盒

结构化数组能够存储复杂的数据结构,就像一个包含多列的表格。

print("\n【10. 结构化数组】")

# 定义复杂数据结构,包括姓名、年龄、成绩等
dtype = np.dtype([
    ('姓名', np.str_, 20),
    ('年龄', np.int32),
    ('成绩', np.float32),
    ('是否毕业', np.bool_)
])

# 创建结构化数组,填充数据
students = np.array([
    ('张三', 20, 85.5, True),
    ('李四', 21, 92.0, False),
    ('王五', 19, 78.5, True)
], dtype=dtype)

print("学生数据:\n", students)

实战演练:doubanTop250 电影数据分析

下面,咱们将上述知识点运用到上一篇获取的电影数据中,展示如何从文件读取数据、处理并分析。

import numpy as np

# 定义结构化数组类型来存储电影信息
dtype = np.dtype([('名字', np.str_, 100), ('时间', np.str_, 20), ('评分', np.float32), ('评价人数', np.int32)])

# 初始化存储解析后的电影数据的列表
parsed_movies = []

# 读取电影信息文件
try:
    with open("moviesTop250.txt", "r", encoding="utf-8") as file:
        lines = file.readlines()
        for i in range(0, len(lines), 4):
            if i + 3 < len(lines):
                # 解析每一行数据,提取关键信息
                name_line = lines[i].strip()
                year_line = lines[i + 1].strip()
                rating_line = lines[i + 2].strip()
                num_ratings_line = lines[i + 3].strip()

                name = name_line.split("名字:")[1] if "名字:" in name_line else "无"
                year = year_line.split("时间:")[1] if "时间:" in year_line else "无"
                rating = float(rating_line.split("评分:")[1]) if "评分:" in rating_line else 0.0
                num_ratings = int(num_ratings_line.split("评价人数:")[1]) if "评价人数:" in num_ratings_line else 0

                parsed_movies.append((name, year, rating, num_ratings))
except IOError as e:
    print(f"读取文件时出错:{e}")
    exit()

# 将解析后的数据转换为结构化数组
movies_data = np.array(parsed_movies, dtype=dtype)

# 进行数据分析
if len(movies_data) > 0:
    # 计算平均评分,看看整体水平如何
    avg_rating = np.mean(movies_data['评分'])
    print(f"所有电影的平均评分:{avg_rating:.1f}")

    # 找出最高最低评分,看看谁是最好和最差
    max_rating = np.max(movies_data['评分'])
    min_rating = np.min(movies_data['评分'])
    print(f"最高评分:{max_rating:.1f}")
    print(f"最低评分:{min_rating:.1f}")

    # 找出评价人数最多的电影,热门程度一目了然
    most_reviewed_movie = movies_data[np.argmax(movies_data['评价人数'])]
    print(f"评价人数最多的电影:{most_reviewed_movie['名字']}(评价人数:{most_reviewed_movie['评价人数']})")

    # 排序并输出评分最高的前5部电影,看看哪些是大家的心头好
    sorted_by_rating = np.argsort(movies_data['评分'])[::-1]
    print("评分最高的前5部电影:")
    for i in range(min(5, len(sorted_by_rating))):
        idx = sorted_by_rating[i]
        print(f"{i + 1}. {movies_data[idx]['名字']}(评分:{movies_data[idx]['评分']:.1f}, 评价人数:{movies_data[idx]['评价人数']})")
else:
    print("未解析到有效的电影数据")

本文介绍NumPy库的多种实用操作,涵盖数组创建、属性查看、特殊数组生成等基础知识。重点讲解向量化运算、统计分析、数组重塑等核心技巧,同时介绍布尔索引和结构化数组处理复杂数据的能力。最后通过豆瓣电影数据实战演练,展示NumPy在数据分析中的强大应用。内容由浅入深,助新手快速掌握这一科学计算利器。


网站公告

今日签到

点亮在社区的每一天
去签到