Python 物联网入门指南(一)(4)

简介: Python 物联网入门指南(一)

Python 物联网入门指南(一)(3)https://developer.aliyun.com/article/1506427

使用 SMB 共享树莓派的主文件夹

当您将树莓派连接到网络时,您可以通过设置文件共享来访问主文件夹;这样可以更轻松地传输文件,并提供了一种快速简便的备份数据的方法。服务器消息块SMB)是一种与 Windows 文件共享、OS X 和 Linux 兼容的协议。

准备工作

确保您的树莓派已接通电源并连接到互联网。

您还需要另一台在同一本地网络上的计算机来测试新的共享。

如何做…

首先,我们需要安装samba,这是一款处理与 Windows 共享方法兼容的文件夹共享的软件:

  1. 确保您使用以下命令来获取可用软件包的最新列表:
sudo apt-get update
sudo apt-get install samba  

安装将需要大约 20MB 的空间,并需要几分钟的时间。

  1. 安装完成后,我们可以按照以下方式复制配置文件,以便在需要时恢复默认设置:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo nano /etc/samba/smb.conf  

向下滚动并找到名为Authentication的部分;将# security = user行更改为security = user

如文件中所述,此设置确保您必须输入用户名和密码才能访问树莓派的文件(这对于共享网络非常重要)。

找到名为Share Definitions[homes]的部分,并将read only = yes行更改为read only = no

这将允许我们查看并向共享的主文件夹写入文件。完成后,按Ctrl + XYEnter保存并退出。

如果您已将默认用户从pi更改为其他内容,请在以下说明中进行替换。

  1. 现在,我们可以添加pi(默认用户)来使用samba
sudo pdbedit -a -u pi
  1. 现在,输入密码(您可以使用与登录相同的密码或选择不同的密码,但避免使用默认的树莓密码,这对某人来说将非常容易猜到)。重新启动samba以使用新的配置文件,如下所示:
sudo /etc/init.d/samba restart
[ ok ] Stopping Samba daemons: nmbd smbd.
[ ok ] Starting Samba daemons: nmbd smbd.  
  1. 要进行测试,您需要知道树莓派的hostname(默认hostnameraspberrypi)或其 IP 地址。您可以使用以下命令找到这两者。
hostname
  1. 对于 IP 地址,添加-I
hostname -I  

在网络上的另一台计算机上,在资源管理器路径中输入\raspberrypipi地址。

根据您的网络,计算机应该能够在网络上找到树莓派,并提示输入用户名和密码。如果它无法使用hostname找到共享,您可以直接使用 IP 地址,其中192.168.1.69应更改为匹配 IP 地址\192.168.1.69pi

保持树莓派最新

树莓派使用的 Linux 镜像经常更新,以包括对系统的增强、修复和改进,以及对新硬件的支持或对最新板的更改。您安装的许多软件包也可以进行更新。

如果您打算在另一个树莓派板上使用相同的系统镜像(特别是较新的板),这一点尤为重要,因为旧镜像将缺乏对任何布线更改或替代 RAM 芯片的支持。新固件应该可以在较旧的树莓派板上工作,但是旧固件可能与最新的硬件不兼容。

幸运的是,每次有新版本发布时,您无需重新刷写 SD 卡,因为可以进行更新。

准备就绪

您需要连接到互联网才能更新系统。始终建议首先备份您的镜像(至少复制您的重要文件)。

您可以使用uname -a命令检查当前固件的版本,如下所示:

Linux raspberrypi 4.4.9-v7+ #884 SMP Fri May 6 17:28:59 BST 2016 armv7l GNU/Linux  

可以使用/opt/vc/bin/vcgencmd version命令来检查 GPU 固件,如下所示:

May  6 2016 13:53:23
Copyright (c) 2012 Broadcom
version 0cc642d53eab041e67c8c373d989fef5847448f8 (clean) (release)

如果您在较新的板上使用较旧的固件(2012 年 11 月之前),这一点很重要,因为最初的 B 型板只有 254MB RAM。升级可以使固件利用额外的内存(如果可用)。

free -h命令将详细说明主处理器可用的 RAM(总 RAM 在 GPU 和 ARM 核心之间分配),并将给出以下输出:

total       used       free     shared    buffers     cached
    Mem:          925M       224M       701M       7.1M        14M       123M
    -/+ buffers/cache:        86M       839M
    Swap:          99M         0B        99M

然后可以在重新启动后重新检查前面的输出,以确认它们已经更新(尽管它们可能已经是最新的)。

如何做…

  1. 在运行任何升级或安装任何软件包之前,值得确保您拥有存储库中最新的软件包列表。update命令获取可用软件和版本的最新列表:
sudo apt-get update  
  1. 如果您只想获取当前软件包的升级,upgrade将使它们全部保持最新状态:
sudo apt-get upgrade
  1. 为确保您运行的是最新版本的 Raspbian,可以运行dist-upgrade(请注意:这可能需要一小时或更长时间,具体取决于需要升级的数量)。这将执行upgrade将执行的所有更新,但还将删除多余的软件包并进行清理:
sudo apt-get dist-upgrade  

这两种方法都将升级软件,包括在启动和启动时使用的固件(bootcode.binstart.elf)。

  1. 要更新固件,可以使用以下命令:
sudo rpi-update  

还有更多…

您经常会发现您想要对设置进行干净的安装,但是这意味着您将不得不从头开始安装所有内容。为了避免这种情况,我开发了 Pi-Kitchen 项目(github.com/PiHw/Pi-Kitchen),基于Kevin Hill的基础工作。这旨在提供一个灵活的平台,用于创建可以自动部署到 SD 卡的定制设置:

Pi Kitchen 允许在启动之前配置树莓派

Pi-Kitchen 允许配置各种口味,可以从 NOOBS 菜单中选择。每种口味都包括一系列食谱,每个食谱都提供最终操作系统的特定功能或特性。食谱可以从为 Wi-Fi 设备设置自定义驱动程序,到在您的网络上映射共享驱动器,再到提供一个功能齐全的网络服务器,所有这些都组合在一起,以满足您的要求。

该项目处于测试阶段,作为概念验证开发,但是一旦您配置好一切,将完全工作的设置直接部署到 SD 卡上将非常有用。最终,该项目可以与 Kevin Hill 的 NOOBS 的高级版本PINN Is Not NOOBSPINN)结合使用,旨在为高级用户提供额外功能,例如允许操作系统和配置存储在您的网络上或外部 USB 存储器上。

第二章:划分文本数据和构建文本分类器

本章介绍了以下主题:

  • 构建文本分类器
  • 使用标记化预处理数据
  • 词干化文本数据
  • 使用分块划分文本
  • 构建词袋模型
  • 文本分类器的应用

介绍

本章介绍了构建文本分类器的方法。这包括从数据库中提取重要特征、训练、测试和验证文本分类器。最初,使用常用词训练文本分类器。后来,训练好的文本分类器用于预测。构建文本分类器包括使用标记化预处理数据、词干化文本数据、使用分块划分文本和构建词袋模型。

构建文本分类器

分类器单元通常被认为是将数据库分成各种类别的。朴素贝叶斯分类器方案被广泛认为是根据训练模型将文本分隔的文献。本章的这一部分最初考虑了一个带有关键词的文本数据库;特征提取从文本中提取关键短语并训练分类器系统。然后,实施词频-逆文档频率tf-idf)转换以指定单词的重要性。最后,使用分类器系统预测并打印输出。

如何做…

  1. 在新的 Python 文件中包含以下行以添加数据集:
from sklearn.datasets import fetch_20newsgroups 
category_mapping = {'misc.forsale': 'Sellings', 'rec.motorcycles': 'Motorbikes', 
        'rec.sport.baseball': 'Baseball', 'sci.crypt': 'Cryptography', 
        'sci.space': 'OuterSpace'} 
training_content = fetch_20newsgroups(subset='train', 
categories=category_mapping.keys(), shuffle=True, random_state=7) 
  1. 执行特征提取以从文本中提取主要单词:
from sklearn.feature_extraction.text import CountVectorizer 
vectorizing = CountVectorizer() 
train_counts = vectorizing.fit_transform(training_content.data) 
print "nDimensions of training data:", train_counts.shape 
  1. 训练分类器:
from sklearn.naive_bayes import MultinomialNB 
from sklearn.feature_extraction.text import TfidfTransformer 
input_content = [ 
    "The curveballs of right handed pitchers tend to curve to the left", 
    "Caesar cipher is an ancient form of encryption", 
    "This two-wheeler is really good on slippery roads" 
] 
tfidf_transformer = TfidfTransformer() 
train_tfidf = tfidf_transformer.fit_transform(train_counts) 
  1. 实现多项式朴素贝叶斯分类器:
classifier = MultinomialNB().fit(train_tfidf, training_content.target) 
input_counts = vectorizing.transform(input_content) 
input_tfidf = tfidf_transformer.transform(input_counts) 
  1. 预测输出类别:
categories_prediction = classifier.predict(input_tfidf) 
  1. 打印输出:
for sentence, category in zip(input_content, categories_prediction): 
    print 'nInput:', sentence, 'nPredicted category:',  
            category_mapping[training_content.target_names[category]] 

以下屏幕截图提供了根据数据库输入预测对象的示例:


它是如何工作的…

本章的前一部分提供了有关实施分类器部分和一些样本结果的见解。分类器部分是基于训练好的朴素贝叶斯中的先前文本与测试序列中的关键测试之间的比较工作的。

另请参阅

请参阅以下文章:

使用标记化预处理数据

数据的预处理涉及将现有文本转换为学习算法的可接受信息。

标记化是将文本分成一组有意义的片段的过程。这些片段被称为标记。

如何做…

  1. 介绍句子标记化:
from nltk.tokenize import sent_tokenize
  1. 形成一个新的文本标记器:
tokenize_list_sent = sent_tokenize(text)
print "nSentence tokenizer:" 
print tokenize_list_sent 
  1. 形成一个新的单词标记器:
from nltk.tokenize import word_tokenize 
print "nWord tokenizer:" 
print word_tokenize(text) 
  1. 引入一个新的 WordPunct 标记器:
from nltk.tokenize import WordPunctTokenizer 
word_punct_tokenizer = WordPunctTokenizer() 
print "nWord punct tokenizer:" 
print word_punct_tokenizer.tokenize(text) 

标记器得到的结果如下所示。它将一个句子分成单词组:

词干化文本数据

词干处理过程涉及为标记器的单词创建适当的缩写单词。

如何做…

  1. 使用新的 Python 文件初始化词干处理过程:
from nltk.stem.porter import PorterStemmer 
from nltk.stem.lancaster import LancasterStemmer 
from nltk.stem.snowball import SnowballStemmer 
  1. 让我们描述一些要考虑的词,如下所示:
words = ['ability', 'baby', 'college', 'playing', 'is', 'dream', 'election', 'beaches', 'image', 'group', 'happy'] 
  1. 确定要使用的一组词干处理器
stemmers = ['PORTER', 'LANCASTER', 'SNOWBALL'] 
  1. 为所选的“词干处理器”初始化必要的任务:
stem_porter = PorterStemmer() 
stem_lancaster = LancasterStemmer() 
stem_snowball = SnowballStemmer('english') 
  1. 格式化表格以打印结果:
formatted_row = '{:>16}' * (len(stemmers) + 1) 
print 'n', formatted_row.format('WORD', *stemmers), 'n' 
  1. 反复检查单词列表,并使用选择的“词干处理器”对它们进行排列:
for word in words:
  stem_words = [stem_porter.stem(word), 
  stem_lancaster.stem(word), 
  stem_snowball.stem(word)] 
  print formatted_row.format(word, *stem_words) 

词干处理过程得到的结果如下截图所示:

使用分块分割文本

分块过程可用于将大文本分成小的、有意义的单词。

如何做…

  1. 使用 Python 开发并导入以下包:
import numpy as np 
from nltk.corpus import brown 
  1. 描述将文本分成块的函数:
# Split a text into chunks 
def splitter(content, num_of_words): 
   words = content.split(' ') 
   result = [] 
  1. 初始化以下编程行以获取分配的变量:
current_count = 0 
   current_words = []
  1. 开始使用单词进行迭代:
for word in words: 
     current_words.append(word) 
     current_count += 1 
  1. 获取必要数量的单词后,重新组织变量:
if current_count == num_of_words: 
       result.append(' '.join(current_words)) 
       current_words = [] 
       current_count = 0 
  1. 将块附加到输出变量:
result.append(' '.join(current_words)) 
       return result 
  1. 导入“布朗语料库”的数据,并考虑前 10000 个单词:
if __name__=='__main__': 
  # Read the data from the Brown corpus 
  content = ' '.join(brown.words()[:10000]) 
  1. 描述每个块中的字大小:
# Number of words in each chunk 
  num_of_words = 1600 
  1. 初始化一对重要的变量:
chunks = [] 
  counter = 0 
  1. 通过调用“分割器”函数打印结果:
num_text_chunks = splitter(content, num_of_words) 
  print "Number of text chunks =", len(num_text_chunks) 
  1. 分块后得到的结果如下截图所示:


构建词袋模型

在处理包含大单词的文本文档时,我们需要将它们转换为几种类型的算术表示。我们需要将它们制定为适合机器学习算法的形式。这些算法需要算术信息,以便它们可以检查数据并提供重要的细节。词袋程序帮助我们实现这一点。词袋创建一个文本模型,使用文档中的所有单词来发现词汇。随后,它通过构建文本中所有单词的直方图来为每个文本创建模型。

如何做…

  1. 通过导入以下文件初始化一个新的 Python 文件:
import numpy as np 
from nltk.corpus import brown 
from chunking import splitter 
  1. 定义main函数并从“布朗语料库”中读取输入数据:
if __name__=='__main__': 
        content = ' '.join(brown.words()[:10000]) 
  1. 将文本内容分成块:
num_of_words = 2000 
    num_chunks = [] 
    count = 0 
    texts_chunk = splitter(content, num_of_words) 
  1. 基于这些“文本”块构建词汇表:
for text in texts_chunk: 
      num_chunk = {'index': count, 'text': text} 
      num_chunks.append(num_chunk) 
      count += 1
  1. 提取文档词矩阵,有效地计算文档中每个单词的出现次数:
from sklearn.feature_extraction.text      
  import CountVectorizer
  1. 提取文档术语“矩阵”:
from sklearn.feature_extraction.text import CountVectorizer 
vectorizer = CountVectorizer(min_df=5, max_df=.95) 
matrix = vectorizer.fit_transform([num_chunk['text'] for num_chunk in num_chunks]) 
  1. 提取词汇并打印它:
vocabulary = np.array(vectorizer.get_feature_names()) 
print "nVocabulary:" 
print vocabulary 
  1. 打印文档术语“矩阵”:
print "nDocument term matrix:" 
chunks_name = ['Chunk-0', 'Chunk-1', 'Chunk-2', 'Chunk-3', 'Chunk-4'] 
formatted_row = '{:>12}' * (len(chunks_name) + 1) 
print 'n', formatted_row.format('Word', *chunks_name), 'n' 
  1. 迭代单词,并打印每个单词在不同块中的重现:
for word, item in zip(vocabulary, matrix.T): 
# 'item' is a 'csr_matrix' data structure 
 result = [str(x) for x in item.data] 
 print formatted_row.format(word, *result)
  1. 执行词袋模型后获得的结果如下所示:


为了理解它在给定句子上的工作原理,请参考以下内容:

文本分类器的应用

文本分类器用于分析客户情绪,在产品评论中,当在互联网上搜索查询时,在社交标签中,预测研究文章的新颖性等等。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
1月前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
23天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
28天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【10月更文挑战第42天】本文是一篇技术性文章,旨在为初学者提供一份关于如何使用Python进行数据分析的入门指南。我们将从安装必要的工具开始,然后逐步介绍如何导入数据、处理数据、进行数据可视化以及建立预测模型。本文的目标是帮助读者理解数据分析的基本步骤和方法,并通过实际的代码示例来加深理解。
56 3
|
1月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
24天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
23天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
37 7
|
25天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
38 5
|
23天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
61 3
|
28天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。