0%

PyMongoArrow简介

PyMongoArrow 是 PyMongo 包含用于加载 MongoDB 的工具的扩展,以 Apache Arrow 形式查询结果集、 表格、 NumPy 数组和 Pandas 或 Polars DataFrames。 PyMongoArrow 是将 MongoDB 查询结果集物化为适合内存中分析处理应用程序的连续内存类型数组的推荐方法。[^1] 1. PyMongoArrow使用手册[^2]

  1. PyMongoArrow简明教程[^3]

安装

1
pip install pymongoarrow

1
conda install --channel conda-forge pymongoarrow

使用

1
2
3
4
5
6
7
8
9
10
11
import pymongoarrow
import pymongo
import pandas as pd
import polars as pl
from pymongoarrow.monkey import patch_all

# establish connection with our MongoDB database
client = pymongo.MongoClient('localhost', 27017)
db = client['quantaxis']
collection = db['stock_day']
patch_all()
阅读全文 »

为了在Jupyter Notebook中使用RustPolars库以类似于Pandas的方式输出HTML表格,我们可以使用 evcxr_jupyter 内核和HTML格式化。虽然Rust没有直接提供像Pandas那样的内置HTML表格输出,但我们可以通过手动构建HTML表格并在Jupyter Notebook中显示来实现这一点。

以下是一个详细的指南和示例代码:

安装和设置

  1. 安装 Rust 和 evcxr_jupyter 内核 首先,确保你已经安装了Rust,然后安装 evcxr_jupyter

    1
    2
    cargo install evcxr_jupyter
    evcxr_jupyter --install

  2. 启动 Jupyter Notebook 启动Jupyter Notebook并新建一个Rust内核的笔记。

编写代码

以下是一个使用Polars库创建DataFrame并生成HTML表格的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
:dep polars = {version = "0.39.1"}
:dep serde_json = "1.0"

use polars::prelude::*;
use polars::df;
use polars::frame::DataFrame;
use serde_json::json;
use std::fmt::Write;

fn create_dataframe() -> DataFrame {
let s0 = Series::new("days", &["mon", "tue", "wed", "thu", "fri"]);
let s1 = Series::new("temp", &[23, 34, 15, 30, 10]);
DataFrame::new(vec![s0, s1]).expect("DataFrame creation failed")
}

fn dataframe_to_html(df: &DataFrame) {
let columns = df.get_columns();
let headers: Vec<&str> = columns.iter().map(|s| s.name()).collect();
let mut html = String::new();

write!(
html,
"<table border=\"1\"><tr>{}</tr>",
headers
.iter()
.map(|h| format!("<th>{}</th>", h))
.collect::<Vec<String>>()
.join("")
)
.unwrap();

for i in 0..df.height() {
write!(html, "<tr>").unwrap();
for col in columns.iter() {
write!(html, "<td>{}</td>", col.get(i).unwrap()).unwrap();
}
write!(html, "</tr>").unwrap();
}

write!(html, "</table>").unwrap();
println!("EVCXR_BEGIN_CONTENT text/html\n{}\nEVCXR_END_CONTENT", html);
}

let df = create_dataframe();
let html_table = dataframe_to_html(&df);
html_table

解释代码

  1. 加载依赖项Jupyter Notebook中,我们使用 :dep 命令来添加所需的依赖项:polarsserde_json

  2. 创建 DataFrame 函数 create_dataframe 创建了一个简单的DataFrame,包含两个列:daystemp

  3. 生成 HTML 表格 函数 dataframe_to_htmlDataFrame转换为HTML表格格式:

    • 获取DataFrame的列并生成表头。
    • 遍历每一行,生成表格的每一行数据。
    • 使用 write! 宏构建HTML字符串。
  4. 输出 HTML 表格 最后,在println!函数中需要标明每个块以包含EVCXR BEGIN CONTENT的一行开始,然后是mime类型,然后是换行符,然后内容以包含EVCXR END CONTENT的一行结束。生成的HTML表格字符串被输出。Jupyter Notebook会自动渲染HTML字符串,从而显示漂亮的表格。

结果呈现

利用 logenv_logger来配置日志。

简介

Crate log

功能说明

log 提供了一个单独的日志记录 API,给出了日志库的一般抽象,后面具体的日志库需要基于这个抽象实现具体的实例。

日志请求由目标,级别和内容组成。目标是一个字符串,其默认为日志请求的位置的模块路径,尽管可能会覆盖默认值。记录器实现通常使用目标基于某些用户配置来过滤日志请求。

记录器实现

为了生成日志输出,必须使用与 log 兼容的日志记录器实现。有许多可用的实现可供选择,这里有一些常用的: - 精简版记录器: - env_logger - simple_logger - simplelog - pretty_env_logger - stderrlog - flexi_logger - 复杂且可配置的框架: - log4rs - fern - 专用适配: - syslog - slog-stdlog - systemd-journal-logger - android_log - win_dbg_logger - WebAssembly可用: - console_log - 动态库: - 构建在log之上的 FFI-safe wrapper 来初始化库。

阅读全文 »

安装

通过官网下载并安装程序。 安装完后,可以在Settings -> About -> Language中选择界面语言,我还是使用英文界面,方便对接英文论坛内容。

阅读全文 »

背景

最近对[[【知识管理】Zettelkasten笔记法|Zettelkasten笔记法]]进行学习,也在学习过程中了解到了Obsidian, 它可以帮助人们高效地建立适合自己的知识管理体系。所以在梳理整合自己知识体系的同时,也同步进行了Obsidian的学习。

阅读全文 »

截图,使用过的工具有sngaitgreenshot, 前者功能强大,但需要付费。后者轻巧,但软件功能较少且更新较慢,最后的稳定版还是2017年发布的。至于QQ等截图工具,需要打开QQ软件本身,不太省心。

在写博客的时候,大多数工具均采用矩形截图的方式, 如果需要对所截取的图片进行圆角,阴影等效果的添加,就必须使用其它软件来进行后处理。

shareX恰好满足这些需求。且体量也不算大。

阅读全文 »

前言

实在忍受不了VsCode里的默认终端为powershellcmd, 希望能使用cmder来作为默认终端。

配置步骤

旧版的VsCode使用以下方法修改。

1
"terminal.integrated.shellArgs.windows":["/k %CMDER_ROOT%\\vendor\\init.bat"]

当VSCode升级至1.57.1(2021.6.17)时,会出现警告提示:

意思是此项已弃用,Microsoft官方配置默认 shell 的新推荐方法是在 #terminal.integrated.profiles.windows# 中创建一个终端配置文件,并将其配置文件名称设置为 #terminal.integrated.defaultProfile.windows# 中的默认值。此操作当前将优先于新的配置文件设置,但将来会发生更改。

  1. 打开User Settings(File-> Preferences-> Settings)。
  2. 输入栏:terminal.integrated.Profiles.windows, 并点击Edit in settings.son

  1. 添加新的配置, 并设置cmder为默认配置。

  2. 打开一个新终端(Terminal -> New Terminal)

参考

1/ Integrated Terminal in Visual Studio Code

数据提取

从MongoDB中进取通达信板块数据,该数据均通过通达信api从服务器上提取并存入MongoDB。

实例

1. 模糊查询

MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式来进行模糊查询。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pymongo import MongoClient

#存入数据
def get_block_list(database):
stocklist = []
collection = db['stock_block']
for item in collection.find({'blockname':{'$regex':'酒'}},{'_id':0,'code':1}):
stocklist.append(item['code'])
stocklist = list(set(stocklist))
return stocklist

if __name__ == '__main__':
client = MongoClient('localhost', 27017)
db = client['quantaxis']
stocklist = get_block_list(database=db)
print("Total {} stocks are in this block.\n{}".format(len(stocklist),stocklist))
1
2
Total 69 stocks are in this block.
['600257', '000752', '600616', '600766', '600779', '601579', '603919', '603198', '600771', '603101', '600132', '000524', '600258', '605108', '000428', '600750', '000888', '603025', '002461', '600238', '600754', '601007', '000929', '000596', '600573', '600600', '603299', '600059', '600197', '002772', '600559', '300237', '600260', '600543', '000721', '600084', '600365', '000930', '000858', '000860', '603369', '000568', '600655', '600809', '600702', '002304', '002568', '000869', '600382', '600781', '002342', '000829', '600381', '600199', '002646', '603589', '603777', '002183', '000995', '600252', '000729', '603779', '002803', '002186', '600395', '600696', '600519', '000007', '000799']
阅读全文 »

从2021年8月13日起, github不再支持帐号密码验证Git操作,改用token(令牌)或SSH密钥。

解决方案

1/ 首先登入Github 账户,Setting - Developer settings - Personal access tokens - Generate new token, Note 填写 Hexo 或 Blog 之类,勾选第一项 repo,然后 Generate token;为Hexo项目生成一个令牌。

2/ 修改_config.yml,

1
2
3
4
5
6
7
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: 'git'
repo: https://[复制生成的token]@github.com/nokiasonic/nokiasonic.github.io.git
branch: main

即可正常hexo d更新blog。