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

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

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

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


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

【Day1-Python基础练习】

3099537e8f38a7bb821d3719c308ca4b.png

3c658188948dc77e8f73ba7973f56233.png

这个感觉那里都有这个练习题。。。。之前学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)

bacb2333d197554a6f66be2774706426.png

这个对真的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来定位标签。

863b6cda5c90ca31b30ce7eca3e2bdaa.png
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)

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

2158907151caa9f58dae3bd68ede1ecf.png

9f1bc314920d9d5b96ea04ee549dd94f.png

网址后面多了这个一块

ed88bce2a3fd254adf2b34ddbf901599.png

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

6e91e2fd3b15fd01ce0f5efc9a00e38e.png

完毕。

【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()

d9fe6044b3531dc77715be77cbed2491.png

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

23be26d3ef7260e4e1832e497264d682.png

这天作业有点人工智能的味道。因为是做图像分类,把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%都是这个问题。这里展示预测结果

9eaf86cb0147c9020a5b15d806877f64.png

【Day5-综合大作业】

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

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

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

9597b5e0dea2317679ff4cfcbf2b03ee.png

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

d5d21620da9f49fade30dbafff6ef4a2.png

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

7eda2b27745bf34b48691bd1d1e16ee0.png

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

d5d21620da9f49fade30dbafff6ef4a2.png

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

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( )

259e9be77719b027fcaffca0ffbcc7cd.png

然后就制作词云,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')

6186a7897e4d548d0b4af30b18a81f70.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的时候稍微搞了一下都忘记。 通过这个课可以让我重温和学习爬虫,特别爬动态的网站。我都是现做现学。 多谢这次训练营。多谢各位老师,多谢群里面的小伙伴。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

潍坊学院的计算机类怎么样,潍坊学院教育技术学专业怎么样?有知道的麻烦说下,谢谢!...

潍坊学院教育技术学专业怎么样&#xff1f;有知道的麻烦说下&#xff0c;谢谢&#xff01;以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;潍坊学院教育技术学专业怎么样&#xff1f;有知道的…

c++ class struct同名_C/C++面向对象编程之封装

点击“蓝字”关注我们吧前言&#xff1a;何为面向过程&#xff1a;面向过程&#xff0c;本质是“顺序&#xff0c;循环&#xff0c;分支” 面向过程开发&#xff0c;就像是总有人问你要后续的计划一样&#xff0c;下一步做什么&#xff0c;再下一步做什么&#xff0c;意外、事物…

LeetCode 1718. 构建字典序最大的可行序列(贪心+回溯)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;请你找到满足下面条件的一个序列&#xff1a; 整数 1 在序列中只出现一次。2 到 n 之间每个整数都恰好出现两次。对于每个 2 到 n 之间的整数 i &#xff0c;两个 i 之间出现的距离恰好为 i 。 序列里面两个数 a[…

static函数

// 以下摘自网络 静态函数在函数的返回类型前加上关键字static&#xff0c;函数就被定义成为静态函数。函数的定义和声明默认情况下是extern的&#xff0c;但静态函数只是在声明他的文件当中可见&#xff0c;不能被其他文件所用。定义静态函数的好处&#xff1a;<1> 其他…

操作系统是计算机的什么管理者,操作系统是计算机资源的管理者

由计算机提供的、因应用程序的存在和运行所消耗或占用的物质条件&#xff0c;叫做计算机的资 源&#xff0c;例如处理器的时间、内存空间、外部设各等。为了有效地利用计算机的各种资源&#xff0c;操作系统 必须为用户承担起对计算机资源的管理任务。例如&#xff0c;为了使应…

python文件流读取二进制_Python使用web.py从POST请求中提取二进制文件

I am developing an API that allows outside clients to send a binary file which will be processed. my web.data() is a string and the function I am calling requires a binary. How do I get it into the correct format? Maybe I have the incorrect Headers? how …

LeetCode 1828. 统计一个圆中点的数目

文章目录1. 题目2. 解题1. 题目 给你一个数组 points &#xff0c;其中 points[i] [xi, yi] &#xff0c;表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。 同时给你一个数组 queries &#xff0c;其中 queries[j] [xj, yj, rj] &#xff0c;表示一个圆心在…

LeetCode 1829. 每个查询的最大异或值(前缀异或 + 位运算)

文章目录1. 题目2. 解题1. 题目 给你一个 有序 数组 nums &#xff0c;它由 n 个非负整数组成&#xff0c;同时给你一个整数 maximumBit 。你需要执行以下查询 n 次&#xff1a; 找到一个非负整数 k < 2^maximumBit &#xff0c;使得 nums[0] XOR nums[1] XOR ... XOR num…

python的运行环境_python-运行环境配置-1

Linux下安装Python3.6和第三方库 如果本机安装了python2&#xff0c;尽量不要管他&#xff0c;使用python3运行python脚本就好&#xff0c;因为可能有程序依赖目前的python2环境&#xff0c; 比如yum&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 不要动现有的…

计算机主板最常见的问题,计算机主板功能 电脑实用技巧解决常见问题

电脑实用技巧解决常见问题1.解决问题 插电即开机问题现象&#xff1a;有些朋友有关机后断开电源板电源的习惯&#xff0c;可是却常常被一个问题困扰&#xff0c;就是电源板一通电&#xff0c;计算机就自动开机了&#xff0c;Power键形同虚设。解决问题&#xff1a;有些主板在BI…

zeal刷新不出来_饥荒:游戏中的这些事物都是无中生有,几乎可以无限制刷新!...

在饥荒这款经典的生存类游戏中&#xff0c;其事物的“刷新”和许多其他的生存游戏不太一样&#xff0c;有些生存游戏的事物刷新是定时定量的&#xff0c;而饥荒则不完全&#xff0c;就拿牛群来形容&#xff0c;他们必须要有多个成年的牛进行繁殖才会出现新的牛&#xff0c;而像…

c盘清理代码_拒接卡顿,从c盘减负、系统修复及网络加速做起!奥利~~~

你是否有过系统卡顿&#xff0c;C盘饱满&#xff1f;你是否有过蓝屏、闪退&#xff1f;你是否有过网络爆卡&#xff1f;今天&#xff0c;他来了&#xff0c;一篇文章教会你清理C盘、修复系统、网络加速&#xff01;&#xff01;&#xff01;首先&#xff0c;按下winr键&#xf…

LeetCode 1833. 雪糕的最大数量(贪心)

文章目录1. 题目2. 解题1. 题目 夏日炎炎&#xff0c;小男孩 Tony 想买一些雪糕消消暑。 商店中新到 n 支雪糕&#xff0c;用长度为 n 的数组 costs 表示雪糕的定价&#xff0c;其中 costs[i] 表示第 i 支雪糕的现金价格。 Tony 一共有 coins 现金可以用于消费&#xff0c;他…

用递归计算一个数字每一位相加的结果。_leetcode 2 两数相加(c++)

两种解法&#xff0c;第一种是在原有的两个链表中选择更长的那个作为结果返回&#xff0c;虽然节约了空间&#xff0c;但是增加了时间复杂度&#xff0c;而且没有用到如何设置链表的增加与删除&#xff0c;第二种看起来清爽很多&#xff0c;逻辑也清晰。### 题目给出两个非空的…

LeetCode 1834. 单线程 CPU(排序 + 优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个二维数组 tasks &#xff0c;用于表示 n​​​​​​ 项从 0 到 n - 1 编号的任务。 其中 tasks[i] [enqueueTimei, processingTimei] 意味着第 i​​​​​​​​​​ 项任务将会于 enqueueTimei 时进入任务队列&#xff0c;需要 pro…

服务器支持磁盘阵列,服务器磁盘阵列、RAID级别的阐述

磁盘阵列磁盘阵列(Redundant Arrays of Independent Disks&#xff0c;RAID)&#xff0c;有“独立磁盘构成的具有冗余能力的阵列”之意。磁盘阵列是由很多价格较便宜的磁盘&#xff0c;组合成一个容量巨大的磁盘组&#xff0c;利用个别磁盘提供数据所产生加成效果提升整个磁盘系…

LeetCode 1835. 所有数对按位与结果的异或和(位运算 (ab)^(ac) = a(b^c) )

文章目录1. 题目2. 解题1. 题目 列表的 异或和&#xff08;XOR sum&#xff09;指对所有元素进行按位 XOR 运算的结果。 如果列表中仅有一个元素&#xff0c;那么其 异或和 就等于该元素。 例如&#xff0c;[1,2,3,4] 的 异或和 等于 1 XOR 2 XOR 3 XOR 4 4 &#xff0c;而 …

python入门基础系列_03python—9个基础常识-python小白入门系列

《python小白入门系列教程》 专栏 • 第03篇 文 | xc_718 深度好文&#xff1a;1828字 | 4分钟阅读 ​ 1. 注释 1&#xff09;单行注释&#xff1a;****# #注释内容 print(123) #123 print(abc) #abc print("abc") #abc **2&#xff09;多行注释&#xff1a; 或 **&q…

css英文左右对齐,中文英文左右padding一致两端对齐实现_js

先看下图&#xff1a;就是一个定宽的容器&#xff0c;左右padding值20像素&#xff0c;结果输入一段文字后(有中文也有英文字符)&#xff0c;会发现右侧根本就不对齐&#xff0c;有些地方距离右侧的空白大小也不是20像素&#xff0c;感觉不和谐&#xff0c;设计师就希望排列能够…

python判断字符类型编程_Python检测数据类型的方法总结

我们在用python进行程序开发的时候&#xff0c;很多时候我们需要检测一下当前的变量的数据类型。比如需要在使用字符串操作函数之前先检测一下当前变量是否是字符串。下面小编给大家分享一下在python中如何检测数据类型 首先我们打开CMD控制台&#xff0c;进入到python环境&…