python实现天气数据爬取实现数据可视化和天气查询gui界面设计

2023-11-02

在学校大一实训中,我的实训项目就是使用python爬取天气数据并且实现gui图形界面的设计。

实训结束了,希望自己的代码可以帮助大家的学习。(代码是大一时候写的,比较青涩,大家多包涵)

第一个部分是getdata的部分,就是爬取数据,并将数据存放在csv文件中

(爬取数据为指定城市5天的天气情况,包括:日期,天气,最高温度,最低温度,风向,风级,当天天气小贴士)

# Author:吼吼
# -*- codeing=utf-8 -*-
# @Time :2021/8/21 10:24
# @File: getdata.py
# @Software:PyCharm

# -*- coding: utf-8 -*-

import urllib.request
import csv
import json
import gzip  # 解压、压缩的模块

cityname = input("请输入:")
# 访问的url,其中urllib.parse.quote是将城市名转换为url的组件
url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(cityname)
print(urllib.parse.quote(cityname))
# 发出请求并读取到weather_data
weather_data = urllib.request.urlopen(url).read()
# 以utf-8的编码方式解压数据
weather_data = gzip.decompress(weather_data).decode('utf-8')
# 将json数据转化为dict数据
weather_dict = json.loads(weather_data)
print(weather_dict)
if weather_dict.get('desc') == 'invilad-citykey':
    print("输入的城市名有误")
elif weather_dict.get('desc') == 'OK':
    forecast = weather_dict.get('data').get('forecast')

    day1 = [weather_dict.get('data').get('city'), forecast[0].get('date'), forecast[0].get('type')]
    high = (str(forecast[0].get('high'))).replace("℃", '')
    day1.append(high.replace("高温 ", ""))
    low = (str(forecast[0].get('low'))).replace("℃", '')
    day1.append(low.replace("低温 ", ""))
    day1.append(forecast[0].get('fengxiang'))
    day1.append(forecast[0].get('fengli'))
    day1.append(weather_dict.get('data').get('ganmao'))
    wendu = weather_dict.get('data').get('wendu')
    day1.append(wendu)
    print(day1)

    day2 = [weather_dict.get('data').get('city'), forecast[1].get('date'), forecast[1].get('type')]
    high = (str(forecast[1].get('high'))).replace("℃", '')
    day2.append(high.replace("高温 ", ""))
    low = (str(forecast[1].get('low'))).replace("℃", '')
    day2.append(low.replace("低温 ", ""))
    day2.append(forecast[1].get('fengxiang'))
    day2.append(forecast[1].get('fengli'))
    print(day2)

    day3 = [weather_dict.get('data').get('city'), forecast[2].get('date'), forecast[2].get('type')]
    high = (str(forecast[2].get('high'))).replace("℃", '')
    day3.append(high.replace("高温 ", ""))
    low = (str(forecast[2].get('low'))).replace("℃", '')
    day3.append(low.replace("低温 ", ""))
    day3.append(forecast[2].get('fengxiang'))
    day3.append(forecast[2].get('fengli'))
    print(day3)

    day4 = [weather_dict.get('data').get('city'), forecast[3].get('date'), forecast[3].get('type')]
    high = (str(forecast[3].get('high'))).replace("℃", '')
    day4.append(high.replace("高温 ", ""))
    low = (str(forecast[3].get('low'))).replace("℃", '')
    day4.append(low.replace("低温 ", ""))
    day4.append(forecast[3].get('fengxiang'))
    day4.append(forecast[3].get('fengli'))
    print(day4)

    day5 = [weather_dict.get('data').get('city'), forecast[4].get('date'), forecast[4].get('type')]
    high = (str(forecast[4].get('high'))).replace("℃", '')
    day5.append(high.replace("高温 ", ""))
    low = (str(forecast[4].get('low'))).replace("℃", '')
    day5.append(low.replace("低温 ", ""))
    day5.append(forecast[4].get('fengxiang'))
    day5.append(forecast[4].get('fengli'))
    print(day5)


def write_to_csv(file_name, data1, data2, data3, data4, data5):
    """保存为csv文件"""
    with open(file_name, 'a', encoding="utf-8", newline="", errors='ignore') as f:
        header = ['城市', '日期', '天气', '最高气温', '最低气温', '风向', '风级', '感冒小贴士', '现在温度']
        f_csv = csv.writer(f)
        f_csv.writerow(header)
        f_csv.writerow(data1)
        f_csv.writerow(data2)
        f_csv.writerow(data3)
        f_csv.writerow(data4)
        f_csv.writerow(data5)
    f.close()


write_to_csv("weather_data1.csv", day1, day2, day3, day4, day5)
csv = "weather_data1.csv"

运行getdata.py文件

 得到数据

 第二的部分就是数据可视化的部分(将爬取到的数据进行可视化操作,绘制“未来5天气候分布饼图”,“未来5天风级图”,“未来5天高温低温变化曲线图”和“未来5天高温低温变化柱形图”

# Author:吼吼
# -*- codeing=utf-8 -*-
# @Time :2021/8/21 10:24
# @File: dataAnalysis.py
# @Software:PyCharm

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from datetime import timedelta, datetime

times = []


def tem1(data):  # 未来5天高温低温变化柱形图绘制
    # 这两行代码解决 plt 中文显示的问题
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False

    # 输入统计数据
    tem_high = list(data['最高气温'])
    tem_low = list(data['最低气温'])

    bar_width = 0.3  # 条形宽度
    index_high = np.arange(len(times))
    index_low = index_high + bar_width

    # 使用两次 bar 函数画出两组条形图
    plt.bar(index_high, height=tem_high, width=bar_width, color='red', label='高温')
    plt.bar(index_low, height=tem_low, width=bar_width, color='lightblue', label='低温')

    plt.legend()  # 显示图例
    plt.xticks(index_high + bar_width / 2, times)
    plt.ylabel('温度')  # 纵坐标轴标题
    plt.title('高温低温柱形图')  # 图形标题
    plt.savefig("./未来5天高温低温变化柱形图.jpg")
    plt.show()
    plt.close()


def tem_curve(data):
    """温度曲线绘制"""
    today = datetime.today()
    day = today.strftime('%m%d')
    for i in range(0, 5):
        day = today.strftime('%m%d')
        if day[0] == '0' and day[2] != '0':
            d = day[1] + '月' + day[2:] + '日'
        elif day[0] == '0' and day[2] == '0':
            d = day[1] + '月' + day[3] + '日'
        elif day[0] != '0' and day[2] == '0':
            d = day[0:2] + '月' + day[3] + '日'
        else:
            d = day[0:2] + '月' + day[2:] + '日'
        times.append(d)
        today = today + timedelta(+1)

    tem_low = list(data['最低气温'])
    tem_high = list(data['最高气温'])

    tem_high_ave = sum(tem_high) / 5  # 求平均高温
    tem_low_ave = sum(tem_low) / 5  # 求平均低温

    tem_max = max(tem_high)
    tem_max_date = tem_high.index(tem_max)  # 求最高温度
    tem_min = min(tem_low)
    tem_min_date = tem_low.index(tem_min)  # 求最低温度

    x = range(1, 6)
    plt.figure(1)
    plt.plot(x, tem_high, color='red', label='高温')  # 画出高温度曲线
    plt.scatter(x, tem_high, color='red')  # 点出每个时刻的温度点
    plt.plot(x, tem_low, color='blue', label='低温')  # 画出低温度曲线
    plt.scatter(x, tem_low, color='blue')  # 点出每个时刻的温度点

    plt.plot([1, 6], [tem_high_ave, tem_high_ave], c='black', linestyle='--')  # 画出平均温度虚线
    plt.plot([1, 6], [tem_low_ave, tem_low_ave], c='black', linestyle='--')  # 画出平均温度虚线
    plt.legend()
    plt.text(tem_max_date + 0.15, tem_max + 0.15, str(tem_max), ha='center', va='bottom', fontsize=10.5)  # 标出最高温度
    plt.text(tem_min_date + 0.15, tem_min + 0.15, str(tem_min), ha='center', va='bottom', fontsize=10.5)  # 标出最低温度
    plt.xticks(x, (times[0], times[1], times[2], times[3], times[4]))
    plt.title('未来5天高温低温变化曲线图')
    plt.xlabel('日期')
    plt.ylabel('摄氏度/℃')
    plt.savefig("./未来5天高温低温变化曲线图.jpg")
    plt.close()


def change_wind(wind):
    """改变风向"""
    for i in range(0, 5):
        if wind[i] == "北风":
            wind[i] = 90
        elif wind[i] == "南风":
            wind[i] = 270
        elif wind[i] == "西风":
            wind[i] = 180
        elif wind[i] == "东风":
            wind[i] = 360
        elif wind[i] == "东北风":
            wind[i] = 45
        elif wind[i] == "西北风":
            wind[i] = 135
        elif wind[i] == "西南风":
            wind[i] = 225
        elif wind[i] == "东南风":
            wind[i] = 315
    return wind


def chenge_wind_speed(list):
    """将风级转换成风速"""
    for i in range(0, 5):
        if list[i] == '<![CDATA[0级]]>':
            list[i] = 0.1
        elif list[i] == '<![CDATA[1级]]>':
            list[i] = 0.9
        elif list[i] == '<![CDATA[2级]]>':
            list[i] = 2.5
        elif list[i] == '<![CDATA[3级]]>':
            list[i] = 4.4
        elif list[i] == '<![CDATA[4级]]>':
            list[i] = 13.4
    return list


def wind_radar(data):
    """风向雷达图"""
    wind = list(data['风向'])
    wind_speed = list(data['风级'])
    wind_speed = chenge_wind_speed(wind_speed)
    wind = change_wind(wind)

    degs = np.arange(45, 361, 45)  # 起点是45度,终点是361度,间隔是45度
    temp = []
    for deg in degs:
        speed = []
        # 获取 wind_deg 在指定范围的风速平均值数据
        for i in range(0, 5):
            if wind[i] == deg:
                speed.append(wind_speed[i])
        if len(speed) == 0:
            temp.append(0)
        else:
            temp.append(sum(speed) / len(speed))
    print(temp)
    N = 8
    theta = np.arange(0. + np.pi / 8, 2 * np.pi + np.pi / 8, 2 * np.pi / 8)
    # 数据极径
    radii = np.array(temp)
    # 绘制极区图坐标系
    plt.axes(polar=True)
    # 定义每个扇区的RGB值(R,G,B),x越大,对应的颜色越接近蓝色
    colors = [(1 - x / max(temp), 1 - x / max(temp), 0.6) for x in radii]
    plt.bar(theta, radii, width=(2 * np.pi / N), bottom=0.0, color=colors)
    plt.title('未来5天风级图', x=0.2, fontsize=20)
    plt.savefig("./未来5天风级图.jpg")
    plt.close()


def weather_pie(data):
    """绘制天气饼图"""
    weather = list(data['天气'])
    dic_wea = {}
    for i in range(0, 5):
        if weather[i] in dic_wea.keys():
            dic_wea[weather[i]] += 1
        else:
            dic_wea[weather[i]] = 1
    print(dic_wea)
    explode = [0.01] * len(dic_wea.keys())
    color = ['lightskyblue', 'silver', 'yellow', 'salmon', 'grey', 'lime', 'gold', 'red', 'green', 'pink']
    plt.pie(dic_wea.values(), explode=explode, labels=dic_wea.keys(), autopct='%1.1f%%', colors=color)
    plt.title('未来5天气候分布饼图')
    plt.savefig("./未来5天气候分布饼图.jpg")
    plt.close()


plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文显示问题
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

data = pd.read_csv('weather_data1.csv')
print(data)
tem_curve(data)
wind_radar(data)
weather_pie(data)
tem1(data)

 运行dataAnalysis.py文件得到柱形图,曲线图和饼图。

 

 

 

 第三部分是gui界面的设计,其中设计有功能按钮:“查询”、“最低、最高温度曲线图”、“微信推送”、“更多”等功能

  其中“微信推送”使用了push+的ip实现(具体操作可以自己去push+网站查看(搜索”pushplus(推送加)微信推送消息直达“就可以了)

  这里的ip(就是代码中的token)要自己去pushplus上面获取自己的,不然查询的信息就全部发给我了(笑哭)我自从发了这个博客,就已经收到了很多的天气查询信息了。

  收到的信息的样式是这样滴:

”更多“功能是使用了中国天气网的链接

(因为我的图片是.jpg的格式,所以我都是使用的canva。)

(welcome图片是我自己设置的背景图片,大家可以自己选定背景图片)

  但是鉴于我在发布这篇博客之后,有很多小伙伴都向我要我的背景图片,所以我还是将我的背景图片发布一下

# Author:吼吼
# -*- codeing=utf-8 -*-
# @Time :2021/8/21 17:42
# @File: gui.py
# @Software:PyCharm
import json
import tkinter
# 注意这个是Python的标准库,就不需要去安装
from tkinter import *
from tkinter import messagebox
from datetime import timedelta, datetime
import matplotlib
import requests
from PIL import Image
from PIL import ImageTk
import pandas as pd
from matplotlib import pyplot as plt
import webbrowser


def weChat():
    curdate = "当前日期:" + times[0]  # 得到当前日期
    city = "当前城市:" + df['城市'][0]
    htemp = "最高气温:" + str(df['最高气温'][0])
    ltemp = "最低气温:" + str(df['最低气温'][0])
    wind = "风向:" + df['风向'][0]
    pro = "风级:" + df['风级'][0]
    tips="感冒小贴士:"+df["感冒小贴士"][0]
    text = curdate + '\n' + city + '\n' + htemp + '\n' + ltemp + '\n' + wind + '\n' + pro + '\n' + tips + "\n"

    token = 'df951a73b8714848b1329b7fad628865'  # 在push+网站中可以找到
    title = '您的天气预报'  # 改成你要的标题内容
    content = text  # 改成你要的正文内容
    url = 'http://www.pushplus.plus/send'

    data = {"token": token, "title": title, "content": content}
    body = json.dumps(data).encode(encoding='utf-8')
    headers = {'Content-Type': 'application/json'}
    requests.post(url, data=body, headers=headers)


def more():
    webbrowser.open("http://www.weather.com.cn")


def wind():
    root = tkinter.Toplevel()  # 实例化一个子窗口对象
    root.geometry("600x600")  # 设置窗口大小
    root.resizable(width=False, height=False)  # 设置为不可拉伸
    root.title("风级饼图")  # 设置标题

    canvas1 = tkinter.Canvas(root, width=640, height=580, bg='white')  # 设置canvas
    pil_image1 = Image.open("./未来5天风级图.jpg")  # 打开背景图片
    pil_image_resize1 = pil_image1.resize((640, 480))
    im1 = ImageTk.PhotoImage(pil_image_resize1)
    canvas1.create_image((280, 210), image=im1)  # 将图片加载到canvas来
    canvas1.place(x=10, y=80, width=640, height=580)  # 放到子屏幕当中
    root.mainloop()


def climate():
    root = tkinter.Toplevel()  # 实例化一个子窗口对象
    root.geometry("600x600")  # 设置窗口大小
    root.resizable(width=False, height=False)  # 设置为不可拉伸
    root.title("气候分布饼图")  # 设置标题

    canvas1 = tkinter.Canvas(root, width=640, height=580, bg='white')  # 设置canvas
    pil_image1 = Image.open("./未来5天气候分布饼图.jpg")  # 打开背景图片
    pil_image_resize1 = pil_image1.resize((640, 480))
    im1 = ImageTk.PhotoImage(pil_image_resize1)
    canvas1.create_image((280, 210), image=im1)  # 将图片加载到canvas来
    canvas1.place(x=10, y=80, width=640, height=580)  # 放到子屏幕当中
    root.mainloop()


def higtep():
    canvas1 = tkinter.Canvas(root, width=640, height=480, bg='white')  # 设置canvas
    pil_image1 = Image.open("./未来5天高温低温变化曲线图.jpg")  # 打开背景图片
    pil_image_resize1 = pil_image1.resize((640, 480))
    im1 = ImageTk.PhotoImage(pil_image_resize1)
    canvas1.create_image((320, 220), image=im1)  # 将图片加载到canvas来
    canvas1.place(x=290, y=250, width=640, height=480)  # 放到原屏幕当中
    root.mainloop()


def searchWeather():
    """查询天气"""
    if txt_city.get() == '':
        messagebox.showinfo("提示", "你要先输入城市哦~~")
        return
    inputcity = txt_city.get()  # 得到输入框的文字

    weather_data_list = []
    h_temp = []
    l_temp = []
    date = []
    i = 0
    for time in times:
        curdate = "日期:" + time
        city = "当前城市:" + df['城市'][i]
        htemp = "最高气温:" + str(df['最高气温'][i])
        ltemp = "最低气温:" + str(df['最低气温'][i])
        wind = "风向:" + df['风向'][i]
        pro = "风级:" + df['风级'][i]
        weather_data_list.append(curdate)
        weather_data_list.append(city)
        weather_data_list.append(htemp)
        h_temp.append(htemp)
        weather_data_list.append(ltemp)
        l_temp.append(ltemp)
        weather_data_list.append(wind)
        weather_data_list.append(pro)
        weather_data_list.append('\n')
        date.append(time)
        i = i + 1
    print(weather_data_list)
    # 将内容显示在窗体上
    weatherlistbox = tkinter.Listbox(root, bd=1, height=29, SelectionMode=None, bg="white", font=("黑体", 12))
    weatherlistbox.pack(side=LEFT, fill=BOTH)
    scrollbal_v = Scrollbar(root)
    scrollbal_v.pack(side=LEFT, fill=Y)
    i = 0
    for item in weather_data_list:
        weatherlistbox.insert("end", item)

    weatherlistbox.place(x=120, y=250)
    scrollbal_v.config(command=weatherlistbox.yview)
    weatherlistbox.config(yscrollcommand=scrollbal_v.set)

    # 添加天气温馨提示
    tips = df["感冒小贴士"][0]
    print(str(tips))
    lbl_weather_tips = tkinter.Label(root, text=tips, font=("黑体", 15), fg="black", bg="pink")
    # text参数用于指定显示的文本;font参数用于指定字体大小和字体样式;fg参数用于指定字体颜色;
    lbl_weather_tips.place(x=100, y=210, width=800, height=30)


plt.rcParams['font.family'] = 'Arial Unicode MS'
plt.rcParams['axes.unicode_minus'] = False
matplotlib.rcParams['font.family'] = 'SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示
matplotlib.rcParams['axes.unicode_minus'] = False  # 负号显示
df = pd.read_csv('weather_data1.csv')

"""得到日期"""
times = []
today = datetime.today()
day = today.strftime('%m%d')
for i in range(0, 5):
    day = today.strftime('%m%d')
    if day[0] == '0' and day[2] != '0':
        d = day[1] + '月' + day[2:] + '日'
    elif day[0] == '0' and day[2] == '0':
        d = day[1] + '月' + day[3] + '日'
    elif day[0] != '0' and day[2] == '0':
        d = day[0:2] + '月' + day[3] + '日'
    else:
        d = day[0:2] + '月' + day[3:] + '日'
    times.append(d)
    today = today + timedelta(+1)
print(times)

"""初始化窗口"""
root = tkinter.Tk()  # 实例化一个窗口对象
root.geometry("1000x700")  # 设置窗口大小
root.resizable(width=False, height=False)  # 设置为不可拉伸
root.title("Weather query1.0")  # 设置标题

"""添加背景图片"""
canvas = tkinter.Canvas(root, width=1000, height=170, bg='white')  # 设置canvas
pil_image = Image.open('welcome.png')  # 打开背景图片
pil_image_resize = pil_image.resize((1000, 170))
im = ImageTk.PhotoImage(pil_image_resize)
canvas.create_image((500, 135), image=im)  # 将图片加载到canvas来
canvas.place(x=0, y=0, width=1000, height=170)  # 放到屏幕当中

"""添加按钮"""
btn_search = tkinter.Button(text="查询", font=("黑体", 15), bg="pink", command=searchWeather)
btn_search.place(x=280, y=170, width=50, height=30)

btn_search = tkinter.Button(text="最低、最高温度曲线图", font=("黑体", 15), bg="pink", fg="black", command=higtep)
btn_search.place(x=330, y=170, width=220, height=30)

btn_search = tkinter.Button(text="微信推送", command=weChat, font=("黑体", 15), bg="pink", fg="black")
btn_search.place(x=790, y=170, width=100, height=30)

btn_search = tkinter.Button(text="风级饼图", font=("黑体", 15), bg="pink", fg="black", command=wind)
btn_search.place(x=550, y=170, width=100, height=30)

btn_search = tkinter.Button(text="气候分布饼图", font=("黑体", 15), bg="pink", fg="black", command=climate)
btn_search.place(x=650, y=170, width=140, height=30)

btn_search = tkinter.Button(text="退出", font=("黑体", 15), bg="pink", fg="black", command=root.quit)
btn_search.place(x=950, y=170, width=60, height=30)

btn_search = tkinter.Button(text="更多", command=more, bg="pink", fg="black", font=("黑体", 15))
btn_search.place(x=890, y=170, width=60, height=30)

"""添加标签控件:"""
# 添加提示框
lbl_weather = tkinter.Label(root, text="请输入的您的城市:", font=("黑体", 15), fg="black", bg="pink")
# text参数用于指定显示的文本;font参数用于指定字体大小和字体样式;fg参数用于指定字体颜色;
lbl_weather.place(x=0, y=170, width=190, height=30)

# 添加文本框(输入框)
txt_city = tkinter.Entry(root, font=("黑体", 15), fg="black")
txt_city.place(x=190, y=170, width=90, height=30)

# 显示窗口
root.mainloop()

 注意:大家在运行过程中要严格按照getdata.py,dataAnalysis.py,gui.py三个文件的顺序运行。在每次需要查询新的城市的时候都需要将原来城市csv文件删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现天气数据爬取实现数据可视化和天气查询gui界面设计 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • NGINX源码之:listen和server_name命令与listening监听创建

    在http块的server块解析中 通过解析listen和server name命令配置 完成端口监听的初始化 虚拟主机配置关联 实现从host port到虚拟主机的映射关系 在进入解析源码之前 先来看看server块集中配置 server
  • html如何给3种渐变色,css中颜色渐变的实现(三种方式)

    本篇文章给大家带来的内容是关于css中颜色渐变的实现 三种方式 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 注意IE9及之前的版本不支持渐变 Safari要加 webkit 的前缀 Opera要加 o 的前缀 Firefo
  • explicit关键字的作用及其用法

    一 explicit作用 在C 中 explicit关键字用来修饰类的构造函数 被修饰的构造函数的类 不能发生相应的隐式类型转换 只能以显示的方式进行类型转换 这个关键字只能用在类内部的构造函数声明上 而不能用在类外部的函数定义上 它的作用
  • vue后台返回二维码展示在前端页面,复制二维码到剪贴板

    1 二维码渲染 vue请求 后端返回二维码 在请求时加上 responseType blob export function getQrCode query return request url xx method get params q
  • 单点登录CAS学习(二):使用IDEA搭建cas-overlay-5.3工程

    上一篇对于单点登陆进行了初步了解 我们做单点登录应用的时候 会有两个场景 单点登录的服务端 单点登录的客户端 指各个应用系统 从本篇开始的系列文章将分别介绍服务端的工程如何搭建 客户端如何改造以适用于单点登录 首先从服务端开始 我们往往需要
  • ElasticSearch集群管理(VMware)

    一 集群结构 ES通常以集群方式工作 这样做不仅能够提高 ES的搜索能力还可以处理大数据搜索的能力 同时也增加了系统的 容错能力及高可用 下图是ES集群结构的示意图 此处的设置为 每个主分片有两个副本 如果某个节点挂了也不怕 比如节点1挂了
  • 操作系统学习(十一)处理机调度

    一 知识总览 调度 按某种规则来决定处理这些任务的顺序 多道程序系统中 进程的数目往往多于处理机的数目 按照一定的算法从进程就绪队列中选择一个进程将处理机分配给他 以实现进程的并发执行 二 高级调度 作业调度 作业 用户在一次解题或一个事务
  • 计算机单位换算

    一 计算机容量单位 容量单位 字节 B gt 千字节 KB gt 兆字节 MB gt 吉字节 GB gt TB gt PB gt EB ZB YB NB DB等 注 Byte就是B也就是字节 KB是千字节 MB是兆 GB是千兆 TB是千千兆
  • jvisualvm监控tomcat

    1 修改Tomcat的catalina sh文件 修改tomcat的bin目录下的 catalina sh文件 搜索 JAVA OPTS 在引号中添加参数 Dcom sun management jmxremote port 10086 D
  • 设计RandomPool结构

    详情参看 程序员代码面试指南 P474 package com gxu dawnlab algorithm5 import java util HashMap 设计RandomPool结构 author junbin 2019年7月1日 p
  • 手动添加本地路由表并用Quagga+ospf通知其它路由

    文章目录 参考文章 一 路由设置 1 参数说明 2 查询设置 二 动态路由的设置 实验 参考文章 Linux下使用Quagga搭建软路由 OSPFv2学习 鳥哥的 Linux 私房菜 一 路由设置 1 参数说明 root anzye rou
  • AssetsBundle资源包的打包和加载

    如何打Assetsbundle资源包呢 这样 using UnityEditor using UnityEngine public class BuildAssetBundle
  • openmv图像识别:宝藏多颜色图形同时识别

    前言 最近参加了光电赛 校赛运气不好碰到铁板被淘汰了 emmm 我是大一学硬件的的 负责的是宝藏识别部分 好歹花了好几天学python 研究openmv写出来的代码 即使没啥技术性 我也不甘心就这么没了 发出来记录一下 目录 零 预备知识
  • 物联网【劲爆发现】免费云服务平台,AP透传,Web透传,ESP8266,Hex格式数据

    劲爆发现 免费云服务平台 AP透传 Web透传 ESP8266 Hex格式数据 安卓一键配置 今日 闲暇 发布一个免费的云服务器 供大家测试 先上图 看看如何使用吧 1 先从附件下载Esp8266固件及其下载工具 如下图 链接 http p
  • 单链表的冒泡排序

    当采用冒泡排序时 每一个元素与后一个元素比较 若这个元素小于后一个元素 则交换这两个元素的位置 外层循环n 1次 内循环n 1 i次 首先定义结构体指针stu p q tail p L 让p指向L L是首元结点 Int count 0 先循
  • 一些好的学习网址

    地址 http chs gotdotnet com quickstart 描述 本站点是微软 NET技术的快速入门网站 我们不必再安装 NET Framework中的快速入门示例程序 直接在网上查看此示例即看 名称 微软官方 NET指导站点
  • npm常用命令学习(npm install -D,semver版本规范, npm进行版本管理的最佳实践用法)...

    什么是npm npm有两层含义 一层含义是Node的开放式模块登记和管理系统 网址为npmjs org 另一层含义是Node默认的模块管理器 是一个命令行下的软件 用来安装和管理Node模块 npm不需要单独安装 在安装Node的时候 会连
  • Qt事件处理机制整个流程--以鼠标在一个窗口中点击为例

    转载自 http mobile 51cto com symbian 272812 htm 在此谢谢原作者的分享 第一部分 本篇来介绍Qt 事件处理机制 深入了解事件处理系统对于每个学习Qt人来说非常重要 可以说 Qt是以事件驱动的UI工具集
  • 华为OD机试真题-需要打开多少监控器-2023年OD统一考试(B卷)

    题目描述 某长方形停车场 每个车位上方都有对应监控器 当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时 监控器才需要打开 给出某一时刻停车场的停车分布 请统计最少需要打开多少个监控器 输入描述 第一行输入m n表示长宽 满足1
  • python实现天气数据爬取实现数据可视化和天气查询gui界面设计

    在学校大一实训中 我的实训项目就是使用python爬取天气数据并且实现gui图形界面的设计 实训结束了 希望自己的代码可以帮助大家的学习 代码是大一时候写的 比较青涩 大家多包涵 第一个部分是getdata的部分 就是爬取数据 并将数据存放