【Python讲义】WEEK 11

写在前面:

本系列文章收录:CAU计算机类公选课《Python语言程序设计》的课堂讲义
课程时间为:2022~2023学年秋季
供各位小白参考~

数据分析:

Numpy :主要用于数组计算,ndarray

Pandas:基于numpy,用于数据挖掘和分析。

Matplotlib:数据可视化

Pandas数据处理分析

两个主要的数据结构:Series和DataFrame

(1)Series(一维数组)

Series由索引(index)和值(value)

【示例】创建Series。

import pandas as pd

ser_obj = pd.Series(data=[185,175,190,167])

print(ser_obj)

运行结果:

0    185

1    175

2    190

3    167

(2)DataFrame

二维表格结构,包含index(行索引)、columns(列索引)和Value(值)

结合Pandas库实现成绩数据处理与分析:

# 导入Pandas库

import pandas as pd

# 导入数据

df = pd.read_csv('./data/score.csv')

print(df)

 

# 查看数

(1)查看前五条

print(df.head())

(2)查看最后的五条

print(df.tail())

(3)随机抽取5条

print(df.sample(5))

# 查看数据集属性

(1)查看数据的行数和列数。

print(df.shape)

(2)查看各列的数据类型。

print(df.dtypes)

运行结果:

name     object

team     object

No1       int64

No2     float64

No3       int64

No4     float64

dtype: object

(3)查看数据行和列名。

print(df.axes)



[RangeIndex(start=0, stop=102, step=1), Index(['name', 'team', 'No1', 'No2', 'No3', 'No4'], dtype='object')]

(4)显示列名。

print(df.columns)



Index(['name', 'team', 'No1', 'No2', 'No3', 'No4'], dtype='object')

(5)查看索引、列的数据类型和内存信息。

print(df.info())

运行结果:

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 102 entries, 0 to 101

Data columns (total 6 columns):

 #   Column  Non-Null Count  Dtype 

---  ------  --------------  ----- 

 0   name    102 non-null    object

 1   team    102 non-null    object

 2   No1     102 non-null    int64 

 3   No2     100 non-null    float64

 4   No3     102 non-null    int64 

 5   No4     99 non-null     float64

dtypes: float64(2), int64(2), object(2)

memory usage: 4.9+ KB

None

# 建立索引

df.set_index('name',inplace=True)

print(df)

数据预处理

# 查看是否有重复

print(df[df.duplicated()])

运行结果:

   name team  No1   No2  No3   No4

63  赵雨霏    A   70  73.0   75  87.0

82  沈洁宇    B  100  80.0   68  80.0

# 删除重复的行

new_df = df.drop_duplicates(ignore_index=True)

print(new_df)

运行结果:

   name team  No1   No2  No3   No4

0    李博    A   99  68.0   59  77.0

1   李明发    A   41  50.0   62  92.0

2   寇忠云    B   96  94.0   99   NaN

3    李欣    C   48  51.0   94  99.0

4    石璐    D   64  79.0   54  65.0

..  ...  ...  ...   ...  ...   ...

95   李慧    A   73  73.0   85  53.0

96   陈晨    C   40  65.0   71  54.0

97  杨小传    A  100  70.0   55  90.0

98   赵敏    C   97  93.0   65  88.0

99  黄宏军    E   51  88.0   55  68.0



[100 rows x 6 columns]

# 缺失值的处理

new_df = df.drop_duplicates(ignore_index=True)

print(new_df.info())

运行结果:

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 100 entries, 0 to 99

Data columns (total 6 columns):

 #   Column  Non-Null Count  Dtype 

---  ------  --------------  ----- 

 0   name    100 non-null    object

 1   team    100 non-null    object

 2   No1     100 non-null    int64 

 3   No2     98 non-null     float64

 4   No3     100 non-null    int64 

 5   No4     97 non-null     float64

dtypes: float64(2), int64(2), object(2)

memory usage: 4.8+ KB

df.fillna(method='ffill',inplace=True)

print(df.info())

运行结果:

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 102 entries, 0 to 101

Data columns (total 6 columns):

 #   Column  Non-Null Count  Dtype 

---  ------  --------------  ----- 

 0   name    102 non-null    object

 1   team    102 non-null    object

 2   No1     102 non-null    int64 

 3   No2     102 non-null    float64

 4   No3     102 non-null    int64 

 5   No4     102 non-null    float64

dtypes: float64(2), int64(2), object(2)

memory usage: 4.9+ KB

None

数据选取

(1)选择列

1)选择一列

print(new_df['No1'])

等价

print(new_df.No1)

2)选择多列

print(new_df[['team','No1']])

(2)选择行

1)通过索引选取行

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df[df.index == '李欣'])

2)通过自然索引选取行,类似于切片。

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df[90:100:2])

指定行和列

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df.loc['张鑫','No1':'No4'])

运行结果: 

No1      36

No2    83.0

No3      82

No4    85.0

Name: 张鑫, dtype: object

条件选择

(1)单一条件

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

# 查看No1列中大于90

print(df[df.No1 > 90] )

# 查看team为C组

print(df[df.team == 'C'])

(2)组合条件选择数据

# C组,No2考试成绩大于90分

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df[ (df.team == 'C')&(df.No2 >= 90)])

简单的数据分析

# 查看每组的个数


import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df.team.value_counts())

运行结果:

B    23

C    22

E    20

D    19

A    18

(1)排序

# 按照No1排序,默认为升序

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df.sort_values(by='No1',ascending=True))

# 先按照组升序,No1 降序

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df.sort_values(['team','No1'],ascending=[True,False]))

分组聚合

分组查看:groupby()

# 查看 每组四次的平均成绩

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df.groupby('team').mean())

数据转换

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df.groupby('team').mean().T)

运行结果:

team           A          B          C          D          E

No1    65.388889  69.739130  61.590909  64.736842  64.400000

No2    76.166667  77.434783  66.863636  77.157895  72.277778

No3   101.888889  76.173913  64.409091  77.210526  75.100000

No4    78.333333  72.350000  74.136364  73.052632  82.100000

# 增加数据列

import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

df['year'] = 2022

df['total'] = df.No1 + df.No2 + df.No3 + df.No4

df['avg'] = df['total'] / 4

print(df )
import pandas as pd

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

print(df.describe())

运行结果:

              No1         No2         No3         No4

count  102.000000  100.000000  102.000000   99.000000

mean    65.235294   73.900000   78.156863   75.939394

std     21.747961   14.049336   59.138827   15.295603

min     30.000000   50.000000   50.000000   50.000000

25%     47.000000   63.750000   59.500000   61.500000

50%     63.500000   75.000000   71.500000   78.000000

75%     84.000000   85.000000   84.750000   89.500000

max    100.000000   99.000000  650.000000  100.000000

数据可视化

Pandas可以利用plot调用Maplotlib库,快速绘制出数据可视化图像。

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

# MAC

# plt.rcParams['font.sans-serif'] = 'Arial Unicode MS'

# windows

plt.rcParams['font.sans-serif'] = 'SimHei'

df.No1.plot()

plt.show()

 

# 李欣 四次成绩的变化

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

# MAC

# plt.rcParams['font.sans-serif'] = 'Arial Unicode MS'

# windows

plt.rcParams['font.sans-serif'] = 'SimHei'

df.loc['李欣','No1':'No4'].plot()

plt.show()

 

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

# MAC

# plt.rcParams['font.sans-serif'] = 'Arial Unicode MS'

# windows

plt.rcParams['font.sans-serif'] = 'SimHei'

# df.loc['李欣','No1':'No4'].plot()

# 各组四次总成绩趋势

df.groupby('team').mean().T.plot()

plt.show()

 

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

# MAC

# plt.rcParams['font.sans-serif'] = 'Arial Unicode MS'

# windows

plt.rcParams['font.sans-serif'] = 'SimHei'

# df.loc['李欣','No1':'No4'].plot()

# 各组四次总成绩趋势

df.groupby('team').count().No1.plot.pie()

plt.show()

 

将处理后的数据保存入“score.xlsx”

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('./data/score.csv' )

df.set_index('name',inplace=True)

new_df = df.drop_duplicates(ignore_index=True)

new_df.to_excel('./data/score.xlsx')

课程回顾:

第1章 Python概述

Python特点

应用领域

Pycharm IDE安装和使用

Python运行方式

Python解释器类型

第2章 Python语法特点

标识符与变量

变量的定义和赋值

基本数据类型:数值型  布尔型 NoneType

数据类型转换

字符串类型

基本输入输出:input()   print()

常见的运算符和表达式:算术、赋值、逻辑、关系、条件三目

第3章 Python的基本流程控制

选择结构

if

if…else

if…elif…else

循环结构

while

for  range()

转移和中断

continue

break

pass

while…else     for…else

第4章 Python的4种典型序列结构

列表 创建 访问与遍历  常见操作  统计和排序

元组 创建  常见操作  与列表的区别

字典 创建  访问与遍历 常见操作

集合  创建 常见操作

容器的公共操作

第5章 Python函数

函数定义,调用和返回值

函数参数(位置、关键字、默认值、不定长)与值传递

变量的作用域:局部变量  全局变量(global)

递归函数

匿名函数

第6章 Python文件操作

文件打开与关闭

文件与文件判断

文件的基本操作

第7章 面向对象程序设计

类和对象 定义 使用   构造函数 访问机制

类的继承

第8章 模块和包

模块的定义  导入

包的创建

第三方模块的下载和安装

标准模块的使用

Pandas数据分析和可视化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MorleyOlsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值