版本說明
當(dāng)前版本號[20230729]。
版本 | 修改說明 |
---|---|
20230729 | 初版 |
目錄
知識總覽圖
Python基礎(chǔ)綜合案例:數(shù)據(jù)可視化 - 折線圖可視化
效果一:2020年印美日新冠累計確診人數(shù)
? 2020年是新冠疫情爆發(fā)的一年, 隨著疫情的爆發(fā), 國內(nèi)外確診人數(shù)成了大家關(guān)心的熱點(diǎn), 相信大家都有看過類似的疫情報告. 本案例對印度美國日本三個國家確診人數(shù)的進(jìn)行了可視化處理, 形成了可視化的疫情確診人數(shù)報告.
效果二:全國疫情地圖可視化
效果三:動態(tài)GDP增長圖
數(shù)據(jù)來源
本案例數(shù)據(jù)全部來自 <<百度疫情實時大數(shù)據(jù)報告>>,及公開的全球各國GDP數(shù)據(jù)
使用的技術(shù)
? Echarts 是個由百度開源的數(shù)據(jù)可視化,憑借著良好的交互性,精巧的圖表設(shè)計,得到了眾多開發(fā)者的認(rèn)可. 而 Python 是門富有表達(dá)力的語言,很適合用于數(shù)據(jù)處理. 當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時pyecharts 誕生了.
json數(shù)據(jù)格式
什么是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ù)為例:
json格式數(shù)據(jù)轉(zhuǎn)化
json格式的數(shù)據(jù)要求很嚴(yán)格, 下面我們看一下他的要求
# json數(shù)據(jù)的格式可以是:
{"name":"admin","age":18}
# 也可以是:
[{"name":"admin","age":18},{"name":"root","age":16},{"name":"張三","age":20}]
Python數(shù)據(jù)和Json數(shù)據(jù)的相互轉(zhuǎn)化
# 導(dǎo)入json模塊
import json
# 準(zhǔn)備符合格式j(luò)son格式要求的python數(shù)據(jù)
data = [{"name": "老王", "age": 16}, {"name": "張三", "age": 20}]
# 通過 json.dumps(data) 方法把python數(shù)據(jù)轉(zhuǎn)化為了 json數(shù)據(jù)
json_data = json.dumps(data, ensure_ascii=False)
print(type(json_data))
print(f"python數(shù)據(jù)轉(zhuǎn)化為了json數(shù)據(jù)的結(jié)果:{json_data}")
# 通過 json.loads(data) 方法把json數(shù)據(jù)轉(zhuǎn)化為了 python數(shù)據(jù)
python_data = json.loads(json_data)
print(type(python_data))
print(f"json數(shù)據(jù)轉(zhuǎn)化為了python數(shù)據(jù)的結(jié)果:{python_data}")
結(jié)果如下:(可見json和python里面對元素要求的格式也不一樣,一個雙引號一個單引號)
注:
通過 json.dumps(data) 方法把python數(shù)據(jù)轉(zhuǎn)化為了 json數(shù)據(jù)
data = json.dumps(data)
如果有中文可以帶上:ensure_ascii=False參數(shù)來確保中文正常轉(zhuǎn)換
通過 json.loads(data) 方法把josn數(shù)據(jù)轉(zhuǎn)化為了 python列表或字典
data = json.loads(data)
pyecharts模塊介紹
? 如果想要做出數(shù)據(jù)可視化效果圖, 可以借助pyecharts模塊來完成
概況
? Echarts 是個由百度開源的數(shù)據(jù)可視化,憑借著良好的交互性,精巧的圖表設(shè)計,得到了眾多開發(fā)者的認(rèn)可. 而 Python 是門富有表達(dá)力的語言,很適合用于數(shù)據(jù)處理.
? 當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時pyecharts 誕生了.
如何查看官方示例
打開官方畫廊:
https://gallery.pyecharts.org/#/README
使用在前面學(xué)過的pip命令即可快速安裝PyEcharts模塊
pip install pyecharts
pyecharts快速入門
基礎(chǔ)折線圖
示例代碼:
from pyecharts.charts import Line
line = Line()
line.add_xaxis(["炸雞", "薯條", "漢堡"])
line.add_yaxis("價格", [45, 33, 23])
line.render()
生成圖表:
pyecharts有哪些配置選項
lpyecharts模塊中有很多的配置選項, 常用到2個類別的選項:
- 全局配置選項
- 系列配置選項
set_global_opts方法
? 這里全局配置選項可以通過set_global_opts方法來進(jìn)行配置, 相應(yīng)的選項和選項的功能如下:
? 全局配置項能做什么?
-
配置圖表的標(biāo)題
-
配置圖例
-
配置鼠標(biāo)移動效果
-
配置工具欄
-
等整體配置項
? 系列配置項,我們在后面構(gòu)建案例時講解
數(shù)據(jù)處理
原始數(shù)據(jù)格式:
導(dǎo)入模塊:
再根據(jù)層級,一步步地去獲?。?/p>
對數(shù)據(jù)進(jìn)行整理, 讓數(shù)據(jù)符合json格式:
import json
f_us = open("F:/美國.txt", "r", encoding="UTF-8")//打開文件
us_data = f_us.read()//全部讀出來
# 把不符合json數(shù)據(jù)格式的 "jsonp_1629344292311_69436(" 去掉 ,再賦值回us_data
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
# 把不符合json數(shù)據(jù)格式的 ");" 去掉,從后往前數(shù)去掉最后兩個字節(jié)
us_data = us_data[:-2]
# 數(shù)據(jù)格式符合json格式后,對數(shù)據(jù)進(jìn)行轉(zhuǎn)化成字典
us_dict = json.loads(us_data)
# 獲取美國的疫情數(shù)據(jù)
trend_data = us_dict['data'][0]['trend']
# x1_data存放2020年日期數(shù)據(jù)
x_data = trend_data['updateDate'][:314]
# y1_data存放2020年人數(shù)數(shù)據(jù)
y_data = trend_data['list'][0]['data'][:314]
print(x_data)
print(y_data)
創(chuàng)建折線圖
導(dǎo)入模塊
折線圖相關(guān)配置項
創(chuàng)建折線圖
- 這里的Line()是構(gòu)建類對象,我們先不必理解是什么意思,后續(xù)在Python高階中進(jìn)行詳細(xì)講解。
- 目前我們簡單的會用即可
添加數(shù)據(jù)
.add_yaxis相關(guān)配置選項
set_global_opts全局配置選項
.set_global_opts(
# 設(shè)置圖標(biāo)題和位置
title_opts=opts.TitleOpts(title="2020年 印????美????日???? 累計確診人數(shù)對比圖",pos_left="center"),
# x軸配置項
xaxis_opts=opts.AxisOpts(name=“時間”), # 軸標(biāo)題
# y軸配置項
yaxis_opts=opts.AxisOpts(name=“累計確診人數(shù)”), # 軸標(biāo)題
# 圖例配置項
legend_opts=opts.LegendOpts(pos_left=‘70%‘), # 圖例的位置
)
示例代碼:
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts, LegendOpts, ToolboxOpts, AxisPointerOpts
f_us = open("F:/美國.txt", "r", encoding="UTF-8")
f_jp = open("F:/日本.txt", "r", encoding="UTF-8")
f_in = open("F:/印度.txt", "r", encoding="UTF-8")
us_data = f_us.read()
jp_data = f_jp.read()
in_data = f_in.read()
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")
us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)
trendus_data = us_dict['data'][0]['trend']
trendjp_data = jp_dict['data'][0]['trend']
trendin_data = in_dict['data'][0]['trend']
us_x_data = trendus_data['updateDate'][:314]
jp_x_data = trendjp_data['updateDate'][:314]
in_x_data = trendin_data['updateDate'][:314]
us_y_data = trendus_data['list'][0]['data'][:314]
jp_y_data = trendjp_data['list'][0]['data'][:314]
in_y_data = trendin_data['list'][0]['data'][:314]
epidemic_line = Line() //構(gòu)建折線圖對象
epidemic_line.add_xaxis(us_x_data) //x軸上的數(shù)據(jù)是共用的,所以使用一個國家的數(shù)據(jù)即可
epidemic_line.add_yaxis("美國確診人數(shù)", us_y_data, label_opts=LabelOpts(is_show=False))
epidemic_line.add_yaxis("日本確診人數(shù)", jp_y_data, label_opts=LabelOpts(is_show=False))
epidemic_line.add_yaxis("印度確診人數(shù)", in_y_data, label_opts=LabelOpts(is_show=False))
//label_opts=LabelOpts(is_show=False) 是指不顯示標(biāo)簽上的數(shù)字,看起來就不會那么雜
epidemic_line.set_global_opts(
title_opts=TitleOpts(title="2020年美日印確診人數(shù)對比折線圖", pos_left="center", pos_bottom="1%"),
legend_opts=LegendOpts(is_show=True),
toolbox_opts=ToolboxOpts(is_show=True),
axispointer_opts=AxisPointerOpts()
)
#調(diào)用方法,生成圖表
epidemic_line.render()
#關(guān)閉文件對象
f_us.close()
f_jp.close()
f_in.close()
折現(xiàn)圖以下:文章來源:http://www.zghlxwxcb.cn/news/detail-617309.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-617309.html
到了這里,關(guān)于Python-Python基礎(chǔ)綜合案例:數(shù)據(jù)可視化 - 折線圖可視化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!