Manage information on 21 journals using pandas DataFrame.
# Requirements:
# - Python 3.9+
# - numpy>=1.24.0, <2.0.0
# - pandas>=2.0.0, <2.2.0
"""
Example: Manage information on 21 journals using pandas DataFrame.
Purpose: Demonstrate data manipulation and preprocessing
Target: Intermediate
Execution time: 5-10 seconds
Dependencies: None
"""
import pandas as pd
import numpy as np
# Journal database construction
journals_data = {
'journal_name': [
'npj Computational Materials',
'Computational Materials Science',
'InfoMat',
'Digital Discovery',
'Nature Communications',
'Nature Materials',
'Advanced Materials',
'Acta Materialia',
'Materials Today',
'Machine Learning: Science and Technology',
'Journal of Chemical Information and Modeling',
'Journal of Cheminformatics',
'Energy Storage Materials',
'Advanced Energy Materials',
'ACS Applied Materials & Interfaces',
'ACS Central Science',
'Science Advances',
'Physical Review Materials',
'Communications Materials',
'Scientific Data',
'Materials Genome Engineering Advances'
],
'impact_factor': [9.0, 3.5, 22.0, 5.0, 16.6, 43.0, 29.4, 9.4, 21.0, 6.8,
5.6, 7.1, 20.4, 27.8, 9.5, 18.2, 13.6, 3.4, 7.5, 6.0, 2.5],
'review_time_months': [2.5, 3.0, 2.5, 1.5, 3.0, 4.5, 2.5, 3.0, 3.5, 2.5,
2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 3.0, 2.5, 2.5, 1.5, 2.5],
'open_access': ['Full OA', 'Hybrid', 'Full OA', 'Full OA', 'Full OA',
'Subscription', 'Hybrid', 'Hybrid', 'Subscription', 'Full OA',
'Hybrid', 'Full OA (Free)', 'Hybrid', 'Hybrid', 'Hybrid',
'Full OA', 'Full OA', 'Hybrid', 'Full OA', 'Full OA', 'Full OA'],
'category': ['MI Specialist', 'MI Specialist', 'MI Specialist', 'MI Specialist', 'Computational Materials', 'Computational Materials',
'Materials Data Science', 'Computational Materials', 'Materials Data Science', 'Related Fields',
'Materials Data Science', 'Materials Data Science', 'Related Fields', 'Related Fields',
'Related Fields', 'Related Fields', 'Related Fields', 'Computational Materials',
'Materials Data Science', 'Materials Data Science', 'MI Specialist']
}
df = pd.DataFrame(journals_data)
# Display data
print("=== 21 MI Journals Database ===")
print(df.to_string(index=False))
# Category statistics
print("\n=== Category Statistics ===")
print(df.groupby('category').agg({
'impact_factor': ['mean', 'median', 'max'],
'review_time_months': 'mean'
}).round(2))
# Top 5 by Impact Factor
print("\n=== Top 5 by Impact Factor ===")
print(df.nlargest(5, 'impact_factor')[['journal_name', 'impact_factor', 'category']])
# Fast review journals (within 2 months)
print("\n=== Fast Review Journals (β€2 months) ===")
fast_review = df[df['review_time_months'] <= 2.0]
print(fast_review[['journal_name', 'review_time_months', 'impact_factor']].sort_values('review_time_months'))
# Full OA with free publication
print("\n=== Full OA & Free Publication ===")
free_oa = df[df['open_access'] == 'Full OA (Free)']
print(free_oa[['journal_name', 'impact_factor']])
Visualize journal characteristics with scatter plot.
# Requirements:
# - Python 3.9+
# - matplotlib>=3.7.0
# - seaborn>=0.12.0
"""
Example: Visualize journal characteristics with scatter plot.
Purpose: Demonstrate data visualization techniques
Target: Beginner to Intermediate
Execution time: 2-5 seconds
Dependencies: None
"""
import matplotlib.pyplot as plt
import seaborn as sns
# Style setup
plt.style.use('seaborn-v0_8-darkgrid')
sns.set_palette("husl")
# Create figure
fig, ax = plt.subplots(figsize=(12, 8))
# Color by category
categories = df['category'].unique()
colors = sns.color_palette("husl", len(categories))
category_colors = {cat: color for cat, color in zip(categories, colors)}
for category in categories:
category_df = df[df['category'] == category]
ax.scatter(
category_df['review_time_months'],
category_df['impact_factor'],
label=category,
s=200,
alpha=0.6,
color=category_colors[category],
edgecolors='black',
linewidth=1.5
)
# Label journal names
for idx, row in df.iterrows():
# Abbreviate long names
name = row['journal_name']
if len(name) > 30:
name = name[:27] + '...'
ax.annotate(
name,
(row['review_time_months'], row['impact_factor']),
xytext=(5, 5),
textcoords='offset points',
fontsize=8,
alpha=0.7
)
# Graph decoration
ax.set_xlabel('Review Time (months)', fontsize=14, fontweight='bold')
ax.set_ylabel('Impact Factor', fontsize=14, fontweight='bold')
ax.set_title('21 MI Journals: Impact Factor vs Review Time', fontsize=16, fontweight='bold')
ax.legend(title='Category', fontsize=10, title_fontsize=11)
ax.grid(True, alpha=0.3)
# Highlight ideal zone (high IF & fast review)
ax.axhline(y=10, color='green', linestyle='--', alpha=0.3, label='IF β₯10')
ax.axvline(x=2.5, color='blue', linestyle='--', alpha=0.3, label='Review β€2.5 months')
plt.tight_layout()
plt.savefig('journals_if_vs_review_time.png', dpi=300, bbox_inches='tight')
plt.show()
# Statistical summary
print("=== Correlation Analysis ===")
correlation = df['impact_factor'].corr(df['review_time_months'])
print(f"Correlation between IF and review time: {correlation:.3f}")
print("\n=== Ideal Journals (IFβ₯10 AND reviewβ€2.5 months) ===")
ideal_journals = df[(df['impact_factor'] >= 10) & (df['review_time_months'] <= 2.5)]
print(ideal_journals[['journal_name', 'impact_factor', 'review_time_months']])
Match optimal journals based on research content.
# Requirements:
# - Python 3.9+
# - numpy>=1.24.0, <2.0.0
"""
Example: Match optimal journals based on research content.
Purpose: Demonstrate machine learning model training and evaluation
Target: Advanced
Execution time: 10-30 seconds
Dependencies: None
"""
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# Journal scope descriptions
journal_scopes = {
'npj Computational Materials': 'machine learning graph neural networks computational materials discovery DFT high-throughput',
'Computational Materials Science': 'computational materials modeling DFT phase diagrams materials databases',
'InfoMat': 'data-driven materials discovery artificial intelligence materials informatics experimental validation',
'Digital Discovery': 'automated discovery data science chemistry materials rapid screening',
'Nature Communications': 'high-impact interdisciplinary materials science broad significance',
'Nature Materials': 'breakthrough discoveries paradigm-shifting materials revolutionary',
'Advanced Materials': 'advanced functional materials high performance applications',
'Acta Materialia': 'structural materials metallurgy phase transformations mechanical properties',
'Materials Today': 'comprehensive reviews perspectives materials science',
'Machine Learning: Science and Technology': 'machine learning scientific applications transfer learning benchmarks',
'Journal of Chemical Information and Modeling': 'cheminformatics molecular property prediction QSAR drug design',
'Journal of Cheminformatics': 'cheminformatics software tools databases open source',
'Energy Storage Materials': 'battery materials energy storage experimental validation electrochemistry',
'Advanced Energy Materials': 'breakthrough energy materials solar cells batteries catalysts',
'ACS Applied Materials & Interfaces': 'applied materials interfaces surface properties applications',
'ACS Central Science': 'interdisciplinary chemistry machine learning methods broad impact',
'Science Advances': 'high-impact science interdisciplinary broad significance',
'Physical Review Materials': 'physics materials quantum materials density functional theory',
'Communications Materials': 'solid materials research experimental computational',
'Scientific Data': 'materials databases data publication data descriptors',
'Materials Genome Engineering Advances': 'materials genome high-throughput databases computational screening'
}
# User research description
def recommend_journals(research_description, top_n=5):
"""
Recommend optimal journals from research description
Parameters:
-----------
research_description : str
Research content description
top_n : int
Number of journals to recommend
Returns:
--------
recommendations : list
List of recommended journals (sorted by similarity)
"""
# Combine all texts
all_texts = [research_description] + list(journal_scopes.values())
journal_names = list(journal_scopes.keys())
# TF-IDF vectorization
vectorizer = TfidfVectorizer(stop_words='english')
tfidf_matrix = vectorizer.fit_transform(all_texts)
# Calculate cosine similarity
research_vector = tfidf_matrix[0:1]
journal_vectors = tfidf_matrix[1:]
similarities = cosine_similarity(research_vector, journal_vectors)[0]
# Sort by similarity
sorted_indices = np.argsort(similarities)[::-1][:top_n]
recommendations = []
for idx in sorted_indices:
journal_name = journal_names[idx]
similarity = similarities[idx]
journal_info = df[df['journal_name'] == journal_name].iloc[0]
recommendations.append({
'journal': journal_name,
'similarity': similarity,
'impact_factor': journal_info['impact_factor'],
'review_time': journal_info['review_time_months'],
'open_access': journal_info['open_access']
})
return recommendations
# Usage examples
research_examples = [
"We developed a graph neural network for predicting material properties with transfer learning",
"Our study presents a new battery cathode material discovered through machine learning and experimental validation",
"We created a large-scale materials database with DFT calculations for high-throughput screening",
"Our work uses machine learning to predict molecular properties for drug discovery"
]
for i, research in enumerate(research_examples, 1):
print(f"\n{'='*70}")
print(f"Research Example {i}: {research}")
print(f"{'='*70}")
recommendations = recommend_journals(research, top_n=3)
for rank, rec in enumerate(recommendations, 1):
print(f"\n{rank}. {rec['journal']}")
print(f" Similarity: {rec['similarity']:.3f}")
print(f" Impact Factor: {rec['impact_factor']}")
print(f" Review Time: {rec['review_time']} months")
print(f" OA: {rec['open_access']}")