技术标签: python 数据分析 数据可视化 Python
原始形式的数据对大多数人来说可能都是枯燥乏味的,但是如果掌握正确的可视化工具,给人的印象就会变得引人入胜。本文通过实际例子,让我们利用数据可视化工具来探索不一样的数据体验。
闲话少说,我们直接开始吧!
让我们从创建一个数据集开始,假设以下数据集包含2010-2020年 Newport
市的碳排放、空气质量指数、绿化率、平均温度和降雨量等信息。
Year,AQI,Carbon_Emissions,Green_Space_Ratio,Rainfall,Temperature
2010,70,7.3,25.0,50,55
2011,72,7.5,25.5,47,57
2012,75,7.7,26.0,45,58
2013,77,7.9,26.5,44,58
2014,79,8.1,27.0,43,59
2015,80,8.3,27.5,42,60
2016,82,8.5,28.0,41,61
2017,85,8.7,28.5,40,62
2018,87,8.9,29.0,39,63
2019,90,9.1,29.5,38,64
2020,92,9.3,30.0,37,65
该数据集展示了 Newport
市各种环境因素如何随时间发生变化的原始数据。我们可以直观地看到十多年间该市的碳排放、空气质量、绿化率和平均温度的趋势。最后,我们可以通过可视化工具,来将所有这些因素结合在一起展示出来。
了解受众是有效讲述数据的关键。让我们想象一下,我们的听众是一群环境政策制定者。他们对环境因素随时间的变化颇感兴趣,所以我们需要以突出这些趋势的方式呈现我们的数据。
对于我们的第一个可视化,我们不妨来创建一个折线图,显示 Newport
市(本例中的虚构城市)多年来空气质量指数(AQI)的变化。折线图是显示一段时间内趋势的绝佳选择,而且很容易被广大观众所理解。
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
# Load the data
df = pd.read_csv('environment_data.csv')
# Create a line chart of AQI over the years
fig1 = go.Figure()
fig1.add_trace(go.Scatter(x=df['Year'], y=df['AQI'], mode='lines', name='AQI', line=dict(color='red')))
fig1.update_layout(title='Newport - Air Quality Index Over Time', xaxis_title='Year', yaxis_title='Air Quality Index (AQI)')
fig1.show()
运行结果如下:
上图中我们将每年的空气质量指数进行了可视化,强调它是如何随着时间的推移而变化的。简单的图表,但有效——我们可以清楚地看到,表现的情况是污染逐年增加。
不同类型的可视化服务于不同的目的。对于我们的第二个可视化,使用技巧1中相同库和CSV文件,让我们创建一个散点图来显示碳排放和空气质量指数(AQI)之间的关系。
# Create a scatter plot of Carbon Emissions vs AQI
fig2 = go.Figure()
fig2.add_trace(go.Scatter(x=df['Carbon_Emissions'], y=df['AQI'], mode='markers', name='Carbon Emissions vs AQI', marker=dict(color='red')))
fig2.update_layout(title='Newport - Carbon Emissions vs Air Quality Index', xaxis_title='Carbon Emissions (million metric tons)', yaxis_title='Air Quality Index (AQI)')
fig2.show()
使用散点图可以使我们能够研究碳排放和空气质量之间是否存在可能的相关性,为决策者提供有价值的决策见解。运行结果如下:
在这个例子中,可视化显示了两者之间的线性递增关系,所以极大可能二者存在一定的因果关系。
我们的第三个可视化将是一个条形图,显示多年来绿化比例的变化。这可以突显城市规划和发展政策对绿化的影响。使用提示1中的相同库和CSV文件,条形图代码如下:
# Create a bar chart of Green Space Ratio over the years
fig3 = go.Figure()
fig3.add_trace(go.Bar(x=df['Year'], y=df['Green_Space_Ratio'], name='Green Space Ratio', marker=dict(color='green')))
fig3.update_layout(title='Newport - Green Space Ratio Over Time', xaxis_title='Year', yaxis_title='Green Space Ratio (%)')
fig3.show()
结果如下:
这张条形图强调了绿化率多年来的增长,这是对城市可持续性感兴趣的政策制定者的一个重要观点。
对于我们的最终可视化,我们将创建一个面积图,以显示多年来平均温度和降雨量的变化。这可以深入了解 Newport
市潜在的气候变化影响。使用提示1中的相同库和CSV文件,面积图代码:
# Create a stacked area chart of Average Temperature and Rainfall over the years
fig4 = make_subplots(specs=[[{
"secondary_y": True}]])
fig4.add_trace(go.Scatter(x=df['Year'], y=df['Temperature'], mode='lines', name='Temperature', stackgroup='one'), secondary_y=False)
fig4.add_trace(go.Scatter(x=df['Year'], y=df['Rainfall'], mode='lines', name='Rainfall', stackgroup='one'), secondary_y=True)
fig4.update_layout(title='Newport - Temperature and Rainfall Over Time', xaxis_title='Year', yaxis_title='Temperature (°F) / Rainfall (inches)')
fig4.show()
这张叠加面积图显示了两个因素随时间变化的变量,使我们能够看到潜在的相关性和趋势。
在这种情况下,这些数据告诉我们一个非常清楚的故事,即多年来温度和降雨量是如何同时变化的。一个温度在随时间上升的同时,降雨量却在随时间而下降。
现在我们已经有了所有的可视化,接着让我们使用Python中的Dash
库将它们合并到一个单独的面板中。
import dash
from dash import dcc
from dash import html
# Load the data
df = pd.read_csv('environment_data.csv')
#put all of our chart code here (fig1, fig2, fig3, fig4), remove ALL show() statements
app = dash.Dash(__name__)
app.layout = html.Div([
html.H1('New York City Environmental Data Dashboard'),
html.Div([
dcc.Graph(figure=fig1),
dcc.Graph(figure=fig2),
], style={
'display': 'flex'}),
html.Div([
dcc.Graph(figure=fig3),
dcc.Graph(figure=fig4),
], style={
'display': 'flex'}),
])
if __name__ == '__main__':
app.run_server(debug=True)
在这段代码中,我们主要使用了Dash
库,一个用于构建分析web
应用程序的Python框架,我们可以来创建一个包含四个可视化的仪表板。将其排列成两行,每行有两个子图。如下:
超级棒并且超级容易实现, 本文从我们的简单数据集中告诉我们4个有用且引人注目的可视化效果,所有这些都显示在一个易于访问的仪表板中!
通过数据可视化工具来取得引人注目的效果。这是关于了解数据背后隐藏的信息,通过了解受众,并不断接收和实施反馈,以不断改进可视化效果。本文一步一步通过具体数据例子来讲解了如何取得引入注目的可视化效果的完整步骤,并给出了相应的代码示例。
您学废了嘛?
文章浏览阅读384次,点赞7次,收藏9次。智慧校园全场景解决方案是借助AIoT智能物联能力打造智慧绿色校园,助力实现校园周界安防、智慧通行、设备运维、能耗管理等场景功能智慧校园全场景解决方案,打造安全、便捷、绿色的智慧校园。_智慧校园中控架构开发软件有哪些
文章浏览阅读82次。库,我们可以编写代码来模拟按键和鼠标操作,从而实现自动设置Windows 10的输入法。这种方法可以节省时间和精力,尤其是在需要频繁更改输入法设置的情况下。运行代码后,您将看到Windows 10的设置窗口打开,并自动导航到语言设置,然后将输入法更改为中文简体拼音。在本文中,我将向您展示如何使用编程方式来设置Windows 10的输入法。现在,我们已经编写了设置输入法的代码。保存代码文件,并在命令提示符或终端中运行它。库来模拟按下键盘快捷键,以设置输入法。一旦安装完成,我们可以开始编写代码。_win10 输入法 中英文模式api
文章浏览阅读1.5k次。每个人都有属于自己的手相,有些人的手相是属于典型的、一般的手相特征,没有太多值得说的地方;而另一些人,他们的手相之中,却有一些别人所没有的手相特征,但却真实的出现在了自己的手掌中。比如说,对于手心里有一条竖线的人,他们的命格会是怎样的呢?一起来手相图解看看吧!1、事业发展:前途坎坷对于手心有一条竖线的人,他们的事业线一定会因此而出现中断,与此相交。而在事业发展方面,事业线的分叉代表了遇到的困难程度..._女生右手手掌中间的竖线代表什么
文章浏览阅读70次。当我们访问一个对象的不存在的属性的时候,默认都会报错例如:class Count(object):def __init__(self, mymin, mymax):self.mymin = myminself.mymax = mymaxobj1 = Count(1, 10)print(obj1.mymin)print(obj1.mymax)print(obj1.current)AttributeE..._getattribute方法报错不存在属性
文章浏览阅读2.3k次。换一种思路实现Java里String类的contains方法_stringcontains和for循环
文章浏览阅读95次。排过序不写单元测试。 不主动学习,不看书。 总是拿没时间作为借口。 不会做任务拆解,也没有记录拆解的任务。 做事没耐心。 不 Review 自己的代码,做过的事情,犯的错误。 从不了解架构,不了解设计(设计就是架构)。 不了解敏捷开发,更没有想了解的意愿,也不会去实施。Scrum Standup 、Kanban Board 是能提高工作效率的。 喜欢埋怨别人,说在公司学不到技术,也不积极主动学习。 认为重复的 CRUD 很无趣,总想着换个工作能好点。 对每天做的事情不做记录。这里不是_程序员思维固化的表现
文章浏览阅读803次。Java 内存可以粗糙的区分为堆内存(Heap)和栈内存 (Stack),其中栈就是现在说的虚拟机栈,或者说是虚拟机栈中局部变量表部分。new了一个class类的过程:往栈里丢了一个英文的名字,在堆里实例化了一个类,名字指向这个类。与程序计数器一样,Java 虚拟机栈也是线程私有的,它的生命周期和线程相同,描述的是。栈:栈内存,主管程序的运行,生命周期与线程同步。Java 栈可用类比数据结构中栈,Java 栈中保存的主要内容是栈帧,栈:8大基本数据类型,对象的引用,实例的方法。栈运行的原理:栈帧。_本地方法栈存放什么数据
文章浏览阅读5.9k次。这里发现报错,关闭vscode重启也还是有问题。后面发现其实是typescript定义类型的语法,是因为我将代码写在<script></script>里面,使用ts语法需要表明lang="ts"即将代码写在<script lang="ts"></script>将不会报错..._ts1109: expression expected.
文章浏览阅读1k次,点赞23次,收藏22次。在数字通信系统中,幅度键控(ASK)是一种通过改变载波信号的幅度来传输数字信息的调制方式。8ASK,即8幅度键控,是ASK的一种变体,它使用8个不同的幅度级别来表示数字信息。8ASK (Amplitude Shift Keying) 调制是一种幅度移键调制技术,它通过改变载波信号的幅度来传输数据,同时保持频率和相位不变。在8ASK中,有8个不同的幅度级别,每个级别代表3比特的信息(因为2^3=8)。这种调制方式能够在相同的带宽条件下传输更多的数据,但与此同时,它对信号的幅度噪声也更加敏感。_matlab ask
文章浏览阅读1k次,点赞12次,收藏13次。Intent记录 意图跳转_intent拦截者app
文章浏览阅读1.7k次。pycharm在debug时光标消失,无法编辑代码区。点击这个小扳手即可解决。_pycharm光标不见了
文章浏览阅读1.2k次,点赞2次,收藏2次。在开发中,需要对一组对象进行排序,是非常常见的需求。排序可以让数据更加有序,便于查找和操作。在Java中,排序可以使用Collections类或Arrays类提供的方法可以通过Comparable自然排序和Comparator定制排序进行实现。_java什么叫自然顺序