目錄
【實驗目的】
【實驗原理】
【實驗環境】
【實驗步驟】
【實驗總結】
【實驗目的】
-
掌握時間數據在大數據中的應用
-
掌握時間數據可視化圖表表示
-
利用Python程序實現堆疊柱形圖可視化
【實驗原理】
????????時間是一個非常重要的維度與屬性。時間序列數據存在于社會的各個領域, 如:天文觀測數據、氣象圖像、臨床診斷記錄等。診斷記錄包括病人的每次看病的 病情記錄以及心電圖等掃描儀器的數據記錄等。金融和商業交易記錄如股市每天的 交易價格及交易量、超市中每種商品的銷售情況等。不管是延續性還是暫時性的時 間數據,可視化的最終的目的就是從中發現趨勢。時間型數據包含時間屬性,不僅 要表達數據隨時間變化的規律,還需表達數據分布的時間規律。它可以分為連續性 和離散型時間數據。
????????這里就講述下離散型數據的堆疊柱形圖,堆疊柱形圖的幾何形狀和常規柱形圖 很相似,在柱形圖中,數據值為并行排列,而在堆疊柱圖則是一個個疊加起來的。 它的特點就是如果數據存在子分類,并且這些子分類相加有意義的話,此時就可以 使用堆疊柱形圖來表示。本次實驗結合本章講述的堆疊柱形圖的列子,這里我們要 畫的是極坐標系-堆疊柱狀圖,也是南丁格爾玫瑰圖。由于半徑和面積的關系是平方 的關系,南丁格爾玫瑰圖會將數據的比例大小夸大,尤其適合對比大小相近的數 值;由于圓形有周期的特性,所以玫瑰圖也適用于表示一個周期內的時間概念,比 如星期、月份。下面就用Python程序來實現。
【實驗環境】
????????OS:Windows 12th Gen Intel(R) Core(TM) i7-12700H ? 2.30 GHz
????????Python:v3.8
【實驗步驟】
1.下載數據源(http://datasets.flowingdata.com/hot-dog-places.csv )歷年熱狗大胃王比賽的前三名的成績。
hot-dog-places.c sv 里面的數據格式如下:
把hot-dog-places.csv文件保存在自己的目錄里面。比如(D:/test/)
2. 打開終端,安裝Python所需要的第三方的包,輸入
pip install pyecharts
3. 打開pycharm,新建文件,開始編寫程序實現極坐標的堆疊柱形圖。
from pyecharts import options as opts
from pyecharts.charts import Polar, Page
import csv# 1. 數據讀取(處理浮點數值)
filename = "D:\\數據可視化\\hot-dog-places.csv"
datax = []
with open(filename) as f:reader = csv.reader(f)for row in reader:datax.append(row)radius = datax[0] # 半徑軸標簽(時間)
# 關鍵修改:使用 float() 轉換后再轉 int 避免 ValueError [1,3](@ref)
y1 = [int(float(i)) for i in datax[1]] # 截斷小數處理
y2 = [round(float(i)) for i in datax[2]] # 四舍五入處理
y3 = [int(float(i)) for i in datax[3]]# 2. 半徑表示時間的堆疊圖(保持原設計)
c = (Polar().add_schema(radiusaxis_opts=opts.RadiusAxisOpts(data=radius, type_="category"),angleaxis_opts=opts.AngleAxisOpts(is_clockwise=True)).add("A", y1, type_="bar", stack="stack0",itemstyle_opts=opts.ItemStyleOpts(color="#FF6347")) # 設置顏色為番茄紅.add("B", y2, type_="bar", stack="stack0",itemstyle_opts=opts.ItemStyleOpts(color="#4682B4")) # 設置顏色為鋼青.add("C", y3, type_="bar", stack="stack0",itemstyle_opts=opts.ItemStyleOpts(color="#32CD32")) # 設置顏色為酸橙綠.set_global_opts(title_opts=opts.TitleOpts(title="半徑表示時間"),# 添加數據標簽顯示[5](@ref)tooltip_opts=opts.TooltipOpts(trigger="axis"))
)# 3. 圓邊表示時間的堆疊圖(優化樣式)
d = (Polar().add_schema(angleaxis_opts=opts.AngleAxisOpts(data=radius,type_="category",is_clockwise=True,# 優化標簽顯示[5](@ref)axislabel_opts=opts.LabelOpts(color="#333", font_size=12)),radiusaxis_opts=opts.RadiusAxisOpts(type_="value",# 添加網格線[7](@ref)splitline_opts=opts.SplitLineOpts(is_show=True))).add("A", y1, type_="bar", stack="stack0",# 設置顏色透明度[2](@ref)itemstyle_opts=opts.ItemStyleOpts(opacity=0.8, color="#FF6347")) # 設置顏色為番茄紅.add("B", y2, type_="bar", stack="stack0",itemstyle_opts=opts.ItemStyleOpts(opacity=0.8, color="#4682B4")) # 設置顏色為鋼青.add("C", y3, type_="bar", stack="stack0",itemstyle_opts=opts.ItemStyleOpts(opacity=0.8, color="#32CD32")) # 設置顏色為酸橙綠.set_global_opts(title_opts=opts.TitleOpts(title="圓邊表示時間"),# 添加圖例[7](@ref)legend_opts=opts.LegendOpts(pos_left="right"))
)# 4. 合并圖表(優化布局)
page = Page(layout=Page.SimplePageLayout)
page.add(c, d)
# 設置頁面尺寸[3](@ref)
page.render_options = {"width": "1600px", "height": "800px"}
page.render("render.html")
????????最后呈現的圖形如下: (這里我們畫了兩種極坐標的堆疊柱形圖,一個是半徑表示時間,一個是圓邊 表示時間。并把兩張圖顯示在一個render.html里面)
4.對于該數據集,換一種合適的圖表方式展示(例如雷達圖),并寫出相關代碼。
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Radar# 加載數據
data = pd.read_csv('hot-dog-places.csv')# 提取年份和數據
years = data.columns.tolist()
values1 = data.iloc[0].tolist()
values2 = data.iloc[1].tolist()
values3 = data.iloc[2].tolist()# 配置雷達圖的指標
c_schema = [{"name": year, "max": max(values1[i], values2[i], values3[i]) + 10} for i, year in enumerate(years)]# 創建雷達圖
radar = (Radar().add_schema(schema=c_schema).add("數據系列1", [values1], color="#f9713c").add("數據系列2", [values2], color="#b3e4a1").add("數據系列3", [values3], color="#d14a61").set_global_opts(title_opts=opts.TitleOpts(title="歷年熱狗大胃王比賽的前三名的成績的雷達圖"),legend_opts=opts.LegendOpts(is_show=True),toolbox_opts=opts.ToolboxOpts(is_show=True))
)# 渲染圖表
radar.render("hot_dog_places.html")
運行結果如下所示:
【實驗總結】
????????本次實驗通過Python實現堆疊柱形圖與雷達圖的繪制,可以掌握時間數據處理與可視化方法。實驗借助歷年熱狗大胃王比賽成績數據集,將時間數據作為關鍵維度進行分析,通過繪制堆疊柱形圖和雷達圖,直觀展示了比賽成績隨時間的變化趨勢,并且成功運用Python的pyecharts庫實現了極坐標系下的堆疊柱形圖可視化,達成了實驗目標。實驗中使用Page類將兩個堆疊柱形圖整合到一個HTML文件中,方便對比和展示。
????????實驗成功繪制出極坐標系下的堆疊柱形圖,直觀展示了歷年熱狗大胃王比賽前三名成績的變化趨勢。半徑表示時間的圖表突出了不同年份成績的對比,圓邊表示時間的圖表則更清晰地展示了各名次成績在時間周期內的分布。通過雷達圖,清晰地呈現了歷年熱狗大胃王比賽前三名成績的綜合情況,方便對不同年份和名次的成績進行多維度對比。 本次實驗僅針對特定數據集進行了可視化分析。在未來的研究中,可以嘗試將實驗方法應用于其他類型的時間序列數據,拓展實驗的應用范圍。