Python
来自Wiki.Citydatum
Python是一款自由、开源的高级解释性计算机编程语言,遵循 GPL(GNU General Public License)协议。Python语法简洁清晰,具有丰富和强大的库,能够把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。在IEEE发布2017年编程语言排行榜中,Python高居首位[1]。
目录
概况
发展历程
- Python是一种高级编程语言,由荷兰人Guido van Rossum创建并于1991首次发布。
主要特点
- Python是一种解释性语言,特别强调代码的可读性,最典型的例子就是Python用行缩进来区分代码块,而不是其他编程语言中较为常见的大括号。
- 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文件功能的Python库; |
matplotlib | 最为流行的数据图表绘制Python库; |
scipy | 一组专门解决科学计算中各种标准问题域的包的集合; |
statsmodels | 用于统计分析各类模型的模型集合;(Github页面) |
scikit-learn | 一些用于数据挖掘与分析的,简单、高效的工具集(官方网站) |