Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
EI Twitter
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Guillaume Di Fatta
EI Twitter
Merge requests
!3
J aime le riz noir dans le poke bowl
Code
Review changes
Check out branch
Download
Patches
Plain diff
Expand sidebar
Merged
J aime le riz noir dans le poke bowl
salvador
into
main
Overview
0
Commits
1
Pipelines
0
Changes
2
Merged
J aime le riz noir dans le poke bowl
Guillaume Di Fatta
requested to merge
salvador
into
main
May 26, 2023
Overview
0
Commits
1
Pipelines
0
Changes
2
1
0
Merge request reports
Compare
main
main (base)
and
latest version
latest version
054778d3
1 commit,
May 26, 2023
2 files
+
137
−
0
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Files
2
src/old_coding_weeks/emotions_fct.py
0 → 100644
+
77
−
0
View file @ 054778d3
Edit in single-file editor
Open in Web IDE
"""
Ce programme permet d
'
analyser un dataframe de tweet (sentiments)
et de renvoyer des dataframes prêt à la visualisation
"""
import
math
import
pandas
as
pd
from
nrclex
import
NRCLex
from
textblob
import
TextBlob
def
emo_analysis
(
dataframe
):
"""
Analyse les sentiments présents dans les tweets fournis
Args:
dataframe (dataframe): dataframe avec les tweets
Returns:
list(dataframe,dataframe): listes de deux dataframes.
Le premier contient le traitement des emotions
et le second le traitement global
"""
# on ne garde que les textes
data_text
=
dataframe
[
'
full_text
'
]
# on crée une chaine de caractère contenant tous les textes concaténés
stack
=
data_text
.
str
.
cat
(
others
=
None
,
sep
=
None
,
na_rep
=
None
,
join
=
'
left
'
)
# on calcule les occurences des mots par émotion
scores_dict
=
NRCLex
(
stack
).
raw_emotion_scores
# si aucun mot n'a été trouvés pour une catégorie, on crée la case et on la met à zéro
for
word
in
[
'
fear
'
,
'
anger
'
,
'
joy
'
,
'
sadness
'
,
'
disgust
'
,
'
surprise
'
,
'
negative
'
,
'
positive
'
]:
if
word
not
in
scores_dict
:
scores_dict
[
word
]
=
0
# PARTIE 1 : EMOTIONS
# pour calculer la fréquence on a besoin d'un compteur des 6 émotions
emo_tot
=
scores_dict
[
'
fear
'
]
+
scores_dict
[
'
anger
'
]
+
scores_dict
[
'
joy
'
]
+
\
scores_dict
[
'
sadness
'
]
+
scores_dict
[
'
disgust
'
]
+
\
scores_dict
[
'
surprise
'
]
# on crée le dataframe des émotions
dataframe1
=
pd
.
DataFrame
({
'
Emotion
'
:
[
'
fear
'
,
'
anger
'
,
'
joy
'
,
'
sadness
'
,
'
disgust
'
,
'
surprise
'
],
'
Frequency
'
:
[
scores_dict
[
'
fear
'
]
/
emo_tot
,
scores_dict
[
'
anger
'
]
/
emo_tot
,
scores_dict
[
'
joy
'
]
/
emo_tot
,
scores_dict
[
'
sadness
'
]
/
emo_tot
,
scores_dict
[
'
disgust
'
]
/
emo_tot
,
scores_dict
[
'
surprise
'
]
/
emo_tot
]
})
# PARTIE 2 : OTHER DATA
global_tot
=
scores_dict
[
'
positive
'
]
+
scores_dict
[
'
negative
'
]
stack_tb
=
TextBlob
(
stack
)
fav
=
dataframe
[
'
favorite_count
'
]
fav_freq
=
fav
.
mean
()
/
7500000
alpha
=
2000000
# pour la fame, on fait une comparaison au tweet le plus liké : 7.5 millions
# on a donc un résultat entre 0 et 1
# on veut zoomer proche de zéro, et tasser proche de 1, en gardant des résultats entre 0 et 1
# on utilise la fonction f(x)=log(1+alpha*x)/log(1+alpha)
dataframe2
=
pd
.
DataFrame
({
'
Global
'
:
[
'
Positivity
'
,
'
Subjectivity
'
,
'
Fame
'
],
'
Frequency
'
:
[
scores_dict
[
'
positive
'
]
/
global_tot
,
stack_tb
.
sentiment
.
subjectivity
,
math
.
log
(
1
+
alpha
*
fav_freq
)
/
math
.
log
(
1
+
alpha
)]
})
return
([
dataframe1
,
dataframe2
])
Loading