python画图横轴刻度间隔设置为3个月_Python 天气情况数据分析及可视化
Python 天氣情況數(shù)據(jù)分析及可視化
環(huán)境配置
Pycharm開發(fā)環(huán)境
python 版本 python3.7
Anconda 集成開發(fā)環(huán)境
第三方庫導(dǎo)入
## pip install 模塊 清華大學(xué)鏡像源
import requests
from bs4 import BeautifulSoup
import io
import sys
import pandas
from matplotlib import pyplot as plt
步驟
1.爬蟲requests 獲取數(shù)據(jù)
2.pandas 處理數(shù)據(jù)
3.matplotlib 繪制圖形
4.其他 保存數(shù)據(jù)進(jìn)入csv格式,簡單處理,例如雷達(dá)圖
小案例
雷達(dá)圖
#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:07
#@Author : dele
#@File : demo.py
#@Software: PyCharm
# 雷達(dá)圖
import pygal
# pip install pygal 安裝模塊
rader_chart = pygal.Radar()
rader_chart.title = '成績分析'
rader_chart.x_labels = ["數(shù)學(xué)","英語","文綜","理綜","體育"]
rader_chart.add('StdudetA',[139,122,80,250,10])
rader_chart.add('StdudetB',[129,100,80,250,40])
rader_chart.add('StdudetC',[150,100,80,150,60])
rader_chart.add('StdudetD',[99,140,80,150,90])
rader_chart.render_to_file('radar_chart.svg')
效果
天氣案例
爬取天氣網(wǎng)站地址http://www.tianqihoubao.com/lishi/
然后一直選擇找到你需要的數(shù)據(jù)地址
例如:如圖
進(jìn)行網(wǎng)頁分析 F12檢查網(wǎng)頁分析源代碼
Python 爬蟲代碼分析
Pandas matplotlib 模塊
Pandas
pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas 納入了大量庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你很快就會(huì)發(fā)現(xiàn),它是使Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。 ##### 基本功能
1. 數(shù)據(jù)文件讀取/文本數(shù)據(jù)讀取
2. 索引、選取和數(shù)據(jù)過濾
3. 算法運(yùn)算和數(shù)據(jù)對(duì)齊
4. 函數(shù)的應(yīng)用和映射
5. 重置索引
6. 數(shù)學(xué)統(tǒng)計(jì)方法
matplotlib
Matplotlib 是一個(gè) Python 的 2D繪圖庫,它以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形 。 通過 Matplotlib,開發(fā)者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯(cuò)誤圖,散點(diǎn)圖等。
Matplotlib基礎(chǔ)知識(shí)
1.Matplotlib中的基本圖表包括的元素
x軸和y軸
水平和垂直的軸線
x軸和y軸刻度
刻度標(biāo)示坐標(biāo)軸的分隔,包括最小刻度和最大刻度
x軸和y軸刻度標(biāo)簽
表示特定坐標(biāo)軸的值
繪圖區(qū)域
實(shí)際繪圖的區(qū)域
2.hold屬性
hold屬性默認(rèn)為True,允許在一幅圖中繪制多個(gè)曲線;將hold屬性修改為False,每一個(gè)plot都會(huì)覆蓋前面的plot。
但是不推薦去動(dòng)hold這個(gè)屬性,這種做法(會(huì)有警告)。因此使用默認(rèn)設(shè)置即可。
3.網(wǎng)格線
grid方法
使用grid方法為圖添加網(wǎng)格線
設(shè)置grid參數(shù)(參數(shù)與plot函數(shù)相同)
.lw代表linewidth,線的粗細(xì)
.alpha表示線的明暗程度
4.axis方法
如果axis方法沒有任何參數(shù),則返回當(dāng)前坐標(biāo)軸的上下限
5.xlim方法和ylim方法
除了plt.axis方法,還可以通過xlim,ylim方法設(shè)置坐標(biāo)軸范圍
6.legend方法
#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:26
#@Author : dele
#@File : weather.py
#@Software: PyCharm
import requests
from bs4 import BeautifulSoup
import io
import sys
import pandas
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
def get_data(weather_url):
rseponse = requests.get(weather_url)
html = rseponse.content.decode('gbk')
soup = BeautifulSoup(html,'html.parser')
tr_lsit = soup.find_all('tr')
print(tr_lsit)
dates,conditions,temp = [],[],[]
for data in tr_lsit[1:]:
sub_data = data.text.split()
dates.append(sub_data[0])
conditions.append(''.join(sub_data[1:3]))
temp.append(''.join(sub_data[3:6]))
# 數(shù)據(jù)保存
_data = pandas.DataFrame()
_data['日期'] = dates
_data['天氣情況'] = conditions
_data['氣溫'] = temp
return _data
# print(_data)
# _data.to_csv('anqing.csv',index=False,encoding='gbk')
# 獲取數(shù)據(jù)并保存csv格式,進(jìn)行下面的數(shù)據(jù)分析
# 定義成函數(shù)形式進(jìn)行封裝
data_month_3 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202003.html')
data_month_4 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202004.html')
data_month_5 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202005.html')
data = pandas.concat([data_month_3,data_month_4,data_month_5]).reset_index(drop=True)
data.to_csv('anqing.csv',index=False,encoding='gbk')
數(shù)據(jù)可視化
from matplotlib import pyplot as plt
# 畫圖
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
datalsit = pandas.read_csv('G:/Python_Web/weather/anqing.csv',encoding='gbk')
# 數(shù)據(jù)處理
datalsit['最高氣溫'] = datalsit['氣溫'].str.split('/',expand=True)[0]
datalsit['最低氣溫'] = datalsit['氣溫'].str.split('/',expand=True)[1]
datalsit['最高氣溫'] = datalsit['最高氣溫'].map(lambda x:int(x.replace('℃','')))
datalsit['最低氣溫'] = datalsit['最低氣溫'].map(lambda x:int(x.replace('℃','')))
dates = datalsit['日期']
highs = datalsit['最高氣溫']
lows = datalsit['最低氣溫']
# 畫圖
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.2)
# 圖表格式
# 設(shè)置圖標(biāo)的圖形格式
plt.title('2020安慶市3-5月天氣情況',fontsize=24)
plt.xlabel('',fontsize=6)
fig.autofmt_xdate()
plt.ylabel('氣溫',fontsize=12)
plt.tick_params(axis='both',which='major',labelsize=10)
# 修改刻度
plt.xticks(dates[::20])
# 顯示
plt.show()
效果
完整代碼
#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:26
#@Author : dele
#@File : weather.py
#@Software: PyCharm
import requests
from bs4 import BeautifulSoup
import io
import sys
import pandas
from matplotlib import pyplot as plt
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
def get_data(weather_url):
rseponse = requests.get(weather_url)
html = rseponse.content.decode('gbk')
soup = BeautifulSoup(html,'html.parser')
tr_lsit = soup.find_all('tr')
print(tr_lsit)
dates,conditions,temp = [],[],[]
for data in tr_lsit[1:]:
sub_data = data.text.split()
dates.append(sub_data[0])
conditions.append(''.join(sub_data[1:3]))
temp.append(''.join(sub_data[3:6]))
# 數(shù)據(jù)保存
_data = pandas.DataFrame()
_data['日期'] = dates
_data['天氣情況'] = conditions
_data['氣溫'] = temp
return _data
# print(_data)
# _data.to_csv('anqing.csv',index=False,encoding='gbk')
# data_month_3 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202003.html')
# data_month_4 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202004.html')
# data_month_5 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202005.html')
#
# data = pandas.concat([data_month_3,data_month_4,data_month_5]).reset_index(drop=True)
# data.to_csv('anqing.csv',index=False,encoding='gbk')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
datalsit = pandas.read_csv('G:/Python_Web/weather/anqing.csv',encoding='gbk')
# 數(shù)據(jù)處理
datalsit['最高氣溫'] = datalsit['氣溫'].str.split('/',expand=True)[0]
datalsit['最低氣溫'] = datalsit['氣溫'].str.split('/',expand=True)[1]
datalsit['最高氣溫'] = datalsit['最高氣溫'].map(lambda x:int(x.replace('℃','')))
datalsit['最低氣溫'] = datalsit['最低氣溫'].map(lambda x:int(x.replace('℃','')))
dates = datalsit['日期']
highs = datalsit['最高氣溫']
lows = datalsit['最低氣溫']
# 畫圖
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.2)
# 圖表格式
# 設(shè)置圖標(biāo)的圖形格式
plt.title('2020安慶市3-5月天氣情況',fontsize=24)
plt.xlabel('',fontsize=6)
fig.autofmt_xdate()
plt.ylabel('氣溫',fontsize=12)
plt.tick_params(axis='both',which='major',labelsize=10)
# 修改刻度
plt.xticks(dates[::20])
# 顯示
plt.show()
博客地址https://www.delehub.top/
知乎https://www.zhihu.com/people/bi-shi-san-2-81
總結(jié)
以上是生活随笔為你收集整理的python画图横轴刻度间隔设置为3个月_Python 天气情况数据分析及可视化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git bash here创建项目无法选
- 下一篇: @select注解_mybatis开发,