Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the simply-static domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/html/wp-includes/functions.php on line 6121
2023 年 8 月

密码保护:面板

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

树莓派开机自动运行streamlit

如果树莓派没有连接显示器,可能会出现添加了启动文件后,开机不会自动启动的问题,此时需要修改/boot/config.txt文件,

sudo nano /boot/config.txt


找到hdmi_force_hotplug=1这一行,把前面的#号删除掉
创建一个服务文件:打开一个文本编辑器,创建一个新的服务文件,比如streamlit.service。
编辑服务文件:在服务文件中,输入以下内容:

[Unit]
Description=Streamlit App

[Service]
ExecStart=/home/pi/.local/bin/streamlit run /home/pi/下载/my_login_main.py
WorkingDirectory=/home/pi/下载
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

请确保将/path/to/your/streamlit/app替换为你实际的Streamlit应用程序所在的路径,将your_app.py替换为你的应用程序文件名。将<your_username>替换为你的用户名。
保存服务文件:保存服务文件,并将其命名为streamlit.service。
将服务文件移动到系统服务目录:打开终端,并使用以下命令将服务文件移动到系统服务目录:

sudo mv streamlit.service /etc/systemd/system/
启用和启动服务:在终端中使用以下命令启用和启动服务:

sudo systemctl enable streamlit.service
sudo systemctl start streamlit.service
验证服务状态:使用以下命令验证服务是否正在运行:

sudo systemctl status streamlit.service
如果服务正在运行,你应该能够看到"active (running)"的状态。
请注意,这些步骤适用于基于systemd的Linux发行版,如Ubuntu。

为streamlit提供登录界面

准备工作

pip install streamlit-authenticator

创建 YAML 文件:config.yaml

credentials:
  usernames:
    liba001:
      email: jsmith@gmail.com
      name: John Smith
      password: abc # To be replaced with hashed password
    liba002:
      email: rbriggs@gmail.com
      name: Rebecca Briggs
      password: def # To be replaced with hashed password
cookie:
  expiry_days: 365
  key: random_signature_key # Must be string
  name: random_cookie_name
preauthorized:
  emails:
  - melsby@gmail.com

使用 Hasher 模块将纯文本密码转换为哈希密码:

import streamlit_authenticator as stauth
hashed_passwords = stauth.Hasher(['abc', 'def']).generate()
print(hashed_passwords)

将 YAML 文件中的纯文本密码替换为生成的哈希密码

开始主程序

import yaml
from yaml.loader import SafeLoader
with open('config.yaml') as file:
    config = yaml.load(file, Loader=SafeLoader)

authenticator = Authenticate(
    config['credentials'],
    config['cookie']['name'],
    config['cookie']['key'],
    config['cookie']['expiry_days'],
    config['preauthorized']
)
name, authentication_status, username = authenticator.login('Login', 'main')

if authentication_status:
    authenticator.logout('Logout', 'main')
    st.write(f'Welcome *{name}*')
    st.title('Some content')
elif authentication_status == False:
    st.error('Username/password is incorrect')
elif authentication_status == None:
    st.warning('Please enter your username and password')

streamlit实时网页

import time  # to simulate a real time data, time loop

import numpy as np  # np mean, np random
import pandas as pd  # read csv, df manipulation
import plotly.express as px  # interactive charts
import streamlit as st  # 🎈 data web app development

st.set_page_config(
    page_title="Real-Time Data Science Dashboard",
    page_icon="✅",
    layout="wide",
)

# read csv from a github repo
dataset_url = "https://raw.githubusercontent.com/Lexie88rus/bank-marketing-analysis/master/bank.csv"

# read csv from a URL
@st.experimental_memo
def get_data() -> pd.DataFrame:
    return pd.read_csv(dataset_url)

df = get_data()

# dashboard title
st.title("Real-Time / Live Data Science Dashboard")

# top-level filters
job_filter = st.selectbox("Select the Job", pd.unique(df["job"]))

# creating a single-element container
placeholder = st.empty()

# dataframe filter
df = df[df["job"] == job_filter]

# near real-time / live feed simulation
for seconds in range(200):

    df["age_new"] = df["age"] * np.random.choice(range(1, 5))
    df["balance_new"] = df["balance"] * np.random.choice(range(1, 5))

    # creating KPIs
    avg_age = np.mean(df["age_new"])

    count_married = int(
        df[(df["marital"] == "married")]["marital"].count()
        + np.random.choice(range(1, 30))
    )

    balance = np.mean(df["balance_new"])

    with placeholder.container():

        # create three columns
        kpi1, kpi2, kpi3 = st.columns(3)

        # fill in those three columns with respective metrics or KPIs
        kpi1.metric(
            label="Age ⏳",
            value=round(avg_age),
            delta=round(avg_age) - 10,
        )
        
        kpi2.metric(
            label="Married Count 💍",
            value=int(count_married),
            delta=-10 + count_married,
        )
        
        kpi3.metric(
            label="A/C Balance $",
            value=f"$ {round(balance,2)} ",
            delta=-round(balance / count_married) * 100,
        )

        # create two columns for charts
        fig_col1, fig_col2 = st.columns(2)
        with fig_col1:
            st.markdown("### First Chart")
            fig = px.density_heatmap(
                data_frame=df, y="age_new", x="marital"
            )
            st.write(fig)
            
        with fig_col2:
            st.markdown("### Second Chart")
            fig2 = px.histogram(data_frame=df, x="age_new")
            st.write(fig2)

        st.markdown("### Detailed Data View")
        st.dataframe(df)
        time.sleep(1)

树莓派安装配置数据库mariadb-server并建库建表插入数据

sudo apt update
sudo atp upgrade -y
sudo apt-get install mariadb-server

配置

sudo mysql_secure_installation

创建数据库

建库建表

pi@raspberrypi:~ $ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 38
Server version: 10.5.19-MariaDB-0+deb11u2 Debian 11

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database mydb;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> use mydb;
Database changed
MariaDB [mydb]> CREATE TABLE salesdata(
    -> user_id INT NOT NULL AUTO_INCREMENT,
    -> username VARCHAR(40) NOT NULL,
    -> password VARCHAR(40) NOT NULL,
    -> PRIMARY KEY(user_id)
    -> );

MariaDB [mydb]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

MariaDB [mydb]> 

向表格中插入数据

MariaDB [mydb]> INSERT INTO salesdata(username,password) VALUES("liba001","20252025");
Query OK, 1 row affected (0.004 sec)

MariaDB [mydb]> 

查询数据

MariaDB [mydb]> select * from salesdata;
+---------+----------+----------+
| user_id | username | password |
+---------+----------+----------+
|       1 | liba001  | 20252025 |
+---------+----------+----------+
1 row in set (0.001 sec)

MariaDB [mydb]>