日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

黑马程序员最新Python教程——第一阶段(3)第二阶段(1)

發(fā)布時間:2023/12/9 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员最新Python教程——第一阶段(3)第二阶段(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

黑馬程序員最新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)閉讀、寫等操作。

文件的操作步驟
想想我們平常對文件的基本操作,大概可以分為三個步驟(簡稱文件操作三步走) :

  • 打開文件
  • 讀寫文件
  • 關(guān)閉文件
  • open()打開函數(shù)


    mode常用的三種基礎(chǔ)訪問模式

    讀操作相關(guān)方法

    測試案例:

    if __name__ == '__main__':#打開文件f= open("測試.txt","r",encoding="UTF-8")#f是一個文件對象print(type(f)) #<class '_io.TextIOWrapper'>#讀取文件-readprint(f"讀取10個字節(jié)的結(jié)果:{f.read(10)}")#讀取10個字符的結(jié)果:黑馬程序員是傳智教育#這里講錯了,open創(chuàng)建對象分字符和字節(jié)的,以字符方式打開文件時 num 表示字符數(shù),否則 utf - 8 里常見漢字一個3byteprint(f"讀取10個字節(jié)的結(jié)果:{f.read(4)}")#旗下高端 !!!!注意 是繼續(xù)讀!!!!!print(f"讀取10個字節(jié)的結(jié)果:{f.read()}") # 剩下的全部字符# 讀取文件- readLines()lines = f.readlines()# 讀取文件的全部行,封裝到列表中print(f"lines對象的類型: {type(lines)}") #<class 'list'>print(f"lines對象的內(nèi)容是: {lines}") #此時為空 為什么?因為print(f"讀取10個字節(jié)的結(jié)果:{f.read()}") 把讀字符串的指針已經(jīng)移動到該txt的最后了#想要運行 要注釋掉 print(f"讀取10個字節(jié)的結(jié)果:{f.read()}") # 剩下的全部字符f.close()

    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 以免忘寫

    if __name__ == '__main__':# with open 語法操作文件with open("測試.txt", "r", encoding = "UTF-8") as f:for line in f:print(f"每一行數(shù)據(jù)是: {line}")

    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-文件的綜合案例

    需求分析:

    if __name__ == '__main__':f = open("bill.txt","r",encoding="UTF-8")a_f =open("bill.txt.bat","a",encoding="UTF-8")for line in f:line = line.strip()split_list = line.split(",")if split_list[-1] == "正式":a_f.write(line)a_f.write("\n" )f.close()a_f.close()

    第一階段——第九章

    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(name) except NameError as e:print('name變量名稱未定義錯誤') if __name__ == '__main__':try:print(name)except NameError as e:print("出現(xiàn)了變量未定義的異常")print(e)'''出現(xiàn)了變量未定義的異常name 'name' is not defined'''

    捕獲多個異常

    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別名]

    常用的組合形式如:

  • import 模塊名
  • from模塊名import 類、變量、方法等
  • from 模塊名import *
  • import 模塊名as別名.
  • from 模塊名import功能名as別名
  • if __name__ == '__main__':# 使用import導(dǎo)入time模塊使用sleep功能(函數(shù))# import time# 導(dǎo)入Python內(nèi)置的time模塊(time. py這個代碼文件)# print("你好")# time.sleep(5)# 通過。就可以使用模塊內(nèi)部的全部功能(類、 函數(shù)、變量)# print("我好")# 使用from導(dǎo)入time的sleep功能(函數(shù))# from time import sleep## print("你好")# sleep(5)# print("我好")#使用 * 導(dǎo)入time模塊的全部功能# from time import *# # *表示全部的意思# print("你好")# sleep(1)# print("我好")# 使用as給特定功能加上別名import time as tprint("你好")t.sleep(1)print("我好")

    05-自定義模塊并導(dǎo)入


    再同級文件下創(chuàng)建my_modle1.py

    #my_modle1.py def add(a,b):print(a+b)

    在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不同。

    if __name__ == '__main__':# 創(chuàng)建一個包# 導(dǎo)入自定義的包中的模塊,并使用# import my_package.my_module1# import my_package.my_module2# my_package.my_module1.info_print1()# my_package.my_module2.info_print2()########################################from my_package import my_module1from my_package import my_module2my_module1.info_print1()my_module2.info_print2()########################################from my_package.my_module1 import info_print1from my_package.my_module2 import info_print2

    07-安裝第三方包

    我們知道,包可以包含一堆 的Python模塊,而每個模塊又內(nèi)含許多的功能。
    所以,我們可以認(rèn)為:一個包,就是一堆同類型功能的集合體。
    在Python程序的生態(tài)中,有許多非常多的第三方包(非Python官方),可以極大的幫助我們提高開發(fā)效率,如:

  • 科學(xué)計算中常用的: numpy包
  • 數(shù)據(jù)分析中常用的: pandas包
  • 大數(shù)據(jù)計算中常用的: pyspark、 apache-flink包
  • 圖形可視化常用的: matplotlib. pyecharts
  • 人工智能常用的: tensorflow
  • 這些第三方的包,極大的豐富了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

    import my_utils.str_util import my_utils.file_util if __name__ == '__main__':str = my_utils.str_util.str_reverse("heimachengxuyuan")print(str) #nauyuxgnehcamiehstr_list = my_utils.str_util.substr(str,4,10)print(str_list) #uxgnehmy_utils.file_util.print_file_info("1234.txt")my_utils.file_util.append_to_file("123.txt",str)

    str_util.py

    def str_reverse(s):s = s[::-1]return sdef substr(s,x,y):s_list = s[x:y]return s_list

    file_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ù)交互格式。可以按照J(rèn)SON指定的格式去組織和封裝數(shù)據(jù)
  • JSON本質(zhì)上是一個帶有特定格式的字符串
  • 主要功能: json就是 一種在各個編程語言中流通的數(shù)據(jù)格式,負(fù)責(zé)不同編程語言中的數(shù)據(jù)傳遞和交互、類似于:

  • 國際通用語言 -英語
  • 中國56個民族不同地區(qū)的通用語言-普通話
  • json有什么用
    各種編程語言存儲數(shù)據(jù)的容器不盡相同,在Python中有字典dict這樣的數(shù)據(jù)類型,而其它語言可能沒有對應(yīng)的字典

    為了讓不同的語言都能夠相互通用的互相傳遞數(shù)據(jù),JSON就是一種非常良好的中轉(zhuǎn)數(shù)據(jù)格式。如下圖,以Python和C語言互傳數(shù)據(jù)為例:



    import json if __name__ == '__main__':# 準(zhǔn)備列表,列表內(nèi)每一 個元素都是字典,將其轉(zhuǎn)換為JSONdata = [{"name": "張大山","age": 11}, {"name":"王大錘","age": 13}, {"name": "趙小虎","age": 16}]json_str = json.dumps(data)print(type(json_str))#<class 'str'>print(json_str) #[{"name": "\u5f20\u5927\u5c71", "age": 11}, {"name": "\u738b\u5927\u9524", "age": 13}, {"name": "\u8d75\u5c0f\u864e", "age": 16}]json_str = json.dumps(data,ensure_ascii=False)print(json_str) #[{"name": "張大山", "age": 11}, {"name": "王大錘", "age": 13}, {"name": "趙小虎", "age": 16}]# 準(zhǔn)備字典,將字典轉(zhuǎn)換為JSONd = {"name": "周杰輪","addr": "臺北"}json_str = json.dumps(d,ensure_ascii = False)print(type(json_str))#<class 'str'>print(json_str)#{"name": "周杰輪", "addr": "臺北"}# 將JSON字符串轉(zhuǎn)換為Python數(shù)據(jù)類型[{k: v, k: v}, {k: v, k: v}]s = '[{"name": "張大山","age": 11}, {"name": "王大錘", "age": 13}, {"name": "趙小虎", "age": 16}]'l = json.loads(s)print(type(l))#<class 'list'>print(l)#[{'name': '張大山', 'age': 11}, {'name': '王大錘', 'age': 13}, {'name': '趙小虎', 'age': 16}]# .將JSON字符串轉(zhuǎn)換為Python數(shù)據(jù)類型{Kk: V, k: v}s = '{"name": "周杰輪", "addr": "臺北"}'d = json.loads(s)print(type(d))#<class 'dict'>print(d)#{'name': '周杰輪', 'addr': '臺北'}

    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個類別的選項:
    全局配置選項
    系列配置選項

    from pyecharts.charts import Line from pyecharts.options import TitleOpts from pyecharts.options import LegendOpts from pyecharts.options import ToolboxOpts from pyecharts.options import VisualMapOpts 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.set_global_opts(title_opts=TitleOpts("GDPshow",pos_left= "center",pos_bottom = "90%"), #添加標(biāo)題legend_opts=LegendOpts(is_show=True),#添加圖例toolbox_opts=ToolboxOpts(is_show=True),#添加工具箱visualmap_opts=VisualMapOpts(is_show=True))# 生成圖表line.render()

    想要一個好看的圖?復(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ù)!

    if __name__ == '__main__':# 1.設(shè)計一個類(類比生活中:設(shè)計一張登記表)class Student:name = None # 記錄學(xué)生姓名gender = None # 記錄學(xué)生性別nationality = None # 記錄學(xué)生國籍native_place = None # 記錄學(xué)生籍貫age = None # 記錄學(xué)生年齡# 2.創(chuàng)建一個對象(類比生活中:打印- -張登記表)stu_1 = Student()# 3.對象屬性進行賦值(類比生活中:填寫表單)stu_1.name = "林軍杰"stu_1.gender = "男"stu_1.nationality = "中國"stu_1.native_place = "山東省"stu_1.age = 31# 4.獲取對象中記錄的信息# 4.獲取對象中記錄的信息print(stu_1.name )print(stu_1.gender)print(stu_1.nationality)print(stu_1.native_place)

    02-類的成員方法

    類的定義和使用
    在上一節(jié)中,我們簡單了解到可以使用類去封裝屬性,并基于類創(chuàng)建出一一個個的對象來使用。
    現(xiàn)在我們來看看類的使用語法:

    class 類名稱:類的屬性類的行為

    ●class是關(guān)鍵字, 表示要定義類了
    ●類的屬性,即定義在類中的變量(成員變量)
    ● 類的行為, 即定義在類中的函數(shù)(成員方法)
    創(chuàng)建類對象的語法對象=類名稱()

    類內(nèi)部的函數(shù)叫(成員)方法,不叫函數(shù)。

    成員方法的定義語法

    if __name__ == '__main__':# 1.設(shè)計一個類(類比生活中:設(shè)計一張登記表)class Student:name = None # 記錄學(xué)生姓名def say_hi(self):print("he")def say_hi2(self,msg):print(f"hi,{msg}")s1 = Student()s1.say_hi()s1.say_hi2("wnm")

    可以看到,在傳入?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 wnm

    03-類和對象


    基于類創(chuàng)建對象的語法:對象名=類名稱()
    為什么非要創(chuàng)建對象才能使用呢?
    類只是一種程序內(nèi)的“設(shè)計圖紙”,需要基于圖紙生產(chǎn)實體(對象),才能正常工作,面向?qū)ο缶幊?/strong>!!!!

    設(shè)計類——就是讓類干活!

    下面代碼有聲音歐 耳機黨小心!!!!!

    if __name__ == '__main__':# 設(shè)計一個鬧鐘類class Clock:id = None# 序列化price = None# 價格def ring(self):import winsoundwinsound.Beep(2000,3000)# 構(gòu)建2個鬧鐘對象并讓其工作clock1 = Clock()clock1.id = "003032"clock1.price = 19.99print(f"鬧鐘ID: {clock1.id}, 價格: {clock1.price}")clock1.ring()#######################################clock2 = Clock()clock2.id = "003033"clock2.price = 21.99print(f"鬧鐘ID: {clock2.id}, 價格: {clock2.price}")clock2.ring()

    04-構(gòu)造方法


    構(gòu)造方法

    當(dāng)寫了構(gòu)造函數(shù):可以下面:

    if __name__ == '__main__':class Student:def __init__(self, name,age, tel):self.name = nameself.age = ageself.tel = telprint("Student類創(chuàng)建了一個類對象")stu = Student("周杰輪",31, "18500006666")

    05-魔術(shù)方法


    __ str __

    if __name__ == '__main__':class Student:def __init__(self, name, age):self.name = name# 學(xué)生姓名self.age = age# 學(xué)生年齡# __ str__魔術(shù)方法def __str__(self):return f"Student類對象,name:{self.name}, age:{self.age}"stu = Student("周杰輪",31)print(stu)print(str(stu)) #Student類對象,name:周杰輪, age:31 #Student類對象,name:周杰輪, age:31

    if __name__ == '__main__':class Student:def __init__(self, name, age):self.name = name# 學(xué)生姓名self.age = age# 學(xué)生年齡# __ str__魔術(shù)方法def __str__(self):return f"Student類對象,name:{self.name}, age:{self.age}"#__lt__魔術(shù)方法.def __lt__(self,other):return self.age < other.agestu1 = Student("周杰輪",31)stu2 = Student("周輪", 3)print(stu1<stu2)

    __ le __ (小于等于) 和__ eq __(等于)類似

    06-封裝

    面向?qū)ο蟮娜筇匦?/strong>
    面向?qū)ο缶幊?#xff0c;是許多編程語言都支持的一種編程思想。
    簡單理解是:基于模板(類)去創(chuàng)建實體(對象) ,使用對象完成功能開發(fā)。
    面向?qū)ο蟀?大主要特性:
    ?封裝
    ?繼承
    ?多態(tài)

    封裝


    所以會有平果越獄和俺卓root的行為,我們想獲取他不想讓我們看到的東西。


    if __name__ == '__main__':class Phone:__current_voltage = 0.5# 當(dāng)前手機運行電壓def __keep_single_core(self):print("讓CPU以單核模式運行")def call_by_5g(self):if self.__current_voltage >= 1:print("5g通話已開啟")else:self.__keep_single_core()print("電量不足,無法使用5g通話,并已設(shè)置為單核運行進行省電。")phone = Phone()phone.call_by_5g()

    1.封裝的概念是指?
    將現(xiàn)實世界事物在類中描述為屬性和方法,即為封裝。

    2.什么是私有成員?為什么需要私有成員?
    現(xiàn)實事物有部分屬性和行為是不公開對使用者開放的。同樣在類中描述
    屬性和方法的時候也需要達到這個要求,就需要定義私有成員了

    3.如何定義私有成員?
    成員變量和成員方法的命名均以__作為開頭即可

    4.私有成員的訪問限制?
    類對象無法訪問私有 成員
    類中的其它成員可以訪問私有成員

    07-封裝的課后練習(xí)題講解

    案例分析:

    if __name__ == '__main__':class Phone:# 提供私有成員變量:__ is_ 5g_ enabZe__is_5g_enable = False# 5g狀態(tài)# 提供私有成員方法: __ check_ 5g()def __check_5g(self):if self.__is_5g_enable:print("5g開啟")else:print("5g關(guān)閉,使用4g網(wǎng)絡(luò)|")# 提供公開成員方法: call_by_5g()# 提供公開成員方法: calL_ ,by_ .5g()def call_by_5g(self):self.__check_5g()print("正在通話中")phone = Phone()phone.call_by_5g()'''5g關(guān)閉,使用4g網(wǎng)絡(luò)|正在通話中'''

    08-繼承的基礎(chǔ)語法


    繼承的引出:

    單繼承:

    class 類名(父類名):類內(nèi)容體


    其中pass關(guān)鍵字是補全語法。讓語法補充,避免錯誤。當(dāng)輸出同名屬性時,以前面為準(zhǔn),聽大爸的。

    09-復(fù)寫父類成員和調(diào)用父類成員

    什么是復(fù)寫

    if __name__ == '__main__':class Phone:IMEI = None# 序列號producer = "ITCAST" # 廠商def call_by_5g(se1f):print("父類的5g通話")class MyPhone(Phone):proucer = "ITHEIMA"# 復(fù)寫父類屬性def call_by_5g(se1f):# 復(fù)寫父類方法print("子類的5g通話")phone = MyPhone()print(phone.proucer)phone.call_by_5g()'''ITHEIMA子類的5g通話'''

    調(diào)用父類的同名成員

    if __name__ == '__main__':class Phone:IMEI = None# 序列號producer = "ITCAST" # 廠商def call_by_5g(se1f):print("父類的5g通話")class MyPhone(Phone):proucer = "ITHEIMA"# 復(fù)寫父類屬性def call_by_5g(se1f):print(f"父類的廠商是:{Phone.producer}")# 復(fù)寫父類方法print("子類的5g通話")Phone.call_by_5g(se1f)print(f"父類的廠商是:{super().producer}")super().call_by_5g()phone = MyPhone()print(phone.proucer)phone.call_by_5g()'''ITHEIMA父類的廠商是:ITCAST子類的5g通話父類的5g通話父類的廠商是:ITCAST父類的5g通話'''

    10-變量的類型注解







    if __name__ == '__main__':# 基礎(chǔ)數(shù)據(jù)類型注解var_1: int = 10var_2: str = "itheima"var_3: bool = True# 類對象類型注解class Student:passstu:Student = Student()# 基礎(chǔ)容器類型注解.my_list: list = [1, 2, 3]my_tupLe: tuple = (1, 2,3)my_dict: dict = {"itheima": 666}# 在注釋中進行類型注解my_list= [1,2, 3] #type:listmy_tuple= ("itheima", 666, True)#type:tuple[str, int, bool]# 類型注解的限制var_7: str = 10 #沒事 但是是給自己看的

    11-函數(shù)和方法類型注解


    函數(shù)和方法的形參類型注解語法:

    def 函數(shù)方法名(形參名:類型,形參名:類型,......):pass


    同時,函數(shù)(方法)的返回值也是可以添加類型注解的。

    def函數(shù)方法名(形參:類型.......形參:類型)-> q返回值類型: pass

    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

    class Record:#定義4個成員變量def __init__(self,data,order_id,money,provine):self.date = data #訂單日期self.order_id = order_id#訂單IDself.money = money#訂單金額self.provine = provine#訂單省份def __str__(self):return (f"{self.date},{self.order_id},{self.money},{self.provine}")

    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

    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 TitleOpts from pyecharts.options import LabelOpts from pyecharts.options import InitOpts text_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(init_opts=InitOpts(theme=ThemeType.LIGHT))bar.add_xaxis(list(data_dict.keys())) bar.add_yaxis("銷售額",list(data_dict.values()),label_opts=LabelOpts(is_show =False )) bar.set_global_opts(title_opts = TitleOpts(title="每日銷售額") ) bar.render("每日銷售額柱狀圖.html")

    總結(jié)

    以上是生活随笔為你收集整理的黑马程序员最新Python教程——第一阶段(3)第二阶段(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。