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


      本文描述了作者在参加百度Python小白逆袭大神课程一些亲身经历,从开始的半信半疑,到最后坚定的革命信念,给没有参加过百度课程的同学一点参考,文中有高质量的数据分析、pyecharts动态图,深度学习相关代码分享,图文并茂保证不让你失望。

目录

    • Day1:Python基础练习
    • Day2-《青春有你2》选手信息爬取
    • Day3-《青春有你2》选手数据分析
    • Day4-《青春有你2》选手识别
    • Day5-综合大作业


      误打误撞点进了“百度飞桨小白逆袭大神 课程”,加了学习微信群,感觉进了贼窝似的,哪里有这么好的事情,上课不收钱,还有奖品,我信你个鬼呀!!里面准是一群托,打算哄骗我让我报班学习的吧,告诉你们不会再上你们的当了,因为我是已经上过当了!!!

Day1:Python基础练习

      居然能按时开课,群里同学叽叽喳喳,老师哔哩吧啦,班主任带货,一片繁荣景象!在我还没确认里面有什么阴谋诡计之前我是不会出声的。

      不过学习我是认真的,走过路过不要错过,学一点是一点,毕竟人家是大厂。

       作业一:输出 9*9 乘法口诀表(注意格式)。

      来吧,先来给老师个下马威,别以为我读得书少,乘法口诀前几排我还是记得住的。

我也就用一行代码概括了,老师要惊呆了吧,后来发现好多同学就这么写的,老师估计看了也就这么 噗嗤 的一下吧。

def table():
    #在这里写下您的乘法口诀表代码吧!
   print('\n'.join(["\t".join([f'{i}*{j}={i * j:<2}' for i in range(1, j + 1)]) for j in range(1,10)]))
    #主要使用jion字符函数来连接列表里的元素,这样就不掉头发了!
if __name__ == '__main__':
    table()

       - 作业二:查找特定名称文件

import os
#待搜索的目录路径
path = 'Day1-homework'
#待搜索的名称
filename = "2020"
#定义保存结果的数组
result = []
n = 1
def findfiles(path):
    global n
    for item in os.listdir(path):
        if os.path.isdir(os.path.join(path, item)):
            findfiles(os.path.join(path, item))
        else:
            if filename in item:
                result.append('['+str(n)+','+"'"+os.path.join(path,item)+"'"+']')
                print('['+str(n)+','+"'"+os.path.join(path,item)+"'"+']')
                n += 1
    return result
if __name__ == '__main__':
findfiles(path)

      没有太多亮点,里面有个套中套,所谓高大上的递归,也就这么肥事啦。后来知道 用os.walk可以一步到位,你更值得拥有。

      两题下来,还没玩够。
我给老师恶作剧一下,把作业空间里的txt都写上一句话!

import os
#待搜索的目录路径
path = os.getcwd()
#待搜索的名称
filename = "2020"
#定义保存结果的数组
n = 1
def findnwrite(path):
    global n
    for item in os.listdir(path):
        if os.path.isdir(os.path.join(path, item)):
            findnwrite(os.path.join(path, item))
        else:
            if os.path.join(path,item).endswith('.txt'):
                with open (os.path.join(path,item),'a+') as f:
                    f.write('人生苦短,我用python')
                    n += 1          
    return n
findnwrite(path)

  • 最后再补一刀:

改作业可能是个美女老师呢,我给她送一朵花,让她流下感动的泪水,或许还给加到101分呢。后来发现改作业都是男滴助教,白送了。。。。

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator
import matplotlib.pyplot as plt
import numpy as np
print('送给您一朵花花!')

fig = plt.figure(figsize=(12, 9),dpi= 100)
ax = fig.gca(projection='3d')
[x, t] = np.meshgrid(np.array(range(26))/26.0, np.arange(0, 555.5, 0.5)/555*16*np.pi-2*np.pi)
p = (np.pi/2)*np.exp(-t/(10*np.pi))
u = 1-(1-np.mod(3.16*t, 2*np.pi)/np.pi)**4/2
y = 2*(x**2-x)**2*np.sin(p)
r = u*(x*np.sin(p)+y*np.cos(p))
surf = ax.plot_surface(r*np.cos(t), r*np.sin(t), u*(x*np.cos(p)-y*np.sin(p)),rstride=1, cstride=1, cmap=cm.gist_rainbow_r, linewidth=0, antialiased=True)
plt.show()

别问我为啥那么优秀,我是去抄的,但是避免被别人告我,我也是小改动了一下几个参数,不信你去搜,保证我们不一样。
我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第1张图片


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

1.完成《青春有你2》选手图片爬取,将爬取图片进行保存,保证代码正常运行> 。
2.打印爬取的所有图片的绝对路径,以及爬取的图片总数,此部分已经给出代码。请在提交前,一定要保证有打印结果。

      哎呀!这不是我喜欢的题目,听说前一阵子,有人玩爬虫把自己也搭进去了,这种鸡鸣狗盗的伎俩,我是抱有一定的态度的。(其实就没学过不懂,但是也要完成作业呀!)

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中!!!
        r = requests.get(link,headers=headers)
        soup = BeautifulSoup(r.text,'lxml')
        get_url = 'https://baike.baidu.com' +soup.find_all('div',{
     'class':'summary-pic'})[0].find('a').get('href')
        r_1 = requests.get(get_url,headers=headers)
        soup_1 = BeautifulSoup(r_1.text,'lxml')
        pic_urls = []  

        get_img_list = soup_1.find_all('div',{
     'class':'pic-list'})[0].find_all('img')
        for pic in get_img_list:
            pic_url = pic.get('src')
            pic_urls.append(pic_url)    

        #!!!根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中!!!
        down_pic(name,pic_urls)

作业代码自己写的就这么多了,靓汤!(我不是抄的,我不是抄的,我不是抄的。。。。)

      我承认目前爬虫这方面相对比较弱,有点怂,后面有需要可以深入学习一下。
      要看小姐姐吗?我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第2张图片

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

要求:对《青春有你2》对选手体重分布进行可视化,绘制饼状图 就是画个饼那么简单嘛!

       给出了整理好的数据,表格里有选手的相关信息,身高、体重、星座等等,需要分析下然后作图。单纯完成作业是没问题,怎么才能玩出花来呢!?

  • 体重分级关键代码
df['weight']=df.weight.str[0:2].astype("int") #体重转化为整型
bins=[0,45,50,55,100]
labels=['<= 45Kg','45~50Kg','50~55Kg','>55Kg']
df['level'] = pd.cut(df['weight'], bins, labels=labels) #定制分级函数
grouped=df['weight'].groupby(df['level']).count().reset_index()#生成统计数据框
grouped.sort_values(by='weight',ascending= False, inplace= True) #原位排序
grouped

      精华所在:pd.cut(df['weight'], bins, labels=labels) ,pandas的cut函数,一招制敌完成重量分级,数据处理一共用了6行,到处闪亮着pandas 的光。
      老师讲解的时候的用了一串判断呀,循环呀,我露出狡黠的一笑。不过这个函数真的好用,在很多分级的情景都可以用上,兄弟记得去查查资料继续学习一下,改变的一生可能就是这一句:)

- 出图
      正正规规的样板作业,没毛病!

import matplotlib.pyplot as plt
fig = plt.figure(dpi=150)
explode=(0.1,0.1,0,0)
plt.pie(grouped.weight, explode=explode,labels=grouped.level,\
autopct='%1.1f%%',shadow=False, startangle=90,radius=1.5)
plt.axis('equal')
plt.legend(loc="upper right",fontsize=10,bbox_to_anchor=(1.1,1.05),borderaxespad=0.85)
plt.savefig("work/result/pie_result.jpg",dpi=200,bbox_inches='tight') 
plt.show()

我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第3张图片

      还好吧,调整了一下,显示完成固定动作。

后面我开始给老师送买一送三啦!老师让我做体重,我把星座分布也做了,老师又要感动了吧,我这个勤奋好学的光辉形象,要在老师的心里扎根了。

  • 星座分布图
constell=df['name'].groupby(df['constellation']).count().reset_index()
constell.sort_values(by='name',ascending= False, inplace= True)

fig = plt.figure(dpi=150)
explode=(0.1,0.1,0,0,0,0,0,0,0,0,0,0)
plt.pie(constell.name, explode=explode,labels=constell.constellation,\
autopct='%1.1f%%',shadow=True, startangle=90,radius=1.5)
plt.axis('equal') 
plt.legend(loc="right",fontsize=10,bbox_to_anchor=(1.2,0.5),borderaxespad=0.55)
plt.savefig("work/result/pie_result1.jpg",dpi=200,bbox_inches='tight')  
plt.show()

我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第4张图片

      没完还有,我把刚从隔壁疫情数据分析班学来的用pyecharts画的南丁格尔玫瑰风图的模板借了过来。美美哒!可是平台对动态图不友好,没显示出来,老师估计也没空看,3000人交作业,哪里忙得过来,大家可以造起来,饼图都适用,好看又不贵,带走!就是比较反人类,比较难懂,就改的Java的,什么是Java我也不懂,我听说的。

  • 南丁格尔玫瑰风图
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot

def p(grouped):
    v=grouped.level.tolist()
    d=[round(i/sum(grouped.weight)*100,2) for i in grouped.weight]
    c = (
        Pie(init_opts=opts.InitOpts(width='900px', height='600px',theme=ThemeType.WHITE))
# 添加数据,设置饼图的半径,是否展示成南丁格尔图
    .add("", [list(z) for z in zip(v, d)],
        radius=["20%", "80%"],
        center=["50%", "60%"],
        rosetype="area" )
  # 设置全局配置项
   .set_global_opts(title_opts=opts.TitleOpts(title='《青春有你2》选手体重分布',pos_left='center'),
                     legend_opts=opts.LegendOpts(is_show=True,type_="scroll",
                                                 pos_top= "20%",
                                                 pos_right="52%",
                                                 orient="vertical"))
# 设置系列配置项
  .set_series_opts(label_opts=opts.LabelOpts(is_show=True,
                                              position="inside", 
                                              font_size=12,
                                              formatter="{c}%",
                                              font_style="italic",
                                              font_weight="bold", 
                                              font_family="Microsoft YaHei" )
                  )
        )
    return c

# 生成html文档

p(grouped).render_notebook()

我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第5张图片
还有一张
我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第6张图片

更换了主题配色,感觉是不是有点Low呀,嗯是有点哈! 继续晚上老师讲故事,班主任带货,我努力工作,玩得还行!**

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

      使用经典的ResNet-50作为预训练模型识别分类青春有你小姐。

      题材挺好的,我也是为了看小姐姐来的!

-划重点

      那么我跟你说吧,这7天的课,最重要的就是这一节课,就是这里 深度学习的启蒙课,实现了一个深度学习的流程。当下多少人被深度学习吸引住了,有报道说,计算机要产生自主意识了,我们看过的科幻片在慢慢的变成现实。—第四工业革命 深度学习。

      老师没有打算给我们讲原理,讲数学,把模块都准备好了,就是让我们爽快的体验一把。
但是没有!爽快之前要付出辛勤的劳动才能体验爽快,5位小姐姐的图片要自己找,训练集、测试集、验证集的列表文件要自己建,这都是工作量呀!

图片太少识别不准确,图片增强还么学,来不及了。 上手段,其他工具完成了图片采集,我最终搜集了639张高清图片,有没比我多,有的话我们交流下,你是不是也是用我同款的工具。

这作业的另一难度在于材料的准备。封装好的迁移学习对 训练集、测试集、验证集的列表文件 要求比较高,一有点小问题,就是一长串的报错,急人呀!

不知道大家是怎么完成的,下面我们来看这一段

**“飞桨案例之海洋鱼类识别 ”**

      里面有这么一段,完成的工作内容就产生训练集、测试集、验证集的列表文件,用的是纯纯的python代码,用循环、判断写入列表文件,长太感人了! 感兴趣的感觉去学习下。

#总的图像数量
all_class_images = 0
#存放类别标签
class_label=0
# 设置要生成文件的路径
data_root_path="/home/aistudio/data/fish_image/fish_image"
#存储要写进test.txt和train.txt中的内容
trainer_list=[]
eval_list=[]
#读取每个类别,['fish_01', 'fish_02', 'fish_03']
for class_dir in class_dirs:  
    #每个类别的信息
    class_detail_list = {
     }
    eval_sum = 0
    trainer_sum = 0
    #统计每个类别有多少张图片
    class_sum = 0
    #获取类别路径
    path = data_root_path + "/" + class_dir
    # 获取所有图片
    img_paths = os.listdir(path)
    for img_path in img_paths:           # 遍历文件夹下的每个图片
        name_path = path + '/' + img_path     # 每张图片的路径
        if class_sum % 10 == 0:         # 每10张图片取一个做验证数据
            eval_sum += 1          # test_sum为测试数据的数目
            eval_list.append(name_path + "\t%d" % class_label + "\n")
        else:
            trainer_sum += 1
            trainer_list.append(name_path + "\t%d" % class_label + "\n")#trainer_sum测试数据的数目
        class_sum += 1                     #每类图片的数目
        all_class_images += 1                    #所有类图片的数目
    class_label += 1 
    # 说明的json文件的class_detail数据
    class_detail_list['class_name'] = class_dir       #类别名称,如jiangwen
    class_detail_list['class_label'] = class_label          #类别标签
    class_detail_list['class_eval_images'] = eval_sum     #该类数据的测试集数目
    class_detail_list['class_trainer_images'] = trainer_sum #该类数据的训练集数目
    class_detail.append(class_detail_list) 

   
random.shuffle(eval_list)
with open(data_list_path + "eval.txt", 'a') as f:
    for eval_image in eval_list:
        f.write(eval_image)       

random.shuffle(trainer_list)
with open(data_list_path + "train.txt", 'a') as f2:
    for train_image in trainer_list:
        f2.write(train_image)

print ('生成数据列表完成!')

      重点来了,这篇稿子最重要的部分有营养的地方来了!大家一定认真哈,不要开小差啦!

      麻烦大了,是不是前面废话太多,以至于精彩部分,大家睡着了!!
我在百度平台公开了我这个项目,数据集都准备好,大家也可以直接去体验一把,开箱即可食用,记得点赞好评哦。有报错的地方,不用来找我,因为我也不懂,报错的都是迁移学习黑盒子里面的东西。

**《青春有你2》5位选手识别作业* 链接,难度初级

Step1、基础工作
加载数据文件
制作数据准备函数。
def data_list():
    name_dict = {
     'wangchengxuan':4,'anqi':3, 'xujiaqi':1, 'yushuxin':0, 'zhaoxiaotang':2}
    path="dataset/data" #图片所在文件夹
    address_list = []   #图片地址列表
    label_list = []     #标签列表
    for root, dirs, files in os.walk(path, topdown=False):
        for name in files:
            address = os.path.join(root, name) #获取图片路径
            address_list.append(address)
            label = address.split('/')[2]       #路径分割后,截取目录名即为标记名,开始的时候大脑里转的是map,lambda,还是apply!
            label_list.append(name_dict.get(label)) #截取目录名对应的标注
    return {
     'address':address_list,'label':label_list} #生成字典
    
df = pd.DataFrame(data_list())     #代码只有一句,那么这是直插灵魂的一句。
df['address'] = df.address.str[8:] #按要求产生相对路径。
df_new=df.copy()                       #样品数据框随机打乱,按9:1比例生成 测试集,验证集,训练集列表文档。
df_new = df.sample(frac=1.0)           #打乱数据
df_validate = df_new.sample(frac=0.1)  #取同数量样本作为验证集
df_new.drop(index=df_validate.index,inplace=True) #去除测试集
df_test = df_new.sample(5)                          #随机抽取5样本作为测试集
df_train = df_new.drop(index=df_test.index)         #剩下的为训练集
len(df_train.index)

### 生成数据列表文件
df_test['address'] = 'dataset/'+df_test['address']
df_test.to_csv('dataset/test_list.txt', sep=' ', index=0,header=0) #导出 验证集列表
df_validate.to_csv('dataset/validate_list.txt', sep=' ', index=0,header=0) #导出 验证集列表
df_train.to_csv('dataset/train_list.txt', sep=' ', index=0,header=0) #导出 训练集列表
#有种万箭齐发的感觉,所需要的材料已经准备完毕了,到此后面的工作已经可以自动继续运行了!

      简单的说,列表–>字典–>DataFrame–>TXT。就是用前面提到的os.walk 生成图片路径列表,然后,根据文件夹名字映射标签,(映射没用上,一直想用映射),路径和标签组合成字典,然后潘大师(pandas)出场,做成了一个DataFrame.这样后面对图片路径的裁剪都变得很方便,更重要的是导出TXT 很方便。

路径
DataFrame
标签
TXT

      思路非常清晰,一气呵成,打完收工!潘大师下次还用你!

      你还在用遍历吗,你还在用循环吗,不行了,有计算机了,为什么要用按键的计算器呀!这一招可以普适分类图像分类任务的数据集列表的生成管理,真的好用,带一上一份吧,时候不早了,赶紧上路吧,如果没时间后面可以不看了,最精彩的已经讲完了。
代码最后跑起来是这样子:

我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第7张图片
Ai平台在GUP赋能下,跑起来是很爽的!在我脑海里的视觉效果是这样子的。项目链接在上面可以去感受体验!
我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第8张图片

自我感觉这么良好的作业,大家猜老师给我打多少分,101是不是也少了一点呀,这么革命性的创制,解放了多少劳动力呀!

      答案:09(倒过来看),你在笑我装逼失败吧!估计是装逼太明显了,下次低调些了!

后面我哭着去找班主任理论去了。。。。然后再跟助教探讨了一番人生!

我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第9张图片


Day5-综合大作业

  • 作业要求

第一步:爱奇艺《青春有你2》评论数据爬取(参考链接:https://www.iqiyi.com/v_19ryfkiv8w.html#curid=15068699100_9f9bab7e0d1e30c494622af777f4ba39)
爬取任意一期正片视频下评论 评论条数不少于1000条
第二步:词频统计并可视化展示
数据预处理:清理清洗评论中特殊字符(如:@#¥%、emoji表情符),清洗后结果存储为txt文档
中文分词:添加新增词(如:青你、奥利给、冲鸭),去除停用词(如:哦、因此、不然、也好、但是) 统计top10高频词 可视化展示高频词
第三步:绘制词云 根据词频生成词云 可选项-添加背景图片,根据背景图片轮廓生成词云
第四步:结合PaddleHub,对评论进行内容审核

Balabala

      大作业也就这样啦,由些零散的技能组成的,老师大概想给我们营造期末考试的感觉!确实这么短时间里把这些东西串起来了是有点难度的。我也不打算给大家分享代码了,都是体力活,这就不展开了,反正是我弄到凌晨4点。

      最后,青春有你评论词云图作品:
      我放进去一朵花,它却给我一个球!生活常常都是这样子的!

我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第10张图片

我在百度Python小白逆袭大神课程中“打怪”欢乐之旅_第11张图片

散了,散了,散花了!

      到最后,我还是没搞明白百度飞桨团队是干啥的,投入那么多精力然后,还不赚钱,再次让我感受到社会主义的优越性!

      谢谢大家的帮助!不然作业自己真做不出来!
      关于代码的方面,希望能得到大佬的指点和帮助!

      下一回合,我们江湖见!

      安好!


你可能感兴趣的:(机器学习,深度学习)