第三次参加百度的7天训练营了

这次参加的主题是【Python小白逆袭大神】,不过你别看是小白逆势。。。除非你一开始参加就逆袭完,不然你真的是python小白,这个课程还是有难难度的。

说一下个训练营的特点版。这个营从python一些基础练习-->数据可视化-->爬虫--->综合练习。


我从自己在每天做作业的角度讲一下自己心得,和一些自己的坑。

【Day1-Python基础练习】

这个感觉那里都有这个练习题。。。。之前学C语言也有这个题。阴魂不散啊。还真的不知道生成乘法口诀有什么用!!!!好吧,继续做作业。这题作业无非就考【格式打印】(不是考你会不会9*9的乘法口诀。。。)注意换行的时候print()这个函数自带一个换行符,如果不留意就每一行都有隔了两个换行符。还有注意字符输出对齐问题。就这样。

def table():#在这里写下您的乘法口诀表代码吧!for i in range(1,10):result = ''for j in range(1,i+1):result += "{}*{}={:<2d}  ".format(j, i, j*i)print(result)

这个对真的python小白来说就是考虑怎样一个循环套一个循环,然后找出目标文件。

不过知道python的大名鼎鼎的os库。就知道一个函数os.walk(),不用想。 就用它。不要自己重复造轮子。

import os
#待搜索的目录路径
path = "Day1-homework"
#待搜索的名称
filename = "2020"
#定义保存结果的数组
result = []
def findfiles():#在这里写下您的查找文件代码吧!global pathindex = 1for root, subs, files in os.walk(path):for f in files:if filename in f:result.append([index, os.path.join(root, f)])index += 1for group in result:print(group)

【Day2-《青春有你2》选手信息爬取】

这天的作业就是让你尝试做一只小小的爬虫。让你感受python的实际用途。不在是打印9*9的乘法口诀,哈哈哈哈哈哈。作为这个作业,你就可以爬其他网站的小姐姐,你懂得哈哈哈哈。这里最重要的就是requests和bs4库了,爬虫利器。

import requests
from bs4 import BeautifulSoup
#重点就是知道这个库的基本使用
#关键用法就这三行
response = requests.get(url,headers=headers)
soup = BeautifulSoup(response.text,'lxml')
tables = soup.find_all('table',{'class':'table-view log-set-param'})

不过这里说一下,如果懂一些html,js那爬起来就顺手很多。因为爬之前要分析网页的构成成分。在游览器按【F12】吧,或者点击图片【右键检查元素】吧。如图看到对应元素所在的标签。获取class或者id来定位标签。

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)#将一段文档传入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)

爬取图片也是这用步骤,只是多了一步保存图片的代码,不过这里有个小坑,就是爬取图册的连接和真正打开图册的链接不一样了!这点要注意。看图

网址后面多了这个一块

不加这块是不能正常爬取图册中每张图片的真正图片img地址

完毕。

【Day3-《青春有你2》选手数据分析】

这节课的作业就是让你熟悉数据可视化。画直方图,饼图等等。

作业已经给出选手的信息的json文件。就是学习怎样用matplotlib来画饼图而已。这个在网上pie接口和一些参数的调节,就可以了。没什么难度。注意一点就是显示中文问题。这个也是小坑

# 下载中文字体
!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
还有下面这一句。
# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体

核心代码如下,参数调节就百度一下就可以。

df = pd.read_json('data/data31557/20200422.json')
weight = df['weight']
def split_(x):value = x.split('kg')[0]return float(value)
df['weight_value'] = weight.apply(lambda x:split_( x) )
df['weight_value'] = pd.cut(df['weight_value'], [0,45,50,55,200])
counts = pd.value_counts(df['weight_value'])
values = counts.values
labels = ['<=45kg', '45~50kg','50~55kg','>55kg']
explode = (0,0.1,0,0)
# 画图
# 设置显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.figure(figsize=(8,8))
patches,l_text,p_text = plt.pie(x=values, labels=labels, explode=explode, autopct='%1.1f%%',shadow=True, startangle=90, )
for t in l_text:t.set_size(25)
for t in p_text:t.set_size(25)
plt.axis('equal')
plt.title('''《青春有你2》选手体重分布''',fontsize = 24,y=-0.1)
plt.show()

【Day4-《青春有你2》选手识别】

这天作业有点人工智能的味道。因为是做图像分类,把5个小姐姐的图片准确预测名字出来(如果没有看过青春有你,估计你会脸盲。因为有一步就是要爬取对应的人的图片。作为训练集。网上一搜你发现每个人都差不多样子。。。。好难清洗数据。。。。。。。。。。。。)

爬取图片这一步我没有做。。。。。我是用群里面的大神爬取的图片。大概500张。做深度学习最重要的就是数据,如果你的数据数量不够好,和不够多的话。做出来的效果会非常差的。或者容易出现过拟合。还有数据中,每一类的数据数量不均衡也不行。

所有我在500张的图片上做了数据增强,每一张都用了水平翻转来增加数据。

因为用了飞桨的PaddleHub工具。主要就是制作标签和训练数据路径的txt文档。

import random
name = {'anqi':3, 'yushuxin':0, 'xujiaqi':1, 'wangchengxuan':4, 'zhaoxiaotang':2}
import os
train_img_path = list()
val_img_path = list()
for d in os.listdir('dataset'):if d in name.keys():img_path = list()index = name[d]for file in os.listdir(os.path.join('dataset',d)):if file != '.ipynb_checkpoints':string = d + '/'+ file+ ' ' + str(index) +'n'img_path.append(string)length = len(img_path)val_img_list = random.sample(img_path, int(len(img_path)*0.2)) for i in img_path:if i in val_img_list:val_img_path.append(i)else :train_img_path.append(i)
random.shuffle(train_img_path)
random.shuffle(val_img_path)
#print(train_img_path)
with open('dataset/train_list.txt', 'w') as f:for l in train_img_path:f.write(l)with open('dataset/validate_list.txt', 'w') as f:for l in val_img_path:f.write(l)

其他的就交给paddlehub就可以了。如果训练期间有什么报错,一定要考虑就是你的txt文档制作有问题,就是图片路径问题,就是标签问题。99.99999%都是这个问题。这里展示预测结果

【Day5-综合大作业】

顾名思义,这天作业,是大作业。。因为你要结合之前所学习的知识。例如用爬虫来爬取爱奇艺青春有你2视频下的评论,再要做分词,词频可视化,词云可视化。

这里最重要的就是爬取评论,这次爬取的评论的动态网页。动态不像之前的静态爬取。可以直接获取对应的html标签。动态它加载的是js文件。这样就要通过特殊工具来处理了。

首先利用Fiddler来抓包,观察评论在动态加载的时候网站是怎样变换的。

通过软件发现每次加载评论都会出现一个新js文件。不用说了,点看看,明显能看到里面的内容就评论

好了,完成一半了,不过这里的评论只是显示20条,下一次的20次又怎样得去。好,找规律,分部加载三次评论,看三次评论的网址是怎样变化的

可以发现三个网址不一样的地方就是last_id=的不同。还有网址最后面的网址那一串不同。到这一步肯定想能不能通过上一个js文件中找到下一个js文件的id。

一找就找到了,这样就好办,那后面那串数字呢,发现是找不到的,那怎么办。试试把它删除掉,再输入到游览器,发现完全不影响。那直接删除掉罗。所以现在分析后获取网址。正常安爬取就可以了

def get_content(lastId):base_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&hot_size=0&last_id='last_url = '&page=&page_size=20&types=time&callback=jsonp'url = base_url + str(lastId) + last_urlhtml=urllib.request.urlopen(url).read().decode("utf-8","ignore")    return html#从源码中获取评论的数据
def get_comment(html):    pat='"content":"(.*?)"'    rst = re.compile(pat,re.S).findall(html)    return rst#获取下个id
def get_id(html):pat = '"id":"(.*?)"'rst = re.compile(pat,re.S).findall(html)return rst
if __name__ == "__main__":total = 0first_id = 240947941221html=get_content(first_id)with open('comment.txt','w') as f:while True:commentlist=get_comment(html)        for j in range(1,len(commentlist)):            f.write(str(commentlist[j]) + 'n') total +=1#获取下一轮刷新页ID if total > 1100:break         lastId=get_id(html)[-1]       html=get_content(lastId)print("【完成】 总共爬取了{}条评论".format(total))

到后面就去掉某些评论的脏数据。例如表情等。用正则化去除。

#去除文本中特殊字符
def clear_special_char(content):'''正则处理特殊字符参数 content:原文本return: 清除后的文本'''s = re.sub(r"</?(.+?)>|&nbsp;|t/r*",'', content)s = re.sub(r"n",'', s)s = re.sub(r"*", "*", s)s = re.sub('[^u4E00-u9FA5A-Za-z0-9 ]','',s)a = re.sub('[001002003004005006007x08x09x0ax0bx0cx0dx0ex0fx10x11x12x13x14x15x16x17x18x19x1a]+', '', s)s = re.sub('{a—zA-Z}','',s)s = re.sub('^d+(.d+)?$','',s)return s

到分词和停用词,用jieba这个模块。我也是第一次用,百度了一下

def fenci(text):'''利用jieba进行分词参数 text:需要分词的句子或文本return:分词结果'''jieba.load_userdict("add_words.txt")seg = jieba.lcut(text,cut_all=False)return segdef stopwordslist(filepath):'''创建停用词表参数 file_path:停用词文本路径return:停用词list'''stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]return stopwords

然后根据词频制作柱状图

def drawcounts(counts,num):'''绘制词频统计表参数 counts: 词频统计结果 num:绘制topNreturn:none'''x_aixs = []y_aixs = []c_order = sorted(counts.items(), key=lambda x:x[1],reverse=True)#print(c_order)#通过高频词的数量进行排序for c in c_order[:num]:x_aixs.append(c[0])y_aixs.append(c[1])matplotlib.rcParams['font.family'] = ['SimHei'] # 指定默认字体matplotlib.rcParams['axes.unicode_minus'] = False plt.figure(figsize=(12,8))plt.bar(x_aixs, y_aixs)plt.title ( '词频统计')plt.show( )

然后就制作词云,wordcloud的库的参数怎样调。。。百度就可以。。。。

def drawcloud(word_f):'''根据词频绘制词云图参数 word_f:统计出的词频结果return:none'''cloud_mask = np.array(Image.open('cloud.png'))st = set(['东西','这是'])wc = WordCloud(font_path='fonts/simhei.ttf',  # 设置字体mask=cloud_mask,background_color="white",  # 背景颜色max_words=200,  # 词云显示的最大词数max_font_size=80,  # 字体最大值min_font_size=10, #字体最小值random_state=42, #随机数collocations=False, #避免重复单词stopwords=st,relative_scaling=0.3,width=400,margin=10, #图像宽高,字间距,需要配合下面的plt.figure(dpi=xx)放缩才有效)wc.fit_words(word_f)wc.to_file('pic.png')

最后就是用paddlehub来内容审核。这个直接查看官方文档。没啥说的。。。。。。

def text_detection(text,file_path):'''使用hub对评论进行内容分析return:分析结果'''porn_detection_lstm = hub.Module(name="porn_detection_lstm")test_text = list()with open('chean_comment.txt','r') as f:for line in f:if len(line) == 1:continueelse:test_text.append(line)input_dict = {"text": test_text}results = porn_detection_lstm.detection(data=input_dict,use_gpu=True, batch_size=1)for index, result in enumerate(results):if result['porn_detection_key'] == 'porn':print(result['text'], ":", result['porn_probs'])

好了。经历7天的训练营,终于结束。 之前一直关注深度学习。爬虫和词云只是之前在学习python的时候稍微搞了一下都忘记。 通过这个课可以让我重温和学习爬虫,特别爬动态的网站。我都是现做现学。 多谢这次训练营。多谢各位老师,多谢群里面的小伙伴。

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

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

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

  2. 百度飞桨小白逆袭大神被“虐”过程大公开--青春有你2 数据分析

    不知道大家有没有关注最近屡次上微博热搜的青春有你2,你是否被虞书欣这个小作精嗲到,或者是在磕大鱼海棠这对甜甜的cp,脑中是否有"蛋黄的长裙,蓬松的头发"魔性环绕,觉得自己的rap水 ...

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

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

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

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

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

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

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

    百度深度学习paddlepaddle7日打卡--Python小白逆袭大神学习心得 7日学习总结 第一天作业 第二天作业 第三天作业 第四天作业 第五天作业 7日学习总结 通过这7日打卡课程的学习,从小 ...

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

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

  8. 深度学习入门之Python小白逆袭大神系列(三)—深度学习常用Python库

    深度学习常用Python库介绍 目录 深度学习常用Python库介绍 简介 Numpy库 padas库 PIL库 Matplotlib库 简介 Python被大量应用在数据挖掘和深度学习领域,其中使用 ...

  9. 百度python小白逆袭大神系列课程day5——爱奇艺《青你2》评论爬取并分析

    day5-综合大作业写作分享 作业要求说明 完成作业所需要的准备 完整代码展示及说明 ==最终结果展示== ==所用到的文件== 可能遇到的问题(重点) day5-综合大作业写作分享 作业要求说明 完 ...

最新文章

  1. VTK:PolyData之GetPoint
  2. [BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】
  3. instagram架构_如何创建像Instagram这样的照片共享应用程序:基本知识。
  4. 如何展开Linux Memory Management学习?
  5. ES6 中的 Symbol 是什么?
  6. matlab矩阵运算相关函数
  7. 记git升级版本之后出现fatal: NullReferenceException encountered问题
  8. Linux下连接SQL Server
  9. tomcat,httpd 日志格式说明
  10. linux通过usb给windows,如何从Linux创建Windows USB安装程序 | MOS86
  11. SVN:下载、安装和中文设置
  12. win10计算机ser,win10 ch341ser.inf安装失败如何处理_win10无法安装ch341ser.inf修复方法...
  13. 大脑升维:人工智能浪潮下的适者生存之道
  14. 做跨境电商一年买了房: 未来五年的风口行业,90%的人都不知道 !
  15. RTMP推流摄像机联合EasyCVR安防视频云服务平台助力智能楼宇的建设
  16. 我设计开发的第一个产品发布了,微信小程序“集美装修效果图“
  17. 一、Composer下载安装
  18. 漏洞挖掘时SQL注入漏洞和XSS漏洞需注意的关键字
  19. mysql数据库表插入数据
  20. 第二十二讲:自尊与自我实现 第二十三讲:总结(完)

热门文章

  1. 24安装失败 spss win10_教你win10系统显卡驱动安装失败的解决方法「系统天地」
  2. JSONObject,JSONArray,对象,数组互相转化
  3. UIPickerView基本使用
  4. Python实现比较两个列表(list)范围
  5. 学习大数据看门的几本书
  6. android 75 新闻列表页面
  7. Android启示录——开始Android旅途
  8. pythontuple([1、2、3)_Python 语句\nprint(tuple([1,2,3]))\n的运行结果是
  9. Linux C高级编程——网络编程之包裹函数
  10. sqoop从mysql导入hdfs_3.使用sqoop从mysql 导入数据到hdfs