文章目录

  • python数据挖掘
    • 一、数据挖掘基础环境安装与使用
      • 1.1 库的安装
      • 1.2 Jupyter Notebook使用
        • 1.2.1 Jupyter Notebook介绍
        • 1.2.2 为什么使用Jupyter Notebook?
        • 1.2.3 Jupyter Notebook的使用-helloworld
    • 二、Matplotlib
      • 2.1 Matplotlib
        • 2.1.1 什么是Matplotlib - 画二维图表的python库
        • 2.1.2 为什么要学习Matplotlib - 画图
        • 2.1.3 实现一个简单的Matplotlib画图
        • 2.1.4 拓展知识点:Matplotlib三层结构
      • 2.2 折线图(plot)与基础绘图功能
        • 2.2.1 折线图绘制与保存图片
        • 2.2.2完善原始折线图(辅助显示层)
        • 2.2.3多个坐标系显示-plt.subplots(面向对象的画图方法)
        • 2.2.4 折线图绘制函数图像
      • 2.3 散点图(scatter)
      • 2.4 柱状图(bar)
      • 2.5 直方图(histogram)
        • 2.5.1 直方图介绍
        • 2.5.2 直方图与柱状图的对比
        • 2.5.3直方图绘制
      • 2.6饼图
    • 三:Numpy
      • 介绍
      • ndarray
      • numpy与list对比
      • 属性方法
      • 3.1基本操作
        • 3.1.1ndarray形状和类型
        • 3.1.2生成数组
        • 3.1.3索引切片
        • 3.1.4形状改变
        • 3.1.5类型修改
        • 3.1.6数组去重
      • 3.2ndarray运算
        • 3.2.1逻辑运算
        • 3.2.2统计运算
        • 3.2.3数组运算
        • 3.2.4数组合并分割
    • 四:Pandas
      • 4.0基本介绍
      • 4.1DataFrame
        • 4.1.0DataFrame结构
        • 4.1.1构造dataframe 利用**DataFrame**函数
        • 4.1.2常用操作(设置索引)
        • 4.1.3 MultiIndex与Panel
        • 4.1.4 Series
      • 4.2基本数据操作(很重要的一点是布尔值索引)
        • 4.2.1索引操作(bool索引见4.2.4)
        • 4.2.2赋值操作
        • 4.2.3排序
        • 4.2.4数学运算 布尔值索引
        • 4.2.5统计运算
      • 4.3画图
      • pandas.DataFrame.plot
      • 4.4文件读取写入
        • 4.4.1 CSV文件
        • 4.4.2HDF5文件
        • 4.4.3 JSON文件
      • 4.5高级处理
        • **4.5.1缺失值(标记值)处理**
        • 4.5.2 离散化
        • 4.5.3合并
        • 4.5.4交叉表与透视表
        • 4.5.6分组与聚合
    • 五:案例

python数据挖掘

主要参考资料:
API reference — pandas 1.4.1 documentation (pydata.org)
哔哩哔哩网课
走在小路上 笔记
下载markdown笔记(无需积分)

一、数据挖掘基础环境安装与使用

1.1 库的安装

  1. pip install

  2. 集合到requirements.txt文件中集成安装

    matplotlib==2.2.2
    numpy==1.14.2
    pandas==0.20.3
    TA-Lib==0.4.16 技术指标库
    tables==3.4.2 hdf5
    jupyter==1.0.0 数据分析与展示的平台
    

    pip install -r requirments.txt

1.2 Jupyter Notebook使用

1.2.1 Jupyter Notebook介绍

  1. web版的ipython
  2. 名字缘由ju - Julia
    py - Python
    ter - R
    Jupiter 木星 宙斯
  3. 编程、写文档、记笔记、展示
  4. 文件是.ipynb

1.2.2 为什么使用Jupyter Notebook?

  1. 画图方面的优势
  2. 数据展示方面的优势

1.2.3 Jupyter Notebook的使用-helloworld

  1. 界面启动、创建文件

    在终端输入jupyter notebook / ipython notebook

    注意可以是pycharm中的终端,也可以直接是windows终端,不过要将路径调整到你的项目路径

    如图
    然后点击网址即可
    ​ 快速上手的方法:
    ​ 快捷键
    ​ 运行代码 shift + enter

  2. cell操作
    cell:一对In Out会话被视作一个代码单元,称为cell

    ​ 编辑模式:enter 鼠标直接点
    ​ 命令模式:esc 鼠标在本单元格之外点一下

快捷键操作
执行代码,并跳转到下一单元:shift + Enter

​ 执行本单元代码,留在本单元:ctrl+Enter

命令模式:

​ Y:cell切换到code模式

​ M:cell切换到markdown模式

​ A:在当前cell的上面添加cell
​ B:在当前cell的下面添加cell
​ 双击D:删除当前cell
编辑模式:
​ 多光标操作:Ctrl键点击鼠标(Mac:CMD+点击鼠标)
​ 回退:Ctrl+Z(Mac:CMD+Z)
​ 补全代码:变量、方法后跟Tab键
​ 为一行或多行代码添加/取消注释:Ctrl+/(Mac:CMD+/)

  1. markdown演示
    # 一级标题

    ​ - 缩进

二、Matplotlib

2.1 Matplotlib

2.1.1 什么是Matplotlib - 画二维图表的python库

​ mat - matrix 矩阵, 二维数据 - 二维图表
​ plot - 画图
​ lib - library 库
​ matlab 矩阵实验室
​ mat - matrix
​ lab 实验室

2.1.2 为什么要学习Matplotlib - 画图

​ 数据可视化 - 帮助理解数据,方便选择更合适的分析方法
​ js库 - D3 和echarts能实现一些比较酷炫的3D效果
​ 奥卡姆剃刀原理 - 如无必要勿增实体

2.1.3 实现一个简单的Matplotlib画图

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3],[4,5,6])
plt.show()

2.1.4 拓展知识点:Matplotlib三层结构


容器层 : 画板层Canvas 画布层Figure 绘图区/坐标系 x、y轴张成的区域
容器层主要由Canvas、Figure、Axes组成。
Canvas是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。
Figure是Canvas.上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色。
Axs是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。
Figure:指整个图形可以通过plt.figure0设置画布的大小和分辨率等)
Axes(坐标系):数据的绘图区域
Axs(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签
特点为
一个figure(画布)可以包含多个axes(坐标系/绘图区),但是一个axes只能属于一个figure.
一个axes(坐标系/绘图区)可以包含多个axis(坐标轴),包含两个即为2d坐标系,3个即为3d坐标系

辅助显示层

辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。
该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。

图像层

图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像

总结

Canvas(画板)位于最底层,用户一般接触不到
Figure(画布)建立在Canvas之上
Axes(绘图区)建立在Figure之上
坐标轴(axis)、图例(legend)等辅助显示层以及图像层都是建立在Axes之上

2.2 折线图(plot)与基础绘图功能

2.2.1 折线图绘制与保存图片

基本步骤

  1. 创建画布
  2. 绘制图像
  3. 显示图像
#1创建画布
plt.figure(figsize=(20,8),dpi=80)### figsize : 画布大小### dpi : dot per inch 图像的清晰度,每英寸显示点数
#2绘制图像
plt.plot([1,2,3,4,5],[6,7,8,9,10])#保存图像(注意保存图片代码应位于plt.show()之前)
plt.savefig("test.png")#3显示图像
plt.show()
#plt.show()会释放figsure资源

2.2.2完善原始折线图(辅助显示层)

# 需求:再添加一个城市的温度变化
# 收集到北京当天温度变化情况,温度在1度到3度。 # 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 3) for i in x]# 中文显示问题
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)# 3、绘制图像
plt.plot(x, y_shanghai, color="r", linestyle="-.", label="上海")
plt.plot(x, y_beijing, color="b", label="北京")# 显示图例,这里显示图例的前提是plt.plot时要添加标签lsbel=“”
plt.legend()#legend有自己的参数可以控制图例位置# 修改x、y刻度
# 准备x的刻度说明  ticks表示刻度
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
#步长为5,即不让刻度显示过于密集第一处的x[::5]也要写,应该是用来给x_label定位的
plt.yticks(range(0, 40, 5))# 添加网格显示,其中的alpha是网格的透明程度
plt.grid(linestyle="--", alpha=0.5)# 添加描述信息
plt.xlabel("时间变化")
plt.ylabel("温度变化")
plt.title("上海、北京11点到12点每分钟的温度变化状况")# 4、显示图
plt.show()

2.2.3多个坐标系显示-plt.subplots(面向对象的画图方法)

注意主要区别就是返回一个figsure和axes,后期全部利用axes[索引]来绘制图像,有一定的函数名字差别 axes[i].方法名()

#主要区别:
#figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)# 需求:再添加一个城市的温度变化
# 收集到北京当天温度变化情况,温度在1度到3度。 # 1、准备数据 x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 3) for i in x]# 2、创建画布
# plt.figure(figsize=(20, 8), dpi=80)
figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)# 3、绘制图像
axes[0].plot(x, y_shanghai, color="r", linestyle="-.", label="上海")
axes[1].plot(x, y_beijing, color="b", label="北京")# 显示图例
axes[0].legend()
axes[1].legend()# 修改x、y刻度
# 准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_label)
axes[0].set_yticks(range(0, 40, 5))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label)
axes[1].set_yticks(range(0, 40, 5))# 添加网格显示
axes[0].grid(linestyle="--", alpha=0.5)
axes[1].grid(linestyle="--", alpha=0.5)# 添加描述信息
axes[0].set_xlabel("时间变化")
axes[0].set_ylabel("温度变化")
axes[0].set_title("上海11点到12点每分钟的温度变化状况")
axes[1].set_xlabel("时间变化")
axes[1].set_ylabel("温度变化")
axes[1].set_title("北京11点到12点每分钟的温度变化状况")# 4、显示图
plt.show()

效果图:

2.2.4 折线图绘制函数图像

import numpy as np
# 1、准备x,y数据
##表示区间[-1,1]左闭右闭并等间隔生成1000个数字
x = np.linspace(-1, 1, 1000)
y = 2 * x * x# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)# 3、绘制图像
plt.plot(x, y)# 添加网格显示
plt.grid(linestyle="--", alpha=0.5)# 4、显示图像
plt.show()

2.3 散点图(scatter)

丰富图片的其他函数基本一致,主要区别在于plt.scatter()函数用于绘图

# 需求:探究房屋面积和房屋价格的关系# 1、准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,21.61, 483.21, 245.25, 399.25, 343.35]y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,30.74, 400.02, 205.35, 330.64, 283.45]
# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)# 3、绘制图像
plt.scatter(x, y)# 4、显示图像
plt.show()

2.4 柱状图(bar)

##绘制票房分布直方图# 1、准备数据
movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)# 3、绘制柱状图
x_ticks = range(len(movie_names))
plt.bar(x_ticks, tickets,width=[0.2 for i in range(x_ticks)],color=['b','r','g','y','c','m','y','k','c','g','b'])
#主要参数x列表,y列表,width列表,color列表# 修改x刻度
plt.xticks(x_ticks, movie_names)# 添加标题
plt.title("电影票房收入对比")# 添加网格显示
plt.grid(linestyle="--", alpha=0.5)# 4、显示图像
plt.show()


如果绘制下图的柱状图怎么设置呢,主要在于给x_labels的刻度位置定位,将刻度改变即可

# 1、准备数据
movie_name = ['雷神3:诸神黄昏','正义联盟','寻梦环游记']first_day = [10587.6,10062.5,1275.7]
first_weekend=[36224.9,34479.6,11830]# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)# 3、绘制柱状图
x_ticks=[i for i in range(3)]
plt.bar(x_ticks, first_day, width=0.2, label="首日票房")
plt.bar([i+0.2 for i in x_ticks], first_weekend, width=0.2, label="首周票房")
##########为何是i+0.2呢,因为前面设置的柱状图宽度width=0.2,为了紧密相连,同时没有重合,因此设置0.2# 显示图例
plt.legend()# 修改刻度,即显示坐标轴上的数字或字符,本例即显示电影名字
plt.xticks([i+0.1 for i in x_ticks], movie_name)
###########柱状图宽度为0.2,为了字符名字在中间,因此相对于前面是加了0.1# 4、显示图像
plt.show()

2.5 直方图(histogram)

2.5.1 直方图介绍

直方图,形状类似柱状图却有着与柱状图完全不同的含义。
直方图牵涉统计学的概念,首先要对数据进行分组,然后统计每个分组内数据元的数量。
在坐标系中,横轴标出每个组的端点,纵轴表示频数,
每个矩形的高代表对应的频数,称这样的统计图为频数分布直方图。

组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数
组距:每一组两个端点的差

2.5.2 直方图与柱状图的对比

  • 柱状图是以矩形的长度表示每一组的频数或数量,其宽度(表示类别则是固定的,利于较小的数据集分析。

  • 直方图描述的是一组数据的频次分布,是以矩形的长度表示每一组的频数或数量,宽度则表示各组的组距,因此其高度与宽度均有意义,利于展示大量数据集的统计结果。例如把年龄分成“0-5,5-10…80-85”17个组,统计一下中国人口年龄的分布情况。直方图有助于我们知道数据的分布情况,诸如众数、中位数的大致位置、数据是否存在缺口或者异常值。

    1. 直方图展示数据的分布,柱状图比较数据的大小。
    2. 直方图X轴为定量数据,柱状图X轴为分类数据。
    3. 直方图柱子无间隔,柱状图柱子有间隔
    4. 直方图柱子宽度可不一,柱状图柱子宽度须一致

2.5.3直方图绘制

可以尝试多种组距以获得一个较好的效果

# 需求:电影时长分布状况
# 1、准备数据
time = [131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)# 3、绘制直方图
distance = 2#组距
group_num = int((max(time) - min(time)) / distance)#组数=极差/组距plt.hist(time, bins=group_num, density=True)
##第一个参数是数据,第二个参数是组数,第三个参数是density默认为False
##False显示的是频数,True显示的是频率# 修改x轴刻度
plt.xticks(range(min(time), max(time) + 2, distance))# 添加网格
plt.grid(linestyle="--", alpha=0.5)# 4、显示图像
plt.show()

2.6饼图

用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

特点:分类数据的占比情况(占比)

# 1、准备数据
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)# 3、绘制饼图
plt.pie(place_count, labels=movie_name, colors=['b','r','g','y','c','m','y','k','c','g','y'], autopct="%1.2f%%")# 显示图例
plt.legend()plt.axis('equal')
##表示横纵轴比相同,即显示为圆形# 4、显示图像
plt.show()

三:Numpy

介绍

  • Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
  • Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
  • Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

ndarray

Numpy提供了一个N dimension array,即n维数组

numpy与list对比

  1. 存储风格:

    ndarray 内部存储类型相同,存储空间连续,但通用性不强

    list 内部存储类型可以不同,存储空间未必连续,通用性较强

  2. 并行化计算:ndarray支持向量化运算

  3. 底层语言:
    Numpy底层采用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。

属性方法

属性名字 属性解释
ndarray.shape 数组维度的元组
ndarray.ndim 数组维数
ndarray.size 数组中的元素数量
ndarray.itemsize 一个数组元素的长度(字节)
ndarray.dtype 数组元素的类型
使用方法 数组名.函数名

3.1基本操作

3.1.1ndarray形状和类型

形状

import numpy as np
a = np.array([[1,2,3],[4,5,6]])   #(2,3)
b = np.array([1,2,3,4])               #(4,)
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])#(2,2,3)

类型

创建数组时指定即可

# 创建数组的时候指定类型
np.array([1.1, 2.2, 3.3], dtype="float32")

3.1.2生成数组

  • 生成0 1 数组

    # 1 生成0和1的数组
    a=np.zeros(shape=(3, 4), dtype="float32")##其中shape的参数为列表/元组均可,用于表示生成的数组维度
    
  • 从现有数组生成

    a1=np.array(a)  #深拷贝
    a2=np.copy(a)   #深拷贝
    a3=np.asarray(a)#浅拷贝
    a4=a           #浅拷贝
    
  • 生成固定范围的数组

    np.linspace(0, 10, 5) # 生成[0,10]之间等距离的5个数,左右均为闭区间
    np.arange(0, 11, 5) # [0,11),5为步长生成数组 ,左闭右开
    
  • 生成随机数组

    # 生成均匀分布的一组数[low,high)  左闭右开,size是数量
    data1 = np.random.uniform(low=-1, high=1, size=1000000)
    ########注意这两处的size都可以规定数组形状  size=(8,100)
    # 生成正态分布的一组数,loc:均值;scale:标准差,size数量
    data2 = np.random.normal(loc=1.75, scale=0.1, size=1000000)
    

3.1.3索引切片

stock_change = np.random.normal(loc=0, scale=1, size=(8, 10))
# 获取第一个股票的前3个交易日的涨跌幅数据
print(stock_change[0, :3])
a[1, 0, 2] = 1000
a[1][0][2] = 1000

3.1.4形状改变

stock_change.reshape((10, 8)) # 返回新的ndarray, 原始数据没有改变
stock_change.resize((10, 8)) # 没有返回值, 对原始的ndarray进行了修改
stock_change.T # 转置 行变成列,列变成行  返回一个ndarray,原数据未改变##reshape()是一个函数,因此第一个括号是函数个括号,而第二个括号是因为传入了一个元##组,其实用列表也可

3.1.5类型修改

stock_change.astype("int32")
stock_change.tostring() # ndarray序列化到本地??????

https://blog.csdn.net/u010356210/article/details/106131209

3.1.6数组去重

temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
np.unique(temp)
set(temp.flatten())##set的操作对象需要时一维的,.flatten()可以压缩为一维的

3.2ndarray运算

3.2.1逻辑运算

  • 运算符
stock_change = np.random.uniform(low=-1, high=1, size=(5,10))
# 逻辑判断, 如果涨跌幅大于0.5就标记为True 否则为False
stock_change > 0.5
#返回一个True和False的等大小矩阵stock_change[stock_change > 0.5] = 1.1
#将>0.5的全部改为1
  • 通用判断函数

    #以下两者均只返回一个布尔值# 判断stock_change[0:2, 0:5]是否全是上涨的
    np.all(stock_change[0:2, 0:5] > 0)
    # 判断前5只股票这段期间是否有上涨的
    np.any(stock_change[:5, :] > 0)
    
  • 三元运算符

    # np.where(布尔表达式,True的位置的值,False的位置的值),类似于三元运算符,不# 过需要利用函数
    np.where(temp > 0, 1, 0)
    ###涉及符合逻辑需要额外的函数logical_and/or
    # 大于0.5且小于1
    np.where(np.logical_and(temp > 0.5, temp < 1), 1, 0)
    # 大于0.5或小于-0.5
    np.where(np.logical_or(temp > 0.5, temp < -0.5), 11, 3)
    

3.2.2统计运算

  • 主要函数:min max mean median(中位数) var(方差) std(标准差)
  • 使用方法:np.函数名(数组名) 或 数组名.方法名
  • 同时应当注意 axis的使用。 axis=0表示列 axis=1表示行 axis=-1 表示最后一维度
###返回值
stock_change.max()  #将返回最大值
np.max(stock_change,axis=1)#将返回一个向量,即所有行的最大值###返回索引
np.argmax(tem,axis=0)
np.argmin(tem,axis=0)

3.2.3数组运算

  • 数组与数字的运算

    正常的运算即可 加减乘除等

  • 数组与数组的运算

    广播机制

    执行broadcast的前提在于,两个nadarray执行的是element-wise的运算,Broadcast机制的功能是为了方便不同形状的ndarray(numpy库的核心数据结构)进行数学运算。

    当操作两个数组时,numpy会逐个比较它们的shape(构成的元组tuple),只有在下述情况下,两个数组才能够进行数组与数组的运算。

    • 维度相等
    • shape(其中相对应的一个地方为1)

​ 具体解释解释就是看这个图。

​ 比如(不一定是乘法)数组A*B,将两者的维度写出,如下,将维度从尾部开始对齐,则满足运算的要求是:

  1. ​ 对应的维度相同
  2. ​ 若维度不同,则其中一个维度应当为1

矩阵运算

  • 可以通过np.mat(array)将数组转化为矩阵

  • 矩阵的乘法必须满足运算规则,即(m,n)*(n,l)=(m,l)

    如果是二维数组实现矩阵运算

    np.dot(data,data1)
    np.matmul(data,data1)
    data @ data1
    

    如果是矩阵进行运算

    data1*data2
    

3.2.4数组合并分割

  • numpy.hstack 水平拼接

  • numpy.vstack 竖拼接

  • numpy.concatenate((a1,a2),axis=0|1) 水平|竖拼接

    np.hstack((a, b))
    np.vstack((a, b))
    np.concatenate((a, b), axis=1)
    


四:Pandas

4.0基本介绍

  • Pandas=panel+data+analysis
  • 专门用于数据挖掘的开源Python库
  • 以Numpy为基础,借力Numpy模块在计算方面性能高的优势
  • 基于matplotlib,能够简便的画图
  • 独特的数据结构
  • 便捷的数据处理能力
  • 读取文件方便
  • 封装了Matplotlib、Numpy的画图和计算

核心数据结构

  • DataFrame (是series的容器,一般二维)
  • Panel(是dataframe的容器,三维)
  • Series(一维)

4.1DataFrame

4.1.0DataFrame结构

  • 索引:行索引-index,横向索引;列索引-columns,纵向索引
  • 值:values,利用values即可直接获得去除索引的数据(数组)
  • shape:表明形状 (形状不含索引的行列)
  • T:行列转置

4.1.1构造dataframe 利用DataFrame函数

DataFrame是一个既有行索引又有列索引的二维数据结构

import numpy as np
import pandas as pd
a=np.ones((2,3))
b=pd.DataFrame(a)

如图,生成的打他frame是一个二维表,由于没有指定索引,因此默认行列索引为数字序号

4.1.2常用操作(设置索引)

  1. 获取局部展示

    b.head()#默认展示前5行,可在head()加入数字,展示前几行
    b.tail()#默认展示后5行,可在tail()加入数字,展示后几行
    
  2. 获取索引和值

    b.index#获取行索引
    #####返回一个类似列表的东西,也可以利用数字继续索引例:a.index[1]
    b.columns#获取列索引
    b.values#获取数据值(数组,不含索引)
    b.shape#获取DataFrame的维度数据
    b.T#获取转制后的dataframe
    
  3. 设置行列索引

    # 创建一个符合正态分布的10个股票5天的涨跌幅数据
    stock_change = np.random.normal(0, 1, (10, 5))
    pd.DataFrame(stock_change)
    #设置行列索引
    stock = ["股票{}".format(i) for i in range(10)]
    date = pd.date_range(start="20200101", periods=5, freq="B")#这个是pandas中设置日期的
    # 添加行列索引
    data = pd.DataFrame(stock_change, index=stock, columns=date)
    
  4. 修改索引

    #不能单独修改行列总某一个索引的值,可以替换整行或整列   例:b.index[2]='股票1'  错误
    data.index=新行索引
    #重设索引
    data.reset_index(drop=False)
    #drop参数默认为False,表示将原来的索引替换掉,换新索引为数字递增,原来的索引将变为数据的一部分。True表示,将原来的索引删除,更换为数字递增。如下图
    

# 设置新索引
df = pd.DataFrame({'month': [1, 4, 7, 10],'year': [2012, 2014, 2013, 2014],'sale':[55, 40, 84, 31]})
# 以月份设置新的索引
df.set_index("month", drop=True)
#见下图,即将原本数据中的一列拿出来作为index
new_df = df.set_index(["year", "month"])# 设置多个索引,以年和月份   多个索引其实就是MultiIndex

可以看到下面的new_df已经是multiIndex类型数据了。

有三级:index index.names index.levels

分别看各自的输出

4.1.3 MultiIndex与Panel

MultiIndex:多级或分层索引对象

MultiIndex详解

Panel

pandas.Panel(data=None,items=None,major_axis=None,minor_axis=None,copy=False,dtype=None)

存储3维数组的Panel结构

  • items - axis 0,每个项目对应于内部包含的数据帧(DataFrame)。
  • major_axis - axis 1,它是每个数据帧(DataFrame)的索引(行)。
  • minor_axis - axis 2,它是每个数据帧(DataFrame)的列。
p = pd.Panel(np.arange(24).reshape(4,3,2),items=list('ABCD'),major_axis=pd.date_range('20130101', periods=3),minor_axis=['first', 'second'])
p["A"]
p.major_xs("2013-01-01")
p.minor_xs("first")
###由于panel是三维数据,因此只能从某一个维度切入,可以理解为从立方体中抽出一个平面(dataframe)观察,则上面三行代码结果如下图;而series则是相当于从平面(dataframe)中抽出一行或一列来观察

Pandas从版本0.20.0开始弃用,推荐的用于表示3D数据的方法是DataFrame上的MultiIndex方法

4.1.4 Series

带索引的一维数组

  • index
  • values
# 创建
pd.Series(np.arange(3, 9, 2), index=["a", "b", "c"])
# 或
pd.Series({'red':100, 'blue':200, 'green': 500, 'yellow':1000})sr = data.iloc[1, :]
sr.index # 索引
sr.values # 值#####就是从dataframe中抽出一行或一列来观察

4.2基本数据操作(很重要的一点是布尔值索引)

4.2.1索引操作(bool索引见4.2.4)

data=pd.read_csv("./stock_day/stock_day.csv")#读入文件的前5行表示如下
######利用drop删除某些行列,需要利用axis告知函数是行索引还是列索引
data=data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"], axis=1) # 去掉一些不要的列
data["open"]["2018-02-26"] # 直接索引,但需要遵循先列后行#####按名字索引利用.loc函数可以不遵循列行先后关系
data.loc["2018-02-26"]["open"] # 按名字索引
data.loc["2018-02-26", "open"]#####利用.iloc函数可以只利用数字进行索引
data.iloc[1][0] # 数字索引
data.iloc[1,0]# 组合索引
# 获取行第1天到第4天,['open', 'close', 'high', 'low']这个四个指标的结果
data.ix[:4, ['open', 'close', 'high', 'low']] # 现在不推荐用了
###但仍可利用loc和iloc
data.loc[data.index[0:4], ['open', 'close', 'high', 'low']]
data.iloc[0:4, data.columns.get_indexer(['open', 'close', 'high', 'low'])]

4.2.2赋值操作

data仍然是上图类型

data.open=100
data['open']=100
###两种方式均可
data.iloc[1,0]=100
###找好索引即可

4.2.3排序

  • sort_values (比较values进行排序) sort_index (比较行索引进行排序,不行可以先转置简介对列排序)

    data.sort_values(by="high", ascending=False) # DataFrame内容排序,ascending表示升序还是降序,默认True升序data.sort_values(by=["high", "p_change"], ascending=False).head() # 多个列内容排序。给出的优先级进行排序data.sort_index(ascending=True)###对行索引进行排序#这里是取出了一列 “price_change”列,为serise,用法同上
    sr = data["price_change"]
    sr.sort_values(ascending=False)
    sr.sort_index()
    

4.2.4数学运算 布尔值索引

  1. 算术运算:直接利用运算符或者函数

    #正常的加减乘除等的运算即可
    data["open"] + 3
    data["open"].add(3) # open统一加3
    data.sub(100)# 所有统一减100 data - 100
    (data["close"]-(data["open"])).head() # close减open
    
  2. 逻辑运算 :< ; > ; | ; & 利用逻辑符号或者函数query

    # 例如筛选p_change > 2的日期数据
    data[data["p_change"] > 2].head()
    # 完成一个多个逻辑判断, 筛选p_change > 2并且low > 15
    data[(data["p_change"] > 2) & (data["low"] > 15)].head()
    data.query("p_change > 2 & low > 15").head()###等效于上一行代码###判断# 判断'turnover'列索引中是否有4.19, 2.39,将返回一列布尔值
    data["turnover"].isin([4.19, 2.39])##如下图
    

  1. 利用布尔值索引,即利用一个布尔数组索引出True的数据

    ###判断# 判断'turnover'列索引中是否有4.19, 2.39,将返回一列布尔值
    data["turnover"].isin([4.19, 2.39])##如下图
    data[data["turnover"].isin([4.19, 2.39])]
    #这块就将返回turnover列布尔值为true的如下图,也就是筛选出turnover中值为4.19和2.39###布尔值索引是一个很方便的数据筛选操作,比如:
    data[data["turnover"]>0.1]
    #也将筛选出turnover列中大于0.1的整体data数据,并不是说只返回turnover相关数据,判断只是返回布尔索引,利用索引的是data数据
    

4.2.5统计运算

data.describe()
#将返回关于列的最值,均值,方差等多种信息
##其实这里很多就和numpy相似了
data.max(axis=0)#返回最值
data.idxmax(axis=0) #返回最值索引

累计统计函数(累加,累乘等)

  • cumsum 计算前1/2/3/…/n个数的和
  • cummax 计算前1/2/3/…/n个数的最大值
  • cummin 计算前1/2/3/…/n个数的最小值
  • cumprod 计算前1/2/3/…/n个数的积

自定义运算

​ apply(func, axis=0)

​ func: 自定义函数

​ axis=0: 默认按列运算,axis=1按行运算

data.apply(lambda x: x.max() - x.min())
#这里的lambda x: x.max() - x.min()是lambda表达式,是函数的简单写法也可
def fx(data):return data.max()-data.min()

4.3画图

pandas.DataFrame.plot

DataFrame.plot(x=None, y=None, kind=‘line’)

  • x: label or position, default None
  • y: label, position or list of label, positions, default None
    • Allows plotting of one column versus another
  • kind: str
    • ‘line’: line plot(default)
    • ''bar": vertical bar plot
    • “barh”: horizontal bar plot
    • “hist”: histogram
    • “pie”: pie plot
    • “scatter”: scatter plot
#更简易用matplotlib
data.plot(x="volume", y="turnover", kind="scatter")
data.plot(x="high", y="low", kind="scatter")
data['volume'].plot()

4.4文件读取写入

4.4.1 CSV文件

DataFrame.to_csv(path_or_buf=None,sep=','columns=None,header=True,index=True,index_label=None,mode='w',encoding=None)
  • path_or_buf :string or file handle , default None
  • sep : character, default ‘,’(分隔符)
  • columns :sequence,optional
  • mode:'w‘:重写,'a’追加
  • index:是否写入 行索引
  • header:boolean or list of string,default True,是否写进列索引值
Series.to_csv (path=None,index=True,sep=',',na_rep='',float_format=None,header=False,index_label=None,mode='w',encoding=None,compression=None,date_format=None,decimal='.)
  • Write Series to a comma-separated values(csv)file
pd.read_csv("./stock_day/stock_day.csv", usecols=["high", "low", "open", "close"]).head() # 读哪些列data = pd.read_csv("stock_day2.csv", names=["open", "high", "close", "low", "volume", "price_change", "p_change", "ma5", "ma10", "ma20", "v_ma5", "v_ma10", "v_ma20", "turnover"]) # 如果列没有列名,用names传入data[:10].to_csv("test.csv", columns=["open"]) # 保存open列数据data[:10].to_csv("test.csv", columns=["open"], index=False, mode="a", header=False) # 保存opend列数据,index=False不要行索引,mode="a"追加模式|mode="w"重写,header=False不要列索引

csv可以用excel表格打开,但是可能有格式错误

4.4.2HDF5文件

read_hdf to_hdf

HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame,也就是说hdf5存储的是panel这种三维类型,一个key对应一个dataframe

pandas.read_hdf(path_or_buf, key=None, **kwargs)

从h5文件当中读取数据

  • path_or_buffer: 文件路径
  • key: 读取的键
  • mode: 打开文件的模式
  • reurn: The Selected object

DataFrame.to_hdf(path_or_buf, key, **kwargs)

day_close = pd.read_hdf("./stock_data/day/day_close.h5",key="close")
day_close.to_hdf("test.h5",key="close" )

4.4.3 JSON文件

read_json to_json

pandas.read_json(path_or_buf=None,orient=None,typ=“frame”,lines=False)

  • 将JSON格式转换成默认的Pandas DataFrame格式
  • orient: string,Indication of expected JSON string format.
    • ‘split’: dict like {index -> [index], columns -> [columns], data -> [values]}
    • ‘records’: list like [{column -> value}, …, {column -> value}]
    • ‘index’: dict like {index -> {column -> value}}
    • ‘columns’: dict like {column -> {index -> value}}, 默认该格式
    • ‘values’: just the values array
  • lines: boolean, default False
    • 按照每行读取json对象
  • typ: default ‘frame’,指定转换成的对象类型series或者dataframe
sa = pd.read_json("Sarcasm_Headlines_Dataset.json", orient="records", lines=True)
##主要是path,orient是一种确定索引与数值的对应,以本例来看,列索引就是‘key’,values就是key对应的值
sa.to_json("test.json", orient="records", lines=True)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nR980In-1647746935684)(python数据挖掘.assets/image-20220319221645419.png)]

本示例中按行存储,每行是一个字典,键 有’article_link’,'headline’等

数据读取后的展示如下

4.5高级处理

4.5.1缺失值(标记值)处理

主要参数

  • inplace实现数据替换(默认为False)
  • dropna实现缺失值的删除(默认删除行)
  • fillna实现缺失值的填充
  • isnull或notnull判断是否有缺失数据NaN

如何进行缺失值处理?

  • 删除含有缺失值的样本
  • 替换/插补数据

判断NaN是否存在

  • pd.isnull(df) 会返回整个dataframe的布尔框架,难以观察(bool为True代表那个位置是缺失值)
  • pd.isnull(df).any() 表示只要有一个True就返回True
  • pd.notnull(df)会返回整个dataframe的布尔框架,难以观察(bool为False代表那个位置是缺失值)
  • pd.notnull(df).all() 表示只要有一个False就返回False

删除nan数据

  • df.dropna(inplace=True) 默认按行删除 inplace:True修改原数据,False返回新数据,默认False

替换nan数据

  • df.fillna(value,inplace=True)

  • value替换的值

  • inplace:True修改原数据,False返回新数据,默认False

    movie["Revenue (Millions)"].fillna(movie["Revenue (Millions)"].mean(), inplace=True)
    ###这就是先利用其他代码判断出"Revenue (Millions)"有nan数据,然后利用.fillna函数,令value=movie["Revenue (Millions)"].mean()列的均值,然后inplace=True修改原数据
    
import pandas as pd
import numpy as np
movie = pd.read_csv("./IMDB/IMDB-Movie-Data.csv")
# 1)判断是否存在NaN类型的缺失值
np.any(pd.isnull(movie)) # 返回True,说明数据中存在缺失值
np.all(pd.notnull(movie)) # 返回False,说明数据中存在缺失值
pd.isnull(movie).any()
pd.notnull(movie).all()# 2)缺失值处理
# 方法1:删除含有缺失值的样本
data1 = movie.dropna()
pd.notnull(data1).all()# 方法2:替换
# 含有缺失值的字段
# Revenue (Millions)
# Metascore
movie["Revenue (Millions)"].fillna(movie["Revenue (Millions)"].mean(), inplace=True)
movie["Metascore"].fillna(movie["Metascore"].mean(), inplace=True)

替换非nan的标记数据

有些数据不存在可能标记为“#”,“?”等

# 读取数据
path = "wisconsin.data"
name = ["Sample code number",  "Normal Nucleoli","Mitoses", "Class"]
data = pd.read_csv(path, names=name)#这里的非nan标记值缺失值就是利用“?”表示的,因此利用参数to_replace,value=np.nan,将默认标记值替换为nan值,然后再利用签署方法处理nan缺失值
# 1)替换
data_new = data.replace(to_replace="?", value=np.nan)

4.5.2 离散化

这一块建议去看视频,理解更快:视频地址

  • 连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间的属性值。

  • 连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。

  • 实现方法:

    1. 分组

      • 自动分组 sr = pd.qcut(data, bins)
      • 自定义分组 sr = pd.cut(data, [])
    2. 将分组好的结果转换成one-hot编码(哑变量)
      • pd.get_dummies(sr, prefix=)
  • one-hot编码:
    one-hot

    比如男女数据一般用1和0表示,但1和0本身有大小问题,而男女只是不同的概念,因此用1,0表示会存在区别

    (男:1 女:0) 性别
    小明 1
    小红 0

    如果用one-hot表示一种方法可以是,相当于利用一种编码的方式表示

    编码
    小明 1 0 1 0
    小红 0 1 0 1

    同时还可处理连续数据,比如将身高的连续数据分为不同的身高区间,每个区间对应一个类别,然后类比同上来考虑

    # 1)准备数据
    data = pd.Series([165,174,160,180,159,163,192,184], index=['No1:165', 'No2:174','No3:160', 'No4:180', 'No5:159', 'No6:163', 'No7:192', 'No8:184'])
    # 2)分组
    # 自动分组
    sr = pd.qcut(data, 3)
    sr.value_counts()  # 看每一组有几个数据
    # 3)转换成one-hot编码
    pd.get_dummies(sr, prefix="height")# 自定义分组
    bins = [150, 165, 180, 195]#这就表示有三组[150,165][165,180][180,195]
    sr = pd.cut(data, bins)
    # get_dummies
    pd.get_dummies(sr, prefix="身高")
    

4.5.3合并

指合并不同dataframe上的内容数据

  • 按方向

    pd.concat([data1, data2], axis=1)
    #axis:0为列索引;1为行索引
    
  • 按索引

    merge函数参数API

    left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],'key2': ['K0', 'K1', 'K0', 'K1'],'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3']})
    right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],'key2': ['K0', 'K0', 'K0', 'K0'],'C': ['C0', 'C1', 'C2', 'C3'],'D': ['D0', 'D1', 'D2', 'D3']})
    pd.merge(left, right, how="inner", on=["key1", "key2"])
    pd.merge(left, right, how="left", on=["key1", "key2"])
    pd.merge(left, right, how="outer", on=["key1", "key2"])
    ###这里merge参数解释:
    #left: 需要合并的一个表,合并后在左侧
    #right:需要合并的一个表,合并后在右侧
    #how: 合并方式
    #on: 在哪些索引上进行合并
    

4.5.4交叉表与透视表

  1. 交叉表

    • 交叉表用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)

    • pd.crosstab(value1, value2)

      data = pd.crosstab(stock["week"], stock["pona"])
      data.div(data.sum(axis=1), axis=0).plot(kind="bar", stacked=True)
      
  2. 透视表

    • 相对于交叉表操作简单些

      # 透视表操作
      stock.pivot_table(["pona"], index=["week"])
      

4.5.6分组与聚合

  • 分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况。

  • DataFrame.groupby(key, as_index=False) key:分组的列数据,可以多个

    col =pd.DataFrame({'color': ['white','red','green','red','green'], 'object': ['pen','pencil','pencil','ashtray','pen'],'price1':[5.56,4.20,1.30,0.56,2.75],'price2':[4.75,4.12,1.60,0.75,3.15]})# 进行分组,对颜色分组,price1进行聚合
    # 用dataframe的方法进行分组
    col.groupby(by="color")# 或者用Series的方法进行分组聚合
    col["price1"].groupby(col["color"])
    

    效果图

五:案例

要求

  1. 想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
  2. 对于这一组电影数据,如果我们想看Rating,Runtime(Minutes)的分布情况,应该如何呈现数据?
  3. 对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何
    处理数据?

数据结构展示

​ 数据网址

代码

# 1、准备数据
movie = pd.read_csv("./IMDB/IMDB-Movie-Data.csv")
###movie读入后如上图所示
######################问题一
# 问题1:我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
# 评分的平均分
movie["Rating"].mean()
# 导演的人数
np.unique(movie["Director"]).size######################问题二
##绘制直方图查看分布
movie["Rating"].plot(kind="hist", figsize=(20, 8))
#利用matplotlib可更细致绘图
import matplotlib.pyplot as plt
# 1、创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 2、绘制直方图
plt.hist(movie["Rating"], 20)
# 修改刻度
plt.xticks(np.linspace(movie["Rating"].min(),movie["Rating"].max(), 21))
# 添加网格
plt.grid(linestyle="--", alpha=0.5)
# 3、显示图像
plt.show()######################问题三
##如果我们希望统计电影分类(genre)的情况,应该如何处理数据?
###可以发现图中genre一列数据中每个电影都有多种标签,因此要先分割
# 先统计电影类别都有哪些
movie_genre = [i.split(",") for i in movie["Genre"]]
###得到的movie_genre结构图见《下图一》
###这一块主要是把movie_genre的二维列表变为以为列表,然后利用unique函数去重
movie_class = np.unique([j for i in  movie_genre for j in i])
len(movie_class)####这就得到了电影的类型标签种类数# 统计每个类别有几个电影
count = pd.DataFrame(np.zeros(shape=[1000, 20], dtype="int32"), columns=movie_class)
count.head()###得到的count结构如《下图二》
# 计数填表
for i in range(1000):count.ix[i, movie_genre[i]] = 1###注意ix现在不太能用了############movie_genre[i]将返回字符索引列
#这就得到了下面第三张图片的数据处理效果,列表示电影类型种类,行表示不同电影,如《下图三》
#因此只需逐列求和即可得到每类标签电影的数量
##最终实现数据可视化如《下图四》
count.sum(axis=0).sort_values(ascending=False).plot(kind="bar", figsize=(20, 9), fontsize=40, colormap="cool")

图一
图二
图三
图四

数据分析处理快速上手教程matplotlib+numpy+pandas(基础讲解)相关推荐

  1. 使用Matplotlib Numpy Pandas构想泰坦尼克号高潮

    Did you know, a novel predicted the Titanic sinking 14 years previously to the actual disaster??? 您知 ...

  2. 【详解】机器学习库-Matplotlib+Numpy+Pandas

    目录 机器学习库-Matplotlib+Numpy+Pandas 1 Matplotlib基本使用 1.2 用途 1.3 操作指南 1.4 常见图形绘制 1.5 代码实现 2 Numpy基本使用 2. ...

  3. 申请 Let's Encrypt 数字证书,并安装cerbot快速上手教程~~

    申请 Let's Encrypt 数字证书,并安装cerbot快速上手教程~~ Let's Encrypt SSL证书介绍 如今,越来越多的网站已经由HTTP迁移到HTTPS安全协议了.HTTPS不但 ...

  4. 【Endnote】EndnoteX9快速上手教程

    想得美,自己慢慢摸索才是硬道理,哪有什么快速上手教程,链接在下面 链接:https://pan.baidu.com/s/1Vtnaz90Iwp3I17M8ijxMWg 密码:ems7

  5. Debussy 快速上手教程

    本文为转载,刚瞄了一眼,应该是在LINUX下的应用快速上手教程.Debussy是个很强大的看V代码及Debug V代码工具.你能方便地看到信号从哪里来到哪里去,比较强大.简单地用,用起来也比较简单.在 ...

  6. 嵌入式SQL编程快速上手教程

    嵌入式SQL编程快速上手教程 声明:我这里标题虽是<嵌入式SQL编程快速上手教程>,但只是嵌入式SQL编程的冰山一角罢了,我会通过举一道简单例题来教小白快速上手嵌入式SQL编程 第一:题目 ...

  7. Angular 初学者快速上手教程

    课程介绍 本课程是一个系列基础教程,目标是带领读者上手实战,课程以新版本 Angular 的 3 个核心概念作为主线:组件.路由.模块,加上业务开发过程中必须用到的特性:工具.指令.表单.RxJS.i ...

  8. c语言 字符串转运算符,快速上手系列-C语言之基础篇(二)数据类型与运算符...

    在上一篇文章<快速上手系列-C语言之基础篇(一)>中写了关于C语言的程序结构,关键字及控制语句.本篇主要写写C语言中数据类型,以及运算符相关方面的知识. 一.变量与常量 1.常量:在程序运 ...

  9. Python数据分析(全) #超长预警 #思维导图 #matplotlib #numpy #pandas

    数据分析 一.基础概念及环境 1. 数据分析概念 2. anaconda 2.3 安装 2.2 基本操作 二.matplotlib 1. 简介 2. 基本要点 3. 使用方法 3.1 最简单形式 3. ...

  10. TensorFlow 2.0 快速上手教程与手写数字识别例子讲解

    文章目录 TensorFlow 基础 自动求导机制 参数优化 TensorFlow 模型建立.训练与评估 通用模型的类结构 多层感知机手写数字识别 Keras Pipeline * TensorFlo ...

最新文章

  1. 对于读取PDF模板表单,中文无序问题
  2. 超级计算机性能调查,调查:多数超级计算机使用Linux操作系统
  3. python preference界面设置_偏好设置如何更改Preference的样式
  4. 4.Python标准库_文件管理 (部分os包,shutil包)
  5. mysql 阿里云 版本_阿里云虚拟主机mysql已经支持版本切换,支持MySQL 5.7.25
  6. Java+selenium 自动化测试--自动化测试模型介绍
  7. .国内外主流前端开发框架对比
  8. 在Angular外部使用js调用Angular控制器中提供的函数方法或变量
  9. Vue中如何导入并读取Excel数据
  10. 华为海思和MTK 智能手机
  11. #SpringBoot#阿里云服务器#将微信小程序后端代码部署到阿里云服务器 http转https
  12. 内存容错技术ECCChipkill保护镜像
  13. win10 计算机菜单,win10系统计算机界面菜单栏不见了的还原方案
  14. Sending the email to the following server failed.IOException while sending message问题解决
  15. 解决zing生成二维码时二维码太小、白框太大的问题
  16. 乐固、360加固在android 11 上报错,无法安装
  17. 真实经历!运维安全工程师经典面试汇总
  18. 2022年度变更调查数据处理工具箱
  19. Linux驱动设计——硬件基础
  20. 【总目录3】Python、神经网络与深度学习、毕业设计总结大全

热门文章

  1. 云计算给IT产业结构带来的影响
  2. word中套用表格样式在哪里_word2010中表格自动套用格式在哪里?
  3. 大连居民楼爆炸原因查明 责任人厌世开燃气阀门自杀
  4. 农历中的 闰月 与 公历中的 闰日
  5. 2022 基于SpringBoot的API文档管理系统 接口文档管理系统
  6. Job for network.service failed because the control process exited with error code. See “systemctl st
  7. GHD官宣全新中国区焕发大使乔欣
  8. Pygame做一期吃豆子游戏
  9. 将两块球形橡皮泥揉在一起,捏成一个正方体。请编程,完成下述功能:从键盘读入2个球形橡皮泥的直径,直径为浮点数;求正方体的边长,并保留两位小数输出;
  10. windows 10 提升管理员权限