城市设计/数据分析/技术分享/摄影记录

0%

Python基础语法项目实践-自动化录入数据

项目背景

某同学需要调研市区里的住宅小区,记录下不同小区的地址、建筑年份和每栋楼里每个单元里每一户的朝向和面积。比如其中一户的资料是:富安花园(小区)3栋 2单元 401户;朝向:南北朝向;面积:90平方。他需要把每一户的信息都记录下来。一般会将一栋楼的数据画在一张平面图,之后再慢慢录入到excel里面,但面对这样的情况,一旦遇到不同单元的户数、朝向和面积,就无法进行复制,而一遍遍的输入数据将会十分心累且耗费时间!一旦出错,难以发现以及改变很费劲,牵连甚广。

于是需求应运而生,如何用python输入模板数据,程序自动录入剩下的数据,甚至不用打开excel

阅读全文 »

本章将利用python图表工具包matplotlib以及空间数据处理工具包geopandas绘制数据地图

准备数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 读取数据
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 设置不弹出警告
df = pd.read_excel('*/*/data_ncov.xlsx')

# 时间序列转换
df['date'] = df['date'].astype('str') # 先将字段转化为字符串
df['date'] = pd.to_datetime(df['date']) # 再进行时间序列转换

# 提取2020-2-1日数据
data_0201 = df[df['date'] == '2020-2-1']
data_0201.head()

绘图模块Matplotlib.pyplot & 空间数据处理模块Geopandas

Matplotlib介绍
Matplotlib是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

我们本章主要使用的是matplotlibpyplot模块,导入方法:

1
import matplotlib.pyplot as plt
阅读全文 »

本章将基于不同日期的各省市疫情数据,用pyecharts做动态可视化图表

首先准备好数据

1
2
3
4
5
6
7
8
9
10
11
# 读取数据
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 设置不弹出警告
df = pd.read_excel('*/*/data_ncov.xlsx')

# 时间序列转换
df['date'] = df['date'].astype('str') # 先将字段转化为字符串
df['date'] = pd.to_datetime(df['date']) # 再进行时间序列转换
df.head()

重新构建函数提取数据

上一章,已经通过构建函数regiondata(where)用于提取数据,此章节新增一个参数time用来提取某日某地区的疫情数据,代码如下:

1
2
3
4
5
6
7
8
9
10
11
# 构建函数提取数据
def regiondata_time(where, time):
datai = df[df['省市'] == where]
# 分别计算新增数据
datai['疑似新增'] = datai['疑似'] - datai['疑似'].shift()
datai['确诊新增'] = datai['确诊'] - datai['确诊'].shift()
datai['死亡新增'] = datai['死亡'] - datai['死亡'].shift()
# 返回某日数据
return datai[datai['date'] == time]

regiondata_time('浙江省', '2020-2-1')
阅读全文 »

这章通过分地区来查看疫情病例的增长情况,并构建函数快速输出指定省市的疫情病例增长曲线

首先依然准备好数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 读取数据
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 设置不弹出警告

df = pd.read_excel('*/*/data_ncov.xlsx')

# 时间序列转换
df['date'] = df['date'].astype('str') # 先将字段转化为字符串
df['date'] = pd.to_datetime(df['date']) # 再进行时间序列转换

# 提取全国数据,并按天计算每日新增数据
data_china = df.groupby('date')[['疑似','确诊','死亡']].sum()
data_china['疑似新增'] = data_china['疑似'] - data_china['疑似'].shift()
data_china['确诊新增'] = data_china['确诊'] - data_china['确诊'].shift()
data_china['死亡新增'] = data_china['死亡'] - data_china['死亡'].shift()
data_china.head()

分别提取湖北、非湖北的数据

参考全国数据的提取及每日新增数据计算方法,提取湖北、非湖北的数据,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 提取湖北省数据,并按天计算每日新增数据
data_hb = df[df['省市'] == '湖北省']
data_hb['疑似新增'] = data_hb['疑似'] - data_hb['疑似'].shift()
data_hb['确诊新增'] = data_hb['确诊'] - data_hb['确诊'].shift()
data_hb['死亡新增'] = data_hb['死亡'] - data_hb['死亡'].shift()

# 提取非湖北省数据,并按天计算每日新增数据
data_nothb_all = df[df['省市'] != '湖北省']
data_nothb = data_nothb_all.groupby('date')[['疑似','确诊','死亡']].sum()
data_nothb['疑似新增'] = data_nothb['疑似'] - data_nothb['疑似'].shift()
data_nothb['确诊新增'] = data_nothb['确诊'] - data_nothb['确诊'].shift()
data_nothb['死亡新增'] = data_nothb['死亡'] - data_nothb['死亡'].shift()

#可以看一下两个数据
data_hb.head()
data_nothb.head()
阅读全文 »

为了在python上快速的绘制地理空间的图,需要安装geopandas来运行,而在安装的过程中,却出现了很多问题,所以在此一一记录。

什么是geopandas?

GeoPandas是一个开源项目,Pandas是Python的一个结构化数据分析的利器,GeoPandas扩展了pandas使用的数据类型,允许对几何类型进行空间操作,DataFrame相当于GIS数据中的一张属性表,使得可以直接操作矢量数据属性表,其目标是使得在python中操作地理数据更方便。

我们正常都会使用PIP直接安装,然而由于它的几个依赖包都有C扩展,直接安装会导致在Windows上编译失败,最终安装失败。安装geopandas之前需要先安装依赖项 GDAL, Fiona , pyprojrtreeshapely

解决办法

自动安装

  1. 首先通过 pip install geopandas直接安装,如果不成功,那么继续往下看

  2. 使用anaconda,通过conda install geopandas进行安装,该命令会自动安装所需要的依赖包,如果这个也不成功,那么继续往下看

手动安装

  1. 以上方式如果都不行,那么则手动安装所需要的依赖包。

    通过该网址下载需要要的包https://www.lfd.uci.edu/~gohlke/pythonlibs/

    需要主要的是自己的python版本以及系统是32还是64位

  1. 下载好进行安装whl,pip install whl文件路径即可,先安装GDAL,然后依次安装其他的。
    比如 pip install E:\setup_package\rasterio-1.0.28-cp27-cp27m-win_amd64.whl
    依次安装好所需要的依赖包,进行下一步

    • 如果出现问题,此时可以通过conda list来看一下已安装了哪些依赖包,针对出现问题但已经安装的可以更换一个版本试试
    • 如果安装过程中报错,有提示缺少VC++ redistributable,则下载对应的VC++分发包安装,再继续安装。
  1. 如果所有依赖包都成功安装,那么最后只需简单的pip install geopandas即可

这章来分析确诊病例与疑似病例的增长情况

首先准备数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 读取数据
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 设置不弹出警告

df = pd.read_excel('*/*/data_ncov.xlsx')

# 时间序列转换
df['date'] = df['date'].astype('str') # 先将字段转化为字符串
df['date'] = pd.to_datetime(df['date']) # 再进行时间序列转换

# 提取全国数据
data_china = df.groupby('date')[['疑似','确诊','死亡']].sum()

# 按天计算每日新增数据
data_china['疑似新增'] = data_china['疑似'] - data_china['疑似'].shift()
data_china['确诊新增'] = data_china['确诊'] - data_china['确诊'].shift()
data_china['死亡新增'] = data_china['死亡'] - data_china['死亡'].shift()
data_china.head()
阅读全文 »

苏州,古之城,山水之间,历史与记忆,文化与价值,我们通过影像记录着一切。

航拍一:

2019年古城调研所拍

阅读全文 »

累计确诊病例走势

这章将使用交互图表工具pyechats来制作动态图表,LETS GO!

首先依然是准备数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 读取数据
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
# 设置不弹出警告

df = pd.read_excel('*/*/data_ncov.xlsx')
#记得修改自己的文件路径

# 时间序列转换
df['date'] = df['date'].astype('str') # 先将字段转化为字符串
df['date'] = pd.to_datetime(df['date']) # 再进行时间序列转换

# 提取全国数据
data_china = df.groupby('date')[['疑似','确诊','死亡']].sum()
data_china.head()

按天计算每日新增数据

目前提取的全国数据的确诊、疑似及死亡病例都是累计数据,我们需要按天计算每日新增数据,计算逻辑如下:

  • 今日新增确诊病例 = 今日确诊病例 - 昨日确诊病例
  • 今日新增疑似病例 = 今日疑似病例 - 昨日疑似病例
  • 今日新增死亡病例 = 今日死亡病例 - 昨日死亡病例
阅读全文 »