黑马程序员最新Python教程——第一阶段(3)第二阶段(1)
黑馬程序員最新Python教程——第一階段(3)第二階段(1)
- 第一階段——第八章
- 01-文件編碼概念
- 02-文件的讀取操作
- 03-文件讀取的課后練習(xí)
- 04-文件的寫出操作
- 05-文件的追加寫入操作
- 06-文件的綜合案例
- 第一階段——第九章
- 01-了解異常
- 02-異常的捕獲
- 03-異常的傳遞性
- 04-模塊的概念和導(dǎo)入
- 05-自定義模塊并導(dǎo)入
- 06-自定義Python包
- 07-安裝第三方包
- 08-異常-模塊-包-綜合案例講解
- 第一階段——第十章
- 01-案例介紹
- 02-JSON數(shù)據(jù)格式的轉(zhuǎn)換
- 03-pyecharts模塊簡介
- 04-pyecharts的入門使用
- 05-數(shù)據(jù)準(zhǔn)備
- 06-生成折線圖
- 第一階段——第十一章
- 01-數(shù)據(jù)可視化案例
- 02-全國疫情地圖構(gòu)建
- 03-河南省疫情地圖繪制
- 第一階段——第十二章
- 01-基礎(chǔ)柱狀圖構(gòu)建
- 02-基礎(chǔ)時間線柱狀圖繪制
- 03-動態(tài)GDP柱狀圖繪制
- 第二階段——第一章
- 01-初始對象
- 02-類的成員方法
- 03-類和對象
- 04-構(gòu)造方法
- 05-魔術(shù)方法
- 06-封裝
- 07-封裝的課后練習(xí)題講解
- 08-繼承的基礎(chǔ)語法
- 09-復(fù)寫父類成員和調(diào)用父類成員
- 10-變量的類型注解
- 11-函數(shù)和方法類型注解
- 12-Union聯(lián)合類型注解
- 13-多態(tài)
- 14-數(shù)據(jù)分析案例步驟-文件讀取
- 15-數(shù)據(jù)分析案例步驟-數(shù)據(jù)計算
- 16-數(shù)據(jù)分析案例步驟-可視化開發(fā)
這是這個筆記的第三篇。
第一篇為黑馬程序員最新Python教程——第一階段(1)
第二篇為黑馬程序員最新Python教程——第一階段(2)
歡迎大家批評指正。
第一階段——第八章
01-文件編碼概念
思考:計算機只能識別: 0和1,那么我們豐富的文本文件是如何被計算機識別,并存儲在硬盤中呢?
答案:使用編碼技術(shù)(密碼本)將內(nèi)容翻譯成0和1存入。
不同的編碼,將翻譯成二進制也是不同的。
1.什么是編碼?
編碼就是一種規(guī)則集合,記錄了內(nèi)容和二進制間進行相互轉(zhuǎn)換的邏輯。編碼有許多中,我們最常用的是UTF-8編碼。
2.為什么需要使用編碼?
計算機只認(rèn)識0和1,所以需要將內(nèi)容翻譯成0和1才能保存在計算機中。同時也需要編碼,將計算機保存的0和1,反向翻譯回可以識別的內(nèi)容。
02-文件的讀取操作
什么是文件?
內(nèi)存中存放的數(shù)據(jù)在計算機關(guān)機后就會消失。要長久保存數(shù)據(jù),就要使用硬盤、光盤、U盤等設(shè)備。為了便于數(shù)據(jù)的管理和檢索,引入了“文件”的概念。
一篇文章、一段視頻、一個可執(zhí)行程序,都可以被保存為一一個文件,并賦予一一個文件名。操作系統(tǒng)以文件為單位管理磁盤中的數(shù)據(jù)。一般來說,文件可分為文本文件、視頻文件、音頻文件、圖像文件、可執(zhí)行文件等多種類別。
文件操作包含哪些內(nèi)容呢?
在日常生活中,文件操作主要包括打開、關(guān)閉讀、寫等操作。
文件的操作步驟
想想我們平常對文件的基本操作,大概可以分為三個步驟(簡稱文件操作三步走) :
open()打開函數(shù)
mode常用的三種基礎(chǔ)訪問模式
讀操作相關(guān)方法
測試案例:
readlines的方法
if __name__ == '__main__':#打開文件f= open("測試.txt","r",encoding="UTF-8")# 讀取文件- readLines()lines = f.readlines()# 讀取文件的全部行,封裝到列表中print(f"lines對象的類型: {type(lines)}") #<class 'list'>print(f"lines對象的內(nèi)容是: {lines}") #這次就可以了 \n是換行符f.close()readline的方法
if __name__ == '__main__':#打開文件f= open("測試.txt","r",encoding="UTF-8")# 讀取文件- readline()line1 = f.readline()line2 = f.readline()line3 = f.readline()print(f"第一行數(shù)據(jù)是:{line1}")print(f"第二行數(shù)據(jù)是:{line2}")print(f"第三行數(shù)據(jù)是:{line3}")f.close()'''第一行數(shù)據(jù)是:黑馬程序員是傳智教育旗下高端IT教育品牌第二行數(shù)據(jù)是:成立至今以高品質(zhì)教學(xué)質(zhì)量贏得好口碑第三行數(shù)據(jù)是:為企業(yè)輸送了大批優(yōu)質(zhì)IT人才'''for循環(huán)讀取
if __name__ == '__main__':#打開文件f= open("測試.txt","r",encoding="UTF-8")# 讀取文件- readline()# for循環(huán)讀取文件行for line in f:print(f"每一行數(shù)據(jù)是:{line}")f.close()'''每一行數(shù)據(jù)是:黑馬程序員是傳智教育旗下高端IT教育品牌每一行數(shù)據(jù)是:成立至今以高品質(zhì)教學(xué)質(zhì)量贏得好口碑每一行數(shù)據(jù)是:為企業(yè)輸送了大批優(yōu)質(zhì)IT人才每一行數(shù)據(jù)是:致力于培養(yǎng)高級軟件I程師每一行數(shù)據(jù)是:現(xiàn)已開設(shè)10余個精品熱]學(xué)科每一行數(shù)據(jù)是:20所直營分校遍布全國每一行數(shù)據(jù)是:學(xué)Python來黑馬, 月薪過萬。'''為什么要關(guān)閉文件
利用with open語句 自動運行close 以免忘寫
03-文件讀取的課后練習(xí)
if __name__ == '__main__':f = open("word.txt","r",encoding="UTF-8")nums = 0for line in f:nums+=line.count("itheima")print("里面有 ",nums," 個itheima")04-文件的寫出操作
if __name__ == '__main__':f = open("123.txt","w",encoding="UTF-8")#當(dāng)文件不存在時。它會給我自動創(chuàng)建#write寫入f.write("Helloworld!")#flush刷新f.flush()#close內(nèi)置了flush的功能f.close()05-文件的追加寫入操作
if __name__ == '__main__':f = open("1234.txt","a",encoding="UTF-8")#當(dāng)文件不存在時。它會給我自動創(chuàng)建#write寫入f.write("Helloworld!")#flush刷新f.flush()#close內(nèi)置了flush的功能f.close()06-文件的綜合案例
需求分析:
第一階段——第九章
01-了解異常
什么是異常
當(dāng)檢測到一個錯誤時,Python解釋 器就無法繼續(xù)執(zhí)行了,反而出現(xiàn)了一些錯誤的提示,這就是所謂的“異常”,也就是我們常說的BUG
異常演示
02-異常的捕獲
為什么要捕獲異常
世界上沒有完美的程序,任何程序在運行的過程中,都有可能出現(xiàn):異常,也就是出現(xiàn)bug導(dǎo)致程序無法完美運行下去。
我們要做的,不是力求程序完美運行。而是在力所能及的范圍內(nèi),對可能出現(xiàn)的bug,進行提前準(zhǔn)備、提前處理。這種行為我們稱之為:異常處理(捕獲異常)
當(dāng)我們的程序遇到了BUG,那么接下來有兩種情況:
①整個程序因為一個BUG停止運行
②對BUG進行提醒,整個程序繼續(xù)運行中
顯然在之前的學(xué)習(xí)中,我們所有的程序遇到BUG就會出現(xiàn)①的這種情況,也就是整個程序直接奔潰。
但是在真實工作中,我們肯定不能因為一個小的BUG就讓整個程序全部奔潰,也就是我們希望的是達到②的這種情況。
那這里我們就需要使用到捕獲異常。
捕獲異常的作用在于:提前假設(shè)某處會出現(xiàn)異常,做好提前準(zhǔn)備,當(dāng)真的出現(xiàn)異常的時候,可以有后續(xù)手段。
基本語法: 可以捕獲所有的異常!!!
try:可能發(fā)生錯誤的代碼 except:如果出現(xiàn)異常執(zhí)行的代碼
由于不同類型的異常,處理方法可以不同。所以,我們可以捕獲不同類型的異常。
捕獲多個異常:
try:print(1/0) except (NameError, ZeroDivisionError):#元組print('ZeroDivision錯誤... if __name__ == '__main__':try:# 1/0print(name)except (NameError,ZeroDivisionError) as e:print("出現(xiàn)了變量未定義或者除以0的異常錯誤")'''出現(xiàn)了變量未定義或者除以0的異常錯誤'''異常的finally
03-異常的傳遞性
04-模塊的概念和導(dǎo)入
什么是模塊
Python模塊Modle),是一一個Python文件,以.py結(jié)尾、模塊能定 義函數(shù),類和變量,模塊里也能包含可執(zhí)行的代碼.
模塊的作用:python中有 很多各種不同的模塊,每- -個模塊都可以幫助我們快速的實現(xiàn)一些功能,比如實現(xiàn)和時間相關(guān)的功能就可以使用time模塊我們可以認(rèn)為一個模塊就是一個工具包,每一個工具包中都有各種不同的工具供我們使用進而實現(xiàn)各種不同的功能。
大白話:模塊就是一個Python文件,里面有類、函數(shù)、變量等,我們可以拿過來用(導(dǎo)入模塊去使用)
模塊的導(dǎo)入方式
模塊在使用前需要先導(dǎo)入導(dǎo)入的語法如下:[from模塊名] import [模塊|類|變量|函數(shù)|*] [as別名]
常用的組合形式如:
05-自定義模塊并導(dǎo)入
再同級文件下創(chuàng)建my_modle1.py
在main.py中寫如下:
if __name__ == '__main__':# import my_modle1# my_modle1.add(1,2)# from my_modle1 import add# add(1,2)from my_modle1 import add as asdfasdasdasdfasdasd(1,2)
注意,__all__是列表!!!類似可以公開與不公開。但是它只會限制*的引用,如果你直接引用,也可以正常引用,所以最好不要類比public與private
06-自定義Python包
什么是Python包?
從物理上看,包就是一個文件夾,在該文件夾下包含了一個__init__ .py 文件,該文件夾可用于包含多個模塊文件
從邏輯上看,包的本質(zhì)依然是模塊
包的作用:
當(dāng)我們的模塊文件越來越多時,包可以幫助我們管理這些模塊,包的作用就是包含多個模塊,但包的本質(zhì)依然是模塊。
你可以認(rèn)為__init__.py是一個標(biāo)志,當(dāng)你創(chuàng)建一堆文件放到文件夾中,不放入__init__.py,他就是裝著各種.py的文件夾。如果包含__init__.py,說明該文件夾是一個包!
所以
當(dāng)Python Package時,pycharm會新建功能模塊,自動創(chuàng)建__init__.py。
導(dǎo)入包
仔細(xì)看,LOGO不同。
07-安裝第三方包
我們知道,包可以包含一堆 的Python模塊,而每個模塊又內(nèi)含許多的功能。
所以,我們可以認(rèn)為:一個包,就是一堆同類型功能的集合體。
在Python程序的生態(tài)中,有許多非常多的第三方包(非Python官方),可以極大的幫助我們提高開發(fā)效率,如:
這些第三方的包,極大的豐富了python的生態(tài)。
但是由于是第三方,所以Python沒有內(nèi)置,所以我們需要安裝它們才可以導(dǎo)入使用哦。
安裝第三方包- pip
第三方包的安裝非常簡單,我們只需要使用Python內(nèi)置的pip程序即可。
打開我們許久未見的:命令提示符程序,在里面輸入:
pip install包名稱
即可通過網(wǎng)絡(luò)快速安裝第三方包
推薦直接安裝Anaconda 史上最全最詳細(xì)的Anaconda安裝教程
你可以理解成Anaconda 是一個環(huán)境,這個環(huán)境里面包含了絕大多數(shù)我們要的包 不用自己一個個下載。
怎么配置環(huán)境,大家可以查看這個大佬的文章介紹超詳細(xì)~Windows下PyCharm配置Anaconda環(huán)境教程
或者自己一個一個在pycharm里面找,為什么要在紅框位置輸入這個網(wǎng)站,因為這些第三方包都是國外的,下載會超級慢,所以我們加一個網(wǎng)站(鏡像源)到國內(nèi)下載就快了。
08-異常-模塊-包-綜合案例講解
案例要求:
main.py
str_util.py
def str_reverse(s):s = s[::-1]return sdef substr(s,x,y):s_list = s[x:y]return s_listfile_util.py
def print_file_info(file_name):f = Nonetry:f = open(file_name,"r",encoding="UTF-8")for line in f:print(line)except:print("文件不存在")finally:if f:f.close()def append_to_file(file_name,data):f = open(file_name,"a",encoding="UTF-8")f.write(data)f.close()第一階段——第十章
01-案例介紹
02-JSON數(shù)據(jù)格式的轉(zhuǎn)換
什么是json
主要功能: json就是 一種在各個編程語言中流通的數(shù)據(jù)格式,負(fù)責(zé)不同編程語言中的數(shù)據(jù)傳遞和交互、類似于:
json有什么用
各種編程語言存儲數(shù)據(jù)的容器不盡相同,在Python中有字典dict這樣的數(shù)據(jù)類型,而其它語言可能沒有對應(yīng)的字典
為了讓不同的語言都能夠相互通用的互相傳遞數(shù)據(jù),JSON就是一種非常良好的中轉(zhuǎn)數(shù)據(jù)格式。如下圖,以Python和C語言互傳數(shù)據(jù)為例:
03-pyecharts模塊簡介
pyecharts模塊 :如果想要 做出數(shù)據(jù)可視化效果圖,可以借助pyecharts模塊來完成
概況:
Echarts是個由百度開源的數(shù)據(jù)可視化,憑借著良好的交互性,精巧的圖表設(shè)計,得到了眾多開發(fā)者的認(rèn)可.而Python是門富有表達力的語言,很適合用于數(shù)據(jù)處理.當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時pyecharts誕生了。
pyecharts.org
還有一個畫廊功能:gallery.pyecharts.org
pyecharts模塊的安裝:pip install pyecharts
04-pyecharts的入門使用
from pyecharts.charts import Line if __name__ == '__main__':# 導(dǎo)包,導(dǎo)入Line功能構(gòu)建折線圖對象# 得到折線圖對象line = Line()# 添加x軸數(shù)據(jù)line.add_xaxis(["中國","美國","英國"])# 添加y軸數(shù)據(jù)line.add_yaxis("GDP", [30,20,10])# 生成圖表line.render()'''
pyecharts有哪些配置選項
pyecharts模塊中有 很多的配置選項,常用到2個類別的選項:
全局配置選項
系列配置選項
想要一個好看的圖?復(fù)制粘貼吧!
05-數(shù)據(jù)準(zhǔn)備
鏈接:https://pan.baidu.com/s/1fP4riRd3k_J6NQFwIznxeQ
提取碼:xq8g
06-生成折線圖
""" 演示可視化需求1:折線圖開發(fā) """ import json from pyecharts.charts import Line from pyecharts.options import TitleOpts, LabelOpts# 處理數(shù)據(jù) f_us = open("D:/美國.txt", "r", encoding="UTF-8") us_data = f_us.read() # 美國的全部內(nèi)容f_jp = open("D:/日本.txt", "r", encoding="UTF-8") jp_data = f_jp.read() # 日本的全部內(nèi)容f_in = open("D:/印度.txt", "r", encoding="UTF-8") in_data = f_in.read() # 印度的全部內(nèi)容# 去掉不合JSON規(guī)范的開頭 us_data = us_data.replace("jsonp_1629344292311_69436(", "") jp_data = jp_data.replace("jsonp_1629350871167_29498(", "") in_data = in_data.replace("jsonp_1629350745930_63180(", "")# 去掉不合JSON規(guī)范的結(jié)尾 us_data = us_data[:-2] jp_data = jp_data[:-2] in_data = in_data[:-2]# JSON轉(zhuǎn)Python字典 us_dict = json.loads(us_data) jp_dict = json.loads(jp_data) in_dict = json.loads(in_data)# 獲取trend key us_trend_data = us_dict['data'][0]['trend'] jp_trend_data = jp_dict['data'][0]['trend'] in_trend_data = in_dict['data'][0]['trend']# 獲取日期數(shù)據(jù),用于x軸,取2020年(到314下標(biāo)結(jié)束) us_x_data = us_trend_data['updateDate'][:314] jp_x_data = jp_trend_data['updateDate'][:314] in_x_data = in_trend_data['updateDate'][:314]# 獲取確認(rèn)數(shù)據(jù),用于y軸,取2020年(到314下標(biāo)結(jié)束) us_y_data = us_trend_data['list'][0]['data'][:314] jp_y_data = jp_trend_data['list'][0]['data'][:314] in_y_data = in_trend_data['list'][0]['data'][:314]# 生成圖表 line = Line() # 構(gòu)建折線圖對象 # 添加x軸數(shù)據(jù) line.add_xaxis(us_x_data) # x軸是公用的,所以使用一個國家的數(shù)據(jù)即可 # 添加y軸數(shù)據(jù) line.add_yaxis("美國確診人數(shù)", us_y_data, label_opts=LabelOpts(is_show=False)) # 添加美國的y軸數(shù)據(jù) line.add_yaxis("日本確診人數(shù)", jp_y_data, label_opts=LabelOpts(is_show=False)) # 添加日本的y軸數(shù)據(jù) line.add_yaxis("印度確診人數(shù)", in_y_data, label_opts=LabelOpts(is_show=False)) # 添加印度的y軸數(shù)據(jù)# 設(shè)置全局選項 line.set_global_opts(# 標(biāo)題設(shè)置title_opts=TitleOpts(title="2020年美日印三國確診人數(shù)對比折線圖", pos_left="center", pos_bottom="1%") )# 調(diào)用render方法,生成圖表 line.render() # 關(guān)閉文件對象 f_us.close() f_jp.close() f_in.close()第一階段——第十一章
01-數(shù)據(jù)可視化案例
""" 演示地圖可視化的基本使用 """ from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 準(zhǔn)備地圖對象 map = Map() # 準(zhǔn)備數(shù)據(jù) data = [("北京", 99),("上海", 199),("湖南", 299),("臺灣", 399),("廣東", 499) ] # 添加數(shù)據(jù) map.add("測試地圖", data, "china")# 設(shè)置全局選項 map.set_global_opts(visualmap_opts=VisualMapOpts(is_show=True,is_piecewise=True,pieces=[{"min": 1, "max": 9, "label": "1-9", "color": "#CCFFFF"},{"min": 10, "max": 99, "label": "10-99", "color": "#FF6666"},{"min": 100, "max": 500, "label": "100-500", "color": "#990033"}]) )# 繪圖 map.render()02-全國疫情地圖構(gòu)建
""" 演示全國疫情可視化地圖開發(fā) """ import json from pyecharts.charts import Map from pyecharts.options import *# 讀取數(shù)據(jù)文件 f = open("D:/疫情.txt", "r", encoding="UTF-8") data = f.read() # 全部數(shù)據(jù) # 關(guān)閉文件 f.close() # 取到各省數(shù)據(jù) # 將字符串json轉(zhuǎn)換為python的字典 data_dict = json.loads(data) # 基礎(chǔ)數(shù)據(jù)字典 # 從字典中取出省份的數(shù)據(jù) province_data_list = data_dict["areaTree"][0]["children"] # 組裝每個省份和確診人數(shù)為元組,并各個省的數(shù)據(jù)都封裝入列表內(nèi) data_list = [] # 繪圖需要用的數(shù)據(jù)列表 for province_data in province_data_list:province_name = province_data["name"] # 省份名稱province_confirm = province_data["total"]["confirm"] # 確診人數(shù)data_list.append((province_name, province_confirm))# 創(chuàng)建地圖對象 map = Map() # 添加數(shù)據(jù) map.add("各省份確診人數(shù)", data_list, "china") # 設(shè)置全局配置,定制分段的視覺映射 map.set_global_opts(title_opts=TitleOpts(title="全國疫情地圖"),visualmap_opts=VisualMapOpts(is_show=True, # 是否顯示is_piecewise=True, # 是否分段pieces=[{"min": 1, "max": 99, "lable": "1~99人", "color": "#CCFFFF"},{"min": 100, "max": 999, "lable": "100~9999人", "color": "#FFFF99"},{"min": 1000, "max": 4999, "lable": "1000~4999人", "color": "#FF9966"},{"min": 5000, "max": 9999, "lable": "5000~99999人", "color": "#FF6666"},{"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},{"min": 100000, "lable": "100000+", "color": "#990033"},]) ) # 繪圖 map.render("全國疫情地圖.html")03-河南省疫情地圖繪制
""" 演示河南省疫情地圖開發(fā) """ import json from pyecharts.charts import Map from pyecharts.options import *# 讀取文件 f = open("D:/疫情.txt", "r", encoding="UTF-8") data = f.read() # 關(guān)閉文件 f.close() # 獲取河南省數(shù)據(jù) # json數(shù)據(jù)轉(zhuǎn)換為python字典 data_dict = json.loads(data) # 取到河南省數(shù)據(jù) cities_data = data_dict["areaTree"][0]["children"][3]["children"]# 準(zhǔn)備數(shù)據(jù)為元組并放入list data_list = [] for city_data in cities_data:city_name = city_data["name"] + "市"city_confirm = city_data["total"]["confirm"]data_list.append((city_name, city_confirm))# 手動添加濟源市的數(shù)據(jù) data_list.append(("濟源市", 5))# 構(gòu)建地圖 map = Map() map.add("河南省疫情分布", data_list, "河南") # 設(shè)置全局選項 map.set_global_opts(title_opts=TitleOpts(title="河南省疫情地圖"),visualmap_opts=VisualMapOpts(is_show=True, # 是否顯示is_piecewise=True, # 是否分段pieces=[{"min": 1, "max": 99, "lable": "1~99人", "color": "#CCFFFF"},{"min": 100, "max": 999, "lable": "100~9999人", "color": "#FFFF99"},{"min": 1000, "max": 4999, "lable": "1000~4999人", "color": "#FF9966"},{"min": 5000, "max": 9999, "lable": "5000~99999人", "color": "#FF6666"},{"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},{"min": 100000, "lable": "100000+", "color": "#990033"},]) )# 繪圖 map.render("河南省疫情地圖.html")第一階段——第十二章
01-基礎(chǔ)柱狀圖構(gòu)建
""" 演示基礎(chǔ)柱狀圖的開發(fā) """ from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar構(gòu)建基礎(chǔ)柱狀圖 bar = Bar() # 添加x軸的數(shù)據(jù) bar.add_xaxis(["中國", "美國", "英國"]) # 添加y軸數(shù)據(jù) bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right")) # 反轉(zhuǎn)x和y軸 bar.reversal_axis() # 繪圖 bar.render("基礎(chǔ)柱狀圖.html")# 反轉(zhuǎn)x軸和y軸# 設(shè)置數(shù)值標(biāo)簽在右側(cè)02-基礎(chǔ)時間線柱狀圖繪制
""" 演示帶有時間線的柱狀圖開發(fā) """ from pyecharts.charts import Bar, Timeline from pyecharts.options import LabelOpts from pyecharts.globals import ThemeTypebar1 = Bar() bar1.add_xaxis(["中國", "美國", "英國"]) bar1.add_yaxis("GDP", [30, 30, 20], label_opts=LabelOpts(position="right")) bar1.reversal_axis()bar2 = Bar() bar2.add_xaxis(["中國", "美國", "英國"]) bar2.add_yaxis("GDP", [50, 50, 50], label_opts=LabelOpts(position="right")) bar2.reversal_axis()bar3 = Bar() bar3.add_xaxis(["中國", "美國", "英國"]) bar3.add_yaxis("GDP", [70, 60, 60], label_opts=LabelOpts(position="right")) bar3.reversal_axis()# 構(gòu)建時間線對象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 在時間線內(nèi)添加柱狀圖對象 timeline.add(bar1, "點1") timeline.add(bar2, "點2") timeline.add(bar3, "點3")# 自動播放設(shè)置 timeline.add_schema(play_interval=1000,is_timeline_show=True,is_auto_play=True,is_loop_play=True )# 繪圖是用時間線對象繪圖,而不是bar對象了 timeline.render("基礎(chǔ)時間線柱狀圖.html") """ 擴展列表的sort方法 在學(xué)習(xí)了將函數(shù)作為參數(shù)傳遞后,我們可以學(xué)習(xí)列表的sort方法來對列表進行自定義排序 """# 準(zhǔn)備列表 my_list = [["a", 33], ["b", 55], ["c", 11]]# 排序,基于帶名函數(shù) # def choose_sort_key(element): # return element[1] # # my_list.sort(key=choose_sort_key, reverse=True) # 排序,基于lambda匿名函數(shù) my_list.sort(key=lambda element: element[1], reverse=True)print(my_list)03-動態(tài)GDP柱狀圖繪制
""" 演示第三個圖表:GDP動態(tài)柱狀圖開發(fā) """ from pyecharts.charts import Bar, Timeline from pyecharts.options import * from pyecharts.globals import ThemeType# 讀取數(shù)據(jù) f = open("D:/1960-2019全球GDP數(shù)據(jù).csv", "r", encoding="GB2312") data_lines = f.readlines() # 關(guān)閉文件 f.close() # 刪除第一條數(shù)據(jù) data_lines.pop(0) # 將數(shù)據(jù)轉(zhuǎn)換為字典存儲,格式為: # { 年份: [ [國家, gdp], [國家,gdp], ...... ], 年份: [ [國家, gdp], [國家,gdp], ...... ], ...... } # { 1960: [ [美國, 123], [中國,321], ...... ], 1961: [ [美國, 123], [中國,321], ...... ], ...... } # 先定義一個字典對象 data_dict = {} for line in data_lines:year = int(line.split(",")[0]) # 年份country = line.split(",")[1] # 國家gdp = float(line.split(",")[2]) # gdp數(shù)據(jù)# 如何判斷字典里面有沒有指定的key呢?try:data_dict[year].append([country, gdp])except KeyError:data_dict[year] = []data_dict[year].append([country, gdp])# print(data_dict[1960]) # 創(chuàng)建時間線對象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 排序年份 sorted_year_list = sorted(data_dict.keys()) for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1], reverse=True)# 取出本年份前8名的國家year_data = data_dict[year][0:8]x_data = []y_data = []for country_gdp in year_data:x_data.append(country_gdp[0]) # x軸添加國家y_data.append(country_gdp[1] / 100000000) # y軸添加gdp數(shù)據(jù)# 構(gòu)建柱狀圖bar = Bar()x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)bar.add_yaxis("GDP(億)", y_data, label_opts=LabelOpts(position="right"))# 反轉(zhuǎn)x軸和y軸bar.reversal_axis()# 設(shè)置每一年的圖表的標(biāo)題bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球前8GDP數(shù)據(jù)"))timeline.add(bar, str(year))# for循環(huán)每一年的數(shù)據(jù),基于每一年的數(shù)據(jù),創(chuàng)建每一年的bar對象 # 在for中,將每一年的bar對象添加到時間線中# 設(shè)置時間線自動播放 timeline.add_schema(play_interval=1000,is_timeline_show=True,is_auto_play=True,is_loop_play=False ) # 繪圖 timeline.render("1960-2019全球GDP前8國家.html")第二階段——第一章
01-初始對象
首先,我們?yōu)槭裁匆雽ο竽?#xff1f; 讓我們發(fā)現(xiàn)痛點!!
使用變量記錄數(shù)據(jù)太亂了。如果程序中也和生活中一樣,可以設(shè)計表格,可以將設(shè)計的表格打印出來,可以將打印好的表格供人填寫內(nèi)容,那么數(shù)據(jù)的組織就非常方便了。
我們知道了這個痛點,那么好,我們引入對象,使用對象來組織數(shù)據(jù)!
02-類的成員方法
類的定義和使用
在上一節(jié)中,我們簡單了解到可以使用類去封裝屬性,并基于類創(chuàng)建出一一個個的對象來使用。
現(xiàn)在我們來看看類的使用語法:
●class是關(guān)鍵字, 表示要定義類了
●類的屬性,即定義在類中的變量(成員變量)
● 類的行為, 即定義在類中的函數(shù)(成員方法)
創(chuàng)建類對象的語法對象=類名稱()
類內(nèi)部的函數(shù)叫(成員)方法,不叫函數(shù)。
成員方法的定義語法
可以看到,在傳入?yún)?shù)的時間,self是透明的,可以不用理會他。
if __name__ == '__main__':# 1.設(shè)計一個類(類比生活中:設(shè)計一張登記表)class Student:name = None # 記錄學(xué)生姓名def say_hi(self):print("he",self.name)s1 = Student()s1.name = "wnm"s1.say_hi()#he wnm03-類和對象
基于類創(chuàng)建對象的語法:對象名=類名稱()
為什么非要創(chuàng)建對象才能使用呢?
類只是一種程序內(nèi)的“設(shè)計圖紙”,需要基于圖紙生產(chǎn)實體(對象),才能正常工作,面向?qū)ο缶幊?/strong>!!!!
設(shè)計類——就是讓類干活!
下面代碼有聲音歐 耳機黨小心!!!!!
04-構(gòu)造方法
構(gòu)造方法:
當(dāng)寫了構(gòu)造函數(shù):可以下面:
05-魔術(shù)方法
__ str __
__ le __ (小于等于) 和__ eq __(等于)類似
06-封裝
面向?qū)ο蟮娜筇匦?/strong>
面向?qū)ο缶幊?#xff0c;是許多編程語言都支持的一種編程思想。
簡單理解是:基于模板(類)去創(chuàng)建實體(對象) ,使用對象完成功能開發(fā)。
面向?qū)ο蟀?大主要特性:
?封裝
?繼承
?多態(tài)
封裝
所以會有平果越獄和俺卓root的行為,我們想獲取他不想讓我們看到的東西。
1.封裝的概念是指?
將現(xiàn)實世界事物在類中描述為屬性和方法,即為封裝。
2.什么是私有成員?為什么需要私有成員?
現(xiàn)實事物有部分屬性和行為是不公開對使用者開放的。同樣在類中描述
屬性和方法的時候也需要達到這個要求,就需要定義私有成員了
3.如何定義私有成員?
成員變量和成員方法的命名均以__作為開頭即可
4.私有成員的訪問限制?
類對象無法訪問私有 成員
類中的其它成員可以訪問私有成員
07-封裝的課后練習(xí)題講解
案例分析:
08-繼承的基礎(chǔ)語法
繼承的引出:
單繼承:
其中pass關(guān)鍵字是補全語法。讓語法補充,避免錯誤。當(dāng)輸出同名屬性時,以前面為準(zhǔn),聽大爸的。
09-復(fù)寫父類成員和調(diào)用父類成員
什么是復(fù)寫
調(diào)用父類的同名成員
10-變量的類型注解
11-函數(shù)和方法類型注解
函數(shù)和方法的形參類型注解語法:
同時,函數(shù)(方法)的返回值也是可以添加類型注解的。
12-Union聯(lián)合類型注解
Union類型
使用Union[類型,類型…]
13-多態(tài)
抽象類可以理解成標(biāo)準(zhǔn)(框架。提出的要求)!什么意思?就是告訴人們,我有這個功能,自己(父類)不實現(xiàn),但是他的子類必須實現(xiàn),要不這個要求就是沒有實現(xiàn)。
14-數(shù)據(jù)分析案例步驟-文件讀取
鏈接:https://pan.baidu.com/s/1Up95mikhWrB_ubBE_uxToA
提取碼:qli8
大家先下載數(shù)據(jù)再測試案例嗷!
文件截圖如下:
data_ define.py
file_ define.py
import jsonfrom data_define import Recordclass FileReader:def read_data(self) :passclass TextFileReader(FileReader):def __init__(self,path):self.path = pathdef read_data(self):f = open(self.path,"r",encoding="UTF-8")record_list = []for line in f.readlines():line = line.strip() #消除反斜杠ndata_list = line.split(",")record= Record(data_list[0],data_list[1],int (data_list[2]),data_list[3])record_list.append(record)f.close()return record_list #list[Record]class JsonFileReader(FileReader):def __init__(self,path):self.path = pathdef read_data(self) :f = open(self.path,"r",encoding="UTF-8")record_list = []for line in f.readlines():data_dict = json.loads(line)record = Record(data_dict["date"],data_dict["order_id"],int(data_dict["money"]),data_dict["province"])record_list.append(record)#list[Record]f.close()return record_listif __name__ == '__main__':text_file_reader = TextFileReader("2011年1月銷售數(shù)據(jù).txt")json_file_reader = JsonFileReader("2011年2月銷售數(shù)據(jù)JSON.txt")list1 = text_file_reader.read_data()list2 = json_file_reader.read_data()for l in list1:print(l)for l in list2:print(l)15-數(shù)據(jù)分析案例步驟-數(shù)據(jù)計算
main.py
from file_define import FileReader,TextFileReader,JsonFileReader from data_define import Recordtext_file_reader = TextFileReader("2011年1月銷售數(shù)據(jù).txt") json_file_reader = JsonFileReader("2011年2月銷售數(shù)據(jù)JSON.txt")jan_data = text_file_reader.read_data() #list[Record] feb_data = json_file_reader.read_data()#list[Record]all_data = jan_data+feb_data #list[Record]data_dict = {} for record in all_data:if record.date in data_dict.keys():# 當(dāng)前日期已經(jīng)有記錄了,所以和老記錄做累加即可data_dict[record.date] += record. moneyelse:data_dict[record.date] = record. money print(data_dict)16-數(shù)據(jù)分析案例步驟-可視化開發(fā)
from file_define import FileReader,TextFileReader,JsonFileReader from data_define import Record from pyecharts.charts import Bar from pyecharts.globals import ThemeType from pyecharts.options import TitleOptstext_file_reader = TextFileReader("2011年1月銷售數(shù)據(jù).txt") json_file_reader = JsonFileReader("2011年2月銷售數(shù)據(jù)JSON.txt")jan_data = text_file_reader.read_data() #list[Record] feb_data = json_file_reader.read_data()#list[Record]all_data = jan_data+feb_data #list[Record]data_dict = {} for record in all_data:if record.date in data_dict.keys():# 當(dāng)前日期已經(jīng)有記錄了,所以和老記錄做累加即可data_dict[record.date] += record. moneyelse:data_dict[record.date] = record. moneybar = Bar()bar.add_xaxis(list(data_dict.keys())) bar.add_yaxis("銷售額",list(data_dict.values())) bar.set_global_opts(title_opts = TitleOpts(title="每日銷售額") ) bar.render("每日銷售額柱狀圖.html")
main.py
總結(jié)
以上是生活随笔為你收集整理的黑马程序员最新Python教程——第一阶段(3)第二阶段(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: figma下载_迁移至Figma
- 下一篇: python解析nmea0183协议获取