EXPLORATORY DATA ANALYSIS


In [1]:
import matplotlib.pyplot as plt
from bs4 import BeautifulSoup
from pprint import pprint
import seaborn as sns
import pandas as pd
import numpy as np
import langdetect
import requests
import chardet
% matplotlib inline

LOAD DATA


In [2]:
df = pd.read_csv('data/161207_ZikaLabels.csv')
df.head()


Out[2]:
locale diagnosisRAW diagnosisCODED zika
0 pt_BR estava somente gripado Influenza False
1 pt_BR Me passou rem�dios para enchaqueca , soro e o ... Other False
2 pt_BR repouso e tomar agua e o remedio nimesulida!! Other False
3 pt_BR yes Other False
4 pt_BR 60% Other False

In [3]:
df[df.zika==True].head(100)


Out[3]:
locale diagnosisRAW diagnosisCODED zika
24 pt_BR zika Zika True
29 pt_BR Disse que foi zika, mas agora ta tudo bem e eu... Zika True
41 pt_BR Zika Zika True
46 pt_BR Zika v�rus Zika True
74 pt_BR Zika Zika True
78 pt_BR zica Zika True
80 pt_BR Eu estou com zika Zika True
81 pt_BR Zika Zika True
103 pt_BR Zika v�rus Zika True
106 pt_BR Que estou com zika v�rus Zika True
107 pt_BR Zica Zika True
146 pt_BR Foi o Zika Zika True
149 pt_BR Zica viros Zika True
154 pt_BR Zika v�rus Zika True
183 pt_BR Zika v�rus Zika True
188 pt_BR zica Zika True
208 pt_BR Zika Zika True
220 pt_BR Ele disse que era uma virose tranquila que daq... Zika True
251 pt_BR Paracetamol Zika True
296 pt_BR N�o foi nada era s� febre Zika True
301 pt_BR Q eu estava com virose Zika True
312 pt_BR Gripe Zika True
316 pt_BR N�o lembro Zika True
344 pt_BR sintomas de chikunguya Zika True
368 pt_BR Sinusite Zika True
386 pt_BR Dengue Zika True
394 pt_BR Chikungunya Zika True
397 pt_BR Endometriose Zika True
414 pt_BR Nada Zika True
418 pt_BR Nada Zika True
... ... ... ... ...
855 pt_BR Sinusite Zika True
876 pt_BR Falou que meu estado � muito grave,que eu tenh... Zika True
889 pt_BR N�o sei Zika True
896 pt_BR Ele disse que se meus sintomas piorar preciso ... Zika True
909 pt_BR yes Zika True
927 pt_BR Nada Zika True
939 pt_BR virose Zika True
952 pt_BR Eu fui mais a mulher tava enrolando l�.ai eu p... Zika True
963 pt_BR N�o sei explica Zika True
966 pt_BR Gripe Zika True
1003 pt_BR Ta Zika True
1017 pt_BR nenhum Zika True
1019 pt_BR gripe Zika True
1025 pt_BR nao sei Zika True
1033 pt_BR nao lembro Zika True
1073 pt_BR Que estou sem doen�a nenhuma __ Zika True
1095 pt_BR exame de sangue Zika True
1106 pt_BR S�o consequ�ncias do ciclo menstrual Zika True
1153 pt_BR Ouvido enflamado Zika True
1157 pt_BR Que s� tenho uma gripe Zika True
1171 pt_BR Cansa�o extremo Zika True
1199 pt_BR Ainda n�o sabe vai fazer enxame Zika True
1218 pt_BR n�o sei Zika True
1230 pt_BR Para ter cuidado com os restos de agua que fic... Zika True
1232 pt_BR zika Zika True
1233 pt_BR Dengue Zika True
1238 pt_BR Virus Zika True
1239 pt_BR Uma gripe forte Zika True
1254 pt_BR Que eu estou com nada Zika True
1258 pt_BR Sim Zika True

100 rows × 4 columns


In [4]:
df.shape


Out[4]:
(7125, 4)

CHECK NaNs


In [5]:
df.isnull().sum()


Out[5]:
locale             0
diagnosisRAW      71
diagnosisCODED    71
zika               0
dtype: int64

CHECK locale & diagnosisCODED


In [6]:
print df.locale.value_counts()
print '#'*35
print df.diagnosisCODED.value_counts()


pt_BR    7054
es_LA      46
en_US      20
fr_FR       5
Name: locale, dtype: int64
###################################
Other            4777
Influenza         597
Zika              478
Virus disease     383
Migraine          304
Dengue            271
Sinusitis         113
Common cold        97
Chikungunya        34
Name: diagnosisCODED, dtype: int64

CHECK CLASS BALANCE


In [7]:
plt.figure(figsize=(5,5))
df.zika.value_counts().plot(kind='bar',title='Zika Distribution')
plt.show()



In [8]:
df.diagnosisCODED.value_counts().plot(kind='bar')
plt.show()


CHECK ENCODING

3 different encodings detected.

Note to self: check to see if there are multiple languages


In [9]:
encoding_count = {}
for text in df.diagnosisRAW:
    try:
        encoding = chardet.detect(text)['encoding']
        if encoding in encoding_count.keys():
            encoding_count[encoding] += 1
        else:
            encoding_count[encoding] = 1
    except:
        pass

In [10]:
chardet.detect('é')


Out[10]:
{'confidence': 0.73, 'encoding': 'windows-1252'}

In [11]:
pprint(encoding_count)


{None: 2, 'ISO-8859-2': 1933, 'ascii': 4814, 'windows-1252': 305}

CHECK LANGUAGES

29 different languages detected!


In [12]:
# webscrap for language abbreviations
URL = 'http://www.lingoes.net/en/translator/langcode.htm'
response = requests.get(URL)
soup = BeautifulSoup(response.text,'lxml')
html_tag = 'td' #tags include, but not limited to ['table','tbody','td','tr']
html_text = soup.findAll(html_tag)
lang_table = [website_info.text.encode('utf-8') for website_info in html_text]
lang_abbrevs = np.array(lang_table).reshape(len(lang_table)/2,2) #view data
lang_dict = {}
for row in range(1,lang_abbrevs.shape[0]):
    key = lang_abbrevs[row,0]
    val = lang_abbrevs[row,1]
    lang_dict[key] = val

In [13]:
# frequency of languages utilized
lang_count = {}
for text in df.diagnosisRAW:
    try: 
        lang = langdetect.detect(text.decode('ISO-8859-2').encode('ASCII','ignore'))
        lang = lang.encode('ASCII')
        key = lang_dict[lang]
        if key in lang_count.keys():
            lang_count[key]+=1
        else:
            lang_count[key]=1
    except:
        pass

In [14]:
pprint(lang_count)


{'Afrikaans': 60,
 'Albanian': 313,
 'Catalan': 354,
 'Croatian': 107,
 'Czech': 5,
 'Danish': 13,
 'Dutch': 45,
 'English': 201,
 'Estonian': 103,
 'Finnish': 94,
 'French': 331,
 'German': 206,
 'Hungarian': 5,
 'Indonesian': 109,
 'Italian': 262,
 'Latvian': 68,
 'Lithuanian': 270,
 'Polish': 14,
 'Portuguese': 2910,
 'Romanian': 255,
 'Slovak': 28,
 'Slovenian': 82,
 'Spanish': 263,
 'Swahili': 181,
 'Swedish': 5,
 'Tagalog': 112,
 'Turkish': 66,
 'Vietnamese': 98,
 'Welsh': 12}