目录
1 数据可视化
安装matplotlib:数学绘图库,其中包含pylab和pyplot,都是用来画函数图的。
安装plotly:生成图表可调整大小,突出特色方面,可以画三维图表。
安装seaborn:可以和pandas一块专业用于统计可视化。
1.1 散点图scatter()
import matplotlib.pyplot as plt
# 导入pyplot模块(包含很多函数画图和表),命名为plt
import matplotlib as mpl
### (通用)函数subplots()可以在一张图中绘制多个图表,fig表示一张图,ax表示多个图表
plt.style.use('grayscale')
# 背景颜色、背景风格 seaborn-ticks\seaborn-white\ # print(plt.style.available)
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 字体
mpl.rcParams['axes.unicode_minus'] = False # 正常显示负号
fig, ax = plt.subplots() # fig, ax = plt.subplots() 等价于fig, ax = plt.subplots(11)
### 创建列表,存储数据
xs = range(1, 10)
ys = [x ** 2 for x in xs]
# 方法scatter()绘制散点图
ax.scatter(xs, ys, s=10, c='red')
ax.set_title("平方数", fontsize=24)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("值的平方", fontsize=14)
ax.tick_params(axis='both', labelsize=14) # 刻度数字大小
ax.axis([0, 10, 0, 100])
plt.show()
import matplotlib.pyplot as plt
import matplotlib as mpl
import os
# 通用
plt.style.use('grayscale')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
fig, ax = plt.subplots()
# 绘制散点图
xs = range(1, 10)
ys = [x ** 2 for x in xs]
ax.scatter(xs, ys, s=10, c='red')
# 通用
ax.set_title("平方数", fontsize=24)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("值的平方", fontsize=14)
ax.tick_params(axis='both', labelsize=14) # 刻度数字大小
ax.axis([0, 10, 0, 100])
# (通用)指定图片保存路径
figure_save_path = "pictures"
if not os.path.exists(figure_save_path):
os.makedirs(figure_save_path) # 如果不存在目录figure_save_path,则创建
plt.savefig(os.path.join(figure_save_path , 'exam.png')) # 第一个是指存储路径,第二个是图片名字
plt.show()
1.2 折线图plot()
### 导入pyplot模块(包含很多函数画图和表),命名为plt
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
### (通用)函数subplots()可以在一张图中绘制多个图表,fig表示一张图,ax表示多个图表
plt.style.use('seaborn-ticks')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
fig,ax=plt.subplots()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
ax4 = fig.add_subplot(2, 2, 4)
ax1.plot(np.random.randn(50).cumsum(), 'k--') # randn符合正态分布,rand随机样本
ax2.plot(np.random.randn(50).cumsum(), 'k--') # randn符合正态分布,rand随机样本
ax3.plot(np.random.randn(50).cumsum(), 'k--') # randn符合正态分布,rand随机样本
ax4.plot(np.random.randn(50).cumsum(), 'k--') # randn符合正态分布,rand随机样本
plt.show()
1.3 读取.csv文件
读取txt文件,根据“,”号来处理每行、每列数据。
# ex1.csv如下
a,b,c,d,message
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
import pandas as pd
df = pd.read_csv('ex1.csv')
print(df)
a b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 foo
1.4 时间序列
# datatime、time、calender模块是用来处理时间数据
from datetime import datetime # 从模块导入变量
now = datetime.now() # 变量名.方法名()
print(now)
2022-07-26 18:23:12.954225
2 numpy基础
2.1 介绍
pip install numpy,拥有一个强大的N维数组对象 ndarray
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
- NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
- SciPy 是一个开源的 Python 算法库和数学工具包。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
- Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。
2.2 创建对象array-ndarray
ndarray 对象是用于存放同类型元素的多维数组。
创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
import numpy as np
### 调用 NumPy 的 array 函数,来创建一个一维数组ndarray
a = np.array([1,2,3])
print (a)
### 调用 NumPy 的 array 函数,来创建一个二维数组ndarray
b = np.array([[1, 2], [3, 4]])
print (b)
### 调用 NumPy 的 array 函数,数据类型为复数 [1.+0.j 2.+0.j 3.+0.j]
c = np.array([1, 2, 3], dtype = complex) #dtype为数据类型
print (c)
2.3 数据类型对象dtype
类()
实例(abc,xyz)(array函数用来存实例的)(实际数据存起来)
属性(name,age,marks)(dtype函数是用来赋予属性的)
数据类型对象(numpy.dtype 类的实例)用来描述数据的类型、大小、字节顺序等信息
import numpy as np
### int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
dt1 = np.dtype('i4') # 数据类型
print(dt1)
dt2 = np.dtype([('age',np.int8)]) # 数据类型
dt2 = np.dtype([('age','i1')]) # 数据类型
a = np.array([(10,),(20,),(30,)], dtype = dt2)
print(a)
dt3 = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
b = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = dt3)
print(b)
2.4 数组维度axis
数组的维数称为秩(rank),每一个线性的数组称为轴(axis),也就是维度(dimensions)
axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;
axis=1,表示沿着第1轴进行操作,即对每一行进行操作。
import numpy as np
a = np.arange(24)
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
b = a.reshape(3,8)
print(b)
# [[ 0 1 2 3 4 5 6 7]
# [ 8 9 10 11 12 13 14 15]
# [16 17 18 19 20 21 22 23]]
c=a.reshape(2,2,6) #行,层,列
print(c)
2.5 创建数组
import numpy as np
x = np.empty( [3,2], dtype = int )
print (x) #随机值
z = np.zeros( (2,2), dtype = [('x', 'i4'), ('y', 'i4')] )
print(z)
2.6 从已有数组创建数组
numpy.asarray 类似 numpy.array (转换)
numpy.frombuffer 用于实现动态数组。
numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
2.7 切片与索引
# 切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
a = np.arange(10)
s = slice(2,7,2) # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])
2.8 绘图
# matplotlib 软件包的 pyplot 子模块的 plot() 函数绘制
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt
x = np.arange(1,11)
y = 2 * x + 5
plt.style.use('bmh') # 背景颜色、背景风格 classic
mpl.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong'] # 固定,字体
mpl.rcParams['axes.unicode_minus'] = False # 固定,正常显示负号
plt.title("菜鸟教程 - 测试", fontsize=24)
plt.xlabel("x 轴", fontsize=24)
plt.ylabel("y 轴", fontsize=24)
plt.plot(x,y ,'ob',color ='g')
plt.show()
3 pandas基础
pandas适用于表格、异质数据清洗和分析
numpy适用于同质数据
3.1 series
# series是一维数组型,含index
import pandas as pd
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj = pd.Series(sdata, index=states)
print(obj)
California NaN Ohio 35000.0 Oregon 16000.0 Texas 71000.0 dtype: float64
3.2 dataframe
# dataframe是二维的,但也可以用分层索引在dataframe展示更高维度的数据。
import pandas as pd
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)
print(frame)
state year pop 0 Ohio 2000 1.5 1 Ohio 2001 1.7 2 Ohio 2002 3.6 3 Nevada 2001 2.4 4 Nevada 2002 2.9 5 Nevada 2003 3.2
4 scipy
5 scikit-learn 1.0建模工具包
在 sklearn.datasets 中包含了大量的数据集,可为运算提供测试案例。例如鸢尾花数据集 load_iris()、癌症数据集 load_breast_cancer()、波士顿放假数据集 load_boston() 这些都是各大技术文章里常用的数据集。