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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

利用动态气泡图进行数据分析

發(fā)布時間:2023/12/20 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用动态气泡图进行数据分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ???作者:林驥

? ? ?來源:林驥

01

你好,我是林驥。

一個動態(tài)氣泡圖,可以展現(xiàn)多個維度的信息。

比如說,要對比分析中國和美國從 1800 年以來每年的人口數(shù)量、人均收入和預(yù)期壽命,我們可以這樣設(shè)置每個維度代表的含義:

(1)X 軸:人均收入;

(2)Y 軸:預(yù)期壽命;

(3)氣泡大小:人口;

(4)氣泡顏色:國家;

(5)時間變化:年份。

利用 matplotlib 制作動畫的功能,我做了一個動態(tài)氣泡圖的視頻:

在作圖的細(xì)節(jié)方面,我做了一下刻意的調(diào)整:

(1)圖表標(biāo)題文字用深灰色,并且左對齊;

(2)X 軸和 Y 軸的標(biāo)題與數(shù)字對齊,豎向的文字分行逐字顯示;

(3)氣泡的顏色與對應(yīng)的文字使用接近的顏色;

(4)去掉網(wǎng)格線、圖例、邊框、刻度線等元素;

(5)只選取兩個國家的數(shù)據(jù)。

以上這些刻意的調(diào)整,主要是為了更加突出地展現(xiàn)數(shù)據(jù)本身,或許讓人看起來比較「素顏」,但是不要忘了我們作圖的目標(biāo),是讓觀眾更加快速地理解想要表達(dá)的信息,而不是靠「濃妝艷抹」去吸人眼球。

數(shù)據(jù)可視化,有時需要有批判性思維,突出數(shù)據(jù)中的重要內(nèi)容。我們可以從設(shè)計師身上學(xué)習(xí),多想一想數(shù)據(jù)可視化的目標(biāo)是什么,盡可能讓數(shù)據(jù)更利于觀眾理解,而不能拿著數(shù)字,就開始盲目地畫圖。

02

接下來,我們看看用 matplotlib 畫圖的具體步驟。

首先,導(dǎo)入所需的庫,并設(shè)置中文字體和定義顏色等。

# 導(dǎo)入所需的庫 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation# 正常顯示中文標(biāo)簽 mpl.rcParams['font.sans-serif'] = ['SimHei']# 自動適應(yīng)布局 mpl.rcParams.update({'figure.autolayout': True})# 正常顯示負(fù)號 mpl.rcParams['axes.unicode_minus'] = False# 禁用科學(xué)計數(shù)法 pd.set_option('display.float_format', lambda x: '%.2f' % x)# 定義顏色,主色:藍(lán)色,輔助色:灰色,互補色:橙色 colors = {'藍(lán)色':'#00589F', '深藍(lán)色':'#003867', '淺藍(lán)色':'#5D9BCF','灰色':'#999999', '深灰色':'#666666', '淺灰色':'#CCCCCC','橙色':'#F68F00', '深橙色':'#A05D00', '淺橙色':'#FBC171'}

其次,從 Excel 文件中讀取數(shù)據(jù),并定義畫圖用的數(shù)據(jù)。

# 讀取從 https://www.gapminder.org/data 下載的 Excel文件 dfx = pd.read_excel('./data/income_per_person.xlsx', index_col='country') dfy = pd.read_excel('./data/life_expectancy_years.xlsx', index_col='country') dfs = pd.read_excel('./data/population_total.xlsx', index_col='country')

接下來,開始用「面向?qū)ο蟆沟姆椒ㄟM(jìn)行畫圖。

# 使用「面向?qū)ο蟆沟姆椒ó媹D,定義圖片的大小 fig, ax = plt.subplots(figsize=(9, 6))# 設(shè)置邊框顏色 ax.spines['top'].set_visible(False) ax.spines['bottom'].set_visible(False) ax.spines['left'].set_visible(False) ax.spines['right'].set_visible(False)# 隱藏刻度線 ax.tick_params(axis='x', which='major', length=0) ax.tick_params(axis='y', which='major', length=0)# 設(shè)置坐標(biāo)標(biāo)簽字體大小和顏色 ax.tick_params(labelsize=16, colors=colors['深灰色'])# 動畫函數(shù) def animate(year):# 先清空畫布,讓畫面動態(tài)顯示新的數(shù)據(jù)ax.cla()# 設(shè)置標(biāo)題ax.text(-11000, 106, '\n中美人口數(shù)量、人均收入和預(yù)期壽命的動態(tài)變化\n', fontsize=26, color=colors['深灰色'])# 主要通過數(shù)字 year 來控制圖形的變化,year = 0 代表第 1 年,當(dāng) year 增加,相應(yīng)的畫圖數(shù)據(jù)發(fā)生變化# 中國數(shù)據(jù)x = dfx.loc['China'].iloc[year, ]y = dfy.loc['China'].iloc[year, ]s = dfs.loc['China'].iloc[year, ]/100000000# 畫氣泡圖ax.scatter(x, y, s*500, c = colors['淺藍(lán)色'], alpha=0.9)# 設(shè)置顯示的文本標(biāo)簽ax.text(x, y-18.5, '中國 ' + '%.2f' % s + ' 億人\n$' + '%.0f' % x + ',' + '%.1f' % y + ' 歲', fontsize=16, c = colors['深藍(lán)色'], ha='center', va='center')# 美國數(shù)據(jù)x = dfx.loc['United States'].iloc[year, ]y = dfy.loc['United States'].iloc[year, ]s = dfs.loc['United States'].iloc[year, ]/100000000# 畫氣泡圖ax.scatter(x, y, s*500, c = colors['淺橙色'], alpha=0.9)# 設(shè)置顯示的文本標(biāo)簽ax.text(x, y+15.5, '美國 ' + '%.2f' % s + ' 億人\n$' + '%.0f' % x + ',' + '%.1f' % y + ' 歲', fontsize=16, c = colors['深橙色'], ha='center', va='top')# 設(shè)置坐標(biāo)軸范圍ax.set_xlim(-5000, 65000)ax.set_ylim(0, 100)# 設(shè)置 X、Y 軸的標(biāo)題,適當(dāng)留白ax.text(-1000, -15, '人均收入$', ha='left', fontsize=16, color=colors['深灰色'])ax.text(-11000, 103, '預(yù)\n期\n壽\n命', va='top', fontsize=16, color=colors['深灰色'])# 更新文本的位置和內(nèi)容x_mean = (ax.get_xlim()[0] + ax.get_xlim()[1]) / 2y_mean = (ax.get_ylim()[0] + ax.get_ylim()[1]) / 2ax.text(x_mean, y_mean, str(1800 + year), ha='center', va='center', fontsize=260, color=colors['灰色'], zorder=-1, alpha=0.2)# 用函數(shù)的方式繪制動畫,frames 表示動畫的張數(shù), interval 表示間隔毫秒數(shù) anim = FuncAnimation(fig, animate, frames=220, interval=100)# 保存為 mp4 的文件格式 anim.save('動態(tài)氣泡圖.mp4')

你可以前往 https://github.com/linjiwx/mp 下載畫圖用的數(shù)據(jù)和完整代碼。

03

下面對這個動態(tài)氣泡圖做一個簡單的數(shù)據(jù)分析。

兩個氣泡的位置在不斷變化,整體趨勢都是從左下角向右上角移動,左下角代表貧窮和疾病,右上角代表富有和健康,說明兩個國家的人們變得越來越富有、越來越長壽;氣泡的大小也在不斷變化,整體趨勢是越變越大,代表人口越來越多。

在這個動態(tài)氣泡圖中,有短暫向下的波動,如果我們追溯當(dāng)年發(fā)生的事件,那么就會發(fā)現(xiàn),戰(zhàn)爭等重大災(zāi)難對人們的預(yù)期壽命影響非常大。

從上面的分析可以看出,真正有意思的,并不是數(shù)據(jù)本身,而是數(shù)據(jù)背后隱藏的信息。

人們都希望知道數(shù)據(jù)有什么意義,如果你能幫助他們,讓他們更容易理解數(shù)據(jù)的意義,那么你就為他們創(chuàng)造了價值。

要想更容易理解數(shù)據(jù),可視化是一種非常有效的方法,把數(shù)據(jù)放在視覺空間中,我們的大腦就會更容易發(fā)現(xiàn)數(shù)據(jù)背后潛藏的信息。

對數(shù)據(jù)進(jìn)行可視化,我們也要有「雙贏思維」,讓觀眾的興趣與自己想要傳遞的信息保持一致,實現(xiàn)雙贏。

如果只顧觀眾的興趣,弄了一堆花哨的東西,但是沒有傳遞有價值的信息,那么只是浪費觀眾和自己的時間和精力。

如果不顧觀眾的興趣,則做出的圖表可能沒人看,就容易碌碌無為,最終也體現(xiàn)不出自己的價值

◆?◆?◆ ?◆?◆

長按二維碼關(guān)注我們


數(shù)據(jù)森麟公眾號的交流群已經(jīng)建立,許多小伙伴已經(jīng)加入其中,感謝大家的支持。大家可以在群里交流關(guān)于數(shù)據(jù)分析&數(shù)據(jù)挖掘的相關(guān)內(nèi)容,還沒有加入的小伙伴可以掃描下方管理員二維碼,進(jìn)群前一定要關(guān)注公眾號奧,關(guān)注后讓管理員幫忙拉進(jìn)群,期待大家的加入。

管理員二維碼:

猜你喜歡

●?笑死人不償命的知乎沙雕問題排行榜

●?用Python扒出B站那些“驚為天人”的阿婆主!

●?全球股市跳水大戰(zhàn),誰最坑爹!

●?華農(nóng)兄弟、徐大Sao&李子柒?誰才是B站美食區(qū)的最強王者?

●?你相信逛B站也能學(xué)編程

總結(jié)

以上是生活随笔為你收集整理的利用动态气泡图进行数据分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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