[PyData] 02 - Data Preprocessing and Cleaning
前言
参考资源
只把常用的五星的掌握即可。
外观模式-Facade Pattern【学习难度:★☆☆☆☆,使用频率:★★★★★】
深入浅出外观模式(一):外观模式概述,外观模式结构与实现
深入浅出外观模式(二):外观模式应用实例(文件加密模块)
深入浅出外观模式(三):抽象外观类,外观模式效果与适用场景
系统越来越复杂,但不想让客户看到,对外仍然体现出“简洁”。
教学
一、基本原理
提供了一名“服务员”统一办理这些歌事情。
二、类图
类关系表示
类关系参见: https://www.cnblogs.com/jesse123/p/4279555.html
- Association:
将一个类的对象作为另一个类的属性;
- 菱形尾巴 + Association:
[Aggregation]:集合体,但也只是集合,弱关系 ----> has-a,老师和学生的关系,学生可以属于多位老师;
[Composition]:组合体,必不可少部分,强关系 ----> contain-a,皇帝和妃子的关系,妃子只能属于一位皇帝;
- 实虚结合 + 三角 (类) 箭头:
[Generalization]:实现继承;
[Realization]:实现接口;
- 虚化的 Association:
[Dependency]:仅使用了对方的 “方法”;
Aggregation 与 Composition
要点:
如果是“必要的”,那么就需要在类内“create”了呢。
如果只是“弱弱地使用”,那么“部分“ 可以在外部创建,再以参数形式传入 "整体” 使用。
三、外观模式
外观模式 UML
外观模式 Code
要点:虽然使用了其他类(SubSystem),但属于“类的属性”,并不是在方法内。
class SubSystemA
{
public void MethodA()
{
//业务实现代码
}
} class SubSystemB
{
public void MethodB()
{
//业务实现代码
}
} class SubSystemC
{
public void MethodC()
{
//业务实现代码
}
} class Facade
{
# 类只是作为了属性,所以属于 Association
private SubSystemA obj1 = new SubSystemA();
private SubSystemB obj2 = new SubSystemB();
private SubSystemC obj3 = new SubSystemC(); public void Method()
{
obj1.MethodA();
obj2.MethodB();
obj3.MethodC();
}
} class Program
{
static void Main(string[] args)
{
Facade facade = new Facade();
facade.Method();
}
}
Facade Pattern in Python
一、虚基类
abc.ABCMeta 是一个metaclass,用于在Python程序中创建抽象基类。
@abstractmethod 装饰器:其实就是模仿“虚函数”。
详见:[Advanced Python] 15 - Metaclass for ORM
class Server(metaclass=ABCMeta): @abstractmethod
def __init__(self):
pass def __str__(self):
return self.name @abstractmethod
def boot(self):
pass @abstractmethod
def kill(self, restart=True):
pass
钩子类,实际操作的细节实现。
class FileServer(Server): def __init__(self):
'''初始化文件服务进程要求的操作'''
self.name = 'FileServer'
self.state = State.new def boot(self):
print('booting the {}'.format(self))
'''启动文件服务进程要求的操作'''
self.state = State.running def kill(self, restart=True):
print('Killing {}'.format(self))
'''杀死文件服务进程要求的操作'''
self.state = State.restart if restart else State.zombie def create_file(self, user, name, permissions):
'''检查访问权限的有效性、用户权限,等等''' print("trying to create the file '{}' for user '{}' with permissions {}".format(name, user, permissions)) class ProcessServer(Server): def __init__(self):
'''初始化进程服务进程要求的操作'''
self.name = 'ProcessServer'
self.state = State.new def boot(self):
print('booting the {}'.format(self))
'''启动进程服务进程要求的操作'''
self.state = State.running def kill(self, restart=True):
print('Killing {}'.format(self))
'''杀死进程服务进程要求的操作'''
self.state = State.restart if restart else State.zombie def create_process(self, user, name):
'''检查用户权限、生成PID,等等''' print("trying to create the process '{}' for user '{}'".format(name, user))
在外观类中,初始化的部分,挂上类钩子;对外API函数,调用这些类的函数钩子。
class OperatingSystem: '''外观''' def __init__(self):
self.fs = FileServer()
self.ps = ProcessServer() def start(self):
[i.boot() for i in (self.fs, self.ps)] def create_file(self, user, name, permissions):
return self.fs.create_file(user, name, permissions) def create_process(self, user, name):
return self.ps.create_process(user, name) def main():
os = OperatingSystem()
# 以下都是内部比较繁琐的实现
os.start()
os.create_file('foo', 'hello', '-rw-r-r')
os.create_process('bar', 'ls /tmp') if __name__ == '__main__':
main()
End.
[PyData] 02 - Data Preprocessing and Cleaning的更多相关文章
- [Pandas] 06 - Data Preprocessing and Cleaning
From: DBWangGroup 基于该系列代码的实践与补充思考. 补充:特征工程 结合:[Scikit-learn] 4.3. Preprocessing data /* implement */
- [Machine Learning with Python] My First Data Preprocessing Pipeline with Titanic Dataset
The Dataset was acquired from https://www.kaggle.com/c/titanic For data preprocessing, I firstly def ...
- 神经网络中的数据预处理方法 Data Preprocessing
0.Principal component analysis (PCA) Principal component analysis (PCA) is a statistical procedure t ...
- [PyData] 03 - Data Representation
Ref: http://blog.csdn.net/u013534498/article/details/51399035 如何在Python中实现这五类强大的概率分布 考虑下在mgrid上画二维概率 ...
- MLP(SGD or Adam) Perceptron Neural Network Working by Pytorch(including data preprocessing)
通过MLP多层感知机神经网络训练模型,使之能够根据sonar的六十个特征成功预测物体是金属还是石头.由于是简单的linearr线性仿射层,所以网络模型的匹配度并不高. 这是我的第一篇随笔,就拿这个来练 ...
- [AI] 深度数据 - Data
Data Engineering Data Pipeline Outline [DE] How to learn Big Data[了解大数据] [DE] Pipeline for Data Eng ...
- [Code::Blocks] Install wxWidgets & openCV
The open source, cross platform, free C++ IDE. Code::Blocks is a free C++ IDE built to meet the most ...
- 本人SW知识体系导航 - Programming menu
将感悟心得记于此,重启程序员模式. js, py, c++, java, php 融汇之全栈系列 [Full-stack] 快速上手开发 - React [Full-stack] 状态管理技巧 - R ...
- 转:jQuery.data
原文地址:http://www.it165.net/pro/html/201404/11922.html 内存泄露 首先看看什么是内存泄露,这里直接拿来Aaron中的这部分来说明什么是内存泄露,内存泄 ...
随机推荐
- VMware workstation12 密匙
VMware workstation12 密匙:5A02H-AU243-TZJ49-GTC7K-3C61N
- 喵哈哈村的魔法考试 Round #17 题解
喵哈哈村的秘境探险系列. A. 实际上就是求乘积%k是否等于0,显然 a * b % k = (a%k)*(b%k)%k,所以边乘边取模就好了. #include<bits/stdc++.h&g ...
- EBS 由数据库端找到对应的前台URL地址
SELECT home_url FROM icx_parameters; SELECT profile_option_value FROM fnd_profile_option_values ...
- CAP:Alantany 谈 CAP
引用Alantany的话:“CAP理论提出就是针对分布式数据库环境的,所以,P这个属性是必须具备的.P就是在分布式环境中,由于网络的问题可能导致某个节点和其它节点失去联系,这时候就形成了P(parti ...
- 最课程阶段大作业之01:使用SVN实现版本控制
版本控制在友军那里都是放在整个培训的最后阶段才开始讲的,但我们打算放到SE阶段.与其匆匆在项目实战阶段弄个半生不熟,然后进入实际工作中接受他人对你的怀疑,不如……早死早超生~~~. 可是,我们毕竟现在 ...
- Gson 与 fastJson 在使用上的差异(fastJson的优点)
一.android 常用的json解析方式 Android 开发上常用的json解析方式有:Gson, fastJson,jackson. 因为jackjson jar包会比较大点(700+k),Gs ...
- 奇怪吸引子---LiuChen
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...
- 如何在Windows 10上访问NFS的share
大致过程是: 1. 开启名为"Services for NFS"的Windows Feature. 2. 如果需要拥有写权限,需要修改注册表. 3. Mount即可. 具体步骤详见 ...
- Andorid源码 4.4 TAG
Fetching project platform/frameworks/opt/timezonepickerremote: Counting objects: 11169, doneremote: ...
- GIS中栅格数据结构的显示与计算
在GIS中,根据数据存储的表现形式不同,通常将空间数据分为矢量数据和栅格数据.最简单的区别是:当栅格数据放大到一定程度时,就会呈现出我们熟悉的讨厌的"马赛克". 栅格数据存储 最简 ...