模型开发语言 Urban Spatial Analysis 《城市模型概论》第5讲 模型开发语言 Urban Spatial Analysis 龙 瀛 清华大学建筑学院 2018年3月27日 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 《城市模型概论》教学大纲 2月27日W1:城市模型概论之概论 3月06日W2:模型基础数据 3月13日W3:基于规则建模 3月20日W4:城市空间分析方法 3月27日W5:模型开发语言 4月03日W6:元胞自动机模型(栅格) 4月10日W7:元胞自动机模型(矢量) 4月17日W8:大数据时代的城市模型展望 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 北京五环内数据展示 https://www.beijingcitylab.com/courses/aium2018/ 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
数据标准化(归一化) Normalization In statistics and applications of statistics, normalization can have a range of meanings. In the simplest cases, normalization of ratings means adjusting values measured on different scales to a notionally common scale, often prior to averaging. In more complicated cases, normalization may refer to more sophisticated adjustments where the intention is to bring the entire probability distributions of adjusted values into alignment. Source: https://en.wikipedia.org/wiki/Normalization_(statistics) 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
数据标准化(归一化) Normalization 是否在某一分区内,0或1 直接使用 在某一个单元内,具体名称 转变为多个字段(每个单元一个字段),0或1 数值指标如人口密度 Feature scaling 距离指标 距离衰减函数,转变为吸引力 Source: https://en.wikipedia.org/wiki/Distance_decay 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 不需要编程建模的场景 不需要考虑空间单元之间的相 互作用,两万个独立的并行模 型 模拟时长与时间分辨率之间不 是足够大 模拟未来20年,模型的时间精度 为1年,则需要20个字段存储模 拟结果 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 开放问题:何时需要编程 考虑空间相互作用(如周边单 元的影响) 模拟时间点过多 Excel中的函数支持有限 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 开放问题:是否了解编程 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 城市模拟,需要什么编程基础? Wangli matlab Excel only Spss only 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python or R是一个选择? 数据科学家必备技能 城市模拟偷懒入门 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python + Excel 推荐Python平台– Anaconda ( 下载地址:https://www.anaconda.com/download/ ) 不用pip安装各种需要使用的库,可直接使用各种库,非常方便 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的 matplotlib.pyplot是一个有命令风格的函数集合,与MATLAB很相似,具有绘图功能 openpyxl是个用Python读写Excel的强大工具 对于初接触python的同学,我推荐大家使用anaconda这个平台,因为python是个优雅的脚本语言,我们不需要从底层开始写,大多数情况是通过调用python 中已经封装好的库就可以达到我们的目的,所以我们可能在以后的使用中要使用到各种库,anaconda的好处就是在调用库的时候不需要再自己下载,并pip install 库啦 我们今天将会用到的库有三种,然后以前两种为主 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python读取Excel pd.read_excel(excel_file,sheetname=1,index_col=0) 其中pd.read_excel()表示读取excel文件,括号中后两项为选填参数,不填默认为0,即第一个sheet,从第一列读入 pd.concat(),表示合并sheet,当需要合并多个sheet此命令可方便操作 ExcelFile类同样可以表示读取excel 对于任何处理excel的方法都要经过三步 1读取 2进行操作 3写入,首先是读取,在pd中用read_excel方法来读取数据,然后在括号中填入参数,其中excel名称为必填参数,sheetname及index_col/row等为选填参数,,不写选填参数则默认为第一个sheet(工作表)等。需要注意的是在python中计数大多是从0开始,比如这里第一个sheet就用sheetname=0来进行表示,sheetname=1指的是工作表2, 很多时候我们要把一些sheet合并在一起,比如想要把5个sheet都合并到一个sheet中,我们可以用pd中的concat()函数, 在读取excel的时候需要注意的是提前设置工作路径,如果需要读取的excel不在工作路径下,软件是读不到的,就会报错 然后大家就可以看到这个数据已经被读取,我们也可以print一下看一个 注意事项:需要设置Working directory,设置为读取Excel所在的路径,后续导出Excel也在该路径 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn Python对Excel进行操作—筛选 在excel中可以实现的操作py都可以操作,但是py比excel的优势在哪里呢,我们逐一来揭晓 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—筛选 Pd中可以像切片一样对excel进行行、列及区块选择 对于单元格的选择可以用iat/at方法选择 Pd中可直接对需要的行或列进行切片选择,比如在20列的数据中,我们选择2004年的容积率列,也可以选择指定的单元格,用at或者事iat的方式 Pd中可以像切片一样对excel进行行、列及区块选择 对于单元格的选择可以用iat/at方法选择 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—绘制频率分布图 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—绘制频率分布图 planblock[‘d_cbd’].plot(kind=“hist”) 表示用直方图的方式统计字段d_cbd的分布频率 Kind后参数示意#条形图: bar #箱图:box/boxplot #柱状图/直方图:hist/hist2d #杆图:stem #饼图:pie describe() 描述数据的分布情况 也可以用mean()等计算单个属性 Py的优势在于用一行代码就可以做图,而且还可以统计一些excel不能一键统计的属性,例如在excel中做频率分布图需要自己统计出的每个数据段的频数,然后再呈现成图,但是python只需要一句话,以及每组数据的统计情况,如个数,标准差,最值及数据分布都呈现出来 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—排序 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—排序 Pd也可以对数据排序,我们可以用sort_values这个函数,必填参数为进行排序的字段名称,这里是2004年的容积率,接着是排序规则,是否是升序 排序完我们还可以用head或者tail方法直接选出前10名或者后10名的数值, 然后用plot方法进行画图,在excel中可以画的图,python中也可以画,而且也可以用参数进行调整颜色等,这里我们就用默认的参数,然后选取2004年容积率前20名做一个条形图 sort_values([‘Far_2004’], ascending=False) 表示根据字段Far_2004进行排序,参数ascending表示是否按升序排列 sorted_by_far2004[‘Far_2004’].head(20).plot(kind=“barh”) 其中[‘Far_2004’].head(20).表示选取Far_2004字段前20名数据, plot(kind=“barh”)表示绘制条形图 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—加减基本运算 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—加减基本运算 用py也可以进行数据的运算,例如我们通过计算2017年与2004年容积率差来解析每块block这13年来容积率的改变情况,可以直接用需要做运算的列名称的字段进行相减,并赋值给一个新的字段far——change,在python中 一个公式即可 同样,我们可以对运算出来的结果进行可视化 planblock[“Far_change”] = planblock[“Far_2017”] - planblock[“Far_2004”] 表示用字段Far_2017与字段Far_2004相减,并将值赋值给新的字段Far_change 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—数据透视表 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python对Excel进行操作—数据透视表 在python中,也可以做数据透视表/图,py中pivot_table函数是用来做数据透视表,其中index参数为必填参数,我们可以先筛选出两列数据,然后根据其中的一列数据统计另一列数据的分布情况,与excel中的数据透视表相同,也可以统计多列数据,然后我们可以用plot函数作图,该图表示不同TAZ中2004年到2017年平均容积率的变化情况 planblock[['TAZ_ID', 'Far_change']]表示选取excel中的'TAZ_ID和Far_change两个字段 planblock_subset.pivot_table(index=['TAZ_ID'])其中pivot_table是数据透视表的命令,该行命令表示根据in_His统计Far_change字段平均值 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python写入—新建Excel 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python写入—新建Excel 当一切都计算完全,最后一步是保存结果,保存有两种方式,一种是excel中的另存为,一种是Excel中的保存,这里先来说另存为的方式,用pandas中to_excel的方法可以将以上对数据做的操作另存为另一个新的excel,该方法只能新建文件不能在原excel文件上做修改 planblock.to_excel(‘output.xlsx‘) 表示将Excel导出,并以output.xlsx命名,包含之前所做的Far_change字段 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python写入—已有Excel openpyxl是一个直接可以写入Excel的库,主要用到:Workbooks,Sheets,Cells。Workbook就是一个excel工作表;Sheet是工作表中的一张表页;Cell就是简单的一个格。 wb.save(‘PlanBlocksR5_v2.xlsx‘) 表示保存结果 还有一个写入方法是类似于保存,这里我们引入一个新的库openpyxl,它是可以直接写入原excel的库,该库内容很简单,主要是针对excel,工作表及单元格做相关操作,例如此处我们可以通过openpyxl库中的load_workbook(excelfile)方法锁定读取的Excel表格,用wb.get_sheet_by_name(‘PlanBlocksR5_v1‘)方式读取工作表, max_row和max_column方法可以用来读取最大行数和最大列数 在openpyxl库中可以选择单元格进行计算,如此处进行了对两列的错位相加,然后并赋值到之后的一列,然后用wb.save的方式保存原文件 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python + ArcGIS : ArcToolbox 个人常用的工具箱展示 空间分析(buffer、overlay、union) 空间统计(全局自相关Moran’s I、局部自相关LISA、最小二乘回归OLS、 地理加权回归GWR) 空间数据处理(repair) Model Builder 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
Python + ArcGIS : ArcGIS Scripting using Python 每个Toolbox都可以利用脚本实现(具体参见每个工具箱的help) 推荐利用ArcGIS安装的默认Python版本和编译器(2.7.x而不是3.x ) 课外参考资料待放到网站 ExtendingArcGISWithPython Programming ArcGIS 10.1 with Python Cookbook 会了Python与不会所做的工作的巨大差异(个人经历的分享) 具体演示: python+shp(课堂上演示) 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn VBA + Excel 录制宏 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 补充:SPSS常用功能 数据处理 计算字段 统计性描述 相关分析 0.8 主成分分析(PCA) 回归分析 回归前的自相关(autocorrelation)检查(VIF) 二元/多元回归、线性/非线性回归 部分数据的回归分析 对数ln(如房价) 聚类分析 K-means 软件展示 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 考核方式:考查 成绩构成:出勤及过程(30分)+大作业(70分) 大作业(任选一种形式): 形式1:每人撰写某一类城市模型综述的课程论文 形式2:每人撰写城市模型发展趋势与未来展望的课程论文 形式3:利用课程发放的北京五环内数据,开发一个地块尺度的轻量级 城市模型(straight forward and light-weight),并附模型介绍(建议2-3 人一组) 建议选题:城市开发密度模拟(2035年) 欢迎与任课教师讨论(建议OPEN OFFICE HOUR时间) 提交方式:W13周末(5月27日)前提交给助教陈婧佳 W8结课后也同样欢迎约任课教师讨论大作业 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn
清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn 课后安排 阅读材料待放到课程网站 https://www.beijingcitylab.com/courses/aium2018/ OPEN OFFICE HOUR 每周二下午12:30-13:30 需要提前通过info预约 ylong@tsinghua.edu.cn, 新建筑馆501, 13661386623 答疑邮箱 ylong@tsinghua.edu.cn 清华大学本科生通选课《城市模型概论》,龙 瀛,ylong@tsinghua.edu.cn