Ai应用——数据分析

数据分析

数据分析:从一堆看似杂乱的数据中,通过数据清洗,分析,可视化等手段,找出有价值的信息或结论,从而帮助我们解决实际的问题

例如:用户订单数据的分析、电影榜单数据分析、学生成绩数据分析

学习计划:

环境准备 → Pandas基础 → Matplotlib基础 → 数据分析案例

环境准备

Jupyter Notebook

Jupyter Notebook是一个基于Web网页的、交互式的编程笔记本,让你可以把代码、运行结果、图标和笔记本全部放在一个文件里(在数据分析、机器学习、教学和科研等领域的数据实验室)

快捷键:

Ctrl + 回车 运行

Ctrl + 空格 另开单元格

运行:

jupyter lab 或者 jupyter notebook

Pandas介绍

Pandas是一个功能强大的结构化数据分析的工具集,底层是局域Numpy,无论是在数据分析领域、还是大数据开发场景都有显著的优势。

官网http://pandas.pydata.org/

核心:DataFrame(类似表格),Series(类似表格的一列)

Pandas初体验

需求:基于Pandas统计班级成员的最高分,最低分,平均分,总分

python 复制代码
import pandas as pd

df1 = pd.DataFrame([
    {'姓名': '张三', '语文': 85, '数学': 92, '英语': 78},
    {'姓名': '李四', '语文': 78, '数学': 88, '英语': 95},
    {'姓名': '王五', '语文': 92, '数学': 96, '英语': 89},
    {'姓名': '赵六', '语文': 85, '数学': 90, '英语': 90},
    {'姓名': '孙七', '语文': 72, '数学': 59, '英语': 66},
    {'姓名': '周八', '语文': 80, '数学': 76, '英语': 68},
    {'姓名': '吴九', '语文': 85, '数学': 85, '英语': 85},
    {'姓名': '郑十', '语文': 57, '数学': 68, '英语': 49}
])
print("语文成绩:")
print(f"语文最高分:{df1['语文'].max()},最低分:{df1['语文'].min()},平均分:{df1['语文'].mean()},总分:{df1['语文'].sum()}")
print(f"数学最高分:{df1['数学'].max()},最低分:{df1['数学'].min()},平均分:{df1['数学'].mean()},总分:{df1['数学'].sum()}")
print(f"英语最高分:{df1['英语'].max()},最低分:{df1['英语'].min()},平均分:{df1['英语'].mean()},总分:{df1['英语'].sum()}")

Datafream

python 复制代码
import pandas as pd

df1 = pd.DataFrame([
    {'姓名': '张三', '语文': 85, '数学': 92, '英语': 78},
    {'姓名': '李四', '语文': 78, '数学': 88, '英语': 95},
    {'姓名': '王五', '语文': 92, '数学': 96, '英语': 89},
    {'姓名': '赵六', '语文': 85, '数学': 90, '英语': 90},
    {'姓名': '孙七', '语文': 72, '数学': 59, '英语': 66},
    {'姓名': '周八', '语文': 80, '数学': 76, '英语': 68},
    {'姓名': '吴九', '语文': 85, '数学': 85, '英语': 85},
    {'姓名': '郑十', '语文': 57, '数学': 68, '英语': 49}
])          
print("语文成绩:")
print(f"语文最高分:{df1['语文'].max()},最低分:{df1['语文'].min()},平均分:{df1['语文'].mean()},总分:{df1['语文'].sum()}")
print(f"数学最高分:{df1['数学'].max()},最低分:{df1['数学'].min()},平均分:{df1['数学'].mean()},总分:{df1['数学'].sum()}")
print(f"英语最高分:{df1['英语'].max()},最低分:{df1['英语'].min()},平均分:{df1['英语'].mean()},总分:{df1['英语'].sum()}")
df2 = pd.DataFrame([
    ['王林', 85, 92, 78],
    ['李华', 78, 88, 95],
    ['张三', 92, 96, 89],
], columns = ['姓名', '语文', '数学', '英语'],index=['学生1', '学生2', '学生3'])
df2.shape

Series

DataFream以及Series总结

数据的读取与写入

基于Pandas中提供的API,可以很方便的各类数据文件(csv,Excel,数据库,网络数据)的读取和写入。

python 复制代码
import pandas as pd

#读取数据
df = pd.read_csv('素材/sales.csv',usecols=['订单号','产品类别','产品名称','销售数量','单价'])

#数据处理
df['销售金额'] = df['销售数量'] * df['单价']

#写入数据
df.to_csv('素材/sales_new.csv',index=False)

通过上述代码可以让左图变成右图

数据的查看、选择及过滤

df.head(n):查看前n行数据

df.tail(n):查看结尾n行数据

df.describe():数值列的统计描述

df.info():查看数据信息(列名、非空计数、数据类型)

df.shape():属性,查看数据维度(行数,列数)

df.columns:属性,查看列名

过滤

python 复制代码
df1 = pd.read_csv('素材/sales.csv',usecols=['订单号','产品类别','产品名称','销售数量','单价'])
# df1.info()         #获取数据信息(列名,非空计数,数据类型等)
# df1.head(5)        #查看前5行数据
# df1.tail(5)        #查看后5行数据
# df1.describe()     #数据描述
# df1.shape          #数据行数和列数
# df1.columns        #列名
df1.info(),df1.head(5),df1.tail(5),df1.describe(),df1.shape,df1.columns

运行结果:

python 复制代码
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   订单号     1000 non-null   int64 
 1   产品类别    1000 non-null   object
 2   产品名称    1000 non-null   object
 3   销售数量    1000 non-null   int64 
 4   单价      1000 non-null   int64 
dtypes: int64(3), object(2)
memory usage: 39.2+ KB
(None,
           订单号  产品类别  产品名称  销售数量   单价
 0  6805677496  家居用品    枕头    10  199
 1  5857234132    食品    海苔     5   29
 2  5888085059  电子产品  智能音箱     5  399
 3  6823473137    食品    面包     3   29
 4  6801664364    食品    薯片     2   19,
             订单号 产品类别 产品名称  销售数量   单价
 995  5887473055   图书   小说    10   49
 996  5808511756   食品   坚果     2   79
 997  5811169466   服装   围巾     4  129
 998  6876456690   食品   果汁     7   39
 999  6842608338   食品   蜂蜜     5   89,
                 订单号         销售数量           单价
 count  1.000000e+03  1000.000000  1000.000000
 mean   6.366022e+09     5.539000   388.152000
 std    5.015131e+08     2.908769   991.402736
 min    5.800194e+09     1.000000   -29.000000
 25%    5.851898e+09     3.000000    49.000000
 50%    6.802488e+09     5.000000    89.000000
 75%    6.854162e+09     8.000000   299.000000
 max    6.899878e+09    10.000000  5999.000000,
 (1000, 5),
 Index(['订单号', '产品类别', '产品名称', '销售数量', '单价'], dtype='object'))

常规选择行

python 复制代码
# 1. 选择列
# 1.1 单列
# df2['产品名称']
# df2.产品名称

# 1.2 多列
# df2[['产品名称', '单价']]
# df2[['产品类别', '产品名称', '单价']]

# 2. 选择行 - iloc , loc
# 2.1 iloc ----> 基于行号选择行(不包含结束位置), 语法: df.iloc[start:stop:step]
 df2.iloc[0:5:1]
 df2.iloc[0:5]

# 2.2 loc ----> 基于行索引选择行(包含结束位置), 语法: df.loc[start:stop:step]
df2.loc[6805677496:5888085066:2]

运行结果:

代码 作用说明
df2['产品名称'] / df2.产品名称 提取 DataFrame 中名为产品名称的单列数据,返回 Series
df2[['产品名称', '单价']] 同时提取产品名称单价两列,返回 DataFrame
df2.iloc[0:5] 行号提取前 5 行数据(索引从 0 开始,不含结束位置)
df2.loc[6805677496:5888085066:2] 行索引值提取数据,步长为 2,且包含结束位置

iloc vs loc 核心区别

  • iloc:基于整数位置 筛选,切片是左闭右开[start:stop)
  • loc:基于标签索引 筛选,切片是左闭右闭[start:stop]
相关推荐
冯RI375II694871 小时前
样品准备指南:LFGB认证检测送样要求详解
大数据
繁星星繁1 小时前
Git 入门之道:从版本流转到基础操作
大数据·git·elasticsearch
Komorebi_99991 小时前
Day3:监控、日志、限流、成本管控、版本灰度
大数据·运维·人工智能·大模型
ITyunwei09871 小时前
运维团队如何抓住AI?
大数据·运维·人工智能
段一凡-华北理工大学10 小时前
2026 高炉炼铁智能化技术全景与演进路径~系列文章11:演进路径与行业未来
大数据·网络·人工智能·算法·工业智能体·高炉炼铁智能化
狒狒热知识11 小时前
合规筑基专业赋能178软文网引领软文营销行业规范化发展
大数据
ZGi.ai13 小时前
企业AI资产管理体系:提示词、工作流、知识库应该怎么管
大数据·知识库·工作流编排·ai资产·提示词管理
爱分享的康康14 小时前
低成本自动驾驶数据采集设备理性分析:康谋入门套装适配性解析
大数据·人工智能
程序鉴定师15 小时前
上海小程序开发的坚实保障与行业优势解析
大数据·小程序