Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola a todos -
Tengo un objeto visual de script de red de Python en Power BI.
Estoy buscando aplicar una segmentación de datos (en lugar de codificar de forma rígida los equipos - tm1 y tm2 ) en el script de Python a continuación.
¿Cómo se puede hacer esto?
¡Gracias de antemano!
# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script:
# dataset = pandas.DataFrame(TmName, OppName)
# dataset = dataset.drop_duplicates()
# Paste or type your script code here:
import networkx
import matplotlib.pyplot as plt
tm1 = 'Villanova'
tm2 = 'Cal Poly SLO'
# load edges file from csv
left = list(dataset.TmName)
right = list(dataset.OppName)
graph = networkx.Graph()
graph.add_edges_from(list(zip(left, right)))
# Test single path
shortest_path = networkx.shortest_path(graph, tm1, tm2)
#
edges_2team = dataset[dataset.TmName.isin(shortest_path)]
left_2team= list(edges_2team['TmName'])
right_2team = list(edges_2team['OppName'])
graph_2team = networkx.Graph()
graph_2team.add_edges_from(list(zip(left_2team, right_2team)))
networkx.draw(graph_2team, with_labels=True)
plt.show()
Solved! Go to Solution.
Hola @jmarcrum ,
este código tal vez está haciendo lo que usted está buscando:
# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script:
# dataset = pandas.DataFrame(TmName, OppName, Selection1, Selection2)
# dataset = dataset.drop_duplicates()
# Paste or type your script code here:
import networkx
import matplotlib.pyplot as plt
tm1_l = list(dataset.Selection1)
tm1 = tm1_l[1]
tm2_l = list(dataset.Selection2)
tm2 = tm2_l[1]
# load edges file from csv
left = list(dataset.TmName)
right = list(dataset.OppName)
graph = networkx.Graph()
graph.add_edges_from(list(zip(left, right)))
# Test single path
shortest_path = networkx.shortest_path(graph, tm1, tm2)
edges_2team = dataset[dataset.TmName.isin(shortest_path)]
left_2team= list(edges_2team['TmName'])
right_2team = list(edges_2team['OppName'])
graph_2team = networkx.Graph()
graph_2team.add_edges_from(list(zip(left_2team, right_2team)))
plt.title(tm1 + " " + tm2)
networkx.draw(graph_2team, with_labels=True)
plt.show()
ya que permite crear este gráfico:
Tenga en cuenta esta línea:
networkx.draw(graph_2team, with_labels=True)
Con suerte, esto es lo que estás buscando.
saludos
Tom
Podría equivocarme, pero estoy bastante seguro de que los gráficos python interactúan con otros objetos visuales por lo que una segmentación de datos debe pre-filtrar el marco de datos que entra en el visual python...
Supongo que no quiero filtrar la trama de datos que entra. Realmente quiero pasar un parámetro... como permitir al usuario seleccionar un equipo 1 y un equipo 2 que luego puedo pasar a la secuencia de comandos de Python y usar en lugar de los valores codificados de forma rígida tm1 y tm2.
¿Tiene sentido? ¿Cómo haría eso?
Hola @jmarcrum ,
puede agregar la columna que "alimenta" la segmentación de datos a los valores de script de Python.
Otra opción es crear una medida mediante DAX si la columna se origina a partir de una tabla no relacionada. Puede utilizar SELECTEDVALUE('<tablename>'[columname] , <defaultvalue>), consulte aquí: https://dax.guide/selectedvalue/
Con suerte, esto proporciona algunas ideas para abordar su desafío.
saludos
Tom
Manténgase seguro, manténgase saludable
Hola Tom -
Fui a la segunda ruta, usando DAX en la mesa desconectada, pero estoy recibiendo un error. ¿Sabes lo que podría estar mal?
Puede ver el código editado, así como el error en el medio. ¿Cree que mis medidas importadas no son objetos?
Mi archivo pbix está aquí:
https://www.dropbox.com/s/1qm5b3l73c01tbr/To_Publish4.pbix?dl=0
Hola @jmarcrum ,
proporcione un pbix que cree un gráfico de red de trabajo, sin intentar incorporar la tabla no relacionada o las soluciones SELECTEDVALUE que mencioné.
saludos
Tom
Hola @jmarcrum ,
No pude resistirme a 🙂
este código
# Paste or type your script code here:
import networkx
import matplotlib.pyplot as plt
tm1_l = list(dataset.Selection1)
tm1 = tm1_l[1]
tm2_l = list(dataset.Selection2)
tm2 = tm2_l[1]
# load edges file from csv
left = list(dataset.TmName)
right = list(dataset.OppName)
graph = networkx.Graph()
graph.add_edges_from(list(zip(left, right)))
# Test single path
# shortest_path = networkx.shortest_path(graph, tm1, tm2)
#
#edges_2team = dataset[dataset.TmName.isin(shortest_path)]
#left_2team= list(edges_2team['TmName'])
#right_2team = list(edges_2team['OppName'])
#graph_2team = networkx.Graph()
#graph_2team.add_edges_from(list(zip(left_2team, right_2team)))
plt.title(tm1 + " " + tm2)
networkx.draw(graph, with_labels=False)
plt.show()
Crea este gráfico (los rectángulos verdes se agregan mediante snagit 🙂
Como puede ver, las medidas están funcionando para seleccionar algo.
Tenga en cuenta que mi código anterior está transformando las columnas de marco de datos en una lista, para seleccionar el 1o valor para crear el título.
Estoy usando plt.title como .draw() apaga el eje, donde .draw_newtworkx() no está haciendo esto.
Con suerte, esto proporciona algunas ideas sobre lo que está causando los problemas
saludos
Tom
Hola @jmarcrum ,
este código tal vez está haciendo lo que usted está buscando:
# The following code to create a dataframe and remove duplicated rows is always executed and acts as a preamble for your script:
# dataset = pandas.DataFrame(TmName, OppName, Selection1, Selection2)
# dataset = dataset.drop_duplicates()
# Paste or type your script code here:
import networkx
import matplotlib.pyplot as plt
tm1_l = list(dataset.Selection1)
tm1 = tm1_l[1]
tm2_l = list(dataset.Selection2)
tm2 = tm2_l[1]
# load edges file from csv
left = list(dataset.TmName)
right = list(dataset.OppName)
graph = networkx.Graph()
graph.add_edges_from(list(zip(left, right)))
# Test single path
shortest_path = networkx.shortest_path(graph, tm1, tm2)
edges_2team = dataset[dataset.TmName.isin(shortest_path)]
left_2team= list(edges_2team['TmName'])
right_2team = list(edges_2team['OppName'])
graph_2team = networkx.Graph()
graph_2team.add_edges_from(list(zip(left_2team, right_2team)))
plt.title(tm1 + " " + tm2)
networkx.draw(graph_2team, with_labels=True)
plt.show()
ya que permite crear este gráfico:
Tenga en cuenta esta línea:
networkx.draw(graph_2team, with_labels=True)
Con suerte, esto es lo que estás buscando.
saludos
Tom
Oye, ¿qué son Selection1 y Selection2? ¿Son nombres de columnas o algo más?
Hola
¿Cómo agregó las selecciones en el marco de datos y las hizo funcionar como segmentaciones de datos en Power BI?
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |