下载数据

我们将访问并可视化以两种常见格式存储的数据:CSV和JSON。我们将使用Python模块csv来处理以CSV(逗号分隔的值)格式存储的天气数据,找出两个不同地区在一段时间内的最高温度和最低温度。然后,我们将使用matplotlib根据下载的数据创建一个图表,展示两个不同地区的气温变化。
我们将使用模块json来访问以JSON格式存储的人口数据,并使用Pygal绘制一幅按国别划分的人口地图。

一、CSV文件格式

要在文本文件中存储数据,最简单的方式是将数据作为一系列以逗号分割的值(CSV)写入文件。这样的文件称为CSV文件。
CSV文件对人来说阅读起来比较麻烦,但程序可轻松地提取并处理其中的值,这有助于加快数据分析过程。
我们将首先处理少量锡特卡的CSV格式的天气数据,将文件sitka_weather_07-2014.csv复制到存储本章程序的文件夹中。

分析CSV文件头

csv模块包含在Python标准库中,可用于分析CSV文件中的数据行,让我们能够快速提取感兴趣的值。下面先来查看这个文件的第一行,其中包含一系列有关数据的描述:

highs_lows.py

import csvfilename = 'sitka_weather_07-2014.csv'
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)print(header_row)

导入模块csv后,我们将要使用的文件的名称存储在filename中。接下来,我们打开这个文件,并将结果文件对象存储在f中,然后,我们调用csv.reader(),并将前面存储的文件对象作为实参传递给它,从而创建一个与该文件相关联的阅读器(reader)对象。我们将这个阅读器对象存储在reader中。
模块csv包含函数next(),调用它并将阅读器对象传递给它时,它将返回文件中的下一行。在前面的代码中,我们只调用了next()一次,因此得到的是文件的第一行,其中包含文件头。我们将返回的数据存储在header_row中。正如你看到的,header_row包含与天气相关的文件头,指向了每行都包括哪些数据:

['AKDT', 'Max TemperatureF', 'Mean TemperatureF', 'Min TemperatureF',
'Max Dew PointF', 'MeanDew PointF', 'Min DewpointF', 'Max Humidity',
' Mean Humidity', ' Min Humidity', ' Max Sea Level PressureIn',
' Mean Sea Level PressureIn', ' Min Sea Level PressureIn',
' Max VisibilityMiles', ' Mean VisibilityMiles', ' Min VisibilityMiles',
' Max Wind SpeedMPH', ' Mean Wind SpeedMPH', ' Max Gust SpeedMPH',
'PrecipitationIn', ' CloudCover', ' Events', ' WindDirDegrees']

reader处理文件中以逗号分隔的第一行数据,并将每项数据都作为一个元素存储在列表中。文件头AKDT表示阿拉斯加时间(Alaska Daylight Time),其位置表明每行的第一个值都是日期或时间。文件头Max TemperatureF指出每行的第二个值都是当天的最高华氏温度。可通过阅读其他的文件头来确定文件包含的信息类型。

注意:文件头的格式并非总是一致的,空格和单位可能出现在奇怪的地方。这在原始数据文件中很常见,但不会带来任何问题。

打印文件头及其位置

为让文件头数据更容易理解,将列表中的每个文件头及其位置打印出来
对列表调用enumerate()来获取每个元素的索引及其值。

highs_lows.py

import csvfilename = 'sitka_weather_07-2014.csv'
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)for index, column_header in enumerate(header_row):print(index, column_header)

输出如下:

0 AKDT
1 Max TemperatureF
2 Mean TemperatureF
3 Min TemperatureF
--snip--
20  CloudCover
21  Events
22  WindDirDegrees
提取并读取数据

读取每日的最高气温:

highs_lows.py

import csvfilename = 'sitka_weather_07-2014.csv'
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)highs = []for row in reader:highs.append(row[1])print(highs)

输出:

['64', '71', '64', '59', '69', '62', '61', '55', '57', '61', '57', '59', '57', '61', '64', '61', '59', '63', '60', '57', '69', '63', '62', '59', '57', '57', '61', '59', '61', '61', '66']

我们提取了每天的最高气温,并将它们作为字符串整洁地存储在一个列表中。
下面使用int()将这些字符串转化为数字,让matplotlib能够读取它们。

highs_lows.py

--snip--highs = []for row in reader:high = int(row[1])highs.append(high)print(highs)

输出:

[64, 71, 64, 59, 69, 62, 61, 55, 57, 61, 57, 59, 57, 61, 64, 61, 59, 63, 60, 57, 69, 63, 62, 59, 57, 57, 61, 59, 61, 61, 66]
绘制气温图表

首先使用matplotlib创建一个显示每日最高温度的简单图表:

--snip--
plt.figure(dpi=128, figsize=(10, 6))
plt.plot(highs, c='red')plt.title("Daily high tempurature, July 2014!", fontsize=24)
plt.xlabel("", fontsize=16)
plt.ylabel("Tempurature(F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)plt.show()

一个简单的折线图,显示了阿拉斯加锡特卡2014年7月每天的最高气温:

模块datetime

我们需要在图表中添加日期。
在天气数据文件中,以第一个日期为例。获取该数据时,获得的是一个字符串:

['2014-7-1', '64', '56', '50', '53', '51', '48', '96', '83', '58', '30.19', '30.00', '29.79', '10', '10', '10', '7', '4', '', '0.00', '7', '', '337']

我们需要想办法将字符串‘2014-7-1’转换为一个表示相应日期的对象。为创建一个表示2014年7月1日的对象,可使用模块datetime中的方法strptime()。我们在终端会话中看看strptime()的工作原理:

>>> from datetime import datetime
>>> first_date = datetime.strptime('2014-7-1', '%Y-%m-%d')
>>> print(first_date)
2014-07-01 00:00:00

方法strptime()可接受各种实参,并根据它们来决定如何解读日期。

实参 含义
%A 星期的名称,如Monday
%B 月份名,如January
%m 用数字表示的月份(01~12)
%d 用数字表示月份中的一天(01~31)
%Y 四位的年份,如2015
%y 两位的年份,如15
%H 24小时制的小时数(00~23)
%I 12小时制的小时数(01~12)
%p am或pm
%M 分钟数(00~59)
%S 秒数(00~61)
在图表中添加日期

知道如何处理CSV文件中的日期后,就可对气温图形进行改进了,即提取日期和最高气温,并将它们传递给plot()。

highs_lows.py

import csv
import matplotlib.pyplot as plt
from datetime import datetimefilename = 'sitka_weather_07-2014.csv'
with open(filename) as f:reader = csv.reader(f)high_row = next(reader)dates, highs = [], []for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)high = int(row[1])highs.append(high)fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red')plt.title("Daily high tempurature, July 2014!", fontsize=24)
plt.xlabel("", fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Tempurature(F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)plt.show()

我们调用了fig.autofmt_xdate()来绘制斜的日期标签,以免它们彼此重叠。

涵盖更长的时间

设置好图表后,我们来添加更多的数据,以构成一副更复杂的锡特卡天气图。
将文件sitka_weather_2014.csv复制到存储本章程序的文件夹中。
现在可以创建覆盖整年的天气图了:

import csv
import matplotlib.pyplot as plt
from datetime import datetimefilename = "python编程:从入门到实践/第十六章:下载数据/sitka_weather_2014.csv"
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)dates, highs = [], []for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)high = int(row[1])highs.append(high)fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red')plt.title("Daily high Tempurature --2014", fontsize=24)
plt.xlabel("", fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Tempurature(F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
plt.show()

显示的图形为:

再绘制一个数据系列

我们可以在改进后的图表中添加最低气温数据,使其更有用。

import csv
import matplotlib.pyplot as plt
from datetime import datetimefilename = 'python编程:从入门到实践/第十六章:下载数据/sitka_weather_2014.csv'
with open(filename) as f:reader = csv.reader(f)header_row = next(reader)dates, highs, lows = [], [], []for row in reader:current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)high = int(row[1])highs.append(high)low = int(row[3])lows.append(low)fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red')
plt.plot(dates, lows, c='blue')plt.title("Daily tempurature --2014", fontsize=24)
plt.xlabel("", fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Tempurature(F)", fontsize=16)
plt.tick_params(axis='both', which='majot', labelsize=16)
plt.show()

显示的图形为:

给图表区域着色

下面来给这个图表做最后的修饰,通过着色来呈现每天的气温范围。
可以使用方法fill_between(),它接受一个x值系列和两个y值系列,并填充两个y值系列之间的空间
实参alpha可以指定颜色的透明度,0表示完全透明,1表示完全不透明(默认值)。
facecolor指定了填充区域的颜色。

--snip--fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red', alpha=0.5)
plt.plot(dates, lows, c='blue', alpha=0.5)
plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)--snip--

显示的图形为:

错误检查

将文件death_valley_ 2014.csv复制到本章程序所在的文件夹,当用上一个程序生成死亡谷的气温图时,出现了一个错误:

Traceback (most recent call last):
File "highs_lows.py", line 17, in <module>
high = int(row[1])
ValueError: invalid literal for int() with base 10: ''

该traceback指出,Python无法处理其中一天的最高气温,因为它无法将空字符串(‘ ’)转换为整数。
发现问题出在2014年2月16日:

2014-2-16,,,,,,,,,,,,,,,,,,,0.00,,,-1

为了解决这种问题,我们在从csv文件中读取值时执行错误检查代码,对分析数据集时可能出现的异常进行处理:

--snip--for row in reader:try:current_date = datetime.strptime(row[0], "%Y-%m-%d")high = int(row[1])low = int(row[3])except ValueError:print(current_date, "missing data")else:dates.append(current_date)highs.append(high)lows.append(low)--snip--

只要缺失其中一项数据,Python就会引发ValueError异常,而我们可这样处理:打印一条错误信息,指出缺失数据的日期。打印错误信息后,循环将接着处理下一行;如果获取特定日期的所有数据没有发生错误,将运行else代码块,并将数据附加到相应列表的末尾。

运行后发现,缺失数据的日期只有一个:

2014-02-16 00:00:00 missing data

显示的图形为:

使用的很多数据集都可能缺失数据、数据格式不正确或数据本身不正确。对于这样的情形, 可使用前半部分学过的工具来处理。在这里,我们使用了一个try-except-else代码块来处理数据缺失的问题。在有些情况下,需要使用continue来跳过一些数据,或者使用remove()或del将已提取的数据删除。可采用任何管用的方法,只要能进行精确而有意义的可视化就好。

二、制作世界人口地图:JSON格式

下载JSON格式的人口数据,并使用json模块来处理它们。
Pygal提供了一个适合初学者使用的地图创建工具,将使用它来对人口数据进行可视化,以探索全球人口的分布情况。

下载世界人口数据

将文件population_data.json复制到本章程序所在的文件夹中。

提取相关的数据

首先对population_data.json进行研究,看看如何着手处理这个文件中的数据。

[{"Country Name": "Arab World","Country Code": "ARB","Year": "1960","Value": "96388069"},{"Country Name": "Arab World","Country Code": "ARB","Year": "1961","Value": "98882541.4"},--snip--
]

可以发现这个文件实际上就是一个很长的python列表,其中每个元素都是一个包含四个键的字典:国家名、国别码、年份以及表示人口数量的值。
我们只关心每个国家2010年的人口数量,因此我们首先编写一个打印这些信息的程序:

world_population.py

import jsonfilename = 'population_data.json'
with open(filename) as f:pop_data = json.load(f)for pop_dict in pop_data:if pop_dict["Year"] == '2010':country = pop_dict["Country Name"]population = pop_dict["Value"]print(country + ':' + population)

输出为一系列的国家的名称和人口数量:

Arab World:357868000
Caribbean small states:6880000
East Asia & Pacific (all income levels):2201536674
--snip--
Zambia:12927000
Zimbabwe:12571000
将字符串转换为数字值

由于population_data.json中的每个键和值都是字符串。
为了处理这些人口数据,我们需要将表示人口数量的字符串转换为数字值,为此我们使用int():

import jsonfilename = 'population_data.json'
with open(filename) as f:pop_data = json.load(f)for pop_dict in pop_data:if pop_dict["Year"] == '2010':country = pop_dict["Country Name"]population = int(pop_dict["Value"])print(country + ':' + str(population))

而运行时发现出现了错误:

Traceback (most recent call last):File "world_population.py", line 9, in <module>population = int(pop_dict["Value"])
ValueError: invalid literal for int() with base 10: '1127437398.85751'

这是因为python不能直接将包含小数点的字符串’1127437398.85751’转换为整数。
为了消除这种错误,我们先将字符串转换为浮点数,再将浮点数转换为整数:

import jsonfilename = 'population_data.json'
with open(filename) as f:pop_data = json.load(f)for pop_dict in pop_data:if pop_dict["Year"] == '2010':country = pop_dict["Country Name"]population = int(float(pop_dict["Value"]))print(country + ':' + str(population))

这样就不会导致错误了。

获取两个字母的国别码

Pygal中的地图制作工具要求数据为特定的格式:用国别码表示国家,以及用数字表示人口数量。
处理地理政治数据时,经常需要用到几个标准化国别码集。population_data.json中包含的是三个字母的国别码,但Pygal使用两个字母的国别码,我们需要想办法根据国家名获取两个字母的国别码。

Pygal使用的国别码存储在模块i18n(internationalization的缩写)中。字典COUNTRIES包含的键和值分别为两个字母的国别码和国家名。要查看这些国别码,可从模块i18n中导入这个字典, 并打印其键和值:

countries.py

from pygal_maps_world.i18n import COUNTRIESfor country_code in sorted(COUNTRIES.keys()):print(country_code, COUNTRIES[country_code])

输出为:

ad Andorra
ae United Arab Emirates af Afghanistan
--snip--
zw Zimbabwe

为获取国别码,我们将编写一个函数,它在COUNTRIES查找并返回国别码。
country_codes.py

from pygal_maps_world.i18n import COUNTRIESfor code, name in COUNTRIES.items():print(code, name)

world_population.py

import json
from country_codes import get_country_codefilename = 'population_data.json'
with open(filename) as f:pop_data = json.load(f)
for pop_dict in pop_data:if pop_dict["Year"] == '2010':country_name = pop_dict["Country Name"]population = int(float(pop_dict["Value"]))code = get_country_code(country_name)if code:print(code + ": " + str(population))else:print("ERROR - " + country_name)

运行后的结果为:

ERROR - Arab World
ERROR - Caribbean small states
ERROR - East Asia & Pacific (all income levels) --snip--
af: 34385000
al: 3205000
dz: 35468000
--snip--
ERROR - Yemen, Rep.
zm: 12927000
zw: 12571000

导致显示错误消息的原因有两个。首先,并非所有人口数量对应的都是国家,有些人口数量对应的是地区(阿拉伯世界)和经济类群(所有收入水平)。其次,有些统计数据使用了不同的完整国家名(如Yemen, Rep.,而不是Yemen)。当前,我们将忽略导致错误的数据,看看根据成功恢复了的数据制作出的地图是什么样的。

制作世界地图

有了国别码后,制作世界地图易如反掌。Pygal提供了图表类型Worldmap,可帮助你制作呈现各国数据的世界地图。为演示如何使用Worldmap,我们来创建一个突出北美、中美和南美的简单地图:

americas.py

import pygalwm = pygal.maps.world.World()
wm.title = 'North, Central, and South America'wm.add('North America', ['ca', 'mx', 'us'])
wm.add('Central America', ['bz', 'cr', 'gt', 'hn', 'ni', 'pa', 'sv'])
wm.add('South America', ['ar', 'bo', 'br', 'cl', 'co', 'ec', 'gf', 'gy', 'pe', 'py', 'sr', 'uy', 've'])wm.render_to_file("americas.svg")

我们使用了方法add(),它接受一个标签和一个列表,其中后者包含我们要突出的国家的国别码。每次调用add()都将为指定的国家选择一种新颜色,并在图表左边显示该颜色和指定的标签。
方法render_to_file()创建一个包含该图表的.svg文件,在浏览器中打开:

在世界地图上呈现数字数据

为练习在地图上呈现数字数据,我们来创建一幅地图,显示三个北美国家的人口数量:

na_populations.py

import pygalwm = pygal.maps.world.World()
wm.title = 'Populations of Countries in North America'
wm.add('North America', {'ca': 34126000, 'us': 309349000, 'mx': 113423000})wm.render_to_file('na_populations.svg')

使用方法add(),传递一个字典。这个字典将两个字母的Pygal国别码作为键,将人口数量作为值。Pygal根据这些数字自动给不同国家着以深浅不一的颜色(人口最少的国家颜色最浅,人口最多的国家颜色最深)。

这个地图具有交互性:如果你将鼠标指向某个国家,将看到其人口数量。

绘制完整的世界人口地图

要呈现其他国家的人口数量,需要将前面处理的数据转换为Pygal要求的字典格式:键为两个字母的国别码,值为人口数量。

world_map.py

import json
import pygal
from country_codes import get_country_codefilename = 'population_data.json'
with open(filename) as f:pop_data = json.load(f)cc_populations = {}
for pop_dict in pop_data:if pop_dict["Year"] == '2010':country_name = pop_dict["Country Name"]population = int(float(pop_dict["Value"]))code = get_country_code(country_name)if code:cc_populations[code] = populationwm = pygal.maps.world.World()
wm.title = 'World Population in 2010, by Country'
wm.add("2010", cc_populations)
wm.render_to_file('world_map.svg')


有几个国家没有相关的数据,就没有进行着色。但对于大多数国家,都根据其人口数量进行了着色。
在当前的地图中,很多国家都是浅色的,只有两个国家是深色的。对大多数国家而言,颜色深浅的差别不足以反应其人口数量的差别。为修复这种问题,我们将根据人口数量将国家分组,再分别给每个组着色。

根据人口数量将国家分组

印度和中国的人口比其他国家多得多,但在当前的地图中,它们的颜色与其他国家差别较小。中国和印度的人口都超过了10亿,接下来人口最多的国家是美国,但只有大约3亿。
根据人口数量分为3组——少于1000万的、介于1000万和10亿之间的以及超过10亿的:

world_map.py

import json
import pygal
from country_codes import get_country_codefilename = 'population_data.json'
with open(filename) as f:pop_data = json.load(f)cc_populations = {}
for pop_dict in pop_data:if pop_dict["Year"] == '2010':country_name = pop_dict["Country Name"]population = int(float(pop_dict["Value"]))code = get_country_code(country_name)if code:cc_populations[code] = populationcc_pops1, cc_pops2, cc_pops3 = {}, {}, {}
for cc, pop in cc_populations.items():if pop < 10000000:cc_pops1[cc] = popelif pop < 1000000000:cc_pops2[cc] = popelse:cc_pops3[cc] = popprint(len(cc_pops1), len(cc_pops2), len(cc_pops3))wm = pygal.maps.world.World()
wm.title = 'World Population in 2010, by Country'
wm.add("0-10m", cc_pops1)
wm.add("10m-1bn", cc_pops2)
wm.add(">1bn", cc_pops3)
wm.render_to_file('world_map.svg')

为了将国家分组,我们创建了三个空字典。
如果运行程序,首先看到的是每个分组的规模:

85 69 2

上述输出表明,人口少于1000万的国家有85个,人口介于1000万和10亿之间的国家有69个,还有两个国家超过了10亿。

使用Pygal设置世界地图的格式

在这个地图中,根据人口将国家分组虽然很有效,但默认的颜色设置很难看。
下面使用Pygal样式设置指令来调整颜色。

import json
import pygal
from country_codes import get_country_code
from pygal.style import RotateStylefilename = 'population_data.json'
with open(filename) as f:pop_data = json.load(f)cc_populations = {}
for pop_dict in pop_data:if pop_dict["Year"] == '2010':country_name = pop_dict["Country Name"]population = int(float(pop_dict["Value"]))code = get_country_code(country_name)if code:cc_populations[code] = populationcc_pops1, cc_pops2, cc_pops3 = {}, {}, {}
for cc, pop in cc_populations.items():if pop < 10000000:cc_pops1[cc] = popelif pop < 1000000000:cc_pops2[cc] = popelse:cc_pops3[cc] = popprint(len(cc_pops1), len(cc_pops2), len(cc_pops3))wm_style = RotateStyle('#336699')
wm = pygal.maps.world.World(style=wm_style)
wm.title = 'World Population in 2010, by Country'
wm.add("0-10m", cc_pops1)
wm.add("10m-1bn", cc_pops2)
wm.add(">1bn", cc_pops3)
wm.render_to_file('world_map.svg')

Pygal样式存储在模块style中,我们从这个模块中导入了样式RotateStyle。创建这个类的实例时,需要提供一个实参——十六进制的RGB颜色;Pygal将根据指定的颜色为每组选择颜色。十六进制格式的RGB颜色是一个以井号(#)打头的字符串,后面跟着6个字符,其中前两个字符表示红色分量,接下来的两个表示绿色分量,最后两个表示蓝色分量。每个分量的取值范围为00(没有相应的颜色)~FF(包含最多的相应颜色)。如果你在线搜索hex color chooser(十六进制颜色选择器),可找到让你能够尝试选择不同的颜色并显示其RGB值的工具。这里使用的颜色值(#336699)混合了少量的红色(33)、多一些的绿色(66)和更多一些的蓝色(99), 它为RotateStyle提供了一种淡蓝色基色。

加亮颜色主题

Pygal通常默认使用较暗的颜色主题。为方便印刷,我们使用LightColorizedStyle加亮了地图的颜色。这个类修改了整个图表的主题,包括背景色、标签以及各个国家的颜色。
要使用这个样式,先导入它:

from pygal.style import LightColorizedStyle

然后就可独立地使用LightColorizedStyle了,例如:

wm_style = LightColorizedStyle

然而使用这个类时,你不能直接控制使用的颜色,Pygal将选择默认的基色。要设置颜色,可使用RotateStyle,并将LightColorizedStyle作为基本样式。为此,导入LightColorizedStyle和RotateStyle:

from pygal.style import LightColorizedStyle, RotateStyle

再使用RotateStyle创建一种样式,并传入另一个实参base_style:

wm_style = RotateStyle('#336699', base_style=LightColorizedStyle)

这设置了较亮的主题,同时根据通过实参传递的颜色给各个国家着色。

尝试为不同的可视化选择合适的样式设置指令时,在import语句中指定别名会有所帮助:

from pygal.style import LightColorizedStyle as LCS, RotateStyle as RS

这样,样式定义将更短:

wm_style = RS('#336699', base_style=LCS)

通过使用几个样式设置指令,就能很好地控制图表和地图的外观。

《Python编程:从入门到实践》第十六章:下载数据相关推荐

  1. 《Python编程从入门到实践》第六章

    第六章开始把一些需要注意的点写进注释里了. #在2020.10.23至2020.10.25结束之前完成第六章的学习 alien_0 = {'color':'green','points':5} pri ...

  2. Python 编程从入门到实践 第十二章 飞船开始游戏时靠着边界的问题解决办法

    注:图中标识的1,2,3,4 就是所指向的那一行代码,上面是本人的正确代码 解决办法:书上的代码内容顺序是1代码在2代码的前面,其实只要把1代码放到2代码后面就可以解决靠边的问题 飞船初始靠边原因:1 ...

  3. 《Python网络爬虫——从入门到实践》第六章将数据存储至MySQL数据库的学习心得与总结(出错与纠正方法)

    <Python网络爬虫--从入门到实践>第六章将数据存储至MySQL数据库的学习心得与总结(出错与纠正方法) 作为刚开始入门python的小白,对大数据,网络爬虫比较感兴趣.完全是自我修炼 ...

  4. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章

    文章目录 下载数据 制作全球地震散点图:JSON格式 end 几个实验结果: 每日最高气温: 地震图绘制: 下载数据 CSV文件格式 在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值 ...

  5. python教程txt免费下载-python编程从入门到实践PDF电子书教程免费下载

    本书是一本针对所有层次的 Python 读者而作的 Python 入门书.全书分两部分 :第一部分介绍用 Python 编程所必须了解的基本概念,包括 matplotlib.NumPy 和 Pygal ...

  6. python编程入门到实践pdf下载-Python编程从入门到实践的PDF教程免费下载

    本书旨在让你成为优秀的程序员,具体地说,是优秀的Python程序员.通过阅读本书,你将迅速掌握编程 概念,打下坚实的基础,并养成良好的习惯.阅读本书后,你就可以开始学习Python高级技术,并能够更 ...

  7. python编程入门教学下载-Python编程从入门到实践的PDF教程免费下载

    本书旨在让你成为优秀的程序员,具体地说,是优秀的Python程序员.通过阅读本书,你将迅速掌握编程 概念,打下坚实的基础,并养成良好的习惯.阅读本书后,你就可以开始学习Python高级技术,并能够更 ...

  8. python编程入门教程下载-Python编程从入门到实践的PDF教程免费下载

    本书旨在让你成为优秀的程序员,具体地说,是优秀的Python程序员.通过阅读本书,你将迅速掌握编程 概念,打下坚实的基础,并养成良好的习惯.阅读本书后,你就可以开始学习Python高级技术,并能够更 ...

  9. python基础学习[python编程从入门到实践读书笔记(连载四)]:数据可视化项目第15章

    文章目录 matplotlib初学 基础绘图用法 随机漫步 使用Plotly模拟掷骰子 matplotlib初学 基础绘图用法 import matplotlib.pyplot as pltsquar ...

  10. python课本第三章答案idle_第三天任务 (【基于Python编程从入门到实践】第三章 列表 书本及动手试一试)...

    3.1列表什么是列表 列表是由 一系列特定顺序排列的元素组成的 用方括号[]来表示列表 并用逗号来分隔其中的元素 访问列表元素 索引指定访问的列表元素 使用列表中的各个值 3--1 动手试一试 3.1 ...

最新文章

  1. 伍六七带你学算法 入门篇-矩形重叠
  2. python:get和set
  3. 《I'm a Mac:雄狮训练手册》——第1章 开机 1.1 “咚”声的作用
  4. 虚拟机常用的内存查看与分析工具
  5. Identityserver4中ResourceOwnerPassword 模式获取refreshtoken
  6. python turtle 绘图_谈一下Pycharm中关联系统Python解释器的方法
  7. MVC 1.0的可能方法
  8. 使用Spring Data REST将Spring Data JPA存储库导出为REST服务
  9. 第二十七章:五姓七望
  10. 维护2G网络的稳定必须提升到战略高度
  11. 《中文分词算法研究》
  12. 如何打开屏幕坏的手机_手机屏幕坏了如何打开usb调试
  13. 行程单批量打印软件(eTerm航空电子客票行程单打印软件)
  14. 打印机状态错误怎么办 打印机状态错误具体的解决方法
  15. 网盘搜索引擎原理大揭秘
  16. 网站代码sql注入攻击漏洞修复加固防护措施
  17. Predefined Evenly-Distributed Class Centroids(PEDCC)预定义类中心做分类解读
  18. 三十六计解释及快速记忆
  19. 【自动化】自动化工厂需要的十大工控产品
  20. css实现渐变色边框动态旋转

热门文章

  1. viper4android蓝牙耳机,1more ibfree蓝牙耳机音质怎么样
  2. wifi小程序源码-微信小程序源码
  3. springboot 微信小程序支付回调
  4. 联系苹果必备!App Store官方邮箱列表大全
  5. 【自然语言处理】 知识融入方法
  6. cve20190708补丁的kb名称_cve漏洞扫描工具下载|
  7. 光纤到户FTTH施工要求
  8. Oracle ORA-01031
  9. 揭秘真人秀录制真相:GoPro与摄像机如何协同工作进行视频直播?
  10. 如何做好目标管理SMART原则PPT?