Maison  >  Article  >  développement back-end  >  Série pratique Python | Extraction et dessin réguliers de données

Série pratique Python | Extraction et dessin réguliers de données

Python当打之年
Python当打之年avant
2023-08-09 15:51:35627parcourir


Dans ce numéro, j'aimerais partager avec vous le premier article de "Python Practical Series"  : Extraction régulière de données et traçage, cette série concerne principalement de la pratique réelle des fans Les questions seront mises à jour continuellement à l'avenir J'espère que cela vous sera utile Si vous avez des questions ou des domaines à améliorer, vous pouvez envoyer un message privé à l'éditeur.
Description de la tâche : Prenez les données du fichier txt dans chaque langue pour dessiner un graphique linéaire La capture d'écran du fichier data.txt est la suivante (c'est trop long et je vais le couper directement. ) :

À première vue, cela ressemble à un fichier au format json, mais ce n'est pas en réalité Série pratique Python | Extraction et dessin réguliers de données

Série pratique Python | Extraction et dessin réguliers de données Entrons dans le vif du sujet :
?️‍? données

with open('data.txt') as f:
    data = f.read()
?️‍? 2. Extrayez régulièrement les informations entre accolades {}
datas = re.findall('({.*?})',data)
Série pratique Python | Extraction et dessin réguliers de données

Série pratique Python | Extraction et dessin réguliers de données

Le contenu est essentiellement la proportion de chaque date dans le langage de programmation. consiste à extraire des informations sur la date et des informations sur les données.


?️‍? 3. Extrayez le nom, faites attention à l'échappement (')
Série pratique Python | Extraction et dessin réguliers de données
re.findall('\'(.*)\'',datas[0])[0]
?️‍? les données
re.findall('(\d+(\.\d+)?)',datas[0])
Toutes les 4 données sont un groupe, alors faites simplement une boucle avec step=4 :
for i in range(0,len(datas_tmp),4):
    datas_f.append(float(datas_tmp[i+3][0]))
    dates_f.append(f'{datas_tmp[i][0]}-{datas_tmp[i+1][0]}-{datas_tmp[i+2][0]}')

?️‍?

# 处理数据
with open('data.txt') as f:
    data = f.read()
datas = re.findall('({.*?})',data)
names = []
dates_result = []
datas_result = []
for idx,dd in enumerate(datas):
    datas_f = []
    dates_f = []
    name = re.findall('\'(.*)\'',dd)[0]
    names.append(name)
    datas_tmp = re.findall('(\d+(\.\d+)?)',dd)
    for i in range(0,len(datas_tmp),4):
        datas_f.append(float(datas_tmp[i+3][0]))
        dates_f.append(f'{datas_tmp[i][0]}-{datas_tmp[i+1][0]}-{datas_tmp[i+2][0]}')
    datas_result.append(datas_f)
    dates_result.append(dates_f)


?️‍? 6. 绘图

绘图部分直接用matplotlib的plot循环绘制即可,代码如下:

# 绘图
plt.figure(figsize=(20, 10), dpi=100)
for i in range(len(names)):
    plt.plot(dates_result[i], datas_result[i], label=names[i])
ax = plt.gca()
ax.xaxis.set_major_locator(ticker.MultipleLocator(20))
plt.ylabel("Ratings(%)", fontdict={'size': 16})
plt.title("TIOBE Programming Community Index", fontdict={'size': 20})
plt.legend(loc='best')
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()

Série pratique Python | Extraction et dessin réguliers de données


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer