【问题标题】:Read data from excel file for analysis从excel文件中读取数据进行分析
【发布时间】:2017-02-04 21:22:37
【问题描述】:

我有以下两个我编写的代码和 excel 文件。我只是不明白如何组合它们,以便我可以从 excel 文件中读取并使用这些数字组成一个集群。

import matplotlib.pyplot as plt
import xlrd
from matplotlib import style
style.use("ggplot")
from sklearn.cluster import KMeans

fileWorkspace = 'C://Users/bob/Desktop/'

pull=[]
wb1 = xlrd.open_workbook(fileWorkspace + 'try.xlsx')
sh1 = wb1.sheet_by_index(0)

for a in range(0,sh1.nrows):
    for b in range(0,sh1.ncols):
        pull.append(sh1.cell(a,b).value)
    print('Finished in row' + str(a))


x = [11,19,23,33,44,91,92,90,60,63]

y = [92,85,22,25,86,78,63,51,66,15]


X = [list(item) for item in zip(x,y)]

kmeans = KMeans(n_clusters=3)
kmeans.fit(X)

centroids = kmeans.cluster_centers_
labels = kmeans.labels_

print(centroids)
print(labels)

colors = ["g.","r.","y.","c.","m.","k."]

for i in range(len(X)):
    print("coordinate:",X[i], "label:", labels[i])
    plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 10)

plt.scatter(centroids[:, 0],centroids[:, 1], marker = "x", s=150, linewidths=5, zorder=10)
plt.show()

excel文件图片:

这很复杂,因为我必须读取那一行数据然后制作集群。我也必须跳过行和列来阅读它们。

【问题讨论】:

  • 在您的代码中,您似乎没有使用从 excel 文件中加载的数据,对吗?你到底想用这些数据做什么?
  • 是的。我为该聚类代码提供的数据只是示例。 excel文件中的那个是正确的。代码肯定需要修改,但我坚持如何组合这两个代码。我非常想读取该 excel 文件数据并制作集群。
  • 好的,没问题,文件中的数字代表什么?你需要一个预测器和预测器。在您的示例中,您有几个 x,y 对。在 excel 数据中似乎只有一列数据。
  • 我刚刚意识到 K-means 聚类需要 x 和 y。我只有x。我想我将不得不使用不同类型的聚类。可能是网络。但是,仍然需要知道如何通过跳过行和列来读取 excel 数据并将它们存储在数组中。如果你现在能帮我解决这个问题,那就太好了。
  • 啊,好吧。祝你好运!要读取数据,您可能有兴趣使用pandas

标签: python excel xlrd


【解决方案1】:

如果您不反对使用pandas,您可以通过以下方式使用read_excel 函数:

import pandas as pd
# Read in data from first sheet
df = pd.read_excel(filename, sheetname=0, parse_cols='B:D', index_col=0, header=[0,1])

这样您可以同时处理空白列以及标题和数据标签。从那里您可以通过df.values 以numpy 数组的形式访问数据,或者通过执行以下操作获取列表 (y, x) 对的列表:

pairs = df.values.tolist()

您还可以通过使用适当的范围遍历行和/或列来使用 xlrd。例如,如果您只想将示例文件中的数据读入列表列表,您可以执行以下操作:

import xlrd

workbook = xlrd.open_workbook(filename)
sheet = workbook.sheet_by_index(0)

pairs = []
# Iterate through rows starting at the 3rd row)
for i in range(2, 15):
    # Iterate through columns starting at the 3rd column
    pairs.append([sheet.cell(i, j).value for j in range(2, 4)])

在 xlrd 中可能有更好的方法来做到这一点,但我很少使用它。

【讨论】:

  • 谢谢!我得到了那部分。我会尝试做集群代码。如果我不明白,我会用它编辑帖子。
  • 这很简单,我只需要做X = pairs
  • 如果你需要 (x, y) 对而不是 (y, x) 你可以这样做X = [p[::-1] for p in pairs]
  • 如果我想跳过一列或一行怎么办?就像我想阅读第 1 列和第 3 列一样,并跳过第 2 列中的数据。
  • 找出跳过列并使用您切换 x,y 的想法。惊人的!再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多