Base de donnée de l’INSEE

Un peu de Datamining aujourd’hui, quelque chose de très court, mais qui sera sans doute utile à certain.

Cela concerne la lecture de fichier dBase, car  sachons le l’INSEE met à disposition un certain nombre de données au format dBase.

Le premier réflexe face à ce genre de fichier serait de l’ouvrir avec un tableur et d’en sortir directement les valeurs nécessaires. Malheureusement, deux problèmes se posent, la lenteur du programme face à des fichiers de très grande taille,  et la limite des tableurs en nombre de lignes.

Pourtant, il existe une méthode bien plus rapide (et bien plus fun !), l’utilisation d’un script, pour lire ces fichiers volumineux comme on l’entend.

Pour cela j’ai choisi le langage PHP. Cela faisait longtemps que je n’avais pas joué avec et puis en plus il dispose déjà de fonctions adaptées à la lecture de fichier dbase.

Voici donc un petit script qui va extraire les catégories socioprofessionnelles (niveau 1) pour un échantillon de 130 000 valeurs :

$CODE[1] = "Agriculteurs exploitants";
$CODE[2] = "Artisans, commerçants et chefs d'entreprise";
$CODE[3] = "Cadres et professions intellectuelles supérieures";
$CODE[4] = "Professions Intermédiaires";
$CODE[5] = "Employés";
$CODE[6] = "Ouvriers";
$CODE[7] = "Retraités";
$CODE[8] = "Autres personnes sans activité professionnelle";

function percent($v,$t) {
 return round((( $v / $t ) * 100),2);
 }

$db = dbase_open('epcvhf10_in109604.dbf', 0);
if ($db) {
echo("lecture des données possible\n");
$record_numbers = dbase_numrecords($db);
for ($i = 1; $i <= $record_numbers; $i++) {
$row = dbase_get_record_with_names($db, $i);
$cs = trim($row['CS']);
$occupation = trim($row['OCCUPA']);
$age = trim($row['AGE']);
if ( ($occupation == 5 ) or ( $occupation == 6 ) ) $cs = 7;
if ( $age > 14 )
if ($cs != 99 && $cs != '' )
{
$vn1 = substr($cs, 0 , 1 );
if (!isset($n1[$vn1]))  $n1[$vn1] = 0;
$n1[$vn1[0]]++;
$population++;
}
}
dbase_close($db);
foreach ( $n1 as $clef => $nombre )
{
echo percent($nombre ,$population) . " : " . $CODE[$clef] . "\n";
}

Une autre fonction interessant dbase_get_header_info($db), permet de récupérer les champs disponibles dans la base.
Voici le lien des données utilisées : http://www.insee.fr/fr/themes/detail.asp?reg_id=0&ref_id=fd-epcvhf10&page=fichiers_detail/epcvhf10/telechargement.htm

Publicités

Streaming Video avec PHP

Je dispose d’un serveur Apache tout ce qu’il y a de plus classique. Loin de chez moi, il m’arrive de l’utiliser pour visionner certaines de mes vidéos.
À cause d’un faible débit, il est souvent nécessaire de télécharger toute la vidéo pour espérer la voir sans blocage.

Pour résoudre le problème, je viens de mettre au point un petit fichier php qui va pouvoir convertir à la volet les fichiers vidéo.
Comme toujours, je ne ponds pas de code sécurisé, mais du code utilitaire, vous allez voir, c’est du gruyère 🙂

Code source :

<?php
$FPS = 15;
$SCALE = « 640:480 »;

$FICHIER = $_GET[‘fichier’];

$COMMANDE= « mencoder \ »$FICHIER\ » -ofps $FPS -ovc lavc -lavcopts vcodec=flv:acodec=mp3 -vf scale=$SCALE -ffourcc FLV1 -oac mp3lame -o /dev/stdout -really-quiet -noskiplimit »;

if (!($p=popen(« $COMMANDE », »r »)))
{
return 126;
} else
{
header(« Expires: Mon, 26 Jul 1997 05:00:00 GMT »);
header(« Last-Modified:  » . gmdate(« D, d M Y H:i:s ») .  » GMT »);
header(« Cache-Control: no-store, no-cache, must-revalidate »);
header(« Cache-Control: post-check=0, pre-check=0 », false);
header(« Pragma: no-cache »);
header(« Content-Type: video/x-flv »);

while (!feof($p)) {
$l=fgets($p,1024);
print $l;
}
pclose($p);
}

?>

Vous l’aurez compris, pour fonctionner ce programme nécessite la présence de mplayer et des codecs qui vont bien.

Cette page s’utilise ensuite avec comme paramètre fichier= »emplacement de la vidéo ».
Quelques problèmes persistent :

  • Usage CPU important (plus que necessaire je pense)
  • Persistance des commandes mencoder (mais heureusement en usage CPU nul)
  • Je n’ai pas réussi à intégrer ces pseudo-flv dans un lecteur flv flash (je les lis en streaming avec mplayer)