Excel avec Python

Lorsque vous faites quelque chose sur un PC, l'utilisation d'Excel est inévitable. Imadoki, il peut y avoir des gens qui utilisent Lotus 1-2-3 en disant "Je déteste Microsoft". Certaines données de mesure, etc. sont enregistrées sur la feuille Excel. Si cela le devient, il est préférable de pouvoir lire les données du fichier Excel.

Est-ce Ikan en CSV?

Bien sûr, si vous pouvez vous permettre d'ouvrir le fichier dans Excel et de l'enregistrer au format CSV ou texte délimité par des tabulations, c'est très bien. Mais parfois cela arrive. Les résultats de l'expérience de 30 jours sont 30 fichiers. Dans ce cas, répétez l'opération d'ouverture de chaque fichier un par un et enregistrez-le à nouveau en CSV, ou écrivez Excel VBA qui fera l'opération automatiquement, hmm, c'est bien, Excel c'est Excel ..

Je ne peux pas dire cela, alors recherchez un package capable de lire et d'écrire des fichiers Excel fournis par conda. Dans des moments comme celui-ci, il n'y a pas d'autre choix que de google. Il semble y avoir un package appelé xlrd.

% anaconda search -t conda xlrd
Using Anaconda API: https://api.anaconda.org/
Run 'anaconda show <USER/PACKAGE>' to get more details:
Packages:
     Name                      |  Version | Package Types   | Platforms
     ------------------------- |   ------ | --------------- | ---------------
     RMG/xlrd                  |    0.9.4 | conda           | linux-64, win-32, win-64, linux-32, osx-64
     RahulJain/xlrd            |    1.0.0 | conda           | win-64
     aetrial/xlrd              |          | conda           | linux-64, osx-64
     anaconda/xlrd             |    1.0.0 | conda           | linux-64, win-32, win-64, linux-32, osx-64
     auto/xlrd                 |    0.8.0 | conda           | linux-64
                                          : http://www.python-excel.org/
     jetztcast/xlrd            |    0.9.3 | conda           | linux-64, osx-64
                                          : Library for developers to extract data from Microsoft Excel (tm) spreadsheet files
Found 6 packages
% anaconda show anaconda/xlrd
Using Anaconda API: https://api.anaconda.org/
Name:    xlrd
Summary:
Access:  public
Package Types:  conda
Versions:
   + 0.9.2
   + 0.9.4
   + 0.9.3
   + 0.9.0
   + 0.9.1
   + 1.0.0

To install this package with conda run:
     conda install --channel https://conda.anaconda.org/anaconda xlrd

Lire les données de la feuille Excel

Quand j'étais affecté à travailler seul et que je vivais à Kyoto, on disait souvent que "Kyoto ferait chaud", j'ai donc téléchargé les données quotidiennes de température maximale pour Tokyo et Kyoto en juillet 2016 auprès de l'Agence météorologique pour vérification. J'ai essayé de le résumer dans Excel.

20160831001.jpg

Il fait plus chaud à Kyoto rien qu'en le regardant. Vous n'avez pas à l'analyser avec Python. Mais jetons un second regard et calculons la température moyenne dans les deux villes.

import xlrd
import os.path
import numpy as np
xlfile = "test.xlsx"
if os.path.exists(xlfile):
    xls = xlrd.open_workbook(xlfile)
    sheet1 = xls.sheet_by_index(0)
    nrows = sheet1.nrows-1
    ncols = sheet1.ncols 
    data = np.zeros(ncols*nrows).reshape((nrows, ncols))
    for r in range(1, nrows+1):
        for c in range(0, ncols):
            data[r-1,c] = sheet1.cell(r,c).value
    tokyo = data[:,1].mean()
    kyoto = data[:,2].mean()
    msg = "Tokyo(mean): %.2f\nKyoto(mean): %.2f" % (tokyo, kyoto)
    print(msg)

Créez un tableau avec 0 contenu avec np.zeros () et transformez-le en un tableau à deux dimensions avec reshape (). Étant donné que la première ligne d'Excel est l'en-tête, soustrayez 1 de la valeur de sheet1.nrows. C'est un tableau numpy, donc si vous voulez trouver la moyenne, faites simplement mean (). En regardant les résultats, il fait encore plus chaud à Kyoto.

Tester

Au fait, est-il acceptable de décider que Kyoto est vraiment chaud rien qu'en comparant les valeurs moyennes? Après tout, il est préférable de tester s'il existe une différence statistiquement significative ici.

Tester la différence entre les valeurs moyennes est facile avec les statistiques de scipy.

import xlrd
import os.path
import numpy as np
from scipy import stats
xlfile = "test.xlsx"
if os.path.exists(xlfile):
    xls = xlrd.open_workbook(xlfile)
    sheet1 = xls.sheet_by_index(0)
    nrows = sheet1.nrows-1
    ncols = sheet1.ncols
    data = np.zeros(ncols*nrows).reshape((nrows, ncols))
    for r in range(1, nrows):
        for c in range(0, ncols):
            data[r-1,c] = sheet1.cell(r,c).value
    tokyo = data[:,1]
    kyoto = data[:,2]
    t,p = stats.ttest_ind(tokyo, kyoto, equal_var=False))
    msg = "p-value: %.5f" % p
    print(msg)

De plus, à la température de Tokyo et de Kyoto, lorsque l'on teste l'hypothèse que "Tokyo est plus bas", il s'agit d'un test unilatéral, mais l'option pour spécifier qu'il s'agit d'un test unilatéral est dans la méthode stats.ttest_ind (). Cela ne semble pas exister. Par conséquent, dans ce cas, il s'agit d'une alternative en montrant que la valeur t est une valeur négative et que la valeur p est de 0,025 ou moins.

Donc, quand je l'ai essayé, c'est devenu comme suit.

t: -4.09874
p-value: 0.00014

Dessin graphique

J'ai lu les données de la feuille Excel, alors faisons un graphique. En R, ggplot2 est utilisé, mais en Python dans l'environnement Anaconda, matplotlib peut être utilisé.

import xlrd
import os.path
import pandas as pd
import numpy as np
from scipy import stats
from matplotlib import pyplot as plt
%matplotlib inline 

xlfile = "test.xlsx"
if os.path.exists(xlfile):
    xls = xlrd.open_workbook(xlfile)
    sheet1 = xls.sheet_by_index(0)
    nrows = sheet1.nrows - 1
    ncols = sheet1.ncols
    data = np.zeros(ncols*nrows).reshape((nrows, ncols))
    date = []
    for r in range(1, nrows+1):
        for c in range(0, ncols):
            if c==0:
                d =  xlrd.xldate.xldate_as_datetime(sheet1.cell(r,c).value, xls.datemode)
                date.append(d)
            else:
                data[r-1,c] = sheet1.cell(r,c).value

    tokyo = data[:,1]
    kyoto = data[:,2]
    
    plt.plot(date, tokyo, label="Tokyo")
    plt.plot(date, kyoto, label="Kyoto")
    plt.legend()
    plt.show()

Lors du dessin d'un graphique linéaire, je souhaite utiliser la date lue à partir d'Excel pour l'axe X. Lorsque la date 2016/07/01 est affichée sur le fichier Excel, les données sont "41090". En regardant cela, je ne pense pas que ce soit 7/1, alors je vais le convertir. C'est la ligne suivante.

d =  xlrd.xldate.xldate_as_datetime(sheet1.cell(r,c).value, xls.datemode)

Maintenant, il est converti en type datetime et «41090» devient «2016-07-01 00:00:00». Donc, date.append (d) un par un dans la liste initialisée par date = [].

Par ailleurs, lors de l'impression () de la variable d, si vous utilisez d.strftime («% m /% d»), vous ne pouvez imprimer 7/1 que pour le mois / jour. Je peux le faire, mais lorsque j'ajoute la chaîne de caractères convertie à la date de la liste, une erreur se produit à plt.plot (), alors que dois-je faire?

C'est pourquoi le graphique que j'ai pu dessiner ressemble à ceci. Après tout, l'axe X est difficile à lire. Je veux faire quelque chose à ce sujet. Si vous regardez ce graphique, vous pouvez voir qu'il fait plus chaud à Kyoto sans avoir à le tester (c'est-à-dire que la visualisation des données est importante).

20160831003.png

Ce code temporel et ces données

Recommended Posts

Excel avec Python
Gérez Excel avec python
Utiliser Excel avec Python (1)
Utiliser Excel avec Python (2)
Exploitez Excel avec Python open pyxl
solveur> Lien> Résoudre le solveur Excel avec python
Statistiques avec python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
Jouons avec Excel avec Python [Débutant]
python commence par ()
avec syntaxe (Python)
Gérer les fichiers Excel CSV avec Python
Bingo avec python
Zundokokiyoshi avec python
Micro-ordinateur avec Python
Cast avec python
Dessinez Nozomi Sasaki dans Excel avec python
Convertir des données Excel en JSON avec python
[Easy Python] Lecture de fichiers Excel avec openpyxl
Créer un fichier Excel avec Python + matrice de similarité
Création de tableaux Excel avec Python [Table de gestion des progrès]
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Manipuler yaml avec python
Communication série avec python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Grattage avec Python + PhantomJS
Publier des tweets avec python
Conduisez WebDriver avec python
Utiliser mecab avec Python 3
[Python] Redirection avec CGIHTTPServer
Analyse vocale par python
Pensez à yaml avec python
Utiliser Kinesis avec Python
Premiers pas avec Python
Utiliser DynamoDB avec Python