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.
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
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.
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.
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
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).
Recommended Posts