百度深度学习paddlepaddle7日打卡——Python小白逆袭大神学习心得

  • 7日学习总结
    • 第一天作业
    • 第二天作业
    • 第三天作业
    • 第四天作业
    • 第五天作业

7日学习总结

通过这7日打卡课程的学习,从小白入门大神,还需要一段时间,随时大加都说python简单,但是需要系统化的对这个课程进行学习,有一定的基础后,你会在本次这个七日打卡课中的问题可以解决一大部分,在课程的学习中,每日的课程和作业老师讲的都特别认真详细(只能说爱了爱了),在自己做作业的时候,遇到不懂的问题时可以自己翻看学习群里的聊天记录
(图片来自于一个大佬的表情包),七天中大部分与作业相关无法解决的问题,基本上是都可以在微信聊天群解决的,在者在群里遇到不懂的问题时,学习群里的大佬看到后就会及时的帮你解决,当问题有点难度的时候(不要慌),强大的助教团队来帮你解决。同时在这个期间你也可以在AI studle平台上我的课程中找到讨论区
,讨论区中可能会有和你遇到相同的问题,自己可以翻翻看一下历史讨论即可(可以学到很多的东西哦)
课程的设计是由中国科学院大学AI小鸭团队设计,每期的课程中都滑稽的班班,强大的助教团队,强大的授课讲师团队,都是堪称完美的组合。每期的课程中都会有很多的收获,在本期的课程中有人工智能常用Python库的使用、用Python对《青春有你2》选手信息爬取,PaddleHub体验与应用、EasyDL体验等相关学习知识点。个人EasyDL体验(推荐使用经典版即可相关链接https://ai.baidu.com/forum/topic/list/190)及心得
体会分为以下几步1、创建模型2、准备数据3、训练模型4、部署应用

第一天作业

Day1-Python基础练习
学习路径如下

从AI与日常生活相关联
深度学习的优势

python的优点

python的应用场景

运行平台都以百度AI studio平台为上的Jupyter Notebook为准。链接: link.
第一天作业题目及其答案(相关代码)
第一题
下面展示一些相关代码。

def table():#在这里写下您的乘法口诀表代码吧!for a in range(1,10):for b in range(1,a+1):print(str(b) + str("*") + str(a)+"=" + str(a*b),end="\t")print()if __name__ == '__main__':table()

输出如下

第二题

#导入OS模块
import os
#待搜索的目录路径
path = "Day1-homework"
#待搜索的名称
filename = "2020"
#定义保存结果的数组
result = []
def findfiles(path):#在这里写下您的查找文件代码吧!global estaedestaed=0leta = os.listdir(path)for catr in leta:tempPathName=catrdaten_1 = os.path.join(path,catr)if os.path.isdir(daten_1):findfiles(daten_1)elif os.path.isfile(daten_1):if(tempPathName.find(filename)!=-1):estaed = estaed + 1result = []result.append(estaed)result.append(daten_1)if(len(result)>0):print(result)if __name__ == '__main__':findfiles(path)

输出如下

通过第一天的作业可以熟悉掌握python中os库的使用,os库主要在自动化测试中,经常需要查找操作文件,可以查找配置文件(从而读取配置文件的信息),也可以查找测试报告(从而发送测试报告邮件),也可以对大量文件和大量路径进行操作,进行批量化处理。

第二天作业

Day2-《青春有你2》选手信息爬取
在目前的深度学习领域中Python已经成为一种主流语言

平台介绍
AI Studio平台课程拥有新手入门、初阶课程、中阶课程、高阶课程等,没有什么是你不敢想的,只要你去尝试,你也可以。案例文档的说明和使用都有相关的视频教程。广大的项目和数据集全部开源可以供大家使用。其中还不定期的会有平台发布的项目比赛,有兴趣的小伙伴可以来参加哦。
项目(举个栗子)详细使用方法请看官网介绍(小白可能开始会有点懵,多在b站看看项目数据集等相关使用方法同时在多问问度娘,多了解几次就会使用平台了)

深度学习过程如下(简单介绍):

代码作业思路介绍
上网的全过程:

普通用户:

打开浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 渲染到页面上。

爬虫程序:

模拟浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 提取有用的数据 --> 保存到本地/数据库。
爬虫的过程:

1.发送请求(requests模块)

2.获取响应数据(服务器返回)

3.解析并提取数据(BeautifulSoup查找或者re正则)

4.保存数据
5.用到的库介绍
request模块:

requests是python实现的简单易用的HTTP库,官网地址:http://cn.python-requests.org/zh_CN/latest/

requests.get(url)可以发送一个http get请求,返回服务器响应内容。
BeautifulSoup库:

BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库。网址:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml。

BeautifulSoup(markup, “html.parser”)或者BeautifulSoup(markup, “lxml”),推荐使用lxml作为解析器,因为效率更高。

作业题

#如果需要进行持久化安装, 需要使用持久化路径, 如下方代码示例:
!mkdir /home/aistudio/external-libraries
!pip install beautifulsoup4 -t /home/aistudio/external-libraries
!pip install lxml -t /home/aistudio/external-libraries
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可:
import sys
sys.path.append('/home/aistudio/external-libraries')

执行结果如下:

1、爬取百度百科中《青春有你2》中所有参赛选手信息,返回页面数据

import json
import re
import requests
import datetime
from bs4 import BeautifulSoup
import os#获取当天的日期,并进行格式化,用于后面文件命名,格式:20200420
today = datetime.date.today().strftime('%Y%m%d')    def crawl_wiki_data():"""爬取百度百科中《青春有你2》中参赛选手信息,返回html"""headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}url='https://baike.baidu.com/item/青春有你第二季'                         try:response = requests.get(url,headers=headers)print(response.status_code)#将一段文档传入BeautifulSoup的构造方法,就能得到一个文档的对象, 可以传入一段字符串soup = BeautifulSoup(response.text,'lxml')#返回的是class为table-view log-set-param的<table>所有标签tables = soup.find_all('table',{'class':'table-view log-set-param'})crawl_table_title = "参赛学员"for table in  tables:           #对当前节点前面的标签和字符串进行查找table_titles = table.find_previous('div').find_all('h3')for title in table_titles:if(crawl_table_title in title):return table       except Exception as e:print(e)

2、对爬取的页面数据进行解析,并保存为JSON文件

def parse_wiki_data(table_html):'''从百度百科返回的html中解析得到选手信息,以当前日期作为文件名,存JSON文件,保存到work目录下'''bs = BeautifulSoup(str(table_html),'lxml')all_trs = bs.find_all('tr')error_list = ['\'','\"']stars = []for tr in all_trs[1:]:all_tds = tr.find_all('td')star = {}#姓名star["name"]=all_tds[0].text#个人百度百科链接star["link"]= 'https://baike.baidu.com' + all_tds[0].find('a').get('href')#籍贯star["zone"]=all_tds[1].text#星座star["constellation"]=all_tds[2].text#身高star["height"]=all_tds[3].text#体重star["weight"]= all_tds[4].text#花语,去除掉花语中的单引号或双引号flower_word = all_tds[5].textfor c in flower_word:if  c in error_list:flower_word=flower_word.replace(c,'')star["flower_word"]=flower_word #公司if not all_tds[6].find('a') is  None:star["company"]= all_tds[6].find('a').textelse:star["company"]= all_tds[6].text  stars.append(star)json_data = json.loads(str(stars).replace("\'","\""))   with open('work/' + today + '.json', 'w', encoding='UTF-8') as f:json.dump(json_data, f, ensure_ascii=False)

3、爬取每个选手的百度百科图片,并保存

def crawl_pic_urls():'''爬取每个选手的百度百科图片,并保存''' with open('work/'+ today + '.json', 'r', encoding='UTF-8') as file:json_array = json.loads(file.read())headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' }for star in json_array:name = star['name']link = star['link']#!!!请在以下完成对每个选手图片的爬取,将所有图片url存储在一个列表pic_urls中!!!response = requests.get(Link,headers=headers)bs = BeautifulSoup(requests.text,'lxml')pic_list_url = bs.select('.summary-pic a')[0].get('href')pic_list_url ='https://baike.baidu.com' + pic_list_urlpic_list_response = requests.get(pic_list_url,headers = headers) bs = BeautifulSoup(pic_list_response.text,'lxml')pic_list_html = bs.select('.pic-list img')pic_url =[]for pic_hyml in pic_list_html:pic_url = pic_html.get('src')pic_urls.append(pic_url)#!!!根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中!!!down_pic(name,pic_urls)def down_pic(name,pic_urls):'''根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中,'''path = 'work/'+'pics/'+name+'/'if not os.path.exists(path):os.makedirs(path)for i, pic_url in enumerate(pic_urls):try:pic = requests.get(pic_url, timeout=15)string = str(i + 1) + '.jpg'with open(path+string, 'wb') as f:f.write(pic.content)print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))except Exception as e:print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))print(e)continue

5、打印爬取的所有图片的路径

def show_pic_path(path):'''遍历所爬取的每张图片,并打印所有图片的绝对路径'''pic_num = 0for (dirpath,dirnames,filenames) in os.walk(path):for filename in filenames:pic_num += 1print("第%d张照片:%s" % (pic_num,os.path.join(dirpath,filename)))           print("共爬取《青春有你2》选手的%d照片" % pic_num)
if __name__ == '__main__':#爬取百度百科中《青春有你2》中参赛选手信息,返回htmlhtml = crawl_wiki_data()#解析html,得到选手信息,保存为json文件parse_wiki_data(html)#从每个选手的百度百科页面上爬取图片,并保存crawl_pic_urls()#打印所爬取的选手图片路径show_pic_path('/home/aistudio/work/pics/')print("所有信息爬取完成!")

输出如下:

通过的二天的作业,对《青春有你2》中的人物爬取及其将图片保存到本地的过程,可以对爬虫的使用更加的灵活。

第三天作业

Day3-《青春有你2》选手数据分析
将爬取的数据可视化处理相关代码如下
1、需要在平台Notebook上线上安装以下库包

# 如果需要进行持久化安装, 需要使用持久化路径, 如下方代码示例:
!mkdir /home/aistudio/external-libraries
!pip install matplotlib -t /home/aistudio/external-libraries

安装成功
2、导入操作库

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可:
# Also add the following code, so that every time the environment (kernel) starts, just run the following code:
import sys
sys.path.append('/home/aistudio/external-libraries')
import ospath = 'work/'+'result/'
if not os.path.exists(path):print("result path not exist, mkdir")os.makedirs(path)
# 下载中文字体
!wget https://mydueros.cdn.bcebos.com/font/simhei.ttf
# 将字体文件复制到matplotlib字体路径
!cp simhei.ttf /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/
# 一般只需要将字体文件复制到系统字体目录下即可,但是在aistudio上该路径没有写权限,所以此方法不能用
# !cp simhei.ttf /usr/share/fonts/# 创建系统字体文件路径
!mkdir .fonts
# 复制文件到该路径
!cp simhei.ttf .fonts/
!rm -rf .cache/matplotlib

3、将选手信息数据可视化,绘制选手区域分布柱状图

import matplotlib.pyplot as plt
import numpy as np
import json
import matplotlib.font_manager as font_manager#显示matplotlib生成的图形
%matplotlib inlinewith open('data/data31557/20200422.json', 'r', encoding='UTF-8') as file:json_array = json.loads(file.read())#绘制小姐姐区域分布柱状图,x轴为地区,y轴为该区域的小姐姐数量zones = []
for star in json_array:zone = star['zone']zones.append(zone)
print(len(zones))
print(zones)zone_list = []
count_list = []for zone in zones:if zone not in zone_list:count = zones.count(zone)zone_list.append(zone)count_list.append(count)print(zone_list)
print(count_list)# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体plt.figure(figsize=(20,15))plt.bar(range(len(count_list)), count_list,color='r',tick_label=zone_list,facecolor='#9999ff',edgecolor='white')# 这里是调节横坐标的倾斜度,rotation是度数,以及设置刻度字体大小
plt.xticks(rotation=45,fontsize=20)
plt.yticks(fontsize=20)plt.legend()
plt.title('''《青春有你2》参赛选手''',fontsize = 24)
plt.savefig('/home/aistudio/work/result/bar_result.jpg')
plt.show()

执行如下:
No handles with labels found to put in legend.
109
[‘中国湖北’, ‘中国四川’, ‘中国山东’, ‘中国浙江’, ‘中国山东’, ‘中国台湾’, ‘中国陕西’, ‘中国广东’, ‘中国黑龙江’, ‘中国上海’, ‘中国四川’, ‘中国山东’, ‘中国安徽’, ‘中国安徽’, ‘中国安徽’, ‘中国北京’, ‘中国贵州’, ‘中国吉林’, ‘中国四川’, ‘中国四川’, ‘中国江苏’, ‘中国山东’, ‘中国山东’, ‘中国山东’, ‘中国山东’, ‘中国江苏’, ‘中国四川’, ‘中国山东’, ‘中国山东’, ‘中国广东’, ‘中国浙江’, ‘中国河南’, ‘中国安徽’, ‘中国河南’, ‘中国北京’, ‘中国北京’, ‘马来西亚’, ‘中国湖北’, ‘中国四川’, ‘中国天津’, ‘中国黑龙江’, ‘中国四川’, ‘中国陕西’, ‘中国辽宁’, ‘中国湖南’, ‘中国上海’, ‘中国贵州’, ‘中国山东’, ‘中国湖北’, ‘中国黑龙江’, ‘中国黑龙江’, ‘中国上海’, ‘中国浙江’, ‘中国湖南’, ‘中国台湾’, ‘中国台湾’, ‘中国台湾’, ‘中国台湾’, ‘中国山东’, ‘中国北京’, ‘中国北京’, ‘中国浙江’, ‘中国河南’, ‘中国河南’, ‘中国福建’, ‘中国河南’, ‘中国北京’, ‘中国山东’, ‘中国四川’, ‘中国安徽’, ‘中国河南’, ‘中国四川’, ‘中国湖北’, ‘中国四川’, ‘中国陕西’, ‘中国湖南’, ‘中国四川’, ‘中国台湾’, ‘中国湖北’, ‘中国广西’, ‘中国江西’, ‘中国湖南’, ‘中国湖北’, ‘中国北京’, ‘中国陕西’, ‘中国上海’, ‘中国四川’, ‘中国山东’, ‘中国辽宁’, ‘中国辽宁’, ‘中国台湾’, ‘中国浙江’, ‘中国北京’, ‘中国黑龙江’, ‘中国北京’, ‘中国安徽’, ‘中国河北’, ‘马来西亚’, ‘中国四川’, ‘中国湖南’, ‘中国台湾’, ‘中国广东’, ‘中国上海’, ‘中国四川’, ‘日本’, ‘中国辽宁’, ‘中国黑龙江’, ‘中国浙江’, ‘中国台湾’]
[‘中国湖北’, ‘中国四川’, ‘中国山东’, ‘中国浙江’, ‘中国台湾’, ‘中国陕西’, ‘中国广东’, ‘中国黑龙江’, ‘中国上海’, ‘中国安徽’, ‘中国北京’, ‘中国贵州’, ‘中国吉林’, ‘中国江苏’, ‘中国河南’, ‘马来西亚’, ‘中国天津’, ‘中国辽宁’, ‘中国湖南’, ‘中国福建’, ‘中国广西’, ‘中国江西’, ‘中国河北’, ‘日本’]
[6, 14, 13, 6, 9, 4, 3, 6, 5, 6, 9, 2, 1, 2, 6, 2, 1, 4, 5, 1, 1, 1, 1, 1]

4、对选手体重分布进行可视化,绘制饼状图

import matplotlib.pyplot as plt
import numpy as np
import json
import matplotlib.font_manager as font_manager
%matplotlib inlinedf = pd.read_json('data/data31557/20200422.json')
weights = df['weight']
arrs = weights.values
for i in range(len(arrs)):arrs[i] = float(arrs[i][0:-2])
bin = [0,45,50,55,100]
se1 = pd.cut(arrs,bin)
pd.value_counts(se1)
labels = '<=45kg','45~50kg','50~55kg','>55kg'
sizes = pd.value_counts(se1)
#print(sizes)
explode = (0.1,0.1,0,0)
colors = ['tomato', 'lightskyblue', 'goldenrod', 'green', 'y']#设置饼图的颜色
fig1,ax1 = plt.subplots()
ax1.pie(sizes,explode = explode,labels=labels,colors=colors,autopct = '%1.1f%%',
shadow =True,startangle =90)
ax1.axis('equal')
plt.savefig('work/result/bar_result02.jpg')
plt.show()

生成饼图图片

第四天作业

Day4-《青春有你2》选手识别
1、对五人识别

#CPU环境启动请务必执行该指令
%set_env CPU_NUM=1
#安装paddlehub
!pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装成功如下:

2、Step1、基础工作
加载数据文件

导入python包

!unzip -o file.zip -d ./dataset/
import paddlehub as hub

3、加载预训练模型

module = hub.Module(name="resnet_v2_50_imagenet")

4、数据准备

from paddlehub.dataset.base_cv_dataset import BaseCVDatasetclass DemoDataset(BaseCVDataset): def __init__(self): # 数据集存放位置self.dataset_dir = "."super(DemoDataset, self).__init__(base_path=self.dataset_dir,train_list_file="dataset/train_list.txt",validate_list_file="dataset/validate_list.txt",test_list_file="dataset/test_list.txt",label_list_file="dataset/label_list.txt",)
dataset = DemoDataset()

5、生成数据读取器
接着生成一个图像分类的reader,reader负责将dataset的数据进行预处理,接着以特定格式组织并输入给模型进行训练。
当我们生成一个图像分类的reader时,需要指定输入图片的大小

data_reader = hub.reader.ImageClassificationReader(image_width=module.get_expected_image_width(),image_height=module.get_expected_image_height(),images_mean=module.get_pretrained_images_mean(),images_std=module.get_pretrained_images_std(),dataset=dataset)

6、配置策略

config = hub.RunConfig(use_cuda=False,                              #是否使用GPU训练,默认为False;num_epoch=3,                                #Fine-tune的轮数;checkpoint_dir="cv_finetune_turtorial_demo",#模型checkpoint保存路径, 若用户没有指定,程序会自动生成;batch_size=3,                              #训练的批大小,如果使用GPU,请根据实际情况调整batch_size;eval_interval=10,                           #模型评估的间隔,默认每100个step评估一次验证集;strategy=hub.finetune.strategy.DefaultFinetuneStrategy())  #Fine-tune优化策略;

7、组建Finetune Task
有了合适的预训练模型和准备要迁移的数据集后,我们开始组建一个Task。

由于该数据设置是一个二分类的任务,而我们下载的分类module是在ImageNet数据集上训练的千分类模型,所以我们需要对模型进行简单的微调,把模型改造为一个二分类模型:

获取module的上下文环境,包括输入和输出的变量,以及Paddle Program;
从输出变量中找到特征图提取层feature_map;
在feature_map后面接入一个全连接层,生成Task;

input_dict, output_dict, program = module.context(trainable=False)
img = input_dict["image"]
feature_map = output_dict["feature_map"]
feed_list = [img.name]task = hub.ImageClassifierTask(data_reader=data_reader,feed_list=feed_list,feature=feature_map,num_classes=dataset.num_labels,config=config)

8、开始Finetune

run_states = task.finetune_and_eval()

9、预测
当Finetune完成后,我们使用模型来进行预测,先通过以下命令来获取测试的图片

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimgwith open("dataset/test_list.txt","r") as f:filepath = f.readlines()data = [filepath[0].split(" ")[0],filepath[1].split(" ")[0],filepath[2].split(" ")[0],filepath[3].split(" ")[0],filepath[4].split(" ")[0]]label_map = dataset.label_dict()
index = 0
run_states = task.predict(data=data)
results = [run_state.run_results for run_state in run_states]for batch_result in results:print(batch_result)batch_result = np.argmax(batch_result, axis=2)[0]print(batch_result)for result in batch_result:index += 1result = label_map[result]print("input %i is %s, and the predict result is %s" %(index, data[index - 1], result))

执行如下:(这里有一个错误,人物图像输入的人只有2个人,应该是5个人。)

第五天作业

Day5-综合大作业
内容为
第一步:爱奇艺《青春有你2》评论数据爬取(参考链接:https://www.iqiyi.com/v_19ryfkiv8w.html#curid=15068699100_9f9bab7e0d1e30c494622af777f4ba39)

爬取任意一期正片视频下评论
评论条数不少于1000条
第二步:词频统计并可视化展示

数据预处理:清理清洗评论中特殊字符(如:@#¥%、emoji表情符),清洗后结果存储为txt文档
中文分词:添加新增词(如:青你、奥利给、冲鸭),去除停用词(如:哦、因此、不然、也好、但是)
统计top10高频词
可视化展示高频词
第三步:绘制词云

根据词频生成词云
可选项-添加背景图片,根据背景图片轮廓生成词云
第四步:结合PaddleHub,对评论进行内容审核

需要的配置和准备:
中文分词需要jieba
词云绘制需要wordcloud
可视化展示中需要的中文字体
网上公开资源中找一个中文停用词表
根据分词结果自己制作新增词表
准备一张词云背景图(附加项,不做要求,可用hub抠图实现)
paddlehub配置

!pip install jieba
!pip install wordcloud
# Linux系统默认字体文件路径
# !ls /usr/share/fonts/
# 查看系统可用的ttf格式中文字体
!fc-list :lang=zh | grep ".ttf"

字体设置需要上传中文分词(大家可以自去找一下,也可用这里的)

#!wget https://mydueros.cdn.bcebos.com/font/simhei.ttf # 下载中文字体
#创建字体目录fonts
!mkdir .fonts
# 复制字体文件到该路径
!cp simhei.ttf .fonts/
#安装模型
!hub install porn_detection_lstm==1.1.0
!pip install --upgrade paddlehub
!pip install wordcloud

导入包

from __future__ import print_function
import requests
import json
import re #正则匹配
import time #时间处理模块
import jieba #中文分词
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
from PIL import Image
from wordcloud import WordCloud  #绘制词云模块
import paddlehub as hub
#请求爱奇艺评论接口,返回response信息
def getMovieinfo(url):'''请求爱奇艺评论接口,返回response信息参数  url: 评论的url:return: response信息'''session=requests.Session()headers={"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1","Accept": "application/json","Referer": "http://m.iqiyi.com/v_19rqriflzg.html","Origin": "http://m.iqiyi.com","Host": "sns-comment.iqiyi.com","Connection": "keep-alive","Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6","Accept-Encoding": "gzip, deflate"}response = session.get(url,headers=headers)if response.status_code == 200:return response.textreturn None#解析json数据,获取评论
def saveMovieInfoToFile(lastId, arr):url='https://sns-comment.iqiyi.com/v3/comment/get_comments.action?agent_type=118&agent_version=9.11.5&authcookie=null&business_type=17&content_id=15068699100&page=&page_size=10&types=time&last_id='url+=str(lastId)responseTxt = getMovieinfo(url)responseJson=json.loads(responseTxt)comments=responseJson['data']['comments']for val in comments:# print(val.keys())if 'content' in val.keys():print(val['content'])arr.append(val['content'])lastId = str(val['id'])return lastId
#去除文本中特殊字符
def clear_special_char(content):'''正则处理特殊字符参数 content:原文本return: 清除后的文本'''comp = re.compile('[^A-Z^a-z^0-9^\u4e00-\u9fa5]')return comp.sub('', content)
def fenci(text):'''利用jieba进行分词参数 text:需要分词的句子或文本return:分词结果'''#jieba.load_userdict('simhei.ttf')seg=jieba.lcut(text)return seg
def stopwordslist(file_path):'''创建停用词表参数 file_path:停用词文本路径return:停用词list'''# f= open(file_path, 'r') # my_data = [i.strip('\n') for i in f]stopwords= [line.strip() for line in open(file_path,encoding='UTF-8').readline()]return stopwords
# file_path=r'/home/aistudio/stopwords/中文停用词表.txt'
# list=stopwordslist(file_path)
# print(list)
def movestopwords(sentence, stopwords, counts):'''去除停用词,统计词频参数 file_path:停用词文本路径 stopwords:停用词list counts: 词频统计结果return:None'''out = [ ]for word in sentence:if word not in stopwords:if len(word) !=1:counts[word]=counts.get(word,0)+1return None
def drawcounts(counts, num):'''绘制词频统计表参数 counts: 词频统计结果 num:绘制topNreturn:none'''x_aixs=[]y_aixs=[]c_order=sorted(counts.items(), key=lambda x:x[1],reverse=True)for c in c_order[:num]:x_aixs.append(c[0])y_aixs.append(c[1])matplotlib.rcParams['font.sans-serif']=['SimHei']matplotlib.rcParams['axes.unicode_minus']=Falseplt.bar(x_aixs, y_aixs)plt.title('词频统计结果')plt.show()
def drawcloud(word_f):'''根据词频绘制词云图参数 word_f:统计出的词频结果return:none'''cloud_mask=np.array(Image.open('多啦A梦.jpg'))st=set(['东西', '这是'])wc=WordCloud(background_color='white',mask=cloud_mask,max_words=150,font_path='simhei.ttf',min_font_size=10,max_font_size=100,width=400,relative_scaling=0.3,stopwords=st)wc.fit_words(word_f)wc.to_file('pic.png')
def text_detection():'''使用hub对评论进行内容分析return:分析结果'''porn_detection_lstm=hub.Module(name='porn_detection_lstm')f=open('aqy.txt', 'r', encoding='utf-8')for line in f:if len(line.strip())==1:continueelse:test_text.append(line)f.close()input_dict={'text':test_text}results=porn_detection_lstm.detection(data=input_dict,use_gpu=True,batch_size=1)print(results)for index, item in enumerate(results):if item['porn_detection_key'] =='porn':if item['porn_probs'] >0.80:print(item['text'],':', item['porn_probs'])
#评论是多分页的,得多次请求爱奇艺的评论接口才能获取多页评论,有些评论含有表情、特殊字符之类的
#num 是页数,一页10条评论,假如爬取1000条评论,设置num=100
if __name__ == '__main__':num=120lastId='0'arr=[]with open('aqy.txt', 'a', encoding='utf-8') as f:for i in range(num):lastId=saveMovieInfoToFile(lastId, arr)time.sleep(0.5)for item in arr:item=clear_special_char(item)if item.strip()!='':try:f.write(item+'\n')except  e:print('含有特殊字符')print("共获取评论:", len(arr))f=open('aqy.txt', 'r', encoding='utf-8')counts={}for line in f:words=fenci(line)stopwords=stopwordslist(r'stopwords.txt')movestopwords(words, stopwords, counts)drawcounts(counts, 10)drawcloud(counts)f.close()file_path='aqy.txt'test_text=[]#text_detection(test_text, file_path)

评论爬取结果生成图

生成可视化图型

生成词云:

display(Image.open('pic.png')) #显示生成的词云图像

所用词云底图为


在词云的图片设置方法,有兴趣的小伙伴可以去Fork一下链接: link.

百度深度学习paddlepaddle7日打卡——Python小白逆袭大神学习心得相关推荐

  1. python小白逆袭大神课程心得_python小白逆袭大神(深度学习7日训练营)——心得体会...

    使用过程及心得 百度飞桨(PaddlePaddle)是国内唯一功能完备的开源深度学习平台,自Paddle Fluid v1.0发布以来,飞桨陆续在开发.训练和部署全流程上进行全方面的升级. 1.在这次 ...

  2. python小白逆袭大神课程心得_Python小白逆袭大神学习心得

    学习内容 先介绍一下深度学习与Python的关系吧,Python中最重要的就是神经网络系统,它是Al实现的重要手段,而深度学习算法是用来实现神经网络的,当然了,这是老师上课讲的. 我们在这七天里大致学 ...

  3. 【百度训练营】python小白逆袭大神 day2心得

    训练营第二天继续学习了python的基础知识,那个抓取图片的作业,对我来说还是有一定难度的,主要是beautifulsoup库第一次用,选择规则不太熟悉.一通baidu之后,总算完成了. 另外,对非计 ...

  4. 百度飞桨深度学习Python小白逆袭大神7日结营心得

    很有幸参加了百度飞桨的Python小白逆袭大神7天打卡营.七天的学习已经接近了尾声.现在回顾一下这次的课程,收获颇丰.相信很多参加的学员都感受颇丰,从小白入门到自主大作业完成,我们不仅了解了深度学习的 ...

  5. python画饼图_百度飞桨PaddlePaddle之[Python小白逆袭大神]7天训练营

    第三次参加百度的7天训练营了 这次参加的主题是[Python小白逆袭大神],不过你别看是小白逆势...除非你一开始参加就逆袭完,不然你真的是python小白,这个课程还是有难难度的. 说一下个训练营的 ...

  6. 我在百度Python小白逆袭大神课程中“打怪”欢乐之旅

          本文描述了作者在参加百度Python小白逆袭大神课程一些亲身经历,从开始的半信半疑,到最后坚定的革命信念,给没有参加过百度课程的同学一点参考,文中有高质量的数据分析.pyecharts动态 ...

  7. Python小白逆袭大神-结营心得-alading

    Python小白逆袭大神-结营心得 赶在五一前结束的Python小白逆袭大神7天打卡营结束了,经过了7天的练习,我觉得收获还是很多的.经过整理总结,进行分享. 1. 本期培训重点 本期集训营主要是一些 ...

  8. python小白逆袭大神_python小白逆天(3),Python,小白逆袭,大神,三

    Python小白逆袭大神 作业三 作业: 对<青春有你2>对选手体重分布进行可视化,绘制饼状图 这个作业是根据第二天爬取获得的json文件进行数据的处理课可视化. with open('d ...

  9. 百度飞桨《青春有你2》Python小白逆袭大神活动总结与感悟

    在学校老师的推荐下得知这个训练营的活动,有幸参与其中,学到了很多设计上的思路.尤其是最后一天的大作业,初上手时没有头绪,仔细分析过后,根据前面几天的内容发现自己其实可以把它进行逐步实现.最后在自己的代 ...

最新文章

  1. 性能压测服务器502报错,一种交易系统的性能测试方法及相关服务器
  2. 适合写python的电脑_这篇写给想选计算机专业的学弟学妹们
  3. fastjson判空_fastjson JSON 对象为空保留null
  4. python编程入门经典教程-python编程入门经典
  5. 爬虫_python3_requests_2
  6. mysql添加两种数据类型_MySQL入门(二) 数据库数据类型详解
  7. 1192 约瑟夫问题(1)
  8. new一个对象的过程
  9. USB学习笔记连载(十五):USB固件更新以及安装驱动
  10. 11个审查Linux是否被入侵的方法
  11. 网络教学的即时通讯视频
  12. java 错误: 无法将类 Customer中的构造器 Customer应用到给定类型
  13. cpu控制器如何工作
  14. 沃尔玛跨境智星的介绍与用法
  15. C# 实现对PPT插入、编辑、删除表格
  16. 提示猜数字范围python_Python 猜数字游戏
  17. ubuntu18截图快捷键和其他快捷键设置
  18. 下载较旧版本的VS visual studio
  19. ArcGIS官方帮助文档和教程整理
  20. 【kafka源码】/log_dir_event_notification的LogDir脱机事件通知

热门文章

  1. 云服务器备份好怎么用,云服务器快照备份和完全备份介绍
  2. 青蛙和癞蛤蟆有什么区别
  3. Python工厂模式一
  4. 数字+文化 跨界融合为文化产业注入新活力
  5. Linux实战教学笔记19:Linux相关网络知识梳理
  6. 实战入门 faiss 搜索bert 最邻近句子:docker CPU镜像开箱即用,无需额外安装下载...
  7. HTML5中新增的音频标签是,HTML5新增的音频标签、视频标签
  8. 社区新知 | MindSpore社区和Pair团队携手共进,高效节约医生手动勾画70%的时间成本
  9. 河南省小学计算机教室配备目录,河南省教育厅关于印发《河南省中小学2021年春季电教教材推荐目录》的通知...
  10. Idea常用快捷键(常用)