{"id":761,"date":"2024-05-25T12:19:47","date_gmt":"2024-05-25T10:19:47","guid":{"rendered":"https:\/\/blogs.uef.fi\/isila\/?p=761"},"modified":"2024-05-25T16:11:20","modified_gmt":"2024-05-25T14:11:20","slug":"generating-xapi-logs-from-tabular-data-the-csv2xapi-tool","status":"publish","type":"post","link":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/","title":{"rendered":"Generating xAPI logs from tabular data: The csv2xAPI tool"},"content":{"rendered":"\n<p>Our solution to combine data from multiple sources in the scope of the ISILA project consists of a tool to convert from pretty much any CSV file (or other tabular format) to xAPI JSON logs that can be sent to a Learning Record Store. The tool that we have developed for this purpose is called csv2xAPI and is available at the following URL: <a href=\"https:\/\/sonsoleslp.shinyapps.io\/csv2xapi\">https:\/\/sonsoleslp.shinyapps.io\/csv2xapi<\/a>\/<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" src=\"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-1024x608.png\" alt=\"Interface of the csv2xAPI tool\" class=\"wp-image-764\" srcset=\"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-1024x608.png 1024w, https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-300x178.png 300w, https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-768x456.png 768w, https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-1536x911.png 1536w, https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-2048x1215.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Using the tool requires the following 3 steps:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Uploading the data:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Users can upload their CSV (or Excel, tsv, etc.) data into the app.<\/li>\n\n\n\n<li>If the data is in<strong> wide format<\/strong>, for example, a survey where each row represents one student with multiple columns representing different responses to different questions, users can choose which columns to pivot so that each row corresponds to an xAPI statement. <\/li>\n\n\n\n<li>If the data is already in the <strong>long format<\/strong>, for example, an event log, where each row represents an interaction and there are \u2014potentially\u2014 multiple rows per user, then no additional pre-processing is required.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Mapping<\/strong> <strong>the data columns to xAPI<\/strong>\n<ul class=\"wp-block-list\">\n<li>Users then map the columns from their data to the xAPI components (such as actor, verb, object, etc.). <\/li>\n\n\n\n<li>If the column names of the dataset match the xAPI parts (timestamp, actor.email, verb.id, object.name, etc.) the mapping is performed automatically.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Sending the records to the LRS:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Users must provide the necessary details for their LRS (Learning Record Store): endpoint, client and secret<\/li>\n\n\n\n<li>After hitting \u201cSend,\u201d the statements are sent to the LRS.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>The source code is available on GitHub with an open-source license: <a href=\"https:\/\/github.com\/sonsoleslp\/csv2xAPI \">https:\/\/github.com\/sonsoleslp\/csv2xAPI <\/a><\/p>\n\n\n\n<p>A tutorial on how to use the tool is available here:<\/p>\n\n\n<div class=\"embed-container\">\n    <iframe loading=\"lazy\" title=\"csv2xAPI tutorial - ISILA Erasmus+ project\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/OoPYZcQ5YEc?feature=oembed&#038;controls=1&#038;hd=1&#038;autohide=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen frameborder=\"0\"><\/iframe><\/div>","protected":false},"excerpt":{"rendered":"<p>Our solution to combine data from multiple sources in the scope of the ISILA project consists of a tool to convert from pretty much any CSV file (or other tabular format) to xAPI JSON logs that can be sent to a Learning Record Store. The tool that we have developed for this purpose is called [&hellip;]<\/p>\n","protected":false},"author":645,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[47,50],"tags":[38,41,44,14,29,17],"class_list":["post-761","post","type-post","status-publish","format-standard","hentry","category-technical","category-wp2","tag-data-collection","tag-erasmus","tag-ka220-hed","tag-learning-analytics","tag-learning-record-store","tag-xapi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Generating xAPI logs from tabular data: The csv2xAPI tool - ISILA<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The csv2xAPI tool\" \/>\n<meta property=\"og:description\" content=\"Generating xAPI logs from tabular data\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/\" \/>\n<meta property=\"og:site_name\" content=\"ISILA\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-25T10:19:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-25T14:11:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2926\" \/>\n\t<meta property=\"og:image:height\" content=\"1736\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sonsoles L\u00f3pez Pernas\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sonsoleslp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sonsoles L\u00f3pez Pernas\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/\"},\"author\":{\"name\":\"Sonsoles L\u00f3pez Pernas\",\"@id\":\"https:\/\/blogs.uef.fi\/isila\/#\/schema\/person\/34af5da70493892069dffddbaa88a84e\"},\"headline\":\"Generating xAPI logs from tabular data: The csv2xAPI tool\",\"datePublished\":\"2024-05-25T10:19:47+00:00\",\"dateModified\":\"2024-05-25T14:11:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/\"},\"wordCount\":287,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-1024x608.png\",\"keywords\":[\"data collection\",\"erasmus+\",\"ka220-hed\",\"learning analytics\",\"learning record store\",\"xapi\"],\"articleSection\":[\"Technical\",\"WP2\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/\",\"url\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/\",\"name\":\"Generating xAPI logs from tabular data: The csv2xAPI tool - ISILA\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.uef.fi\/isila\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-1024x608.png\",\"datePublished\":\"2024-05-25T10:19:47+00:00\",\"dateModified\":\"2024-05-25T14:11:20+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.uef.fi\/isila\/#\/schema\/person\/34af5da70493892069dffddbaa88a84e\"},\"breadcrumb\":{\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#primaryimage\",\"url\":\"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1.png\",\"contentUrl\":\"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1.png\",\"width\":2926,\"height\":1736,\"caption\":\"Interface of the csv2xAPI tool\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.uef.fi\/isila\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generating xAPI logs from tabular data: The csv2xAPI tool\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.uef.fi\/isila\/#website\",\"url\":\"https:\/\/blogs.uef.fi\/isila\/\",\"name\":\"ISILA\",\"description\":\"Improving the quality and sustainability of learning using early intervention methods based on learning analytics\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.uef.fi\/isila\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.uef.fi\/isila\/#\/schema\/person\/34af5da70493892069dffddbaa88a84e\",\"name\":\"Sonsoles L\u00f3pez Pernas\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.uef.fi\/isila\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d3c3b3784c5b29229a4b90f997013375e035cc9f54f5c37a87a215ed3c260a7f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d3c3b3784c5b29229a4b90f997013375e035cc9f54f5c37a87a215ed3c260a7f?s=96&d=mm&r=g\",\"caption\":\"Sonsoles L\u00f3pez Pernas\"},\"sameAs\":[\"https:\/\/sonsoles.me\",\"https:\/\/www.linkedin.com\/in\/sonsoleslopezpernas\",\"https:\/\/x.com\/sonsoleslp\"],\"url\":\"https:\/\/blogs.uef.fi\/isila\/author\/slopezpe\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Generating xAPI logs from tabular data: The csv2xAPI tool - ISILA","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/","og_locale":"en_US","og_type":"article","og_title":"The csv2xAPI tool","og_description":"Generating xAPI logs from tabular data","og_url":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/","og_site_name":"ISILA","article_published_time":"2024-05-25T10:19:47+00:00","article_modified_time":"2024-05-25T14:11:20+00:00","og_image":[{"width":2926,"height":1736,"url":"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1.png","type":"image\/png"}],"author":"Sonsoles L\u00f3pez Pernas","twitter_card":"summary_large_image","twitter_creator":"@sonsoleslp","twitter_misc":{"Written by":"Sonsoles L\u00f3pez Pernas","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#article","isPartOf":{"@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/"},"author":{"name":"Sonsoles L\u00f3pez Pernas","@id":"https:\/\/blogs.uef.fi\/isila\/#\/schema\/person\/34af5da70493892069dffddbaa88a84e"},"headline":"Generating xAPI logs from tabular data: The csv2xAPI tool","datePublished":"2024-05-25T10:19:47+00:00","dateModified":"2024-05-25T14:11:20+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/"},"wordCount":287,"commentCount":0,"image":{"@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-1024x608.png","keywords":["data collection","erasmus+","ka220-hed","learning analytics","learning record store","xapi"],"articleSection":["Technical","WP2"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/","url":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/","name":"Generating xAPI logs from tabular data: The csv2xAPI tool - ISILA","isPartOf":{"@id":"https:\/\/blogs.uef.fi\/isila\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#primaryimage"},"image":{"@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1-1024x608.png","datePublished":"2024-05-25T10:19:47+00:00","dateModified":"2024-05-25T14:11:20+00:00","author":{"@id":"https:\/\/blogs.uef.fi\/isila\/#\/schema\/person\/34af5da70493892069dffddbaa88a84e"},"breadcrumb":{"@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#primaryimage","url":"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1.png","contentUrl":"https:\/\/blogs.uef.fi\/isila\/wp-content\/uploads\/sites\/197\/2024\/05\/image-1.png","width":2926,"height":1736,"caption":"Interface of the csv2xAPI tool"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.uef.fi\/isila\/2024\/05\/25\/generating-xapi-logs-from-tabular-data-the-csv2xapi-tool\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.uef.fi\/isila\/"},{"@type":"ListItem","position":2,"name":"Generating xAPI logs from tabular data: The csv2xAPI tool"}]},{"@type":"WebSite","@id":"https:\/\/blogs.uef.fi\/isila\/#website","url":"https:\/\/blogs.uef.fi\/isila\/","name":"ISILA","description":"Improving the quality and sustainability of learning using early intervention methods based on learning analytics","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.uef.fi\/isila\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.uef.fi\/isila\/#\/schema\/person\/34af5da70493892069dffddbaa88a84e","name":"Sonsoles L\u00f3pez Pernas","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.uef.fi\/isila\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d3c3b3784c5b29229a4b90f997013375e035cc9f54f5c37a87a215ed3c260a7f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d3c3b3784c5b29229a4b90f997013375e035cc9f54f5c37a87a215ed3c260a7f?s=96&d=mm&r=g","caption":"Sonsoles L\u00f3pez Pernas"},"sameAs":["https:\/\/sonsoles.me","https:\/\/www.linkedin.com\/in\/sonsoleslopezpernas","https:\/\/x.com\/sonsoleslp"],"url":"https:\/\/blogs.uef.fi\/isila\/author\/slopezpe\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/posts\/761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/users\/645"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/comments?post=761"}],"version-history":[{"count":1,"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/posts\/761\/revisions"}],"predecessor-version":[{"id":788,"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/posts\/761\/revisions\/788"}],"wp:attachment":[{"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/media?parent=761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/categories?post=761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.uef.fi\/isila\/wp-json\/wp\/v2\/tags?post=761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}