dict_ = df['Medium for online class'].value_counts().to_dict() plt.figure(figsize=(12,12)) plt.pie(x=dict_.values(), startangle=0, explode=[0, 0.01, 0.05, 0.1, 0.2]) plt.legend(labels=dict_.keys(), loc='upper right',shadow=True, facecolor='lightyellow') plt.show()
时间: 2023-07-08 10:22:30 浏览: 134
这是一个关于数据可视化的代码,使用了 pandas 和 matplotlib 库。首先,从一个名为 df 的数据帧中获取了一个名为 Medium for online class 的列,然后使用 value_counts() 方法计算该列中每个值的数量,将其转换为一个字典 dict_。接下来,创建一个大小为 12x12 的图形,使用 pie() 方法绘制一个饼图,其中 x 参数为 dict_ 的值,startangle 参数为 0,explode 参数指定了每个扇形离中心的距离,legend() 方法添加了标签和图例。最后,使用 show() 方法显示图形。
相关问题
import pandas as pd import matplotlib import numpy as np import matplotlib.pyplot as plt import jieba as jb import re from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.feature_selection import chi2 import numpy as np from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.naive_bayes import MultinomialNB def sigmoid(x): return 1 / (1 + np.exp(-x)) import numpy as np #定义删除除字母,数字,汉字以外的所有符号的函数 def remove_punctuation(line): line = str(line) if line.strip()=='': return '' rule = re.compile(u"[^a-zA-Z0-9\u4E00-\u9FA5]") line = rule.sub('',line) return line def stopwordslist(filepath): stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()] return stopwords df = pd.read_csv('./online_shopping_10_cats/online_shopping_10_cats.csv') df=df[['cat','review']] df = df[pd.notnull(df['review'])] d = {'cat':df['cat'].value_counts().index, 'count': df['cat'].value_counts()} df_cat = pd.DataFrame(data=d).reset_index(drop=True) df['cat_id'] = df['cat'].factorize()[0] cat_id_df = df[['cat', 'cat_id']].drop_duplicates().sort_values('cat_id').reset_index(drop=True) cat_to_id = dict(cat_id_df.values) id_to_cat = dict(cat_id_df[['cat_id', 'cat']].values) #加载停用词 stopwords = stopwordslist("./online_shopping_10_cats/chineseStopWords.txt") #删除除字母,数字,汉字以外的所有符号 df['clean_review'] = df['review'].apply(remove_punctuation) #分词,并过滤停用词 df['cut_review'] = df['clean_review'].apply(lambda x: " ".join([w for w in list(jb.cut(x)) if w not in stopwords])) tfidf = TfidfVectorizer(norm='l2', ngram_range=(1, 2)) features = tfidf.fit_transform(df.cut_review) labels = df.cat_id X_train, X_test, y_train, y_test = train_test_split(df['cut_review'], df['cat_id'], random_state = 0) count_vect = CountVectorizer() X_train_counts = count_vect.fit_transform(X_train) tfidf_transformer = TfidfTransformer() X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) 已经写好以上代码,请补全train和test函数
以下是train和test函数的代码:
```python
def train(X_train_tfidf, y_train):
clf = MultinomialNB().fit(X_train_tfidf, y_train)
return clf
def test(clf, X_test):
X_test_counts = count_vect.transform(X_test)
X_test_tfidf = tfidf_transformer.transform(X_test_counts)
y_pred = clf.predict(X_test_tfidf)
return y_pred
```
train函数使用MultinomialNB()方法来拟合特征矩阵和标签,返回训练后的分类器clf。
test函数使用训练好的分类器clf来预测X_test的标签,返回预测结果y_pred。在预测之前,需要使用之前定义的count_vect和tfidf_transformer对X_test进行向量化和tf-idf转换。
import pandas as pd import numpy as np import networkx as nx import matplotlib.pyplot as plt df = pd.read_excel(r"C:\Users\li'yi'jie\Desktop\运筹学网络规划数据.xlsx") edges = [] for i in range(len(df)): edge = { "id": df.loc[i, "边的编号"], "tail": df.loc[i, "边的尾节点"], "head": df.loc[i, "边的头节点"], "length": df.loc[i, "长度"], "capacity": df.loc[i, "容量"] } edges.append(edge) plt.figure(figsize=(15,15)) G = nx.DiGraph() for edge in edges: G.add_edge(edge["tail"], edge["head"], weight=edge["length"]) pos = nx.spring_layout(G) nx.draw(G, pos, with_labels=True) labels = nx.get_edge_attributes(G, "weight") nx.draw_networkx_edge_labels(G, pos, edge_labels=labels, label_pos=0.5) plt.show() all_pairs = dict(nx.all_pairs_dijkstra_path_length(G)) rows = [] for start_node, dist_dict in all_pairs.items(): for end_node, dist in dist_dict.items(): rows.append({'起始节点': start_node, '终止节点': end_node, '最短路径长度': dist}) df_result = pd.DataFrame(rows) df_result.to_excel('all_pairs.xlsx', index=False) # 计算每个节点到其他节点的平均最短距离 avg_dists = [] for node in G.nodes(): dist_sum = 0 for dist in all_pairs[node].values(): dist_sum += dist avg_dist = dist_sum / len(G.nodes()) avg_dists.append(avg_dist) # 画柱状图 plt.figure(figsize=(15,15)) plt.bar(G.nodes(), avg_dists) plt.title("每个节点到其他节点的平均最短距离") plt.xlabel("节点") plt.ylabel("平均最短距离") plt.show()在上述代码的基础上,计算每条边被最短路径使用的次数,并按照该次数对所有边进行排序,讨论该结果反映了网络中哪些信息
要计算每条边被最短路径使用的次数,可以在计算最短路径的过程中统计每条边被使用的次数。具体地,可以使用networkx库中的all_pairs_dijkstra_path函数计算所有节点对之间的最短路径,并在计算路径时记录每条边被使用的次数。代码如下:
```
all_paths = dict(nx.all_pairs_dijkstra_path(G))
edge_counts = {edge["id"]: 0 for edge in edges}
for start_node in all_paths:
for end_node in all_paths[start_node]:
path = all_paths[start_node][end_node]
for i in range(len(path) - 1):
edge_id = G[path[i]][path[i+1]]["id"]
edge_counts[edge_id] += 1
```
这段代码首先使用all_pairs_dijkstra_path函数计算所有节点对之间的最短路径,然后对于每条最短路径,遍历路径上的所有边,统计每条边被使用的次数。
计算出每条边被使用的次数后,我们可以按照该次数对所有边进行排序,反映了哪些信息呢?这个排序结果可以反映网络中哪些边对于最短路径的重要性比较高,即哪些边在最短路径中被更频繁地使用。这对于我们了解网络的拓扑结构、优化网络设计等方面都有一定的参考价值。
阅读全文