1pandas库操作
1.1索引对象
Index对象是不可变的,因此用户不能对其进行修改(只能对全体index进行整体修改,而不能对某个进行修改);不可变可以使Index对象在多个数据结构之间安全共享。
index[1] = ‘d’ # TypeError
pandas对象的一个重要方法是reindex,其作用是创建一个新对象,它的数据符合新的索引。
obj.reindex(['a', 'b', 'c', 'd', 'e'])# 将按排序输出数据
时间序列这样的有序数据,重新索引时可能需要做一些插值处理。method选项即可达到此目的,例如,使用ffill可以实现前向值填充
obj3 = pd.Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
obj3.reindex(range(6), method='ffill') # 0-1填blue;2-3填purplr;4-5填yellow
reindex可以修改(⾏)索引和列。只传递一个序列时,会重新索引结果的⾏;列可以⽤columns关键字重新索引。
1.2删除指定列
drop方法返回的是一个在指定轴上删除了指定值的新对象;
new_obj = obj.drop(['d', 'c'])
通过传递axis=1或axis=‘columns’可以删除列的值
data.drop('two', axis=1)
data.drop(['two', 'four'], axis='columns')
1.3索引、选取和过滤
obj = pd.Series(np.arange(4.), index=['a', 'b', 'c', 'd'])
obj['b']
obj[1]
obj[2:4]
obj[['b', 'a', 'd']]
obj[[1, 3]]
利用标签的切片运算与普通的Python切片运算不同,其末端是包含的;用数值切片则是包含的
obj['b':'c']
obj['b':'c'] = 5
⽤一个值或序列对DataFrame进⾏索引其实就是获取一个或多个列;
data[['three', 'one']]
data[data['three'] > 5]
data[data < 5] = 0
1.4⽤loc和iloc进⾏选取
使⽤轴标签(loc)或整数索引(iloc),从DataFrame选择⾏和列的⼦集
data.loc['Colorado', ['two', 'three']] # Colorado行two、three列
data.iloc[2, [3, 0, 1]] #第三行第4列、1、2列
1.5算术运算和数据对⻬
两个series或者dataframe可以进行加操作
对于DataFrame,对⻬操作会同时发⽣在⾏和列上;
如果DataFrame对象相加,没有共⽤的列或⾏标签,结果都会是空;
当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值(⽐如0);
相加时,没有重叠的位置就会产⽣NA值
df1.add(df2, fill_value=0) # 有就加,没有这列则为0加对应的值
DataFrame和Series之间的运算
frame - series # frame中的每行都减series
如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集
1.6函数应⽤和映射
传递axis=‘columns’到apply,这个函数会在每⾏执⾏
np.abs(frame) #求绝对值
f = lambda x: x.max() - x.min()
frame.apply(f) # 每列的最大值与最小值之差
frame.apply(f, axis='columns') # 对每列执行
得到frame中各个浮点值的格式化字符串,使⽤applymap即可;Series有一个⽤于应⽤元素级函数的map⽅法
format = lambda x: '%.2f' % x
frame.applymap(format) # 保留两位小数
frame['e'].map(format) # 第e列保留两位小数
1.7排序
要对⾏或列索引进⾏排序(按字典顺序),可使⽤sort_index⽅法,它将返回一个已排序的新对象;DataFrame,可以根据任意一个轴上的索引进⾏排序
升序排序
obj.sort_index()
frame.sort_index(axis=1)
降序排序
按值对Series进⾏排序,可使⽤其sort_values⽅法;排序时,任何缺失值默认都会被放到Series的末尾
frame.sort_index(axis=1, ascending=False)
obj.sort_values()
排序一个DataFrame时,根据一个或多个列中的值进⾏排序。将一个或多个列的名字传递给 sort_values的by选项即可
frame.sort_values(by='b')
1.8排名
rank为各组分配一个平均排名;对数据从小到大排序;并列就取不并列时的中间值;原顺序不变(第二列显示排名的序号)
rank(method='first') 根据值在原数据中出现的顺序给出排名
obj.rank()
obj.rank(method='first')
也可以按降序进⾏排名
obj.rank(ascending=False, method='first')
DataFrame可以在⾏或列上计算排名
frame.rank(axis='columns')
如果某个索引对应多个值,则返回一个Series;⽽对应单个值的,则返回一个标量值
pandas对象拥有一组常⽤的数学和统计⽅法。它们⼤部分都属于约简和汇总统计,⽤于从 Series中提取单个值(如sum或mean)或从DataFrame的⾏或列中提取一个Series。
调⽤DataFrame的sum⽅法将会返回一个含有列的和的Series
传⼊入axis=‘columns’或axis=1将会按进⾏和运算
df.sum(axis=1)
NA值会⾃动被排除,除⾮整个切⽚(这⾥指的是⾏或列)都是NA。通过skipna选项可以禁⽤ 该功能:
1.9计数及唯一性
unique,它可以得到Series中的唯一值数组
value_counts⽤于计算一个Series中各值出现的频率
isin⽤于判断⽮量化集合的成员资格(判断a中的每个数据是否在b中有出现)
uniques = obj.unique()
obj.value_counts()
mask = obj.isin(['b', 'c'])
结果中的⾏标签是所有列的唯一值。后⾯的频率值是每个列中这些值的相应计数
result = data.apply(pd.value_counts).fillna(0)#统计data中每列各数字出现的次数,没有出现的填充为0
2linux中公钥密钥配置
- cmd中进入usr/hyf/.ssh/文件夹
- ssh-keygen -生成密钥和公钥
- cat id_rsa.pub 查看公钥并复制内容
- ssh root@公网ip 登陆阿里云
- cd 并回车进入用户主页
- cd .ssh 进入阿里云.ssh文件夹
- vim authorized_keys 将内容复制到里面
- chmod 700 . #给当前目录设置权限
3自动登陆阿里云脚本
- cmd中进入选中的文件夹(一般为易查找的)
- vim connect_aliyun.sh 创建一个脚本并编辑
- ssh root@公网ip 写入要执行的命令(登陆命令)
- chmod u+x connect_aliyun.sh 给脚本设置启动权限
登陆时直接进入这个文件夹并输入该脚本就能自动登陆
4向服务器传输文件
- zip -r zhaopin.zip zhaopin 本地压缩打包文件
- scp zhaopin.zip root@公网ip: /root/zzz/ (冒号后跟欲上传的路径) 远程拷贝至服务器
- cd /root/zzz/ 进入传输的文件夹
- unzip zhaopin.zip 服务器端解压
- cd zhaopin/ 进入上传后的解压文件
5配置定时爬取
定时爬取全部在服务器端配置
- 进入/Users/hyf/work/bin/文件夹(cd /Usr/hyf/work/bin/)
- vim crawl_boss.sh 创建并编辑启动脚本
- source ~/qianfeng/venv/bin/activate 在脚本中写入启动虚拟环境
- cd ~/qianfeng/10days/day10/zhaopin 在脚本中写入启动环境后进入项目文件
- scrapy crawl boss -o ressult.json 在脚本中写入启动文件
- 退出脚本编辑环境
- crontab -e 启动定时装置
-
- */2 * * * /Users/hyf/work/bin/crawl_boss.sh > ~/zzz/logs.txt 设置每两天定时调用启动脚本并将结果重定向到txt文件。
5.1crontab简单介绍
crontab文件在etc目录下, cd /etc/进入etc
- /1,16 * * * /Users/hyf/work/bin/crawl_boss.sh > ~/zzz/logs.txt表示的意义:minute hour day month week command
0 4 1 jan * /etc/init.d/nginx restart 表示一月一号的4点重启nginx
星号():代表所有可能的值,例如day字段如果是星号,则表示在满足其它字段的制约条件后每天都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
crontab介绍具体参考:https://blog.csdn.net/wd2011063437/article/details/78960668
tar czvf test.tar.gz test 压缩成gz格式
tar xzvf test.tar.gz 解压
ps aux | grep 8000 查看端口
netstat -lntp | grep 8000 查在某个端口是否跑了某个服务
mongdb端口27017