<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          普通高中選課數(shù)據(jù)分析和可視化(2)

          共 3494字,需瀏覽 7分鐘

           ·

          2021-05-27 19:09

          前情回顧:

          上一篇文章我們介紹了“普通高中選課數(shù)據(jù)分析和可視化”項(xiàng)目的“項(xiàng)目目標(biāo)”,“項(xiàng)目準(zhǔn)備階段”和“項(xiàng)目實(shí)施過程”的第1部分“3.1  7選3單科數(shù)據(jù)處理”,接下來我們繼續(xù)項(xiàng)目實(shí)踐之旅。


          “普通高中選課數(shù)據(jù)分析和可視化”項(xiàng)目分析報(bào)告(第2部分)

          3.2  繪制各校各科人數(shù)柱狀圖
          我們引用了第三方庫matplotlibcsv文件中讀取某市16所普通高中選課匯總數(shù)據(jù)。MatplotlibPython2D繪圖庫,它可與numpy一起使用,僅需要幾行代碼,便可以生成直方圖、條形圖,餅圖、散點(diǎn)圖等高質(zhì)量圖形,提供了一種有效的MatLab開源替代方案。
          我們使用語句import matplotlib.pyplot as plt引入庫,然后打開"xk73.csv"文件,讀取某市普通高中選課匯總數(shù)據(jù),存儲到DataFrame對象df中;然后按學(xué)校分組計(jì)數(shù),調(diào)用DataFrame.plot方法繪制各校各科人數(shù)堆積柱狀圖,還可以分成多個(gè)子圖,分別繪制各校各科人數(shù)柱狀圖(如下圖所示)。

          3 各校各科選考人數(shù)堆積柱狀圖

          4 各校各科選考人數(shù)柱狀圖(多子圖)
          核心代碼(完整代碼詳見源代碼文件“73繪制各校各科人數(shù)柱狀圖.py”):
          #調(diào)用DataFrame.plot方法繪制各校各科人數(shù)柱狀圖(去除總?cè)藬?shù))#將索引更名為學(xué)校代碼,以便更好顯示橫坐標(biāo)sc = sc.rename(index={i:school[i] for i in sc.index})sc[kms[1:]].plot(kind='bar',rot=0, stacked=True)
          #調(diào)用DataFrame.plot方法分別繪制各校各科人數(shù)柱狀圖(包含總?cè)藬?shù))colors = ('purple', 'red','green','orange','cyan','lime','gold','blue')col = m // 3 #最大列數(shù)n = (len(school)+col-1) // col #最大行數(shù)#劃分子圖,分成n*col個(gè)區(qū)域,并設(shè)置各個(gè)子圖的寬、高和繪圖分辨率fig, axes = plt.subplots(n, col,figsize=(8, 12), dpi=80)for i, k in enumerate(school, start=0): #遍歷每一所學(xué)校,繪制各校選課人數(shù)餅圖 plt.subplots_adjust(hspace = 0.4) #為子圖之間的空間保留的高度 for j, km in enumerate(kms, start=0): axes[i//col,i%col].bar(km, sc.loc[k][km], color=colors[j]) axes[i//col,i%col].set_title("學(xué)校"+k+"各科人數(shù)") #為每個(gè)子圖設(shè)置標(biāo)題
          plt.show()

          3.3  繪制各校各科人數(shù)雷達(dá)圖
             和繪制柱狀圖一樣,我們需要先對DataFrame對象df按學(xué)校分組計(jì)數(shù),再去繪制各校各科人數(shù)雷達(dá)圖。我們既可以在同一個(gè)區(qū)域繪制各校各科選考人數(shù)雷達(dá)圖,也可以分成多個(gè)子圖,分別繪制各校各科選考人數(shù)雷達(dá)圖(如下圖所示)。

          5 各校各科選考人數(shù)雷達(dá)圖

          6 各校各科選考人數(shù)雷達(dá)圖(多子圖)
          核心代碼(完整代碼詳見源代碼文件“73繪制各校各科人數(shù)雷達(dá)圖.py”):
          #根據(jù)子圖的行列數(shù)、編號、標(biāo)題、顏色、變量列表、角度列表、數(shù)據(jù)列表、圖例標(biāo)簽和極徑范圍繪制雷達(dá)圖def draw_polar(rows, cols, num, title, color, categories, angles, values, label, rlim):    # 初始化極坐標(biāo)網(wǎng)格    ax = plt.subplot(rows, cols, num, projection='polar')    ax.set_rlabel_position(0) #于設(shè)置極徑標(biāo)簽顯示位置    ax.set_rlim(0, rlim) #設(shè)置顯示的極徑范圍    # If you want the first axis to be on top:    ax.set_theta_offset(pi / 2)# 設(shè)置角度偏移    ax.set_theta_direction(-1)# 設(shè)置順時(shí)針還是逆時(shí)針,1或者-1    # 設(shè)置標(biāo)簽    plt.xticks(angles[:-1], categories)    plt.yticks([i for i in range(100, rlim, 100)], [str(i) for i in range(100, rlim, 100)], color="grey", size=7)    # 繪制雷達(dá)圖    ax.plot(angles, values, linewidth=1, linestyle='solid', label=label)    ax.fill(angles, values, color, alpha=0.1)    plt.title(title, size=11, color=color, y=1.2)

          ?


          3.4  繪制各校各科人數(shù)占比餅圖
          和繪制柱狀圖一樣,我們需要先對DataFrame對象df按學(xué)校分組計(jì)數(shù),再去繪制各???cè)藬?shù)占比餅圖,或者分成多個(gè)子圖,分別繪制各校各科人數(shù)占比餅圖(如下圖所示)。

          7 各校選考總?cè)藬?shù)占比餅圖

          8 各校各科選考人數(shù)占比餅圖(多子圖)
          核心代碼(完整代碼詳見源代碼文件“73繪制各校各科人數(shù)餅圖.py”):
          #繪制各???cè)藬?shù)占比餅圖labels = [str(i)[-2:] for i in sc['學(xué)校代碼']]sizes = sc['人數(shù)'].valuesexplode = [0] * len(sizes)plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)plt.title("各???cè)藬?shù)占比餅圖")plt.axis('equal')   #該行代碼使餅圖長寬相等
          #分別繪制各校各科人數(shù)占比餅圖col = m // 3 #最大列數(shù)n = (len(school)+col-1) // col #最大行數(shù)#劃分子圖,分成n*col個(gè)區(qū)域,并設(shè)置各個(gè)子圖的寬、高和繪圖分辨率fig, axes = plt.subplots(n, col,figsize=(8, 8), dpi=100)for i, k in enumerate(school, start=0): #遍歷每一所學(xué)校,繪制各校選課人數(shù)餅圖 labels = kms #(每一塊)餅圖外側(cè)顯示的說明文字 sizes = sc.iloc[i].values[2:] #(每一塊)的比例,如果sum(x) > 1會(huì)使用sum(x)歸一化 explode = [0] * len(sizes) #(每一塊)離開中心距離 axes[i//col,i%col].pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150) axes[i//col,i%col].set_title("學(xué)校"+k+"各科人數(shù)占比餅圖") #為每個(gè)子圖設(shè)置標(biāo)題
          plt.show()

          說明:因?yàn)楸卷?xiàng)目內(nèi)容較多,故寫成系列文章分成多次分享,請大家稍安勿躁哦。

          需要本文word版或者相關(guān)源代碼的,可以加入“Python算法之旅”知識星球參與討論和下載文件,Python算法之旅”知識星球匯集了數(shù)量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。


          我們專注Python算法,感興趣就一起來!



          相關(guān)優(yōu)秀文章:

          閱讀代碼和寫更好的代碼

          最有效的學(xué)習(xí)方式

          斌哥教你自制多功能單詞本

          普通高中選課數(shù)據(jù)分析和可視化(1)


          瀏覽 66
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文无码视频在线 | 天天舔天天操 | 亚洲成人MV | 高清无码视频在线免费观看 | 亚洲另类视频 |