作者: seo

  • wps的官网最新下载网站在哪里

      NumPy 是使用 Python 进行科学计算的基本包,增加了对大型、多维数组和矩阵的支持,以及在这些数组上操作的大量高级数学函数。NumPy 最初是由 Jim Hugunin 和其他几个开发人员创建的。2005年,Travis Oliphant 结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

      它提供了一些很实用的功能

      功能强大的n维数组对象复杂的(广播)功能集成C/C++和Fortran代码的工具有用的线性代数、傅里叶变换和随机数能力

      github wps官网下载网址是什么地址: https://github.com/numpy/numpy

      文档地址:https://numpy.org/doc/

      API 文档地址:https://numpy.org/devdocs/reference/index.html#reference

      安装:

      NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 下标 0 为开始进行集合中元素的索引。

      ndarray 和 python 中普通的数组(列表)的区别有

      NumPy 数组在创建时具有固定的大小,这不像Python 列表,可以动态增长。更改 ndarray 的大小将创建一个新的数组并删除原始数组。NumPy 数组中的元素都需要具有相同的数据类型,因此在内存中将具有相同的大小。例外情况:可以有(Python,包括NumPy)对象的数组,从而允许不同大小的元素的数组。NumPy数组集成了对大量数据的高级数学和其他类型的操作。通常,与使用Python的内置序列相比,这样的操作执行效率更高,代码也更少。

      越来越多的基于科学和数学的基于 python 的软件包正在使用 NumPy 数组;虽然这些输入通常支持 python 序列输入,但它们在处理之前将这些输入转换为 NumPy 数组,并且经常输出 NumPy 数组。换句话说,为了有效地使用当今许多(甚至是大多数)基于Python的科学/数学软件,仅仅知道如何使用Python的内置序列类型是不够的——人们还需要知道如何使用 NumPy 数组。

      下面会介绍一些常用函数

      numpy_01_create_ndarray

      array

      创建 1 个数组

      具体文档:https://numpy.org/devdocs/reference/generated/numpy.array.html#numpy.array

      zeros

      创建1个数组,充满0

      具体文档:https://numpy.org/devdocs/reference/generated/numpy.zeros.html

      ones

      创建1个数组,充满1

      具体文档:https://numpy.org/devdocs/reference/generated/numpy.ones.html

      empty

      创建没有初始化的数组,内容随机

      具体文档:https://numpy.org/devdocs/reference/generated/numpy.empty.html#numpy.empty
    wps官网的下载的地方
      arange

      创建在给定间隔内返回均匀间隔的值数组,不包含结束值,指定间隔

      具体文档:https://numpy.org/devdocs/reference/generated/numpy.arange.html

      linspace

      创建在指定间隔内返回均匀间隔的数字数组,包含结束值,指定个数

      具体文档:https://numpy.org/devdocs/reference/generated/numpy.linspace.html

      数组属性含义文档链接ndarray.ndim维度数量https://numpy.org/devdocs/reference/generated/numpy.ndarray.ndim.htmlndarray.shape数组的维度,对于矩阵,n 行 m 列https://numpy.org/devdocs/reference/generated/numpy.ndarray.shape.htmlndarray.size数组元素的总个数,相当于 .shape 中 n*m 的值https://numpy.org/devdocs/reference/generated/numpy.ndarray.size.htmlndarray.dtypendarray 对象的元素类型https://numpy.org/devdocs/reference/generated/numpy.ndarray.dtype.htmlndarray.itemsizendarray 对象中每个元素的大小,以字节为单位https://numpy.org/devdocs/reference/generated/numpy.ndarray.itemsize.htmlndarray.flagsndarray 对象的内存信息https://numpy.org/devdocs/reference/generated/numpy.ndarray.flags.htmlndarray.realndarray元素的实部https://numpy.org/devdocs/reference/generated/numpy.ndarray.real.htmlndarray.imagndarray 元素的虚部https://numpy.org/devdocs/reference/generated/numpy.ndarray.imag.htmlndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。https://numpy.org/devdocs/reference/generated/numpy.ndarray.data.htmlndarray.strides在遍历数组时在每个维度中步进的字节元组https://numpy.org/devdocs/reference/generated/numpy.ndarray.strides.htmlndarray.T转置数组https://numpy.org/devdocs/reference/generated/numpy.ndarray.T.html

      ndarray 支持索引和切片Slice 访问内部元素,下面会介绍一些简单用法,详细的具体文档可以见:https://numpy.org/devdocs/user/basics.indexing.html#basic-indexing

      简单索引

      numpy_02_ndarray_normal_find

      切片

      基本切片语法是

      其中i是起始索引,j是停止索引,k是步进(k != 0)。这将选择具有索引值 i,i+k,…,i+(m-1)*k的m个元素如果j > N(元素个数),则为Nj也可以省略,默认为N结果不包含停止索引:k 可以省略,默认步进为1。如果 i 和 j 是负数,那么实际索引是指N+i, N+j。k如果是负数,那代表逆向

      numpy_03_ndarray_noraml_slice_01

      复合索引和切片

      numpy_03_ndarray_noraml_slice_02

      广播 这个术语描述了 NumPy 在算术操作过程中如何处理具有不同形状的数组。在一定的约束下,较小的数组在较大的数组上“广播”,从而使它们具有兼容的形状。广播提供了一种向量化数组操作的方法,以便循环发生在C中而不是Python中。它在不制作不必要的情况下复制数据,通常会导致有效的算法实现。然而,在某些情况下,广播是一个坏主意,因为它会导致内存使用不足,从而降低计算速度。

      如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。

      具体文档:https://numpy.org/devdocs/user/basics.broadcasting.html#broadcastingwps的的官网下载的网址在哪

      在这里插入图片描述

      下面会介绍常用的数组操作函数,具体文档:https://numpy.org/devdocs/reference/routines.array-manipulation.html

      数组复制

      numpy_05_ndarray_array_copyTo

      数组形状修改

      numpy_06_ndarray_array_reshape

      数组维数扩充

      numpy_07_ndarray_array_expand_dim

      数组连接和分割

      numpy_08_ndarray_array_join_split

      数组元素添加与删除

      numpy_09_ndarray_array_add_delete

      数组重复构造

      wps office 的官方的下载网址怎么找numpy_10_ndarray_array_tile_repeatwps office 的官方的下载的入口在哪里(wps官网地址)

      数组迭代 nditer() 函数, 文档:https://numpy.org/devdocs/reference/generated/numpy.nditer.html#numpy.nditer

      下面会介绍常用的数组迭代,具体文档:https://numpy.org/devdocs/reference/arrays.nditer.html#arrays-nditer

      简单数组迭代

      numpy_11_ndarray_array_iterator

      广播数组迭代

      numpy_11_ndarray_array_iterator_boardcast

      具体文档:https://numpy.org/devdocs/reference/routines.math.html

      numpy_12_ndarray_function_sin

      numpy_13_ndarray_function_math

      numpy_14_ndarray_function_math_cal

      https://numpy.org/devdocs/reference/routines.sort.html

      numpy_15_ndarray_sort_where

      https://numpy.org/devdocs/reference/routines.linalg.html

      numpy_16_ndarray_linalg

      具体文档:https://numpy.org/devdocs/reference/random/index.html

      https://numpy.org/devdocs/reference/random/legacy.html

      https://numpy.org/devdocs/reference/random/generated/numpy.random.rand.html

      numpy_17_random_rand

      numpy_18_random_rand_permutation

      numpy_19_random_sample

      https://numpy.org/devdocs/reference/routines.char.html

      numpy_20_str_op

      numpy_21_str_cmp

      numpy_21_str_info

      https://numpy.org/devdocs/reference/routines.fft.html

      numpy_22_fft_1

      numpy_22_fft_2

      numpy_22_fft_3

      Numpy 可以读写磁盘上的文本数据或二进制数据。

      NumPy 为 ndarray 对象引入了一个简单的文件格式:npy。

      npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。

      常用的 IO 函数有:

      load() 和 save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。savez() 函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npz 的文件中。loadtxt() 和 savetxt() 函数处理正常的文本文件(.txt 等)

      具体 IO 函数相关文档可以见:

      https://numpy.org/devdocs/user/basics.io.html

      https://numpy.org/devdocs/reference/routines.io.html

      https://www.runoob.com/numpy/numpy-tutorial.html

  • wps office 的官方下载的地方在哪

      python 可视化

      使用第三方包

      Matplotlib

      Seaborn

      Pandas

      Boken

      Plotly

      Vispy

      Vega和gega-lite

      在这里插入图片描述

      在这里插入图片描述

      Matplotlib (Matplotlib,是matrix + plot + library的缩写)库由各种可视化类构成,内部结构复杂,受Matlab启发

      Matplotlib 包含两个模板

      (1) 绘图API: pyplot,绘制各类可视化图形的命令子库

      (2)集成库: pylab,是 Matplotlib 和 Scipy、Numpy的集成库

      pylab

      pylab 是 matplotlib 面向对象绘图库的一个接口。它的语法和 Matlab 十分相近。也就是说,它主要的绘图命令和 Matlab 对应的命令有相似的参数.

      pyplot

      matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式

      Matplotlib 的画图方式可分为两种:inline 和 notebook

      (1) inline 为静态绘图,嵌入到 jupyter notebook 中显示

      (2) notebook 为交互式图,在 juputer notebook 只显示一行输出代码

      虽然pyplot是Matplotlib下的子模块,但二者的调用关系却不是Matplotlib调用pyplot,而是在pyplot中调用Matplotlib,略显本末倒置。

      在这里插入图片描述

      pyplot模块集成了绝大部分常用方法接口,查看pyplot源码文件可以发现,它内部调用了Matplotlib路径下的大部分模块(不是全部),共同完成丰富的绘图功能。

      其中两个重点: figure 和 axes,其中前者1为所有绘图操作定义了顶层类对象Figure,相当于提供了画板;而后者定义了画板中的每一个绘图对象 Axes,相当于画板内的各个子图。

      在这里插入图片描述

      在这里插入图片描述

      实例:

      在这里插入图片描述

      在绘图结构中,figure创建窗口,subplot创建子图。所有的绘画只能在子图上进行。plt表示当前子图,若没有就创建一个子图。所有你会看到一些教程中使用plt进行设置,一些教程使用子图属性进行设置。他们往往存在对应功能函数。

      (1) Figure:

      Figure:面板(图),matplotlib中的所有图像都是位于figure对象中,一个图像只能有一个figure对象。

      在第一步的创建图像方法plt.figure()中,我们可以通过传入参数来改变图像的显示属性。查阅官方文档,figure方法的参数包括figsize、dpi、facecolor、edgecolor、linewidth、frameon、subplotpars、tight_layout、constrained_layout。其中 subplotpars、tight_layout这两个参数与子图相关,暂时不详细展开,其他参数的含义如下:

      修改plt.figure(),传入相关参数,代码如下:

      在这里插入图片描述

      Figure 详解

      figure和axes,其中前者为所有绘图操作定义了顶层类对象Figure,相当于是提供了画板;而后者则定义了画板中的每一个绘图对象Axes,相当于画板内的各个子图。

      换句话说,figure是axes的父容器,而axes是figure的内部元素,而我们常用的各种图表、图例、坐标轴等则又是axes的内部元素wps的免费版的下载入口的方法。

      (2) Subplot:

      Subplot:子图,figure对象下创建一个或多个subplot对象(即axes)用于绘制图像。

      在这里插入图片描述

      背景色

      通过向如matplotlib.pyplot.axes()或者matplotlib.pyplot.subplot()这样的方法提供一个axisbg参数,可以指定坐标这的背景色。

      subplot(111,axisbg=(0.1843,0.3098,0.3098))

      以下示例需要引入的库包括

      (3) 叠加图(plot函数含多个参数)

      在这里插入图片描述

      (1) pyplot的中文显示

      第一种方法:rcParams

      pyplot并不默认支持中文显示,需要rcParams修改字体实现

      在这里插入图片描述

      rcParams的属性

      在这里插入图片描述

      最后再简单介绍几个比较常wps的的官网最新下载的地方在哪里用的属性方法,matplotlib.rcParams[‘xtick_direction’] 、matplotlib.rcParams[‘ytick.direction’]可以设置刻度的方向,rcParams是pylot使用rc配置文件来自定义图形各种默认属性的方法,也叫rc配置或rc参数,通过rc参数可以修改图表的默认属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。plt.axis(‘off’)可以关闭坐标轴,如果想只关闭x轴或y轴,可以使用frame = plt.gca()获取当前子图,然后用frame.axes.get_xaxis().set_visible(False)或frame.axes.get_yaxis().set_visible(False)对x轴或y轴设置是否显示。

      中文字体的种类

      在这里插入图片描述

      实例:

      在这里插入图片描述

      第二种方法:fontproperties

      在有中文输出的地方,增加一个属性:fontproperties

      在这里插入图片描述

      坐标属性

      在作拥有坐标轴的图表时,我们往往需要对坐标轴进行设置,例如坐标轴的名称、坐标轴的范围、坐标轴的刻度等。

      (1) 设置坐标轴的名称:plt.xlabel,plt.ylabel 分别设置x轴和y轴的标签

      (2) 设置坐标轴的范围:plt.xlim, plt.ylim 分别设置x轴和y轴的大小范围。

      plt.axis(xmin,xmax,ymin,ymax) 给定了坐标范围

      (3) 设置刻度坐标轴的刻度:plt.xticks, plt.yticks 用于分别设置x轴和y轴的坐标轴刻度和大小、方向,以及标签大小,其同样可以用来设置坐标轴的范围(不推荐)。

      有时我们会根据需求设置不同的刻度表示形式,例如小数、百分数等等,此时我们使用plt.set_xticklabels/plt.set_yticklabels。假设我们要将上述的横坐标和纵坐标的刻度都用两位小数展示

      在这里插入图片描述

      线条属性

      在第3步绘图的ax.plot()方法wps免费版的下载的方法是什么中,我们可以通过传入参数来改变线条的显示属性。常见的有color、 marker、linestyle、linewidth等。

      标记maker 描述wps 的官网下载的地方是什么(金山wps官网人工电话客服)

      ‘o’ 圆圈

      ‘.’ 点

      ‘D’ 菱形

      ‘s’ 正方形

      ‘h’ 六边形1

      ‘*’ 星号

      ‘H’ 六边形2

      ‘d’ 小菱形

      ‘_’ 水平线

      ‘v’ 一角朝下的三角形

      ‘8’ 八边形

      ‘<’ 一角朝左的三角形

      ‘p’ 五边形

      ‘>’ 一角朝右的三角形

      ‘,’ 像素

      ‘^’ 一角朝上的三角形

      ‘+’ 加号

      ‘ ‘ 竖线

      ‘None’,’’,’ ‘ 无

      ‘x’ X

      如果这两种颜色不够用,还可以通过两种其他方式来定义颜色值:

      1、使用HTML十六进制字符串 color=’#123456’ 使用合法的HTML颜色名字(’red’,’chartreuse’等)。

      2、也可以传入一个归一化到[0,1]的RGB元祖。 color=(0.3,0.3,0.4)

      在这里插入图片描述

      legend()、 grid()

      legend:图例。可传参数包括handles,labels,loc等。handles是图线序列,labels是要显示的图例标签,loc是图例显示的位置,共有11种可选,传参时用String或Code均可。

      在这里插入图片描述

      在这里插入图片描述

      grid:给图表添加网格。可传参数包括b, which, axis和其他可选参数。b是否显示网格线,当提供color,linestyle等可选参数时,会默认b为True。which应用网格线,可传’major’, ‘minor’, 'both’分别表示使用主刻度、次刻度、两者。axis应用轴,可传 ‘x’, ‘y’, 'both’分别表示使用x轴、y轴、两者。可选参数包括color、linestyle、linewidth等。下面添加一个简单的网格线:

      MultipleLocator, FormatStrFormatter:修改主次刻度。主刻度和次刻度就类似于一把直尺上cm与mm的关系。MultipleLocator生成刻度标签,FormatStrFormatter生成刻度标签格式,然后分别用set_major_locator、set_major_formatter、set_minor_locator、set_minor_formatter进行主次刻度的设置。下面对x轴进行主次刻度的设置:

      在这里插入图片描述

      text()、 annotate()

      plt.text()添加文字说明

      Text语法说明:

      x,y: 是放置文本的位置

      string: 表示说明文字

      fontdict: 用于覆盖默认文本属性的字典,例如fontsize, fontproperties, color 等,如果fontdict为none,则默认值由rc参(matplotlib.rcParams)决定。

      arrowprops: #箭头参数,参数类型为字典dict 参数:width点箭头的宽度,headwidth在点的箭头底座的宽度,headlength点箭头的长度,shrink 总长度为分数“缩水”从两端,facecolor箭头颜色.

      bbox:给标题增加外框 其中常用参数: boxstyle方框外形,facecolor(简写fc)背景颜色,edgecolor(简写ec)边框线条颜色,edgewidth边框线条大小.

      在这里插入图片描述

      文本注释annotate()

      在图形中增加带箭头的注释

      plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict, *args, **kwargs)

      参数:

      s 为注释文本内容

      xy 为被注释的坐标点

      xytext 为注释文字的坐标位置

      xycoords 参数如下:

      color 设置字体颜色

      weight 设置字体线型

      {‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’}

      color 设置字体颜色

      arrowprops #箭头参数,参数类型为字典dict

      bbox给标题增加外框 ,常用参数如下:

      在这里插入图片描述

      https://blog.csdn.net/qq_36387683/article/details/101377416

      title() pyplot的文本显示wps office免费版下载地方在哪

      title: 常用参数:fontsize设置字体大小、fontweight设置字体粗细、fontstyle设置字体类型、verticalalignment设置水平对齐方式 ,可选数: : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’

      horizontalalignment: 设置垂直对齐方式,可选参数:left,right,center

      rotation(旋转角度): 可选参数为:vertical,horizontal 也可以为数字

      alpha: 透明度,参数值0至1之间

      backgroundcolor: 标题背景颜色

      (5)颜色设置

      调用matplotlib.pyplot.colors()可以得到matplotlib支持的所有颜色。

      其中,k表示黑色、m表示洋红色、c表示青色、w表示白色。

      背景色:matplotlib.pyplot.axes() 或者 matplotlib.pyplot.subplot()提供一个axisbg参数,可以指定坐标中的颜色。

      在代码执行过程中,有两种方式可以更改参数:

      如果不想每次使用matplotlib时都在代码部分进行配置,可以修改matplotlib的文件参数。可以用matplot.get_config()命令来找到当前用户的配置文件目录。

      配置文件包括以下配置项:

      其修改模式与上节所讲属性的修改相同

      在Matplotlib中,整个图像就是一个Figure对象,在Figure对象中可以包含一个或多个Axes对象,而每个Axes对象都是拥有自己的坐标系系统的绘图区域。在同一个Figure图像下的每个图表都代表这个图像的一个子图。

      第一种,利用Figure对象的add_subplot方法生成子图然后再向其中填充图表。

      add_subplot方法的参数包括nrows, ncols, index以及可选参数。其中nrows, ncols是子图的行列大小,index是当前创建的子图的索引,即作为图像的第几个子图。

      第二种,使用 plt.add_subplots 方法同时生成Figure对象和axes对象数组,每个axes对象就相当于一个子图。add_subplots方法的参数包括nrows, ncols, sharex, sharey, squeeze, subplot_kw, gridspec_kw。其中nrows, ncols就是子图的行列大小,共生成nrows*ncols个子图。sharex, sharey设置是否共享x轴或y轴,默认不共享。squeeze默认True,挤压多余尺寸,一般默认即可。subplot_kw、gridspec_kw可选参数,用来设置子图的属性。

      第三种,

      在这里插入图片描述

      第四种,利用pandas的DataFrame生成多系列图,然后拆分成子图。上述两种创建子图方法中的第三个子图都使用了pandas创建数据并在图表中展示了4条折线。这里我们依旧使用这个pandas数据,然后进行拆分直接生成子图。

      在这里插入图片描述

      在前两种子图创建方法中,我们发现各个子图之间的间距非常小,尤其是垂直方向上的间距,看着很不舒服,我们使用subplots_adjust方法来调整子图间的间距,subplots_adjust方法接收wspace, hspace两个参数分别表示水平方向和垂直方向上的间距。以第二种方法为例,我们向其中加入subplots_adjust方法。

      在这里插入图片描述

      plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)

      理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始

      plt.subplot2grid((3,3),(1,0),colspan=2)

      在这里插入图片描述

      在这里插入图片描述

      内嵌图

      除了像子图这种图表比较外,我们有时候也常常在已有的图表中再生成图表来进行比较,这种方式就叫做内嵌。

      在这里插入图片描述

      plt.subplot(nrows, ncols, plot_number)

      在这里插入图片描述

      在全局绘图区域中创建一个 分区体系,并定位到一个子 绘图区域

      在这里插入图片描述

      说明plt.plot(x,y,fmt,…)绘制一个坐标图 (线性二维图,折线图)plt.boxplot(data,notch,position)绘制一个箱形图plt.scatter(x,y)绘制散点图,其中,x和y长度相同plt.plot_date()绘制数据日期plt.bar(left,height,width,bottom)绘制一个条形图plt.barh(width,bottom,left,height)绘制一个横向条形图plt.polar(theta, r)绘制极坐标图plt.pie(data, explode绘制饼图plt.hist(x,bins,normed)绘制直方图plt.cohere(x,y,NFFT=256,Fs)绘制X‐Y的相关性函数plt.psd(x,NFFT=256,pad_to,Fs)绘制功率谱密度图plt.specgram(x,NFFT=256,pad_to,F)绘制谱图plt.step(x,y,where)绘制步阶图plt.contour(X,Y,Z,N)绘制等值图plt.vlines()绘制垂直图plt.stem(x,y,linefmt,markerfmt)绘制柴火图

      pyplot 的 plot 函数

      ∙ x : X轴数据,列表或数组,可选

      ∙ y :Y轴数据,列表或数组

      ∙format_string: 控制曲线的格式字符串,可选

      ∙ **kwargs: 第二组或更多(x,y,format_string)

      当绘制多条曲线时,各条曲线的x不能省略

      注意:如果向plot()指令提供了一维的数组或者列表,则matplotlib将默认它是一系列的y值,并且自动为其生成x的值。默认的x向量从0开始并且具有和y同样的长度。

      在这里插入图片描述

      ∙format_string: 控制曲线的格式字符串

      由颜色字符、风格字符和标记字符组成

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      plt.plot(x,y, format_string, **kwargs)

      ∙ **kwargs: 第二组或更多(x,y,format_string)

      color : 控制颜色, color=‘green’ linestyle: 线条风格, linestyle=‘dashed’ marker : 标记风格, marker=‘o’ markerfacecolor: 标记颜色, markerfacecolor=‘blue’ markersize: 标记尺寸, markersize=20

      plt.plot()

      只有一个输入列表或数组时,参数被当作Y轴,X轴以索引自动生成

      在这里插入图片描述
    wps电脑版的下载网站是什么
      plt.plot(x,y)当有两个以上参数时,按照X轴和Y轴顺序绘制数据点

      在这里插入图片描述

      pyplot饼图的绘制

      plt.pie()
    wps电脑版的下载的网址怎么找
      在这里插入图片描述

      在这里插入图片描述

      pyplot直方图的绘制

      plt.hist()

      在这里插入图片描述

      在这里插入图片描述

      pyplot极坐标图的绘制

      wps office免费版下载的入口怎么找(wps office免费版下载电脑版)在这里插入图片描述

      在这里插入图片描述

      pyplot 散点图的绘制

      在这里插入图片描述

      在这里插入图片描述

      在matplotlib中使用函数 matplotlib.pyplot.scatter 绘制散点图,matplotlib.pyplot.scatter的函数签名如下:

      常用参数有:x,y组成了散点的坐标;s为散点的面积;c为散点的颜色(默认为蓝色’b’);marker为散点的标记;alpha为散点的透明度(0与1之间的数,0为完全透明& WPS office官网最新下载的网站是什么#xff0c;1为完全不透明);linewidths为散点边缘的线宽;如果marker为None,则使用verts的值构建散点标记;edgecolors为散点边缘颜色。

      其他参数如cmap为colormap;norm为数据亮度;vmin、vmax和norm配合使用用来归一化亮度数据,这些与数据亮度有关,可以参考这篇文章。

      https://blog.csdn.net/u011915116/article/details/88525867

      3D图

      量场图

      灰度图

      等高线图

      Matplotlib中的fill_between()函数总结

      曲线覆盖

      在这里插入图片描述

      注意:fill_between()函数中的几个参数:

      部分区域覆盖:plt.fill_between(x[2:15], 0.2, 0.6, facecolor=‘green’, alpha=0.3)

      两曲线之间的覆盖:

      在这里插入图片描述

      import:

      https://blog.csdn.net/u011915116/article/details/88525867

      https://www.cnblogs.com/chenzhijuan-324/p/10700585.html

      https://www.jianshu.com/go-wild?ac=2&url=http%3A%2F%2Fmatplotlib.org%2Fgallery.html

  • wps官网最新的下载的地址怎么找

      在这里插入图片描述

      会员价值度用来评估用户的价值情况,是区分会员价值的重要模型和参考依据,也是衡量不同营销效果的关键指标之一。

      价值度模型一般基于交易行为产生,衡量的是有实体转化价值的行为。常用的价值度模型是RFM

      RFM模型是根据会员

      最近一次购买时间R(Recency)购买频率F(Frequency)购买金额M(Monetary)计算得出RFM得分wps官网最新下载地址在哪(wps office下载免费版电脑版)

      通过这3个维度来评估客户的订单活跃价值,常用来做客户分群或价值区分

      RFM模型基于一个固定时间点来做模型分析,不同时间计算的的RFM结果可能不一样

      RFM用户类别高高高重要价值用户高低高重要发展用户低高高重要保持用户低低高重要挽留用户高高低一般价值用户高低低一般发展用户低高低一般保持用户低低低一般挽留用户

      设置截止时间节点:选择一个基准日期(如2024-12-29)作为计算Recency的参考点。

      获取原始数据集:从会员数据库中提取过去一年内的订单数据,包括会员ID、订单时间和订单金额。

      数据预处理:

      Recency:计算每个会员距离截止日期最近的订单时间。Frequency:统计每个会员的订wps office 的官方下载的网站怎么找单总次数。Monetary:计算每个会员的订单总金额。
    wps office的免费版的下载地址在哪里
      R、F、M 分区:

      使用五分位法(1-5分)对R、F、M三个指标进行分区。Recency分数越小,得分越高(接近截止日期),Frequency和Monetary则相反。
    wps office的免费版的下载网站在哪里(wps office下载安装到桌面)
      计算RFM得分:

      加权得分:根据业务需求赋予R、F、M不同权重并计算总分。

      组合得分:将R、F、M得分拼接成一个字符串(如312、555)。

      导出结果:将RFM得分保存为CSV文件,以便后续分析。

      三大类:最优价值 中等价值 低质用户

      注意: 其中transpose()类似于T属性,目的是行列转换

      np.array(rfm_list)效果是:

      [[5 5 5 5 5 1]

      [1 5 1 1 1 1]

      [1 3 3 4 5 1]]

      np.array(rfm_list).transpose()效果是:

      [[5 1 1]

      [5 5 3]

      [5 1 3]
    wps官网下载的入口是什么
      [5 1 4]

      [5 1 5]

      [1 1 1]]

      np.array(rfm_list).T 效果是:

      [[5 1 1]

      [5 5 3]

      [5 1 3]

      [5 1 4]

      [5 1 5]

      [1 1 1]]

      最终rfm效果是:

      ​ r_score f_score m_score

      USERID

      1 5 1 1

      2 5 5 3

      3 5 1 3

      4 5 1 4

      5 5 1 5

      6 1 1 1

      根据加权得分 ,你可以将客户划分为不同的群体。划分标准可以根据得分范围来定义,以下是一个常见的划分方式:

      高价值客户&#xffwps的电脑版的下载的地址(wps官网下载地址是什么)1a; 高于某个阈值,例如 4.0 到 5.0。这类客户在最近购买、频率高、消费金额大,属于最重要的客户群体。中等价值客户: 介于中间范围,例如 2.0 到 4.0。这类客户表现较wps官网下载的地方怎么找(wps下载电脑版方式)好,但在某些维度(如频率或金额)可能稍有不足。低价值客户: 较低,例如低于 2.0。这类客户可能消费金额不高,购买频率低或最近很少购买,通常不是业务的主要目标群体。

      后期划分客户类别

      通过 组合得分,将客户划分为不同的群体。具体群体的划分取决于 组合得分的含义:

      高价值客户:

      R 得分高:客户最近购买。F 得分高:客户购买频率高。M 得分高:客户消费金额高。例如,RFM 组合是 “555”、“554”、“545” 等。

      中价值客户:

      R 得分中等:客户购买时间适中,不是最近但也不是很久之前。F 得分中等:客户购买频率一般。M 得分中等或较高:客户消费金额中等。例如,RFM 组合是 “343”、“442”、“453” 等。

      低价值客户:

      R 得分低:客户很久没有购买。F 得分低:客户购买频率低。M 得分低或中等:客户消费金额较低。例如,RFM 组合是 “111”、“221”、“132” 等。

      区间 表示从 开始到 之前, 包含在内,而 不包含在内。

      区间 表示从 开始到 之前, 包含在内,而 不包含在内。

      区间 表示从 开始到 结束, 和 都包含在内。

      07_RFM模型应用.py

      好的!我来用最通俗的语言详细解释这段代码,保证让你完全明白!

      代码的功能

      这段代码的作用是根据客户的 加权得分(),将客户分成不同的群体(低价值、中价值、高价值),然后用 饼图 展示各个群体的占比。

      代码逐行解释

      1.

      解释:这是用来划分客户群体的 阈值。

      是一个列表,表示将客户的得分分成几个区间。这里的 表示:

      得分在 到 之间的客户是 低价值。得分在 到 之间的客户是 中价值。得分在 到 之间的客户是 高价值。 类比:就像你考试得了 80 分,老师根据分数把你分到“优秀”组。

      2.

      解释:这是每个区间的 标签。

      是一个列表,表示每个区间的名字。这里的 表示:

      :低价值客户。:中价值客户。:高价值客户。 类比:就像老师把“优秀”组命名为“A 组”。

      3.

      解释:这行代码的作用是根据客户的得分,将他们划分到不同的群体。

      :这是客户的加权得分列。:这是 的一个函数,用来将数据分成不同的区间。:指定划分的阈值()。:指定每个区间的标签()。最终, 是一个新列,表示每个客户所属的群体。 类比:就像老师根据你的分数,把你分到“A 组”。

      示例说明

      假设 是这样的表格:

      客户IDrfm_wscore11.523.034.542.551.0

      运行这段代码后, 会变成这样:

      客户IDrfm_wscoreCustomer Segment11.5Low23.0Medium34.5High42.5Medium51.0Low

      饼图部分

      1.
    wps的官网最新的下载的地址在哪
      解释:这行代码的作用是绘制饼图。

      :统计每个群体的数量。:绘制饼图。 参数说明:

      :设置饼图的颜色。:在饼图上显示百分比。:从 90 度开始绘制饼图。:顺时针方向绘制。

      2.

      解释:设置饼图的标题为“各个价值用户的占比”。

      3.

      解释:隐藏 Y 轴的标签(因为饼图不需要 Y 轴标签)。

      4.

      解释:显示饼图。

      通俗总结

      这段代码的作用是:

      划分客户群体:根据客户的得分,将他们分成低价值、中价值、高价值三类。绘制饼图:展示每个群体的占比。

      就像老师根据学生的分数,把他们分成“A 组”、“B 组”、“C 组”,然后画一个饼图展示每组的人数比例。

      希望这个解释能让你完全明白!如果还有疑问,随时问我! 😊

  • wps office 的官方下载的入口在哪

      statsmodels

      1.1.1 相关系数的概念

    wps office 官方下载的网址是什么
      1.1.2 使用模拟数据计算变量之间的相关系数和绘图

      在这里插入图片描述

      output

      correlation of X and Y is

      -0.0070692509611224395WPS office的电脑版下载的方法在哪里

      wps office 官方下载的网址是什么(wps官网最新下载和正版有什么区别吗)在这里插入图片描述

      output

      correlation of X and Y is

      0.9953589318626792

      在这里插入图片描述

      output

      correlation of X and Y is

      -0.9987776408463028

      在这里插入图片描述

      output

      correlation of X and Y is

      -0.8357355999573256

      1.1.3 使用本地数据计算变量之间的相关系数和绘图
    WPS office官网最新的下载的网站怎么找
      output

      PearsonRResult(statistic=-0.8285038835884277, pvalue=0.021280260007523356)

      数据文件“ch14_1.xls”下载

      output

      time adv sale

      0 1 35 50

      1 2 50 100

      2 3 56 120

      3 4 68 180

      4 5 70 175

      0.9636816932556833

      1.1.4 使用网上数据计算变量之间的相关系数和绘图

      output

      CSV文件已生成。

      output

      output

      在这里插入图片描述

      1.2.1 应用Python-statsmodels工具作一元线性回归分析

      数据文件“ch14_3.xls”下载

      output

      output

      在这里插入图片描述

      1.2.2 应用Python-sklearn工具作一元线性回归分析

      数据文件“ch14_3.xls”下载

      output

      array([[17],

      [10],

      [44],

      [30],

      [22],

      [15],

      [11],

      [ 5],

      [31],

      [36]], dtype=int64)

      output

      0 17

      1 10

      2 44

      3 30

      4 22

      5 15

      6 11

      7 5

      8 31

      9 36

      Name: rs, dtype: int64

      output

      回归系数: wps的的官网的下载的地方是多少 [[12.2309863]]

      截距: [176.2952027]

      R-squared: 0.9407180505879883

      预测rs = 40时xse的值为 : [665.53465483]

      数据文件“ch14_4.xls”下载

      output

      output

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      1.3.1 多元回归分析的Python的statsmodels工具应用

      output

      output

      output

      1.3.2 用scikit-learn工具作多元回归分析

      output

      output

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      output

      output

      2.1.1 加载包

      2.1.2 数据读取及预处理

      数据文件“csh601318_processed.csv”下载

      output

      output

      output

      output

      在这里插入图片描述

      output

      无法拒绝原假设,认为数据是非平稳的。

      output

      一阶差分后序列平稳

      2.4.3 绘制一阶差分后的时序图

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      2.5.1 绘制原序列自相关图和偏自相关图

      在这里插入图片描述

      2.5.2 绘制一阶差分后自相关图和偏自相关图

      wps的的官网的下载网址在这里插入图片描述

      2.6.1 按照指定的百分比划分,如:8:2,7:3等

      output

      2.6.2 按照指定的日期划分,如:2022-12-31

      output

      output

      我们可以使用 函数来拟合 ARIMA 模型并进行预测。首先,需要确定 ARIMA 模型的参数。可以通过观察 ACF 和 PACF 图来初步选择参数。在这里,我们将选择 ARIMA(1,1,1) 模型。

      output

      output

      在这里插入图片描述WPS office的官网下载的方法在哪里

      思考:ARIMA在训练集上拟合的比较好,但在测试集上,所有的预测值几乎都相等,为什么?问题出在哪?怎么解决?

      2.8.1 计算评估指标

      为了评估模型的预测效果,我们需要计算一些常用的评估指标&#xff0c WPS office电脑版的下载网站;包括均方误差(Mean Squared Error,MSE)、均方根误差(Root Mean Squared Error,RMSE)、平均绝对误差(Mean Absolute Error,MAE)和平均绝对百分误差(Mean Absolute Percentage Error,MAPE)等。

      这些指标的计算公式如下:

      其中, 表示真实值, 表示预测值, 表示样本数量。

      代码如下:

      output

      接下来,我们可以,来评估模型是否存在系统性误差。如果模型的残差是随机的、没有规律性,那么说明模型拟合得比较好;如果残差呈现出一定的规律性,那么说明模型还存在一些问题。

      2.8.2 残差检验

      (1) 绘制残差图

      在这里插入图片描述

      (2) 对残差进行平稳性检验

      output

      根据结果,训练集残差ADF 统计量为-8.386454,远小于 1% 的临界值-3.616,因此我们可以拒绝原假设(序列具有单位根非平稳性),接受备择假设,即序列是平稳的。 P 值为 0,说明序列的单位根非常显著地低于 5% 的显著性水平,进一步支持序列的平稳性。

      对某股票的历史股价数据进行时序分析和预测,具体步骤如下:

      1.首先加载相应的包

      2.数据的读取和初步探索

      3.平稳性检验

      4.确定差分阶数

      5.通过自相关图和偏自相关图来确定拟合模型

      6.拟合ARIMA模型并进行预测

      7.对预测结果进行评估

      本次分析表明,ARIMA模型可以用于股票价格的预测。但是,在实际应用中需要注意,股票价格受到多种因素的影响,仅使用历史价格数据进行预测是不够准确的,需要考虑其他因素的影响。此外,ARIMA模型的预测精度也会受到模型参数的选择和数据质量的影响,需要进行不断的调整和优化wps office的免费版的下载网址是什么(wps官网最新客服电话多少)。

  • wps的的官网最新下载网站是多少

      新增功能:

      读取已经获取的JSON数据文件

      • 并将AQI前5的数据输出到文件

      列表排序

      • list.sort(func)

      func指定了排序的方法

      • func可以通过lambda函数实现

      读取已经获取的JSON数据文件

      • 并将其转换成CSV文件

      • CSV(Comma-Separated Values)是一种通用的、相对简单的文件格式

      • 在商业和科学领域上广泛使用

      • 规则

      1. 以行为单位

      2. 每行表示一条记录

      3. 以英文逗号分wps的官网的下载的地址在哪里割每列数据(如果数据为空,逗号也要保留)

      4. 列名通常放置在文件第一行

      import csv

      • csv.writerow(list) 将列表中的元素写入文件的一行中

      根据输入的文件判断是JSON格式还是CSV格式,并进行相应的操作

      文件操作补充:

      CSV文件读取

      imort csv

      csv.reader() 将每行记录作为列表返回

      • 使用with语句操作文件对象

      使用with语句,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭文件。不需要close()语句。

      • os模块提供了与系统、目录操作相关的功能,不受平台的限制

      为了能有效地提取并利用网络信息并工作提高效率,出现了网络爬虫

      • 利用网络爬虫实时获取城市的空气质量wps office免费版的下载地址的方法

      网络爬虫

      自动抓取互联网信息的程序;利用互联网数据进行分析、开发产品

      • 步骤:

      1. 通过网络链接获取网页内容

      2. 对获得的网页内容进行处理
    wps的的官网最新的下载网址
      requests模块

      更多方法参考:http://docs.python-requests.org/

      高效地解析和处理HTML,beautifulsoup4

      BeautifulSoup

      • 用于解析HTML或XML

      • pip install beautifulsoup4

      • import bs4

      • 步骤

      1. 创建BeautifulSoup对象

      2. 查询节点

      find,找到第一个满足条件的节点

      find_all, 找到所有满足条件的节点

      创建对象

      • 创建BeautifulSoup对象

      • bs = BeautifulSoup(

      url,

      html_parser, 指定解析器

      enoding 指定编码格式(确保和网页编码格式一致)

      )

      查找节点

      • <a href=‘a.html’ class=‘a_link’>next page</a>

      • 可按节点类型、属性或内容访问

      • 按类型查找节点

      • bs.find_all(‘a’)

      • 按属性查找节点

      • bs.find_all(‘a’, href=‘a.html’)

      • bs.find_all(‘a’, href=‘a.html’, string=‘next page’)

      • bs.find_all(‘a’, class_=‘a_link’)

      • 注意:是class_

      • 或者bs.find_all(‘a’, {‘class’:’a_link’})

      网站审查元素:找到div节点

      功能:利用beautifulsoup4获取所有城市的空气质量

      1. 首先获取所有的城市列表,及对应的url

      2. 根据url获取城市的空气质量(6.0程序)

      新增功能:将获取的所有城市空气质量保存成CSV数据文件

      新增功能:• 利用Pandas进行数据处理分析

      Pandas

      • wps官网最新下载的网址在哪(wps官网最新地址是) 一个强大的分析结构化数据的工具集

      • 基础是NumPy,提供了高性能矩阵的运算

      • 应用,数据挖掘,数据分析

      • 如,学生成绩分析、股票数据分析等。

      • 提供数据清洗功能

      Pandas的数据结构

      Series

      • 类似一维数组的对象

      • 通过list构建Series

      • ser_obj = pd.Series(range(10))

      • 由数据和索引组成

      • 索引在左,数据在右

      • 索引是自动创建的

      • 获取数据和索引

      • ser_obj.index, ser_obj.values

      • 预览数据

      • ser_obj.head(n)  #获取前n个数据

      Series (续)

      • 通过索引获取数据

      • ser_obj[idx]

      • 索引与数据的对应关系仍保持在数组运算的结果中

      • 通过dict构建Series

      • name属性

      • ser_obj.name, ser_obj.index.name

      DataFrame

      • 类似多维数组/表格数据 (如,excel, R中的data.frame)

      • 每列数据可以是不同的类型,what about ndarray?

      • 索引包括列索引和行索引

      DataFrame

      • 通过ndarray构建DataFrame

      • 通过dict构建DataFrame

      • 通过列索引获取列数据(Series类型 )

      • df_obj[col_idx] 或 df_obj.col_idx

      • 增加列数据,类似dict添加key-value

      • df_obj[new_col_idx] = data

      • 删除列

      • del df_obj[col_idx]

      索引操作

      • DataFrame索引

      • 列索引

      • df_obj[‘label’]

      • 不连续索引

      • df_obj[[‘label1’, ‘label2’]]

      排序

      • sort_index,索引排序

      • 对DataFrame操作时注意轴方向

      • 按值排序

      • sort_values(by=‘label’)

      常用的统计计算

      • sum, mean, max, min…

      • axis=0 按列统计,axis=1按行统计

      • skipna 排除缺失值, 默认为True

      • idmax, idmin, cumsum

      统计描述

      • describe 产生多个统计数据

      新增功能:数据清洗;利用Pandas进行数据可视化

      • 处理缺失数据

      dropna() 丢弃缺失数据

      fillna() 填充缺失数据

      • 数据过滤

      df[filter_condition] 依据filter_condition对数据进行过滤

      Pandas数据可视化

      Pandas提供了内建的绘图功能(基于matplotlib)

      • plot(kind, x, y, title, figsize)

      x, y 横纵坐标对应的数据列

      title图像名称

      figsize图像尺寸

      • 保存图片

      plt.savefig()

      • 更多例子请参考:https://pandas.pydata.org/pandas-docs/stable/visualization.html

  • wps office 的官方下载的地址是多少(wps office免费版破解版电脑)

      1 简介

      networkx是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。

      利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络绘制等。

      networkx支持创建简单无向图、有向图和多重图(multigraph);内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用。

      networkx以图(graph)为基本数据结构。图既可以由程序生成,也可以来自在线数据源,还可以从文件与数据库中读取。

      安装

      安装的话,跟其他包的安装差不多,用的是anaconda就不用装了。其他就用pip install networkx。

      查看版本:

      升级

      下面配合使用的一些库,可以选择性安装:

      后面可能用到pygraphviz,安装方法如下(亲测有效):

      windows的安装参考这篇博客:

      https://blog.csdn.net/fadai1993/article/details/82491657#2____linux_9

      安装cv2:

      支持四种图

      Graph:无多重边无向图DiGraph:无多重边有向图MultiGraph:有多重边无向图MultiDiGraph:有多重边有向图

      空图对象的创建方式

      绘制网络图基本流程

      导入networkx,matplotlib包建立网络绘制网络 nx.draw()建立布局 pos = nx.spring_layout美化作用

      networkx 提供画图的函数

      draw(G,[pos,ax,hold])draw_networkx(G,[pos,with_labels])draw_networkx_nodes(G,pos,[nodelist])绘制网络G的节点图draw_networkx_edges(G,pos[edgelist])绘制网络G的边图draw_networkx_edge_labels(G, pos[, …]) 绘制网络G的边图,边有label

      —有layout 布局画图函数的分界线—draw_circular(G, **kwargs) Draw the graph G with a circular layout.draw_random(G, **kwargs) Draw the graph G with a random layout.draw_spectral(G, **kwargs)Draw the graph G with a spectral layout.draw_spring(G, **kwargs)Draw the graph G with a spring layout.draw_shell(G, **kwargs) Draw networkx graph with shell layout.draw_graphviz(G[, prog])Draw networkx graph with graphviz layout.

      networkx 画图函数里的一些参数

      pos(dictionary, optional): 图像的布局,可选择参数;如果是字典元素,则节点是关键字,位置是对应的值。如果没有指明,则会是spring的布局;也可以使用其他类型的布局,具体可以查阅networkx.layoutarrows :布尔值,默认True; 对于有向图,如果是True则会画出箭头with_labels: 节点是否带标签(默认为True)ax:坐标设置,可选择参数;依照设置好的Matplotlib坐标画图nodelist:一个列表,默认G.nodes(); 给定节点edgelist:一个列表,默认G.edges();给定边node_size: 指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)node_color: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如’r’为红色,'b’为绿色等,具体可查看手册),用“数据字典”赋值的时候必须对字典取值(.values())后再赋值node_shape: 节点的形状(默认是圆形,用字符串’o’标识,具体可查看手册)alpha: 透明度 (默认是1.0,不透明,0为完全透明)cmap:Matplotlib的颜色映射,默认None; 用来表示节点对应的强度vmin,vmax:浮点数,默认None;节点颜色映射尺度的最大和最小值linewidths:[None|标量|一列值];图像边界的线宽width: 边的宽度 (默认为1.0)edge_color: 边的颜色(默认为黑色)edge_cmap:Matplotlib的颜色映射,默认None; 用来表示边对应的强度edge_vmin,edge_vmax:浮点数,默认None;边的颜色映射尺度的最大和最小值style: 边的样式(默认为实现,可选: solid|dashed|dotted,dashdot)labels:字典元素,默认None;文本形式的节点标签font_size: 节点标签字体大小 (默认为12)font_color: 节点标签字体颜色(默认为黑色)node_size:节点大小font_weight:字符串,默认’normal’font_family:字符串,默认’sans-serif’

      布局指定节点排列形式

      circular_layout:节点在一个圆环上均匀分布random_layout:节点随机分布shell_layout:节点在同心wps 的官网下载的入口怎么找圆上分布spring_layout: 用Fruchterman-Reingold算法排列节点,中心放射状分布spectral_layout:根据图的拉普拉斯特征向量排列节点

      布局也可用pos参数指定,例如,nx.draw(G, pos = spring_layout(G)) 这样指定了networkx上以中心放射状分布.

      2 Graph-无向图

      如果添加的节点和边是已经存在的,是不会报错的,NetworkX会自动忽略掉已经存在的边和节点的添加。

      节点

      常用函数

      nodes(G):在图节点上返回一个迭代器number_of_nodes(G):返回图中节点的数量all_neighbors(graph, node):返回图中节点的所有邻居non_neighbors(graph, node):返回图中没有邻居的节点common_neighbors(G, u, v):返回图中两个节点的公共邻居

      

      边

      常用函数

      edges(G[, nbunch]):返回与nbunch中的节点相关的边的视图number_of_edges(G):返回图中边的数目non_edges(graph):返回图中不存在的边

      

      使用邻接迭代器遍历每一条边

      属性

      属性诸如weight,labels,colors,或者任何对象,都可以附加到图、节点或边上。对于每一个图、节点和边都可以在关联的属性字典中保存一个(多个)键-值对wps免费版的下载地方的方法。默认情况下这些是一个空的字典,但是可以增加或者是改变这些属性。

      图的属性

      节点的属性

      边的属性

      有向图和无向图互转

      有向图和多重图的基本操作与无向图一致。

      无向图与有向图之间可以相互转换,转化方法如下:

      3 DiGraph-有向图

      

      

      一些精美的图例子

      环形树状图

      

      权重图

       wps的官网的下载的入口在哪里(wps官网下载不了)

      Giant Component

       wps的免费版的下载地址怎么找

      Random Geometric Graph 随机几何图

      

      节点颜色渐变

      

      边的颜色渐变

      

      Atlas

      

      画个五角星

      

      Club

       wps官网的下载地址的方法

      画一个多层感知机

      

      绘制一个DNN结构图

      可以看到,在代码中已经设置好了这22个神经元以及它们之间的连接情况,但绘制出来的结构如却是这样的:

      

      这显然不是想要的结果,因为各神经的连接情况不明朗,而且很多神经都挤在了一起,看不清楚。之所以出现这种情况,是因为没有给神经元设置坐标,导致每个神经元都是随机放置的。

      接下来,引入坐标机制,即设置好每个神经元节点的坐标,使得它们的位置能够按照事先设置好的来放置,其Python代码如下:

      

      可以看到,在代码中,通过pos字典已经规定好了每个神经元节点的位置。

      接下来,需要对这个框架图进行更为细致地修改,需要修改的地方为:

      去掉神经元节点的标签;添加模型层的文字注释(比如Input layer)

      其中,第二步的文字注释,我们借助opencv来完成。完整的Python代码如下:

      

      一些图论算法

      最短路径

      函数调用:wps官网的下载地址在哪里

      dijkstra_path(G, source, target, weight=‘weight’) ————求最短路径

      dijkstra_path_length(G, source, target, weight=‘weight’) ————求最短距离

      

      输出:

      问题

      本人在pycharm中运行下列程序:

      发现在Pycharm下使用matploylib库绘制3D图的时候,在最后需要显示图像的时候,每当输入plt.show() 都会报错

      网上的解决方案:

      File -> Setting -> Tools -> Python Scientific中去掉对Show plots in tool window的勾选就好了

      一些其他神经网络绘制工具列表

      名称描述推荐指数Python+Graphvizgraphviz的python版本(亲测)****PlotNeuralNet第一步生成tex文件,然后调用LaTeX命令行生成图形(亲测)****NetworkX这是个专门的复杂网络图的Python包****Matplotlib’s Viznet利用Matplotlib的Viznet****LaTeX tikz绘制网络结点图的tikz库***Graphviz专业绘图软件,dot描述语言***Inkscape属于绘图软件***Omnigraffle由The Omni Group制作的一款绘图软件***netron支持ONNX (.onnx, .pb, .pbtxt), Keras (.h5, .keras),wps office免费版的下载的方法是什么 CoreML (.mlmodel), Caffe2 (predict_net.pb, predict_net.pbtxt), MXNet (.model, -symbol.json) and TensorFlow Lite (.tflite),在前面链接处下载文件,在这里演示***TensorBoard配合Tensorflow一起使用的***Keras自带plot方法,例子,也需要安装graphviz,pydot等***Netscope for Caffe只支持Caffe格式,例子***draw_convnet这个其实是利用Matplotlib的绘图功能写了一个Python脚本**dnngraph仅使用于Caffe框架**ConvNetDraw灵活性差,没有更新了**

      上面都是一些这个网络库使用的一点总结,更多内容可以参考下面的官方链接。

      参考

      官方教程:https://networkx.github.io/documentation/stable/_downloads/networkx_reference.pdf官方网站:https://networkx.github.io/documentation/latest/index.html官方githu博客:http://networkx.github.io/用Python的networkx绘制精美网络图networkx整理Networkx使用指南论文中绘制神经网络工具汇总networkx + Cytoscape 构建及可视化网络图用python+graphviz/networkx画目录结构树状图

  • wps office 的官方的下载网站在哪(金山wps官网最新报名入口在哪)

      Django 是用python语言写的开源web开发框架,并遵循MVC设计。

      Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。

      对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。

      提供项目工程管理的自动化脚本工具

      数据库ORM支持(对象关系映射,英语:ObjectWPS office官网最新的下载的入口是什么 Relational Mapping)

      模板

      表单

      Admin管理站点

      文件管理

      认证权限

      session机制 缓存

      有一种程序设计模式叫MVC,其核心思想是分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。

      MVC的全拼为Model-View-Controller,最早由TrygveReenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式,是为了将传统的输入(input)、处理(processing)、输出(output)任务运用到图形化用户交互模型中而设计的。随着标准输入输出设备的出现,开发人员只需要将精力集中在业务逻辑的分析与实现上。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。现在虽然不再使用原来的分工方式,但是这种分工的思想被沿用下来,广泛应用于软件工程中,是一种典型并且应用广泛的软件架构模式。后来,MVC的思想被应用在了Web开发方面,被称为Web MVC框架。

      Django的MVT

      Django框架(入门超细笔记 创建项目步骤 )_django创建项目-CSDN博客

      3.1、在cmd中输入命令

      pip install virtualenv

      3.2、创建虚拟环境

      3.2.1、新建文件夹 DjangoSpace

      

      3.2.2、执行命令 virtualenv venv(虚拟环境目录名称可以任意)

      

      

      3.2.3 、在虚拟环境中安装Django框架

      进入到DjangoSpacevenvScripts目录下执行:

      

      安装成功后
    wps office 官方下载地方是什么
      

      例如:创建一个学生管理系统

      django-admin startproject studentsystem

      

      

      

      与项目同名的目录,此处为studentsystem。

      settings.py 是项目的整体配置文件。

      urls.py是项目的URL配置文件。

      wsgi.py是项目与WSGI兼容的Web服务器入口。

      manage.py是项目管理文件,通过它管理项目

      在开发阶段,为了能够快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用。

      先设置用户:

      python manage.py migrate

      

      运行服务器命令:

      python manage.py runserver ip:端口

      或:python manage.py runserver

      

      注意:如果电脑有酷狗音乐一定要关掉,它有可能会占8000这个端口

      

      django默认工作在调式Debug模式下,如果增加、修改、删除文件,服务器会自动重启

      按ctrl+c停止服务器

      在Web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该模块代码整体复制过去,达到复用。

      Django的视图编写是放在子应用中的。

      在Django中,创建子应用模块的仍然可以通过命令来操作,即

      python manage.py startapp 子应用名称

      manage.py为上述创建工程时自动生成的管理文件。

      例如,在刚才创建的studentsystem工程中,想要创建一个用户student子应用模块,可执行:

      python manage.py startapp student

      

      查看此时的工程目录,结构如下:

      

      admin.py    文件跟网站的后台管理站点配置相关。

      apps.py      文件用于配置当前子应用的相关信息。

      migrations  目录用于存放数据库迁移历史文件。

      models.py  文件用户保存数据库模型类。

      tests.py      文件用于开发测试用例,编写单元测试。

      views.py     文件用于编写Web应用视图函数。

      

      创建出来的子应用目录文件虽然被放到了工程项目目录中,但是django工程并不能立即直接使用该子应用,需要注册安装后才能使用。

      在工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用,初始工程中的INSTALLED_APPS如下:

      

      注册安装一个子应用的方法,即是将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中。

      例如,将刚创建的book子应用添加到工程中,可在INSTALLED_APPS列表中添加'book.apps.BookConfig'。

      

      

      用pycharm打开

      

      创建好后

       创建项目之前首先要安装Django和pymysql

      pip install Django

      pip install pymysql

      当前项目的开发, 都是数据驱动的。

      以下为书籍信息管理的数据关系:书籍和人物是 :一对多关系

      

      要先分析出项目中所需要的数据, 然后设计数据库表.

      书籍信息表

      字段名字段类型字段说明idAutoField主键nameCharField书名

      idname1西游记2三国演义

      人物信息表

      字段名字段类型字段说明idAutoField主键nameCharField人名genderBooleanField性别bookForeignKey外键

      idnamegenderbook1孙悟空False12白骨精True13曹操False24貂蝉True2

      使用Django进行数据库开发的提示

      设计模式中的, 专门负责和数据库交互.对应由于中内嵌了, 所以不需要直接面向数据库编程.而是定义模型类, 通过完成数据库表的.就是把数据库表的行与相应的对象建立关联, 互相转换.使得数据库的操作面向对象.

      定义模型类 模型迁移操作数据库

      根据书籍表结构设计模型类:

      模型类:BookInfo书籍名称字段:name

      根据人物表结构设计模型类:

      模型类:PeopleInfo人物姓名字段:name人物性别字段:gender外键约束:book

      外键要指定所属的模型类

      说明 :

      书籍-人物的关系为一对多. 一本书中可以有多个英雄.不需要定义主键字段, 在生成表时会自动添加, 并且值为自增长.

      根据数据库表的设计

      在中定义模型类,继承自

      迁移由两步完成

      生成迁移文件:根据模型类生成创建表的语句

      python manage.py makemigrations

      执行迁移:根据第一步生成的语句在数据库中创建表

      迁移前

      

      迁移后

      

      

      提示:默认采用数据库来存储数据

      注意事项

       解决办法

      

      注意事项

      

      

      看不到数据库表解决办法

       wps office 的官方的下载的地方是什么

      运行

      

      中文显示(改后刷新页面)

      

      站点: 分为和两部分内容发布的部分由网站的管理员负责查看、添加、修改、删除数据能够根据定义的模型类自动地生成管理模块使用的管理模块, 需要按照如下步骤操作 :

      1.管理界面本地化2.创建管理员3.注册模型类4.发布内容到数据库

      本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化.中国大陆地区使用, 时区使用, 注意这里不使用北京时区.

      本地化前

      本地化后

      创建管理员的命令

      python manage.py createsuperuser

      按提示输入用户名、邮箱、密码

      注意:要用超级管理员  admin  Zw23456..!

      重置密码

      python manager.py changepassword 用户名

      

      登陆站点

      需要服务器是启动状态

      登陆站点成功

      站点界面中没有书籍和人物管理入口,因为没有注册模型类

      在的文件中注册模型类

      需要导入模型模块  

      注册模型后

      注册模型成功后, 就可以在站点管理界面方便快速的管理数据.

      发布内容后,优化模型类展示

      

      

      站点管理页面做好了, 接下来就要做的页面了.对于的设计框架.

      用户在URL中请求的是视图.视图接收请求后进行处理.并将处理的结果返回给请求者.使用视图时需要进行两步操作

      1.定义视图2.配置URLconf

      视图就是一个函数,被定义在的中.视图的第一个参数是类型的对象,包含了所有.视图必须返回,包含返回给请求者的.

      需要导入模块 :

      定义视图函数 : 响应字符串给客户端

      思考 : 如何才能让请求找到视图?

      查找视图的过程 :

      1.请求者在浏览器地址栏中输入URL, 请求到网站.2.网站获取URL信息.3.然后与编写好的URLconf逐条匹配.4.如果匹配成功则调用对应的视图.

      5.如果所有的URLconf都没有匹配成功.则返回404错误.

      入口

      需要两步完成配置

      1.在中定义2.在中定义

      在中定义

      在中定义

      提示:一条包括URL规则、视图两部分

      URL规则使用正则表达式定义.

      视图就是在中定义的视图函数

      url匹配过程

      

      视图处理过程如下图:

      使用视图时需要进行两步操作,两步操作不分先后

      配置在中定义视图

      

      思考 : 网站如何向客户端返回一个漂亮的页面呢?

      提示 :

      漂亮的页面需要、、.可以把这一堆字段串全都写到视图中, 作为的参数,响应给客户端.

      问题 :

      视图部分代码臃肿, 耦合度高.这样定义的字符串是不会出任何效果和错误的.效果无法及时查看.有错也不容易及时发现.

      设想 :

      是否可以有一个专门定义前端页面的地方, 效果可以及时展示,错误可以及时发现,并且可以降低模块间耦合度!

      解决问题 :模板

      设计模式中的,

      在中, 将前端的内容定义在模板中, 然后再把模板交给视图调用, 各种漂亮、炫酷的效果就出现了.

      1.创建模板2.设置模板查找路径3.模板接收视图传入的数据4.模板处理数据

      1.创建模板

      在同级目录下创建模板文件夹. 文件夹名称固定写法.在文件夹下, 创建同名文件夹. 例,

      在同名文件夹下创建文件. 例 :

      

      2.设置模板查找路径

      

      3.模板接收视图传入的数据

      视图模板加载

      

      4.模板处理数据

      

      

      5. 查看模板处理数据成果

      

      总结

      

      

      实现步骤

      1.创建视图2.创建模板3.配置URLconf

      1.创建视图

      查询数据库数据构造上下文

      传递上下文到模板

      2.创建模板

      读取上下文数据构造网页html文档 : 书籍信息以列表样式展示

      3.配置URLconf

      进入中的文件

      1. BASE_DIR

      当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径。

      2. DEBUG

      调试模式,创建工程后初始值为True,即默认工作在调试模式下。

      作用:

      修改代码文件,程序自动重启

      Django程序出现异常时,向前端显示详细的错误追踪信息,例如

      

      而非调试模式下,仅返回Server Error (500)

      注意:部署线上运行的Django不要运行在调式模式下,记得修改DEBUG=False和ALLOW_HOSTS。

      

      3、静态文件

      项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径。静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理。

      为了提供静态文件,需要配置两个参数:

      STATICFILES_DIRS存放查找静态文件的目录STATIC_URL访问静态文件的URL前缀

      示例

      1) 在项目根目录下创建static目录来保存静态文件。

      

      2) 在bookmanager/settings.py中修改静态文件的两个参数为

      3)此时在static添加的任何静态文件都可以使用网址/static/文件在static中的路径来访问了。

      

      例如,我们向static目录中添加一个index.html文件,在浏览器中就可以使用127.0.0.1:8000/static/index.html来访问。

      或者我们在static目录中添加了一个子目录和文件book/detail.html,在浏览器中就可以使用127.0.0.1:8000/static/book/detail.html来访问。

      4、App应用配置

      

      在每个应用目录中都包含了apps.py文件,用于保存该应用的相关信息。

      在创建应用时,Django会向apps.py文件中写入一个该应用的配置类,如

      我们将此类添加到工程settings.py中的INSTALLED_APPS列表中,表明注册安装具备此配置属性的应用。

      AppConfig.name属性表示这个配置类是加载到哪个应用的,每个配置类必须包含此属性,默认自动生成。

      AppConfig.verbose_name属性用于设置该应用的直观可读的名字,此名字在Django提供的Admin管理站点中会显示,如

      

      

      

      重点

      模型配置

      数据的增删改

      增: 和

      删: 和

      改: 和

      数据的查询

      基础查询

      F对象和Q对象

      关联查询

      查询集QuerySet

      

      1.创建项目

      django-admin startproject bookmanager01

      先设置用户:  python manage.py migrate

      2.创建应用

      python manage.py startapp book

      3. 运行开发服务器

      运行服务器命令:  python manage.py runserver ip:端口

      或:python manage.py runserver

      4.安装应用

      

      5.本地化

      

      6.创建管理员

      创建管理员命令:python manage.py createsuperuser

      

      7.模板路径

      在应用同级目录下,创建模板文件夹

      

      8.项目中匹配urls

      正则 : 路径只要不是就算匹配成功。并包含到应用中的

      

      9.准备视图

      

      10.应用中匹配

      应用中创建

      正则 : 路径中包含,就调用视图中对应的函数

      

      11.开启服务器, 测试项目

      进入项目文件中, 开启项目对应的服务器

      python manage.py runserver

      浏览器中输入网址 http://127.0.0.1:8000/booklist/

      

      在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。

      1、使用MySQL数据库首先需要安装驱动程序

      pip install PyMySQL

      在Django的工程同名子目录的__init__.py文件中添加如下语句

      

      作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。

      修改DATABASES配置信息

      

      在MySQL中创建数据库

      create database book charset=utf8;

      模型类被定义在"应用/models.py"文件中。模型类必须继承自Model类,位于包django.db.models中。

      1 定义

      在models.py 文件中定义模型类。

      1) 数据库表名

      模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名。

      可通过db_table指明数据库表名。

      2) 关于主键

      django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

      默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

      3) 属性命名限制

      不能是python的保留关键字。不允许使用连续的下划线,这是由django的查询方式决定的。

      定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:

      属性 = models.字段类型(选项)

      4)字段类型

      类型说明AutoField自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性BooleanField布尔字段,值为True或FalseNullBooleanField支持Null、True、False三种值CharField字符串,参数max_length表示最大字符个数TextField大文本字段,一般超过4000个字符时使用IntegerField整数DecimalField十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数FloatField浮点数DateField日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误TimeField时间,参数同DateFieldDateTimeField日期时间,参数同DateFieldFileField上传文件字段ImageField继承于FileField,对上传的内容进行校验,确保是有效的图片

      5) 选项

      选项说明null如果为True,表示允许为空,默认值是Falseblank如果为True,则该字段允许为空白,默认值是Falsedb_column字段的名称,如果未指定,则使用属性的名称db_index若值为True, 则在表中会为此字段创建索引,默认值是Falsedefault默认primary_key若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用unique如果为True, 这个字段在表中必须有唯一值,默认值是False

      null是数据库范畴的概念,blank是表单验证范畴的

      6) 外键

      在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量:

      CASCADE级联,删除主表数据时连通一起删除外键表中数据

      PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据

      SET_NULL设置为NULL,仅在该字段null=True允许为null时可用

      SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用

      SET()设置为特定值或者调用特定方法

      DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常

      2 迁移

      将模型类同步到数据库中。

      1)生成迁移文件

      python manage.py makemigrations

      2)同步到数据库中

      python manage.py migrate

      3 添加测试数据

      1、shell工具

      Django的manage工具提供了shell命令,帮助我们配置好当前工程的运行环境(如连接好数据库等),以便可以直接在终端中执行测试python语句。

      通过如下命令进入shell

      python manage.py shell

      导入两个模型类,以便后续使用

      from book.models import BookInfo,PeopleInfo

      BookInfo.objects.all()

      2 查看MySQL数据库日志

      查看mysql数据库日志可以查看对数据库的操作记录。 mysql日志文件默认没有产生,需要做如下配置:

      vi /etc/mysql/mysql.conf.d/mysqld.cnf

      把68,69行前面的#去除,然后保存并使用如下命令重启mysql服务。

      service mysql restart

      使用如下命令打开mysql日志文件。

      tail -f /var/log/mysql/mysql.log     # 可以实时查看数据库的日志内容

      # 如提示需要sudo权限,执行

      # sudo tail -f /var/log/mysql/mysql.log

      1 增加

      增加数据有两种方法。

      1)save(方法一)

      通过创建模型类对象,执行对象的save()方法保存到数据库中。

      

      2)create(方法二)

      通过模型类.objects.create()保存。

      

      2 修改

      修改更新有两种方法

      1)save(方法一)

      修改模型类对象的属性,然后执行save()方法

      

      2)update(方法二)

      使用模型类.objects.filter().update(),会返回受影响的行数

      

      3 删除

      删除有两种方法

      1)模型类对象delete

      2)模型类.objects.filter().delete()

      

      基础条件查询

      1 基本查询

      get   查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。

      all    查询多个结果。

      count    查询结果数量。

      

       

      2 过滤查询

      实现SQL中的where功能,包括

      filter        过滤出多个结果

      exclude   排除掉符合条件剩下的结果

      get         过滤单一结果

      对于过滤条件的使用,上述三个方法相同,故仅以filter进行讲解。

      过滤条件的表达语法如下:

      # 语法形式: filter(属性名称__比较运算符 = 值)

      # 属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线

      1)相等

      exact:表示判等。

      例:查询编号为1的图书。

      

      2)模糊查询

      contains:是否包含。

      说明:如果要包含%无需转义,直接写即可。

      例:查询书名包含'湖'的图书。

      

      startswith、endswith:以指定值开头或结尾。

      例:查询书名以'部'结尾的图书

      

      以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith

      3) 空查询

      isnull:是否为null。

      例:查询书名为空的图书。

      

      4) 范围查询

      in:是否包含在范围内。

      例:查询编号为1或3或5的图书

      

      5)比较查询

      gt    大于 (greater then)

      gte  大于等于 (greater then equal)

      lt     小于 (less then)

      lte   小于等于 (less then equal)

      例:查询编号大于3的图书

      

      不等于的运算符,使用exclude()过滤器。

      例:查询编号不等于3的图书

      

      6)日期查询

      year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。

      例:查询1980年发表的图书。

      

      例:查询1990年1月1日后发表的图书。

       注意事项

      

      3、F和Q对象

      F对象

      之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢?

      答:使用F对象,被定义在django.db.models中。

      语法:    F(属性名)

      例:查询阅读量大于等于评论量的图书。

      

      可以在F对象上使用算数运算。

      例:查询阅读量大于2倍评论量的图书。

      

      Q对象

      多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。

      例:查询阅读量大于20,并且编号小于3的图书。

      

      如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。

      语法:    Q(属性名__运算符=值)

      例:查询阅读量大于20的图书,改写为Q对象如下。

      

      Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。

      例:查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现

      

      Q对象前可以使用~操作符,表示非not。

      例:查询编号不等于3的图书。

      

      4、聚合函数和排序函数
    wps的免费版下载的地方怎么找
      1. 聚合函数

      使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg平均,Count数量,Max最大,Min最小,Sum求和,被定义在django.db.models中。

      例:查询图书的总阅读量。

      

      注意aggregate的返回值是一个字典类型,格式如下:

      {'属性名__聚合类小写':值}

      如:{'readcount__sum': 298}

      使用count时一般不使用aggregate()过滤器。

      例:查询图书总数。

      

      注意count函数的返回值是一个数字。

      2. 排序

      使用order_by对结果进行排序

      

      5、关联查询

      查询书籍为1的所有人物信息

      查询人物为1的书籍信息

      由一到多的访问语法:

      一对一的模型类对象.多对一的模型类名小写_set
    WPS office官网最新的下载网址怎么找
      例:

      

      由多到一的访问语法:

      多对应的模型类对象.多对应的模型类中的关系类属性名

      例:

      

      访问一对一的模型类关联对象的id语法:

      多对一的模型类对象.关联类属性_id

      例:

      

      

      关联过滤查询

      由多模型类条件查询一模型类数据:

      语法如下:

      关联模型类名小写__属性名__条件运算符=值

      注意:如果没有"__运算符"部分,表示等于。

      例:

      查询图书,要求图书人物为"郭靖"

      

      查询图书,要求图书中人物的描述包含"八"

      

      由一模型类条件查询多模型类数据:

      语法如下:

      一模型类关联属性名__一模型类属性名__条件运算符=值

      注意:如果没有"__运算符"部分,表示等于。

      例:

      查询书名为“天龙八部”的所有人物。

      

      查询图书阅读量大于30的所有人物

      

      6、查询集QuerySet

      1 概念

      Django的ORM中存在查询集的概念。

      查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。

      当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表):

      all()                  返回所有数据。

      filter()               返回满足条件的数据。

      exclude()         返回满足条件之外的数据。

      order_by()        对结果进行排序。

      对查询集可以再次调用过滤器进行过滤,如

      

      也就意味着查询集可以含有零个、一个或多个过滤器。过滤器基于所给的参数限制查询的结果。

      从SQL的角度讲,查询集与select语句等价,过滤器像where、limit、order by子句。

      判断某一个查询集中是否有数据:

      exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。

      2 两大特性

      1)惰性执行

      创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用

      例如,当执行如下语句时,并未进行数据库查询,只是创建了一个查询集books

      继续执行遍历迭代操作后,才真正的进行了数据库的查询

      

      2)缓存

      使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。

      情况一:如下是两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互,增加了数据库的负载。

      

      情况二:经过存储后,可以重用查询集,第二次使用缓存中的数据。

      

      3 限制查询集

      可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。

      注意:不支持负数索引。

      对查询集进行切片后返回一个新的查询集,不会立即执行查询。

      如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。

      示例:获取第1、2项,运行查看。

      

      4 分页

      重点

      HttpRequest

      位置参数和关键字参数查询字符串请求体:表单数据,JSON数据请求头

      HttpResponse

      HttpResponse

      JsonResponse

      redirect

      类视图

      类视图的定义和使用

      类视图装饰器(难点)

      

      视图介绍

      视图就是中文件中的函数视图的第一个参数必须为,还可能包含下参数如

      通过正则表达式组获取的位置参数通过正则表达式组获得的关键字参数视图必须返回一个或作为响应

      子对象:  视图负责接受Web请求,进行逻辑处理,返回Web响应给请求者

      响应内容可以是,,,…

      视图处理过程如下图:

      

      使用视图时需要进行两步操作,两步操作不分先后

      配置在中定义视图

      项目准备

      创建项目+创建应用+安装应用+配置模板路径+本地化+mysql数据库+URLconf+视图

      安装应用

      mysql数据库使用之前的book

      

      URLconf

      中:指定url配置

      项目中:只要不是就匹配成功,包含到应用中的

      应用中:匹配成功就调用中的函数,测试项目逻辑

      视图:测试项目逻辑

      在models.py 文件中定义模型类

      1)生成迁移文件

      python manage.py makemigrations

      2)同步到数据库中

      python manage.py migrate

      3)添加测试数据

      注意:改变IP地址方式

      浏览者 通过在浏览器的地址栏中输入网址请求网站

      对于Dja ngo开发的网站,由哪一个视图进行处理请求,是由url匹配找到的

      配置URLconf

      1.中

      指定url配置

      ROOT_URLCONF = '项目.urls'

      

      2.项目中

      匹配成功后,包含到应用的

      

      3.应用中

      匹配成功后,调用对应的函数

      url(正则, views.函数名)

      

      4.提示

      1. 正则部分推荐使用 r,表示字符串不转义,这样在正则表达式中使用 只写一个就可以

      2. 不能在开始加反斜杠,推荐在结束加反斜杠

      正确:path/

      正确:path

      错误:/path

      错误:/path/

      3. 请求的url被看做是一个普通的python字符串,进行匹配时不包括域名、get或post参数

      3.1 如请求地址如:http://127.0.0.1:8000/18/?a=10

      3.2 去掉域名和参数部分后,只剩下如下部分与正则匹配 18/

      说明:

      虽然路由结尾带/能带来上述好处,但是却违背了HTTP中URL表示资源位置路径的设计理念。

      是否结尾带/以所属公司定义风格为准。

      在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息。

      1) 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如

      命名空间表示,凡是book.urls中定义的路由,均属于namespace指明的book名下。

      命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。

      2) 在定义普通路由时,可以使用name参数指明路由的名字,如

      使用reverse函数,可以根据路由名称,返回具体的路径,如:

      对于未指明namespace的,reverse(路由name)对于指明namespace的,reverse(命名空间namespace:路由name)

      

      

      利用HTTP协议向服务器传参有几种途径?

      提取URL的特定部分,如/weather/beijing/2018,可以在服务器端的路由中用正则表达式截取;查询字符串(query string),形如key1=value1&key2=value2;请求体(body)中发送的数据,比如表单数据、json、xml;在http报文的头(header)中。

      如果想从URL中获取值,需要在正则表达式中使用,获取值分为两种方式

      位置参数

      参数的位置不能错关键字参数

      参数的位置可以变,跟关键字保持一致即可注意:两种参数的方式不要混合使用,在一个正则表达式中只能使用一种参数方式分别使用以上两种获取URL值的方式提取出

      

      位置参数(推荐使用)WPS office官网下载的入口

      应用中

      视图中函数: 参数的位置不能错

      ​​​​​关键字参数

      应用中

      其中部分表示为这个参数定义的名称为

      可以是其它名称,起名要做到见名知意

      视图中函数: 参数的位置可以变,跟关键字保持一致即可

      

      HttpRequest对象的属性GET、POST都是QueryDict类型的对象

      与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况

      方法get():根据键获取值

      如果一个键同时拥有多个值将获取最后一个值

      如果键不存在则返回None值,可以设置默认值进行后续处理

      方法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值

      如果键不存在则返回空列表[],可以设置默认值进行后续处理

      

      获取请求路径中的查询字符串参数(形如?k1=v1&k2=v2),可以通过request.GET属性获取,返回QueryDict对象。

      重要:查询字符串不区分请求方式,即假使客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据。

      注意:QueryDict  已普通的字典形式来获取 一键多值的时候 只能获取最后的一个

      

      请求体数据格式不固定,可以是表单类型字符串,可以是JSON字符串,可以是XML字符串,应区别对待。

      可以发送请求体数据的请求方式有 POST、PUT、PATCH、DELETE。

      

      Django默认开启了CSRF防护,会对上述请求方式进行CSRF防护验证,在测试时可以关闭CSRF防护机制,方法为在settings.py文件中注释掉CSRF中间件,如:

      

      4.1 表单类型 Form Data

      前端发送的表单类型的请求体数据,可以通过request.POST属性获取,返回QueryDict对象。

       

      4.2 非表单类型 Non-Form Data

      非表单类型的请求体数据,Django无法自动解析,可以通过request.body属性获取最原始的请求体数据,自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型。

      例如要获取请求体中的如下JSON数据

      可以进行如下方法操作:

      可以通过request.META属性获取请求头headers中的数据,request.META为字典类型。

      常见的请求头如:

      – The length of the request body (as a string).– The MIME type of the request body.– Acceptable content types for the response.– Acceptable encodings for the response.– Acceptable languages for the response.– The HTTP Host header sent by the client.– The referring page, if any.– The client’s user-agent string.– The query string, as a single (unparsed) string.– The IP address of the client.– The hostname of the client.– The user authenticated by the Web server, if any.– A string such asor.– The hostname of the server.– The port of the server (as a string).

      具体使用如:

      method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'。user:请求的用户对象。path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。

      encoding:一个字符串,表示提交的数据的编码方式。

      如果为None则表示使用浏览器的默认设置,一般为utf-8。这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。

      FILES:一个类似于字典的对象,包含所有的上传文件。

      

      视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。

      可以使用django.http.HttpResponse来构造响应对象。

      也可通过HttpResponse对象属性来设置响应体、响应体数据类型、状态码:

      content:表示返回的内容。status_code:返回的HTTP响应状态码。

      响应头可以直接将HttpResponse对象当做字典进行响应头键值对的设置:

      

      示例:

      

      Django提供了一系列HttpResponse的子类,可以快速设置状态码

      HttpResponseRedirect 301HttpResponsePermanentRedirect 302HttpResponseNotModified 304HttpResponseBadRequest 400HttpResponseNotFound 404HttpResponseForbidden 403HttpResponseNotAllowed 405HttpResponseGone 410HttpResponseServerError 500

      若要返回json数据,可以使用JsonResponse来构造响应对象,作用:

      帮助我们将数据转换为json字符串设置响应头Content-Type为application/json

      

      

      浏览器请求服务器是无状态的。无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。无状态原因:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等实现状态保持主要有两种方式:

      在客户端存储信息使用在服务器端存储信息使用

      Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型记住用户名。

      Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。

      Cookie以键值对的格式进行信息的存储。Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息。当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器。

      

      1)设置Cookie

      可以通过HttpResponse对象中的set_cookie方法来设置cookie。

      max_age单位为秒,默认为None 。如果是临时cookie,可将max_age设置为None。

      示例:

       

      2)读取Cookie

      可以通过HttpResponse对象的COOKIES属性来读取本次请求携带的cookie值。request.COOKIES为字典类型。

      

      3)删除Cookie

      可以通过HttpResponse对象中的delete_cookie方法来删除。

      

      注意:

      

      

      

      Session 依赖于cookie,如果浏览器禁用了cookie,则session不能实现

      0.概念

      1.流程

      第一次请求:

      ① 我们第一次请求的时候可以携带一些信息(用户名/密码) cookie中没有任何信息

      ② 当我们的服务器接收到这个请求之后,进行用户名和密码的验证,验证没有问题可以设置session信息

      ③ 在设置session信息的同时(session信息保存在服务器端).服务器会在响应头中设置一个 sessionid 的cookie信息(由服务器自己设置的,不是我们设置的)

      ④ 客户端(浏览器)在接收到响应之后,会将cookie信息保存起来(保存sessionid的信息)

      第二次及其之后的请求:

      ⑤ 第二次及其之后的请求都会携带 session id信息

      ⑥ 当服务器接收到这个请求之后,会获取到sessionid信息,然后进行验证,验证成功,则可以获取 session信息(session信息保存在服务器端)

      2.效果

      3.从原理(http)角度

      第一次请求:

      ① 第一次请求,在请求头中没有携带任何cookie信息

      ② 我们在设置session的时候,session会做2件事.

      #第一件: 将数据保存在数据库中

      #第二件: 设置一个cookie信息,这个cookie信息是以 sessionid为key value为 xxxxx

      cookie肯定会以响应的形式在相应头中出现

      第二次及其之后的:

      ③ 都会携带 cookie信息,特别是 sessionid

      Django项目默认启用Session。

      可以在settings.py文件中查看,如图所示

      

      如需禁用session,将上图中的session中间件注释掉即可。

      在settings.py文件中,可以设置session数据的存储方式,可以保存在数据库、本地缓存等。

      2.1 数据库

      存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式。

      

      如果存储在数据库中,需要在项INSTALLED_APPS中安装Session应用。

      

      数据库中的表如图所示

      

      表结构如下

      

      由表结构可知,操作Session包括三个数据:键,值,过期时间。

      2.2 本地缓存

      存储在本机内存中,如果丢失则不能找回,比数据库的方式读写更快。

      2.3 混合存储

      优先从本机内存中存取,如果没有则从数据库中存取。

      2.4 Redis

      在redis中保存session,需要引入第三方扩展,我们可以使用django-redis来解决。

      1) 安装扩展

      2)配置

      在settings.py文件中做如下设置

      注意

      如果redis的ip地址不是本地回环127.0.0.1,而是其他地址,访问Django时,可能出现Redis连接错误,如下:

      解决方法:修改redis的配置文件,添加特定ip地址。

      打开redis的配置文件

      在如下配置项进行修改(如要添加10.211.55.5地址)

      重新启动redis服务

      通过HttpRequest对象的session属性进行会话的读写操作。

      1) 以键值对的格式写session。

      2)根据键读取值。

      3)清除所有session,在存储中删除值部分。

      4)清除session数据,在存储中删除session的整条数据。

      5)删除session中的指定键及值,在存储中只删除某个键及对应的值。

      6)设置session的有效期

      如果value是一个整数,session将在value秒没有活动后过期。如果value为0,那么用户session的Cookie将在用户的浏览器关闭时过期。如果value为None,那么session有效期将采用系统默认值, 默认为两周,可以通过在settings.py中设置SESSION_COOKIE_AGE来设置全局默认值。

      

      第二次请求:

      问题1: 我换了浏览器,还能获取到 session信息吗? 不可以

      问题2: 我不换浏览器,删除session id ,则获取不到session数据

      问题3: 再去执行 set_sesison 的时候 会重新生成session id

      思考:一个视图,是否可以处理两种逻辑?比如get和post请求逻辑。

      如何在一个视图中处理get和post请求

      注册视图处理get和post请求

      以函数的方式定义的视图称为函数视图,函数视图便于理解。但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳。

      类视图使用

      在Django中也可以使用类来定义一个视图,称为类视图。

      使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义

      类视图的好处:

      代码可读性好类视图相对于函数视图有更高的复用性 , 如果其他地方需要用到某个类视图的某个特定逻辑,直接继承该类视图即可

      定义类视图需要继承自Django提供的父类View,可使用或者导入,定义方式如上所示。

      配置路由时,使用类视图的方法来添加。

      类视图的多继承重写dispatch

      使用面向对象多继承的特性。

      先找LoginRequiredMixin,后找View

      Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。

      我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。

      1)中间件的定义方法

      定义一个中间件工厂函数,然后返回一个可以被调用的中间件。

      中间件工厂函数需要接收一个可以调用的get_response对象。

      返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个request对象参数,返回一个response对象。

      例如,在book应用中新建一个middleware.py文件,

      定义好中间件后,需要在settings.py 文件中添加注册中间件

      定义一个视图进行测试

      执行结果

      ​wps office 的官方的下载的网址在哪(wps office下载好怎么做表格)

      注意:Django运行在调试模式下,中间件init部分有可能被调用两次。

      2)多个中间件的执行顺序

      在请求视图被处理前,中间件由上至下依次执行在请求视图被处理后,中间件由下至上依次执行

      示例:

      

      定义两个中间件

      注册添加两个中间件

      执行结果

      

      重点

      自带模板

      基本使用流程控制过滤器继承

      Jinja2模板

      配置

      CSRF

      原理

      如何防范

      在工程中创建模板目录templates。

      

      在settings.py配置文件中修改TEMPLATES配置项的DIRS值:

      在templates目录中新建一个模板文件,如index.html

      调用模板分为两步骤:

      找到模板 loader.get_template(模板文件在模板目录中的相对路径) -> 返回模板对象

      渲染模板 模板对象.render(context=None, request=None) -> 返回渲染后的html文本字符串 context 为模板变量字典,默认值为None request 为请求对象,默认值为None

      例如,定义一个视图

      Django提供了一个函数render可以简写上述代码。

      render(request对象, 模板文件路径, 模板数据字典)

      4.1 模板变量

      变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。

      语法如下: {{变量}}

      模板变量可以使python的内建类型,也可以是对象。

      4.2 模板语句

      1)for循环:

      

      2)if条件:

      <hr>

      {% if age > 10 %}

      大于10

      {% else %}

      等于10

      {% endif %}

      <hr>

      过滤器

      语法如下:

      使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。如果过滤器需要参数,则使用冒号:传递参数。

      列举几个如下:

      safe,禁用转义,告诉模板这个变量是安全的,可以解释执行

      length,长度,返回字符串包含字符的个数,或列表、元组、字典的元素个数。

      default,默认值,如果变量不存在时则返回默认值。

      date,日期,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:

      Y表示年,格式为4位,y表示两位的年。m表示月,格式为01,02,12等。d表示日, 格式为01,02等。j表示日,格式为1,2等。H表示时,24进制,h表示12进制的时。i表示分,为0-59。s表示秒,为0-59。

      模板继承

      

      

      jinja2介绍

      Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,尤其是Flask框架内置的模板语言

      由于django默认模板引擎功能不齐全,速度慢,所以我们也可以在Django中使用jinja2, jinja2宣称比django默认模板引擎快10-20倍。

      Django主流的第三方APP基本上也都同时支持Django默认模板及jinja2,所以要用jinja2也不会有多少障碍。

      安装jinja2模块

      Django配置jinja2

      在项目文件中创建 jinja2_env.py 文件

      2.在settings.py文件

      jinja2模板的使用绝大多数和Django自带模板一样

      

      jinja2自定义过滤器

      在jinja2_env.py文件中自定义过滤器

      拼为 ,译为 跨站请求伪造。指攻击者盗用了你的身份,以你的名义发送恶意请求。

      包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,WPS office的电脑版的下载网站怎么找转账……造成的问题:个人隐私泄露以及财产安全。

      CSRF攻击示意图

      客户端访问服务器时没有同服务器做安全验证

      防止 CSRF 攻击

      步骤

      在客户端向后端请求界面数据的时候,后端会往响应中的 cookie 中设置 csrf_token 的值在 Form 表单中添加一个隐藏的的字段,值也是 csrf_token在用户点击提交的时候,会带上这两个值向后台发起请求后端接受到请求,以会以下几件事件:

      从 cookie中取出 csrf_token从 表单数据中取出来隐藏的 csrf_token 的值进行对比如果比较之后两值一样,那么代表是正常的请求,如果没取到或者比较不一样,代表不是正常的请求,不执行下一步操作

      代码演示

      未进行 csrf 校验的 WebA

      后端代码实现

      前端登录页面代码

      前端转账页面代码

      运行测试,如果在未登录的情况下,不能直接进入转账页面,测试转账是成功的

      攻击网站B的代码

      后端代码实现

      前端代码实现

      运行测试,在用户登录网站A的情况下,点击网站B的按钮,可以实现伪造访问

      在网站A中实现 csrf_token 校验的流程

      导入生成 csrf_token 的函数

      在渲染转账页面的,做以下几件事情:

      生成 csrf_token 的值在返回转账页面的响应里面设置 csrf_token 到 cookie 中将 csrf_token 保存到表单的隐藏字段中

      在转账模板表单中添加 csrf_token 隐藏字段

      运行测试,进入到转账页面之后,查看 cookie 和 html 源代码

      

      在执行转账逻辑之前进行 csrf_token 的校验

      运行测试,用户直接在网站 A 操作没有问题,再去网站B进行操作,发现转账不成功,因为网站 B 获取不到表单中的 csrf_token 的隐藏字段,而且浏览器有同源策略,网站B是获取不到网站A的 cookie 的,所以就解决了跨站请求伪造的问题

      Django默认是开启CSRF的

      模板中设置 CSRF 令牌

  • wps官网最新下载的地方

      本次先使用Python撰写爬虫,将爬取的数据存入数据库最后使用pyecharts进行图表的绘制,可视化地展示58677个IP地址,包括IP地址分类,IP地址归属地分布,IP地址运营商分布。

      整体操作是基于Python,我的环境:

      Python3.8JetBrains PyCharm 2018.2.2 x64pyecharts 1.9.0

      WPS office的官网最新的下载入口怎么找在这里插入图片描述

      在这里插入图片描述

      这里说一句,数据抽取完了其实直接存入数据库即可,我这里是先存入txt文本文件,再读取文本文件写入了excel中,最后手动导入了MySQL数据库,有些多此一举了。

      1.查找接口

      在百度上搜索IP,百度会给我们提供一个IP138的查询接口

      在这里插入图片描述

      在输入框输入IP,打开F12开发者工具,点击查询按钮wps的免费版的下载网址的方法。

      在这里插入图片描述

      发现点完查询按钮后,浏览器向服务器发送了一个GET请求,服务器返回了一串jQuery字符串,其中data[0]中的location字段为我们需要的IP地址归属地、运营商信息使用空格分隔,请求接口为:

      https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=8.8.8.8&co=&resource_id=5809&t=1636340450159&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb=jQuery1102030225422148935555_1636339389380&_=1636339389385

      2.分析接口

      对接口参数进行分析,具体操作步骤是:每次删除一组参数,然后放到浏览器去访问,看服务器能否返回需要的数据。

      路径:https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php

      参数:

      query: 8.8.8.8 (要查询的IP地址,必传)

      co: (不知什么参数,可以不传)

      resource_id: 5809 (资源ID,必传)

      t: 1636341598109 (时间戳,可以不传)

      ie: utf8 (输入编码,可以不传)

      oe: gbk (输出编码,可以不传)

      cb: op_aladdin_callback (好像是回调参数,可以不传)

      format: json (返回值格式,可以不传)

      tn: baidu (提交搜索请求来源,可以不传)

      cb: jQuery1102030225422148935555_1636339389380 (返回值类型,可以不传)wps office 的官方的下载的地址怎么找

      _: 1636339389386 (也是时间戳,可以不传)

      3.确定接口

      经过第二步的操作,得到一个可用的接口,返回值类型为json字符串:

      https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=8.8.8.8&co=&resource_id=5809

      放到浏览器访问,能够得到下图中的结果:

      在这里插入图片描述

      (工具JSON-handle)

      1.1数据表

      数据表存储了IP、IP归属地、IP运营商信息。

      在这里插入图片描述

      1.2数据量

      一共存储了58677个IP地址信息(去重后)。

      在这里插入图片描述
    wps office 官方的下载的入口
      在这里插入图片描述

      这里将所有IP地址进行划分,分出来ABCDE类地址,划分规则如下图。可以看到A类地址占很大比例。

      在这里插入图片描述

      在这里插入图片描述

      将IP地址归属地信息可视化地标注在地图上(对归属地在国外的IP不做分析展示),山东的IP地址较多,共有12805个,其次是广东、香港、北京。

      什么,刚才的地图你没看出来广东、香港和北京占比也很大?那么请看下图。

      在这里插入图片描述

      在这里插入图片描述

      条形统计图可以清楚地表明各种数量的多少。

      在这里插入图片描述

      统计所有IP地址归属的运营商。通过上面的饼图,能看到教育网占比最大,其次是电信、阿里云。

      在这里插入图片描述

      条形统计图是用条形的长短来代表数量的大小,本文用于分析、展示IP运营商数量。

      本次使用Python的pyecharts绘制了饼图、条形图、地图,可视化地将IP地址归属地分布、运营商分布展示出来,代码量不大,pyecharts中都给封装好了,调用其中的接口函数就能够轻易实现,希望大家也动手做起来。如果喜欢这些Echarts图可以到蓝奏云下载。思路、代码方面有什么不足欢迎各位大佬指正、批评!觉得还可以的能点个赞嘛。

       wps的电脑版的下载的网站在哪在这里插入图片描述

  • wps电脑版的下载的入口怎么找

      按照普通的mean来求菜品的均价无法计算(中间可能会有重复的菜品);

      但按照类别对菜品进行分类获取的菜品是唯一的,这就用到了astype()方法并配合category(类别)来完成

      普通求法:

      在这里插入图片描述

      获得的count会有重复,这就会用到astype

      在这里插入图片描述

      在这里插入图片描述

      将本身的数据类型转换成符合条件的时间日期型,方便数据操作

      在这里插入图片描述

      序列的.dt方法其实就是datatime方法的转换

      在这里插入图片描述

      (1)groupby()方法

      groupby参数:

      在这里插入图片描述

      分组获取指定列对象

      在这里插入图片描述

      获取的是DataFrameGroupBy 对象

      但对于DataFrameGroupBy取出的就是SeriesGroupBy对象

      我们可以对分组后的对象进行一些操作:如均值

      在这里插入图片描述

      亦可以对分组后的对象进行一些聚合操作

      在这里插入图片描述

      说明:可以进行分组,分组后的所有列只能使用一种聚合函数操作

      注意:如果想让不同的列进行不同的聚合操作,需要写两次代码

      (1)agg()方法

      agg,aggregate 方法都支持对每个分组应用某函数,包括 Python 内置函数或自定义函数。 同时这两个方法能够也能够直接对 DataFrame 进行函数应用操作。在正常使用过程中,agg 函数和 aggregate 函数对 DataFrame 对象操作时功能几乎完全相 同,因此只需要掌握其中一个函数即可。它们的参数说明如下表

      在这里插入图片描述

      以我们之前的所学无法求不同列的均值,和等聚合操作;但利用agg方法我们可以来做个尝试

      求不同列的和

      在这里插入图片描述

      说明:agg函数解决了让不同的列可以进行不同的聚合操作

      ① 使用方法1

      对counts和amounts进行均值、求和操作

       WPS office电脑版的下载地址在哪里在这里插入图片描述

      ② 使用方法2

      对counts进行求和操作,对amounts进行均值操作

      wps官网的下载方法是什么在这里插入图片描述

      ③ 使用方法3

      对一个列进行多个聚合操作,

      在这里插入图片描述

      ④ 使用方法4

      实现将自定义函数作为聚合函数统计函数

      在这里插入图片描述

      (2)在分组的基础上进行聚合操作
    wps电脑版的下载入口的方法
      即DataFrameGroupBy.聚合操作

      在这里插入图片描述

      (3)apply()方法wps官网最新的下载的方法是什么

      注意:agg与apply的区别:

      主要区别在于

      apply是对整个表格中的数据进行聚合操作而agg方法可以让不同的字段应用不同的聚合函数

      相同之处就是:

      都可以对分组后的数据进行聚合操作

      在这里插入图片描述

      apply仅支持对某些列或所有数据进行聚合操作,但满足不了不同的列应用不同的聚合操作

      在这里插入图片描述

      因为参数是func,亦可以完成多个聚合操作

      在这里插入图片描述

      在分组后也可以使用apply进行聚合操作

      在这里插入图片描述

      (4)transform()方法

      transform 方法能够对整个 DataFrame 的所有元素进行操作。且 transform 方法只有一个 参数“func”,表示对 DataFrame 操作的函数。同时 transform 方法还能够对 DataFrame 分组后的对象 GroupBy 进行操作,可以实现组 内离差标准化等操作。若在计算离差标准化的时候结果中有 NaN,这是由于根据离差标准化公式,最大值和 最小值相同的情况下分母是 0。而分母为 0 的数在 Python 中表示为 NaN。

      func表名可以传入函数对其聚合操作,自定义函数进行离差标准化操作

       wps的官网的下载地址在哪里在这里插入图片描述

      ① 对于离差标准化

      agg/apply/transform都可以用来做离差标准化;因为参数中都有func,都可以自定义函数

      在这里插入图片描述

      注意:不能用分组后的数据来进行离差标准化;分组后取counts是一组一组的,不是一个一个的数据

      通过离差标准化可以计算方差或标准差

      衡量数据离散程度可以使用方差或标准差

      在这里插入图片描述

      不使用离差标准化会因为单位不同等原因造成方差的结果很大,对实际不符

      利用 pivot_table 函数可以实现透视表,pivot_table()函数的常用参数及其使用格式如下

      在这里插入图片描述

      pivot_table自带聚合函数mean操作(默认的)在不特殊指定聚合函数 aggfunc 时,会默认使用 numpy.mean 进行聚合运算,numpy.mean 会自动过滤掉非数值类型数据。可以通过指定 aggfunc 参数修改聚合函数。index相当于分组;如下面对order_id分组;和 groupby 方法分组的时候相同,pivot_table 函数在创建透视表的时候分组键 index 可 以有多个通过设置 columns 参数可以指定列分组当全部数据列数很多时,若只想要显示某列,可以通过指定 values 参数来实现。当某些数据不存在时,会自动填充 NaN,因此可以指定 fill_value 参数,表示当存在缺 失值时,以指定数值进行填充可以更改 margins 参数,查看汇总数据。

      在这里插入图片描述

      按order_id分组,并求均值

      如果想要指定聚合函数aggfunc=’'

      aggfunc=’'内置是字符串可以直接写聚合函数,但最好用numpy.方法;可以提示,防止写错

      在这里插入图片描述

      交叉表是一种特殊的透视表,主要用于计算分组频率。利用 pandas 提供的 crosstab 函数 可以制作交叉表,crosstab 函数的常用参数和使用格式如下

      在这里插入图片描述

      由于交叉表是透视表的一种,其参数基本保持一致,不同之处在于 crosstab 函数中的 index,columns,values 填入的都是对应的从 Dataframe 中取出的某一列。

      交叉表和透视表的index区别:交叉表index不能直接跟字段名‘order_id’,跟的是字段值detail[‘order_id’]

      在这里插入图片描述

      columns为对应列的所有数据作为交叉表的列,values是对应数量放在对应列下,aggfunc=numpy.sum是把分组order_id的所有内容加到一行

      在这里插入图片描述

      注意:drop_duplicates默认是对这一行的所有数据进行比对,完全一样才会骑去重;我们可以通过subset=[’’,’’]来指定几个字段去重

      inplace=False有返回值,不作用在原数据上;inplace=True无返回值,作用在原数据上

      对序列进行排序用sort_values

      在这里插入图片描述

      ascending有两个值:True和False,升序和降序

      注意:若是之前的表格改变,而且排序后再将值赋给表格会报错,可能是行缺失,可能是排序后值不匹配;所以用inplace=False

      mask.values为False的则不显示,True的显示。通过判断有多少行来求离职的,除以所有的,即为离职率

      在这里插入图片描述

      对一个序列对象如果单纯的想获取值,可以使用values属性

      根据上面的代码我们可以利用Boolean值相加减来获得离职的人数,以此来求离职率

      在这里插入图片描述

      这种方式取出为空,因为你没有索引让他列出值

  • wps电脑版的下载的地方是什么

      原文:

      译者:飞龙

      协议:CC BY-NC-SA 4.0

      原文:

      译者:飞龙

      协议:CC BY-NC-SA 4.0

    wps office免费版的下载地方怎么找
      此开放访问网络版本的《Python 数据分析第三版》现已作为印刷版和数字版的伴侣提供。如果您发现任何勘误,请在此处报告。请注意,由 Quarto 生成的本站点的某些方面与 O’Reilly 的印刷版和电子书版本的格式不同。

      如果您发现本书的在线版本有用,请考虑订购纸质版或无 DRM 的电子书以支持作者。本网站的内容不得复制或再生产。代码示例采用 MIT 许可,可在 GitHub 或 Gitee 上找到。

      读取数据并使其可访问(通常称为数据加载)是使用本书中大多数工具的必要第一步。术语解析有时也用于描述加载文本数据并将其解释为表格和不同数据类型。我将专注于使用 pandas 进行数据输入和输出,尽管其他库中有许多工具可帮助读取和写入各种格式的数据。

      输入和输出通常分为几个主要类别:读取文本文件和其他更高效的磁盘格式、从数据库加载数据以及与网络源(如 Web API)交互。

      pandas 提供了许多函数,用于将表格数据读取为 DataFrame 对象。表 6.1 总结了其中一些;是本书中最常用的之一。我们将在二进制数据格式中稍后查看二进制数据格式。

      表 6.1:pandas 中的文本和二进制数据加载函数

      函数描述从文件、URL 或类似文件的对象中加载分隔数据;使用逗号作为默认分隔符以固定宽度列格式读取数据(即没有分隔符)读取剪贴板中的数据的变体;用于将网页上的表格转换的有用工具从 Excel XLS 或 XLSX 文件中读取表格数据读取 pandas 写入的 HDF5 文件读取给定 HTML 文档中找到的所有表格从 JSON(JavaScript 对象表示)字符串表示、文件、URL 或类似文件的对象中读取数据读取 Feather 二进制文件格式读取 Apache ORC 二进制文件格式读取 Apache Parquet 二进制文件格式使用 Python pickle 格式读取由 pandas 存储的对象读取存储在 SAS 系统的自定义存储格式之一中的 SAS 数据集读取由 SPSS 创建的数据文件读取 SQL 查询的结果(使用 SQLAlchemy)读取整个 SQL 表(使用 SQLAlchemy);等同于使用选择该表中的所有内容的查询使用从 Stata 文件格式中读取数据集从 XML 文件中读取数据表

      我将概述这些函数的机制,这些函数旨在将文本数据转换为 DataFrame。这些函数的可选参数可能属于几个类别:

      索引

      可以将一个或多个列视为返回的 DataFrame,并确定是否从文件、您提供的参数或根本不获取列名。

      类型推断和数据转换

      包括用户定义的值转换和自定义缺失值标记列表。

      日期和时间解析

      包括一种组合能力,包括将分布在多个列中的日期和时间信息组合成结果中的单个列。

      迭代

      支持迭代处理非常大文件的块。

      不干净的数据问题

      包括跳过行或页脚、注释或其他像数字数据以逗号分隔的小事物。

      由于现实世界中的数据可能会很混乱,一些数据加载函数(特别是)随着时间的推移积累了很长的可选参数列表WPS office电脑版的下载的网站怎么找。对于不同参数的数量感到不知所措是正常的(大约有 50 个)。在线 pandas 文档有许多关于每个参数如何工作的示例,因此如果您在阅读特定文件时感到困惑,可能会有足够相似的示例帮助您找到正确的参数。

      其中一些函数执行类型推断,因为列数据类型不是数据格式的一部分。这意味着您不一定需要指定哪些列是数字、整数、布尔值或字符串。其他数据格式,如 HDF5、ORC 和 Parquet,将数据类型信息嵌入到格式中。

      处理日期和其他自定义类型可能需要额外的努力。

      让我们从一个小的逗号分隔值(CSV)文本文件开始:

      注意wps office的免费版的下载的地址

      这里我使用了 Unix 的 shell 命令将文件的原始内容打印到屏幕上。如果您使用 Windows,可以在 Windows 终端(或命令行)中使用代替来实现相同的效果。

      由于这是逗号分隔的,我们可以使用将其读入 DataFrame:

      文件不总是有标题行。考虑这个文件:

      要读取此文件,您有几个选项。您可以允许 pandas 分配默认列名,或者您可以自己指定名称:

      假设您希望列成为返回的 DataFrame 的索引。您可以使用参数指示您希望在索引 4 处或使用名称:

      如果要从多个列创建分层索引(在 Ch 8.1:分层索引中讨论),请传递列编号或名称的列表:

      在某些情况下,表格可能没有固定的分隔符,而是使用空格或其他模式来分隔字段。考虑一个看起来像这样的文本文件:

      虽然您可以手动进行一些数据处理,但这里的字段是由可变数量的空格分隔的。在这些情况下,您可以将正则表达式作为的分隔符传递。这可以通过正则表达式表示,因此我们有:

      由于列名比数据行数少一个,推断在这种特殊情况下第一列应该是 DataFrame 的索引。

      文件解析函数有许多额外的参数,可帮助您处理发生的各种异常文件格式(请参见表 6.2 中的部分列表)。例如,您可以使用跳过文件的第一、第三和第四行:

      处理缺失值是文件读取过程中重要且经常微妙的部分。缺失数据通常要么不存在(空字符串),要么由某个标记(占位符)值标记。默认情况下,pandas 使用一组常见的标记,例如和:

      请记住,pandas 将缺失值输出为,因此在中有两个空值或缺失值:

      选项接受一个字符串序列,用于添加到默认识别为缺失的字符串列表中:

      有许多默认的 NA 值表示列表,但这些默认值可以通过选项禁用:

      可以在字典中为每列指定不同的 NA 标记:

      表 6.2 列出了中一些经常使用的选项。

      表 6.2:一些函数参数

      参数描述指示文件系统位置、URL 或类似文件的字符串。或用于在每行中拆分字段的字符序列或正则表达式。用作列名的行号;默认为 0(第一行),但如果没有标题行,则应为。用作结果中行索引的列号或名称;可以是单个名称/编号或用于分层索引的列表。结果的列名列表。要忽略的文件开头的行数或要跳过的行号列表(从 0 开始)。要替换为 NA 的值序列。除非传递,否则它们将添加到默认列表中。是否使用默认的 NA 值列表(默认为)。用于将注释从行末分隔出来的字符。尝试解析数据为;默认为。如果为,将尝试解析所有列。否则,可以指定要解析的列号或名称的列表。如果列表的元素是元组或列表,则将多个列组合在一起并解析为日期(例如,如果日期/时间跨越两列)。如果连接列以解析日期,则保留连接的列;默认为。包含列号或名称映射到函数的字典(例如,将对列中的所有值应用函数)。在解析可能模糊的日期时,将其视为国际格式(例如,7/6/2012 -> 2012 年 6 月 7 日);默认为。用于解析日期的函数。从文件开头读取的行数(不包括标题)。返回一个用于逐步读取文件的对象。此对象也可以与语句一起使用。用于迭代的文件块的大小。要忽略的文件末尾行数。打印各种解析信息,如文件转换各阶段所花费的时间和内存使用信息。文本编码(例如,UTF-8 编码文本的)。如果为,默认为。如果解析的数据只包含一列,则返回一个 Series。千位分隔符(例如,或);默认为。数字中的小数分隔符(例如,或);默认为。要使用的 CSV 解析和转换引擎;可以是、或之一。默认为,尽管较新的引擎可以更快地解析一些文件。引擎速度较慢,但支持其他引擎不支持的一些功能。

      分块读取文本文件

      在处理非常大的文件或找出正确的参数集以正确处理大文件时,您可能只想读取文件的一小部分或迭代文件的较小块。

      在查看大文件之前,我们将 pandas 显示设置更加紧凑:

      现在我们有:

      省略号表示已省略数据框中间的行。

      如果您只想读取少量行(避免读取整个文件),请使用指定:

      要分块读取文件,指定一个作为行数的:

      由返回的对象允许您根据迭代文件的部分。例如,我们可以迭代,聚合列中的值计数,如下所示:

      然后我们有:

      还配备有一个方法,使您能够以任意大小读取文件的片段。

      将数据写入文本格式

      数据也可以导出为分隔格式。让我们考虑之前读取的一个 CSV 文件:

      使用 DataFrame 的 方法,我们可以将数据写入逗号分隔的文件:

      当然也可以使用其他分隔符(写入到 以便将文本结果打印到控制台而不是文件):

      缺失值在输出中显示为空字符串。您可能希望用其他标记值来表示它们:

      如果未指定其他选项,则将同时写入行标签和列标签。这两者都可以禁用:

      您还可以仅写入列的子集,并按您选择的顺序进行写入:

      处理其他分隔格式

      使用函数如 可以从磁盘加载大多数形式的表格数据。然而,在某些情况下,可能需要一些手动处理。接收到一个或多个格式错误的行可能会导致 出错。为了说明基本工具,考虑一个小的 CSV 文件:

      对于任何具有单字符分隔符的文件,您可以使用 Python 的内置 模块。要使用它,将任何打开的文件或类似文件的对象传递给 :

      像处理文件一样迭代读取器会产生去除任何引号字符的值列表:

      然后,您需要进行必要的整理以将数据放入所需的形式。让我们一步一步来。首先,我们将文件读取为行列表:

      然后我们将行分割为标题行和数据行:

      然后我们可以使用字典推导和表达式 创建数据列的字典(请注意,这将在大文件上使用大量内存),将行转置为列:

      CSV 文件有许多不同的风格。要定义一个具有不同分隔符、字符串引用约定或行终止符的新格式,我们可以定义一个简单的 的子类:

      我们还可以将单独的 CSV 方言参数作为关键字传递给 ,而无需定义子类:

      可能的选项( 的属性)及其作用可以在 表 6.3 中找到。

      表 6.3: CSV 选项

      参数描述用于分隔字段的单字符字符串;默认为 。用于写入的行终止符;默认为 。读取器会忽略这个并识别跨平台的行终止符。用于具有特殊字符(如分隔符)的字段的引用字符;默认为 。引用约定。选项包括 (引用所有字段)、(只有包含特殊字符如分隔符的字段)、 和 (不引用)。详细信息请参阅 Python 的文档。默认为 。忽略每个分隔符后的空格;默认为 。如何处理字段内的引用字符;如果为 ,则会加倍(请查看在线文档以获取完整的详细信息和行为)。如果 设置为 ,用于转义分隔符的字符串;默认情况下禁用。

      注意

      对于具有更复杂或固定多字符分隔符的文件,您将无法使用 模块。在这些情况下,您将需要使用字符串的 方法或正则表达式方法 进行行分割和其他清理。幸运的是,如果传递必要的选项, 能够几乎做任何您需要的事情,因此您很少需要手动解析文件。

      要 手动 写入分隔文件,可以使用 。它接受一个打开的可写文件对象以及与 相同的方言和格式选项:

      JSON 数据

      JSON(JavaScript 对象表示法的缩写)已经成为在 Web 浏览器和其他应用程序之间通过 HTTP 请求发送数据的标准格式之一。它是比 CSV 等表格文本形式更自由的数据格式。这里是一个例子:

      JSON 几乎是有效的 Python 代码,只是其空值和一些其他细微差别(例如不允许在列表末尾使用逗号)。基本类型是对象(字典)、数组(列表)、字符串、数字、布尔值和空值。对象中的所有键都必须是字符串。有几个 Python 库可用于读取和写入 JSON 数据。我将在这里使用,因为它内置在 Python 标准库中。要将 JSON 字符串转换为 Python 形式,请使用:

      ,另一方面,将 Python 对象转换回 JSON:

      如何将 JSON 对象或对象列表转换为 DataFrame 或其他数据结构以进行分析将取决于您。方便的是,您可以将字典列表(先前是 JSON 对象)传递给 DataFrame 构造函数并选择数据字段的子集:

      可以自动将特定排列的 JSON 数据集转换为 Series 或 DataFrame。例如:

      的默认选项假定 JSON 数组中的每个对象是表中的一行:

      有关阅读和操作 JSON 数据的扩展示例(包括嵌套记录),请参见第十三章:数据分析示例中的美国农业部食品数据库示例。

      如果您需要将数据从 pandas 导出为 JSON,一种方法是在 Series 和 DataFrame 上使用方法:

      XML 和 HTML:网络抓取

      Python 有许多用于读取和写入 HTML 和 XML 格式数据的库。示例包括 lxml、Beautiful Soup 和 html5lib。虽然 lxml 通常在一般情况下更快,但其他库可以更好地处理格式不正确的 HTML 或 XML 文件。

      pandas 有一个内置函数,它使用所有这些库自动将 HTML 文件中的表格解析为 DataFrame 对象。为了展示这是如何工作的,我下载了一个 HTML 文件(在 pandas 文档中使用)从美国联邦存款保险公司显示银行倒闭。¹首先,您必须安装一些使用的附加库:

      如果您没有使用 conda,也应该可以工作。

      函数有许多选项,但默认情况下它会搜索并尝试解析包含在标签中的所有表格数据。结果是一个 DataFrame 对象的列表:

      由于有许多列,pandas 会插入一个换行符。

      正如您将在后面的章节中了解到的那样,从这里我们可以继续进行一些数据清理和分析,比如计算每年的银行倒闭次数:

      使用解析 XML

      XML 是另一种常见的结构化数据格式,支持具有元数据的分层嵌套数据。您当前正在阅读的书实际上是从一系列大型 XML 文档创建的。

      之前,我展示了函数,它在底层使用 lxml 或 Beautiful Soup 来解析 HTML 中的数据。XML 和 HTML 在结构上相似,但 XML 更通用。在这里,我将展示如何使用 lxml 来解析更一般的 XML 格式中的数据的示例。

      多年来,纽约大都会交通管理局(MTA)以 XML 格式发布了许多关于其公交车和火车服务的数据系列。在这里,我们将查看性能数据,这些数据包含在一组 XML 文件中。每个火车或公交车服务都有一个不同的文件(例如Performance_MNR.xml用于 Metro-North Railroad),其中包含作为一系列 XML 记录的月度数据,看起来像这样:

      使用,我们解析文件并获取 XML 文件的根节点的引用:

      返回一个生成器,产生每个 XML 元素。对于每条记录,我们可以通过运行以下代码填充一个标签名称(如)到数据值(排除一些标签)的字典:

      最后,将这个字典列表转换为 DataFrame:

      pandas 的函数将此过程转换为一行表达式:

      对于更复杂的 XML 文档,请参考的文档字符串,其中描述了如何进行选择和过滤以提取感兴趣的特定表格。

      以二进制格式存储(或序列化)数据的一种简单方法是使用 Python 的内置模块。所有 pandas 对象都有一个方法,它以 pickle 格式将数据写入磁盘:

      Pickle 文件通常只能在 Python 中读取。您可以直接使用内置的读取存储在文件中的任何“pickled”对象,或者更方便地使用:

      注意

      仅建议作为短期存储格式。问题在于很难保证格式随时间稳定;今天使用 pickle 的对象可能无法在以后的库版本中解除 pickle。pandas 在可能的情况下尽力保持向后兼容性,但在将来的某个时候可能需要“破坏”pickle 格式。

      pandas 内置支持其他几种开源二进制数据格式,例如 HDF5、ORC 和 Apache Parquet。例如,如果安装包(),则可以使用读取 Parquet 文件:

      我将在 HDF5 格式使用中给出一些 HDF5 示例。我鼓励您探索不同的文件格式,看看它们的速度和对您的分析工作的适用性。

      读取 Microsoft Excel 文件

      pandas 还支持使用类或函数读取存储在 Excel 2003(及更高版本)文件中的表格数据。在内部,这些工具使用附加包和来分别读取旧式 XLS 和新式 XLSX 文件。这些必须使用 pip 或 conda 单独安装,而不是从 pandas 安装:

      要使用,请通过传递路径到或文件来创建一个实例:

      此对象可以显示文件中可用工作表名称的列表:

      可以使用将工作表中存储的数据读入 DataFrame:

      此 Excel 表具有索引列,因此我们可以使用参数指示:

      如果要在一个文件中读取多个工作表,则创建会更快,但您也可以简单地将文件名传递给:

      要将 pandas 数据写入 Excel 格式,必须首先创建一个,然后使用 pandas 对象的方法将数据写入其中:

      您还可以将文件路径传递给,避免使用:

      使用 HDF5 格式

      HDF5 是一种受尊敬的文件格式,用于存储大量科学数组数据。它作为一个 C 库可用,并且在许多其他语言中都有接口,包括 Java、Julia、MATLAB 和 Python。HDF5 中的“HDF”代表分层数据格式。每个 HDF5 文件可以存储多个数据集和支持的元数据。与更简单的格式相比,HDF5 支持各种压缩模式的即时压缩,使具有重复模式的数据能够更有效地存储。HDF5 可以是处理不适合内存的数据集的良好选择,因为您可以有效地读取和写入更大数组的小部分。

      要开始使用 HDF5 和 pandas,您必须首先通过使用 conda 安装包来安装 PyTables:

      注意

      请注意,PyTables 包在 PyPI 中称为“tables”,因此如果您使用 pip 安装,您将需要运行。

      虽然可以直接使用 PyTables 或 h5py 库访问 HDF5 文件,但 pandas 提供了一个简化存储 Series 和 DataFrame 对象的高级接口。类的工作方式类似于字典,并处理底层细节:

      然后可以使用相同类似字典的 API 检索 HDF5 文件中包含的对象:

      支持两种存储模式,和(默认为)。后者通常较慢,但支持使用特殊语法进行查询操作:

      是方法的显式版本,但允许我们设置其他选项,如存储格式。

      函数为您提供了这些工具的快捷方式:

      如果您愿意,可以删除您创建的 HDF5 文件,方法如下:

      注意

      如果您正在处理存储在远程服务器上的数据,如 Amazon S3 或 HDFS,使用设计用于分布式存储的不同二进制格式(如Apache Parquet)可能更合适。

      如果您在本地处理大量数据,我建议您探索 PyTables 和 h5py,看看它们如何满足您的需求。由于许多数据分析问题受 I/O 限制(而不是 CPU 限制),使用 HDF5 等工具可以大大加速您的应用程序。

      注意

      HDF5 不是数据库。它最适合于一次写入,多次读取的数据集。虽然数据可以随时添加到文件中,但如果多个写入者同时这样做,文件可能会损坏。

      许多网站都有提供数据源的公共 API,可以通过 JSON 或其他格式提供数据。有许多方法可以从 Python 访问这些 API;我推荐的一种方法是包,可以使用 pip 或 conda 进行安装:

      要在 GitHub 上找到 pandas 的最近 30 个问题,我们可以使用附加的库进行 HTTP 请求:

      在使用后,始终调用以检查 HTTP 错误是一个好习惯。

      响应对象的方法将返回一个包含解析后的 JSON 数据的 Python 对象,作为字典或列表(取决于返回的 JSON 是什么):

      由于检索到的结果基于实时数据,当您运行此代码时,您看到的结果几乎肯定会有所不同。

      中的每个元素都是一个包含 GitHub 问题页面上找到的所有数据的字典(评论除外)。我们可以直接将传递给并提取感兴趣的字段:

      通过一些努力,您可以创建一些更高级的接口,用于常见的 Web API,返回 DataFrame 对象以便进行更方便的分析。

      在商业环境中,许多数据可能不存储在文本或 Excel 文件中。基于 SQL 的关系数据库(如 SQL Server、PostgreSQL 和 MySQL)被广泛使用,许多替代数据库也变得非常流行。数据库的选择通常取决于应用程序的性能、数据完整性和可扩展性需求。

      pandas 有一些函数可以简化将 SQL 查询结果加载到 DataFrame 中。例如,我将使用 Python 内置的驱动程序创建一个 SQLite3 数据库:

      然后,插入一些数据行:

      大多数 Python SQL 驱动程序在从表中选择数据时返回一个元组列表:

      您可以将元组列表传递给 DataFrame 构造函数,但还需要列名,这些列名包含在游标的属性中。请注意,对于 SQLite3,游标的仅提供列名(其他字段,这些字段是 Python 的数据库 API 规范的一部分,为),但对于其他一些数据库驱动程序,提供了更多的列信息:

      这是一种相当复杂的操作,您不希望每次查询数据库时都重复。SQLAlchemy 项目是一个流行的 Python SQL 工具包,它抽象了 SQL 数据库之间的许多常见差异。pandas 有一个函数,可以让您轻松地从通用的 SQLAlchemy 连接中读取数据。您可以像这样使用 conda 安装 SQLAlchemy:

      现在,我们将使用 SQLAlchemy 连接到相同的 SQLite 数据库,并从之前创建的表中读取数据:

      获取数据通常是数据分析过程中的第一步。在本章中,我们已经介绍了一些有用的工具,这些工具应该可以帮助您入门。在接下来的章节中,我们将深入探讨数据整理、数据可视化、时间序列分析等主题。

      完整列表请参见。

      原文:

      译者:飞龙

      协议:CC BY-NC-SA 4.0

      此开放访问网络版本的《Python 数据分析第三版》现已作为印刷版和数字版的伴侣提供。如果您发现任何勘误,请在此处报告。请注意,由 Quarto 生成的本站点的某些方面与 O’Reilly 的印刷版和电子书版本的格式不同。

      如果您发现本书的在线版本有用,请考虑订购纸质版或无 DRM 的电子书以支持作者。本网站的内容不得复制或再生产。代码示例采用 MIT 许可,可在 GitHub 或 Gitee 上找到。

      在进行数据分析和建模过程中,大量时间花费在数据准备上:加载、清理、转换和重新排列。这些任务通常被报告为占据分析师 80%或更多的时间。有时,文件或数据库中存储数据的方式并不适合特定任务。许多研究人员选择使用通用编程语言(如 Python、Perl、R 或 Java)或 Unix 文本处理工具(如 sed 或 awk)对数据进行自发处理,从一种形式转换为另一种形式。幸运的是,pandas 与内置的 Python 语言功能一起,为您提供了一套高级、灵活和快速的工具,使您能够将数据转换为正确的形式。

      如果您发现在本书或 pandas 库中找不到的数据操作类型,请随时在 Python 邮件列表或 pandas GitHub 网站上分享您的用例。事实上,pandas 的设计和实现很大程度上是由真实应用程序的需求驱动的。

      在本章中,我讨论了有关缺失数据、重复数据、字符串操作和其他一些分析数据转换的工具。在下一章中,我将专注于以各种方式组合和重新排列数据集。

      缺失数据在许多数据分析应用中很常见。pandas 的目标之一是尽可能地使处理缺失数据变得轻松。例如,默认情况下,pandas 对象上的所有描述性统计都排除缺失数据。

      pandas 对象中表示缺失数据的方式有些不完美,但对于大多数真实世界的用途来说是足够的。对于数据类型,pandas 使用浮点值(Not a Number)表示缺失数据。

      我们称之为标记值:当存在时,表示缺失(或空)值:

      方法为我们提供一个布尔 Series,其中值为空时为:

      在 pandas 中,我们采用了 R 编程语言中使用的惯例,将缺失数据称为 NA,代表不可用。在统计应用中,NA 数据可能是不存在的数据,也可能是存在但未被观察到的数据(例如通过数据收集问题)。在清理数据进行分析时,通常重要的是对缺失数据本身进行分析,以识别数据收集问题或由缺失数据引起的数据潜在偏差。

      内置的 Python 值也被视为 NA:

      pandas 项目已经尝试使处理缺失数据在不同数据类型之间保持一致。像这样的函数抽象了许多烦人的细节。请参阅表 7.1 以获取与处理缺失数据相关的一些函数列表。

      表 7.1:NA 处理对象方法

      方法描述根据每个标签的值是否具有缺失数据来过滤轴标签,对于可以容忍多少缺失数据有不同的阈值。使用某个值或插值方法(如 或 )填充缺失数据。返回指示哪些值缺失/NA 的布尔值。 的否定,对于非 NA 值返回 ,对于 NA 值返回 。

      过滤缺失数据

      有几种过滤缺失数据的方法。虽然您始终可以选择使用 和布尔索引手动执行,但 可能会有所帮助。对于 Series,它返回仅具有非空数据和索引值的 Series:

      这与执行以下操作相同:

      对于 DataFrame 对象,有不同的方法可以删除缺失数据。您可能希望删除所有 NA 的行或列,或者仅删除包含任何 NA 的行或列。 默认情况下会删除包含缺失值的任何行:

      传递 将仅删除所有 NA 的行:

      请记住,这些函数默认情况下返回新对象,不会修改原始对象的内容。

      要以相同方式删除列,请传递 :

      假设您只想保留包含至多一定数量缺失观察的行。您可以使用 参数指示这一点:

      填充缺失数据

      与过滤缺失数据(并可能连同其他数据一起丢弃)不同,您可能希望以任意方式填补任意数量的“空洞”。对于大多数情况, 方法是要使用的主要函数。通过使用常量调用 可以用该值替换缺失值:

      通过字典调用 ,您可以为每列使用不同的填充值:

      可用于重新索引的相同插值方法(请参见 表 5.3)也可用于 :

      使用 ,您可以做很多其他事情,比如使用中位数或平均统计数据进行简单的数据填充:

      请参见 表 7.2 了解 函数参数的参考。

      表 7.2: 函数参数

      参数描述用于填充缺失值的标量值或类似字典的对象插值方法:可以是 (向后填充)或 (向前填充)之一;默认为 填充的轴( 或 );默认为 对于向前和向后填充,最大连续填充周期数

      到目前为止,在本章中,我们一直关注处理缺失数据。过滤、清理和其他转换是另一类重要操作。

      删除重复项

      DataFrame 中可能会出现重复行,原因有很多。这里是一个例子:

      DataFrame 方法 返回一个布尔 Series,指示每行是否为重复行(其列值与较早行中的值完全相等):

      相关地, 返回一个 DataFrame,其中过滤掉 数组为 的行:

      默认情况下,这两种方法都考虑所有列;或者,您可以指定任何子集来检测重复项。假设我们有一个额外的值列,并且只想基于 列过滤重复项:

      和 默认保留第一个观察到的值组合。传递 将返回最后一个:

      使用函数或映射转换数据

      对于许多数据集,您可能希望根据数组、Series 或 DataFrame 中的值执行一些基于值的转换。考虑收集的关于各种肉类的假设数据:

      假设您想要添加一个指示每种食物来自哪种动物的列。让我们写下每种不同肉类到动物种类的映射:

      Series 上的 方法(也在 Ch 5.2.5: 函数应用和映射 中讨论)接受一个包含映射的函数或类似字典的对象,用于对值进行转换:

      我们也可以传递一个执行所有工作的函数:

      使用 是执行逐元素转换和其他数据清理相关操作的便捷方式。

      替换值

      使用 方法填充缺失数据是更一般的值替换的特殊情况。正如您已经看到的, 可以用于修改对象中的一部分值,但 提供了一种更简单、更灵活的方法。让我们考虑这个 Series:

      值可能是缺失数据的标记值。要用 pandas 理解的 NA 值替换这些值,可以使用 ,生成一个新的 Series:

      如果您想一次替换多个值,可以传递一个列表,然后是替代值:

      要为每个值使用不同的替代值,传递一个替代列表:

      传递的参数也可以是一个字典:

      注意

      方法与 是不同的,后者执行逐元素的字符串替换。我们将在本章后面的 Series 中查看这些字符串方法。

      重命名轴索引

      与 Series 中的值类似,轴标签也可以通过函数或某种形式的映射进行类似转换,以生成新的、不同标记的对象。您还可以在原地修改轴,而不创建新的数据结构。这是一个简单的例子:

      与 Series 一样,轴索引具有 方法:

      您可以分配给 属性,直接修改 DataFrame:

      如果要创建一个转换后的数据集副本而不修改原始数据集,一个有用的方法是 :

      值得注意的是, 可以与类似字典的对象一起使用,为轴标签的子集提供新值:

      可以避免手动复制 DataFrame 并为其 和 属性分配新值的繁琐工作。

      离散化和分箱

      连续数据通常被离散化或以其他方式分成“箱子”进行分析。假设您有一组人的研究数据,并且想要将它们分成离散的年龄段:

      让我们将这些分成 18 至 25 岁、26 至 35 岁、36 至 60 岁,最后是 61 岁及以上的箱子。为此,您必须使用 :

      pandas 返回的对象是一个特殊的分类对象。您看到的输出描述了 计算的箱。每个箱由一个特殊的(对于 pandas 是唯一的)区间值类型标识,其中包含每个箱的下限和上限:

      请注意, 是 结果的箱计数。

      在区间的字符串表示中,括号表示一侧是 开放的(排除的),而方括号表示一侧是 闭合的(包含的)。您可以通过传递 来更改哪一侧是闭合的:

      通过将列表或数组传递给 选项,可以覆盖默认的基于区间的箱标签:

      如果将整数数量的箱传递给 而不是显式的箱边界,它将基于数据中的最小值和最大值计算等长的箱。考虑一下一些均匀分布的数据被分成四等份的情况:

      选项将小数精度限制为两位数。

      一个与之密切相关的函数 ,根据样本分位数对数据进行分箱。根据数据的分布,使用 通常不会导致每个箱具有相同数量的数据点。由于 使用样本分位数,因此您将获得大致相同大小的箱:

      类似于 ,您可以传递自己的分位数(介于 0 和 1 之间的数字):

      我们将在本章后面的聚合和分组操作讨论中再次回到和,因为这些离散化函数对于分位数和分组分析特别有用。

      检测和过滤异常值

      过滤或转换异常值主要是应用数组操作的问题。考虑一个包含一些正态分布数据的 DataFrame:

      假设您想要查找绝对值超过 3 的某一列中的值:

      要选择所有值超过 3 或-3 的行,您可以在布尔 DataFrame 上使用方法:

      在周围的括号是必要的,以便在比较操作的结果上调用方法。

      可以根据这些标准设置值。以下是将值限制在区间-3 到 3 之外的代码:

      语句根据中的值是正数还是负数产生 1 和-1 值:

      排列和随机抽样

      通过使用函数,可以对 Series 或 DataFrame 中的行进行排列(随机重新排序)。调用并传入您想要排列的轴的长度会产生一个整数数组,指示新的排序:

      然后可以将该数组用于基于的索引或等效的函数:

      通过使用调用,我们还可以选择列的排列:

      要选择一个不带替换的随机子集(同一行不能出现两次),可以在 Series 和 DataFrame 上使用方法:

      要生成一个带有替换的样本(允许重复选择),请将传递给:

      计算指示/虚拟变量

      另一种用于统计建模或机器学习应用的转换类型是将分类变量转换为虚拟或指示矩阵。如果 DataFrame 中的一列有个不同的值,您将得到一个包含所有 1 和 0 的列的矩阵或 DataFrame。pandas 有一个函数可以做到这一点,尽管您也可以自己设计一个。让我们考虑一个示例 DataFrame:

      在这里,我传递了以将输出类型从布尔值(pandas 较新版本中的默认值)更改为浮点数。

      在某些情况下,您可能希望在指示 DataFrame 的列中添加前缀,然后将其与其他数据合并。有一个用于执行此操作的前缀参数:

      方法将在下一章中详细解释。

      如果 DataFrame 中的一行属于多个类别,则我们必须使用不同的方法来创建虚拟变量。让我们看一下 MovieLens 1M 数据集,该数据集在 Ch 13:数据分析示例中有更详细的研究:

      pandas 实现了一个特殊的 Series 方法(以开头的方法将在字符串操作中更详细地讨论),处理了将多个组成员身份编码为分隔字符串的情况:

      然后,与之前一样,您可以将此与组合,同时在 DataFrame 的列名中添加,使用方法:

      注意

      对于更大的数据,使用这种构建具有多个成员身份的指示变量的方法并不特别快速wps office 官方下载地址是什么(wps下载电脑版免费官网)。最好编写一个直接写入 NumPy 数组的低级函数,然后将结果包装在 DataFrame 中。

      在统计应用中的一个有用的技巧是将与像这样的离散化函数结合使用:*

      我们稍后将再次查看,在为建模创建虚拟变量中。

      注意

      这是一个较新且更高级的主题,许多 pandas 用户不需要了解太多,但我在这里完整地介绍它,因为在接下来的章节中我将引用和使用扩展数据类型。

      pandas 最初是建立在 NumPy 的基础上的,NumPy 是一个主要用于处理数值数据的数组计算库。许多 pandas 概念,如缺失数据,是使用 NumPy 中可用的内容实现的,同时尽量在使用 NumPy 和 pandas 的库之间最大程度地保持兼容性。

      基于 NumPy 的构建存在许多缺点,例如:

      对于一些数值数据类型,如整数和布尔值,缺失数据处理是不完整的。因此,当这些数据中引入缺失数据时,pandas 会将数据类型转换为,并使用表示空值。这导致许多 pandas 算法中出现了微妙的问题。

      具有大量字符串数据的数据集在计算上是昂贵的,并且使用了大量内存。

      一些数据类型,如时间间隔、时间增量和带时区的时间戳,如果不使用计算昂贵的 Python 对象数组,将无法有效支持。

      最近,pandas 开发了一个扩展类型系统,允许添加新的数据类型,即使它们在 NumPy 中没有原生支持。这些新数据类型可以被视为与来自 NumPy 数组的数据同等重要。

      让我们看一个例子,我们创建一个带有缺失值的整数 Series:

      主要出于向后兼容的原因,Series 使用了使用数据类型和表示缺失值的传统行为。我们可以使用来创建这个 Series:

      输出表示扩展类型数组中的值缺失。这使用了特殊的标记值:

      我们也可以使用缩写来指定类型,而不是。大写是必需的,否则它将是一个基于 NumPy 的非扩展类型:

      pandas 还有一种专门用于字符串数据的扩展类型,不使用 NumPy 对象数组(需要安装 pyarrow 库):

      这些字符串数组通常使用更少的内存,并且在对大型数据集进行操作时通常更高效。

      另一个重要的扩展类型是,我们将在 Categorical Data 中更详细地讨论。截至本文撰写时,可用的扩展类型的相对完整列表在表 7.3 中。

      扩展类型可以传递给 Series 的方法,允许您在数据清理过程中轻松转换:

      表 7.3:pandas 扩展数据类型

      扩展类型描述可空布尔数据,传递字符串时使用分类数据类型,传递字符串时使用带时区的日期时间32 位可空浮点数,传递字符串时使用64 位可空浮点数,传递字符串时使用8 位可空有符号整数,传递字符串时使用16 位可空有符号整数,传递字符串时使用32 位可空有符号整数,传递字符串时使用64 位可空有符号整数,传递字符串时使用8 位可空无符号整数,传递字符串时使用16 位可空无符号整数,传递字符串时使用32 位可空无符号整数,传递字符串时使用

      | | 64 位可空无符号整数,在传递为字符串时使用 |

      Python 长期以来一直是一种流行的原始数据处理语言,部分原因是它易于用于字符串和文本处理。大多数文本操作都可以通过字符串对象的内置方法简化。对于更复杂的模式匹配和文本操作,可能需要使用正则表达式。pandas 通过使您能够简洁地在整个数据数组上应用字符串和正则表达式,另外处理了缺失数据的烦恼。

      Python 内置字符串对象方法

      在许多字符串处理和脚本应用程序中,内置字符串方法已经足够。例如,逗号分隔的字符串可以使用分割成多个部分:

      通常与结合使用以修剪空格(包括换行符):

      这些子字符串可以使用加法和双冒号分隔符连接在一起:

      但这并不是一种实用的通用方法。更快速和更符合 Python 风格的方法是将列表或元组传递给字符串上的方法:

      其他方法涉及定位子字符串。使用 Python 的关键字是检测子字符串的最佳方法,尽管也可以使用和:

      请注意,和之间的区别在于,如果未找到字符串,会引发异常(而不是返回-1):

      相关地,返回特定子字符串的出现次数:

      将一个模式的出现替换为另一个。通常也用于通过传递空字符串来删除模式:

      请参阅表 7.4 以获取 Python 的一些字符串方法列表。

      正则表达式也可以与许多这些操作一起使用,您将看到。

      表 7.4:Python 内置字符串方法

      方法描述返回字符串中子字符串的非重叠出现次数如果字符串以后缀结尾,则返回如果字符串以前缀开头,则返回用作分隔符将字符串用于连接其他字符串序列如果在字符串中找到传递的子字符串,则返回第一个出现的起始索引;否则,如果未找到,则引发返回字符串中第一个出现的子字符串的第一个字符的位置;类似于,但如果未找到则返回-1返回字符串中最后出现的子字符串的第一个字符的位置;如果未找到则返回-1用另一个字符串替换字符串的出现修剪空格,包括右侧、左侧或两侧的换行符使用传递的分隔符将字符串拆分为子字符串列表将字母字符转换为小写将字母字符转换为大写将字符转换为小写,并将任何区域特定的可变字符组合转换为一个通用的可比较形式分别左对齐或右对齐;用空格(或其他填充字符)填充字符串的对侧,以返回具有最小宽度的字符串

      正则表达式

      正则表达式提供了一种灵活的方式来在文本中搜索或匹配(通常更复杂的)字符串模式。单个表达式,通常称为regex,是根据正则表达式语言形成的字符串。Python 的内置模块负责将正则表达式应用于字符串;我将在这里给出一些示例。

      注意

      编写正则表达式的艺术可能是一个单独的章节,因此超出了本书的范围。互联网和其他书籍上有许多优秀的教程和参考资料。

      模块的函数分为三类:模式匹配、替换和拆分。当然,这些都是相关的;正则表达式描述了要在文本中定位的模式,然后可以用于许多目的。让我们看一个简单的例子:假设我们想要使用可变数量的空白字符(制表符、空格和换行符)来拆分字符串。

      描述一个或多个空白字符的正则表达式是 :

      当您调用 时,正则表达式首先被 编译,然后在传递的文本上调用其 方法。您可以使用 自己编译正则表达式,形成一个可重用的正则表达式对象:

      如果您想要获取与正则表达式匹配的所有模式的列表,可以使用 方法:

      注意

      为了避免在正则表达式中使用 进行不必要的转义,请使用 原始 字符串字面量,如 ,而不是等效的 。

      如果您打算将相同的表达式应用于许多字符串,强烈建议使用 创建一个正则表达式对象;这样可以节省 CPU 周期。

      和 与 密切相关。虽然 返回字符串中的所有匹配项,但 只返回第一个匹配项。更严格地说, 仅 在字符串开头匹配。作为一个不太琐碎的例子,让我们考虑一个文本块和一个能够识别大多数电子邮件地址的正则表达式:

      在文本上使用 会产生一个电子邮件地址列表:

      为文本中的第一个电子邮件地址返回一个特殊的匹配对象。对于前面的正则表达式,匹配对象只能告诉我们模式在字符串中的起始和结束位置:

      返回 ,因为它只会匹配如果模式出现在字符串的开头时:

      相关地, 将返回一个新字符串,其中模式的出现被新字符串替换:

      假设您想要查找电子邮件地址,并同时将每个地址分成三个组件:用户名、域名和域后缀。为此,请在模式的部分周围加上括号以进行分段:

      由此修改后的正则表达式生成的匹配对象将使用其 方法返回模式组件的元组:

      当模式有组时, 返回一个元组列表:

      还可以使用特殊符号如 和 访问每个匹配中的组。符号 对应于第一个匹配组, 对应于第二个,依此类推:

      Python 中的正则表达式还有很多内容,其中大部分超出了本书的范围。表 7.5 提供了一个简要总结。

      表 7.5:正则表达式方法

      方法描述返回字符串中所有非重叠匹配模式的列表类似于 ,但返回一个迭代器在字符串开头匹配模式,并可选择将模式组件分段;如果模式匹配,则返回一个匹配对象,否则返回 扫描字符串以查找与模式匹配的内容,如果匹配,则返回一个匹配对象;与 不同,匹配可以出现在字符串的任何位置,而不仅仅是在开头在每次模式出现时将字符串分割成片段

      | | 用替换表达式替换字符串中所有 () 或前 次出现 () 的模式;使用符号 来引用替换字符串中的匹配组元素 |

      pandas 中的字符串函数

      清理混乱的数据集以进行分析通常需要大量的字符串操作。为了使事情更加复杂,包含字符串的列有时会有缺失数据:

      可以将字符串和正则表达式方法应用于每个值(传递 或其他函数)使用 ,但它将在 NA(空值)上失败。为了应对这一情况,Series 具有面向数组的字符串操作方法,可以跳过并传播 NA 值。这些方法通过 Series 的 属性访问;例如,我们可以使用 检查每个电子邮件地址中是否包含 :

      请注意,此操作的结果具有 类型。pandas 具有提供对字符串、整数和布尔数据进行专门处理的扩展类型,这些类型在处理缺失数据时一直存在一些问题:

      更详细地讨论了扩展类型,请参阅扩展数据类型。

      也可以使用正则表达式,以及任何 选项,如 :

      有几种进行矢量化元素检索的方法。可以使用 或索引到 属性:

      您也可以使用以下语法对字符串进行切片:

      方法将返回正则表达式的捕获组作为 DataFrame:

      查看更多 pandas 字符串方法,请参阅表 7.6。

      表 7.6: Series 字符串方法的部分列表

      方法描述逐元素连接字符串,可选分隔符如果每个字符串包含模式/正则表达式,则返回布尔数组计算模式的出现次数使用具有组的正则表达式从字符串 Series 中提取一个或多个字符串;结果将是一个每组一列的 DataFrame对每个元素等同于 对每个元素等同于 计算每个字符串的模式/正则表达式的所有出现的列表索引到每个元素(检索第 i 个元素)等同于内置的 等同于内置的 等同于内置的 等同于内置的 等同于内置的 等同于内置的 等同于内置的 使用传递的分隔符连接 Series 中每个元素的字符串计算每个字符串的长度转换大小写;对每个元素等同于 或 对每个元素使用传递的正则表达式的 ,返回是否匹配的 或 在字符串的左侧、右侧或两侧添加空格等同于 复制值(例如, 相当于对每个字符串执行 )用其他字符串替换模式/正则表达式的出现对 Series 中的每个字符串进行切片按分隔符或正则表达式拆分字符串从两侧修剪空白,包括换行符修剪右侧的空白

      | | 修剪左侧的空白 |

      本节介绍了 pandas 的 类型。我将展示如何通过使用它在某些 pandas 操作中实现更好的性能和内存使用。我还介绍了一些工具,这些工具可能有助于在统计和机器学习应用中使用分类数据。

      背景和动机

      通常,表中的一列可能包含较小一组不同值的重复实例。我们已经看到了像 和 这样的函数,它们使我们能够从数组中提取不同的值并分别计算它们的频率:

      许多数据系统(用于数据仓库、统计计算或其他用途)已经开发了专门的方法来表示具有重复值的数据,以实现更高效的存储和计算。在数据仓库中,最佳实践是使用所谓的维度表,其中包含不同的值,并将主要观察结果存储为引用维度表的整数键:

      我们可以使用方法恢复原始的字符串 Series:

      这种整数表示被称为分类或字典编码表示。不同值的数组可以称为数据的类别、字典或级别。在本书中,我们将使用术语分类和类别。引用类别的整数值称为类别代码或简称代码。

      在进行分析时,分类表示可以显著提高性能。您还可以在保持代码不变的情况下对类别执行转换。一些可以以相对较低的成本进行的示例转换包括:

      重命名类别

      追加一个新类别而不改变现有类别的顺序或位置

      pandas 中的分类扩展类型

      pandas 具有专门的扩展类型,用于保存使用基于整数的分类表示或编码的数据。这是一种流行的数据压缩技术,适用于具有许多相似值出现的数据,并且可以提供更快的性能和更低的内存使用,特别是对于字符串数据。

      让我们考虑之前的示例 Series:

      这里,是 Python 字符串对象的数组。我们可以通过调用以下方式将其转换为分类:

      现在,的值是的一个实例,您可以通过属性访问:

      对象具有和属性:

      可以使用访问器更轻松地访问这些,这将在 Categorical Methods 中很快解释。

      获取代码和类别之间的映射的一个有用技巧是:

      您可以通过分配转换后的结果将 DataFrame 列转换为分类:

      您还可以直接从其他类型的 Python 序列创建:

      如果您从另一个来源获得了分类编码数据,可以使用替代的构造函数:

      除非明确指定,分类转换假定类别没有特定的排序。因此,数组的顺序可能会根据输入数据的顺序而有所不同。在使用或任何其他构造函数时,您可以指示类别具有有意义的排序:

      输出表示在排序中位于之前,依此类推。无序的分类实例可以通过变为有序:

      最后一点,分类数据不一定是字符串,尽管我只展示了字符串示例。分类数组可以由任何不可变的值类型组成。

      使用 Categoricals 进行计算

      与非编码版本(如字符串数组)相比,在 pandas 中使用通常表现相同。在处理分类数据时,pandas 的某些部分,如函数,表现更好。还有一些函数可以利用标志。

      让我们考虑一些随机数值数据,并使用分箱函数。这将返回;我们在本书的早期使用了,但忽略了分类的工作原理的细节:

      让我们计算一下这些数据的四分位数分箱,并提取一些统计数据:

      尽管有用,确切的样本四分位数可能不如四分位数名称有用于生成报告。我们可以通过的参数实现这一点:

      标记的分类不包含数据中的箱边信息,因此我们可以使用来提取一些摘要统计信息:

      结果中的列保留了来自的原始分类信息,包括排序:

      分类数据的更好性能

      在本节开头,我说过分类类型可以提高性能和内存使用,所以让我们看一些例子。考虑一些具有 1000 万个元素和少量不同类别的 Series:

      现在我们将转换为分类:

      现在我们注意到使用的内存比要多得多:

      当然,转换为类别并不是免费的,但这是一次性的成本:

      由于底层算法使用基于整数的代码数组而不是字符串数组,因此使用分类的 GroupBy 操作可以显着提高性能。这里我们比较了使用 GroupBy 机制的的性能:

      分类方法

      包含分类数据的 Series 具有几个类似于专门的字符串方法的特殊方法。这也提供了方便访问类别和代码。考虑 Series:

      特殊的访问器属性提供了对分类方法的访问:

      假设我们知道此数据的实际类别集扩展到数据中观察到的四个值之外。我们可以使用方法来更改它们:

      虽然数据看起来没有改变,但使用它们的操作将反映新的类别。例如,如果存在,会尊重类别:

      在大型数据集中,分类通常被用作一种方便的工具,用于节省内存和提高性能。在过滤大型 DataFrame 或 Series 之后,许多类别可能不会出现在数据中。为了帮助解决这个问题,我们可以使用方法来修剪未观察到的类别:

      请参见表 7.7 列出的可用分类方法。

      表 7.7:pandas 中 Series 的分类方法

      方法描述在现有类别的末尾追加新的(未使用的)类别使类别有序使类别无序删除类别,将任何删除的值设置为 null删除数据中不存在的任何类别值用指定的新类别名称集替换类别;不能改变类别数量表现类似于,但也可以改变结果为有序类别用指定的新类别集替换类别;可以添加或删除类别

      为建模创建虚拟变量

      当您使用统计或机器学习工具时,通常会将分类数据转换为虚拟变量,也称为独热编码。这涉及创建一个 DataFrame,其中每个不同的类别都有一列;这些列包含给定类别的出现为 1,否则为 0。

      考虑前面的例子:

      如本章前面提到的,函数将这个一维分类数据转换为包含虚拟变量的 DataFrame:

      有效的数据准备可以通过使您花更多时间分析数据而不是准备分析数据来显着提高生产率。本章中我们探讨了许多工具,但这里的覆盖范围并不全面。在下一章中,我们将探讨 pandas 的连接和分组功能。