Je réorganise mes ressources pour le Python

Mon éditorial

Me voilà qui continue cette expérience étrange et rafraîchissante de faire de la recherche sur le changement technologique en même temps que je fais du changement technologique en moi-même, c’est-à-dire en apprenant le Python, une langue de programmation à la mode dans les endroits fréquentés par des types comme moi. Ces endroits sont des universités, des conférences, des bibliothèques etc. Vous voyez le genre. Durant les deux derniers jours j’ai déjà découvert qu’en appréhendant cette technologie nouvelle (nouvelle pour moi, je veux dire), j’avais commencé, intuitivement, par utiliser le Python pour qu’il fasse exactement la même chose que fait Excel ou mon logiciel d’analyse statistique, Wizard for MacOS. Je m’étais donc appliqué à bâtir une base de données comme je la vois, donc comme une table. En Python, les données sont organisées comme structures logiques et non pas graphiques, donc mes efforts avaient été vains dans une large mesure. Je commettais beaucoup d’erreurs, parfois stupides. J’avais besoin d’un nombre surprenant d’essais pour acquérir une capacité acceptablement intuitive de distinguer entre les structures logiques validées et celles qui ne le sont pas. Ça m’avait aussi pris un temps déconcertement long pour faire la distinction entre des structures logiques avec des mots et des symboles dedans – ces soi-disant « strings » – et les structures qui contiennent des nombres. Pour les non-initiés, une série de noms en Excel, ça se présente comme une colonne ou bien un vers, donc comme :

Mot#1
Mot#2
Mot#3

   …ou bien comme

Mot#1 Mot#2 Mot#3

…tandis qu’en Python ce serait plutôt :

>>> Mots=[‘Mot#1’, ‘Mot#2’, ‘Mot#3’]

… donc chaque mot entre des apostrophes (qui sont des marques de citation de base en anglais), les mots séparés par des virgules et tout ça compris entre des parenthèses carrées. C’est précisement ce qu’on appelle un « string ».

Si je veux organiser des valeurs numériques, la façon que j’ai déjà apprise pour les organiser est une série entre des parenthèses rondes :

>>> Nombres=(23, 34, 45, 56)

Comme vous pouvez le constater, le Python requiert un ordre logique : valeur logique ou numérique en position no. 1, ensuite celle en position no. 2 et ainsi de suite.

Bref, en un premier temps, j’avais mis beaucoup d’effort pour insérer de force cette nouvelle technologie dans une vieille structure de mes habitudes, et ce n’est qu’ensuite que j’ai commencé à apprendre des nouvelles habitudes. Tout ça se reflétait dans une efficacité tout ce qu’il y a de plus lamentable. J’avançais à un pas d’escargot. Oui, je sais, un escargot, ça n’a pas de pattes, donc ça ne peut pas faire de pas, mais « pas d’escargot » ça sonne bien.

Hier soir, tout en m’entraînant à développer une compréhension aussi intuitive que possible de ces structures logiques de Python, j’avais commencé à faire autre chose : engranger des données organisées façon Python. Les tables que je télécharge du site de la Banque Mondiale sont organisées en pays et années d’observation, pays en colonne, années dans un vers en haut. Je sens intuitivement qu’une fois que je crée un string des pays et je le sauve dans un fichier Python à part, il me servira plusieurs fois pour apprendre des nouveaux trucs ou tout simplement pour faire des analyses plus tard, lorsque j’aurai appris comment utiliser se string des pays. Avec deux tests rapides pour la grammaire et avec deux petits réajustements, ça m’a pris 26 minutes de créer le fichier « countries_WB.py », qui contient un string nommé « countries », qui, à son tour, contient la même liste des pays et régions, en anglais, que vous pouvez trouver dans les tables Excel de la Banque Mondiale.

Ce que je viens de faire consiste à réorganiser mes ressources de façon à les rendre plus accessibles à la nouvelle technologie que j’apprends. Pour le moment, je l’avais fait manuellement, en copiant la table des pays en Excel dans mon éditeur Word, ensuite en la convertissant en texte, copiant ce texte dans le compilateur Python et organisant ces noms des pays en un string « countries=[‘Pays#1’, ‘Pays#2’, etc.]. Je sais, je sais, je pourrais télécharger directement, du site de la Banque Mondiale, un fichier en format CSV et le déballer avec les commandes Python du module « csv ». Oui, j’aurai pu le faire si je savais exactement comment le faire et ça, c’est encore de l’avenir pour moi. Je faisais donc face à un choix : organiser mes ressources pour la nouvelle technologie en une manière bien grossière et improductive ou bien attendre que j’apprenne une façon plus rapide et élégante d’accomplir la même tâche. J’avais choisi la première option.

Voilà donc que je peux généraliser mes observations au sujet de mon propre comportement dans cette expérience sur moi-même. En présence d’une technologie nouvelle, j’ai développé comme trois modèles de comportement :

Modèle #1 : j’essaie d’utiliser la nouvelle technologie (Python) pour accomplir les mêmes résultats que j’accomplissais avec la technologie précédente (Excel, Wizard). Mon choix consiste surtout à décider combien de temps et d’énergie je vais consacrer à essayer d’appliquer la logique ancienne à la technologie nouvelle.

Modèle #2 : Je me suis rendu compte que les vieilles habitudes ne marchent pas et je commence à en apprendre des nouvelles. Mon choix se fait à deux niveaux. Premièrement, je fais des petites décisions instantanées à propos du prochain pas d’apprentissage à faire. Sur un deuxième niveau, je décide combien de temps et d’énergie consacrer à l’apprentissage des compétences requises par la technologie nouvelle. C’est un choix fait en vue de bénéfices futurs incertains.

Modèle #3 : Je sais que l’une des compétences de base dans l’univers de Python consiste à organiser mes ressources de base – l’information – en des structures spécifiques. Je décide de faire un premier pas dans cette direction et je consacre environ une demi-heure à créer un string des pays et régions, exactement conforme à l’ordre utilisé dans les données de la Banque Mondiale. Je me souviens d’avoir fait deux choix distincts : est-ce que je m’y prends du tout et quel type d’information organiser en premier. J’avais pris ces deux décision en sachant que j’utilise une technique qui est loin d’être optimale dans l’univers de cette nouvelle technologie, ainsi que je savais que je ne sais pas du tout comment je vais utiliser ce string des pays dans l’avenir (je n’y suis pas encore arrivé dans mon apprentissage de Python).

A propos, juste pour que vous ayez du solide après avoir lu cette mise à jour : en-dessous du texte, j’ai copié ce string des pays exactement comme je l’avais écrit manuellement. Comme ça se présente maintenant, ça devrait être directement utilisable en Python. Vous pouvez le copier et mettre dans un programme. Côté syntaxe, c’est correct : je l’avais testé avec la commande « list(countries) » et Python avait rendu une liste à partir du string sans gueuler « erreur ! ». A cette occasion, j’ai appris que le dépositoire des fichiers sur mon site https://discoversocialsciences.com , dans l’environnement Word Press, n’accepte pas des fichiers en Python. Je voulais y télécharger et stocker le fichier « countries_WB.py » et le site a rendu erreur. Une petite leçon à propos de la compatibilité des technologies.

Maintenant, j’applique ces nouvelles connaissances, tout ce qu’il y a de plus empirique, pour faire une généralisation théorique. Si nous considérons deux technologies, une ancienne TC0 et une nouvelle TC1, la transition de TC0 à TC1 est liée, entre autres, à trois phénomènes : une substitution fonctionnelle complexe, un coût d’apprentissage CA(TC0 ; TC1) et un coût de réorganisation de ressources CR(TC0 ; TC1). Le premier phénomène, celui de substitution complexe, peut être représenté comme une relation entre deux ensembles. Il y a un ensemble F(TC0) = {f1, f2, …, fi} des fonctions remplies par la technologie TC0, et par analogie, je définis un ensemble F(TC1) = {g1, g2, …, gk} des fonctions remplies par la technologie TC1. Maintenant, avant que je passe plus loin, un petit mon d’explication à propos de la présentation : j’écris ce contenu-ci en sachant que je vais le copier dans mes deux blogs, celui en Word Press à https://discoversocialsciences.com , ainsi que celui dans l’environnement Blogger, à l’addresse https://researchsocialsci.blogspot.com . Tous les deux ne sont pas vraiment ami-ami avec l’éditeur d’équation de MS Word, donc j’écris les équations avec les symboles du clavier. Je n’ai pu trouver aucun clavier qui permet de taper directement les opérateurs mathématiques, y compris les opérateurs d’ensembles. J’adopte donc une convention simplifiée où les symboles +, -, * et / correspondent, respectivement, à la somme, différence, produit et quotient des ensembles.

La relation de substitution complexe entre technologies veut dire, qu’avec un niveau donné de compétences de la part d’utilisateurs, les ensembles F(TC0) = {f1, f2, …, fi} et F(TC1) = {g1, g2, …, gk} ont une partie commune, ou F(TC0)*F(TC1), qui correspond aux fonctions remplies par les deux technologies. Je définis le degré de substitution entre les deux technologies comme le quotient complexe : SU(TC0 ; TC1) = [F(TC0)*F(TC1)] / [ F(TC0) + F(TC1)]. Je pose formellement l’hypothèse que le coût d’apprentissage CA(TC0 ; TC1) ainsi que le  un coût de réorganisation de ressources CR(TC0 ; TC1) sont tous les deux inversement proportionnels à la valeur du quotient complexe SU(TC0 ; TC1) ou :

CA(TC0 ; TC1) = a1* SU(TC0 ; TC1)

CR(TC0 ; TC1) = a2* SU(TC0 ; TC1)

a1 > 0 ; a2 > 0

Je me dis, quand je regarde cette structure logique, qu’elle risque d’être un peu lourde avec beaucoup de technologies qui se substituent d’une façon complexe et avec beaucoup d’attributs fonctionnels. Je vois donc une façon alternative de représenter la même proposition, avec l’aide de la distance Euclidienne. Vous savez, ce truc basé sur le théorème de Pythagore : si on a deux points A et B, chacun défini par deux coordonnées x et y, on peut calculer la distance entre ces deux points comme d = ((x(A) – x(B))2 + (y(A) – y(B))2)0,5 . Maintenant, je remplace les points A et B par mes technologies TC0 et TC1, TCce que vous voulez, par ailleurs, et je dote chacune avec deux attributs mesurables x et y. Je peux alors calculer la distance Euclidienne « d » dans une paire donnée de technologies. Comme je suis toujours conscient que je devrais apprendre le Python, voilà, ci-dessous, je présente le fruit de trois jours d’apprentissage : un petit calculateur de distance Euclidienne en Python 3.6.2 :

# je commence par définir les coordonnées des trois technologies TC0, TC1 et TC2

>>> TC0=(12, 45)

>>> TC1=(34, 15)

>>> TC2=(17, 30)

>>> import math      #j’importe le module des fonctions mathématiques, juste pour me faciliter la tâche

# je définis mon calculateur pour la première paire de technologies

>>> for n in range(0, len(TC0)):

            for m in range(0, len(TC1)):

                       print(math.sqrt((math.pow(34-12, 2)+math.pow(15-45, 2))))

37.20215047547655

37.20215047547655

37.20215047547655

37.20215047547655

# je n’ai pas la moindre idée pourquoi le compilateur a affiché le même résultat quatre fois ; voilà un défi potentiel

#je répète avec l’autre paire de technologies

>>> for n in range(0, len(TC0)):

            for m in range(0, len(TC2)):

                       print(math.sqrt((math.pow(17 – 12, 2) + math.pow(30 – 15, 2))))

15.811388300841896

15.811388300841896

15.811388300841896

15.811388300841896

#voilà encore une fois le même résultat quatre fois ; amusant

Bon, je commence à ressentir de la fatigue intellectuelle. Temps de terminer pour aujourd’hui. A bientôt.

Comme promis, voilà le string des pays pour Python, conforme à la structure utilisée par la Banque Mondiale :

countries=[‘Aruba’,‘Afghanistan’,‘Angola’, ‘Albania’, ‘Andorra’, ‘Arab World’, ‘United Arab Emirates’, ‘Argentina’, ‘Armenia’, ‘American Samoa’, ‘Antigua and Barbuda’, ‘Australia’, ‘Austria’, ‘Azerbaijan’, ‘Burundi’, ‘Belgium’, ‘Benin’, ‘Burkina Faso’, ‘Bangladesh’, ‘Bulgaria’, ‘Bahrain’, ‘Bahamas The’, ‘Bosnia and Herzegovina’, ‘Belarus’, ‘Belize’, ‘Bermuda’, ‘Bolivia’, ‘Brazil’, ‘Barbados’, ‘Brunei Darussalam’, ‘Bhutan’, ‘Botswana’, ‘Central African Republic’, ‘Canada’, ‘Central Europe and the Baltics’, ‘Switzerland’, ‘Channel Islands’, ‘Chile’, ‘China’, ‘Cote d_Ivoire’, ‘Cameroon’, ‘Congo, Dem. Rep.’, ‘Congo, Rep.’, ‘Colombia’, ‘Comoros’, ‘Cabo Verde’, ‘Costa Rica’, ‘Caribbean small states’, ‘Cuba’,’Curacao’, ‘Cayman Islands’, ‘Cyprus’, ‘Czech Republic’, ‘Germany’, ‘Djibouti’, ‘Dominica’, ‘Denmark’, ‘Dominican Republic’, ‘Algeria’, ‘East Asia & Pacific (excluding high income)’, ‘Early-demographic dividend’, ‘East Asia & Pacific’, ‘Europe & Central Asia (excluding high income)’, ‘Europe & Central Asia’, ‘Ecuador’, ‘Egypt, Arab Rep.’, ‘Euro area’, ‘Eritrea’, ‘Spain’, ‘Estonia’, ‘Ethiopia’, ‘European Union’, ‘Fragile and conflict affected situations’, ‘Finland’, ‘Fiji’, ‘France’, ‘Faroe Islands’, ‘Micronesia, Fed. Sts.’, ‘Gabon’, ‘United Kingdom’, ‘Georgia’, ‘Ghana’, ‘Gibraltar’, ‘Guinea’, ‘Gambia, The’, ‘Guinea-Bissau’, ‘Equatorial Guinea’, ‘Greece’, ‘Grenada’, ‘Greenland’, ‘Guatemala’, ‘Guam’, ‘Guyana’, ‘High income’, ‘Hong Kong SAR, China’, ‘Honduras’, ‘Heavily indebted poor countries (HIPC)’, ‘Croatia’, ‘Haiti’, ‘Hungary’, ‘IBRD only’, ‘IDA & IBRD total’, ‘IDA total’, ‘IDA blend’, ‘Indonesia’, ‘IDA only’, ‘Isle of Man’, ‘India’, ‘Not classified’, ‘Ireland’, ‘Iran, Islamic Rep.’, ‘Iraq’, ‘Iceland’, ‘Israel’, ‘Italy’, ‘Jamaica’, ‘Jordan’, ‘Japan’, ‘Kazakhstan’, ‘Kenya’, ‘Kyrgyz Republic’, ‘Cambodia’, ‘Kiribati’, ‘St. Kitts and Nevis’, ‘Korea, Rep.’, ‘Kuwait’, ‘Latin America & Caribbean (excluding high income)’, ‘Lao PDR’, ‘Lebanon’, ‘Liberia’, ‘Libya’, ‘St. Lucia’, ‘Latin America & Caribbean’, ‘Least developed countries: UN classification’, ‘Low income’, ‘Liechtenstein’, ‘Sri Lanka’, ‘Lower middle income’, ‘Low & middle income’, ‘Lesotho’, ‘Late-demographic dividend’, ‘Lithuania’, ‘Luxembourg’, ‘Latvia’, ‘Macao SAR, China’, ‘St. Martin (French part)’, ‘Morocco’, ‘Monaco’, ‘Moldova’, ‘Madagascar’, ‘Maldives’, ‘Middle East & North Africa’, ‘Mexico’, ‘Marshall Islands’, ‘Middle income’, ‘Macedonia, FYR’, ‘Mali’, ‘Malta’, ‘Myanmar’, ‘Middle East & North Africa (excluding high income)’, ‘Montenegro’, ‘Mongolia’, ‘Northern Mariana Islands’, ‘Mozambique’, ‘Mauritania’, ‘Mauritius’, ‘Malawi’, ‘Malaysia’, ‘North America’, ‘Namibia’, ‘New Caledonia’, ‘Niger’, ‘Nigeria’, ‘Nicaragua’, ‘Netherlands’, ‘Norway’, ‘Nepal’, ‘Nauru’, ‘New Zealand’, ‘OECD members’, ‘Oman’, ‘Other small states’, ‘Pakistan’, ‘Panama’, ‘Peru’, ‘Philippines’, ‘Palau’, ‘Papua New Guinea’, ‘Poland’, ‘Pre-demographic dividend’, ‘Puerto Rico’, ‘Korea, Dem. People’s Rep.’, ‘Portugal’, ‘Paraguay’, ‘West Bank and Gaza’, ‘Pacific island small states’, ‘Post-demographic dividend’, ‘French Polynesia’, ‘Qatar’, ‘Romania’, ‘Russian Federation’, ‘Rwanda’, ‘South Asia’, ‘Saudi Arabia’, ‘Sudan’, ‘Senegal’, ‘Singapore’, ‘Solomon Islands’, ‘Sierra Leone’, ‘El Salvador’, ‘San Marino’, ‘Somalia’, ‘Serbia’, ‘Sub-Saharan Africa (excluding high income)’, ‘South Sudan’, ‘Sub-Saharan Africa’, ‘Small states’, ‘Sao Tome and Principe’, ‘Suriname’, ‘Slovak Republic’, ‘Slovenia’, ‘Sweden’, ‘Swaziland’, ‘Sint Maarten (Dutch part)’, ‘Seychelles’, ‘Syrian Arab Republic’, ‘Turks and Caicos Islands’, ‘Chad’, ‘East Asia & Pacific (IDA & IBRD countries)’, ‘Europe & Central Asia (IDA & IBRD countries)’, ‘Togo’, ‘Thailand’, ‘Tajikistan’, ‘Turkmenistan’, ‘Latin America & the Caribbean (IDA & IBRD countries)’, ‘Timor-Leste’, ‘Middle East & North Africa (IDA & IBRD countries)’, ‘Tonga’, ‘South Asia (IDA & IBRD)’, ‘Sub-Saharan Africa (IDA & IBRD countries)’, ‘Trinidad and Tobago’, ‘Tunisia’, ‘Turkey’, ‘Tuvalu’, ‘Tanzania’, ‘Uganda’, ‘Ukraine’, ‘Upper middle income’, ‘Uruguay’, ‘United States’, ‘Uzbekistan’, ‘St. Vincent and the Grenadines’, ‘Venezuela, RB’, ‘British Virgin Islands’, ‘Virgin Islands (U.S.)’, ‘Vietnam’, ‘Vanuatu’, ‘World’, ‘Samoa’, ‘Kosovo’, ‘Yemen, Rep.’, ‘South Africa’, ‘Zambia’, ‘Zimbabwe’]

Leave a Reply