SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签115

  • 分类37

  • 归档320

  • 关于

  • 搜索

2020华为云大数据挑战赛-正式赛遇到的问题

发表于 2020-05-27 更新于 2021-10-29 分类于 计算机 , 技术 , Python 阅读次数: Valine:
本文字数: 10k 阅读时长 ≈ 9 分钟

2020.05.27

Note1

将训练数据导入notebook

  由于notebook上的rarfile有点问题,没法直接解压rar文件,所以我将rar文件在电脑上解压再压缩为zip,然后放到OBS上,从OBS里拷贝到notebook再解压。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import moxing as mox
import zipfile
from datetime import datetime

start = datetime.now()
print(start.strftime('%Y-%m-%d %H:%M:%S'))

mox.file.shift('os', 'mox')
print('Copy procedure is begining!')
# 将数据从OBS拷贝到notebook中,改成自己的OBS后在使用
mox.file.copy_parallel('s3://obs-xxxbucket-bj4/train0523.zip', './train0523.zip')
print('Copy procedure is completed !')

print('Unzip is begining!')
zip_file = zipfile.ZipFile("./train0523.zip")
zip_list = zip_file.namelist() # 得到压缩包里所有文件
for f in zip_list:
zip_file.extract(f, "./dataset") # 循环解压文件到指定目录
zip_file.close() # 关闭文件,必须有,释放内存
print('Unzip is completed !')

print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print('time costed is: %d s' % (int((datetime.now() - start).seconds)))

2020.05.28

Note2

  由于最近几天付费版的32G CPU服务器因为华为云资源不足一直没法成功启动,笔记本电脑又只有8G内存,没法完全加载数据进行数据观察,所以我准备采用体验版的64G GPU服务器来做数据观察,因为免费版服务器云硬盘只有5G,也没法把压缩包加压出来以后再读取csv,于是干脆直接解压到内存中进行读取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from zipfile import ZipFile
import pandas as pd
from datetime import datetime

start = datetime.now()
print(start.strftime('%Y-%m-%d %H:%M:%S'))

myzip=ZipFile('./train0523.zip')
f=myzip.open('train0523.csv')
dataset=pd.read_csv(f)
dataset.columns=["loadingOrder","carrierName","timestamp","longitude","latitude",
"vesselMMSI","speed","direction","vesselNextport","vesselNextportETA",
"vesselStatus","vesselDatasource","TRANSPORT_TRACE"]

print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print('load dataset time costed is: %d s' % (int((datetime.now() - start).seconds)))

print(dataset.info())

print("\n缺失值统计")
print(dataset.isnull().sum())

f.close()
myzip.close()

print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print('time costed is: %d s' % (int((datetime.now() - start).seconds)))

  要完全读取整个csv文件需要加载247秒😓。

参考资料:python读取zip压缩文件里面的csv数据


Note3

  pandas分块读取csv文件:

1
2
3
df=pd.read_csv(f,header=None,chunksize=10000)
for i in df:
print(i)

参考资料:pandas分批读取大数据集


2020.06.02

Note4

  在华为云notebook上跑大佬分享的baseline时遇到报错:

1
TypeError: aggregate() missing 1 required positional argument: 'func_or_funcs'

  问题出在这句代码:

1
group_df = df.groupby('loadingOrder')['timestamp'].agg(mmax='max', count='count', mmin='min').reset_index()

  修改为:

1
group_df = df.groupby('loadingOrder')['timestamp'].agg({"mmax":'max', "count":'count', "mmin":'min'}).reset_index()

  报错原因应该是和大佬的pandas版本不匹配。


Note5

  在华为云notebook上运行大佬的baseline后,将预测结果下载提交,结果线上成绩为:999999999.0000。经华为官方排查以后,发现是换行符的问题。Linux服务器上的输出结果换行符为LF,而华为云评分系统要求文件换行符为CR LF,使用notepad++将换行符修改一下再提交即可获得正确结果。华为后期会调整评测系统的兼容性。


2020.06.03

Note6

  服务器配置相关命令。

启动Jupyter NoteBook:

1
nohup jupyter notebook --no-browser --ip=* --port=8888 &

查看正在运行的Jupyter NoteBook:

1
jupyter notebook list

查看进程号:

1
ps -aux | grep jupyter

杀死进程:

1
kill -9 xxx

解压zip压缩包:

  压缩服务器上当前目录的内容为xxx.zip文件

1
zip -r xxx.zip ./*

  解压zip文件到当前目录

1
unzip filename.zip

参考资料:Linux下的压缩zip,解压缩unzip命令详解及实例


Note7

  在服务器上执行命令conda activate BDC出现报错:

1
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

解决方案为:

1
2
3
echo ". /home/B11/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc

source ~/.bashrc

Note8

  要在部署在服务器上的Jupyter NoteBook中切换到别的anaconda虚拟环境,需要在该环境下安装ipykernel:

1
pip install ipykernel

  然后将环境写入notebook的kernel中

1
python -m ipykernel install --user --name 环境名称 --display-name "环境名称"

查看安装的内核和位置:

1
jupyter kernelspec list

移除内核:

1
jupyter kernelspec remove [内核名字]

参考资料:

  • linux中jupyter notebook中切换虚拟环境
  • jupyter notebook 删除与增加kernel

Note9

  在服务器上安装完lightgbm,然后在notebook上运行baseline的时候遇到报错:

1
OSError: /lib64/libc.so.6: version `GLIBC_2.14' not found  (required by lightgbm)

  主要原因是因为系统缺失lightgbm所需要的GLIBC_2.14,通过以下命令可以查看当前系统的glibc版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ strings /lib64/libc.so.6  |grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

  发现系统最新只有2.12版本,所以我们要手动安装2.14版本,具体操作参考这篇博客,

  安装好以后再次查看系统的glibc版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ strings /lib64/libc.so.6  |grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE

  2.14版本已经安装成功。重启notebook运行代码,在导入lightgbm的时候又发生新的报错:

1
OSError: dlopen: cannot load any more object with static TLS

  通过查阅资料,发现在导致该错误的原因较为复杂,可能是因为导包顺序,也有因为是glibc版本还需要继续升级。
  经过大量调试,发现在命令行环境中可以正常导包,但是在notebook中就不行。后来发现在base环境下安装lightgbm是能正常在notebook导入的,可能是之前的环境出了问题,于是删除出问题的环境,重新新建一个新的虚拟环境,再次安装lightgbm,在notebook中成功运行。


2020.06.05

Note10

pandas去除重复行:

1
data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)

参考资料:pandas 去重 drop_duplicates 函数


2020.06.07

Note11

  今天尝试使用xgb进行训练,结果发生报错:

libgomp.so.1:version ‘GOMP_4.0’ not fount

  问题发生的原因是动态库的版本不够,网上有很多种解决方案,有的要安装高版本gcc,我尝试以后也没有成功,可能是安装的版本还不够高。后来发现在另一个环境的动态库中就有我需要的,于是直接拷贝过来使用就行了。

参考资料:https://blog.csdn.net/dcrmg/article/details/78358279


2020.06.16

Note12

  这几天服务器的硬盘空间被耗尽了,但是删除文件以后空间却不见,同时在jupyter notebook下删除文件还显示硬盘空间不够用。这就奇怪了,删除个文件还要占用硬盘空间,难道是有回收站?一查资料果真是这样,在jupyter notebook下删除文件会被放到回收站,回收站路径是:

1
/home/{username}/.local/share/Trash/files/

  进入文件夹一看,竟然有160G的垃圾,以后还是老老实实的rm吧…

参考资料:linux下使用jupyter notebook删除文件遇到的坑


2020.06.17

Note13

  使用pyecharts绘制GPS轨迹图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import pandas as pd
import numpy as np
from datetime import datetime

# 导入Geo包,注意1.x版本的导入跟0.x版本的导入差别
from pyecharts.charts import Geo
# 导入配置项
from pyecharts import options as opts
# ChartType:图标类型,SymbolType:标记点类型
from pyecharts .globals import ChartType, SymbolType, GeoType

import warnings
warnings.filterwarnings('ignore')

start = datetime.now()
print(start.strftime('%Y-%m-%d %H:%M:%S'))

train=pd.read_csv("./train.csv",nrows=1000000)

train.sort_values(['loadingOrder', 'timestamp'], inplace=True)

grouped_single=train.groupby("loadingOrder")

count=0

for name,group in grouped_single:

geo = Geo(init_opts=opts.InitOpts(width="1600px",height ="800px"))
# 地图类型,世界地图可换为world
geo.add_schema(maptype="world").set_global_opts(
title_opts=opts.TitleOpts(title=name, pos_bottom=10, pos_left='center'),
visualmap_opts=opts.VisualMapOpts(max_=80),
legend_opts=opts.LegendOpts(type_='scroll')
)

strs=[]
for i in range(group.shape[0]):
t="time:{} lon:{} lat:{}".format(str(group.iloc[i]["timestamp"]),group.iloc[i]["longitude"],group.iloc[i]["latitude"])
strs.append(t)
geo.add_coordinate(t,group.iloc[i]["longitude"],group.iloc[i]["latitude"])

geo.add("",map(lambda x,y : (x,y),strs,group["speed"]),symbol_size=10)

bstr="begin lon:{} lat:{}".format(group.iloc[0]["begin_longitude"],group.iloc[i]["begin_latitude"])
estr="end lon:{} lat:{}".format(group.iloc[0]["end_longitude"],group.iloc[i]["end_latitude"])
geo.add_coordinate(bstr,group.iloc[0]["begin_longitude"],group.iloc[i]["begin_latitude"])
geo.add_coordinate(estr,group.iloc[0]["end_longitude"],group.iloc[i]["end_latitude"])

geo.add("",[(bstr,0)],symbol_size=30,symbol="pin")
geo.add("",[(estr,80)],symbol_size=30,symbol="pin")

geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
geo.render("./trace/{}.html".format(name))

count+=1
if count > 100:
break


print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
print('time costed is: %d s' % (int((datetime.now() - start).seconds)))

Note14

  在控制台中输出实现进度加载的效果,每次清除上一次输出的一行内容。

1
2
3
4
5

import time
for i in range(10):
time.sleep(0.2)
print ("\r Loading... ".format(i)+str(i), end="")

参考资料:Python控制台输出时刷新当前行内容而不是输出新行


2020.06.21

Note15

  使用pandas.DataFrame.sample随机抽样函数打乱数据顺序:

1
df=df.sample(frac=1)

参考资料:pandas.DataFrame.sample随机抽样


2020.07.10

Note16

  Jupyter Notebook今天运行的时候打不开.ipynb文件,报错500:Internet Server Error。Jupyter Notebook经过重启之后依然是同样的错误,查看日志文件,发现系统报错AttributeError: module 'tornado.web' has no attribute 'asynchronous'。经排查发现是队友在环境下装了一个包,导致tornado被升级到6.0.4版本,与Jupyter Notebook所需版本不一致导致的报错。
  因为高版本是用pip安装的,原低版本是conda默认安装的,使用pip将高版本的tornado卸载后原低版本还在。再次启动Jupyter Notebook,结果显示找不到tornado。后来检查发现base环境下有很多pip安装的重复的包,包括Jupyter Notebook也被pip重复安装了一个高版本的,尝试将所有pip安装的包都卸载以后,运行程序显示找不到Jupyter Notebook,但是原来conda默认安装的包都还在环境里。
  本打算重新安装一遍Jupyter Notebook,或者单独创建一个新环境来安装,但是运行安装命令网络一直超时连不上。后来发现其他几个环境下当初为了将该环境引入kernel列表也都安装了一套完整的Jupyter Notebook,这些Jupyter Notebook都可以正常运行,所以最后使用dataprocess环境下的Jupyter Notebook服务器代替原来的进行使用。


2020.07.13

Note17

  在华为云NoteBook中使用pip安装matplotlib,然后导入时遇到报错:ImportError: cannot import name 'rcParams'
  解决方案为在导入前添加一句:

1
from pylab import rcParams

参考资料:https://stackoverflow.com/questions/59936356/importerror-cannot-import-name-rcparams-from-matplotlib


2020.07.14

Note18

  由于GPU服务器是在是太贵了,我现在处理也用不上GPU,只是需要较大的内存而已,所以在数据清理初期结束以后后面的工作可以转移到CPU服务器上进行。写了一些小脚本用以文件同步:

文件上传

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import moxing as mox
mox.file.shift('os', 'mox')
from datetime import datetime

start=datetime.now()
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

if(mox.file.exists('obs://xxx/siriyang')):
mox.file.remove('obs://xxx/siriyang', recursive=True)
print('delete obs://xxx/siriyang')

mox.file.copy_parallel('./siriyang', 'obs://xxx/siriyang')
print('Copy procedure is completed !')

print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
print('time used ',(datetime.now()-start).total_seconds(),'s')

文件下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import moxing as mox
mox.file.shift('os', 'mox')
from datetime import datetime

start=datetime.now()
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

if(mox.file.exists('./siriyang')):
mox.file.remove('./siriyang', recursive=True)
print('delete ./siriyang')

mox.file.copy_parallel('obs://xxx/siriyang','./siriyang')
print('Copy procedure is completed !')

print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
print('time used ',(datetime.now()-start).total_seconds(),'s')

参考资料:https://support.huaweicloud.com/moxing-devg-modelarts/modelarts_11_0005.html

-------- 本文结束 感谢阅读 --------
相关文章
  • 中医药天池大数据竞赛--中药说明书实体识别挑战
  • 2020华为云大数据挑战赛-正式赛(2)
  • 2020华为云大数据挑战赛-正式赛(1)
  • 2020华为云大数据挑战赛-热身赛(2)
  • 2020华为云大数据挑战赛-热身赛遇到的问题
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
SiriYang 微信支付

微信支付

SiriYang 支付宝

支付宝

  • 本文标题: 2020华为云大数据挑战赛-正式赛遇到的问题
  • 本文作者: SiriYang
  • 创建时间: 2020年05月27日 - 22时05分
  • 修改时间: 2021年10月29日 - 18时10分
  • 本文链接: https://blog.siriyang.cn/posts/20200527224530id.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习笔记 Linux Python 机器学习 数据挖掘 竞赛
机器学习基础理论:KNN
贪心学院xgboost细节讲解
  • 文章目录
  • 站点概览
SiriYang

SiriYang

努力搬砖攒钱买镜头的摄影迷
320 日志
33 分类
88 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 作品商铺

  1. 2020.05.27
    1. Note1
  2. 2020.05.28
    1. Note2
    2. Note3
  3. 2020.06.02
    1. Note4
    2. Note5
  4. 2020.06.03
    1. Note6
    2. Note7
    3. Note8
    4. Note9
  5. 2020.06.05
    1. Note10
  6. 2020.06.07
    1. Note11
  7. 2020.06.16
    1. Note12
  8. 2020.06.17
    1. Note13
    2. Note14
  9. 2020.06.21
    1. Note15
  10. 2020.07.10
    1. Note16
  11. 2020.07.13
    1. Note17
  12. 2020.07.14
    1. Note18
蜀ICP备19008337号 © 2019 – 2025 SiriYang | 1.7m | 25:41
0%