「Python+Django」在網(wǎng)頁實(shí)現(xiàn)天氣數(shù)據(jù)可視化(氣溫變化圖和天氣詞云)
「Python+Django」在網(wǎng)頁實(shí)現(xiàn)天氣數(shù)據(jù)可視化(氣溫變化圖和天氣詞云)
1 描述
通過 python 作為后端,運(yùn)用django框架,將天氣數(shù)據(jù)可視化。包括:
- 氣溫變化趨勢(shì)圖,顯示某個(gè)城市某年的氣溫變化或城市某年某月的氣溫變化(最高溫和最低溫);
- 天氣詞云,顯示某城市,某年、某年某月、近幾年的天氣情況,可視化地表示哪種天氣出現(xiàn)的多。
實(shí)現(xiàn)效果:
python+django實(shí)現(xiàn)天氣數(shù)據(jù)可視化
2 代碼
2.1 django模型
只定義了一個(gè)記錄模型:
class Record(models.Model):
id = models.IntegerField(verbose_name="記錄id", primary_key=True)
date = models.DateField(verbose_name="日期")
week = models.CharField(verbose_name="星期", max_length=255)
maxtemp = models.FloatField(verbose_name="最高氣溫")
mintemp = models.FloatField(verbose_name="最低氣溫")
weather = models.CharField(verbose_name="天氣", max_length=255)
wind = models.CharField(verbose_name="風(fēng)向", max_length=255)
city = models.CharField(verbose_name="城市", max_length=255)
2.2 django視圖
只需要學(xué)會(huì)基本的使用django的方法,加上python的基本知識(shí),就能實(shí)現(xiàn)這個(gè)系統(tǒng)功能。由于文件較多,又存在諸多重復(fù),且代碼比較簡(jiǎn)單,就不一一列舉了,以下用偽代碼的方式展示,實(shí)現(xiàn)方法。
2.2.1 index首頁
def index(request):
return render(request, 'index.html')
2.2.2 datachart 圖表頁(偽代碼)
def datachart(request, city, year):
figtitle = "" # 圖表標(biāo)題
fig = plt.figure(figsize=(16, 8)) # 定義畫布
ax = fig.add_subplot(111) # 初始化一個(gè)圖
date = 從數(shù)據(jù)庫讀取 日期 == year 的所有日期
min_temp = 從數(shù)據(jù)庫讀取 城市 == city 且日期 == year 的全部最低氣溫
max_temp = 從數(shù)據(jù)庫讀取 城市 == city 且日期 == year 的全部最高氣溫
# 畫圖
ax.plot(date,min_temp,label="最低氣溫")
ax.plot(date,max_temp,label="最高氣溫")
# 構(gòu)造返回值
context = {"image": data, # 圖表
"city": city, # 城市
"figtitle": figtitle, # 圖標(biāo)題
"citylist": city_list, # 城市列表
}
return render(request, 'datachart.html', context=context)
2.2.3 wordscloud 詞云頁(偽代碼)
def wordscloud(request, city, year):
city = eval(city)
year = eval(year)
month = request.GET.get('month')
# 處理天氣詞句
1. 從數(shù)據(jù)庫獲取 城市 == city, 日期 == year的全部天氣
2. 對(duì)天氣數(shù)據(jù)進(jìn)行處理,獲取到天氣類型
3. 對(duì)天氣類型進(jìn)行統(tǒng)計(jì)出現(xiàn)次數(shù)
4. 根據(jù)統(tǒng)計(jì)數(shù)量的不同,繪制詞云
5. 將詞云返回到模板中
浙公網(wǎng)安備 33010602011771號(hào)