辰迅云帮助中心

其他类

这篇文章将为大家详细讲解有关mysql中怎么查看执行计划,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。explain执行计划包含的信息其中最重要的字段为:id、type、key、rows、Extra各字段详解idselect查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 三种情况: 1、id相同:执行顺序由上至下 2、id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 3、id相同又不同(两种情况同时存在):id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行 select_type查询的类型,主要是用于区分普通查询、联合查询、子查询等复杂的查询1、SIMPLE:简单的select查询,查询中不包含子查询或者union 2、PRIMARY:查询中包含任何复杂的子部分,最外层查询则被标记为primary 3、SUBQUERY:在select 或 where列表中包含了子查询 4、DERIVED:在from列表中包含的子查询被标记为derived(衍生),mysql或递归执行这些子查询,把结果放在零时表里 5、UNION:若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,外层select将被标记为derived 6、UNION RESULT:从union表获取结果的select type访问类型,sql查询优化中一个很重要的指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL一般来说,好的sql查询至少达到range级别,最好能达到ref1、system:表只有一行记录(等于系统表),这是const类型的特例,平时不会出现,可以忽略不计2、const:表示通过索引一次就找到了,const用于比较primary key 或者 unique索引。因为只需匹配一行数据,所有很快。如果将主键置于where列表中,mysql就能将该查询转换为一个const 3、eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键 或 唯一索引扫描。 注意:ALL全表扫描的表记录最少的表如t1表4、ref:非唯一性索引扫描,返回匹配某个单独值的所有行。本质是也是一种索引访问,它返回所有匹配某个单独值的行,然而他可能会找到多个符合条件的行,所以它应该属于查找和扫描的混合体 5、range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了那个索引。一般就是在where语句中出现了bettween、<、>、in等的查询。这种索引列上的范围扫描比全索引扫描要好。只需要开始于某个点,结束于另一个点,不用扫描全部索引 6、index:Full Index Scan,index与ALL区别为index类型只遍历索引树。这通常为ALL块,应为索引文件通常比数据文件小。(Index与ALL虽然都是读全表,但index是从索引中读取,而ALL是从硬盘读取) 7、ALL:Full Table Scan,遍历全表以找到匹配的行 possible_keys查询涉及到的字段上存在索引,则该索引将被列出,但不一定被查询实际使用key实际使用的索引,如果为NULL,则没有使用索引。 查询中如果使用了覆盖索引,则该索引仅出现在key列表中 key_len表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度),并非实际使用长度,理论上长度越短越好。key_len是根据表定义计算而得的,不是通过表内检索出的ref显示索引的那一列被使用了,如果可能,是一个常量const。rows根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数Extra不适合在其他字段中显示,但是十分重要的额外信息1、Using filesort : mysql对数据使用一个外部的索引排序,而不是按照表内的索引进行排序读取。也就是说mysql无法利用索引完成的排序操作成为“文件排序” 由于索引是先按email排序、再按address排序,所以查询时如果直接按address排序,索引就不能满足要求了,mysql内部必须再实现一次“文件排序”2、Using temporary: 使用临时表保存中间结果,也就是说mysql在对查询结果排序时使用了临时表,常见于order by 和 group by 3、Using index: 表示相应的select操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率高 如果同时出现Using where,表明索引被用来执行索引键值的查找(参考上图) 如果没用同时出现Using where,表明索引用来读取数据而非执行查找动作 覆盖索引(Covering Index):也叫索引覆盖。就是select列表中的字段,只用从索引中就能获取,不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖。 注意: a、如需使用覆盖索引,select列表中的字段只取出需要的列,不要使用select * b、如果将所有字段都建索引会导致索引文件过大,反而降低crud性能4、Using where : 使用了where过滤5、Using join buffer : 使用了链接缓存6、Impossible WHERE: where子句的值总是false,不能用来获取任何元祖 7、select tables optimized away: 在没有group by子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段在进行计算,查询执行计划生成的阶段即可完成优化8、distinct: 优化distinct操作,在找到第一个匹配的元祖后即停止找同样值得动作综合Case执行顺序 1(id = 4)、【select id, name from t2】:select_type 为union,说明id=4的select是union里面的第二个select。2(id = 3)、【select id, name from t1 where address = ‘11’】:因为是在from语句中包含的子查询所以被标记为DERIVED(衍生),where address = ‘11’ 通过复合索引idx_name_email_address就能检索到,所以type为index。3(id = 2)、【select id from t3】:因为是在select中包含的子查询所以被标记为SUBQUERY。4(id = 1)、【select d1.name, … d2 from … d1】:select_type为PRIMARY表示该查询为最外层查询,table列被标记为 “derived3”表示查询结果来自于一个衍生表(id = 3 的select结果)。5(id = NULL)、【 … union … 】:代表从union的临时表中读取行的阶段,table列的 “union 1, 4”表示用id=1 和 id=4 的select结果进行union操作。关于mysql中怎么查看执行计划就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。...

dd命令基本使用方法

2021/7/13 23:22:06

这篇文章主要介绍“dd命令基本使用方法”,在日常操作中,相信很多人在dd命令基本使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”dd命令基本使用方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!dd命令的作用(功能)主用功能是用于拷贝文件,也就是用指定大小的块去拷贝一个文件,并在拷贝的同时进行指定的转换(默认从标准输入拷贝到标准输出,这意味dd可以在管道中使用)。补充说明:dd可从标准输入或文件读取数据,依指定的格式来转换数据,再输出到文件,设备或标准输出。 1.测试磁盘写能力(bs默认是512Bytes,2048k*512Bytes,即2048k*512B, 对应大小位1G)[root@-centos ~]# dd if=/dev/zero of=./testfile count=2048k conv=fsync记录了2097152+0 的读入 记录了2097152+0 的写出1073741824字节(1.1 GB)已复制,7.61593 秒,141 MB/秒在这个过程中,生成了大文件testfile,该文件大小为1G[root@centos ~]# ls -alhtr testfile -rw-r--r-- 1 root root 1.0G 3月  23 19:59 testfile2.测试磁盘读能力通过fdisk查看服务器对应的磁盘,如/dev/vda。[root@centos]# dd if=/dev/vda of=/dev/null bs=1M 102400+0 records in102400+0 records out107374182400 bytes (107 GB) copied, 1084.11 s, 99.0 MB/s3.同时测试读写能力dd if=/dev/vda of=./path/to/testfile bs=1G4.其他参数iflag=flag                           使用iflag来控制输入(读取数据)时的行为特征。oflag=flag                         使用oflag来控制输出(写入数据)时的行为特征。如果要规避掉文件系统cache,直接读写,不使用buffer cache,需做这样的设置iflag=direct,nonblockoflag=direct,nonblock参考:https://www.jianshu.com/p/2aaec9208b20到此,关于“dd命令基本使用方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注辰讯云网站,小编会继续努力为大家带来更多实用的文章!...

这篇文章给大家介绍Python中如何提升数据分析能力,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.Pandas 分析包这个工具的好处是显而易见的。下面的动画是调用简单方法df.profile_report()的结果,看看自己的结果报告:使用这个工具很简单,只需安装和导入pandas分析包。2. 使用Cufflinks和Plotly绘图我们中的大多数人都是所谓的“有经验的”数据科学家或数据分析师,他们会非常熟悉matplotlib和pandas之间的集成。也就是你可以快速画出一个简单pd的图。DataFrame或pd。通过简单调用.plot()方法,可以得到以下结果:现在这一切都很好,但如何实现交互,可平移,可缩放,可缩放的图形呢?我们可以用Cufflinks要在您的环境中安装Cufflinks,只需运行pip install cufflinks --upgrade你就可以开始了。看看下面这些:3. IPython Magic命令IPython的“Magic”基本上是IPython在标准Python语法之上的一系列增强。Magic命令有两种类型:行Magic,用一个%前缀表示,对一行输入进行操作;单元Magic,用两个%%前缀表示,对多行输入进行操作。下面是“magic”提供的一些有用的功能:%lsmagic:找到全部%debug:交互式调试%store:在notebook之间传递变量。%who:列出全局作用域的所有变量。%%time: 时间魔法,获取所有时间信息%%writefile:将单元格内容写入文件。4. 奇特的Jupyter格式这个超级酷!基本上,Jupyter允许一些HTML / CSS格式的标记单元格。蓝色风格:<div class="alert alert-block alert-info">     This is <b>fancy</b>! </div>红色风格:<div class="alert alert-block alert-danger">     This is <b>baaaaad</b>! </div>绿色风格:<div class="alert alert-block alert-success">     This is <b>gooood</b>! </div>可以看一看效果如何:5. Jupyter快捷键在访问和学习快捷键时,您可以使用命令面板:Ctrl + Shift + P。这会显示出笔记本所有功能的列表。以下是最基本的命令举例:Esc:这将带你进入命令模式。在这个模式下,你可以使用箭头键在笔记本上导航。Enter:返回当前单元格的编辑模式。更多命令可以一边学习一遍使用。6. Jupyter中每个单元的多个输出这个很棒。您是否曾经想要显示pandas DataFrame的.head()和.tail(),但中途放弃了,因为创建额外的代码单元来运行.tail()方法太麻烦了?不用担心了,现在您可以使用以下代码行显示您想要的所有输出:from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all"现在你看,多重输出的力量:7. 立即创建一个幻灯片的Notebook使用RISE,你可以立即把你的Jupyter Notebook变成幻灯片与一个单一的按键。最好的是,Notebook仍然是活动的,所以您可以执行现场编码的同时呈现!要使用这个出色的工具,简单安装RISE或通过conda或pip取决于您的环境:conda install -c conda-forge rise/// OR ///pip install RISE现在,你可以从你的Notebook上创建有趣的幻灯片,只需点击新建按钮:关于Python中如何提升数据分析能力就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。...

本篇文章为大家展示了Python中Ellipsis对象有什么用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是Ellipsis在 Python 中你可能有时候会看到一个奇怪的用法,就像是这样:>>> ...  Ellipsis在你输入了三个点之后,Python 解释器非但不会报错,反而还会返回给你「Ellipsis」这么一个信息。那么这个有趣的东西是什么呢?查阅 Python 官方文档后可以看到,它是一个**「内置常量」**(Built-in Constant)。经常用于对用户自定义的容器数据类型进行切片用法的扩展。这也就意味着它可能是会作为一个「小众且另类」的语法糖来使用,但如果你用于 Python 中的容器数据类型(比如列表)进行切片索引时,可能会引发错误:>>> nums = list(range(10))  >>> nums  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  >>> nums[...]  Traceback (most recent call last):    File "<stdin>", line 1, in <module>  TypeError: list indices must be integers or slices, not ellipsis除此之外,如果你使用的是 Python 2 的解释器,那么压根就不支持 Ellipsis 的用法,从一开始输入时就报错:$ python2  WARNING: Python 2.7 is not recommended.   This version is included in macOS for compatibility with legacy software.   Future versions of macOS will not include Python 2.7.   Instead, it is recommended that you transition to using 'python3' from within Terminal.  Python 2.7.16 (default, Nov  9 2019, 05:55:08)   [GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.32.4) (-macos10.15-objc-s on darwin  Type "help", "copyright", "credits" or "license" for more information.  >>> ...    File "<stdin>", line 1      ...      ^  SyntaxError: invalid syntax虽然说在列表中使用 Ellipsis 会报错,但是碰到这种情况你会发现解释器返回给你的是这样的东西:>>> nums = [1,2,3]  >>> nums  [1, 2, 3]  >>> nums[1] = nums  >>> nums  [1, [...], 3]可以看到,这里我们将 nums 中的第二个元素替换成自身,就会形成不断地递归嵌套赋值,而解释器最后直接给出了头尾两个元素之外,其他全部元素都会被 ... 所囊括在内。根据 Python 官方的另一处文档,Ellipsis 本身也不支持任何操作,仅仅只是一个单例对象(Singleton)谁能想到,Guido van Rossum 这么一位被人称为「仁慈的独裁者」的 Python 之父采纳 Ellipsis 的原因竟然是因为:有人认为三个省略号的写法可爱。(原文为:「Some folks thought it would be cute to be able to write incomplete code like this」)应用要说这个看起来「鸡肋」的 Ellipsis 类型对象没有用,这个说法似乎也不正确。因为它作为一种奇怪的语法糖也被应用到了某些地方。Numpy 中的切片虽然官方说 Ellipsis 主要用于用户自定义容器类型的切片操作,但是在我搜索了许久之后发现用 Ellipsis 来实现所谓的切片操作的貌似只有 Numpy。使用 Python 做数据分析、挖掘或机器学习相关的朋友一定对 Numpy 高性能的科学计算库并不陌生。在 Numpy 中我们真正的使用 Ellipsis 来进行切片索引:>>> import numpy as np  >>> arr = np.arange(9).reshape((3,3))  >>> arr  array([[0, 1, 2],         [3, 4, 5],         [6, 7, 8]])需要注意的是,Ellipsis 主要是对二维以上的数组才起作用:>>> arr[...,1:2]  array([[1],         [4],         [7]])  >>> arr[2, ...]  array([6, 7, 8])从结果中我们看到,Ellipsis 三个省略号的写法其实就等价于 arr[:, 1:2] 冒号的写法。但是在使用过程中 Ellipsis 只能出现一次:>>> ndarr = np.arange(24).reshape((2,3,4))  >>> ndarr  array([[[ 0,  1,  2,  3],          [ 4,  5,  6,  7],          [ 8,  9, 10, 11]],         [[12, 13, 14, 15],          [16, 17, 18, 19],          [20, 21, 22, 23]]])  >>> ndarr[:, :, :]  array([[[ 0,  1,  2,  3],          [ 4,  5,  6,  7],          [ 8,  9, 10, 11]],         [[12, 13, 14, 15],          [16, 17, 18, 19],          [20, 21, 22, 23]]])  >>> ndarr[..., ..., ...]  Traceback (most recent call last):    File "<stdin>", line 1, in <module>  IndexError: an index can only have a single ellipsis ('...')Ellipsis 在 Numpy 中出现的意义在于,当你的数组是高维的数组时,那么可以直接使用它来作为选取其他维度的等价写法,以下例子来源于 Numpy 官方文档:>>> z = np.arange(81).reshape(3,3,3,3)  >>> z[1,...,2] # 等价于 z[1, :,:, 2]  array([[29, 32, 35],         [38, 41, 44],         [47, 50, 53]])Type Hint 类型注解自从 PEP 484 之后,Python 解释器开始支持类型注解。所谓的类型注解无非就是在 Python 实际代码中能像注释那样对当中的一些参数或返回值添加类型注释,就像是这样:def add(x: int, y: int) -> int:      return x + y如果你是有使用过 Java 或者 Go 这类对类型注解要求较为严格的编译型语言,那么相信对此并不陌生,无论是变量还是方法,都要写上对应的类型以防编译报错;但即便没有接触过这类编译型语言也不要紧,将其理解为注释即可,这样的注释是能被编辑器或 IDE 所支持,在你要查看函数定义或文档时会给予提示。但是 Type Hint 仅仅只是一种「协定」,告诉别人你的方法里参数是如何、最后返回的是什么仅此而已,无论是加与不加都不会影响最终代码的效果,影响的仅仅只是代码的可读性罢了。如果你的方法有多个返回值,我们不可能对每个返回值的类型都写上注解,因此这时 Ellipsis 对象就派上了用场。根据官方文档给出的说明,我们完全可以像这样来进行类型注解:from typing import Tuple  def get_many_value(      a:int, b:int, c:int,       d:int, e:int, f:int  ) -> Tuple[int, ...]:      return [a+b, c+d, e+f]这样的写法本质上就是 *args 的作用,表示同类型的可变长度元组。如果你将 Tuple 换成是 List,那么解释器会报错,因为 *args 在方法中的表现就是元组,那么作为注解的 Ellipsis 也应如此。这可能也就说明为什么在 Tuple 注解中不报错了。FastAPI 中的必选参数目前正流行开来的高性能 Web 框架 FastAPI 中,也应用了 Ellipsis。它用以表示参数是必填项,这在 Swagger 页面更能直观体现。# pip install fastapi  # pip install uvicorn  from fastapi import FastAPI, Query  app = FastAPI()  @app.get('/greetWithOutEllipsis')  async def greet(name: str = None):      if name:          return {"info": f"Welcome! {name}"}      return {"info": f"Welcome to FastAPI!"}  @app.get('/greetWithEllipsis')  async def greet(name: str = Query(..., min_length=2)):      if name:          return {"info": f"Welcome! {name}"}      return {"info": f"Welcome to FastAPI!"}  if __name__ == "__main__":      import uvicorn      uvicorn.run(app, port = 5000)启动服务之后,在浏览器中输入 http://127.0.0.1:5000/docs 便能进入到服务的 Swagger 页面中,在上述例子中如果 name 参数并非是个必要的参数时,在 Swagger 页面中不会看到任何标识,即便我们不带上 name 参数也能进行请求:非必要参数但当我们加上了一个 Query() 方法,并将其 Ellipsis 对象丢到当中时,不仅会给参数加上 required 的标识,同时还对传入的字符串长度进行了限制。必要参数除了参数之外,在 FastAPI 中你还可以在请求体、路径、字段等多个地方使用 Ellipsis 对象。「伪」 pass 写法Ellipsis 有时候还可以作为 pass 的一种「伪」写法,比如这样:def greet():      ... #等价于 pass上述内容就是Python中Ellipsis对象有什么用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注辰讯云资讯频道。...

Python中有哪些可视化库

2021/7/12 23:10:10

Python中有哪些可视化库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。互动性您是否希望可视化是交互式的?一些库(例如Matplotlib)将可视化效果呈现为图像。 因此,它们非常适合于解释概念(在纸质,幻灯片或演示文稿中)。另一方面,像Altair,Bokeh和Plotly这样的库可让您创建交互式图形,以便用户可以深入并自己探索语法和灵活性每个库的语法有何不同? Matplotlib等较低级的库使您可以做想想得到的一切,但要付出更复杂的API的代价。  诸如Altair之类的某些库是非常声明性的,这使映射到您的数据更加容易。数据类型和可视化您是在处理特殊的用例,例如地理图,具有大数据还是使用仅由特定库支持的图类型?数据为了便于比较,我将使用本文从Github抓取的真实数据:我爬取了超过1k的优秀机器学习Github配置文件,这就是我发现的从Github上的优秀机器学习资料中获取见解或从Datapane Blob获取直接数据。import datapane as dp  dp.Blob.get(name='github_data', owner='khuyentran1401').download_df()如果要使用Blob,请记住预先使用令牌登录Datapane。 此过程应少于1分钟MatplotlibMatplotlib可能是最常见的用于可视化数据的Python库。 每个对数据科学感兴趣的人都可能至少使用过Matplotlib。优点1.容易看到数据的属性分析数据时,快速查看分布可能是理想的。例如,如果我想快速了解关注者最多的前100个用户的分布,通常使用Matplotlib就足够了。import matplotlib.pyplot as plt  top_followers = new_profile.sort_values(by='followers', axis=0, ascending=False)[:100]  fig = plt.figure()  plt.bar(top_followers.user_name,        top_followers.followers)即使Matplotlib的x轴看起来不太好,通过查看图表,我们也可以更好地理解数据的分布。2.可以画任何东西Matplotlib具有多种用途,这意味着它可以绘制您可以想象的任何图形。  Matplotlib的网站上包含非常全面的文档和图库中的各种图形,这使您可以轻松找到任何您能想到的疯狂情节的教程。像这样的一些文字:fig = plt.figure()  plt.text(0.6, 0.7, "learning", size=40, rotation=20.,          ha="center", va="center",          bbox=dict(boxstyle="round",                    ec=(1., 0.5, 0.5),                    fc=(1., 0.8, 0.8),                    )          )  plt.text(0.55, 0.6, "machine", size=40, rotation=-25.,          ha="right", va="top",          bbox=dict(boxstyle="square",                    ec=(1., 0.5, 0.5),                    fc=(1., 0.8, 0.8),                    )          )  plt.show()缺点Matplotlib可以绘制任何内容,但绘制非基本图或调整图的外观可能会很复杂。correlation = new_profile.corr()  fig, ax = plt.subplots() im = plt.imshow(correlation)  ax.set_xticklabels(correlation.columns) ax.set_yticklabels(correlation.columns)  plt.setp(ax.get_xticklabels(), rotation=45, ha="right",          rotation_mode="anchor")即使该图足以使分布可视化,但如果您想将数据表示给其他人,您仍需要固定x轴,y轴,这需要很多工作。 这是因为Matplotlib具有非常低级的接口。总结:Matplotlib可以绘制任何东西,但是复杂的绘图可能比其他库需要更多的代码SeabornSeaborn是基于Matplotlib的Python数据可视化库。 它在库上提供了更高级别的包装器,使其更易于使用。优点1.更少的代码它为类似的图提供了更高级别的界面。 换句话说,seaborn通常提供与matplotlib类似的图,但是用更少的代码和更好的设计。我们使用与以前相同的数据来绘制图的相似热图。correlation = new_profile.corr()  sns.heatmap(correlation, annot=True)我们无需设置x和y标签就可以获得更好的热图!2.使常用地块更漂亮当涉及流行图(例如条形图,箱形图,计数图,直方图等)时,许多人选择seaborn不仅是因为可以用更少的代码来创建它们,而且它们看起来也更漂亮。  正如我们在上面的示例中看到的,颜色看起来也比Matplotlib的默认颜色更好。sns.set(style="darkgrid") titanic = sns.load_dataset("titanic") ax = sns.countplot(x="class", data=titanic)缺点Seaborn受到更多限制,并且没有matplotlib那样广泛的集合要点:Seaborn是Matplotlib的更高版本。  尽管Seaborn并不像Matplotlib那样具有广泛的集合,但是它们却可以用更少的代码来使条形图,箱形图,热图等流行图看起来很漂亮。PlotlyPlotly的Python图形库使创建交互式,具有出版物质量的图形变得容易。  它还可以创建类似于Matplotlib和seaborn的图表,例如折线图,散点图,面积图,条形图等。优点1. 像R如果您喜欢R中的绘图,并且在切换到Python时错过了它的功能,那么Plotly使用Python可以提供相同质量的绘图!我最喜欢的是Plotly Express,因为它真的很容易,而且用单行Python创建更好的图甚至更快。fig = px.scatter(new_profile[:100],           x='followers',           y='total_stars',           color='forks',           size='contribution') fig.show()2.易于创建交互式图使用Plotly还可以轻松创建交互式绘图。 交互式绘图不仅美观,而且还使查看者更容易查看每个数据点。还记得我们之前使用matplotlib制作的条形图吗? 让我们看看Plotly的结果import plotly.express as px  top_followers = new_profile.sort_values(by='followers', axis=0, ascending=False)[:100]  fig = px.bar(top_followers,               x='user_name',               y='followers',             )  fig.show()使用大约相同的代码行,我们生成一个交互式绘图,我们可以将鼠标悬停在每个栏上,以查看该栏所代表的用户和关注者数量。  这意味着可视化的使用者可以自己进行浏览。3.复杂的地块变得容易使用Plotly,可以轻松创建一些通常很难创建的图。例如,如果我们想创建一个地图以可视化Github用户的位置,我们可以找到他们的经度和纬度,如下所示,然后使用该数据在地图上发现用户的位置,如下所示import plotly.express as px import datapane as dp  location_df = dp.Blob.get(name='location_df', owner='khuyentran1401').download_df()  m = px.scatter_geo(location_df, lat='latitude', lon='longitude',                  color='total_stars', size='forks',                  hover_data=['user_name','followers'],                  title='Locations of Top Users')  m.show()只需几行代码,所有用户的位置就可以在地图上精美呈现。 气泡的颜色代表叉子的数量,大小代表星星的总数缺点尽管Plotly支持各种图,但仍然缺少一些常见图例如,虽然seaborn具有sns.countplot()来计算数据中某个类别的出现次数,但Plotly没有计数图。  因此,我们需要预先执行groupby以便按类对数据进行分组。titanic = sns.load_dataset("titanic")  # Group data by class titanic_groupby = titanic.groupby(by='class').count()   fig = px.bar(titanic_groupby,       y='survived',       labels={'survived':'count'})  fig.show()我们需要更多代码来创建计数图,并且该图不会像seaborn那样自动显示出来。要点:Plotly非常适合用很少的代码创建交互式且具有出版质量的图形。 但是,对于一些简单的图(例如计数图),使用seaborn会更简单AltarAltair是基于vega-lite的用于Python的声明式统计可视化库,非常适合需要大量统计转换的绘图。优点1.简单的可视化语法用于创建可视化的语法很容易理解。 它仅需提及数据列与编码通道之间的链接,其余绘图将自动处理。  这听起来很抽象,但是在您处理数据时非常重要,它使信息可视化变得非常快速和直观。例如,使用上面的泰坦尼克号数据,我们想计算每个班级的人数,我们所需要的只是在y_axis中使用count()import seaborn as sns import altair as alt   titanic = sns.load_dataset("titanic")  alt.Chart(titanic).mark_bar().encode(     alt.X('class'),     y='count()' )2.易于转换数据Altair还使创建图表时转换数据变得非常容易例如,如果我们想找到泰坦尼克号中每个性别的平均年龄,而不是像Plotly那样预先进行转换,我们可以在代码中执行转换以创建图表。hireable = alt.Chart(titanic).mark_bar().encode(     x='sex:N',     y='mean_age:Q' ).transform_aggregate(     mean_age='mean(age)',     groupby=['sex'])  hireable这里的逻辑是使用transform_aggregate()来获取义数据(没有任何顺序的类别数据),或者使用:Q来确保mean_age是定量数据(值的度量,例如数字)3.易于链接的图Altair还允许您在图之间进行一些令人印象深刻的链接,例如使用间隔选择来过滤附加直方图的内容。例如,如果我们想在间隔内可视化每个班级的人数,我们可以选择年龄和票价之间的一个点状图,我们可以这样做。brush = alt.selection(type='interval')  points = alt.Chart(titanic).mark_point().encode(     x='age:Q',     y='fare:Q',     color=alt.condition(brush, 'class:N', alt.value('lightgray')) ).add_selection(     brush )  bars = alt.Chart(titanic).mark_bar().encode(     y='class:N',     color='class:N',     x = 'count(class):Q' ).transform_filter(     brush )  points & bars当我们拖动鼠标以选择散点图中的间隔时,我们可以在下面的条形图中看到变化。  当与早期的转换和计算结合使用时,这意味着您可以创建一些非常互动的图,这些图可以进行即时计算-甚至不需要运行的Python服务器!缺点除非您指定自定义样式,否则简单的图表(如条形图)看起来不会像seaborn或Plotly。  Altair还不建议使用5000个以上样本的数据集,而是建议您在可视化之前汇总数据。要点:Altair是复杂图表显示统计数据的理想选择。  Altair无法处理超过5000个样本的数据,并且与Plotly或Seaborn相比,某些简单图表的样式看起来不一样。BokehBokeh是一个灵活的交互式可视化库,以Web浏览器为代表。优点Matplotlib的交互式版本如果我们将在上述交互式可视化库中排名,那么Bokeh在与Matplotlib的相似性方面可能排名第一。Matplotlib可以创建任何绘图,因为它是一个低级的可视化库。 Bokeh可以用作高级或低级接口;  因此,它可以创建Matplotlib创建的许多复杂图,但是用更少的代码行和更高的分辨率。例如,Matplotlib的圆图import matplotlib.pyplot as plt  fig, ax = plt.subplots()  x = [1, 2, 3, 4, 5] y = [2, 5, 8, 2, 7]  for x,y in zip(x,y):      ax.add_patch(plt.Circle((x, y), 0.5, edgecolor = "#f03b20",facecolor='#9ebcda', alpha=0.8))   #Use adjustable='box-forced' to make the plot area square-shaped as well. ax.set_aspect('equal', adjustable='datalim') ax.set_xbound(3, 4)  ax.plot()   #Causes an autoscale update. plt.show()也可以使用Bokeh以更好的分辨率和更多实用性创建from bokeh.io import output_file, show from bokeh.models import Circle from bokeh.plotting import figure  reset_output() output_notebook()   plot = figure(plot_width=400, plot_height=400, tools="tap", title="Select a circle") renderer = plot.circle([1, 2, 3, 4, 5], [2, 5, 8, 2, 7], size=50)  selected_circle = Circle(fill_alpha=1, fill_color="firebrick", line_color=None) nonselected_circle = Circle(fill_alpha=0.2, fill_color="blue", line_color="firebrick")  renderer.selection_glyph = selected_circle renderer.nonselection_glyph = nonselected_circle  show(plot)2.地块之间的联系散景还可以使情节之间的链接变得非常容易。 在一个绘图中应用的更改将应用于具有类似变量的另一绘图。例如,如果我们并排创建3个图形并想要观察它们之间的关系,则可以使用链接的笔刷from bokeh.layouts import gridplot, row from bokeh.models import ColumnDataSource  reset_output() output_notebook()  source = ColumnDataSource(new_profile)  TOOLS = "box_select,lasso_select,help" TOOLTIPS = [('user', '@user_name'),             ('followers', '@followers'),             ('following', '@following'),             ('forks', '@forks'),              ('contribution', '@contribution')]  s1 = figure(tooltips=TOOLTIPS, plot_width=300, plot_height=300, title=None, tools=TOOLS) s1.circle(x='followers', y='following', source=source)  s2 = figure(tooltips=TOOLTIPS, plot_width=300, plot_height=300, title=None, tools=TOOLS) s2.circle(x='followers', y='forks', source=source)  s3 = figure(tooltips=TOOLTIPS, plot_width=300, plot_height=300, title=None, tools=TOOLS) s3.circle(x='followers', y='contribution', source=source)  p = gridplot([[s1,s2,s3]]) show(p)ColumnDataSource使数据可以在绘图之间共享。 因此,当我们将更改应用于一个图时,其他图也将相应地更改。缺点由于Bokeh是一个具有中级接口的库,因此与Matplotlib相比,它通常花费较少的代码,但产生与Seaborn,Altair或Plotly相同的图将花费更多的代码。例如,要使用泰坦尼克号数据创建相同的计数图,除了需要预先转换数据外,如果我们希望图形看起来更漂亮,我们还需要设置条形和颜色的宽度from bokeh.transform import factor_cmap from bokeh.palettes import Spectral6  p = figure(x_range=list(titanic_groupby['class'])) p.vbar(x='class', top='survived', source = titanic_groupby,       fill_color=factor_cmap('class', palette=Spectral6, factors=list(titanic_groupby['class'])       )) show(p)如果我们不为条形图添加宽度,则条形图将看起来像这样因此,我们需要手动调整尺寸以使图更好from bokeh.transform import factor_cmap from bokeh.palettes import Spectral6  p = figure(x_range=list(titanic_groupby['class'])) p.vbar(x='class', top='survived', width=0.9, source = titanic_groupby,       fill_color=factor_cmap('class', palette=Spectral6, factors=list(titanic_groupby['class'])       )) show(p)如果要用更少的代码创建漂亮的条形图,与其他库相比,Bokeh可能就是缺点要点:Bokeh是唯一一个界面范围从低到高的库,这使得生成通用和精美的图形变得容易。  但是,这样做的代价是,Bokeh通常需要更多代码来创建质量与其他库相似的图。FoliumFolium使在交互式传单地图上的数据可视化变得容易。 该库具有来自OpenStreetMap,Mapbox和Stamen的许多内置磁贴集优点1.轻松创建带有标记的地图尽管Plotly,Altair和Bokeh也使我们能够创建地图,但Folium使用开放的街道地图,以最少的代码使您更接近Google Map还记得我们如何创建地图以使用Plotly可视化Github用户的位置吗? 我们可以用Folium使地图看起来更好import folium  # Load data location_df = dp.Blob.get(name='location_df', owner='khuyentran1401').download_df()   # Save latitudes, longitudes, and locations' names in a list lats = location_df['latitude'] lons = location_df['longitude'] names = location_df['location']  # Create a map with an initial location m = folium.Map(location=[lats[0], lons[0]])  for lat, lon, name in zip(lats, lons, names):        # Create marker with other locations     folium.Marker(location=[lat, lon],                   popup= name,                   icon=folium.Icon(color='green') ).add_to(m)      m最初的地点在纽约布鲁克林。 缩小以查看地图上的其他位置。 通过一些代码行,我们创建了一个真实的地图,显示了用户的位置。2.添加潜在的位置如果我们想添加其他用户的潜在位置,Folium可以通过允许用户添加标记来简化操作# Code to generate map here #....  # Enable adding more locations in the map m = m.add_child(folium.ClickForMarker(popup='Potential Location'))点击地图,查看您点击生成的新位置。3.插件Folium有许多可与地图一起使用的插件,包括Altair的插件。  如果我们想查看全球Github用户总星数的热点图,以找出哪里有大量Github用户数最多,总星数很多的情况?  Folium插件中的热图使您可以做到这一点。from folium.plugins import HeatMap  m = folium.Map(location=[lats[0], lons[0]])  HeatMap(data=location_df[['latitude', 'longitude', 'total_stars']]).add_to(m)看完上述内容,你们掌握Python中有哪些可视化库的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注辰讯云资讯频道,感谢各位的阅读!...

Python中怎么实现一个聊天机器人,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 创建虚拟环境pipenv是一个轻松创建虚拟环境的python库。pip install pipenv pipenv install2. 安装库我们将使用ChatterBot库来创建简单的Python  Chatbot。通过pip命令安装chatterbot和chatterbot_corpus。pipenv install chatterbot pipenv install chatterbot_corpus3.创造和训练聊天机器人from chatterbot import ChatBot from chatterbot.trainers import ChatterBotCorpusTrainer  BOTNAME = "Pyter"  def start():     bot = ChatBot(BOTNAME,         logic_adapters=[         {             'import_path': 'chatterbot.logic.BestMatch',             'default_response': 'I am sorry, but I do not understand.',             'maximum_similarity_threshold': 0.90,         },             ],         preprocessors = [             "chatterbot.preprocessors.clean_whitespace",         ],         input_adaptor="chatterbot.input.TerminalAdaptor",         output_adaptor="chatterbot.output.TerminalAdaptor",         database_uri='sqlite:///database.sqlite3')      trainer = ChatterBotCorpusTrainer(bot)      # Train based on the english corpus     trainer.train(         "chatterbot.corpus.english",         "chatterbot.corpus.english.greetings",         "chatterbot.corpus.english.conversations",         )      print(f"Hello I am {BOTNAME}")      while True:         try:             bot_input = input("You: ")             bot_respose = bot.get_response(bot_input)             print(f"{BOTNAME}: {bot_respose}")          except(KeyboardInterrupt, EOFError, SystemExit):             break  if __name__ == "__main__":     start()看完上述内容,你们掌握Python中怎么实现一个聊天机器人的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注辰讯云资讯频道,感谢各位的阅读!...

这篇文章给大家介绍Python中怎么实现一个面部识别功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用Haar人脸特征分类器用以下图像为例:来看看识别这张图片中的人脸代码:import cv2               group_of_people_image = cv2.imread('images/image7.jpg')        frontal_face_classifier = cv2.CascadeClassifier('classifier/haarcascade_frontalface_default.xml')        image_in_gray_scale = cv2.cvtColor(group_of_people_image,cv2.COLOR_BGR2GRAY)               faces = frontal_face_classifier.detectMultiScale(image=image_in_gray_scale,scaleFactor=1.3, minNeighbors=6)               for (x_axis, y_axis, weight,height) in faces:            cv2.rectangle(group_of_people_image,(x_axis, y_axis), (x_axis + weight, y_axis + height), (255, 0, 0), 2)该算法将图像转换为灰度图像,如前所述,这是分类器操作的一个基本步骤,然后我们使用dectedMultiScale函数搜索图像中的人脸,并通过绘制矩形来显示图像的位置,当定位人脸时结果如下:我们能够准确地分析两张出现的脸(采用矩形的方式将人脸框起来),有两个人完全正面地露出他们的脸,人脸完全显现,所以我们可以清楚地看到他的脸;另一个人只露出了面部的一部分,所以我们没有得到准确的信息来确认这是一张完整的人脸。面部特征检测Dlib是一个拥有一些分类器的库,可以帮助我们检测人脸的某些部分,例如:眼睛、眉毛、鼻子和洋娃娃的区域。以下图为例:现在,使用算法来识别图像中的面部特征点:import cv2        import dlib        import numpy as np               initial_image = cv2.imread('images/image9.jpg')        initial_image_in_rgb = cv2.cvtColor(initial_image,cv2.COLOR_BGR2RGB)        reference_image = initial_image_in_rgb.copy()               classifier_path = dlib.shape_predictor('classifier/shape_predictor_68_face_landmarks.dat')        frontal_face_detector = dlib.get_frontal_face_detector()               rectangles =frontal_face_detector(initial_image,1)               for k, d inenumerate(rectangles):            cv2.rectangle(reference_image,(d.left(), d.top()), (d.right(), d.bottom()), (255, 255, 0), 2)               landmarks = []               for rectangle in rectangles:            landmarks.append(np.matrix([[p.x, p.y] for p inclassifier_path(reference_image,rectangle).parts()]))               for landmark in landmarks:            for index, point inenumerate(landmark):                point_center = (point[0, 0], point[0, 1])                cv2.circle(reference_image,point_center, 3, (255, 255, 0), -1)                cv2.putText(reference_image,str(index), point_center, cv2.FONT_HERSHEY_COMPLEX, 3, (255, 255, 255), 2)我们使用的是人脸68个特征分类器,它试图更精确地理解点面,这给了我们更多的选择去分析结果,其缺点是速度有点慢。所以必须划定一个矩形来确定我们的脸可能在哪里,特征是我们可以识别的人脸特征,包括脸、嘴、眼睛、眉毛。一旦用矩形的方式框出了脸,就可以使用功能部件将这些特征返回,最后将得到一些可视化的东西去生成一个带有面部点的图像。结果是:这些点对于帮助识别表情很重要,例如我们可以识别出这个男孩睁着眼睛,闭着嘴巴。把这看作是一种情绪的表现,可以说这个男孩很焦虑。当一个人微笑时,它可以帮助理解这种情绪可能表达的是幸福。关于Python中怎么实现一个面部识别功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。...

这期内容当中小编将会给大家带来有关Python中pass语句的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。简单而言,pass 是一种空操作(null operation),解释器执行到它的时候,除了检查语法是否合法,什么也不做就直接跳过。它跟 return、break、continue 和 yield  之类的非空操作相比,最大的区别是它不会改变程序的执行顺序。它就像我们写的注释,除了占用一行代码行,不会对所处的作用域产生任何影响。但是,如果你有其它语言的基础,你也许会好奇:为什么 Python 有这么独特的 pass 语句,而别的语言却没有?Python 这么设计,到底是出于什么原因呢?是为了解决大部分编程语言都要面对的共性问题,还是因为它有自己的新发现,所以创造出来一个新的特性?换句话说:Python 为什么要有 pass 语句,它能解决什么问题(好处),如果没有它,会导致什么问题(坏处)?接下来,本文将从两个维度展开分析。1. 对人:作为空间占位符我把它看作是一种言简意赅的注释方式,等于是说“这里先预留位置,回头再补上具体的代码实现”。比如在多层的 if-elif-else 结构中,我们可以先把判断条件写好,然后在对应的块中写上 pass,以后再慢慢完善。比如上文中给出的例子,我们可以先写好类/函数名及其入参,然后跳过(pass)主体代码,以后再慢慢填充。pass 写起来简单,而且由于是关键字,IDE 会给出显眼的颜色区分,所以就比我们写上注释内容来得方便些。pass 作为空间占位符,主要可以方便我们构思局部的代码结构,有一定的辅助提醒作用。但是,若作为一种注释方式,它就显得太单薄了,比不上写“# todo: xxxx”,后者也会被 IDE  用颜色突显,而且意思更明确。虽然写起来简单,但它也引入了一个看似多余的关键字 pass。所以,从空间占位符的角度来看,pass 不是编程语言中必须的设计要素。有了它,我们可以表达出“此处有东西,但暂时跳过”的语义,但如果没有它,则可以用注释内容来替代。2. 对机器:为了语法完整性对于前一条的用法,pass 出现在代码中的位置在理论上是不受限的。但是,我们最常使用 pass 时,基本是在冒号的下一行,而且在该层缩进的代码块中,只有这一条语句。(参见前文的 3  个例子,为了方便,我们仅以以空函数为例)我们可以设想下,如果不写它,会怎样?答案是会报缩进错误:IndentationError: expected an indented block# 将函数体的 pass 去除,会报错 def func():  func()因为 Python  使用缩进来划分代码块(至于原因,请查阅《Python为什么使用缩进来划分代码块?》),而冒号标识着要出现新的缩进代码块,所以这个例子会报缺少缩进代码块。如果我们用前文说的注释来替代,看看会怎样?# 将函数体的 pass 换成注释 def func():     # todo:此处有东西,以后补上 func()这样写,也会报错:IndentationError: expected an indented block原因是注释并非有效的语法内容,它会被 Python 解释器忽略掉(ignore),不像 pass 语句那样是“有效的语法内容,但是跳过”。也就是说,缩进代码块中必须包含有语法意义的内容,下面的例子都是有效的:def func():     """这是一个字符串"""  def func2():     123456Python 在定义函数时,必须包含函数体,即同时包含声明加定义两种语义,不能像某些语言可以只使用声明的语义,即写成void test(); 。但是,由于 Python 不使用花括号,它无法像某些语言那样直接定义出空函数,即写成void test(){} 。综合以上的分析,Python 在定义空函数时,必须要有合法的函数体,因此设计出表示空操作的 pass  语句。它是为了补充语法的完整性,连同冒号,等效于其它语言中一对空的花括号。从语法完整性的维度上看,它是必须的设计要素,如果没有的话,也必须用类似的空语句或特殊符号来替代。对人方面,pass  可以表示“暂时跳过”的含义,作为临时的占位符,最终会被实际的代码实现所替换;对机器方面,它则可以表示“直接跳过”,只为了补齐语法逻辑,并不会被其它代码所替换。其它语言没有专门的一种语句或者符号来表示这种占位符(即语义有所欠缺),但是它们也不需要费心思专门设计一个关键字来补齐语法完整性(即语法完备)。上述就是小编为大家分享的Python中pass语句的作用是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注辰讯云资讯频道。...

这篇文章给大家介绍Python中怎么利用Altair实现数据制图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。绘图流程我通过绘制同一个多柱状图比较了多个 Python 绘图库的差异。正式开始之前,你需要将你的 Python 环境调整到能运行下面代码的状态。具体就是:安装最新版的 Python( Linux、Mac 和 Windows 系统下的安装方法)确认该版本 Python 可以运行本教程所使用的库演示用数据可从网络下载,并且可以用 pandas 直接导入:import pandas as pddf = pd.read_csv('https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv')准备开始吧。为了做个比较,先看下面这个用 Matplotlib 做的图:Matplotlib UK election results使用 Matplotlib 需要 16 行代码,图柱的位置需要自己计算。使用 Altair 绘制相似的图,代码如下:    import altair as alt     chart = alt.Chart(df).mark_bar().encode(        x='party',        y='seats',        column='year',        color='party',    )     chart.save('altair-elections.html')真是简洁多了!与 Seaborn 类似,Altair 所用数据的组织形式是每个变量一列(即 数据列 )。这种方式下可以将每个变量映射到图的一个属性上 &mdash;&mdash; Altair 称之为“通道”。在上例中,我们期望每个 “党派” 在 x 轴上显示为一组图柱, 其 “席位” 显示在 y 轴,且将图柱按照 “年份” 分开为 “列”。我们还想根据 “党派” 给图柱使用不同的 “颜色”。用语言表述需求的话就是上面这个样子,而这也正是代码所要表述的!现在把图画出来:Altair plot with default styling调整样式这和我们期待的效果有点接近了。与 Matplotlib 方案相比,主要区别在于 Altair 方案中,每个 year 组显示的时候,内部之间都有个小空白 &mdash;&mdash; 这不是问题,这只是 Altair 多柱状图显示的一个特性。所以说呢,还需要对显示样式再做一些改进。非整形数据两个不是整数的年份名称(Feb 1974 和 Oct 1974)显示为 NaN 了。这可以通过将年份数值 year 转换为字符串来解决:    df['year'] = df['year'].astype(str)指定数据排序方法还需要让 Altair 知道如何对数据进行排序。Altair 允许通过传给它一个 Column 对象,来设定 Column 通道的更多细节。现在让 Altair 按照数据在数据集中出现的顺序排列:    chart = alt.Chart(df).mark_bar().encode(        # ...        column=alt.Column('year', sort=list(df['year']), title=None),        # ...    )移除坐标轴标签我们通过设置 title=None 移除了图顶的 "year" 标签。下面再一处每列数据的 "party" 标签:    chart = alt.Chart(df).mark_bar().encode(        x=alt.X('party', title=None),        # ...    )指定颜色图最后,我们还想自己指定图柱的颜色。Altair 允许建立 domain 中数值与 range 中颜色的映射来实现所需功能,太贴心了:    cmap = {        'Conservative': '#0343df',        'Labour': '#e50000',        'Liberal': '#ffff14',        'Others': '#929591',    }     chart = alt.Chart(df).mark_bar().encode(        # ...        color=alt.Color('party', scale=alt.Scale(domain=list(cmap.keys()), range=list(cmap.values())))    )样式调整后的最终代码应用上述样式调整之后,代码看起来不那么悦目了,但我们仍然是用声明的方式实现的,这正是 Altair 如此有弹性的原因所在。实现过程中,仍然是使用的异于显示数据的独立变量来分离图中不同属性的,而不是像在 Matplotlib 中那样直接对显示数据做复杂的操作。唯一的不同是,我们的变量名字封装在类似 alt.X() 的对象中,从而实现对显示效果的控制:    import altair as alt    from votes import long as df     cmap = {        'Conservative': '#0343df',        'Labour': '#e50000',        'Liberal': '#ffff14',        'Others': '#929591',    }     df['year'] = df['year'].astype(str)     # We're still assigning, e.g. 'party' to x, but now we've wrapped it    # in alt.X in order to specify its styling    chart = alt.Chart(df).mark_bar().encode(        x=alt.X('party', title=None),        y='seats',        column=alt.Column('year', sort=list(df['year']), title=None),        color=alt.Color('party', scale=alt.Scale(domain=list(cmap.keys()), range=list(cmap.values())))    )     chart.save('altair-elections.html')现在与 Matplotlib 方案扯平了,代码数量达到了 16 行!下图是使用我们的样式调整方案之后的 Altair 效果图:关于Python中怎么利用Altair实现数据制图就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。...

本篇内容主要讲解“linux下怎么读取使用iso镜像文件的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux下怎么读取使用iso镜像文件的方法”吧!如果拷贝到本地,可以使用mount mount fileName mountPoint -o loop,fileName是镜像文件名(*.iso,*.img), 用例:如我有一个/home/rhel5.2.iso光盘镜像文件, mkdir /mnt/b mount /home/rhel5.2.iso /mnt/b -o loop,这样进入目录/mnt/b 你就能浏览rhel5.2.iso的内容了,*.img文件的用法一样。 其它一些可能对你有用,供参考   linux是一个优秀的开放源码的操作系统,可以运行在大到巨型小到掌上型各类计算机系统上,随着linux系统的日渐成熟和稳定以及它开放源代码特有的优越性,linux在全世界得到了越来越广泛的应用。现在许多企业的计算机系统都是由UNIX系统、Linux系统和Windows系统组成的混合系统,不同系统之间经常需要进行数据交换。下面我根据自己的实际工作经验介绍一下如何在linux系统下挂接(mount)光盘镜像文件、移动硬盘、U盘以及Windows网络共享和UNIX NFS网络共享。   挂接命令(mount)   首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。   命令格式:   mount [-t vfstype] [-o options] device dir   其中:   1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:   光盘或光盘镜像:iso9660   DOS fat16文件系统:msdos   Windows 9x fat32文件系统:vfat   Windows NT ntfs文件系统:ntfs   Mount Windows文件网络共享:smbfs   UNIX(LINUX) 文件网络共享:nfs   2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:   loop:用来把一个文件当成硬盘分区挂接上系统   ro:采用只读方式挂接设备   rw:采用读写方式挂接设备   iocharset:指定访问文件系统所用字符集   3.device 要挂接(mount)的设备。   4.dir设备在系统上的挂接点(mount point)。   挂接光盘镜像文件   由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在Windows下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟光驱来使用。这样做有许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问题,随用随调十分方便;三、硬盘的读取速度要远远高于光盘的读取速度,CPU占用率大大降低。其实linux系统下制作和使用光盘镜像比Windows系统更方便,不必借用任何第三方软件包。   1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。    #cp /dev/cdrom /home/sunky/mydisk.iso 或    #dd if=/dev/cdrom of=/home/sunky/mydisk.iso    注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso   2、将文件和目录制作成光盘镜像文件,执行下面的命令。    #mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir    注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk   3、光盘镜像文件的挂接(mount)    #mkdir /mnt/vcdrom    注:建立一个目录用来作挂接点(mount point)    #mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom    注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。      挂接移动硬盘   对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk &ndash;l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。   [root at pldyrouter /]# fdisk -l   Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes   255 heads, 63 sectors/track, 8924 cylinders   Units = cylinders of 16065 * 512 = 8225280 bytes   Device Boot Start End Blocks Id System   /dev/sda1 1 4 32098+ de Dell Utility   /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS   /dev/sda3 2555 7904 42973875 83 Linux   /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)   /dev/sda5 7905 8924 8193118+ 82 Linux swap   在这里可以清楚地看到系统有一块SCSI硬盘/dev/sda和它的四个磁盘分区/dev/sda1 -- /dev/sda4, /dev/sda5是分区/dev/sda4的逻辑分区。接好移动硬盘后,再用fdisk &ndash;l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况   [root at pldyrouter /]# fdisk -l   Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes   255 heads, 63 sectors/track, 8924 cylinders   Units = cylinders of 16065 * 512 = 8225280 bytes   Device Boot Start End Blocks Id System   /dev/sda1 1 4 32098+ de Dell Utility   /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS   /dev/sda3 2555 7904 42973875 83 Linux   /dev/sda4 7905 8924 8193150 f Win95 Ext'd (LBA)   /dev/sda5 7905 8924 8193118+ 82 Linux swap   Disk /dev/sdc: 40.0 GB, 40007761920 bytes   255 heads, 63 sectors/track, 4864 cylinders   Units = cylinders of 16065 * 512 = 8225280 bytes   Device Boot Start End Blocks Id System   /dev/sdc1 1 510 4096543+ 7 HPFS/NTFS   /dev/sdc2 511 4864 34973505 f Win95 Ext'd (LBA)   /dev/sdc5 511 4864 34973473+ b Win95 FAT32   大家应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev/sdc1?、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和/dev/sdc5。    #mkdir -p /mnt/usbhd1    #mkdir -p /mnt/usbhd2    注:建立目录用来作挂接点(mount point)    #mount -t ntfs /dev/sdc1 /mnt/usbhd1    #mount -t vfat /dev/sdc5 /mnt/usbhd2    注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。    #mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1    #mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2 到此,相信大家对“linux下怎么读取使用iso镜像文件的方法”有了更深的了解,不妨来实际操作一番吧!这里是辰讯云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!...