Python NumPy 数据分析:处理复杂数据的高效方法

Python NumPy 数据分析:处理复杂数据的高效方法

文章目录

  • [Python NumPy 数据分析:处理复杂数据的高效方法](#Python NumPy 数据分析:处理复杂数据的高效方法)
      • [一 数据来源](#一 数据来源)
      • [二 获取指定日期数据](#二 获取指定日期数据)
      • [三 获取指定行列数据](#三 获取指定行列数据)
      • [四 求和计算](#四 求和计算)
      • [五 比例计算](#五 比例计算)
      • [六 平均值和标准差](#六 平均值和标准差)
      • [七 完整代码示例](#七 完整代码示例)
      • [八 源码地址](#八 源码地址)

本文详细介绍了如何使用 Python 和 NumPy 对复杂数据进行高效的数据分析。通过从 Kaggle 获取的公开数据集,演示了如何读取 CSV 文件、提取特定日期和字段的数据,并进行数据的统计与分析。本文展示了使用 NumPy 进行数据操作的便捷方式,如通过索引获取指定行列数据,计算累计数值和新增长的总数,还讲解了如何计算比率、平均值、标准差等关键统计数据。文章还包括完整的代码示例,帮助读者轻松上手进行复杂数据的分析任务。

导入 NumPy

python 复制代码
import numpy as np

一 数据来源

数据来源:Kaggle 上的公开数据集 ,读取数据如下:

python 复制代码
def get_result():
    with open("csv/your_data.csv", "r", encoding="utf-8") as f:
        data = f.readlines()

    your_data = {
        "date": [],
        "data": [],
        "header": [h for h in data[0].strip().split(",")[1:]]
    }

    for row in data[1:]:
        split_row = row.strip().split(",")
        your_data["date"].append(split_row[0])
        your_data["data"].append([float(n) for n in split_row[1:]])
    return your_data

数据太多可以先看少部分数据,如下:

python 复制代码
    # 获取少数行数据
    print(your_data["data"][:2])
    print(your_data["date"][:5])

二 获取指定日期数据

python 复制代码
date_idx = your_data["date"].index("2020-02-03")
print("日期->索引转换:", date_idx)

data = np.array(your_data["data"])

for header, number in zip(your_data["header"], data[date_idx]):
    print(header, ":", number)

三 获取指定行列数据

python 复制代码
# 获取指定行列数据
row_idx = your_data["date"].index("2020-01-24")  # 获取日期索引
column_idx = your_data["header"].index("Confirmed")  # 获取标题的索引
confirmed0124 = data[row_idx, column_idx]
print("截止 2020-01-24 的累积数:", confirmed0124)

row_idx = your_data["date"].index("2020-07-23")  # 获取日期索引
column_idx = your_data["header"].index("New deaths")  # 获取标题的索引
result = data[row_idx, column_idx]
print("截止 2020-07-23 的数:", result)

四 求和计算

python 复制代码
# 总增长数
row1_idx = your_data["date"].index("2020-01-25")
row2_idx = your_data["date"].index("2020-07-22")
new_cases_idx = your_data["header"].index("New cases")

# 注意要 row1_idx + 1 得到从 01-25 这一天的新增
# row2_idx + 1 来包含 7 月 22 的结果
new_cases = data[row1_idx + 1: row2_idx + 1, new_cases_idx]
# print(new_cases)
overall = new_cases.sum()
print("总共:", overall)

五 比例计算

python 复制代码
# 比例计算
new_cases_idx = your_data["header"].index("New cases")
new_recovered_idx = your_data["header"].index("New recovered")

not_zero_mask = data[:, new_recovered_idx] != 0
ratio = data[not_zero_mask, new_cases_idx] / data[not_zero_mask, new_recovered_idx]

代码中出现 nannannumpy 中表示的是 Not a Number,说明计算有问题,代码 not_zero_mask = data[:, new_recovered_idx] != 0 避免除数为 0 的情况。

六 平均值和标准差

python 复制代码
# 平均值, 标准差
ratio_mean = ratio.mean()
ratio_std = ratio.std()
print("平均比例:", ratio_mean, ";标准差:", ratio_std)

平均比例 和 标准差计算。

七 完整代码示例

python 复制代码
# This is a sample Python script.

# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
import numpy as np


# 读取数据
def get_result():
    with open("csv/your_data.csv", "r", encoding="utf-8") as f:
        data = f.readlines()

    your_data = {
        "date": [],
        "data": [],
        "header": [h for h in data[0].strip().split(",")[1:]]
    }

    for row in data[1:]:
        split_row = row.strip().split(",")
        your_data["date"].append(split_row[0])
        your_data["data"].append([float(n) for n in split_row[1:]])
    return your_data


def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press ⌘F8 to toggle the breakpoint.
    your_data = get_result()

    # 获取少数行数据
    print(your_data["data"][:2])
    print(your_data["date"][:5])

    # 获取指定日期数据
    date_idx = your_data["date"].index("2020-02-03")
    print("2020-02-03 日期->索引转换:", date_idx)

    data = np.array(your_data["data"])

    for header, number in zip(your_data["header"], data[date_idx]):
        print(header, ":", number)
    # 获取指定行列数据
    row_idx = your_data["date"].index("2020-01-24")  # 获取日期索引
    column_idx = your_data["header"].index("Confirmed")  # 获取标题的索引
    confirmed0124 = data[row_idx, column_idx]
    print("截止 2020-01-24 的累积数:", confirmed0124)

    row_idx = your_data["date"].index("2020-07-23")  # 获取日期索引
    column_idx = your_data["header"].index("New deaths")  # 获取标题的索引
    result = data[row_idx, column_idx]
    print("截止 2020-07-23 的数:", result)

    # 求和计算
    row1_idx = your_data["date"].index("2020-01-25")
    row2_idx = your_data["date"].index("2020-07-22")
    new_cases_idx = your_data["header"].index("New cases")

    # 注意要 row1_idx + 1 得到从 01-25 这一天的新增
    # row2_idx + 1 来包含 7 月 22 的结果
    new_cases = data[row1_idx + 1: row2_idx + 1, new_cases_idx]
    # print(new_cases)
    overall = new_cases.sum()
    print("总共:", overall)

    # 比例计算
    new_cases_idx = your_data["header"].index("New cases")
    new_recovered_idx = your_data["header"].index("New recovered")

    not_zero_mask = data[:, new_recovered_idx] != 0
    ratio = data[not_zero_mask, new_cases_idx] / data[not_zero_mask, new_recovered_idx]

    # 平均值, 标准差
    ratio_mean = ratio.mean()
    ratio_std = ratio.std()
    print("平均比例:", ratio_mean, ";标准差:", ratio_std)


if __name__ == '__main__':
    print_hi('数据分析')

# See PyCharm help at https://www.jetbrains.com/help/pycharm/

复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。

python 复制代码
Hi, 数据分析
[[555.0, 17.0, 28.0, 510.0, 0.0, 0.0, 0.0, 3.06, 5.05, 60.71, 6.0], [654.0, 18.0, 30.0, 606.0, 99.0, 1.0, 2.0, 2.75, 4.59, 60.0, 8.0]]
['2020-01-22', '2020-01-23', '2020-01-24', '2020-01-25', '2020-01-26']
2020-02-03 日期->索引转换: 12
Confirmed : 19887.0
Deaths : 426.0
Recovered : 604.0
Active : 18857.0
New cases : 3100.0
New deaths : 64.0
New recovered : 145.0
Deaths / 100 Cases : 2.14
Recovered / 100 Cases : 3.04
Deaths / 100 Recovered : 70.53
No. of countries : 25.0
截止 2020-01-24 的累积数: 941.0
截止 2020-07-23 的数: 9966.0
总共: 15247309.0
平均比例: 7.049556348053241 ;标准差: 19.094025710450307

八 源码地址

代码地址:

国内看 Giteenumpy/数据分析.py

国外看 GitHubnumpy/数据分析.py

引用 莫烦 Python

相关推荐
英英_3 分钟前
python 自动化教程
开发语言·python·自动化
万能程序员-传康Kk6 分钟前
【Python+flask+mysql】网易云数据可视化分析(全网首发)
python·mysql·信息可视化·数据分析·flask·可视化·网易云
先做个垃圾出来………7 分钟前
汉明距离(Hamming Distance)
开发语言·python·算法
测试者家园15 分钟前
用 VS Code / PyCharm 编写你的第一个 Python 程序
ide·vscode·python·职场和发展·零基础·pycharm·零基础学python
墨绿色的摆渡人1 小时前
pytorch小记(二十一):PyTorch 中的 torch.randn 全面指南
人工智能·pytorch·python
大叔_爱编程1 小时前
p024基于Django的网上购物系统的设计与实现
python·django·vue·毕业设计·源码·课程设计·网上购物系统
一个天蝎座 白勺 程序猿1 小时前
Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)
redis·爬虫·python·selenium·scrapy·云原生·k8s
90后小陈老师1 小时前
WebXR教学 09 项目7 使用python从0搭建一个简易个人博客
开发语言·python·web
weixin-WNXZ02181 小时前
闲上淘 自动上货工具运行原理解析
爬虫·python·自动化·软件工程·软件需求
正在走向自律2 小时前
Conda 完全指南:从环境管理到工具集成
开发语言·python·conda·numpy·fastapi·pip·开发工具