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]
相关推荐
智慧景区与市集主理人2 小时前
巨有科技智慧康养|避开康养文旅内卷,做能变现的疗愈数字化
大数据·人工智能·科技
峥嵘life2 小时前
Repo 常用操作手册
大数据·elasticsearch·搜索引擎
ZeekerLin3 小时前
AI 原生开发落地路线图:从个人提效到团队体系化
大数据·人工智能
ljs6482739513 小时前
Hadoop集群部署常见问题
大数据·hadoop·分布式
科技圈快迅3 小时前
解决续费痛点,轻量化AI订阅替代方案深度解读
大数据·人工智能
山峰哥3 小时前
‌Explain实战:打开数据库执行计划的黑盒‌
大数据·服务器·数据库·sql·深度优先·宽度优先
A hao4 小时前
HDR LED显示屏工作原理:高动态范围显示技术解析
大数据·图像处理·人工智能
回眸&啤酒鸭4 小时前
【回眸】搞钱灵感——AI 数字人口播博主自动化运营
大数据·人工智能·自动化
AC赳赳老秦4 小时前
Excel 动态仪表盘制作:用 OpenClaw 自动处理数据、生成交互式图表并实时更新仪表盘
大数据·服务器·后端·测试用例·excel·deepseek·openclaw
TTBIGDATA13 小时前
【Ambari Plus】14.Hue 安装
大数据·hadoop·ambari·hdp·hue·cdh·bigtop