scikit learn output metrics.classification_report into CSV/tab-delimited format
<p>I'm doing a multiclass text classification in Scikit-Learn. The dataset is being trained using the Multinomial Naive Bayes classifier having hundreds of labels. Here's an extract from the Scikit Learn script for fitting the MNB model</p>

<pre><code>from __future__ import print_function

# Read **`file.csv`** into a pandas DataFrame

import pandas as pd
path = 'data/file.csv'
merged = pd.read_csv(path, error_bad_lines=False, low_memory=False)

# define X and y using the original DataFrame
X = merged.text
y = merged.grid

# split X and y into training and testing sets;
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)

# import and instantiate CountVectorizer
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()

# create document-term matrices using CountVectorizer
X_train_dtm = vect.fit_transform(X_train)
X_test_dtm = vect.transform(X_test)

# import and instantiate MultinomialNB
from sklearn.naive_bayes import MultinomialNB
nb = MultinomialNB()

# fit a Multinomial Naive Bayes model
nb.fit(X_train_dtm, y_train)

# make class predictions
y_pred_class = nb.predict(X_test_dtm)

# generate classification report
from sklearn import metrics
print(metrics.classification_report(y_test, y_pred_class))
</code></pre>

<p>And a simplified output of the metrics.classification_report on command line screen looks like this:</p>

<pre><code>             precision  recall   f1-score   support
     12       0.84      0.48      0.61      2843
     13       0.00      0.00      0.00        69
     15       1.00      0.19      0.32       232
     16       0.75      0.02      0.05       965
     33       1.00      0.04      0.07       155
      4       0.59      0.34      0.43      5600
     41       0.63      0.49      0.55      6218
     42       0.00      0.00      0.00       102
     49       0.00      0.00      0.00        11
      5       0.90      0.06      0.12      2010
     50       0.00      0.00      0.00         5
     51       0.96      0.07      0.13      1267
     58       1.00      0.01      0.02       180
     59       0.37      0.80      0.51      8127
      7       0.91      0.05      0.10       579
      8       0.50      0.56      0.53      7555      
    avg/total 0.59      0.48      0.45     35919
</code></pre>

<p>I was wondering if there was any way to get the report output into a standard csv file with regular column headers</p>

<p>When I send the command line output into a csv file or try to copy/paste the screen output into a spreadsheet - Openoffice Calc or Excel, It lumps the results in one column. Looking like this:</p>

<p><a href="http://i.stack.imgur.com/LjVby.jpg" rel="nofollow"><img src="http://i.stack.imgur.com/LjVby.jpg" alt="enter image description here"></a></p>

<p>Help appreciated. Thanks!</p>

<p>The way I have always solved output problems is like what I've mentioned in my previous comment, I've converted my output to a DataFrame. Not only is it incredibly easy to send to files (<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html" rel="nofollow">see here</a>), but <a href="http://pandas.pydata.org/" rel="nofollow">Pandas</a> is really easy to manipulate the data structure. The other way I have solved this is writing the output line-by-line using <a href="https://docs.python.org/2/library/csv.html" rel="nofollow">CSV</a> and specifically using <code>writerow</code>.</p>

<p>If you manage to get the output into a dataframe it would be</p>

<pre><code>dataframe_name_here.to_csv()
</code></pre>

<p>or if using CSV it would be something like the example they provide in the CSV link.</p>

python text machine-learning scikit-learn classification