以下是“Python+Tableau广东省人口普查可视化的实现”的完整攻略:
1. 数据获取
1.1 数据来源
数据可以从广东省统计局的网站上获取,包括:
- 广东省人口普查数据
- 广东省行政区划数据
我们可以通过 Python 的 requests 库和 bs4 库爬取这些数据。
1.2 爬取数据
请参考以下代码示例:
import requests
from bs4 import BeautifulSoup
# 网页的 URL
url = 'http://www.gdstats.gov.cn/tjsj/tszct/
# 发起 GET 请求
html = requests.get(url).text
# 把 HTML 解析成 BeautifulSoup 对象
soup = BeautifulSoup(html, 'html.parser')
# 获取人口普查数据的 URL
renkou_url = soup.select('a[href*=renkou]')[0]['href']
# 发起 GET 请求,获取人口普查数据
renkou_data = requests.get(renkou_url).content
# 获取行政区划数据的 URL
xzqh_url = soup.select('a[href*=xzqhdm]')[0]['href']
# 发起 GET 请求,获取行政区划数据
xzqh_data = requests.get(xzqh_url).content
2. 数据处理
2.1 数据清洗
为了使数据能够在 Tableau 中进行可视化,我们需要对数据进行一些清洗。比如,我们需要对人口普查数据中的统计局标记(*)进行清理,将值为空的单元格进行填充,并将数据类型进行转换。
请参考以下代码示例:
import pandas as pd
# 读取从网页上获取的人口普查数据
df_renkou = pd.read_excel(renkou_data)
# 去掉人口普查数据中的统计局标记(*)
df_renkou = df_renkou.replace('*', '', regex=True)
# 将所有值为空的单元格填充为 0
df_renkou = df_renkou.fillna(0)
# 将数据类型进行转换
df_renkou = df_renkou.astype({'年末总人口(万人)': 'int', '男性人口(万人)': 'int', '女性人口(万人)': 'int'})
# 读取从网页上获取的行政区划数据
df_xzqh = pd.read_excel(xzqh_data)
# 将行政区划数据的代码列名称修改为“区划代码”
df_xzqh = df_xzqh.rename(columns={'行政区划代码': '区划代码'})
2.2 组合数据
我们需要将人口普查数据和行政区划数据关联起来,以便后续的可视化处理。
请参考以下代码示例:
# 把行政区划数据和人口普查数据进行合并
df = pd.merge(df_xzqh, df_renkou, on='区划代码')
3. 可视化处理
3.1 可视化设计
在 Tableau 中,我们可以使用各种图表和图形来展示数据。比如,我们可以使用地图、条形图、饼图等来展示广东省人口普查数据和行政区划数据。
3.2 可视化实现
请参考以下代码示例:
import tableauhyperapi as tab_api
# 创建 Tableau 超级数据文件
filename = 'guangdong_population.hyper'
table_name = 'population'
# 创建连接
with tab_api.Connection(endpoint='localhost',
server_name='localhost',
username='myusername',
password='mypassword') as connection:
# 创建表结构
table_definition = tab_api.TableDefinition()
table_definition.setDefaultCollation(tab_api.Collation.EN_US_CI_AI)
table_definition.addColumn('区划代码', tab_api.Type.CHAR_STRING)
table_definition.addColumn('行政区划名称', tab_api.Type.CHAR_STRING)
table_definition.addColumn('年末总人口(万人)', tab_api.Type.DOUBLE)
table_definition.addColumn('男性人口(万人)', tab_api.Type.DOUBLE)
table_definition.addColumn('女性人口(万人)', tab_api.Type.DOUBLE)
# 在超级数据文件中创建表
table = connection.catalog.create_table(table_definition, table_name)
# 准备数据
data = []
for _, row in df.iterrows():
data.append([row['区划代码'],
row['行政区划名称'],
row['年末总人口(万人)'],
row['男性人口(万人)'],
row['女性人口(万人)']])
# 添加数据到表中
table.add_rows(data)
# 创建数据源
datasource_name = 'guangdong_population_datasource'
datasource = tab_api.TableauDatasource(connection,
default_project_id='My Project',
name=datasource_name)
datasource.publish(tab_api.DatasourceType.Tableau)
# 创建工作簿
workbook_name = 'guangdong_population_workbook'
workbook = tab_api.Workbook(connection, default_project_id='My Project', name=workbook_name)
workbook.publish()
# 创建工作表
worksheet_name = 'guangdong_population_worksheet'
worksheet = workbook.create_worksheet(name=worksheet_name)
# 创建地图(地理区域)
map_object = worksheet.add_map('geometry(geometry)')
map_object.latitude = 23.75
map_object.longitude = 113.85
map_object.floating=True
map_object.allow_internet_access = True
# 设置地理区域的边界
map_object.set_geometry_column('geometry', 'Spatial')
map_object.set_map_layer('admin_boundaries', 'geometry')
# 在地图上添加数据
dataset = tab_api.Table(join_expression='population')
dataset.add_columns(['行政区划名称', '年末总人口(万人)'])
map_object.add_data(dataset, join_on=('行政区划名称', 'Name'))
3.3 可视化发布
最后,我们需要把生成的数据源、工作簿和工作表发布到 Tableau Server 或 Tableau Online 上去。
示例代码参考:
# 发布数据源
session.publish(datasource,
'My Datasource',
project_id='My Project',
overwrite=True)
# 发布工作簿
session.publish(workbook,
'My Workbook',
project_id='My Project',
overwrite=True,
show_tabs=True)
# 发布工作表
session.publish(worksheet,
'My Worksheet',
project_id='My Project',
overwrite=True,
show_tabs=True)
这就是关于“Python+Tableau广东省人口普查可视化的实现”的完整攻略。希望能对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+Tableau广东省人口普查可视化的实现 - Python技术站