Inspiration

Reflecting on the various online courses I took this summer, I've realized that in an online course, there is a large gap between the teacher and the student. In an in-person class, teachers can see how their students are doing by their body language, the questions they ask, and how often they participate. However, in an online course, a student is often just a set of numbers. Teachers only know how their students are performing, since they can see what their grades are; however, they are unaware of each of their students' approach to the class. One student with a B could be completely disinterested in the class while another who also has a B could be really interested, but to a teacher of an online course, these students are the exact same.

What it does

EdEngage tracks the motivation of each student and hopes to boost it by providing teachers with this information so that they can specifically target certain students who are not as engaged in the class. Online courses usually have discussion forums in which students communicate with each other, making comments about the course and asking for help. EdEngage scans discussion forums and provides teachers with two things: a network representing student-to-student interactions and a motivation score for each student. This motivation score is based on the sentiment of each student, which is taken from their posts, and how often they post, since it conveys their interest in the class and how engaged they are with the content.

How I built it

I created a hypothetical dataset that consisted of three columns: "Posted", "Replied", and "Text". Each of the rows represented a discussion post, and "Posted" referred to the person who posted it, "Replied" was who they replied to, and "Text" referred to the discussion text. This was created on Google Sheets and then downloaded as a csv. I then implemented sentiment analysis on the discussion text using TextBlob, and generated a sentiment score for each student by finding the net sentiment of their posts.

To create a visual network of student-to-student interactions, I had to implement network analysis on the data. This network consisted of nodes, which represented each student, and edges, which were student-to-student interactions. I configured it to make the size of each node dependent on how many times that student posted or was replied to, and the thickness of each edge dependent on how many times that interaction occurred. I also color-coded the network, in which each node ranged from green to red, depending on what the sentiment score of that student was.

I also created a motivation score for each student, which was dependent on two factors: the degree centrality of their node in the network and their sentiment score. The degree centrality of a node represents how well-connected it is to other nodes, so basically how engaged a specific student is in the discussion.

I then used HTML, CSS, JavaScript, and Flask to create a website, in which users can upload files representing a discussion forum in an online course, and receive results, consisting of the visual network of nodes representing each student and each of their motivation scores.

Challenges I ran into

I ran into many challenges while attempting to implement network analysis. I had a clear ideation of what my app was going to be like: it was going to output a nice graph, representing each student and how engaged they were based on their interactions with other students. However, I had no idea what data network analysis would require. How would it know who interacted with who? Was I going to have to make data to specifically implement network analysis?

My first challenge was figuring out what data I would need for network analysis. After looking at a couple of tutorials, I realized that I was going to have to make my own data and that network analysis would require my data to be formatted in a specific way. It would need two columns: the sender and the receiver. However, since a discussion forum doesn't have a specific receiver, I decided that I had to instead replace the receiver with the person that was replied to, since they would be the most relevant to the post made by the sender. I also needed to implement sentiment analysis on the data in order to color-code the nodes based on how positively/negatively the students representing them felt about the class, so I decided that I would have to create a third column: the discussion text. I created my data on Google Sheets, and downloaded it as a csv so that it could be processed by my code.

My second challenge was implementing the algorithm. Since network analysis is relatively unknown, there was not much information about it online, and most of the tutorials were about how they could be implemented for specific use cases. Furthermore, I didn't want to just create a black and white network of nodes and edges; I also wanted to alter the size of each node, change the thickness of each edge, and color-code each node. Therefore, I had to look at many of these tutorials together to see how they implemented these specific things and then try to do it myself, for my specific use case.

Accomplishments that I'm proud of

I'm proud that, in a span of just a few days, I was able to effectively implement network analysis, a topic that I had never heard of before this hackathon. It took a lot of effort to understand everything about it, as I described earlier, and I feel extremely satisfied about being able to implement it successfully. I am also pretty surprised that in just a few days, I was able to turn a concern about the online education system into a feasible solution that many of my online teachers could potentially use. That's exactly why I really enjoy participating in hackathons. They force me to make my ideas a reality in a short period of time.

What I learned

I learned more about how large the gap between teachers and students is in an online classroom; reflecting on the online courses I've taken over the summer and also researching this topic in general has given me a better understanding of how important it is to close this gap, especially with the rapid increase in online education.

In terms of coding, I learned about network analysis and also about using Flask. I had never used either of those before competing in this hackathon, and looking back at it, I think my coding skills have improved tremendously from this experience. Flask is an extremely powerful tool that I would like to continue to use in future hackathons.

What's next for EdEngage

EdEngage was created as an engagement tracker for students, and therefore, it would be best for it to be integrated into existing learning management systems. For example, it could be used for popular learning management systems like Google Classroom and Moodle. Teachers on these platforms could use the engagement scores generated by EdEngage to specifically target students that have a low engagement by helping them out and trying to make them feel more motivated.

I plan on not just making EdEngage display a network graph and engagement scores for each student, but also providing insights to the teacher about what could be done to specifically help each student. For example, two students could be both having low engagement scores, but one could be completely disinterested in the class, whereas the other could not be understanding the content as well. As a result, I hope to incorporate more data about each student in EdEngage (late/missing assignments, time spent on assignments, time spent on website, etc.), so that it can be more accurate in assessing each student's characteristics and what the teacher could do to help them.

Built With

Share this project:

Updates