15.5: Importación/Exportación de Datos de Red
- Page ID
- 115857
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)En la mayoría de los estudios de redes, los investigadores necesitan modelar y analizar las redes que existen en el mundo real. Para ello, necesitamos aprender a importar (y exportar) datos de red desde fuera de Python/NetworkX. Afortunadamente, NetworkX puede leer y escribir datos de red desde/hacia archivos en varios formatos 2.

off
') justo después del dibujo de red.Trabajemos en un ejemplo sencillo. Puedes crear tu propia lista de adyacencias en una hoja de cálculo normal (como Microsoft Excel o Google Spreadsheet) y luego guardarla en un archivo en formato “csv” (Fig. 15.5.2). En este ejemplo, la lista de adyacencia dice que John está conectado a Jane y Jack; Jess está conectada con Josh y Jill; y así sucesivamente.

Puedes leer este archivo usando el comando read_adjlist
, de la siguiente manera:

Se ve bien. No, espera, aquí hay un problema. Por alguna razón, ¡hay un nodo extra sin nombre (en la parte superior de la red en la Fig.15.5.3)! ¿Qué pasó? El motivo queda claro si abres el archivo CSV en un editor de texto, lo que revela que el archivo realmente se ve así:
Anote las comas al final de la tercera, cuarta y quinta líneas. Muchas aplicaciones de hojas de cálculo tienden a insertar estas comas adicionales para que el número de columnas sea igual para todas las filas. Es por ello que NetworkX pensó que habría otro nodo cuyo nombre era “” (en blanco). Puedes eliminar esas comas innecesarias en el editor de texto y guardar el archivo. O bien, podría modificar el código de visualización para eliminar el nodo sin nombre antes de dibujar la red. De cualquier manera, el resultado actualizado se muestra en la Fig. 15.5.4.

Si desea importar los datos como un gráfico dirigido, puede usar la opción create_using
en el comando read_adjlist, de la siguiente manera:
El resultado se muestra en la Fig.15.5.5, en la que las puntas de flecha se indican mediante segmentos de línea gruesa.
Otra función simple para importar datos es read_edgelist
. Esta función lee una lista de bordes, es decir, una lista de pares de nodos, formateada de la siguiente manera:

Una característica útil de read_edgelist
es que puede importar no solo bordes sino también sus propiedades, tales como:
La tercera columna de este archivo de datos está estructurada como un diccionario Python, que se importará como propiedad del borde.
Crea un archivo de datos de la red social que creaste en el Ejercicio 15.3.2 usando una aplicación de hoja de cálculo, y luego lee el archivo y visualízalo usando NetworkX. Puede usar el formato de lista de adyacencia o el formato de lista de bordes.
Importe los datos de red de su elección desde el sitio web de Network Data de Mark Newman: http://www-personal.umich.edu/~mejn/netdata/.
Los datos de este sitio web están todos en formato GML, por lo que debe averiguar cómo importarlos a NetworkX. Luego visualice la red importada.
Por último, NetworkX también tiene funciones para escribir archivos de datos de red a partir de sus objetos graph, como write_adjlist
y write_edgelist
. Su uso es muy sencillo. Aquí hay un ejemplo:
Entonces aparecerá un nuevo archivo de texto llamado 'complete-graph.txt
' en la misma carpeta, que se ve así:
Tenga en cuenta que la lista de adyacencia está optimizada para que no haya información redundante incluida en esta salida. Por ejemplo, el nodo 4 está conectado a 0, 1, 2 y 3, pero esta información no se incluye en la última línea porque ya estaba representada en las líneas anteriores.
Escriba los datos de red de la gráfica Zachary Karate Club en un archivo en cada uno de los siguientes formatos:
• Lista de adyacencia
• Lista de bordes
2 Para más detalles, consulte https://networkx.github.io/documenta...ence/readwrite. html
.
3 Si no puede leer el archivo de datos u obtener el resultado correcto, puede deberse a que su NetworkX no reconoció caracteres de nueva línea específicos del sistema operativo en el archivo (esto puede ocurrir particularmente para usuarios de Mac). Puede evitar este problema guardando el archivo CSV en un modo diferente (por ejemplo, modo “MS-DOS” en Microsoft Excel).