Import CSV dat - analyza nejcastejsich hodnot – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Import CSV dat - analyza nejcastejsich hodnot – Python – Fórum – Programujte.comImport CSV dat - analyza nejcastejsich hodnot – Python – Fórum – Programujte.com

 

Spuštěný nový filmový web Filmožrouti.cz — vše o Avengers, Pacific Rim, Thor, Star Wars…
Petr
~ Anonymní uživatel
722 příspěvků
9. 1. 2018   #1
-
0
-

Ahoj.
Predem bych rád zdúraznil že jsem jsem zacatecnik a pythona jsem si zvolil jelikož potrebuju analyzovat ted i v budoucnu vetsi mnozství dat.
Mám "csv" soubory s rozpetím statisíců až miliony řádku . 

Otazka je jak správne data nacist data z csv souboru a nadale z nich vytahnout nejcasteji se opakovane hodnoty a jejich pocet.
 
Nacitam soubor pres pandase jako dataframe. Ale potom se potykam s castymi errory. 
Ten posledni je ze k provedeni prikazu potrebuji 1-dimenzionalni pole. 

Jak nacitate csv soubor vy, aby s nimi byla dale nadna manipulace?

Dekuji

Nahlásit jako SPAM
IP: 78.102.151.–
Kit+14
Guru
9. 1. 2018   #2
-
0
-

#1 Petr
CSV během načítání ukládám do databáze. S daty se pak pracuje mnohem pohodlněji, šetří to RAM a je to prakticky bez limitu velikosti.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Petr
~ Anonymní uživatel
722 příspěvků
10. 1. 2018   #3
-
0
-

#2 Kit
Aha, super. A poskytnes mi tu cast kodu kde to nacitas do databze? :)
Diky

Nahlásit jako SPAM
IP: 193.86.236.–
Kit+14
Guru
10. 1. 2018   #4
-
0
-

#3 Petr

<?php
$options = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
);
$dsn = "mysql:host=localhost;dbname=test;charset=utf8";
$pdo = new PDO($dsn, null, null, $options);
$pdo->exec("DROP TABLE IF EXISTS csv_import");
$pdo->exec("CREATE TABLE csv_import(
    id serial,
    nazev varchar(30),
    cena decimal(12,2)
)");
$insert = $pdo->prepare("INSERT INTO csv_import(nazev, cena)
    VALUES (?, ?)
");
$csv = fopen("data.csv", "r");
while(!feof($csv)) {
    $line = fgetcsv($csv, 4096, ',', '"');
    $insert->execute($line);
}

Vyzkoušeno, funkční. Ošetření chybových stavů si snad doděláš sám dle vlastních potřeb.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
petr
~ Anonymní uživatel
722 příspěvků
30. 1. 2018   #5
-
0
-

#4 Kit
To je divnej python, co?

Nahlásit jako SPAM
IP: 37.188.238.–
petr
~ Anonymní uživatel
722 příspěvků
30. 1. 2018   #6
-
0
-

Na načítání CSV dat je v Pythonu k dispozici kupodivu csv modul. Tady je hezký příklad převodu csv souboru do html tabulky, z toho si odvodíš jak se to dělá:

http://python.wraith.cz/ukazky-csv2html.php

#!/bin/env python
from csv     import reader
from os.path import isfile
from sys     import argv, exit

def quit():
    print "\nStiskni ENTER pro konec..."
    raw_input()
    exit()

def main():
    if  len(argv) < 2:
        print "Zadej CSV soubor jako parametr."
        quit()

    csvPath = argv[1]

    if  not isfile(csvPath):
        print "Soubor '%s' neexistuje." % csvPath
        quit()

    csvFile = open(csvPath, 'rb')
    parser  = reader(csvFile, dialect='excel', delimiter=';')

    html = ['<table>']

    for i, row in enumerate(parser):
        eo = 'odd' if i % 2 else 'even'
        html.append('  <tr class="%s row%d">' % (eo, i))
        for j, cell in enumerate(row):
            cell = cell.replace('&', '&amp;')
            cell = cell.replace('<', '&lt;')
            html.append('    <td class="col%d cell%d-%d">%s</td>' % (j, i, j, cell))
        html.append('  </tr>')

    html.append('</table>')

    htmlTxt = '\n'.join(html)

    htmlFile = open(csvPath + '.html', 'wt')
    htmlFile.write(htmlTxt)
    htmlFile.close()

    print "\n\nHOTOVO"
    quit()

try:
    print "Konverze csv souboru do html tabulky."
    print "Copyright (c) 2007, Petr Mach, gsl@seznam.cz"
    print "Licence: GPL v 2.0, http://www.gnu.org/…gpl-2.0.html"
    print
    main()
except Exception, e:
    print "\n\nZACHYCENA CHYBA V PROGRAMU:\n"
    print e
    quit()
Nahlásit jako SPAM
IP: 37.188.238.–
Kit+14
Guru
30. 1. 2018   #7
-
0
-

#5 petr
No jo, tak to dopadá, když přehlédnu nadpis a někdo v otázce neuvede jazyk.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3320 příspěvků
30. 1. 2018   #8
-
0
-

Nevim teda, jak je to v pythonu s moduly, ale v php dost casto peru s kodovanim server latin-1, win excel win-1250,  jiny csv ala excel UTF-8 a jeste dalsi csv ala excel UTF-8 + BOM. V tom kodu programu se kodovani vubec neresi. Ani treba detailni nastaveni escape znaku. V PHP to take neni nic moc.

Zmineny py priklad neobsahuje import do db. Obavam se, ze tazatel je ten typ, dejte mi zadarmo hotove reseni, na kterem jste pracovali pul roku.

Oficialni dokumentace je chaoticka.
https://docs.python.org/…ary/csv.html
Schvalne porovnej s PHP. (nevim, zda csv ma uz modul, ale v te dokumentaci jasne vidis jake parametry ta funkce muze mit. U pythonu asi precetl slovo od slova a vybral z toho, co je treba)
http://php.net/….fgetcsv.php

Nahlásit jako SPAM
IP: 2001:718:2601:258:61c0:c9...–
petr
~ Anonymní uživatel
722 příspěvků
30. 1. 2018   #9
-
0
-

#8 peter
Poporade.

1) je to priklad jak nacist csv v pythonu, kazda zbytecna slozitost navic jen zneprehledni samo pouzivani csv

2) kodovani neni treba resit, vysledna html tabulka bude v kodovani v kterem bude predlozeno csv, takze viz pravidlo 1

3) tazatel se vylozene ptal, jak nacist data z csv souboru, po ukladani do DB se neptal, takze viz pravidlo 1.

4) escape znaky se resi, osefuje si to reader z csv modulu, kteremu bylo receno ze dialect=excel

5) oficialni dokumentace je kompletni a chaoticka neni, nikdy jsem nic vic nepotreboval, do zacatku uplne staci kapitola 4.1.5 Examples, ktera sama o sobe prumerne inteligentnimu programatorovi postaci.

6) porovnani s php nema smysl, protoze tvuj odkaz pro php popisuje jednu primitivni funkci na nacteni dat, kdezto dokumentace pythonu popisuje cely csv modul pro komplexni praci s csv, tedy nejen cteni, ale zapis, prace nejen s polem ale i slovnikem, praci s dialekty a mnohe dalsi vychytavky, to cele v objektovam provedeni s moznosti odvozovani vlastnich trid dedenim a tak dale. 

Nahlásit jako SPAM
IP: 109.80.105.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

Podobná vlákna

Analýza databáze v CSV — založil Zemi44

Import z CSV formát datumu — založil kralik

Zápis dat do CSV z UDP — založil Michal

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý