Tinderbox Forum

How do you explore themes emerging from tags (thematic coding) in Tinderbox?

I wanted to open this topic up to help me understand how other people are using Tinderbox to find themes from their tags.

Understanding Tinderbox is not specifically designed to be a qda application, it is for me more than enough of what I need for this purpose.

As for me, I am just beginning to explore thematic coding. I have long primarily used tags as temporary categories for Tinderbox notes. As my understanding on a topic improves, I tend to get rid of my old tags and create new tags to begin a fresh new perspective to explore. Most of this work is done right now with the Attribute Browser. It helps me discover new themes within the tag categories. (Thank you JFallows). Intersections are interesting which leads me to try to develop themes from these new areas.

I would like to use maps more in this area because I believe it would give me more of a visual/spatial dimension that my current workflow does not. To do this, I am not certain if I could generate new notes-alias from all my tags then play with them in map view. Sounds like fun but not sure if this is even possible.

Anyway, do you do thematic explorations in Tinderbox?

Understanding that you can’t talk about actual patient data and actual studies, could you give us a more detailed example of thematic coding? Perhaps walk us through the sort of study you have in mind.

Hi Mark,

Over the years I have a rather large collection of personal commonplace notes, primarily reading notes. In this collection, I have primarily used tags as a way of virtually categorizing my notes rather than containers. This is done primarily to spark ideas and relationships between the notes themselves. In other words, I am very interested in the relationship between the notes:tags as well as the relationships between the tags: tags. This system is modeled (and adapted) after the zettelkasten system.
I use tags as temporary containers to these notes.
Thematic coding as I am describing it in this context is taking those tags and using them to find themes and associations between them. I am primarily using the Attribute Browser for this but was curious how others are using tags and finding larger themes within their tinderbox data.
I am interested in exploring maps for viewing tags but not sure how to proceed. In this view I would like to see a single instance of each tag (irrespective of how many notes), have the size of the note indicate the number of notes it to explore themes between the tags themselves.
I apologize in advance if my example description was not clearly communicated.
Thanks
Tom

There is a quite well-used method for splitting thematic lists to one note per value. As the resulting notes are all siblings they are ‘in’ the container and so can be viewed as a map. Let’s say, you have data, a set of values, in $MySet. Let’s break that out to notes using a new note. First we put the values into the $Text or the note.

$Text = values("MySet").format("\n");

Now the note’s $Text has a value per line (paragraph), Explode comes ito play. Explode on line breaks athe the result is each value in $MySet is now a note, and in the same container.

Thanks Mark,

Just to back up one level, how would I create a note with a list of all the tags (in the text pane)?

  1. I assume, I would gather the notes I would be interested in an agent
  2. How would I then create a note that would list all the tags of the notes in step 1 in the text pane?
    2a. How would I modify the code to separate notes that have more than 1 tag?
    2b. Remove duplicates (I can do this one manually)

For example:
Note1,Text1,Tag1:fruits; vegetables Note2,Text2,Tag2:chicken;vegetables Note3,Text3,Tag3:fruits;steak;vegetables, cake, candy

How do I collect a list of all the tags here?
How do I separate notes with more than 1 tag?
How do I remove dups?

What I want in this example is a list similar to the one below, that I could then explode into individual notes.
fruits
vegetables
chicken
steak
cake
candy

Did you try the code in my last post? By all means instead of $MySet, use values("Tags") for data in $Tags, etc.

If your source is List type attribute, that allows duplicates, that is still not a problem as values() returns a Set, thus de-duping the source Lists possible repeats.

To re-state, the values() operator returns a list (i.e. Set data type) representing a de-duplicated list of discrete source values, in a lexical sort. Any unused suggested values are omitted. See more on values().

That works. Thanks Mark as always for your input.

1 Like

Happy to help—and in doing so ended up improving the article on values() (already uploaded) to better explain the potential issues with the default sort. The reference there to collect() I might remove as it relates to older versions before the optional group parameter was added. Initlally values() was fixed at whole-doc scope and collect() was needed if you wanted values from a sub-set of notes. In the current v8.x app, you can use the group parameter to set the scope (using group-scope designators) of the values returned. In scope used of values() unused suggested values are still weeded.

Quick follow up question and example:
is there a way to get tags for an agent query?
Let’s say you have successfully created a new agent to search for certain terms within a document. Let’s call the term1 or term2. There are 15 notes.
How would you recommend listing the tags just for the results of this agent (these 15 notes)?
Thanks for your continued work on ATBRef.
Very much appreciated by the community
Tom

OK, we’ve made “Agent X” to locate the notes of interest. So, we want to scope values() to those notes only (via their aliases inside the agent). So, you want the two-parameter version of values(group,attribute):

values([group],"Tags")

The notes we want are inside the agent. So, if we make the agent rule (not the agent action!) :

$Text=values(children,"Tags").isort.format("\n");

You now have your scoped tag list.

Note, I think (based on a test just now) that values() currently doesn’t accept/evaluate find() as a form of group-scope designator. I’ve reported this issue so others don’t need to.

Wonderful. Makes perfect sense. This will help my work a ton. Thanks Mark.