chat-miner provides lean parsers for every major platform transforming chats into dataframes. Artistic visualizations allow you to explore your data and create artwork from your chats.
Latest release including dependencies can be installed via PyPI:
pip install chat-miner
If you're interested in contributing, running the latest source code, or just like to build everything yourself:
git clone https://github.com/joweich/chat-miner.git cd chat-miner pip install -r requirements.txt
Have a look at the official tutorials for WhatsApp, Signal, Telegram, Facebook Messenger, or Instagram Chats to learn how to export chat logs for your platform.
Following code showcases the WhatsAppParser
module.
The usage of SignalParser
, TelegramJsonParser
, FacebookMessengerParser
, and InstagramJsonParser
follows the same pattern.
from chatminer.chatparsers import WhatsAppParser parser = WhatsAppParser(FILEPATH) parser.parse_file() df = parser.parsed_messages.get_df(as_pandas=True) # as_pandas=False returns polars dataframe
Note: Depending on your source system, Python requires to convert the filepath to a raw string.
import os FILEPATH = r"C:\Users\Username\chat.txt" # Windows FILEPATH = "/home/username/chat.txt" # Unix assert os.path.isfile(FILEPATH)
import chatminer.visualizations as vis import matplotlib.pyplot as plt
<p align="center"> <img src="examples/heatmap.svg"> </p>fig, ax = plt.subplots(2, 1, figsize=(9, 3)) ax[0] = vis.calendar_heatmap(df, year=2020, cmap='Oranges', ax=ax[0]) ax[1] = vis.calendar_heatmap(df, year=2021, linewidth=0, monthly_border=True, ax=ax[1])
<p align="center"> <img src="examples/sunburst.svg"> </p>fig, ax = plt.subplots(1, 2, figsize=(7, 3), subplot_kw={'projection': 'polar'}) ax[0] = vis.sunburst(df, highlight_max=True, isolines=[2500, 5000], isolines_relative=False, ax=ax[0]) ax[1] = vis.sunburst(df, highlight_max=False, isolines=[0.5, 1], color='C1', ax=ax[1])
<p align="center"> <img src="examples/wordcloud.svg"> </p>fig, ax = plt.subplots(figsize=(8, 3)) stopwords = ['these', 'are', 'stopwords'] kwargs={"background_color": "white", "width": 800, "height": 300, "max_words": 500} ax = vis.wordcloud(df, ax=ax, stopwords=stopwords, **kwargs)
<p align="center"> <img src="examples/radar.svg"> </p>if not vis.is_radar_registered(): vis.radar_factory(7, frame="polygon") fig, ax = plt.subplots(1, 2, figsize=(7, 3), subplot_kw={'projection': 'radar'}) ax[0] = vis.radar(df, ax=ax[0]) ax[1] = vis.radar(df, ax=ax[1], color='C1', alpha=0)
from chatminer.nlp import add_sentiment df_sentiment = add_sentiment(df)
<p align="center"> <img src="examples/nlp.svg"> </p>df_grouped = df_sentiment.groupby(['author', 'sentiment']).size().unstack(fill_value=0) ax = df_grouped.plot(kind='bar', stacked=True, figsize=(8, 3))
The CLI supports parsing chat logs into csv files. As of now, you can't create visualizations from the CLI directly.
Example usage:
$ chatminer -p whatsapp -i exportfile.txt -o output.csv
Usage guide:
usage: chatminer [-h] [-p {whatsapp,instagram,facebook,signal,telegram}] [-i INPUT] [-o OUTPUT]
options:
-h, --help
Show this help message and exit
-p {whatsapp,instagram,facebook,signal,telegram}, --parser {whatsapp,instagram,facebook,signal,telegram}
The platform from which the chats are imported
-i INPUT, --input INPUT
Input file to be processed
-o OUTPUT, --output OUTPUT
Output file for the results