for i in range(0,len(rep),7): data = rep[i:i+7] if len(data) == 1: datas = 'Z' + data + '000000K' elif len(data) == 2: datas = 'Z' + data + '00000K' elif len(data) == 3: datas = 'Z' + data + '0000K' elif len(data) == 4: datas = 'Z' + data + '000K' elif len(data) == 5: datas = 'Z' + data + '00K' elif len(data) == 6: datas = 'Z' + data + '0K' else: datas = 'K'+ data + 'Z' print(datas)
时间: 2024-04-08 13:35:13 浏览: 177
你的代码看起来已经相当简洁了,但是还有一些地方可以进行优化。你可以使用字符串的格式化方法来简化条件语句的判断和赋值过程。下面是优化后的代码示例:
```python
for i in range(0, len(rep), 7):
data = rep[i:i+7]
length = len(data)
if length == 7:
datas = f'K{data}Z'
else:
zeros = '0' * (6 - length)
datas = f'Z{data}{zeros}K'
print(datas)
```
这样,你可以通过计算长度来确定要添加的零的数量,并使用字符串的格式化方法来创建最终的数据字符串。这种方法可以减少重复的判断和赋值操作。
相关问题
mode_data['type'] = mode_data['page'].apply(lambda x: rep(x[0], dict1)) print('网页分类示例数据:\n', mode_data[['reallID', 'page', 'type']].head(5)) # 构造特征 # 匹配中文字符串 mode_data['type'] = mode_data['type'].apply(lambda x: re.findall('[\u4e00-\u9fa5]+', x)) mode_data['len'] = mode_data['type'].apply(lambda x: len(x)) print(mode_data) # 删除空值 mode_data = mode_data[mode_data['len'] != 0] mode_data['type'] = mode_data['type'].apply(lambda x: x[0]) print(mode_data) # 获取用户标识 inde = list(set(mode_data['reallID'])) col = ['新闻动态', '教学资源', '项目与合作', '竞赛', '优秀作品'] mode_datal = pd.DataFrame(index=inde, columns=col) print(mode_datal) # 点击网页数统计与匹配 for i in inde: ens = mode_data[mode_data['reallID'] == i]['type'].value_counts() for j in range(len(ens)): mode_datal.loc[i, ens.index[j]] = ens[j] mode_datal.fillna(0, inplace=True)解释每行代码
以下是每行代码的解释:
```python
mode_data['type'] = mode_data['page'].apply(lambda x: rep(x[0], dict1))
```
将网页页面名称中的英文缩写替换为中文名称,例如将"n"替换为"新闻动态"。
```python
print('网页分类示例数据:\n', mode_data[['reallID', 'page', 'type']].head(5))
```
打印网页分类的示例数据。
```python
# 构造特征
# 匹配中文字符串
mode_data['type'] = mode_data['type'].apply(lambda x: re.findall('[\u4e00-\u9fa5]+', x))
mode_data['len'] = mode_data['type'].apply(lambda x: len(x))
```
使用正则表达式匹配中文字符串,将匹配到的结果保存到'type'列中,并计算'type'列中列表的长度,将结果保存到'len'列中。
```python
print(mode_data)
```
打印处理后的数据。
```python
# 删除空值
mode_data = mode_data[mode_data['len'] != 0]
mode_data['type'] = mode_data['type'].apply(lambda x: x[0])
```
删除'type'列中长度为0的数据,并将'type'列中的列表转换为字符串。
```python
print(mode_data)
```
打印处理后的数据。
```python
# 获取用户标识
inde = list(set(mode_data['reallID']))
col = ['新闻动态', '教学资源', '项目与合作', '竞赛', '优秀作品']
mode_datal = pd.DataFrame(index=inde, columns=col)
```
获取用户标识,创建一个新的DataFrame,用于存储每个用户对不同网页类型的点击量。
```python
print(mode_datal)
```
打印新创建的DataFrame。
```python
# 点击网页数统计与匹配
for i in inde:
ens = mode_data[mode_data['reallID'] == i]['type'].value_counts()
for j in range(len(ens)):
mode_datal.loc[i, ens.index[j]] = ens[j]
mode_datal.fillna(0, inplace=True)
```
对每个用户的浏览记录进行统计,并将结果保存到新创建的DataFrame中。如果某个用户没有点击某种类型的网页,则在DataFrame中这个类型的值为0。
将以下R语言代码转化为python语言:split_data_point<-function(data) { ind1<-c(1:floor(nrow(data)*0.7)) ind2<-c((floor(nrow(data)*0.7)+1):(floor((nrow(data))*0.85))) ind3<-c((floor(nrow(data)*0.85)+1):(nrow(data))) train<-data[ind1,] test<-data[ind3,] valid<-data[ind2,] return(list(train=train,valid=valid,test=test)) } library(ranger) rf_para<-function(train,valid)#????ɭ?ֵ??ι??̺??? { mtry<-c(1:(ncol(train)-1)) para_crea=mtry error<-rep(NA,length=length(para_crea)) #??ѭ??????ʱ????Լ8???? for(i in 1:length(para_crea)) { model<-ranger(formula=train[,ncol(train)]~.,data=data.frame(train),mtry=para_crea[1],num.trees=500) pre<-predict(model,valid) pre1<-pre$predictions error[i]<-mean(abs(pre1-valid[,ncol(valid)]))#ƽ?????????? } mm<-which(error==min(error),arr.ind=TRUE) L<-list() L$error=error L$para_result=para_crea[mm] return(L) }
下面是将该R语言代码转化为Python语言的代码:
```python
import numpy as np
from ranger import Ranger
def split_data_point(data):
ind1 = np.arange(0, np.floor(data.shape[0]*0.7), 1, dtype=int)
ind2 = np.arange(np.floor(data.shape[0]*0.7)+1, np.floor(data.shape[0]*0.85), 1, dtype=int)
ind3 = np.arange(np.floor(data.shape[0]*0.85)+1, data.shape[0], 1, dtype=int)
train = data[ind1, :]
valid = data[ind2, :]
test = data[ind3, :]
return {'train': train, 'valid': valid, 'test': test}
def rf_para(train, valid):
mtry = np.arange(1, train.shape[1], 1, dtype=int)
para_crea = mtry
error = np.repeat(np.nan, len(para_crea))
for i in range(len(para_crea)):
model = Ranger(train[:, :-1], train[:, -1], mtry=para_crea[0], num_trees=500)
pre = model.predict(valid[:, :-1])
pre1 = pre.predictions
error[i] = np.mean(np.abs(pre1 - valid[:, -1]))
mm = np.argmin(error)
L = {}
L['error'] = error
L['para_result'] = para_crea[mm]
return L
```
其中,`data`和`train`分别为numpy数组,`split_data_point`函数用于将输入数据分成训练集、验证集和测试集。`rf_para`函数用于随机森林模型的参数调优。在Python中,使用ranger库来训练随机森林模型。注意,Python的索引从0开始,需要对R语言代码中的索引进行转化。另外,R语言中的`rep`函数可以使用numpy库中的`np.repeat`函数来实现。
阅读全文