当前位置: 首页 > 科技观察

开源工具-Python数据科学入门

时间:2023-03-16 23:35:15 科技观察

您不需要昂贵的工具来领略数据科学的力量,只需从这些开源工具开始。无论您是具有数学或计算机科学背景的经验丰富的数据科学爱好者,还是其他领域的专家,数据科学提供的可能性都触手可及,而且您不需要昂贵、高度专业化的业务级软件。本文中讨论的开源工具是您入门所需的全部。Python及其机器学习和数据科学库(pandas、Keras、TensorFlow、scikit-learn、SciPy、NumPy等),以及大量的可视化库(Matplotlib、pyplot、Plotly等)为初学者和专家以及开源软件工具。它们易于学习、受到社区的欢迎和支持,并且拥有为数据科学开发的最新技术和算法。它们是您开始学习时可以获得的最佳工具集之一。许多Python库是建立在彼此之上的(称为依赖项),它们的基础是NumPy库。NumPy专为数据科学而设计,通常用于将数据集的相关部分存储在其ndarray数据类型中。ndarray是一种方便的数据类型,用于将关系表中的记录存储为cvs文件或任何其他格式,反之亦然。在将scikit函数应用于多维数组时,它特别方便。SQL非常适合查询数据库,但对于执行复杂且资源密集型的数据科学操作,将数据存储在ndarrays中可以提高效率和速度(但在处理大型数据集时请确保您有足够的RAM)。当您使用pandas进行知识提取和分析时,pandas中的DataFrame数据类型与NumPy中的ndarray之间的无缝转换为提取和计算密集型操作分别创建了强大的组合。作为快速演示,让我们启动Pythonshell并在pandasDataFrame变量中加载来自巴尔的摩的开放犯罪统计数据集,并查看加载的DataFrame的一部分:>>>importpandasaspd>>>crime_stats=pd.read_csv('BPD_Arrests.csv')>>>crime_stats.head()我们现在可以在这个pandasDataFrame上执行大多数查询,就像我们可以在数据库中使用SQL一样。例如,要获取Description属性的所有唯一值,SQL查询为:$SELECTunique(“Description”)fromcrime_stats;使用pandasDataFrame编写相同的查询将如下所示:>>>crime_stats['Description'].unique()['COMMONASSAULT''LARCENY''ROBBERY-STREET''AGG.ASSAULT''LARCENYFROMAUTO''HOMICIDE''BURGLARY''AUTOTHEFT''ROBBERY-RESIDENCE''ROBBERY-COMMERCIAL''ROBBERY-CARJACKING''Assaultbythreat''SHOOTING''RAPE''ARSON']它返回一个NumPy数组(ndarray类型):>>>type(crime_stats['Description'].unique())然后让我们将这些数据输入神经网络,看看它能多准确地预测类型使用的武器,给定犯罪事件、犯罪类型和位置:>>>fromsklearn.neural_networkimportMLPClassifier>>>importnumpyasnp>>>>>>prediction=crime_stats[['Weapon']]>>>predictors=crime_stats['CrimeTime','CrimeCode','Neighborhood']>>>>>>nn_model=MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_??layer_sizes=(5,2),random_state=1)>>>>>>predict_weapon=nn_model.fit(prediction,predictors)现在学习模型准备好了,我们可以执行一些测试以确定其质量和可靠性对于初学者,让我们输入训练集数据(用于训练模型的原始数据集的一部分,不包括在创建模型中):>>>predict_weapon.predict(training_set_weapons)array([4,4,4,...,0,4,4])如您所见,它返回一个列表,其中每个数字预测训练集中每条记录的武器。我们看到数字而不是武器名称的原因是因为大多数分类算法都针对数字进行了优化。对于分类数据,有一些技术可以将属性转换为数字表示。在这种情况下,使用的技术是标签编码,使用sklearn预处理库中的LabelEncoder函数:preprocessing.LabelEncoder()。它可以对数据及其相应的数值表示进行变换和逆变换。在这个例子中,我们可以使用LabelEncoder()的inverse_transform函数来查看武器0和4是什么:>>>preprocessing.LabelEncoder().inverse_transform(encoded_weapons)array(['HANDS','FIREARM','HANDS',...,'FIREARM','FIREARM','FIREARM']这很有趣,但要了解这个模型的准确性,让我们计算几个百分比分数:>>>nn_model.score(X,y)0.81999999999999995这个显示我们的神经网络模型准确率约为82%。这个结果可能看起来令人印象深刻,但重要的是检查其在不同犯罪数据集上使用时的有效性。还有其他测试可以做到这一点,例如相关性、混淆、矩阵,ETC。尽管我们的模型具有很高的准确性,但它对于一般的犯罪数据集并不是很有用,因为这个特定的数据集有不成比例的行数将FIREARM列为所使用的武器。除非重新训练,否则即使输入数据集具有不同的分布,我们的分类器也最有可能预测FIREARM。在对数据进行分类之前,清理数据并去除异常值和畸形数据非常重要。预处理越好,我们的见解就会越准确。此外,为模型或分类器提供过多数据(通常超过90%)以实现更高的准确度也不是一个好主意,因为它看起来准确但由于过度拟合而失败。Jupyternotebooks是命令行的绝佳交互式替代方案。虽然CLI适用于大多数情况,但当您想运行代码片段以生成可视化效果时,Jupyter非常有用。它比终端更好地格式化数据。本文列出了一些最好的机器学习免费资源,但还有许多其他指南和教程。根据您的兴趣和爱好,您还会发现许多可用的开放数据集。作为起点,Kaggle维护的数据集以及州政府网站上提供的数据集都是极好的资源。