day78-数据分析之pandas及部分linux操作

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中公钥密钥配置

  1. cmd中进入usr/hyf/.ssh/文件夹
  2. ssh-keygen -生成密钥和公钥
  3. cat id_rsa.pub 查看公钥并复制内容
  4. ssh root@公网ip 登陆阿里云
  5. cd 并回车进入用户主页
  6. cd .ssh 进入阿里云.ssh文件夹
  7. vim authorized_keys 将内容复制到里面
  8. chmod 700 . #给当前目录设置权限

3自动登陆阿里云脚本

  1. cmd中进入选中的文件夹(一般为易查找的)
  2. vim connect_aliyun.sh 创建一个脚本并编辑
  3. ssh root@公网ip 写入要执行的命令(登陆命令)
  4. chmod u+x connect_aliyun.sh 给脚本设置启动权限
    登陆时直接进入这个文件夹并输入该脚本就能自动登陆

4向服务器传输文件

  1. zip -r zhaopin.zip zhaopin 本地压缩打包文件
  2. scp zhaopin.zip root@公网ip: /root/zzz/ (冒号后跟欲上传的路径) 远程拷贝至服务器
  3. cd /root/zzz/ 进入传输的文件夹
  4. unzip zhaopin.zip 服务器端解压
  5. cd zhaopin/ 进入上传后的解压文件

5配置定时爬取

定时爬取全部在服务器端配置

  1. 进入/Users/hyf/work/bin/文件夹(cd /Usr/hyf/work/bin/)
  2. vim crawl_boss.sh 创建并编辑启动脚本
  3. source ~/qianfeng/venv/bin/activate 在脚本中写入启动虚拟环境
  4. cd ~/qianfeng/10days/day10/zhaopin 在脚本中写入启动环境后进入项目文件
  5. scrapy crawl boss -o ressult.json 在脚本中写入启动文件
  6. 退出脚本编辑环境
  7. 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

你可能感兴趣的:(day78-数据分析之pandas及部分linux操作)