pyevoc.analysis#
EVOC quadrant assignment, collocation and entity analysis, and temporal stability diagnostics.
PyEvoc analysis layer.
This subpackage contains EVOC quadrant assignment, compact HTML reports, dependency-based collocations, named-entity n-grams, temporal stability and quadrant-mobility analysis. Public objects are loaded lazily for documentation and faster package import.
- class pyevoc.analysis.CollocationEntityConfig(output_dir='evoc_outputs', entity_n=2, min_freq=3, min_docs=3, min_users=3, g2_alpha=0.001, caps_thr=0.6, min_caps_obs=20, include_collocations=True, include_entities=True, resolve_overlap=True, prefer_overlap='evidence', write_html=True, html_max_colloc_rows=60, html_max_entity_rows=60, html_max_overlap_rows=50, doc_col='doc_id', user_col='user_id', sentence_col='sentence_id', token_id_col='token_id', token_col='token', lemma_col='lemma', upos_col='upos', surface_col='token', head_col='head_token_id', dep_rel_col='dep_rel', colloc_relations=<factory>, false_entity_terms=<factory>, stop_words=<factory>, verbose=True)[source]#
Bases:
objectConfiguration for collocation and named-entity extraction.
- Parameters:
entity_n (int)
min_freq (int)
min_docs (int)
min_users (int)
g2_alpha (float)
caps_thr (float)
min_caps_obs (int)
include_collocations (bool)
include_entities (bool)
resolve_overlap (bool)
prefer_overlap (str)
write_html (bool)
html_max_colloc_rows (int)
html_max_entity_rows (int)
html_max_overlap_rows (int)
doc_col (str)
user_col (str)
sentence_col (str)
token_id_col (str)
token_col (str)
lemma_col (str)
upos_col (str)
surface_col (str)
head_col (str)
dep_rel_col (str)
verbose (bool)
- class pyevoc.analysis.QuadrantConfig(minimal_freq=2, round_digits=2, focal_upos=<factory>, quadrant_order=<factory>, diffusion_basis='user_penetration', term_col='term', upos_col='upos', term_type_col='term_type', n_docs_col='n_docs', n_posts_col='n_posts', n_users_col='n_users', r_pos_col='R_pos', r_struct_col='R_struct', salience_col='S', rank_col='Rank', freq_col='freq_for_quadrant', user_penetration_col='user_penetration', document_penetration_col='document_penetration', post_penetration_col='post_penetration', posts_per_user_col='posts_per_user', concreteness_score_col='concreteness_score', concreteness_label_col='concreteness_label', concreteness_in_lexicon_col='concreteness_in_lexicon', emoji_description_col='emoji_description', human_readable=True, generate_html=False, html_output_dir='evoc_outputs', html_top_n=20, html_max_width_px=950, verbose=True)[source]#
Bases:
objectConfiguration for EVOC quadrant assignment and optional HTML reporting.
- Parameters:
minimal_freq (int)
round_digits (int)
diffusion_basis (str)
term_col (str)
upos_col (str)
term_type_col (str)
n_docs_col (str)
n_posts_col (str)
n_users_col (str)
r_pos_col (str)
r_struct_col (str)
salience_col (str)
rank_col (str)
freq_col (str)
user_penetration_col (str)
document_penetration_col (str)
post_penetration_col (str)
posts_per_user_col (str)
concreteness_score_col (str)
concreteness_label_col (str)
concreteness_in_lexicon_col (str)
emoji_description_col (str)
human_readable (bool)
generate_html (bool)
html_top_n (int)
html_max_width_px (int)
verbose (bool)
- class pyevoc.analysis.TemporalStabilityConfig(n_periods=4, time_period_mode='equal_posts', custom_time_breaks=None, custom_time_cuts=None, period_labels=None, right=True, alpha=0.5, max_rank_value=5.0, use_users_for_frequency=True, focal_upos=<factory>, round_digits=2, diffusion_multiplier=100.0, time_col='time', doc_col='doc_id', user_col='user_id', term_col='term', upos_col='upos', r_pos_col='r_pos', r_str_col='r_str', expected_min_timestamp=None, expected_max_timestamp=None, warn_on_time_range_mismatch=False, output_dir='evoc_outputs', write_html_report=True, show_tables=False, verbose=True)[source]#
Bases:
objectConfiguration for temporal stability analysis.
- Parameters:
n_periods (int)
time_period_mode (str)
right (bool)
alpha (float)
max_rank_value (float)
use_users_for_frequency (bool)
round_digits (int)
diffusion_multiplier (float)
time_col (str)
doc_col (str)
user_col (str)
term_col (str)
upos_col (str)
r_pos_col (str)
r_str_col (str)
expected_min_timestamp (str | None)
expected_max_timestamp (str | None)
warn_on_time_range_mismatch (bool)
write_html_report (bool)
show_tables (bool)
verbose (bool)
- pyevoc.analysis.aggregate_named_entities(entities, text_col='text', type_col='type')[source]#
Backward-compatible utility for aggregating pre-extracted NER tables.
- pyevoc.analysis.assign_evoc_quadrants(term_stats_df, *, minimal_freq=2, focal_upos=None, quadrant_order=None, round_digits=2, diffusion_basis='user_penetration', generate_html=False, html_output_dir='evoc_outputs', html_top_n=20, html_max_width_px=950, config=None)[source]#
Assign EVOC quadrants using relative AFE and mean AOE thresholds.
- Parameters:
term_stats_df (DataFrame) – Term-level dataframe.
minimal_freq (int) – Minimal absolute frequency used to retain terms for quadrant assignment.
focal_upos (set[str] | None) – POS categories retained for EVOC assignment.
quadrant_order (list[str] | None) – Ordered quadrant labels.
round_digits (int) – Number of digits used for rounded threshold comparisons.
diffusion_basis (str) – Relative diffusion variable used to compute AFE thresholds. Supported values are
user_penetration,document_penetration,post_penetrationanddiffusion_penetration.generate_html (bool) – If True, write compact EVOC HTML reports by UPOS category.
html_output_dir (str | Path) – Directory where HTML files are written.
html_top_n (int) – Number of terms displayed in each quadrant card.
html_max_width_px (int) – Maximum width of the generated HTML page.
config (QuadrantConfig | None) – Optional complete configuration. If supplied, explicit keyword arguments above are ignored unless they are already encoded in config.
- Returns:
evoc_quadrants_df,quadrant_counts_dfandpos_thresholds_round_df.- Return type:
Notes
For backward compatibility, the function always returns three objects. When HTML reports are generated, their paths are stored in
evoc_quadrants_df.attrs["html_outputs"].
- pyevoc.analysis.assign_quadrants(term_stats_df, *, config=None)[source]#
Alias for
assign_evoc_quadrants.- Parameters:
term_stats_df (DataFrame)
config (QuadrantConfig | None)
- Return type:
tuple[DataFrame, DataFrame, DataFrame]
- pyevoc.analysis.build_evoc_html_for_upos(evoc_quadrants_df, upos, pos_thresholds_round_df, *, output_dir='evoc_outputs', top_n=20, max_width_px=950)[source]#
Write the compact EVOC HTML report for one UPOS category.
- pyevoc.analysis.build_time_periods(df, *, time_col='time', doc_col='doc_id', user_col='user_id', n_periods=4, mode='equal_posts', custom_time_breaks=None, custom_time_cuts=None, period_labels=None, right=True, time_range_reference_df=None, expected_min_timestamp=None, expected_max_timestamp=None, warn_on_time_range_mismatch=False)[source]#
Assign observations to temporal periods.
Supported modes#
customUse user-defined breaks or internal cuts.
equal_daysorequal_widthGenerate periods with approximately equal calendar duration.
equal_postsorequal_countGenerate periods with approximately equal numbers of unique posts.
quartersGenerate calendar-quarter periods.
- Parameters:
- Return type:
tuple[DataFrame, DataFrame, list[Timestamp], dict[str, object]]
- pyevoc.analysis.compute_period_quadrants(tokens_df, evoc_quadrants_df, pos_thresholds_round_df=None, *, alpha=0.5, max_rank_value=5.0, use_users_for_frequency=True, focal_upos=None, round_digits=2, diffusion_multiplier=100.0)[source]#
Reconstruct period-specific term quadrants.
- pyevoc.analysis.compute_stability_metrics(all_period_quadrants, n_periods)[source]#
Compute term-level and transition-level temporal stability metrics.
- pyevoc.analysis.compute_temporal_engagement(periodised_df, *, time_col='time', doc_col='doc_id', user_col='user_id')[source]#
Compute engagement diagnostics at post/user level.
- pyevoc.analysis.extract_collocations(tokens, *, config=None, **kwargs)[source]#
Backward-compatible wrapper returning only dependency collocations.
- Parameters:
tokens (DataFrame)
config (CollocationEntityConfig | None)
- Return type:
DataFrame
- pyevoc.analysis.extract_collocations_and_entities(tokens_df, *, config=None, output_dir=None, include_collocations=None, include_entities=None, entity_n=None, min_freq=None, min_docs=None, min_users=None, g2_alpha=None, resolve_overlap=None, prefer_overlap=None, write_html=None)[source]#
Extract collocations and/or named entities through one wrapper.
This is the recommended public API. The user can run only collocations, only named entities, or both.
- Parameters:
tokens_df (DataFrame)
config (CollocationEntityConfig | None)
include_collocations (bool | None)
include_entities (bool | None)
entity_n (int | None)
min_freq (int | None)
min_docs (int | None)
min_users (int | None)
g2_alpha (float | None)
resolve_overlap (bool | None)
prefer_overlap (str | None)
write_html (bool | None)
- Return type:
- pyevoc.analysis.extract_dependency_collocations(tokens_df, *, config=None, min_freq=None, min_docs=None, min_users=None, alpha=None)[source]#
Extract dependency-based collocations.
- Parameters:
tokens_df (DataFrame)
config (CollocationEntityConfig | None)
min_freq (int | None)
min_docs (int | None)
min_users (int | None)
alpha (float | None)
- Return type:
DataFrame
- pyevoc.analysis.extract_named_entity_ngrams(tokens_df, *, config=None, entity_n=None, min_freq=None, min_docs=None, min_users=None, alpha=None)[source]#
Extract contiguous PROPN named-entity n-grams.
- pyevoc.analysis.generate_evoc_html_reports(evoc_quadrants_df, pos_thresholds_round_df, *, output_dir='evoc_outputs', top_n=20, max_width_px=950, upos_values=None)[source]#
Generate compact EVOC HTML reports for the requested UPOS categories.
- pyevoc.analysis.quadrant_summary_by_pos(evoc_quadrants_df, *, upos_col='upos', quadrant_col='quadrant')[source]#
Return quadrant counts by UPOS category.
- pyevoc.analysis.quadrant_trajectories(period_terms, term_col='term', period_col='period', quadrant_col='quadrant')[source]#
Backward-compatible utility returning quadrant trajectories.
- pyevoc.analysis.run_temporal_stability_analysis(df, evoc_quadrants_df, pos_thresholds_round_df=None, *, n_periods=4, time_period_mode='equal_posts', custom_time_breaks=None, custom_time_cuts=None, period_labels=None, alpha=0.5, max_rank_value=5.0, use_users_for_frequency=True, focal_upos=None, round_digits=2, diffusion_multiplier=100.0, time_range_reference_df=None, count_reference_df=None, expected_min_timestamp=None, expected_max_timestamp=None, warn_on_time_range_mismatch=False, output_dir='evoc_outputs', write_html_report=True, show_tables=True, config=None)[source]#
Run the complete temporal stability analysis.
- Parameters:
df (DataFrame)
evoc_quadrants_df (DataFrame)
pos_thresholds_round_df (DataFrame | None)
n_periods (int)
time_period_mode (str)
alpha (float)
max_rank_value (float)
use_users_for_frequency (bool)
round_digits (int)
diffusion_multiplier (float)
time_range_reference_df (DataFrame | None)
count_reference_df (DataFrame | None)
expected_min_timestamp (object | None)
expected_max_timestamp (object | None)
warn_on_time_range_mismatch (bool)
write_html_report (bool)
show_tables (bool)
config (TemporalStabilityConfig | None)
- Return type:
- pyevoc.analysis.write_temporal_report_html(results, output_file, *, max_rows=80)[source]#
Write a compact HTML report for temporal stability analysis.
Modules#
- pyevoc.analysis.collocations_entities
CollocationEntityConfignormalise_annotation_columns()is_valid_term()prepare_tokens()score_phrase_table()extract_dependency_collocations()extract_named_entity_ngrams()compute_caps_evidence()resolve_ne_colloc_overlap()write_html_table()extract_collocations_and_entities()extract_collocations()aggregate_named_entities()
- pyevoc.analysis.quadrants
- pyevoc.analysis.temporal_stability
TemporalStabilityConfigformat_float()format_int()quadrant_entropy()gini_coefficient()safe_std()safe_spearman()quarter_label_from_timestamp()quarter_start_utc()next_quarter_start_utc()validate_time_range()normalise_threshold_table()build_threshold_display_table()build_time_periods()compute_period_quadrants()add_term_diffusion_summary()compute_stability_metrics()compute_temporal_engagement()dataframe_to_html_table()write_temporal_report_html()run_temporal_stability_analysis()quadrant_trajectories()