【数学建模学习笔记【集训十天】之第八天】

数模学习目录

  • Pandas 学习(续)
    • Pandas的axis参数
        • 运行结果如下:
      • 删除某列
        • 运行结果如下:
      • 删除某行
        • 运行结果如下:
      • 聚合操作-index
        • 运行结果如下:
      • 聚合操作-columns
        • 运行结果如下:
      • 所有行和
        • 运行结果如下:
    • Pandas 索引index
        • 运行结果如下:
      • 查询数据-index
        • 运行结果如下:
      • 查询数据-columns
        • 运行结果如下:
      • 提升查询功能
        • 运行结果如下:
      • index 排序查询
        • 运行结果如下:
      • index 对齐数据
        • 运行结果如下:
        • 运行结果如下:
        • 运行结果如下:
  • SciPy 学习(续)
    • SciPy 插值
      • 一维插值:
      • 单变量插值:
      • 径向基函数插值:
  • Maplotlib 学习(续)
    • Matplotlib 饼图
        • 运行效果如下:
      • Matplotlib 轴标签和标题
        • 运行效果如下:
      • Matplotlib 网格线
        • 运行效果如下:
      • 显示网格线【y轴方向】
        • 运行效果如下:
      • 网格线并加样式
        • 运行效果如下:
    • 上一章链接:【数学建模学习笔记【集训十天】之第七天】
      • 每日一言:
        • 持续更新中...


Pandas 学习(续)

Pandas的axis参数

# -*- coding = utf-8 -*-
# @Time : 2022/7/5 09:22
# @Author : lxw_pro
# @File : Pandas 参数axis-10.py
# @Software : PyCharm

# Pandas的axis参数
'''
axis=0或index:
如果是单行操作,指的是某一行
如果是聚合操作,指的是跨行cross rows

axis=1或columns:
如果是单行操作,指的是某一列
如果是聚合操作,指的是跨列cross columns

【也就是哪个axis变,哪个axis就动,其余的保持不动】


'''

import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.arange(12).reshape(4, 3),
    columns=['A', 'B', 'C']
)

print(df)

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第1张图片


删除某列

# 1-单列drop, 就是删除某一列
print(df.drop("A", axis=1))     # 代表删除A列

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第2张图片


删除某行

# 2-单列drop,就是删除某一行
print(df.drop(1, axis=0))       # 代表删除1行

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第3张图片


聚合操作-index

# 3-按axis=0或index执行mean聚合操作
print(df.mean(axis=0))

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第4张图片


聚合操作-columns

# 4-按axis=1或columns执行mean聚合操作
print(df.mean(axis=1))

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第5张图片


所有行和

def get_sum_val(x):
    return x['A']+x['B']+x['C']


df["sum_val"] = df.apply(get_sum_val, axis=1)

print(df)

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第6张图片


Pandas 索引index

# Pandas 索引index
'''
index的用途总结:
更方便的数据查询
使用index可获得性能提升
自动的数据对齐功能
更多更强大的数据结构支持

'''

import pandas as pd

lxw = pd.read_csv('nba.csv')

print(lxw.head())

print(lxw.count())

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第7张图片
【数学建模学习笔记【集训十天】之第八天】_第8张图片


查询数据-index

# 使用index查询数据
lxw.set_index("Name", inplace=True, drop=False)
print(lxw.index)

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第9张图片


查询数据-columns

# 使用columns的condition查询方法
print(lxw.loc[lxw['Weight'] == 220.0].head())

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第10张图片


提升查询功能

# 2-使用index会提升查询功能
'''
如果index是唯一的,Pandas会使用哈希表优化,查询性能为O(1)
如果index不是唯一的,但是有序,Pandas会使用二分查找算法,查询性能为O(logN)
如果index完全是随机的,那么每次查询都要扫描全表,查询性能为O(N)

'''

# 完全随机的顺序查询

# 将数据随机打散
from sklearn.utils import shuffle

df_shuffle = shuffle(lxw)

print(df_shuffle.head())

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第11张图片


# 索引是否是递增的
print(df_shuffle.index.is_monotonic_increasing)	# 输出 False

index 排序查询

# 将index排序后的查询
df_sorted = df_shuffle.sort_index()

print(df_sorted.head())

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第12张图片


# 索引是否为递增
print(df_sorted.index.is_monotonic_increasing)	# 输出 False

print(df_sorted.index.is_unique)	# 输出 False

index 对齐数据

s1

# 使用index能自动对齐数据【包括Series、DataFrame】
s1 = pd.Series([1, 2, 3], index=list('abc'))
print(s1)

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第13张图片


s2

s2 = pd.Series([2, 3, 4], index=list('bcd'))
print(s2)

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第14张图片


s1和s1相加

print(s1+s2)

运行结果如下:

【数学建模学习笔记【集训十天】之第八天】_第15张图片


# 使用index更多更强大的数据结构支持
'''
很多强大的索引数据结构:
Categoricallndex    基于分类数据的index,提高性能
Multilndex          多维索引,用于groupby多维聚合后结果等
Datatimelndex       时间类型索引,强大的日期和时间的方法支持

'''


SciPy 学习(续)

SciPy 插值

一维插值:

# SciPy 插值
'''
在数学的数值分析领域中,插值是一种通过已知的、离散的数据点,在范围内推求新数据点的过程或方法

SciPy 提供了 scipy.interpolate 模块来处理插值

'''

# 一维插值
# 一维数据的插值运算可以通过方法 interp1d() 完成
from scipy.interpolate import interp1d
import numpy as np

xw = np.arange(10)
yw = 2*xw+1

lxw = interp1d(xw, yw)

newarr = lxw(np.arange(2.0, 2.9, 0.2))
print(newarr)   # 输出 [5.  5.4 5.8 6.2 6.6]

单变量插值:

# 单变量插值
# 单变量插值使用 UnivariateSpline() 函数,该函数接受 xs 和 ys 并生成一个可调用函数,该函数可以用新的 xs 调用
from scipy.interpolate import UnivariateSpline
import numpy as np

xd = np.arange(10)
yd = xd**2+np.cos(xd)-1

lxw2 = UnivariateSpline(xd, yd)
newarr2 = lxw2(np.arange(2.0, 2.9, 0.2))
print(newarr2)  # 输出 [2.41685864 3.21741879 4.11840978 5.11812233 6.21484715]


径向基函数插值:

# 径向基函数插值
# 径向基函数是对应于固定参考点定义的函数
from scipy.interpolate import Rbf

xj = np.arange(10)
yj = xj**2+np.cos(xj)-1

lxw3 = Rbf(xj, yj)
newarr3 = lxw3(np.arange(2.0, 2.9, 0.2))

print(newarr3)      # 输出 [2.58385316 3.22849074 3.99463461 4.88135567 5.88656925]




Maplotlib 学习(续)

Matplotlib 饼图

# Matplotlib 饼图
# 饼图是圆形图,将其分成多个切片以说明数值比例
from matplotlib import pyplot as plt

bc = ['Python', 'Java', 'C', 'MySQL']
cj = [91, 78, 82, 87]

colors = ['blue', 'gold', 'yellowgreen', 'red']

plt.pie(cj, labels=bc, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90)
plt.axis('equal')

plt.show()


运行效果如下:

【数学建模学习笔记【集训十天】之第八天】_第16张图片


Matplotlib 轴标签和标题

# Matplotlib 轴标签和标题
# 使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签
# 可以使用 title() 方法来设置标题

import matplotlib.pyplot as plt
import numpy as np

sz1 = np.array([2, 5, 8, 9])
sz2 = np.array([6, 5, 2, 1])
plt.plot(sz1, sz2)

plt.title("lxw's sz")

plt.xlabel("sz1")
plt.ylabel("sz2")

plt.show()


运行效果如下:

【数学建模学习笔记【集训十天】之第八天】_第17张图片


Matplotlib 网格线

# Matplotlib 网格线
# 可使用 pyplot 中的 grid() 方法来设置图表中的网格线。
'''
grid() 方法语法格式如下:

matplotlib.pyplot.grid(b=None, which='major', axis='both', )
参数说明:

b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。
**kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。

'''

# 添加一个简单的网格线
import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 4, 7, 9])
y = np.array([2, 9, 3, 8])

plt.title("lxw's grid")
plt.xlabel('x')
plt.ylabel('y')

plt.plot(x, y)
plt.grid()

plt.show()

运行效果如下:

【数学建模学习笔记【集训十天】之第八天】_第18张图片


显示网格线【y轴方向】

# 设置在y轴方向显示网格线
plt.plot(x, y)
plt.grid(axis='x')

plt.show()

运行效果如下:

【数学建模学习笔记【集训十天】之第八天】_第19张图片


网格线并加样式

# 添加一个简单的网格线,并设置网格线的样式
import matplotlib.pyplot as plt
import numpy as np

a = np.array([2, 9, 4, 8])
b = np.array([3, 1, 9, 6])

plt.title("lxw's grid text")
plt.xlabel('a')
plt.ylabel('b')

plt.plot(a, b)
plt.grid(color='b', linestyle='--', linewidth=0.6)

plt.show()


运行效果如下:

【数学建模学习笔记【集训十天】之第八天】_第20张图片


上一章链接:【数学建模学习笔记【集训十天】之第七天】

每日一言:

所有的真理都要经过三个阶段:首先,受到嘲笑;然后,遭到激烈反对;最后,被理所当然地接受。

持续更新中…

【数学建模学习笔记【集训十天】之第八天】_第21张图片

你可能感兴趣的:(数模学习,Python数据处理,Pandas/SciPy,Matplotlib,程序人生6)