python r awk sed data-cleaning

Python o awk/sed para limpiar datos



data-cleaning (6)

Estoy de acuerdo con Dirk. Pensé en lo mismo y también usé otros idiomas. Pero al final me sorprendió nuevamente lo que los usuarios más experimentados hacen con R. Los paquetes como ddply o plyr pueden ser muy interesantes para usted. Dicho esto, SQL me ayudó con malabares de datos a menudo

Uso R para el análisis de datos y estoy muy contento con él. Sin embargo, limpiar los datos podría ser un poco más fácil. Estoy pensando en aprender otro idioma adecuado para esta tarea. Específicamente, estoy buscando una herramienta para tomar datos sin procesar, eliminar variables u observaciones innecesarias y formatearla para cargarla fácilmente en R. El contenido sería principalmente datos numéricos y de cadena, a diferencia del texto de varias líneas.

Estoy considerando la combinación awk / sed versus Python. (Reconozco que Perl sería otra opción, pero, si iba a aprender otro idioma completo, Python parece ser una opción mejor y más extensible).

La ventaja de sed / awk es que sería más rápido aprender. La desventaja es que esta combinación no es tan extensible como Python. De hecho, podría imaginar algo de "misión lenta" si aprendiera Python, lo cual estaría bien, pero no es mi objetivo.

La otra consideración que tuve fueron las aplicaciones a grandes conjuntos de datos. Tal como lo entiendo, awk / sed opera línea por línea, mientras que Python normalmente extraerá todos los datos en la memoria. Esta podría ser otra ventaja para sed / awk.

¿Hay otros problemas que me estoy perdiendo? Cualquier consejo que puedas ofrecer sería apreciado. (Incluí la etiqueta R para que los usuarios de R ofrezcan sus recomendaciones de limpieza).


No para arruinar tu aventura, pero yo diría que no, y aquí está el por qué:

  • R se vectoriza donde sed / awk no son
  • R ya tiene expresiones regulares de Perl y expresiones regulares extendidas
  • R puede recurrir más fácilmente a rutinas estadísticas (por ejemplo, imputación) si lo necesita
  • R puede visualizar, resumir, ...

y lo más importante: ya sabes R.

Dicho esto, por supuesto, sed / awk son geniales para programas pequeños o incluso one-liners y Python es un buen lenguaje. Pero yo también consideraría seguir con R.


Recomendaría ''awk'' para este tipo de procesamiento.

Presumiblemente, solo está buscando / rechazando observaciones inválidas en archivos de texto simples.

awk es muy rápido en esta tarea y es muy simple de programar.

Si necesitas hacer algo más complejo, entonces puedes.

Python también es una posibilidad si no te importa el golpe de rendimiento. La biblioteca "rpy" se puede usar para integrar estrechamente los componentes python y R.


Recomendaría sed / awk junto con la riqueza de otras herramientas de línea de comando disponibles en plataformas parecidas a UNIX: comm, tr, sort, cut, join, grep y capacidades integradas de shell, como bucles y otras cosas. Realmente no necesita aprender otro lenguaje de programación ya que R puede manejar la manipulación de datos y si no es mejor que los otros lenguajes de scripting populares.


Recomiendo invertir a largo plazo con un lenguaje adecuado para el procesamiento de archivos de datos, como Python o Perl o Ruby, frente a la solución sed / awk a corto plazo. Creo que todos los analistas de datos necesitan al menos tres idiomas; Utilizo C para cálculos pesados, Perl para procesar archivos de datos y R para análisis y gráficos interactivos.

Aprendí Perl antes de que Python se hiciera popular. Escuché cosas geniales sobre el rubí, así que tal vez quieras intentarlo.

Para cualquiera de estos, puede trabajar con archivos línea por línea; Python no necesita leer el archivo completo por adelantado.


Yo uso Python y Perl regularmente. Sé sed bastante bien y una vez usé awk mucho. He usado R en ataques y chorros. Perl es el mejor del grupo para la función y velocidad de transformación de datos.

  • Perl puede hacer esencialmente todo lo que sed y awk pueden hacer, pero también mucho más. (De hecho, a2p y s2p, que vienen con perl, convierten las secuencias de comandos awk y sed en Perl).
  • Perl se incluye con la mayoría de los sistemas Linux / Unix. Cuando ese no era el caso, había buenas razones para aprender sed y awk. Esa razón ha muerto hace mucho tiempo.
  • Perl tiene un rico conjunto de módulos que proporcionan mucha más potencia de la que uno puede obtener de awk o sed. Por ejemplo, estos módulos permiten líneas simples que invierten secuencias de ADN, calculan estadísticas, analizan archivos CSV o calculan MD5. (ver http://cpan.org/ para paquetes)
  • Perl es esencialmente tan escueto como sed y awk. Para personas como yo (y, sospecho, tú), transformar rápidamente los datos en la línea de comando es una gran bendición. Python es demasiado prolijo para un uso eficiente de la línea de comandos.

Honestamente, no puedo pensar por qué uno aprendería sed y awk sobre Perl.

Para el registro, no soy "un tipo Perl". Me gusta como una navaja suiza, no como una religión.