读取excel表中一列数据,并存储为数组,将数组中连续出现的相同字符串划分在一起,并初始化一个空数组X用来存储临时划分位置,数组merge中记录了可以划分的位置,最后一个不相同元素不用存储划分,初始化giniMin为无穷大位置,输入参数k,判断临时划分位置数组X包含的数据个数,当X中数据个数等于k时,对划分位置的基尼指数进行计算
时间: 2023-12-03 13:45:09 浏览: 198
String类的方法和属性-数组与字符串
可以使用Python中的pandas库来读取excel表格中的数据,并将其存储为数组。具体操作如下:
```python
import pandas as pd
# 读取excel表格中的数据
df = pd.read_excel('filename.xlsx')
# 将指定列数据存储为数组
data = df['column_name'].values
```
接着,可以使用for循环遍历数组,将连续出现的相同字符串划分在一起,并将划分位置存储在临时数组X中。代码如下:
```python
X = [] # 临时划分位置数组
curr = data[0] # 当前字符串
count = 1 # 当前字符串出现次数
for i in range(1, len(data)):
if data[i] == curr:
count += 1
else:
if count > 1:
X.append(i-1)
curr = data[i]
count = 1
```
在X数组中记录了可用于划分的位置,接下来需要计算每个划分位置的基尼指数,并记录最小的基尼指数所对应的划分位置。代码如下:
```python
giniMin = float('inf') # 初始化最小基尼指数为无穷大
merge = [] # 存储可用于划分的位置
n = len(data) # 数据长度
for i in range(len(X)):
size = X[i] + 1 # 划分后左侧数组的大小
gini = size/n * gini_func(data[:size]) + (n-size)/n * gini_func(data[size:])
if gini < giniMin:
giniMin = gini
merge = [X[i]]
elif gini == giniMin:
merge.append(X[i])
```
其中,gini_func是计算基尼指数的函数,需要自己实现。最后,判断临时划分位置数组X中数据个数是否等于k,如果相等,则可以使用merge数组中记录的划分位置进行划分。
阅读全文