import matplotlib.pyplot as plt import numpy as np import pandas as pd data = pd.read_excel(r"G:\Data.xlsx") def dis(WC, data): WCX = (np.array(data['x']) * WC).sum() WCY = (np.array(data['y']) * WC).sum() x0 = WCX / WC.sum() y0 = WCY / WC.sum() d_j = ((np.array(data['x']) - x0) ** 2 + (np.array(data['y']) - y0) ** 2) ** 0.5 T = (WC * d_j).sum() print('重心法初始选点大致位置:({},{})'.format(x0, y0)) print('总费用T0:{}'.format(T)) # 迭代10次 plt.rcParams['font.sans-serif'] = [u'SimHei'] for i in range(10): WC_j = WC / d_j WCX_j = ((np.array(data['x']) * WC) / d_j).sum() WCY_j = ((np.array(data['y']) * WC) / d_j).sum() x = WCX_j / WC_j.sum() y = WCY_j / WC_j.sum() d_j = ((np.array(data['x']) - x) ** 2 + (np.array(data['y']) - y) ** 2) ** 0.5 T = (WC * d_j).sum() print('经{}次迭代后选址点位置:({},{})'.format(i + 1, x, y)) print('总费用T{}:{}'.format(i + 1, T)) # 画图,如果需要迭代次数多,建议只画第一次和最后一次 plt.figure(figsize=(8, 4)) plt.scatter(np.array(data['x']), np.array(data['y']), [300, 300, 300, 300, 300], c='green', marker='*', alpha=0.7, label='站点') plt.scatter(x, y, [270], c='red', marker='p', alpha=0.7, label='选址点') plt.xlabel('x坐标', fontsize=11) plt.ylabel('y坐标', fontsize=11) plt.grid(True) plt.title('重心法选址,第{}次结果示意图'.format(i + 1), fontsize=14) plt.show() if __name__ == '__main__': # 读取文件 data = pd.read_excel(r"C:\Users\pan15\Desktop\重心法\data.xlsx") # print(data) WC = np.array(data['W']) * np.array(data['C']) dis(WC, data)
时间: 2024-02-06 10:03:45 浏览: 169
这段代码是一个使用重心法(Gravity Method)进行选址的算法,其中使用了Pandas和Matplotlib库。重心法是一种常用的选址方法,它的基本思路是在考虑各个站点的权重和距离的情况下,确定一点作为最优选址点,使得各个站点到选址点的加权距离最小。这段代码实现了重心法的迭代过程,通过不断更新选址点位置,计算出选址点的总费用,最终得到最优选址点。
相关问题
import matplotlib.pyplot as plt import numpy as np import pandas as pd df = pd.read_excel("taobao_data_matplolib.xlsx") data = df["成交量"].values labels = df["位置"].values plt.bar(labels, data) plt.show()
这段代码使用了Python中的matplotlib库来绘制一个简单的柱状图。首先,通过pandas库的read_excel()函数读取了一个名为taobao_data_matplolib.xlsx的Excel文件,并将其中的成交量和位置两列数据分别存储到data和labels变量中。然后,使用matplotlib库的plt.bar()函数绘制了一个柱状图,x轴为位置,y轴为成交量。最后,使用plt.show()函数显示出这张图表。这段代码的作用是用柱状图展示不同位置的成交量,以便于比较和分析。
import numpy as np import scipy.stats as ss import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df=pd.read_excel("./tmp_apply3.xlsx")读入后怎么取字段
你可以使用 Pandas 的 `loc` 或 `iloc` 方法来取出 DataFrame 中的特定字段。具体而言,`loc` 方法可以通过列名来取出字段,而 `iloc` 方法可以通过列的索引来取出字段。以下是两种方法的示例:
假设你要取出 `df` 中的 `sale` 和 `date` 两个字段,其中 `sale` 字段在第 2 列,`date` 字段在第 3 列,你可以这样做:
使用 `loc` 方法:
```python
# 通过列名取出字段
df_new = df.loc[:, ["sale", "date"]]
```
使用 `iloc` 方法:
```python
# 通过列的索引取出字段
df_new = df.iloc[:, [1, 2]]
```
上述代码中,`df_new` 就是取出 `df` 中的 `sale` 和 `date` 两个字段后得到的新 DataFrame。其中 `:` 表示取出所有行,`["sale", "date"]` 或 `[1, 2]` 表示取出第 2 列和第 3 列。你可以根据实际需要修改这些代码。
阅读全文