在开始数据科学项目时,我们通常需要设置或配置以确保所需的依赖项,保持输出稳定,并准备共同的功能。项目设置案例(来自Handson-ML2)本文将介绍JuypterNotebook中一些最有用的项目设置。1.确保Python版本在JupyterNotebook中检查Python解释器版本:importsyssys.version'3.7.6(default,Jan82020,13:42:34)\n[Clang4.0.1(tags/RELEASE_401/final)]'确保项目运行Python解释器最低要求版本及以上,可在项目设置中添加如下代码:#Python≥3.7isrequiredimportsysassertsys.version_info>=(3,7)Python需要3.7及以上,否则报AssertionError将被抛出。2.确保软件包版本检查安装的软件包版本,例如TensorFlow。importtensorflowastftf.__version__'2.0.0'保证项目运行在TensorFlow2.0及以上版本,否则会抛出AssertionError。#TensorFlow≥2.0isrequiredimporttensorflowastfasserttf.__version__>="2.0"3.避免绘制模糊图像JuypterNotebook中的默认图看起来很模糊。例如,用于查找缺失值的简单热图。(https://towardsdatascience.com/using-pandas-pipe-function-to-improve-code-readability-96d66abfaf8)importseabornassnsimportmatplotlib.pyplotasplt%matplotlibinline#Defaultfigureformatpngsns.heatmap(df.isnull(),yticklabels=False,cbar=False,cmap='viridis')默认图片看起来很模糊从上图可以看出,文字很模糊,Cabin栏的缺失值太拥挤,Embarked栏的缺失值不能被认可。要解决此问题,请在%matplotlibinline之后使用%configInlineBackend.figure_format='retina'或%configInlineBackend.figure_format='svg',即:%matplotlibinline%configInlineBackend.figure_format='retina'#or'svg'sns。heatmap(df.isnull(),yticklabels=False,cbar=False,cmap='viridis')图片格式设置为retinaorsvg与上一张图片相比,上图更清晰,Embarked一栏缺失值也可以成功识别。4.在运行中保持输出稳定随机数在数据科学项目的许多地方使用。例如:来自Scikit-Learn的train_test_split()np.random.rand()用于初始化权重如果不重置随机种子,每次调用将出现不同的数字:>>>np.random.rand(4)array([0.83209492,0.10917076,0.15798519,0.99356723])>>>np.random.rand(4)array([0.46183001,0.7523687,0.96599624,0.32349079])np.random.seed(0)>使随机数可预测random.seed(0)>>>np.random.rand(4)array([0.5488135,0.71518937,0.60276338,0.54488318])>>>np.random.seed(0)>>>np.random.rand(4)array([0.5488135,0.71518937,0.60276338,0.54488318])如果你重新设置随机种子(每次),那么每次都会出现相同的数据集。因此,该项目可以在运行期间保持输出稳定。5.多单元输出默认情况下,JupyterNotebook不能在同一个单元输出多个结果。要输出多个结果,可以使用IPython重新配置shell。fromIPython.core.interactiveshellimportInteractiveShellInteractiveShell.ast_node_interactivity="all"6.保存图片到文件Matplotlib可以通过savefig()方法保存图片,但是如果给定的路径不存在会抛出错误。plt.savefig('./figures/my_plot.png')FileNotFoundError:[Errno2]Nosuchfileordirectory:'./figures/my_plot.png'最好的办法是把所有的图片放在一个地方,比如figures文件在工作区文件夹。您可以使用OSGUI(操作系统界面)或通过在JupyterNotebook中运行逻辑命令手动创建图形文件夹,但最好创建一个小函数来执行此操作。当需要一些自定义图形设置或额外的子文件夹来对图形进行分组时,这尤其有用。这是将图形保存到文件的函数:importos%matplotlibinlineimportmatplotlib.pyplotasplt#WheretosavethefiguresPROJECT_ROOT_DIR="."SUB_FOLDER="sub_folder"#asub-folderIMAGES_PATH=os.path.join(PROJECT_ROOT_DIR,"images",SUB_FOLDER)defathsave_fig(name,image=IMAGES_PATH,tight_layout=True,extension="png",resolution=300):ifnotos.path.isdir(images_path):os.makedirs(images_path)path=os.path.join(images_path,name+"."+extension)print("Savingfigure:",name)iftight_layout:plt.tight_layout()plt.savefig(path,format=extension,dpi=resolution)现在调用save_fig('figure_name'),这将在工作区,图片保存到名为“figure_name.png”的目录中。此外,还提供了三个最常用的设置:tight_layout可以自动调整子图的填充extension可以保存多种格式的图片resolution可以设置图片分辨率7.下载数据(并解压)处理网络数据例程。可以使用浏览器下载数据并运行命令解压缩文件,但最好创建一个小函数来执行此操作。当数据需要定期更改时,这一点尤为重要。编写一个小脚本,在获取到最新数据时运行(也可以设置定时自动执行的定时作业)。如果数据集需要安装在多台机器上,自动化抓取过程也很有用。下面是下载并解决压力数据的函数:importosimporttarfileimportzipfileimporturllib#WheretosavethedataPROJECT_ROOT_DIR="."SUB_FOLDER="group_name"LOCAL_PATH=os.path.join(PROJECT_ROOT_DIR,"datasets",SUB_FOLDER)defdownload(file_url,local_path.ifnotos.ifnotos.PATH):isdir(local_path):os.makedirs(local_path)#Downloadfileprint(">>>downloading")filename=os.path.basename(file_url)file_local_path=os.path.join(local_path,filename)urllib.request.urlretrieve(file_url,file_local_path)#untar/unzipfileiffilename.endswith("tgz")orfilename.endswith("tar.gz"):print(">>>解压文件:",filename)tar=tarfile.open(file_local_path,"r:gz")tar.extractall(path=local_path)tar.close()eliffilename.endswith("tar"):print(">>>unpackingfile:",filename)tar=tarfile.open(file_local_path,"r:")tar.extractall(path=local_path)tar.close()eliffilename.endwith("zip"):print(">>>unpackingfile:",filename)zip_file=zipfile.ZipFile(file_local_path)zip_file.extractall(path=local_path)zip_file.close()print("Done")现在调用download("http://a_valid_url/housing.tgz")将在工作空间中创建一个datasets/group_name目录,下载housing.tgz,并从该目录中提取housing.csv。这个小功能也可以用于CSV和文本文件图片源:unsplash请查看作者Github库中的源码:https://github.com/BindiChen/machine-learning/blob/master/data-analysis/004-7-setups-for-a-data-science-project/7-setups.ipynb
