在Python中,您可以使用数据并将其可视化。 不仅程序员可以利用这一点,科学家,生物学家,物理学家和社会学家也可以利用这一点。 今天,与
shwars (我们的
Python快速 入门课程的策展人)一起,我们将简短地转向气象学家并研究俄罗斯城市的气候。 在用于可视化和处理数据的库中,我们使用Pandas,Matplotlib和Bokeh。

我们对
Azure笔记本 (基于云的Jupyther Notebook版本)进行研究。 因此,要开始使用Python,我们不需要在计算机上安装任何软件,并且可以直接在浏览器中工作。 您只需要使用Microsoft帐户登录,创建一个库和其中的新Python 3便携式计算机,然后就可以从本文中获取代码片段并进行实验!
我们得到数据
首先,我们导入所需的主要库。
Pandas是一个用于处理表格数据或所谓的数据框架的库,而
pyplot将允许我们构建图形。
import pandas as pd import matplotlib.pyplot as plt
可以在Internet上轻松找到源数据,但是我们已经以方便的CSV格式为您准备了数据。 CSV是一种文本格式,其中所有列均以逗号分隔。 因此,名称为-逗号分隔值。
熊猫可以从本地磁盘打开CSV文件,也可以直接从Internet打开。 数据本身位于我们
在GitHub上的
存储库中 ,因此我们只需要指定正确的URL。
data = pd.read_csv("https://raw.githubusercontent.com/shwars/PythonJump/master/Data/climat_russia_cities.csv") data

重命名表列,以便更方便地按名称访问它们。 我们还需要将字符串转换为数值以便对其进行操作。 当我们尝试使用
pd.to_numeric
函数执行此操作时,我们发现发生了奇怪的错误。 这是由于在文本中使用了长破折号而不是减号。
data.columns=["City","Lat","Long","TempMin","TempColdest","AvgAnnual","TempWarmest","AbsMax","Precipitation"] data["TempMin"] = pd.to_numeric(data["TempMin"])
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) pandas/_libs/src/inference.pyx in pandas._libs.lib.maybe_convert_numeric() ValueError: Unable to parse string "−38.0" ... ... ... ValueError: Unable to parse string "−38.0" at position 0
这个问题产生了一个重要的道义:数据通常以“脏”的形式出现,使用起来不方便,数据科学家的任务是使这些数据清晰可见。
您可以看到我们表中的某些列属于
object
类型,而不是数字类型
float64
。 在此类列中,我们将破折号替换为减号,然后将整个表格转换为数字格式。 不能转换的列(城市名称)将保持不变(为此,我们使用键
errors='ignore'
)。
print(data.dtypes) for x in ["TempMin","TempColdest","AvgAnnual"]: data[x] = data[x].str.replace('−','-') data = data.apply(pd.to_numeric,errors='ignore') print(data.dtypes)
City object Lat float64 Long float64 TempMin object TempColdest object AvgAnnual object TempWarmest float64 AbsMax float64 Precipitation int64 dtype: object City object Lat float64 Long float64 TempMin float64 TempColdest float64 AvgAnnual float64 TempWarmest float64 AbsMax float64 Precipitation int64 dtype: object
我们研究数据
现在我们有了干净的数据,我们可以尝试构建有趣的图形。
年平均温度
例如,让我们看看平均温度如何取决于纬度。
ax = data.plot(x="Lat",y="AvgAnnual",kind="Scatter") ax.set_xlabel("") ax.set_ylabel(" ")

该图显示越靠近赤道,温度越高。
记录城市
现在,让我们看一下温度最高的城市,看看城市的最低和最高温度之间是否存在相关性。
ax=data.plot(x="TempMin",y="AbsMax",kind="scatter") ax.set_xlabel(" ") ax.set_ylabel(" ") ax.invert_xaxis()

如您所见,在这种情况下不存在这种关联。 有些城市的气候属于大陆性气候,只有冷热城市。 我们发现温度分布最大的城市,即大陆性气候急剧的城市。
data['spread'] = data['TempWarmest'] - data['TempColdest'] data.nlargest(3,'spread')

这次,我们未创下最高纪录,而是最暖和最冷月份的平均值。 不出所料,萨哈共和国(雅库特)的城市分散程度最大。
冬季和夏季
为了进一步研究,请考虑距莫斯科300公里半径内的城市。 要计算纬度和经度之间的距离,我们使用
geopy库,该库必须首先使用
pip install
。
!pip install geopy import geopy.distance
在表格中再增加一列-到莫斯科的距离。
msk_coords = tuple(data.loc[data["City"]==""][["Lat","Long"]].iloc[0]) data["DistMsk"] = data.apply(lambda row : geopy.distance.distance(msk_coords,(row["Lat"],row["Long"])).km,axis=1) data.head()

我们使用表达式仅选择我们感兴趣的行。
msk = data.loc[data['DistMsk']<300] msk

对于这些城市,我们制定了最低,平均每年和最高温度的时间表。
ax=msk.plot(x="City",y=["TempColdest","AvgAnnual","TempWarmest"],kind="bar",stacked="true") ax.legend(["","",""],loc='lower right')

通常,在莫斯科附近300公里内未观察到异常。 伊凡诺沃(Ivanovo)位于其余城市的北部,因此气温低了几度。
处理地理数据
现在,让我们尝试在地图上显示参考城市的年平均降雨量,并查看降雨量如何取决于地理位置。 为此,我们使用了另一个可视化库
Bokeh 。 还需要安装它。
然后,我们计算另一列-圆圈的大小,该列将显示降雨量。 凭经验选择系数。
!pip install bokeh from bokeh.io import output_file, output_notebook, show from bokeh.models import ( GMapPlot, GMapOptions, ColumnDataSource, Circle, LogColorMapper, BasicTicker, ColorBar, DataRange1d, PanTool, WheelZoomTool, BoxSelectTool, HoverTool ) from bokeh.models.mappers import ColorMapper, LinearColorMapper from bokeh.palettes import Viridis5 from bokeh.plotting import gmap
要使用地图,您需要Google Maps API密钥。 它必须
在站点上独立获得。
有关使用Bokeh在地图上绘制图表的更多详细说明,请参见
此处和
此处 。
google_key = "<INSERT YOUR KEY HERE>" data["PrecipSize"] = data["Precipitation"] / 50.0 map_options = GMapOptions(lat=msk_coords[0], lng=msk_coords[1], map_type="roadmap", zoom=4) plot = gmap(google_key,map_options=map_options) plot.title.text = " " source = ColumnDataSource(data=data) my_hover = HoverTool() my_hover.tooltips = [('', '@City'),('','@Precipitation')] plot.circle(x="Long", y="Lat", size="PrecipSize", fill_color="blue", fill_alpha=0.8, source=source) plot.add_tools(PanTool(), WheelZoomTool(), BoxSelectTool(), my_hover) output_notebook() show(plot)

如您所见,降雨量最多的地区是沿海城市。 尽管有相当多的城市的降雨量是平均水平甚至低于全国水平。
完整的代码以及由Dmitry Soshnikov编写的注释,您可以在
此处独立查看和运行。
总结
我们展示了该语言的功能,而无需使用复杂的算法,特定的库或编写数百行代码。 但是,即使配备了标准工具,您也可以分析数据并得出一些结论。
数据集远不能完美地组合在一起,因此在开始使用可视化之前,需要将它们整理好。 可视化的质量将在很大程度上取决于所使用数据的质量。
图表和图形的种类繁多,因此不必仅限于标准库。
有
Geoplotlib ,
Plotly ,简约
皮革等。
如果您想了解更多有关在Python中使用数据的知识,并熟悉人工智能,那么我们邀请您参加Binary District的一日密集
课程-AI的Python快速入门 。