2020.04.22
Note1
修改pandas
列名:
1 | #method1,直接重新命名df1的列名 |
参考资料:pandas 修改列名
Note2
pygal绘制折线图:
1 | import pygal |
2020.04.23
Note3
有时候在使用ModelArts时会遇到NoteBook无法运行和保存的情况,这是因为NoteBook由于定时已经自动关闭。这种情况下得手动复制代码备份一下。
Note4
使用python中的datetime
获取当前的年份、月份、天数、小时数、分钟数、秒数
1 | import datetime |
结果如下:
1 | ('now is ', datetime.datetime(2019, 6, 14, 15, 42, 27, 601210)) |
Note5
从字符串创建datetime
对象:
1 | datetime.strptime(day, format="%Y-%m-%d") |
Note6
pandas
函数的to_datetime
生成的对象并不是datetime.datetime
,而是Timestamp
,它是从Python标准库的datetime
类继承过来的,表示时间轴上的一个时刻,注意区别。
2020.04.24
Note7
要想在customize_service.py
中推导模型时使用本地数据集,可以将加载模型相关的其他数据及文件与模型文件上传至OBS同目录下,再在customize_service.py
脚本的preprocess
和inference
方法中实现相关读取和使用逻辑。在脚本中可以通过self.model_path
获取模型文件在镜像中的路径(/home/work/predict/model/your_model_name.xxx
),对这一路径做裁剪和再拼装,就可以拿到你上次至OBS的其他文件。
因为是和模型放在同一个文件夹并被下载到镜像里,需要通过
model_path
去获取,而不能使用相对customize_service.py
的路径。比如你说的weather.csv
,假如它相对你的模型文件的路径是:
obs_model_path
│-model_name.xxxx
│-data
│- weather.csv即
weather.csv
在与模型文件处于同级目录的data
文件夹下面 它的路径可以这样获取:
1
2
3
4 relative_path_to_weather = "data/weather.csv" # 相对模型文件所在目录的路径
(path_to_model, model_file_name) = os.path.split(self.model_path)
path_to_weather = os.path.join(path_to_model, relative_path_to_weather)
# 即/home/work/predict/model/data/weather
参考资料:https://developer.huaweicloud.com/hero/forum.php?mod=viewthread&tid=51715
2020.05.01
Note8
绘制交通流量折线图:
1 | dataset["number"]=dataset["straightFlow"]+dataset["leftFlow"] |
Note9
matplotlib要在水平X轴上显示日期,直接使用datetime
作为横坐标参数。
Note10
使用matplotlib.pyplot.subplots_adjust
调整边距。
1 | subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None) |
参数
有六个可选参数来控制子图布局。值均为0~1之间。其中left
、bottom
、right
、top
围成的区域就是子图的区域。wspace
、hspace
分别表示子图之间左右、上下的间距。实际的默认值由matplotlibrc文件控制的。
参考资料:https://blog.csdn.net/asty9000/article/details/88881499
Note11
pandas选取特定时间范围内的数据:
1 | t1[(datetime(2019,1,12)<=t1["datetime"]) & (t1["datetime"]<datetime(2019,1,13))] |
注意事项
- 多个筛选条件并存时,不能用
and
连接,需要用单个&
符号。 s_date <= df['trade_date'] <= e_date
等同于and
参考资料:pandas 按日期范围筛选数据
Note12
matplotlib显示标签,且在左上角:
1 | ax1.plot(range(288),t1[(datetime(2019, 1, 20) <= t1["datetime"]) & (t1["datetime"] < datetime(2019, 1, 21))]["number"],label="1.20") |
2020.05.02
Note13
matplotlib绘制水平和垂直参考线:
函数功能:绘制平行于x
轴的水平参考线
调用签名:plt.axhline(y=0.0, c="r", ls="--", lw=2)
y
:水平参考线的出发点c
:参考线的线条颜色ls
:参考线的线条风格lw
:参考线的线条宽度
axvline()函数同理。
1 | plt.axhline(y=0.0, c="r", ls="--", lw=2) |
2020.05.03
Note14
要将json.dump()
返回的字符串解析回字典,要使用json.loads()
,而不是json.load()
。
2020.05.04
Note15
pandas统计并输出缺失值(NaN):
1 | print(feature.isnull().sum()) |
Note16
将模型更换为XGBoost,需要相应将配置文件修改为:
1 | schema_model['model_algorithm'] = "gbtree_regression" |
Note17
XGBoost要使用early_stopping_rounds
参数则还需在模型参数中配置'eval_metric': 'rmse'
,并在训练时传入evals
参数,否则会报错。
2020.05.05
Note18
实现线上评分公式,传入数据为一天内5:00到21:00长度为192的预测数据和真实值列表以及预测前一天同时段的真实数据。返回值为加权总分和分类、回归单项得分。
1 | def sigmoid(x): |
2020.05.06
Note19
在Jupyter NoteBook中显示matplotlib绘制的图像,需要在代码首行(导包前就行)添加:
1 | %matplotlib inline |
Note20
pandas排序:
1 | In [1]: frame=pd.DataFrame(np.arange(12).reshape((4,3)),columns=['c','a','b'],index=['D','B','C','A']) |
参考资料:pandas根据列名对列重新排序
2020.05.17
Note21
在调用json.dump()
函数的时候遇到报错:
Object of type ‘float32’ is not JSON serializable
解决方案如下:
1 |
|
参考资料:https://blog.csdn.net/jacke121/article/details/79231972
2020.05.28
Note22
在matplotlib中使用中文标签:
1 | import matplotlib.pyplot as plt |
2020.05.29
Note23
之前在使用pd.isin(pd.date_range(...))
函数来截取某段时间范围的数据的时候一直有问题,取出来的并不是我预期的结果,有很多数据缺失没被取出来,后来发现是参数没设置对,要设置freq="5s"
来控制生成的时间序列粒度:
1 | dataset['datetime'].isin(pd.date_range(start="2019/1/28 00:00:00", end="2019/2/3 23:55:00", freq="5s"))] |