“Python”的版本间的差异

来自Wiki.Citydatum
跳转至: 导航搜索
第14行: 第14行:
 
* Python是一种[[解释性语言]],特别强调代码的可读性,最典型的例子就是Python用行缩进来区分代码块,而不是其他编程语言中较为常见的大括号。
 
* Python是一种[[解释性语言]],特别强调代码的可读性,最典型的例子就是Python用行缩进来区分代码块,而不是其他编程语言中较为常见的大括号。
 
* Python常常被称为[[胶水语言]],能将其他编程语言制作的各种模块连接在一起。
 
* Python常常被称为[[胶水语言]],能将其他编程语言制作的各种模块连接在一起。
 +
 +
=== Python改进提案(PEP) ===
 +
* Python改进提案(Python Enhancement Proposals,PEP),由经验丰富的Python开发人员提出的改进建议;
 +
* PEP 8 是关于提升代码可读性的样式指引:
 +
** 关于变量名的参考建议:模块名称应短小、全小写;类名应采用CapWords样式;变量和函数应采用lowercase_with_underscores样式;常量应采用CAPS_WITH_UNDERSCORES样式;与Python关键字冲突的名字,如class、if,应添加下划线前缀;
 +
** 关于空格使用的建议:建议在操作符前后,逗号后添加空格,以增加可读性;但不应过度使用白空格(whitespace),如在任何类型的括号内,应该避免使用空格;
 +
** 其他建议:每行不应超过80个字符;避免使用 from module import *;每行应该只包括一个语句;
 +
** tab与空格的选择:建议使用空格而非tab来设定行缩进,如果使用空格每行四个;当然,tab或者空格某种程度来说是个人习惯问题,但你选定以后,就该只用这一种方式;
  
 
=== 设计哲学 ===
 
=== 设计哲学 ===
 
* Python设计哲学(Zen of Python)包括了19条Python语言的基本原则,由Tim Peter于1999年在Python邮件列表中首次提出和发布。原始文档及后续的版本中都提及,应为20条基本原则而非19条,缺失的原则由Gindo进行补充,但实际上从未发布;
 
* Python设计哲学(Zen of Python)包括了19条Python语言的基本原则,由Tim Peter于1999年在Python邮件列表中首次提出和发布。原始文档及后续的版本中都提及,应为20条基本原则而非19条,缺失的原则由Gindo进行补充,但实际上从未发布;
 
* Python设计哲学被Python优化提议(PEP,Python Enhancement Proposals)收录,作为第20号信息文档,可在Python官方网站中查看。同时作为Python编译器的复活节彩蛋,输入代码 <code>import this</code> 即会显示;
 
* Python设计哲学被Python优化提议(PEP,Python Enhancement Proposals)收录,作为第20号信息文档,可在Python官方网站中查看。同时作为Python编译器的复活节彩蛋,输入代码 <code>import this</code> 即会显示;
{| class="wikitable"
+
{| class="wikitable" width=100%
 
|- valign = "top"
 
|- valign = "top"
 
|  Beautiful is better than ugly.<br/>Explicit is better than implicit.<br/>Simple is better than complex.<br/>Complex is better than complicated.<br/>Flat is better than nested.<br/>Sparse is better than dense.<br/>Readability counts.<br/>Special cases aren't special enough to break the rules.<br/>Although practicality beats purity.<br/>Errors should never pass silently.<br/>Unless explicitly silenced.<br/>In the face of ambiguity, refuse the temptation to guess.<br/>There should be one—and preferably only one—obvious way to do it.<br/>Although that way may not be obvious at first unless you're Dutch.<br/>Now is better than never.<br/>Although never is often better than right now.<br/>If the implementation is hard to explain, it's a bad idea.<br/>If the implementation is easy to explain, it may be a good idea.<br/>Namespaces are one honking great idea—let's do more of those! <br/> ''Zen of Python, by Tim Peter''
 
|  Beautiful is better than ugly.<br/>Explicit is better than implicit.<br/>Simple is better than complex.<br/>Complex is better than complicated.<br/>Flat is better than nested.<br/>Sparse is better than dense.<br/>Readability counts.<br/>Special cases aren't special enough to break the rules.<br/>Although practicality beats purity.<br/>Errors should never pass silently.<br/>Unless explicitly silenced.<br/>In the face of ambiguity, refuse the temptation to guess.<br/>There should be one—and preferably only one—obvious way to do it.<br/>Although that way may not be obvious at first unless you're Dutch.<br/>Now is better than never.<br/>Although never is often better than right now.<br/>If the implementation is hard to explain, it's a bad idea.<br/>If the implementation is easy to explain, it may be a good idea.<br/>Namespaces are one honking great idea—let's do more of those! <br/> ''Zen of Python, by Tim Peter''
第64行: 第72行:
 
=== 数据分析 ===
 
=== 数据分析 ===
 
==== 基本操作流程 ====
 
==== 基本操作流程 ====
{| class="wikitable"
+
{| class="wikitable" width=100%
 
|-
 
|-
 
! 操作流程 !! 步骤说明 !! 常用命令/库.函数
 
! 操作流程 !! 步骤说明 !! 常用命令/库.函数
第104行: 第112行:
  
 
==== 常见相关库 ====
 
==== 常见相关库 ====
{| class="wikitable"
+
{| class="wikitable" width = 100%
 +
|-
 +
! 名称 !! width = 100px | 应用领域 !! 功能概述
 +
|-
 +
| '''numpy''' || 科学计算 || python科学计算的基础包;numpy提供了快速高效的多维数组对象ndarray、对数组执行元素级计算以及直接对数组执行数学运算的函数、读写硬盘上基于数组的数据集的工具,线性代数运算、傅里叶变换、随机数生成功能,以及将C、C++、Fortran代码集成到python的工具;
 
|-
 
|-
! 名称 !! 功能概述
+
| '''pandas''' || 科学计算 ||提供了能够快速便捷处理结构化数据的大量数据结构和函数;pandas兼具numpy高性能的数组计算功能以及电子表格和关系型数据(如SQL)灵活的数据处理能力,提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作;
 
|-
 
|-
| '''numpy''' || python科学计算的基础包;numpy提供了快速高效的多维数组对象ndarray、对数组执行元素级计算以及直接对数组执行数学运算的函数、读写硬盘上基于数组的数据集的工具,线性代数运算、傅里叶变换、随机数生成功能,以及将C、C++、Fortran代码集成到python的工具;
+
| '''MySQLdb''' || 数据库操作 || 提供MySQL数据库连接等功能的Python库;
 
|-
 
|-
| '''pandas''' || 提供了能够快速便捷处理结构化数据的大量数据结构和函数;pandas兼具numpy高性能的数组计算功能以及电子表格和关系型数据(如SQL)灵活的数据处理能力,提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作;
+
| '''xlrd''' || Excel文档操作 || 提供读取Excel文件功能的Python库;
 
|-
 
|-
| '''MySQLdb''' || 提供MySQL数据库连接等功能的Python库;
+
| '''matplotlib''' || 数据图表绘制 || 最为流行的数据图表绘制Python库;
 
|-
 
|-
| '''xlrd''' || 提供读取Excel文件功能的Python库;
+
| '''scipy''' || 科学计算 || 一组专门解决科学计算中各种标准问题域的包的集合;
 
|-
 
|-
| '''matplotlib''' || 最为流行的数据图表绘制Python库;
+
| '''statsmodels''' || 统计分析 || 用于统计分析各类模型的模型集合;([https://github.com/statsmodels/statsmodels Github页面])
 
|-
 
|-
| '''scipy''' || 一组专门解决科学计算中各种标准问题域的包的集合;
+
| '''scikit-learn''' || 数据分析 || 一些用于数据挖掘与分析的,简单、高效的工具集;([http://scikit-learn.org/stable/ 官方网站])
 
|-
 
|-
| '''statsmodels''' || 用于统计分析各类模型的模型集合;([https://github.com/statsmodels/statsmodels Github页面])
+
| '''BeautifulSoup''' || 网络数据抓取 || 利用HTTP请求方式简化网站访问,提供更为强大的数据提取工具,效果通常比自己用正则表达式建立的爬虫要好;([https://www.crummy.com/software/BeautifulSoup/ 官方网站])
 
|-
 
|-
| '''scikit-learn''' || 一些用于数据挖掘与分析的,简单、高效的工具集([http://scikit-learn.org/stable/ 官方网站])
+
| '''Django''' || 网站框架 || 最常用的用Python编写的网页框架,代表网站Instagram、Disqus;Django包括很多有用的特性,且大多缺失功能可用扩展包来解决;([https://www.djangoproject.com/ 官方网站])
 
|}
 
|}
  

2018年12月29日 (六) 20:22的版本

TODO
提示:欢迎帮助我们进一步提升文章质量,当前重点任务包括:
  • 章节补充:补充案例、上手章节内容;
  • 图片补充:用python绘制示例图表、以python为主要工具构建的网站或应用的截屏;
  • 内容优化:概况章节的补充完善,补充来源引用与更多阅读章节的链接;


Python标识

Python是一款自由、开源的高级解释性计算机编程语言,遵循 GPL(GNU General Public License)协议。Python语法简洁清晰,具有丰富和强大的库,能够把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。在IEEE发布2017年编程语言排行榜中,Python高居首位[1]

概况

发展历程

  • Python是一种高级编程语言,由荷兰人Guido van Rossum创建并于1991首次发布。

主要特点

  • Python是一种解释性语言,特别强调代码的可读性,最典型的例子就是Python用行缩进来区分代码块,而不是其他编程语言中较为常见的大括号。
  • Python常常被称为胶水语言,能将其他编程语言制作的各种模块连接在一起。

Python改进提案(PEP)

  • Python改进提案(Python Enhancement Proposals,PEP),由经验丰富的Python开发人员提出的改进建议;
  • PEP 8 是关于提升代码可读性的样式指引:
    • 关于变量名的参考建议:模块名称应短小、全小写;类名应采用CapWords样式;变量和函数应采用lowercase_with_underscores样式;常量应采用CAPS_WITH_UNDERSCORES样式;与Python关键字冲突的名字,如class、if,应添加下划线前缀;
    • 关于空格使用的建议:建议在操作符前后,逗号后添加空格,以增加可读性;但不应过度使用白空格(whitespace),如在任何类型的括号内,应该避免使用空格;
    • 其他建议:每行不应超过80个字符;避免使用 from module import *;每行应该只包括一个语句;
    • tab与空格的选择:建议使用空格而非tab来设定行缩进,如果使用空格每行四个;当然,tab或者空格某种程度来说是个人习惯问题,但你选定以后,就该只用这一种方式;

设计哲学

  • Python设计哲学(Zen of Python)包括了19条Python语言的基本原则,由Tim Peter于1999年在Python邮件列表中首次提出和发布。原始文档及后续的版本中都提及,应为20条基本原则而非19条,缺失的原则由Gindo进行补充,但实际上从未发布;
  • Python设计哲学被Python优化提议(PEP,Python Enhancement Proposals)收录,作为第20号信息文档,可在Python官方网站中查看。同时作为Python编译器的复活节彩蛋,输入代码 import this 即会显示;
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one—and preferably only one—obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea—let's do more of those!
Zen of Python, by Tim Peter
优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)
即便假借特例的实用性之名
也不可违背这些规则(这些规则至高无上)
不要包容所有错误
除非你确定需要这样做(精准地捕获异常,不写except:pass风格的代码)
当存在多种可能,不要尝试去猜测
而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido)
做也许好过不做
但不假思索就动手还不如不做(动手之前要细思量)
如果你无法向人描述你的方案,那肯定不是一个好方案
反之亦然(方案测评标准)
命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
中文翻译源自《Python之禅》的翻译和解释,略有修改。

  • Python拥有一个强大的标准库,提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python标准库提供的工具适用于多种类型的任务,如:针对面向互联网的应用,提供了对MIME、HTTP等标准格式与协议的支持;针对图形用户界面(GUI)应用,提供了关系数据库连接、随机数生成、任意位数小数算法支持、正则表达式操作、单元测试等各类模块。Python标准库命名接口清晰、文档良好,很容易学习和使用。
  • Python社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能无所不包,覆盖科学计算、Web开发、数据库接口、图形系统多个领域,并且大多成熟而稳定。第三方模块可以使用Python或者C语言编写。截止2018年3月, Python官方第三方资源库Python Package Index (PyPI)已收录超过13万项各类功能包。

与R语言的比较

  • 共同点R语言与Python是数据分析领域中最流行的两个编程语言,他们都是免费的、都有活跃的社区支持,以及都提供开源的工具和库;
  • 应用场景:R语言的优势在于统计和图形模型,因此它更多的被学者、数据科学家和统计人员所采用;而Python更注重生产力和代码可读性,作为一种通用语言,Python拥有相对R语言更为广泛的应用领域,如Web开发、机器学习、智能控制等,因而在具有软件工程背景的数据科学工作者、开发者、工程师和程序员中更受欢迎;
  • 学习曲线:Python的用户学习曲线较平缓;而R语言对初学者来说,有一个较为陡峭的学习曲线,且R语言在数据分析之外的功能很有限,一些用户库写得较差、运行较为缓慢;

应用

Python灵活且各类爬虫库、数据分析库、数据可视化库较为丰富,很适合用于做数据抓取的主体架构,并基于这些数据做分析及可视化[2],可将互联网上越来越丰富的数据为各种类型的城市规划与研究所用。

网络数据抓取

  • 交通:抓取12306火车、机票网站数据;搭建各个机场的实时流量图;
  • 财经:抓取雪球及各类财经网站数据;
  • 住宅:抓取58、搜房、链家等房屋租售数据;
  • 自然资源:抓取天气数据,环境质量(PM2.5)数据;
  • 地点舆情:抓取新浪微博的用户发言及舆论数据;
  • 科技行业:抓取各应用商店的App的下载量及评论数据;追踪各门类App下载量热点,热点行业走势;
  • 服务行业:抓取大众点评及美团网的餐饮及各类线下门店消费及评价情况;绘制城市早晚高峰时段(某类)人群出行的热点图;

数据分析

上手

网络爬取

Python3.x的标准库urllib,将Python2.x的标准库urllib,urllib2功能进行了整合,提供网络爬取的相关功能。一个简单的抓取基本操作如下:

from urllib import request     #Python3.x下引用库,Python2.x下引用urllib2,通过urllib2.urlopen()调用

file = request.urlopen("http://wiki.citydatum.com")

data = file.read()    #读取全部页面,数据格式为bytes类型

data_str = data.decode('utf-8')    #解码,转换为str类型

fhandle=open("./1.html","wb")    #将爬取的网页保存在本地
fhandle.write(data)
fhandle.close()

数据分析

基本操作流程

操作流程 步骤说明 常用命令/库.函数
数据导入/导出 读写csv、Excel等格式文件 pandas.read_csv("路径文件名或文件网址")、pandas.read_excel("路径文件名或文件网址")、to_csv('文件名', encoding='utf-8', index=False);
连接、查询、读写MySQL数据库 MySQLdb.connect(host='服务器URL', port=端口号,user='用户名', passwd='密码', db='数据库名称')、pandas.read_sql('SQL语句', con=连接变量);
提取和筛选数据 浏览与提取数据 df.head(), df.tail(), df.columns, df.index, df.ix[行范围,列范围 (.loc、.iloc、.iat等), df.shape;
筛选数据 dataframe[筛选条件(支持逻辑运算符)];
统计描述 计数、均值、分位指等 dataframe.describe();
数据处理 转置 dataframe.T;
排序 dataframe.sort_values(by='字段名’);
处理缺失值 dataframe['字段名'].fillna(缺失替换值);
数据分组 df.groupby('字段名');
值替换 data.replace(查找值,替换值);
统计分析 t检验 对两样本来自是否有显著差异进行推断;独立样本t检验:ttest_ind(Group1,Group2);配对样本t检验:ttest_rel(Group1,Group2);
方差分析 levene方差齐性检验:levene(*args, **kwds) ,如果p<0.05,则方差不齐;
卡方检验 指统计样本的实际观测值与理论推断值之间的偏离程度;单因素卡方检验,chisquare(observed,expected);
计数统计 dataframe['字段名'].value_counts();
回归分析 数据拟合,广义线性回归;
可视化 图表设置、绘制、存储 plt.figure();lmplot().savefig('路径文件名');
xkcd风格的图表 plt.xkcd();

常见相关库

名称 应用领域 功能概述
numpy 科学计算 python科学计算的基础包;numpy提供了快速高效的多维数组对象ndarray、对数组执行元素级计算以及直接对数组执行数学运算的函数、读写硬盘上基于数组的数据集的工具,线性代数运算、傅里叶变换、随机数生成功能,以及将C、C++、Fortran代码集成到python的工具;
pandas 科学计算 提供了能够快速便捷处理结构化数据的大量数据结构和函数;pandas兼具numpy高性能的数组计算功能以及电子表格和关系型数据(如SQL)灵活的数据处理能力,提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作;
MySQLdb 数据库操作 提供MySQL数据库连接等功能的Python库;
xlrd Excel文档操作 提供读取Excel文件功能的Python库;
matplotlib 数据图表绘制 最为流行的数据图表绘制Python库;
scipy 科学计算 一组专门解决科学计算中各种标准问题域的包的集合;
statsmodels 统计分析 用于统计分析各类模型的模型集合;(Github页面
scikit-learn 数据分析 一些用于数据挖掘与分析的,简单、高效的工具集;(官方网站
BeautifulSoup 网络数据抓取 利用HTTP请求方式简化网站访问,提供更为强大的数据提取工具,效果通常比自己用正则表达式建立的爬虫要好;(官方网站
Django 网站框架 最常用的用Python编写的网页框架,代表网站Instagram、Disqus;Django包括很多有用的特性,且大多缺失功能可用扩展包来解决;(官方网站

参考

参考资料

外部链接