文章目录
一、数据预处理部分
(一)使用到的库
- pandas
Python数据分析提供了高性能,且易于使用的数据结构,即 Series 和 DataFrame。Pandas 库基于 Python NumPy 库开发而来,可以与 Python 的科学计算库配合使用。Pandas 提供了两种数据结构,分别是 Series(一维数组结构)与 DataFrame(二维数组结构),这两种数据结构极大地增强的了 Pandas 的数据分析能力。 - numpy
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 - matplotlib.pylab
PyLab模块可以在单个名称空间中批量导入matplotlib.pyplot(用于绘图)和NumPy(用于数学和使用数组) - seaborne
是一个基于matplotlib进行高级封装的可视化库,相比之下,绘制图表更为集成化、绘图风格具有更高的定制性。 - zipfile
可以处理使用ZIP64扩展名的ZIP文件(即大小超过4 GB的ZIP文件)。它支持在ZIP压缩文件中解密加密文件,但它目前不能创建加密文件。解密过程非常缓慢,因为它在本地Python而不是C中实现。 - Missingno
missingno库提供了一个灵活易用的可视化工具来观察数据缺失情况,是基于matplotlib的,接受pandas数据源。
(二)使用到的函数
- zipfile.ZipFile(file, mode)
创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,
默认值为’r’,表示读已经存在的zip文件,也可以为’w’或’a’,'w’表示新建一个zip文档或覆盖一个已经存在的zip文档。
'a’表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。 - Pandas DataFrame.head()
根据位置返回对象的前n行。如果你的对象中包含正确的数据类型, 则对于快速测试很有用。此方法用于返回数据帧或序列的前n行(默认值为5) - ndarray.shape
表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 n
dim 属性(秩)。比如,一个二维数组,其维度表示"行数"和"列数"。ndarray.shape 也可以用于调整数组大小。 - dropna()
删除包含空字段的行,可以使用 dropna() 方法,语法格式如下:
DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
参数说明:
参数名称 | 说明 |
---|---|
axis | 默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。 |
how | 默认为 ‘any’ 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how=‘all’ 一行(或列)都是 NA 才去掉这整行。 |
thresh | 设置需要多少非空值的数据才可以保留下来的。 |
subset | 设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。 |
inplace | 如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。 |
通过 isnull() 判断各个单元格是否为空。 |
- missingno.matrix()
Matrix是使用最多的函数,能快速直观地看到数据集的完整性情况,矩阵显示 - Dataframe.hist()
制作 DataFrame 列的直方图。直方图是数据分布的表示。此函数matplotlib.pyplot.hist()在 DataFrame 中的每个系列上调用,每列生成一个直方图。 - dataframe.unique()
求Series或dataframe中的不同值。unique()方法返回的是去重之后的不同值,而nunique()方法则直接放回不同值的个数。 - string.split()[]
通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
语法:str.split(str=“”,num=string.count(str))[n]
参数说明:
str:表示为分隔符,默认为空格,但是不能为空(‘’)。若字符串中没有分隔符,则把整个字符串作为列表的一个元素。例如:s.split(‘’)是不合法的表达
num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量。[n]:表示选取第n个分片 - DataFrame.apply()
DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)
该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。
这个函数需要自己实现,函数的传入参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据 结构传入给自己实现的函数中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数 会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。 - sorted()
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作. - pandas.DataFrame.describe
pandas 是基于numpy构建的含有更高级数据结构和工具的数据分析包,提供了高效地操作大型数据集所需的工具。pandas有两个核心数据结构 Series和DataFrame,分别对应了一维的序列和二维的表结构。而describe()函数就是返回这两个核心数据结构的统计变量。其目的在于观察这一系列数据的范围、大小、波动趋势等等。 - DataFrame.plot()
DataFrame.plot(x=None, y=None, kind=‘line’, ax=None, subplots=False,
sharex=None, sharey=False, layout=None,figsize=None,
use_index=True, title=None, grid=None, legend=True,
style=None, logx=False, logy=False, loglog=False,
xticks=None, yticks=None, xlim=None, ylim=None, rot=None,
xerr=None,secondary_y=False, sort_columns=False, **kwds)
参数名称 | 含义 |
---|---|
x | label or position, default None#指数据框列的标签或位置参数 |
y | label or position, default None |
kind | str,作图的类型 |
‘line’ : line plot (default)#折线图
‘bar’ : vertical bar plot#条形图
‘barh’: horizontal bar plot#横向条形图
‘hist’ : histogram#柱状图
‘box’ : boxplot#箱线图
‘kde’ : Kernel Density Estimation plot#Kernel 的密度估计图,主要对柱状图添加Kernel概率密度线
‘density’ : same as ‘kde’
‘area’ : area plot
‘pie’ : pie plot#饼图
‘scatter’ : scatter plot#散点图 需要传入columns方向的索引
‘hexbin’ :hexbin plot
- dataframe.to_csv()
将一个二维表以csv格式保存在指定目录下
(三)实现流程
二、POI数据处理部分
(一)使用到的库
同上
class pyproj.proj.Proj(projparams=None, preserve_units=True, **kwargs)
基类:pyproj._proj.Proj
使用proj(https://github.com/osgeo/proj.4/wiki)执行地图转换(从经度、纬度转换为本地地图投影X、Y坐标,反之亦然)。
用proj映射投影控制参数键/值对初始化proj类实例。键/值对可以在字典中传递,也可以作为关键字参数传递,或者作为proj4字符串传递(与proj命令兼容)。有关定义不同地图投影的键/值对的示例,请参阅http://www.remotesensing.org/geotiff/proj-list。
使用参数lon调用proj类实例,lat将lon/lat(以度为单位)转换为x/y本地地图投影坐标(以米为单位)。如果可选关键字“inverse”为true(默认值为false),则执行从x/y到lon/lat的反向转换。如果可选关键字“errcheck”为true(默认值为false),则在转换无效时引发异常。如果errcheck=false且转换无效,则不会引发异常并返回1.e30。如果可选关键字“preserve_units”为真,则地图投影坐标中的单位不强制为米。
使用numpy和常规的python数组对象、python序列和scalar。
- pyproj.transform
pyproj.Transformer具有执行2D、3D和4D(时间)转换的能力。它可以做PROJ命令行程序proj、cs2cs和cct可以做的任何事情。这意味着它允许在任何一对可定义的坐标系之间转换,包括支持基准转换 - scipy.spatial
空间数据又称几何数据,它用来表示物体的位置、形态、大小分布等各方面的信息,比如坐标上的点。
SciPy 通过 scipy.spatial 模块处理空间数据,比如判断一个点是否在边界内、计算给定点周围距离最近点以及给定距离内的所有点 - geopandas
geopandas可以读取任意基于矢量的空间数据格式,包括ESRI shapefile,GeoJSON文件等命令:
(二)使用到的函数
- dataframe.isin()
isin()接受一个列表,判断该列中元素是否在列表中 - list.copy()
对于List来说,其第一层,是实现了深拷贝,但对于其内嵌套的List,仍然是浅拷贝 - string.find()
find() 方法查找指定值的首次出现。如果找不到该值,则 find() 方法返回 -1。
find() 方法与 index() 方法几乎相同,唯一的区别是,如果找不到该值,index() 方法将引发异常。 - string.index()
Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常 - list()
list() 方法用于将元组转换为列表 - set()
set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。 - tolist()
pandas中将其它类型 如元组、矩阵等转换为列表的函数 - dataframe.drop()
删除表中的某一行或者某一列,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据。
参数labels:一个字符或者数值,加上axis ,表示带label标识的行或者列;如 (labels=‘A’, axis=1) 表示A列 - pandas.DataFrame.drop_duplicates()
删除重复数据 - DataFrame.value_counts()
对某属性列计数 - zip()
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
- gpd.GeoDataFrame()
转换为GeoDataFrame格式存储 - GeoDataFrame.crs()
设置坐标参考系统 - geopandas.GeoDataFrame.to_crs
将几何转换为新的坐标参考系统
将活动几何列中的所有几何转换为不同的坐标参考系统。必须设置当前GeoSeries上的crs属性。可以指定crs或epsg进行输出。 - EPSG:4326(WGS84)和 EPSG:3857(WGS84 Web Mercator)介绍
- WGS84 是目前最流行的地理坐标系统。在国际上,每个坐标系统都会被分配一个 EPSG 代码,EPSG:4326 就是 WGS84 的代码。
GPS是基于WGS84的,所以通常我们得到的坐标数据都是WGS84的。一般我们在存储数据时,仍然按WGS84存储。 - 伪墨卡托投影,也被称为球体墨卡托,Web Mercator。它是基于墨卡托投影的,把 WGS84坐标系投影到正方形。
我们前面已经知道 WGS84 是基于椭球体的,但是伪墨卡托投影把坐标投影到球体上,这导致两极的失真变大,但是却更容易计算。这也许是为什么被称为”伪“墨卡托吧。
另外,伪墨卡托投影还切掉了南北85.051129°纬度以上的地区,以保证整个投影是正方形的。
因为墨卡托投影等正形性的特点,在不同层级的图层上物体的形状保持不变,一个正方形可以不断被划分为更多更小的正方形以显示更清晰的细节。
很明显,伪墨卡托坐标系是非常显示数据,但是不适合存储数据的,通常我们使用WGS84 存储数据,使用伪墨卡托显示数据。
Web Mercator 最早是由 Google 提出的,当前已经成为 Web Map 的事实标准。但是也许是由于上面”伪“的原因,最初 Web Mercator 被拒绝分配EPSG 代码。于是大家普遍使用 EPSG:900913(Google的数字变形) 的非官方代码来代表它。
直到2008年,才被分配了EPSG:3785的代码,但在同一年没多久,又被弃用,重新分配了 EPSG:3857 的正式代码,使用至今。
- scipy.spatial.cKDTree()
kd-tree用于快速查找最近的邻居
该类为一组k维点提供了一个索引,可用于快速查找任何点最近的邻居
PS: scipy.spatial.ckdtree 模块实现了空间分割的数据结构,该结构会在 K 维空间中组织数据点。整个 cKDTree 模块通过模板化类用 C++重写了,并新增对周期性边界条件的支持,它经常用于物理过程的模拟 - DataFrame.loc[] 和 DataFrame.iloc[]
.loc[] 基于标签索引选取数据
.iloc[] 基于整数索引选取数据 - scipy.spatial.cKDTree.query_ball_point
cKDTree.query_ball_point(self, x, r)
找到点x距离r内的所有点 - DataFrame.to_dict()
将DataFrame转换为字典 - pandas.DataFrame.from_records()
将结构化或记录ndarray转换为DataFrame - pandas.fillna()
fillna()会填充nan数据,并返回填充后的结果 - pandas.DataFrame.reset_index()
数据清洗时,会将带空值的行删除,此时DataFrame或Series类型的数据不再是连续的索引,可以使用reset_index()重置索引
(三)实现流程
三、BN
(一)使用到的库
如上
- mplleaflet
将matplotlib绘图从 python 转换为交互式的小叶网页地图 - sklearn.preprocessing.OneHotEncoder
One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。 - sklearn.model_selection.train_test_split
使用sklearn里面的sklearn.model_selection.train_test_split模块,划分训练数据(training samples)和测试数据(testing samples)。 - sklearn.cluster.KMeans
K-means聚类 - sklearn.preprocessing.LabelBinarizer
以一对一的方式对标签进行二值化
scikit-learn中提供了几种回归和二进制分类算法。将这些算法扩展到多类分类的一种简单方法是使用所谓的“一对多”方案。
在学习时,这仅仅是在每个类中学习一个回归器或二进制分类器。为此,需要将多类标签转换为二进制标签(属于或不属于该类)。LabelBinarizer使用转换方法使此过程变得简单。
在预测时,分配一个类别,相应的模型为其提供最大的信心。LabelBinarizer使用“逆变换”方法使这一点变得简单。 - sklearn.ensemble
集成算法的目标是:组合几个基学习器的预测,以此来提高单个模型的泛化性和健壮性
集成方法常分为两类:
averging methods:平均法的原则是: 独立的构建几个学习器,然后平均他们的预测。通常,组合的学习器要比任何一个单个的学习器要好,因为它降低了方差。 其中的代表:bagging 方法,随即森林
boosting methods:学习器依次构建,试图降低组合的学习器的偏差。 其中的代表:AdaBoost,Gradient Tree Boosting - scipy.stats.multivariate_normal
多变量正态随机变量。
平均关键字指定平均值。cov关键字指定协方差矩阵。 - scipy.stats.norm
可以实现正态分布(也就是高斯分布) - scipy.special.logsumexp
计算输入元素的 index 和的对数。 - sklearn.metrics.mean_squared_error
计算均方误差回归损失 - sklearn.metrics.mean_absolute_error
平均绝对误差回归损失 - logging
这个模块为应用与库实现了灵活的事件日志系统的函数与类
(二)使用到的函数
- pd.get_dummies()
为传入的数据进行 One-Hot 独热编码 - numpy.mean( )
求取均值
mean() 函数定义:
numpy.mean(a, axis, dtype, out,keepdims )
经常操作的参数为axis,以m* n矩阵举例:
axis 不设置值,对 m* n 个数求均值,返回一个实数
axis = 0:压缩行,对各列求均值,返回 1* n 矩阵
axis =1 :压缩列,对各行求均值,返回 m* 1 矩阵 - .std()
求标准差 - sklearn.cross_validation.train_test_split
在做机器学习项目时,有时候会需要自己手动把数据集分隔成训练集、交叉验证集(CV)或者交叉验证集和测试集,此时可以用到sklearn提供的分隔数据集的函数 - kmeans()
class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='deprecated', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')
参数 | 方法 |
---|---|
n_clusters | int, default=8 要形成的簇数以及要生成的质心数。 |
random_state | int, RandomState instance, default=None 确定用于质心初始化的随机数生成。使用整数使随机性确定 |
属性 | 说明 |
---|---|
cluster_centers_ | ndarray of shape (n_clusters, n_features) 簇中心坐标。如果算法在完全收敛之前停止,这些将与labels_比配。 |
labels_ | ndarray of shape (n_samples,) 每一点的标签 |
inertia_ | float 样本到其最近的聚类中心的平方距离之和 |
n_iter_ | int 运行的迭代次数 |
- np.inf
np.inf 表示+∞,是没有确切的数值的,类型为浮点型