Python——基于共享单车使用量数据的可视化分析(1)

目录

🧾 1、数据集(部分数据)

✏️ 2、导入数据集与必要模块

1️⃣ 2.1 导入库以及字体包

2️⃣ 2.2 读取数据集

3️⃣ 2.3 查看数据集基本信息

⌨️ 3、数据预处理

1️⃣ 3.1删除无关字段

2️⃣ 3.2对各字段进行中文标识

3️⃣ 3.3 用条形图展示字段类型个数

📍 df.rename(index=None,columns=None,axis=None,inplace=False)

📍 value_counts(sort,ascending,normalize,bins,dropna)

📍 绘制图形xxx.plot(kind,x,y,ax,subplots,sharex, sharey,layout,figsize,title,xlabel, ylabel,legend,style,logx, logy,xticks, yticks,grid,use_index,colormap,colorbar)

📊 4、使用量影响因素可视化分析 

1️⃣ 4.1 利用直方图、箱线图观察单车使用量的分布

📍 直方图 

📍 箱线图 

 2️⃣ 4.2 利用条形图、饼图对比两年的单车使用量

📍 分组聚合dataframe.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=NoDefault.no_default,observed=False,dropna=True)

📍 条形图

📍 饼图


🧾 1、数据集(部分数据)

  • day数据集

字段名称含义说明

instant

行数编码
dteday日期变量
season季节变量,编码1-4分别表示1-3月、4-6月、6-9月,10-12月
yr年份变量,编码0代表2011年,1代表2012年
mnth月份编码,范围为1-12,代表1-12月
holiday是否为节假日,0代表不是,1代表是
weekday一周的第几天,范围为0-6
workingday是否为工作日,0代表不是,1代表是
weathersit天气类型,1代表晴朗少云,2代表多云雾,3代表小雨/小雪/雷电
temp以摄氏度表示的标准化温度,值被除以41(最大值)
atemp以摄氏度表示的标准化感觉温度,值被除以50(最大值)
hum标准化湿度,值被除以100(最大值)
windspeed标准化风速,值被除以67(最大值)
casual未注册用户单车使用量
registered注册用户单车使用量
cnt所有用户单车使用量,包括未注册用户和注册用户
  •  tree数据集

✏️ 2、导入数据集与必要模块

1️⃣ 2.1 导入库以及字体包

# 导入pandas模块和numpy模块
import pandas as pd  
import numpy as np  

# 3.# 导入matplotlib.pyolot模块
import matplotlib.pyplot as plt  
from plotnine import *
%matplotlib inline

# 3.设置绘图时的中文字体
from matplotlib.font_manager import FontProperties
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False

# 4.字体包的存放路劲、设置字体的大小为15
myfont = FontProperties(fname = 'C:/XXX/xxx/Desktop/实验五——共享单车可视化/FangSong_GB2312.ttf', size = 15)  

2️⃣ 2.2 读取数据集

# 1.读取数据
data_old = pd.read_csv('C:/XXX/xxx/Desktop/实验五——共享单车可视化/day.csv')

# 2.查看数据的前5行
data_old.head()

3️⃣ 2.3 查看数据集基本信息

# 1.查看数据集基本信息
data_old.info()

  • 从结果中可以看出,数据集中共包含731条数据,没有缺失数据 。

⌨️ 3、数据预处理

1️⃣ 3.1删除无关字段

  • 有些字段与数据分析无关,例如:字段instant表示行数编码,可以直接删除。

  • 有些字段的含义较为接近,保留其一即可,例如:字段atemp和temp都表示温度,留下一个就可以。

# 1.使用drop方法来删除字段
data = data_old.drop(['instant', 'atemp', 'casual', 'registered'], axis=1)  

2️⃣ 3.2对各字段进行中文标识

# 1.字段名称
chs_name = {'dteday': '日期',    # {'新列名':'旧列名'}
            'season': '季节',
            'yr': '年份',
            'mnth': '月份',
            'holiday': '节假日',
            'weekday': '星期',
            'workingday': '工作日',
            'weathersit': '天气类型',
            'temp': '温度',
            'hum': '湿度', 
            'windspeed': '风速', 
            'cnt': '使用量'}

# 2.使用rename方法对列明进行修改,是直接在元数据进行修改
data.rename(columns=chs_name, inplace=True) 

# 3.标识后的结果
data.head()

3️⃣ 3.3 用条形图展示字段类型个数

📍 df.rename(index=None,columns=None,axis=None,inplace=False)
字段数据类型含义
indexlist 或 dict 或 series用于重命名行索引的标签或映射的字典,如{ 0 : “第一行”}
columnslist 或 dict 或 series用于重命名列名的标签或映射的字典,如{ A : “第一列”}
axisint 或 str要重命名的轴
inplacebool是否在原地修改 DataFrame,如果为True,则直接在原 DataFrame 上进行修改,不返回新的 DataFrame,如果为False(默认值),则返回一个新的 DataFrame,原 DataFrame 保持不变
📍 value_counts(sort,ascending,normalize,bins,dropna)
字段数据类型含义
sortbool

默认为True,如果为True,则对结果进行降序排序(从最常见的值到最不常见的值),如果为False,则不会进行排序

ascendingbool

默认值为 False,如果为False,则结果按降序排序(最常见的值在最前面),如果为True,则结果按升序排序(最不常见的值在最前面)

normalizebool默认值为False如果为True,则返回每个值出现的频率(即每个值出现的次数除以总数),如果为False,则返回每个值出现的次数
binsint 或 array可以用来对数据进行分箱,并将结果作为类别计数返回,如果指定了bins,则normalize 必须为False
dropnabool默认值为True如果为True,则不在结果中包含缺失值(NaN),如果为False,则会在结果中包含缺失值,并计算它们的出现次数

🔷 data_type_df = pd.DataFrame(data.dtypes.value_counts()).rename(columns={0: 'count'})

  • data.dtypes:这个操作会返回一个Series,其中包含data DataFrame中每列的数据类型
  • data.dtypes.value_counts():使用value_counts()方法,我们计算data DataFrame中每种数据  类型的出现次数。这将返回一个Series,其中索引是数据类型,值是相应的计数 
  • pd.DataFrame(data.dtypes.value_counts()):我们将上一步得到的Series转换为一个新的  DataFrame。默认情况下,Series的索引将成为新DataFrame的索引,而Series的值将成为新  DataFrame的唯一一列,列名为0
  • .rename(columns={0: 'count'}):使用rename()方法,我们将新DataFrame中列名0更改为count。这里,columns={0: 'count'}是一个字典,指定了列名的映射关系

📍 绘制图形​​​​​​​xxx.plot(kind,x,y,ax,subplots,sharex, sharey,layout,figsize,title,xlabel, ylabel,legend,style,logx, logy,xticks, yticks,grid,use_index,colormap,colorbar)

字段数据类型含义
kindstr

定义了图形的类型,如 'line', 'bar', 'barh', 'hist', 'box', 'kde', 'density', 'area', 'pie', 

'scatter', 'hexbin' 等

x,y

str 或 

array-like

定义了用于绘图的数据列。x 是 x 轴的数据,y 是 y 轴的数据。如果是 str 类型,则代表 DataFrame 中的列名;如果是 array-like 类型,则代表具体的数值

ax

matplotlib.axes.Axes 

     或 None

一个 matplotlib axes 对象,绘图将在这个对象上进行。如果为 None,则会创建一个新的 axes 对象

subplotsbool

如果为 True,则创建子图进行绘图

sharex,shareybool

如果创建子图(subplots=True),这些参数决定了 x 轴或 y 轴是否共享

layout

tuple

用于子图的布局,格式为 (rows, columns)

figsizetuple

定义图形的尺寸,格式为 (width, height)

titlestr图形的标题
xlabel, ylabelstrx 轴和 y 轴的标签
legendbool 或 ‘reverse’是否显示图例,或者是否反转图例的顺序
style

list 或 array

用于线条的样式列表或数组
logx, logybool是否对 x 轴或 y 轴使用对数刻度
xticks, yticks

list 或 array

x 轴或 y 轴的刻度位置
gridbool是否显示网格线
use_indexbool是否将 DataFrame 的索引用作 x 轴的值
colormap

str 或 matplotlib.colors.Colorma

用于绘制图形的颜色映射
colorbarbool是否显示颜色条
# 1.统计数据以及对字段进行重命名
data_type_df = pd.DataFrame(data.dtypes.value_counts()).rename(columns={0: 'count'})  

# 2.绘制条形图
data_type_df.plot(kind='bar',                   # 绘制图的类型
                  title='字段类型个数条形图',    # 设置标题
                  legend=False,                # 子图的图例
                  rot=360,                      # 设置轴标签的旋转度数
                  figsize=(8, 6))               # 图片的尺寸大小

📊 4、使用量影响因素可视化分析 

1️⃣ 4.1 利用直方图、箱线图观察单车使用量的分布

📍 直方图 

​​​​​​​plt.hist( x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=u'bar', align=u'mid', orientation=u'vertical', rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, **kwargs)

字段数据类型含义
x

array

输入数组或序列的数组,用于计算直方图。它应该是一维的,或者如果是一个序列,序列中的每个数组都应该是一维的

bins

int or sequence or str

指定直方图的箱子数量或箱子边界。如果是一个整数,则它定义了等宽的箱子的数量。如果是一个序列,则它定义了箱子边界,包括右边界但不包括左边界,串 'auto'、'sturges'、'fd'、'doane'、'rice'、'sturges'、'sqrt' 可以自动选择箱子数量

range

float

直方图的范围 (xmin, xmax),即 x 轴的最小值和最大值。如果 None,则使用 x 的范围

normed

bool

如果为 True,则返回的直方图值将显示为密度,即每个箱子的计数将除以所有箱子的计数之和(从而总和为 1)。注意:normed 参数在较新的 Matplotlib 版本中已被重命名为 density

weights

array

与 x 形状相同的权重数组,用于对直方图中的每个元素进行加权

cumulative

bool

如果为 True,则绘制累积直方图

histtypestr

{'bar', 'barstacked', 'step', 'stepfilled'}, optional直方图的类型

alignstr

{'left', 'mid', 'right'}控制直方图条形的对齐方式

orientationstr

{'horizontal', 'vertical'}设置直方图的方向

rwidth

scalar or array

条形宽度(以箱子宽度的百分比表示)

log

bool

如果为 True,则对直方图使用对数刻度

color

array

直方图的颜色

label

str

直方图的标签,用于图例

stacked

bool

如果为 True,则绘制堆叠的直方图

📍 箱线图 

plt.boxplot(x, notch=None,sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_xticks=True, autorange=False, zorder=None, hold=None, data=None)

字段数据类型含义
x

array or list of arrays

输入数据。如果 x 是一个一维数组或列表,则绘制一个箱线图。如果 x 是一个二维数组或列表的列表,则每一列都将绘制为一个独立的箱线图,并可以通过 positions 参数来指定它们在 x 轴上的位置

notch

bool or None

是否创建一个缩进的表示中位数的记号。如果为 None,则默认由 bootstrap 参数决定

sym

str

用于超出上下四分位距的点的符号。默认为 '+'

vert

bool

如果为 True(默认值),则创建垂直箱线图。如果为 False,则创建水平箱线图

whis

float sequence 

or string

定义上下四分位距之外异常值的范围。可以是 0 到 1 之间的浮点数,表示相对于四分位距的倍数;也可以是一个包含两个浮点数的序列,分别定义下限和上限;或者是一个包含字符串 'range' 的序列,用来指定一个固定的范围

positions

array of floats

用于绘制箱线图的 x 轴位置。当 x 是一个二维数组时,positions 定义了每一列箱线图在 x 轴上的位置

widths

scalar sequence

箱体的宽度。可以是单个数值,用于所有箱体;也可以是一个序列,用于指定每个箱体的宽度

patch_artist

bool

是否填充箱体的颜色

bootstrap

int

指定用于计算置信区间的自举样本的数量。如果为 0,则不进行自举,并且箱体的记号不会缩进

labels

array of strings

箱线图的标签

boxprops

dict

用于设置箱体属性的字典,例如颜色、线宽

flierprops

dict

用于设置超出范围的点(flyers)属性的字典

medianprops

dict

用于设置中位数线属性的字典

capprops

dict

用于设置箱线图顶部和底部“帽子”线属性的字典

whiskerprops

dict

用于设置箱线图“胡须”线(即连接中位数和四分位数的线)属性的字典

manage_xticks

bool

如果为 True,则调整 x 轴刻度位置以适合箱线图的位置

autorange

bool

是否自动调整箱线图的范围以包含所有数据点

zorder

float

控制绘图元素的堆叠顺序

# 1.绘制直方图
plt.figure(figsize = (14,6))       # 图片的尺寸大小              
plt.subplot(1, 2, 1)               # 生成一行两列两个子图,现在将画在第一个位置

plt.hist(data['使用量'],          # 选取data中'使用量'这一列的数据画图      
         bins=8,                  # 直方图的柱数,默认值为10
         facecolor='green',       # 直方图的颜色   
         alpha=0.5,               # 透明度
         edgecolor='black')       # 直方图的边框颜色

# 2.设置标题、x轴、y轴的标题,以及字体的大小
plt.title('使用量直方图', fontsize=15)  
plt.xlabel('使用量', fontsize=15)
plt.ylabel('频数', fontsize=15)

# 3.绘制箱线图
plt.subplot(1, 2, 2)                 # 生成一行两列两个子图,现在将画在第二个位置
plt.boxplot(data['使用量'],          # 选取data中'使用量'这一列的数据画图 
            labels=['使用量'],       # 添加标签
            patch_artist = True,    # 表示填充箱体颜色
            boxprops = {'color':'black','facecolor':'yellow'},   # 设置箱子外框的颜色和箱子内部填充的颜色
            flierprops = {'markerfacecolor':'red','color':'black'})  # 设置异常值的颜色为黑色,中位数为红色

# 4.设置标题
plt.title('使用量箱线图', fontsize=15)

# 5.设置x轴的标签的字体大小
plt.xticks(fontsize=12)   

 2️⃣ 4.2 利用条形图、饼图对比两年的单车使用量

📍 分组聚合​​​​​​​dataframe.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=NoDefault.no_default,observed=False,dropna=True)

字段数据类型含义

by

str dict series

用于确定分组依据的列名、列名列表、字典、Series 或函数。如果传递的是函数,它将应用于每一列,并返回用于分组的值

axis

int

分组的轴。0 或 'index' 表示按行分组(这是默认的),1 或 'columns' 表示按列分组。

level

int

如果轴是一个 MultiIndex(多级索引),则用于分组的级别或级别序列

as_index

bool

对于聚合操作,返回对象是否应有其分组作为索引。设置为 False 会将分组标签作为普通列返回在结果 DataFrame 中

sort

bool

是否对分组键进行排序。设置为 False 将加快操作速度,尤其是在已经排序的数据上

group_keys

bool

当调用 apply 时,是否将分组键添加到索引中。如果为 False,则不会添加

squeeze

bool

如果可能的话,返回标量、Series 或 DataFrame。这在分组只产生一个唯一值时特别有用

🔹 groupby函数通常涉及1-3个操作步骤

(1) Splitting 分割:根据一些准则,将数据框分割为多个子集;

(2) Applying 应用:

(1)对某个子集应用某个函数,比如计算每个组的汇总信息(总和、均值、计数);

(2)转换;

(3)筛选。

(3) Combing 组合:将应用函数后的结果,组合起来形成新的数据框。

注意:(1) 分组函数返回的是一个 DataFrameGroupBy对象(比如 gp = df.groupby(‘col1’, ‘col2’), gp是groupby函数返回的对象),可以通过 gp.get_group(‘col1val1’, ‘col2val2’) 检索对象中的子集。

(2) 在分组、应用函数(比如计数、求均值)之后,返回的是一个DataFrame,很方便做表、画图等进一步处理,比如gp.count()是一个DataFrame,然后接着画图:gp.count().plot.bar(‘col3’)

📍 条形图

​​​​​​​plt.bar(x, height, width=0.8, bottom=None, align='center', data=None, **kwargs)

字段数据类型含义
x

float or array

x坐标的位置。可以是单个数字、长度为N的数组或标量序列。对于水平条形图,它表示条形的y坐标位置

height

float or array

条形的高度。对于水平条形图,这个参数表示条形的宽度

width

scalar or array

条形的宽度。默认值为0.8,表示每个条形宽度的相对大小。如果指定为数组,则数组长度应与x或height的长度相同

bottom

float or array

y坐标的基线位置,即条形图底部的y坐标。如果指定为数组,则数组长度应与x或height的长度相同。默认为None,表示基线位置为0

alignstr

条形对齐方式。'center'表示条形以x位置为中心,'edge'表示条形左边缘位于x位置。默认为'center'

data

indexable object

可选参数,用于传递包含变量的对象。通常用于pandas DataFrame或Series

kwarg-

其他关键字参数。例如,color 参数用于设置条形的颜色,edgecolor 参数用于设置条形边缘的颜色,label 参数用于设置图例标签等

📍 饼图

plt.pie(x ,labels,autopct = '%3.2f%%',shadow = True ,labeldistance = 1.1,startangle = 90,pctdistance = 0.7)

字段数据类型含义

x

array or list

包含每个扇区的数值大小

labels

array or list

与 x 参数的长度相同,用于每个扇区的标签。labels 是一个包含字符串的序列,每个字符串是饼图中对应扇区的标签

autopct

str

用于控制每个扇区百分比标签的显示格式。'%3.2f%%' 表示每个百分比标签将显示为固定点格式,保留两位小数

shadow

bool

控制饼图是否应该有阴影效果。设置为 True 将添加阴影效果

labeldistance

float

控制标签距离圆心的距离,单位是半径的比例。1.1 表示标签距离圆心的距离是饼图半径的 1.1 倍

startangle

float

控制饼图的起始角度,以度为单位。90 表示饼图从水平方向开始

pctdistanc

float

控制百分比标签距离圆心的距离,单位是半径的比例。0.7 表示百分比标签距离圆心的距离是饼图半径的 0.7 倍

# 1.绘制条形图
### 分组聚合
count_grouped = data['使用量'].groupby(data['年份']).sum()  # 选取data数据中'使用量'这列的数据,根据'年份'进行分组,并统计总数

count_grouped_df = count_grouped.reset_index()   # reset_index()主要用于重置索引,在获得新的index,原来的index会变成数据列,保存在数据框中

count_grouped_df['年份'] = count_grouped_df['年份'].map({0:'2011', 1:'2012'})  # 使用map()方法,将值为0映射成2011,值为1映射成2012

# 2.绘图
plt.figure(figsize = (14,6))                     
plt.subplot(1, 2, 1)

plt.bar(count_grouped_df['年份'],
        count_grouped_df['使用量'],
        width=0.5,                     # 设置柱状图的宽度,正常值在0-1之间,默认值是0.8
        color=['blue', 'orange'])      # 设置柱状图内部填充的颜色

plt.title('两年使用总量对比条形图', fontsize=15)
plt.xlabel('年份', fontsize=15)
plt.ylabel('使用量', fontsize=15)

# 3.绘制饼状图
### 计算百分比
count_grouped_df['百分比'] = count_grouped_df['使用量']/count_grouped_df['使用量'].sum()

### 绘图                    
plt.subplot(1, 2, 2)

plt.pie(count_grouped_df['百分比'],  
        labels=['2011', '2012'],   # 设置饼图内各部分的标签
        autopct = '%1.1f')         # 设置饼图内的文本

plt.title('两年使用总量对比饼状图', fontsize=15)
plt.legend(loc='upper right', fontsize=10)

注意:本文中数据以及内容若有侵权,请第一时间联系删除。

           本文未经作者授权,禁止转载,谢谢配合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes——Kubectl详解

目录 前言 一、陈述式资源管理方法 二、Kubectl命令操作 1.查 1.1kubectl version——查看版本信息 1.2kubectl api-resources——查看资源对象简写 1.3kubectl cluster-info——查看集群信息 1.4配置Kubectl补全 1.5journalctl -u kubelet -f——查看日志 1.6kubec…

电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台

随着企业的快速发展,招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求,建立一个公平、公开、公正的采购环境至关重要。在这个背景下,我们开发了一款电子招标采购软件,以最大限度地控制采购成本&#…

redis核心面试题一(架构原理+RDB+AOF)

文章目录 0. redis与mysql区别1. redis是单线程架构还是多线程架构2. redis单线程为什么这么快3. redis过期key删除策略4. redis主从复制架构原理5. redis哨兵模式架构原理6. redis高可用集群架构原理7. redis持久化之RDB8. redis持久化之AOF9. redis持久化之混合持久化 0. red…

【linux-uboot移植-mmc及tftp启动-IMX6ULL】

目录 1. uboot简介2. 移植前的基本介绍:2.1 环境系统信息: 3. 初次编译4. 烧录编译的u-boot4.1 修改网络驱动 5. 通过命令启动linux内核5.1 通过命令手动启动mmc中的linux内核5.1.1 fatls mmc 1:15.1.2 fatload mmc 1:1 0x80800000 zImage5.1.3 fatload mmc 1:1 0x8…

VMware 安装Windows 7 SP1

1.下载镜像 迅雷:ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/ 2.安装过程 自定义名字,点击【浏览】自定义安装路径 点击【浏览】,选择下载镜像的路径 结束啦~ Win…

Pytorch深度学习实践笔记4

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:pytorch深度学习 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 视频来自【b站刘二大人】 1 反向传播 Back propaga…

力扣Hot100-73矩阵置零(标记数组)

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2: 输入&…

2024年二建准考证打印入口已开通!

24年二建将于6月1日、2日举行,目前西藏、陕西准考证打印入口已开通,各省也将陆续开始准考证打印工作。 2024二建考试时间安排 2024二建准考证打印时间 二建准考证打印须知 01 准考证打印信息显示空白怎么办? 1)使用电脑自带的浏览器重新试一下。 2)…

【话题】你眼中的IT行业现状与未来趋势

大家好,我是全栈小5,欢迎阅读小5的系列文章,这是《话题》系列文章 目录 引言一、IT行业的现状1.1 云计算与大数据1.2 人工智能与机器学习1.3 物联网与5G通信1.4 区块链技术 二、IT行业未来发展趋势2.1 边缘计算与智能设备2.2 深度学习与自然语…

话题:如何让大模型变得更聪明?

随着人工智能(AI)技术的迅速发展,大模型(如GPT-4、BERT、Transformer等)在自然语言处理、图像识别和语音识别等领域取得了显著成果。然而,如何让大模型变得更聪明,进一步提升其性能和应用效果&a…

做好商业分析,帮你用有限的资源选择高效益项目实现战略目标

对于组织来说,资源条件总是有限的,为了实现战略目标,则需要从众多项目中筛选出最合适的项目来实现收益。但项目的筛选往往会遇到很多难点,如信息收集不全影响筛选的准确性、评估标准不明确或难以量化、决策过程复杂等等。 那么如何…

守护者:ThingsBoard物联网网关在温室环境监测中的应用

系统设计 智慧农业温室大棚系统由传感器及执行设备、数据传输网关、智慧农业温室大棚管理平台组成。 系统支持实时采集温室大棚内的空气温湿度、土壤温湿度、光照和二氧化碳等环境参数,根据农作物的生长需求自动控制温室中电器设备的启停,从而达到植物生…

caffe在ARM鲲鹏920-openEuler2309上的环境搭建

caffe 配置环境 caffe cpu-only openblas protobuf 编译caffe需要3.6~3.10版本,否则会报错 dnf install只能安装3.19版本 需要从源码编译,这里选择了3.9版本 protobuf的github仓 从源码编译安装 caffe-gpu mode caffe的gpu模式需要用到cuda make…

jmeter线程组(下篇)

线程组 线程组作为JMeter测试计划的核心组件之一,对于模拟并发用户的行为至关重要。线程组元件是整个测试计划的入口,所有的取样器和控制器必须放置在线程组下。 可以将线程组视为一个虚拟用户池,其中每个线程可被理解为一个虚拟用户&#x…

【Django】从零开始学Django(持续更新中)

pip install Djangopython manage.py startapp index运行: 成功!!! 在templates中新建index.html文件:

在做题中学习(61):连续数组

525. 连续数组 - 力扣(LeetCode) 思路:前缀和 哈希表 转化:将 0 ——> -1 转变为:找到和为0的最长子数组 细节: 1.哈希表存什么 前缀和 , 长度 2.什么时候存入哈希表 先处理前一个&…

【Crypto】password

文章目录 password解题感悟 password 试试flag{zs19900315} 提交成功 解题感悟 这题有点大病

工具分享:VsCode注释神器,koro1FileHeader

他是有官方Wiki的。 https://github.com/OBKoro1/koro1FileHeader/wiki/ 项目在GitHub上开源。以下摘录部分wiki,用作介绍分享在这里插入代码片 如何找到setting.json设置模板 简单的输入命令 打开VSCode命令面板: mac: command p window: ctrl p输入> Ope…

day15|各种遍历的应用

相关题目&#xff1a; 层次遍历会一打十 反转二叉树 对称二叉树 层次遍历会一打十 自底向上的层序遍历 实现思路&#xff1a;层次遍历二叉树&#xff0c;将遍历后的结果revers即可 public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List&l…

ubuntu22部署Docker私有仓库Harbor (http https方式)

harbor日志&#xff1a;/var/log/harbor 前置安装配置 需先安装docker和docker-compose&#xff1a; 0.配置清华大学apt源并安装docker #信任 Docker 的 GPG 公钥: sudo apt-get install ca-certificates curl gnupg curl -fsSL https://download.docker.com/linux/ubunt…