博文

目前显示的是 十月, 2025的博文

免疫史计算

  vaccine_history = (     person.select( 'id_x' ).unique()     .join(         vaccine_tbl         .filter(pl.col( '大类编码' ).cast(pl.UInt32) < 20 )         .select( 'vaccine_name' )         .unique()         .filter(pl.col( 'vaccine_name' ).is_not_null()),         how = 'cross'     )     .join(         person         .group_by([ 'id_x' , 'vaccine_name' ])         .agg(pl.col( 'id_x' ).len().alias( '剂次数' )),         on = [ 'id_x' , 'vaccine_name' ],         how = 'left'     )     .with_columns(pl.col( '剂次数' ).fill_null( 0 ))     .sort([ 'id_x' , 'vaccine_name' ]) )

R 字段加密解密

  library ( tidyverse ) library ( janitor ) library ( hablar ) library ( openssl ) library ( magrittr ) library ( stringi ) # 加密函数 encrypt_column <- function ( data , column_names , key ) {   for ( column_name in column_names ) {     data [[ column_name ]] <- sapply ( data [[ column_name ]] , function ( x ) {       if ( is.na ( x ) || x == "" ) {         return ( NA )       }       tryCatch ({         x_utf8 <- stri_encode ( as.character ( x ) , "" , "UTF-8" )         iv <- rand_bytes ( 16 )         encrypted <- aes_cbc_encrypt ( charToRaw ( x_utf8 ) , key = key , iv = iv )         paste ( openssl :: base64_encode ( iv ) , openssl :: base64_encode ( encrypted ) , sep = ":" )       } , error = function ( e ) {         warning ( paste ( "Error ...

Polars 检查身份证号码是否符合规则

  import polars as pl def check_id ( id : str ) -> bool :     if len ( id ) != 18 :         return False         # 有效的地区码前两位(省份代码)     valid_provinces = {         '11' , '12' , '13' , '14' , '15' ,   # 北京、天津、河北、山西、内蒙古         '21' , '22' , '23' ,               # 辽宁、吉林、黑龙江         '31' , '32' , '33' , '34' , '35' , '36' , '37' ,   # 上海、江苏、浙江、安徽、福建、江西、山东         '41' , '42' , '43' , '44' , '45' , '46' ,         # 河南、湖北、湖南、广东、广西、海南         '50' , '51' , '52' , '53' , '54' ,               # 重庆、四川、贵州、云南、西藏         '61' , '62' , '63' , '64' , '65' ,               # 陕西、甘肃、青海、宁夏、新疆         '71' ,                ...