降维技术的好处:
1.使得数据集更易使用
2.降低很多算法的计算开销
3.取出噪声
4.使得结果易懂
pandas是python特征预处理常用的框架
加载数据
1 | #-*- coding: utf-8 -*- |
pandas显示DataFrame数据的所有列,set_option其他参数参考:Pandas函数set_option()学习笔记
1 | pd.set_option('expand_frame_repr', False) # 不换行 |
在pandas中的空值为NaN,isna()等同于isnull()
1 | print(train_data.isna()) # 判断所有值是否是na,转换成boolean值 |
对于csv字符串NA,用pandas读取的时候,会转换成NaN,对于字符串None,则不是NaN
统计字段中Nan空值的总数
1 | print(train_data.isna().sum()) |
查看某列是NaN的行
1 | print(train_data[train_data.MiscFeature.isnull()]) |
查看有NaN值的列名
1 | print(train_data.columns[train_data.isnull().any()].tolist()) |
对有Nan值的列的空值比例进行排序
1 | total = train_data.isna().sum().sort_values(ascending=False) |
删除某一列为NaN值的行,只要有一列是NaN,该行数据就会被删除
1 | print(train_data.dropna(how='any')) |
删除subset中某一列为NaN值的行,只要有一列是NaN,该行数据就会被删除
1 | print(train_data.dropna(subset=['Fence', 'MiscFeature'], how='any')) |
删除所有列都是NaN值的行
1 | print(train_data.dropna(how='all')) |
删除subset中所有列都是NaN值的行
1 | print(train_data.dropna(subset=['Fence', 'MiscFeature'], how='all')) |
其他
1 | df.dropna(axis=1) #丢弃有缺失值的列 |
替换某列中的Nan值
1 | train_data['Alley'].fillna(value='Not Found', inplace=True) |
替换None字符串
1 | print(train_data.replace('None', np.nan)) |
替换字符串的时候,如果替换改变原数据的值
1 | train_data.replace('None', np.nan, inplace=True) |
参考:数据转化
也可以使用sklearn对特征的缺失值进行填充,方法有2种:
1 | import numpy as np |
1 | import numpy as np |
多变量填充是使用全部数据建模的方式进行填充缺失值:含有缺失值的特征被视为 y,而其他特征当作 x,对 (x, y)拟合回归模型,然后利用这个模型来预测 y 中的缺失值:
1 | from sklearn.experimental import enable_iterative_imputer |
从大规模的数据集中寻找隐含关系被称作为关联分析(association analysis)或者关联规则学习(association rule learning)。
安装mongo数据库,在shell下输入
1 | sudo apt-get install mongodb |
如果需要在Python中使用mongo数据库,还需要额外安装Python封装库
1 | pip install pymongo |
1.首先在浏览器中进入WAP版微博的网址,因为手机版微博的内容较为简洁,方便后续使用正则表达式或者beautifulSoup等工具对所需要内容进行过滤
1 | https://login.weibo.cn/login/ |
用homebrew 在电脑上安装tesseract库
可以使用pprof来分析golang程序的CPU性能,内存占用,block死锁,Goroutine性能等,pprof一般是在需要分析代码性能的时候才加入
可以使用 gin-contrib/pprof 这个工具,参考:Gin框架中使用pprof
添加依赖
1 | go get github.com/gin-contrib/pprof@v1.4.0 |
在gin的路由上添加 pprof.Register(app)
1 | package main |
启动web应用后访问如下path
1 | http://localhost:3000/debug/pprof/ |
可以看到如下页面
使用go tool pprof命令采集20s的goroutine(Goroutine 是 Go 语言中的一种轻量级线程,提供了并发执行代码的能力)指标数据,如果不设置采集时间是默认采集30s,每10ms采集一次
1 | go tool pprof --seconds 20 http://localhost:18080/debug/pprof/goroutine |
采集完毕后可以直接输入 web 来可视化查看数据,不过需要提前安装graphviz,否则会报
Semaphore [ˈseməfɔːr] 可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数(即允许n个任务同时访问这个资源),例如,实现一个文件允许的并发访问数。
CyclicBarrier
适用于:创建一组任务,它们并行地执行任务,然后在进行下一个步骤之前等待,直至所有任务完成。它使得所有的并行任务都将在栅栏处列队,因此可以一致地向前移动。
表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面,这就好比整个公司的人员利用周末时间集体郊游一样,先各自从家出发到公司集合后,再同时出发到公园游玩,在指定地点集合后再同时开始就餐…
1 | package java_thread; |
阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同一方设置和释放信号量。
ArrayBlockingQueue
只有put方法和take方法才具有阻塞功能
用3个空间的队列来演示阻塞队列的功能和效果。
用两个具有1个空间的队列来实现同步通知的功能。
1 | package java_thread; |