网站性能检测评分
注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。
python中参数传递参数
Python编程入门之函数可变参数 行业视频课程
Finally, the least frequently used option is to specify that a function can be called with an arbitrary number of arguments. These arguments will be wrapped up in a tuple (see Tuples and Sequences). Before the variable number of arguments, zero or more normal arguments may occur.最后,最不常用的选项是指定函数可以用任意数量的参数来调用。这些参数将被封装在一个元组中(参见Tuples和序列)。在变量数目可变之前,可能出现零个或多个正常参数。
defwrite_multiple_items(file,separator,*args):file.write(separator.join(args))
Normally, these variadic arguments will be last in the list of formal parameters, because they scoop up all remaining input arguments that are passed to the function. Any formal parameters which occur after the *args parameter are ‘keyword-only’ arguments, meaning that they can only be used as keywords rather than positional arguments.通常,这些变量参数将在正式参数列表中最后一个,因为它们获取传递给函数的所有剩余输入参数。在*args参数之后出现的任何正式参数都是“仅关键字”参数,这意味着它们只能用作关键字而不是位置参数。
>>> defconcat(*args,sep="/"):... returnsep.join(args)...>>> concat("earth","mars","venus")'earth/mars/venus'>>>concat("earth","mars","venus",sep=".")'earth.mars.venus'
Python函数学习之参数列表解包 公司视频课程
The reverse situation occurs when the arguments are already in a list or tuple but need to be unpacked for a function call requiring separate positional arguments. For instance, the built-in range() function expects separate start and stop arguments. If they are not available separately, write the function call with the *-operator to unpack the arguments out of a list or tuple:当参数已经在列表或元组中时,相反的情况发生,但需要为需要单独位置参数的函数调用解包。例如,内置的Range()函数需要单独的开始和停止参数。如果它们单独不可用,则用*-运算符编写函数调用,以从列表或元组中解开参数:
>>> list(range(3, 6)) # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> list(range(*args)) # call with arguments unpacked from a list
[3, 4, 5]
In the same fashion, dictionaries can deliver keyword arguments with the **-operator:以同样的方式,字典可以用**运算符传递关键字参数 即**-操作符来解包参数:
>>> def parrot(voltage, state='a stiff', action='voom'):
... print("-- This parrot wouldn't", action, end=' ')
... print("if you put", voltage, "volts through it.", end=' ')
... print("E's", state, "!")
...
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>>parrot(**d)
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
Python入门:利用Python快速收集金融数据 营销视频课程
Python 作为一种开源语言提供了丰富的 API 和工具,具有较高的灵活性,同时相关的第三方库(requests+Beautiful Soup+re)也较为成熟,可以很容易的开发出数据爬取爬虫等程序,对于非专业程序员却又有编程需求的业务人员非常合适。本次我们将以采集金融数据为例讲述利用Python采集金融数据的过程。
BeautifulSoup库是解析、遍历、维护 “标签树” 的功能库,需要安装。
RE库是正则表达式库,Python自带。
在使用 Python 进行数据采集时,如果是小规模数据采集,可以使用 requests+Beautiful Soup+re 的架构来完成,使用 requests库可以自动提交网络请求和自动爬取 HTML 页面,使用 Beautiful Soup 库和 re 正则表达式可解析 HTML页面和提取页面关键信息。
在开始采集之前,我们需要对目标网站进行充分的分析。特别是URL结构和页面的HTML结构,确定好需要采集的数据和数据所在的页面。根据对目标网站(
某金融信息网站
)的分析,我这次采集的目标锁定在
某类交易商品销售情况上,将要采集
交易名称、价格、成交量、换手率、交易者、交易者地址等。此外我们还要查看网站的robots.txt 文件,以便确定爬取策略。
(一)确定数据爬取策略。
我们需要由某一页面的URL地址开始,形成目标页面的URL队列,从观察网站页面的URL变化得知,目标网站产品分类页的URL有以下规律(http://s.####/search?q=”类别”&s=页码 )URL地址的尾部由类别和页码组成,由此我们就可以制定好页面爬取URL队列的规则,只需使用Python脚本
遍历得到页面信息。每次遍历实现对单个 HTML 页面信息的获取、解析和存储。页面信息的获取调用了自定义方法getHTML (),页面信息的解析调用了自定义方法parseHTML()。
for i in range(页面数量):
time.sleep(2)
try:
url=start_url+str(每页商品数量 *i)
html=getHTML(url)
parseHTML(html,goodslist)
saveGoodsList(goodslist,file_path)
except:
continue
(二)获取 HTML 页面信息。Python可以通过
调用 requests 库的 get(url)方法获取 HTML 页面的源代码。
url 作为 get(url)方法参数指明了要获取的资源路径,返回的页面信息被存储为 Response 对象中。Response 对象的text 即为 HTML 的页面内容。requests 还包括 post()、head()等方法。使用 requests.get(url).text 可以获得url 地址所对应的 HTML 文档内容;使用 f.write(re-quests.get(url).content)可以将 url 所指向资源以二进制的形式获得并保存至本地硬盘。 getHTML()方法代码如下:
r=requests.get(url,header,timeout=30)
return r.text
(三)解析 HTML 文档,提取关键信息。获取页面信息后,就要对 HTML 页面内容进行分析以提取关键信息。整个解析过程中要对 HTTP 协议及 HTML 文档结构有足够的认识。当前要获取的是交易名称、价格、成交量、换手率、交易者、交易者地址等信息,分析 HTML 页面源代码发现其结构如下:
"title":"COMEX白银 "
"price":"15.89"
"sales":"成交量"
"user":"交易者"
"item":"广东 广州"
根据页面规律这些信息可以使用正则表达式直接提取,正则表达式是一个特殊的字符序列,它能方便地检查一个字符串是否与某种模式匹配。re 库是 python 的标准库,主要用于字符串匹配。re 的 findall()可以实现在文本中检索全部能匹配的字符子串,并将检索结果以列表类型返回。re 还包括 search()、match()、split()等方法。当然如果正则表达式无法提取信息也可以使用Beautiful Soup库等对页面内容进行解析。
(四)采集结果分析。当数据采集完毕,我们即可使用Python强大的数据分析库对数据进行分析。
如:NumPy、Matplotlib等。
NumPy
NumPy 是 Python 科学计算的基础包,它提供:
快速高效的多维数组对象 ndarray;
直接对数组执行数学运算及对数组执行元素级计算的函数;
线性代数运算、随机数生成;
将 C、C++、Fortran 代码集成到 Python 的工具等。
它专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA 用其处理一些本来使用 C++,Fortran 或Matlab 等所做的任务。
2017年最流行的15个数据科学Python库 营销视频课程
选自Medium
作者:Igor Bobriakov
机器之心编译
参与:朱朝阳、吴攀
Python 近几年在数据科学行业获得了人们的极大青睐,各种资源也层出不穷。数据科学解决方案公司 ActiveWizards 近日根据他们自己的应用开发经验,总结了数据科学家和工程师将在 2017 年最常使用的 Python 库。
核心库
1)NumPy
地址:http://numpy.org
当使用 Python 开始处理科学任务时,不可避免地需要求助 Python 的 SciPy Stack,它是专门为 Python 中的科学计算而设计的软件的集合(不要与 SciPy 混淆,它只是这个 stack 的一部分,以及围绕这个 stack 的社区)。这个 stack 相当庞大,其中有十几个库,所以我们想聚焦在核心包上(特别是最重要的)。
NumPy(代表 Numerical Python)是构建科学计算 stack 的最基础的包。它为 Python 中的 n 维数组和矩阵的操作提供了大量有用的功能。该库还提供了 NumPy 数组类型的数学运算向量化,可以提升性能,从而加快执行速度。
2)SciPy
地址:https://scipy.org
SciPy 是一个工程和科学软件库。除此以外,你还要了解 SciPy Stack 和 SciPy 库之间的区别。SciPy 包含线性代数、优化、集成和统计的模块。SciPy 库的主要功能建立在 NumPy 的基础之上,因此它的数组大量使用了 NumPy。它通过其特定的子模块提供高效的数值例程操作,比如数值积分、优化和许多其他例程。SciPy 的所有子模块中的函数都有详细的文档,这也是一个优势。
3)Pandas
地址:http://pandas.pydata.org
Pandas 是一个 Python 包,旨在通过「标记(labeled)」和「关系(relational)」数据进行工作,简单直观。Pandas 是 data wrangling 的完美工具。它设计用于快速简单的数据操作、聚合和可视化。库中有两个主要的数据结构:
Series:一维
Data Frames:二维
例如,当你要从这两种类型的结构中接收到一个新的「Dataframe」类型的数据时,你将通过传递一个「Series」来将一行添加到「Dataframe」中来接收这样的 Dataframe:
这里只是一小撮你可以用 Pandas 做的事情:
轻松删除并添加「Dataframe」中的列将数据结构转换为「Dataframe」对象处理丢失数据,表示为 NaN(Not a Number)功能强大的分组
可视化
4)Matplotlib
地址:https://matplotlib.org
Matplotlib 是另一个 SciPy Stack 核心软件包和另一个 Python 库,专为轻松生成简单而强大的可视化而量身定制。它是一个顶尖的软件,使得 Python(在 NumPy、SciPy 和 Pandas 的帮助下)成为 MatLab 或 Mathematica 等科学工具的显著竞争对手。然而,这个库比较底层,这意味着你需要编写更多的代码才能达到高级的可视化效果,通常会比使用更高级工具付出更多努力,但总的来说值得一试。花一点力气,你就可以做到任何可视化:
线图散点图条形图和直方图饼状图茎图轮廓图场图频谱图
还有使用 Matplotlib 创建标签、网格、图例和许多其他格式化实体的功能。基本上,一切都是可定制的。
该库支持不同的平台,并可使用不同的 GUI 工具套件来描述所得到的可视化。许多不同的 IDE(如 IPython)都支持 Matplotlib 的功能。
还有一些额外的库可以使可视化变得更加容易。
5)Seaborn
地址:https://seaborn.pydata.org
Seaborn 主要关注统计模型的可视化;这种可视化包括热度图(heat map),可以总结数据但也描绘总体分布。Seaborn 基于 Matplotlib,并高度依赖于它。
6)Bokeh
地址:http://bokeh.pydata.org
Bokeh 也是一个很好的可视化库,其目的是交互式可视化。与之前的库相反,这个库独立于 Matplotlib。正如我们已经提到的那样,Bokeh 的重点是交互性,它通过现代浏览器以数据驱动文档(d3.js)的风格呈现。
7)Plotly
地址:https://plot.ly
最后谈谈 Plotly。它是一个基于 Web 的工具箱,用于构建可视化,将 API 呈现给某些编程语言(其中包括 Python)。在 plot.ly 网站上有一些强大的、开箱即用的图形。为了使用 Plotly,你需要设置你的 API 密钥。图形处理会放在服务器端,并在互联网上发布,但也有一种方法可以避免这么做。
机器学习
8)SciKit-Learn
地址:http://scikit-learn.org
Scikits 是 SciPy Stack 的附加软件包,专为特定功能(如图像处理和辅助机器学习)而设计。在后者方面,其中最突出的一个是 scikit-learn。该软件包构建于 SciPy 之上,并大量使用其数学操作。
scikit-learn 有一个简洁和一致的接口,可利用常见的机器学习算法,让我们可以简单地在生产中应用机器学习。该库结合了质量很好的代码和良好的文档,易于使用且有着非常高的性能,是使用 Python 进行机器学习的实际上的行业标准。
深度学习:Keras / TensorFlow / Theano
在深度学习方面,Python 中最突出和最方便的库之一是 Keras,它可以在 TensorFlow 或者 Theano 之上运行。让我们来看一下它们的一些细节。
9)Theano
地址:https://github/Theano
首先,让我们谈谈 Theano。Theano 是一个 Python 包,它定义了与 NumPy 类似的多维数组,以及数学运算和表达式。该库是经过编译的,使其在所有架构上能够高效运行。这个库最初由蒙特利尔大学机器学习组开发,主要是为了满足机器学习的需求。
要注意的是,Theano 与 NumPy 在底层的操作上紧密集成。该库还优化了 GPU 和 CPU 的使用,使数据密集型计算的性能更快。
效率和稳定性调整允许更精确的结果,即使是非常小的值也可以,例如,即使 x 很小,log(1+x) 也能得到很好的结果。
10)TensorFlow
地址:https://tensorflow.org
TensorFlow 来自 Google 的开发人员,它是用于数据流图计算的开源库,专门为机器学习设计。它是为满足 Google 对训练神经网络的高要求而设计的,是基于神经网络的机器学习系统 DistBelief 的继任者。然而,TensorFlow 并不是谷歌的科学专用的——它也足以支持许多真实世界的应用。
TensorFlow 的关键特征是其多层节点系统,可以在大型数据集上快速训练人工神经网络。这为 Google 的语音识别和图像识别提供了支持。
11)Keras
地址:https://keras.io
最后,我们来看看 Keras。它是一个使用高层接口构建神经网络的开源库,它是用 Python 编写的。它简单易懂,具有高级可扩展性。它使用 Theano 或 TensorFlow 作为后端,但 Microsoft 现在已将 CNTK(Microsoft 的认知工具包)集成为新的后端。
其简约的设计旨在通过建立紧凑型系统进行快速和容易的实验。
Keras 极其容易上手,而且可以进行快速的原型设计。它完全使用 Python 编写的,所以本质上很高层。它是高度模块化和可扩展的。尽管它简单易用且面向高层,但 Keras 也非常深度和强大,足以用于严肃的建模。
Keras 的一般思想是基于神经网络的层,然后围绕层构建一切。数据以张量的形式进行准备,第一层负责输入张量,最后一层用于输出。模型构建于两者之间。
自然语言处理
12)NLTK
地址:http://nltk.org
这套库的名称是 Natural Language Toolkit(自然语言工具包),顾名思义,它可用于符号和统计自然语言处理的常见任务。NLTK 旨在促进 NLP 及相关领域(语言学、认知科学和人工智能等)的教学和研究,目前正被重点关注。
NLTK 允许许多操作,例如文本标记、分类和 tokenizing、命名实体识别、建立语语料库树(揭示句子间和句子内的依存性)、词干提取、语义推理。所有的构建块都可以为不同的任务构建复杂的研究系统,例如情绪分析、自动摘要。
13)Gensim
地址:http://radimrehurek/gensim
这是一个用于 Python 的开源库,实现了用于向量空间建模和主题建模的工具。这个库为大文本进行了有效的设计,而不仅仅可以处理内存中内容。其通过广泛使用 NumPy 数据结构和 SciPy 操作而实现了效率。它既高效又易于使用。
Gensim 的目标是可以应用原始的和非结构化的数字文本。Gensim 实现了诸如分层 Dirichlet 进程(HDP)、潜在语义分析(LSA)和潜在 Dirichlet 分配(LDA)等算法,还有 tf-idf、随机投影、word2vec 和 document2vec,以便于检查一组文档(通常称为语料库)中文本的重复模式。所有这些算法是无监督的——不需要任何参数,唯一的输入是语料库。
数据挖掘与统计
14)Scrapy
地址:https://scrapy.org
Scrapy 是用于从网络检索结构化数据(如联系人信息或 URL)的爬虫程序(也称为 spider bots)的库。它是开源的,用 Python 编写。它最初是为 scraping 设计的,正如其名字所示的那样,但它现在已经发展成了一个完整的框架,可以从 API 收集数据,也可以用作通用的爬虫。
该库在接口设计上遵循著名的 Don』t Repeat Yourself 原则——提醒用户编写通用的可复用的代码,因此可以用来开发和扩展大型爬虫。
Scrapy 的架构围绕 Spider 类构建,该类包含了一套爬虫所遵循的指令。
15)Statsmodels
地址:http://statsmodels.org
statsmodels 是一个用于 Python 的库,正如你可能从名称中猜出的那样,其让用户能够通过使用各种统计模型估计方法以及执行统计断言和分析来进行数据探索。
许多有用的特征是描述性的,并可通过使用线性回归模型、广义线性模型、离散选择模型、稳健的线性模型、时序分析模型、各种估计器进行统计。
该库还提供了广泛的绘图函数,专门用于统计分析和调整使用大数据统计数据的良好性能。
结论
这个列表中的库被很多数据科学家和工程师认为是最顶级的,了解和熟悉它们是很有价值的。这里有这些库在 GitHub 上活动的详细统计:
当然,这并不是一份完全详尽的列表,还有其它很多值得关注的库、工具包和框架。比如说用于特定任务的 SciKit 包,其中包括用于图像的 SciKit-Image。如果你也有好想法,不妨与我们分享。
你不知的Python数据结构 流量视频课程
Python一共有三大数据结构,它是Python进行数据分析的基础,分别是tuple,list以及dict。本文通过这三者的学习,打下数据分析的基础。
数组
数组是一个有序的集合,他用方括号表示。
num就是一个典型的数组。数组不限定其中的数据类型,可以是整数也可以是字符串,或者是混合型。
数组可以直接用特定的函数,函数名和Excel相近。
sum是求和,len则是统计数组中的元素个数。
上述列举的函数是数组内整体元素的应用,如果我只想针对单一的元素呢?比如查找,这里就要用到数组的特性,索引。索引和SQL中的索引差不多,都是用来指示数据所在位置的逻辑指针。数组的索引便是元素所在的序列位置。
注意,索引位置是从0开始算起,这是编程语言的默认特色了。num[0]指数组的第一个元素,num[1]指数组的第二个元素。
我们用len()计算出了数组元素个数是5,那么它最后一个元素的索引是4。若是数组内的元素特别多呢?此时查找数组最后一位的元素会有点麻烦。Python有一个简易的方法,可以用负数表示,意为从最后一个数字计算索引。
这里的num[4]等价于num[-1],num[-2]则指倒数第二个的元素。
再来一个新问题,如何一次性选择多个元素?例如筛选出数组前三个元素。在Python中,用:表示范围。
num[0:3]筛选了前三个元素,方括号左边是闭区间,右边是开区间,所以这里是num[0],num[1]和num[2],并不包含num[3]。这个方法叫做切片。
上述是索引的特殊用法,[0:]表示从第0个索引开始,直到最后一个元素。[:3]表示从第一个元素开始,直到第3个索引。
负数当然也有特殊用法。[-1:]表示从最后一个元素开始,因为它已经是最后一个元素了,所以只返回它本身。[:-1]表示从第一个元素开始到最后一个元素。num[-2:-1]和num[-3:-1]大同小异。
数组的增删查
我们已经了解数组的基本概念,不过仍旧停留在查找,它不涉及数据的变化。工作中,更多需要操纵数组,对数组的元素进行添加,删除,更改。
数组通过insert函数插入,函数的第一个参数表示插入的索引位置,第二个表示插入的值。
另外一种方式是append,直接在数组末尾添加上元素。它在之后讲到迭代和循环时应用较多。
如果要删除特定位置的元素,用pop函数。如果函数没有选择数值,默认删除最后一个元素,如果有,则删除数值对应索引的元素。
更改元素不需要用到函数,直接选取元素重新赋值即可。
到这里,数组增删改查已经讲完,但这只是一维数组,一维数组之上还有多维数组。如果现在有一份数据是关于学生信息,一共有三个学生,要求包含学生的姓名,年龄,和性别,应该怎么用数组表示呢?
有两种思路,一种是用三个一维数组分别表示学生的姓名,年龄和性别。
学生属性被拆分成多个数组,利用索引来表示其信息,这里的索引有些类似SQL的主键,通过索引查找到信息。但是这种方法并不直观,实际应用会比较麻烦,更好的方法是表示成多维数组。
所谓多维数组,是数组内再嵌套数组,图中表示的是一个宽度为3,高度为3的二维数组。此时student[0]返回的是数组而不是单一值。这种方法将学生信息合并在一起,比第一个案例更容易使用。
如果想选择第一个学生的性别,应该怎么办呢?很简单,后面再加一个索引即可。
现在尝试快速创建一个多维数组。
[0]*3将快速生成3个元素值为0的数组,这是一种快捷操作,而[row]*4则将其扩展成二维数据,因为是4,所以是3*4的结构。
这里有一个注意点,当我们想更改多维数组中的某一个元素而不是数组时,这种方式会错误。
按照正常的想法,martix[1][0]将会改变第二个数组中的第一个值为1,但是结果是所有数组的第一个值都变成1。这是因为在matrix = [row] * 4操作中,只是创建3个指向row的引用,可以简单理解成四个数组是一体的。一旦其中一个改变,所有的都会变。
比较稳妥的方式是直接定义多维数组,或者用循环间接定义。多维数组是一个挺重要的概念,它也能直接表示成矩阵,是后续很多算法和分析的基础(不过在pandas中,它是另外一种形式了)。
元组
tuple叫做元组,它和数组非常相似,不过用圆括号表示。但是它最大的特点是不能修改。
当我们想要修改时就会报错。
而选择和数组没有差异。
元组可以作为简化版的数组,因为它不可更改的特性,很多时候可以作为常量使用,防止被篡改。这样会更安全。
字典
字典dict全称dictionary,以键值对key-value的形式存储。所谓键值,就是将key作为索引存储。用大括号表示。
图中的’qinlu’是key,18是value值。key是唯一的,value可以对应各种数据类型。key-value的原理不妨想象成查找字典,拼音是key,对应的文字是value(当然字典的拼音不唯一)。
字典和数组的差异在于,因为字典以key的形式存储和查找,所以它的查询速度非常快,毕竟翻字典的时候你只要知道拼音就能快速定位了。对dict数据结构,10条记录和10万条记录的查找没有区别。
这种查找方式的缺点是占用内存大。数组则相反,查找速度随着元素的增加逐渐下降,这个过程想象成程序在一页页的翻一本没有拼音的字典,直到找到内容。数组的优点是占用的内存空间小。
所以数组和字典的优缺点相反,dict是空间换时间,list是时间换空间,这是编程中一个比较重要的概念。实际中,数据分析师的工作不太涉及工程化,选用数组或者字典没有太严苛的限制。
细心的读者可能已经发现,字典定义时我的输入顺序是qinlu,lulu,qinqin,而打印出来是lulu,qinlu,qinqin,顺序变了。这是因为定义时key的顺序和放在内存的key顺序没有关系,key-value通过hash算法互相确定,甚至不同Python版本的哈希算法也不同。这一点应用中要避免出错。
既然字典通过key-value对匹配查找,那么它自然不能不用数组的数值索引,它只能通过key值。
如果key不存在,会报错。
通过in方法,可以返回True或False,避免报错。
dict和list一样,直接通过赋值更改value。
能不能更改key的名字?不能,key一旦确定,就无法再修改,好比字典定好后,你能修改字的拼音么?
dict中删除key和list一样,通过pop函数。增加key则是直接赋予一个新的键值对。
dict的keys和values两个函数直接输出所有的key值和value值。如果要转换成数组,则再外面嵌套一个list函数。
items函数,将key-value对变成tuple形式,以数组的方式输出。
字典可以通过嵌套应用更复杂的数据格式,和NoSQL与JSON差不多。
基础的数据类型差不多了,更多函数应用大家网上自行查阅文档,这块掌握了,在数据清洗过程中将会非常高效,尤其是读取Excel数据时。当然不要求滚瓜烂熟,因为后面将学习更加强大的Numpy和Pandas
python数据分析笔记——数据加载与整理 互联网视频课程
文 | 张俊红
数据加载
导入文本数据
1、导入文本格式数据(CSV)的方法:
方法一:使用pd.read_csv(),默认打开csv文件。
9、10、11行三种方式均可以导入文本格式的数据。
特殊说明:第9行使用的条件是运行文件.py需要与目标文件CSV在一个文件夹中的时候可以只写文件名。第10和11行中文件名ex1.CSV前面的部分均为文件的路径。
方法二:使用pd.read.table(),需要指定是什么样分隔符的文本文件。用sep=””来指定。
2、当文件没有标题行时
可以让pandas为其自动分配默认的列名。
也可以自己定义列名。
3、将某一列作为索引,比如使用message列做索引。通过index_col参数指定’message’。
4、要将多个列做成一个层次化索引,只需传入由列编号或列名组成的列表即可。
5、文本中缺失值处理,缺失数据要么是没有(空字符串),要么是用某个标记值表示的,默认情况下,pandas会用一组经常出现的标记值进行识别,如NA、NULL等。查找出结果以NAN显示。
6、逐块读取文本文件
如果只想读取几行(避免读取整个文件),通过nrows进行制定即可。
7、对于不是使用固定分隔符分割的表格,可以使用正则表达式来作为read_table的分隔符。
(’\s+’是正则表达式中的字符)。
导入JSON数据
JSON数据是通过HTTP请求在Web浏览器和其他应用程序之间发送数据的标注形式之一。通过json.loads即可将JSON对象转换成Python对象。(import json)
对应的json.dumps则将Python对象转换成JSON格式。
导入EXCEL数据
直接使用read_excel(文件名路径)进行获取,与读取CSV格式的文件类似。
导入数据库数据
主要包含两种数据库文件,一种是SQL关系型数据库数据,另一种是非SQL型数据库数据即MongoDB数据库文件。
数据库文件是这几种里面比较难的,本人没有接触数据库文件,没有亲测,所以就不贴截图了。
数据整理
合并数据集
1、数据库风格的合并
数据库风格的合并与SQL数据库中的连接(join)原理一样。通过调用merge函数即可进行合并。
当没有指明用哪一列进行连接时,程序将自动按重叠列的列名进行连接,上述语句就是按重叠列“key”列进行连接。也可以通过on来指定连接列进行连接。
当两个对象的列名不同时,即两个对象没有共同列时,也可以分别进行指定。
Left_on是指左侧DataFrame中用作连接的列。
right_on是指右侧DataFrame中用作连接的列。
通过上面的语句得到的结果里面只有a和b对应的数据,c和d以及与之相关的数据被消去,这是因为默认情况下,merge做的是‘inner’连接,即sql中的内连接,取得两个对象的交集。也有其他方式连接:left、right、outer。用“how”来指明。
也可以根据多个键(列)进行合并,用on传入一个由列名组成的列表即可。
2、索引上的合并
(1)普通索引的合并
Left_index表示将左侧的行索引引用做其连接键
right_index表示将右侧的行索引引用做其连接键
上面两个用于DataFrame中的连接键位于其索引中,可以使用Left_index=True或right_index=True或两个同时使用来进行键的连接。
(2)层次化索引
与数据库中用on来根据多个键合并一样。
3、轴向连接(合并)
轴向连接,默认是在轴方向进行连接,也可以通过axis=1使其进行横向连接。
(1)对于numpy对象(数组)可以用numpy中的concatenation函数进行合并。
(2)对于pandas对象(如Series和DataFrame),可以pandas中的concat函数进行合并。
·4、合并重叠数据
对于索引全部或部分重叠的两个数据集,我们可以使用numpy的where函数来进行合并,where函数相当于if—else函数。
对于重复的数据显示出相同的数据,而对于不同的数据显示a列表的数据。同时也可以使用combine_first的方法进行合并。合并原则与where函数一致,遇到相同的数据显示相同数据,遇到不同的显示a列表数据。
重塑数据集
1、旋转数据
(1)重塑索引、分为stack(将数据的列旋转为行)和unstack(将数据的行旋转为列)。
(2)将‘长格式’旋转为‘宽格式’
2、转换数据
(1)数据替换,将某一值或多个值用新的值进行代替。(比较常用的是缺失值或异常值处理,缺失值一般都用NULL、NAN标记,可以用新的值代替缺失标记值)。方法是replace。
一对一替换:用np.nan替换-999
多对一替换:用np.nan替换-999和-1000.
多对多替换:用np.nan代替-999,0代替-1000.
也可以使用字典的形式来进行替换。
(2)离散化或面元划分,即根据某一条件将数据进行分组。
利用pd.cut()方式对一组年龄进行分组。
默认情况下,cut对分组条件的左边是开着的状态,右边是闭合状态。可以用left(right)=False来设置哪边是闭合的。
清理数据集
主要是指清理重复值,DataFrame中经常会出现重复行,清理数据主要是针对这些重复行进行清理。
利用drop_duplicates方法,可以返回一个移除了重复行的DataFrame.
默认情况下,此方法是对所有的列进行重复项清理操作,也可以用来指定特定的一列或多列进行。
默认情况下,上述方法保留的是第一个出现的值组合,传入take_last=true则保留最后一个。
End.
来源:36大数据
python之函数默认参数及注意点 企业视频课程
前言
在python中,函数的参数有多种类型,有默认参数、可变参数、关键字参数、命名关键字参数等,本文主要深入讲解默认参数。对于默认参数,其实在功能上就是为了简化函数调用。
默认参数
1、格式
2、说明及注意点
a. 在使用缺省参数后,对于函数的必填参数必须在前,默认参数在后。
b. 默认参数在一个函数中可以有多个。
c. 当一个函数中的某个参数的改动不大,就可以考虑将这个参数设置为默认参数,比如说一个人的民族,这种参数就可以设置为缺省参数。
案例a
小总结:从上图可以看出,对于num2这个参数如果你要传入的参数是100,则可传可不传,都是可以的。这个也是默认参数给我们带来的方便之处。
python中print语句
结论:其实在python中的print语句就是采用了缺省参数。
使用可变类型作为缺省参数
1、代码举例
结论:上图中的程序运行结果是[10],[20], 但是实际上结果是[10],[10,20]。问题的原因主要在于scores的类型是一个列表,本身是一个可变类型,那么对于列表的append方法添加元素的时候并不会对socres进行重新创建一个新的列表,那么也就是说,你两次append元素,其实都是对同一个列表进行操作。
总结
对于默认参数,如果是不可变类型,那么多次对函数的调用是没有问题的。
对于默认参数,如果是可变参数,那么对于参数的传递,就要特别考虑结果是正确性,所以对于这种情况,就必须在调用函数的时候就要重新初始化一次列表。
Python函数学习之参数列表解包 流量视频课程
The reverse situation occurs when the arguments are already in a list or tuple but need to be unpacked for a function call requiring separate positional arguments. For instance, the built-in range() function expects separate start and stop arguments. If they are not available separately, write the function call with the *-operator to unpack the arguments out of a list or tuple:当参数已经在列表或元组中时,相反的情况发生,但需要为需要单独位置参数的函数调用解包。例如,内置的Range()函数需要单独的开始和停止参数。如果它们单独不可用,则用*-运算符编写函数调用,以从列表或元组中解开参数:
>>> list(range(3, 6)) # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> list(range(*args)) # call with arguments unpacked from a list
[3, 4, 5]
In the same fashion, dictionaries can deliver keyword arguments with the **-operator:以同样的方式,字典可以用**运算符传递关键字参数 即**-操作符来解包参数:
>>> def parrot(voltage, state='a stiff', action='voom'):
... print("-- This parrot wouldn't", action, end=' ')
... print("if you put", voltage, "volts through it.", end=' ')
... print("E's", state, "!")
...
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>>parrot(**d)
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
python数据分析笔记——数据加载与整理 互联网视频课程
文 | 张俊红
数据加载
导入文本数据
1、导入文本格式数据(CSV)的方法:
方法一:使用pd.read_csv(),默认打开csv文件。
9、10、11行三种方式均可以导入文本格式的数据。
特殊说明:第9行使用的条件是运行文件.py需要与目标文件CSV在一个文件夹中的时候可以只写文件名。第10和11行中文件名ex1.CSV前面的部分均为文件的路径。
方法二:使用pd.read.table(),需要指定是什么样分隔符的文本文件。用sep=””来指定。
2、当文件没有标题行时
可以让pandas为其自动分配默认的列名。
也可以自己定义列名。
3、将某一列作为索引,比如使用message列做索引。通过index_col参数指定’message’。
4、要将多个列做成一个层次化索引,只需传入由列编号或列名组成的列表即可。
5、文本中缺失值处理,缺失数据要么是没有(空字符串),要么是用某个标记值表示的,默认情况下,pandas会用一组经常出现的标记值进行识别,如NA、NULL等。查找出结果以NAN显示。
6、逐块读取文本文件
如果只想读取几行(避免读取整个文件),通过nrows进行制定即可。
7、对于不是使用固定分隔符分割的表格,可以使用正则表达式来作为read_table的分隔符。
(’\s+’是正则表达式中的字符)。
导入JSON数据
JSON数据是通过HTTP请求在Web浏览器和其他应用程序之间发送数据的标注形式之一。通过json.loads即可将JSON对象转换成Python对象。(import json)
对应的json.dumps则将Python对象转换成JSON格式。
导入EXCEL数据
直接使用read_excel(文件名路径)进行获取,与读取CSV格式的文件类似。
导入数据库数据
主要包含两种数据库文件,一种是SQL关系型数据库数据,另一种是非SQL型数据库数据即MongoDB数据库文件。
数据库文件是这几种里面比较难的,本人没有接触数据库文件,没有亲测,所以就不贴截图了。
数据整理
合并数据集
1、数据库风格的合并
数据库风格的合并与SQL数据库中的连接(join)原理一样。通过调用merge函数即可进行合并。
当没有指明用哪一列进行连接时,程序将自动按重叠列的列名进行连接,上述语句就是按重叠列“key”列进行连接。也可以通过on来指定连接列进行连接。
当两个对象的列名不同时,即两个对象没有共同列时,也可以分别进行指定。
Left_on是指左侧DataFrame中用作连接的列。
right_on是指右侧DataFrame中用作连接的列。
通过上面的语句得到的结果里面只有a和b对应的数据,c和d以及与之相关的数据被消去,这是因为默认情况下,merge做的是‘inner’连接,即sql中的内连接,取得两个对象的交集。也有其他方式连接:left、right、outer。用“how”来指明。
也可以根据多个键(列)进行合并,用on传入一个由列名组成的列表即可。
2、索引上的合并
(1)普通索引的合并
Left_index表示将左侧的行索引引用做其连接键
right_index表示将右侧的行索引引用做其连接键
上面两个用于DataFrame中的连接键位于其索引中,可以使用Left_index=True或right_index=True或两个同时使用来进行键的连接。
(2)层次化索引
与数据库中用on来根据多个键合并一样。
3、轴向连接(合并)
轴向连接,默认是在轴方向进行连接,也可以通过axis=1使其进行横向连接。
(1)对于numpy对象(数组)可以用numpy中的concatenation函数进行合并。
(2)对于pandas对象(如Series和DataFrame),可以pandas中的concat函数进行合并。
·4、合并重叠数据
对于索引全部或部分重叠的两个数据集,我们可以使用numpy的where函数来进行合并,where函数相当于if—else函数。
对于重复的数据显示出相同的数据,而对于不同的数据显示a列表的数据。同时也可以使用combine_first的方法进行合并。合并原则与where函数一致,遇到相同的数据显示相同数据,遇到不同的显示a列表数据。
重塑数据集
1、旋转数据
(1)重塑索引、分为stack(将数据的列旋转为行)和unstack(将数据的行旋转为列)。
(2)将‘长格式’旋转为‘宽格式’
2、转换数据
(1)数据替换,将某一值或多个值用新的值进行代替。(比较常用的是缺失值或异常值处理,缺失值一般都用NULL、NAN标记,可以用新的值代替缺失标记值)。方法是replace。
一对一替换:用np.nan替换-999
多对一替换:用np.nan替换-999和-1000.
多对多替换:用np.nan代替-999,0代替-1000.
也可以使用字典的形式来进行替换。
(2)离散化或面元划分,即根据某一条件将数据进行分组。
利用pd.cut()方式对一组年龄进行分组。
默认情况下,cut对分组条件的左边是开着的状态,右边是闭合状态。可以用left(right)=False来设置哪边是闭合的。
清理数据集
主要是指清理重复值,DataFrame中经常会出现重复行,清理数据主要是针对这些重复行进行清理。
利用drop_duplicates方法,可以返回一个移除了重复行的DataFrame.
默认情况下,此方法是对所有的列进行重复项清理操作,也可以用来指定特定的一列或多列进行。
默认情况下,上述方法保留的是第一个出现的值组合,传入take_last=true则保留最后一个。
End.
来源:36大数据